diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2009-11-11 13:44:46 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2009-11-11 13:44:46 +0300 |
commit | 2e3326c1533e992ef7eaa43ed876375af4db5de1 (patch) | |
tree | fe0adcbf314053bd3c079abd4692dea851231aac /source/blender | |
parent | 7fe52eedba00a3008d56ad0d689ed27fcf658220 (diff) | |
parent | e4f10565ea6b4a9015bd5a9e81b77d1d549e9b46 (diff) |
Sculpt: svn merge https://svn.blender.org/svnroot/bf-blender/trunk/blender -r24330:24483
Diffstat (limited to 'source/blender')
368 files changed, 22188 insertions, 24691 deletions
diff --git a/source/blender/blenfont/intern/blf_font.c b/source/blender/blenfont/intern/blf_font.c index 8721e49f06b..c1b54c393c7 100644 --- a/source/blender/blenfont/intern/blf_font.c +++ b/source/blender/blenfont/intern/blf_font.c @@ -46,7 +46,7 @@ #include "BLI_blenlib.h" #include "BLI_linklist.h" /* linknode */ #include "BLI_string.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BIF_gl.h" #include "BLF_api.h" @@ -459,7 +459,7 @@ static void blf_font_fill(FontBLF *font) font->pos[0]= 0.0f; font->pos[1]= 0.0f; font->angle= 0.0f; - Mat4One(font->mat); + unit_m4(font->mat); font->clip_rec.xmin= 0.0f; font->clip_rec.xmax= 0.0f; font->clip_rec.ymin= 0.0f; diff --git a/source/blender/blenfont/intern/blf_glyph.c b/source/blender/blenfont/intern/blf_glyph.c index 7d1e43a38df..1174197dce7 100644 --- a/source/blender/blenfont/intern/blf_glyph.c +++ b/source/blender/blenfont/intern/blf_glyph.c @@ -131,7 +131,8 @@ void blf_glyph_cache_free(GlyphCacheBLF *gc) } } - glDeleteTextures(gc->cur_tex+1, gc->textures); + if (gc->cur_tex+1 > 0) + glDeleteTextures(gc->cur_tex+1, gc->textures); free((void *)gc->textures); MEM_freeN(gc); } diff --git a/source/blender/blenkernel/BKE_cloth.h b/source/blender/blenkernel/BKE_cloth.h index e5b3adbd0c0..54dd82317fc 100644 --- a/source/blender/blenkernel/BKE_cloth.h +++ b/source/blender/blenkernel/BKE_cloth.h @@ -38,7 +38,7 @@ #include "BKE_DerivedMesh.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_edgehash.h" #include "DNA_cloth_types.h" diff --git a/source/blender/blenkernel/BKE_constraint.h b/source/blender/blenkernel/BKE_constraint.h index 6446b48d553..f957c5e17d4 100644 --- a/source/blender/blenkernel/BKE_constraint.h +++ b/source/blender/blenkernel/BKE_constraint.h @@ -52,7 +52,7 @@ typedef struct bConstraintOb { float startmat[4][4]; /* original matrix (before constraint solving) */ short type; /* type of owner */ - short rotOrder; /* rotation order for constraint owner (as defined in eEulerRotationOrders in BLI_arithb.h) */ + short rotOrder; /* rotation order for constraint owner (as defined in eEulerRotationOrders in BLI_math.h) */ } bConstraintOb; /* ---------------------------------------------------------------------------- */ diff --git a/source/blender/blenkernel/BKE_context.h b/source/blender/blenkernel/BKE_context.h index feba39ee11d..7f64538b10d 100644 --- a/source/blender/blenkernel/BKE_context.h +++ b/source/blender/blenkernel/BKE_context.h @@ -174,7 +174,7 @@ PointerRNA CTX_data_pointer_get(const bContext *C, const char *member); PointerRNA CTX_data_pointer_get_type(const bContext *C, const char *member, StructRNA *type); ListBase CTX_data_collection_get(const bContext *C, const char *member); ListBase CTX_data_dir_get(const bContext *C); -void CTX_data_get(const bContext *C, const char *member, PointerRNA *r_ptr, ListBase *r_lb); +int CTX_data_get(const bContext *C, const char *member, PointerRNA *r_ptr, ListBase *r_lb); void CTX_data_id_pointer_set(bContextDataResult *result, struct ID *id); void CTX_data_pointer_set(bContextDataResult *result, struct ID *id, StructRNA *type, void *data); diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h index 66776d086d6..f9130e24a08 100644 --- a/source/blender/blenkernel/BKE_node.h +++ b/source/blender/blenkernel/BKE_node.h @@ -53,6 +53,7 @@ struct GPUMaterial; struct GPUNode; struct GPUNodeStack; struct PointerRNA; +struct bContext; /* ************** NODE TYPE DEFINITIONS ***** */ @@ -83,7 +84,7 @@ typedef struct bNodeType { void (*execfunc)(void *data, struct bNode *, struct bNodeStack **, struct bNodeStack **); /* this line is set on startup of blender */ - void (*uifunc)(struct uiLayout *, struct PointerRNA *ptr); + void (*uifunc)(struct uiLayout *, struct bContext *C, struct PointerRNA *ptr); void (*initfunc)(struct bNode *); void (*freestoragefunc)(struct bNode *); @@ -161,6 +162,7 @@ void nodeVerifyType(struct bNodeTree *ntree, struct bNode *node); void nodeAddToPreview(struct bNode *, float *, int, int); void nodeUnlinkNode(struct bNodeTree *ntree, struct bNode *node); +void nodeUniqueName(struct bNodeTree *ntree, struct bNode *node); void nodeAddSockets(struct bNode *node, struct bNodeType *ntype); struct bNode *nodeAddNodeType(struct bNodeTree *ntree, int type, struct bNodeTree *ngroup, struct ID *id); void nodeRegisterType(struct ListBase *typelist, const struct bNodeType *ntype) ; diff --git a/source/blender/blenkernel/intern/BME_tools.c b/source/blender/blenkernel/intern/BME_tools.c index 32065ea5151..d92e8fe4227 100644 --- a/source/blender/blenkernel/intern/BME_tools.c +++ b/source/blender/blenkernel/intern/BME_tools.c @@ -42,7 +42,7 @@ #include "BKE_utildefines.h" #include "BKE_bmesh.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" /*split this all into a seperate bevel.c file in src*/ @@ -88,7 +88,7 @@ BME_TransData *BME_assign_transdata(BME_TransData_Head *td, BME_Mesh *bm, BME_Ve else if (org != NULL) VECCOPY(vtd->org,org); if (vec != NULL) { VECCOPY(vtd->vec,vec); - Normalize(vtd->vec); + normalize_v3(vtd->vec); } vtd->loc = loc; @@ -261,7 +261,7 @@ static BME_Vert *BME_split_edge(BME_Mesh *bm, BME_Vert *v, BME_Edge *e, BME_Edge nv = BME_SEMV(bm,v,e,ne); if (nv == NULL) return NULL; VECSUB(nv->co,v2->co,v->co); - len = VecLength(nv->co); + len = len_v3(nv->co); VECADDFAC(nv->co,v->co,nv->co,len*percent); nv->flag = v->flag; nv->bweight = v->bweight; @@ -335,17 +335,17 @@ static int BME_bevel_get_vec(float *vec, BME_Vert *v1, BME_Vert *v2, BME_TransDa /* compare the transform origins to see if we can use the vert co's; * if they belong to different origins, then we will use the origins to determine * the vector */ - if (VecCompare(vtd1->org,vtd2->org,0.000001f)) { + if (compare_v3v3(vtd1->org,vtd2->org,0.000001f)) { VECSUB(vec,v2->co,v1->co); - if (VecLength(vec) < 0.000001f) { - VecMulf(vec,0); + if (len_v3(vec) < 0.000001f) { + mul_v3_fl(vec,0); } return 0; } else { VECSUB(vec,vtd2->org,vtd1->org); - if (VecLength(vec) < 0.000001f) { - VecMulf(vec,0); + if (len_v3(vec) < 0.000001f) { + mul_v3_fl(vec,0); } return 1; } @@ -363,18 +363,18 @@ static int BME_bevel_get_vec(float *vec, BME_Vert *v1, BME_Vert *v2, BME_TransDa static float BME_bevel_project_vec(float *vec1, float *vec2, float *up_vec, int is_forward, BME_TransData_Head *td) { float factor, vec3[3], tmp[3],c1,c2; - Crossf(tmp,vec1,vec2); - Normalize(tmp); - factor = Inpf(up_vec,tmp); + cross_v3_v3v3(tmp,vec1,vec2); + normalize_v3(tmp); + factor = dot_v3v3(up_vec,tmp); if ((factor > 0 && is_forward) || (factor < 0 && !is_forward)) { - Crossf(vec3,vec2,tmp); /* hmm, maybe up_vec should be used instead of tmp */ + cross_v3_v3v3(vec3,vec2,tmp); /* hmm, maybe up_vec should be used instead of tmp */ } else { - Crossf(vec3,tmp,vec2); /* hmm, maybe up_vec should be used instead of tmp */ + cross_v3_v3v3(vec3,tmp,vec2); /* hmm, maybe up_vec should be used instead of tmp */ } - Normalize(vec3); - c1 = Inpf(vec3,vec1); - c2 = Inpf(vec1,vec1); + normalize_v3(vec3); + c1 = dot_v3v3(vec3,vec1); + c2 = dot_v3v3(vec1,vec1); if (fabs(c1) < 0.000001f || fabs(c2) < 0.000001f) { factor = 0.0f; } @@ -435,8 +435,8 @@ static BME_Vert *BME_bevel_split_edge(BME_Mesh *bm, BME_Vert *v, BME_Vert *v1, B ne->tflag1 = BME_BEVEL_ORIG; /* mark edge as original, even though it isn't */ BME_bevel_get_vec(vec1,v1,v,td); BME_bevel_get_vec(vec2,v2,v,td); - Crossf(t_up_vec,vec1,vec2); - Normalize(t_up_vec); + cross_v3_v3v3(t_up_vec,vec1,vec2); + normalize_v3(t_up_vec); up_vec = t_up_vec; } else { @@ -486,8 +486,8 @@ static BME_Vert *BME_bevel_split_edge(BME_Mesh *bm, BME_Vert *v, BME_Vert *v1, B is_edge = BME_bevel_get_vec(vec1,v,v1,td); /* get the vector we will be projecting onto */ BME_bevel_get_vec(vec2,v,v2,td); /* get the vector we will be projecting parallel to */ - len = VecLength(vec1); - Normalize(vec1); + len = len_v3(vec1); + normalize_v3(vec1); vtd = BME_get_transdata(td, sv); vtd1 = BME_get_transdata(td, v); @@ -525,8 +525,8 @@ static BME_Vert *BME_bevel_split_edge(BME_Mesh *bm, BME_Vert *v, BME_Vert *v1, B } VECADDFAC(sv->co,v->co,vec1,dis); VECSUB(vec1,sv->co,vtd1->org); - dis = VecLength(vec1); - Normalize(vec1); + dis = len_v3(vec1); + normalize_v3(vec1); BME_assign_transdata(td, bm, sv, vtd1->org, vtd1->org, vec1, sv->co, dis, scale, maxfactor, vtd->max); return sv; @@ -545,10 +545,10 @@ static float BME_bevel_set_max(BME_Vert *v1, BME_Vert *v2, float value, BME_Tran } else { VECCOPY(vec2,vtd1->vec); - VecMulf(vec2,vtd1->factor); - if (Inpf(vec1, vec1)) { - Projf(vec2,vec2,vec1); - fac1 = VecLength(vec2)/value; + mul_v3_fl(vec2,vtd1->factor); + if (dot_v3v3(vec1, vec1)) { + project_v3_v3v3(vec2,vec2,vec1); + fac1 = len_v3(vec2)/value; } else { fac1 = 0; @@ -560,10 +560,10 @@ static float BME_bevel_set_max(BME_Vert *v1, BME_Vert *v2, float value, BME_Tran } else { VECCOPY(vec3,vtd2->vec); - VecMulf(vec3,vtd2->factor); - if (Inpf(vec1, vec1)) { - Projf(vec2,vec3,vec1); - fac2 = VecLength(vec2)/value; + mul_v3_fl(vec3,vtd2->factor); + if (dot_v3v3(vec1, vec1)) { + project_v3_v3v3(vec2,vec3,vec1); + fac2 = len_v3(vec2)/value; } else { fac2 = 0; @@ -571,7 +571,7 @@ static float BME_bevel_set_max(BME_Vert *v1, BME_Vert *v2, float value, BME_Tran } if (fac1 || fac2) { - max = VecLength(vec1)/(fac1 + fac2); + max = len_v3(vec1)/(fac1 + fac2); if (vtd1->max && (*vtd1->max < 0 || max < *vtd1->max)) { *vtd1->max = max; } @@ -760,12 +760,12 @@ static BME_Poly *BME_bevel_poly(BME_Mesh *bm, BME_Poly *f, float value, int opti for (i=0,ol=f->loopbase,l=ol->next; l->next!=ol; l=l->next) { BME_bevel_get_vec(vec1,l->next->v,ol->v,td); BME_bevel_get_vec(vec2,l->v,ol->v,td); - Crossf(vec3,vec2,vec1); + cross_v3_v3v3(vec3,vec2,vec1); VECADD(up_vec,up_vec,vec3); i++; } - VecMulf(up_vec,1.0f/i); - Normalize(up_vec); + mul_v3_fl(up_vec,1.0f/i); + normalize_v3(up_vec); for (i=0,len=f->len; i<len; i++,l=l->next) { if ((l->e->tflag1 & BME_BEVEL_BEVEL) && (l->e->tflag1 & BME_BEVEL_ORIG)) { @@ -791,10 +791,10 @@ static BME_Poly *BME_bevel_poly(BME_Mesh *bm, BME_Poly *f, float value, int opti } else { VECCOPY(vec2,vtd1->vec); - VecMulf(vec2,vtd1->factor); - if (Inpf(vec1, vec1)) { - Projf(vec2,vec2,vec1); - fac1 = VecLength(vec2)/value; + mul_v3_fl(vec2,vtd1->factor); + if (dot_v3v3(vec1, vec1)) { + project_v3_v3v3(vec2,vec2,vec1); + fac1 = len_v3(vec2)/value; } else { fac1 = 0; @@ -805,17 +805,17 @@ static BME_Poly *BME_bevel_poly(BME_Mesh *bm, BME_Poly *f, float value, int opti } else { VECCOPY(vec3,vtd2->vec); - VecMulf(vec3,vtd2->factor); - if (Inpf(vec1, vec1)) { - Projf(vec2,vec3,vec1); - fac2 = VecLength(vec2)/value; + mul_v3_fl(vec3,vtd2->factor); + if (dot_v3v3(vec1, vec1)) { + project_v3_v3v3(vec2,vec3,vec1); + fac2 = len_v3(vec2)/value; } else { fac2 = 0; } } if (fac1 || fac2) { - max = VecLength(vec1)/(fac1 + fac2); + max = len_v3(vec1)/(fac1 + fac2); if (vtd1->max && (*vtd1->max < 0 || max < *vtd1->max)) { *vtd1->max = max; } @@ -880,7 +880,7 @@ static float BME_bevel_get_angle(BME_Mesh *bm, BME_Edge *e, BME_Vert *v) { } VECSUB(vec1,v1->co,v->co); VECSUB(vec2,v2->co,v->co); - Crossf(vec3,vec1,vec2); + cross_v3_v3v3(vec3,vec1,vec2); l1 = l2; if (l1->v == v) { @@ -893,12 +893,12 @@ static float BME_bevel_get_angle(BME_Mesh *bm, BME_Edge *e, BME_Vert *v) { } VECSUB(vec1,v1->co,v->co); VECSUB(vec2,v2->co,v->co); - Crossf(vec4,vec2,vec1); + cross_v3_v3v3(vec4,vec2,vec1); - Normalize(vec3); - Normalize(vec4); + normalize_v3(vec3); + normalize_v3(vec4); - return Inpf(vec3,vec4); + return dot_v3v3(vec3,vec4); } static int BME_face_sharededges(BME_Poly *f1, BME_Poly *f2){ BME_Loop *l; diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c index 11e58203bb3..f9abaa9da02 100644 --- a/source/blender/blenkernel/intern/DerivedMesh.c +++ b/source/blender/blenkernel/intern/DerivedMesh.c @@ -52,7 +52,7 @@ #include "DNA_space_types.h" #include "DNA_particle_types.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_edgehash.h" #include "BLI_editVert.h" @@ -619,20 +619,20 @@ static void emDM__calcFaceCent(EditFace *efa, float cent[3], float (*vertexCos)[ { if (vertexCos) { VECCOPY(cent, vertexCos[(int) efa->v1->tmp.l]); - VecAddf(cent, cent, vertexCos[(int) efa->v2->tmp.l]); - VecAddf(cent, cent, vertexCos[(int) efa->v3->tmp.l]); - if (efa->v4) VecAddf(cent, cent, vertexCos[(int) efa->v4->tmp.l]); + add_v3_v3v3(cent, cent, vertexCos[(int) efa->v2->tmp.l]); + add_v3_v3v3(cent, cent, vertexCos[(int) efa->v3->tmp.l]); + if (efa->v4) add_v3_v3v3(cent, cent, vertexCos[(int) efa->v4->tmp.l]); } else { VECCOPY(cent, efa->v1->co); - VecAddf(cent, cent, efa->v2->co); - VecAddf(cent, cent, efa->v3->co); - if (efa->v4) VecAddf(cent, cent, efa->v4->co); + add_v3_v3v3(cent, cent, efa->v2->co); + add_v3_v3v3(cent, cent, efa->v3->co); + if (efa->v4) add_v3_v3v3(cent, cent, efa->v4->co); } if (efa->v4) { - VecMulf(cent, 0.25f); + mul_v3_fl(cent, 0.25f); } else { - VecMulf(cent, 0.33333333333f); + mul_v3_fl(cent, 0.33333333333f); } } static void emDM_foreachMappedFaceCenter(DerivedMesh *dm, void (*func)(void *userData, int index, float *co, float *no), void *userData) @@ -1498,25 +1498,25 @@ static DerivedMesh *getEditMeshDerivedMesh(EditMesh *em, Object *ob, if(efa->v4) { float *v4 = vertexCos[(int) efa->v4->tmp.l]; - CalcNormFloat4(v1, v2, v3, v4, no); - VecAddf(emdm->vertexNos[(int) efa->v4->tmp.l], emdm->vertexNos[(int) efa->v4->tmp.l], no); + normal_quad_v3( no,v1, v2, v3, v4); + add_v3_v3v3(emdm->vertexNos[(int) efa->v4->tmp.l], emdm->vertexNos[(int) efa->v4->tmp.l], no); } else { - CalcNormFloat(v1, v2, v3, no); + normal_tri_v3( no,v1, v2, v3); } - VecAddf(emdm->vertexNos[(int) efa->v1->tmp.l], emdm->vertexNos[(int) efa->v1->tmp.l], no); - VecAddf(emdm->vertexNos[(int) efa->v2->tmp.l], emdm->vertexNos[(int) efa->v2->tmp.l], no); - VecAddf(emdm->vertexNos[(int) efa->v3->tmp.l], emdm->vertexNos[(int) efa->v3->tmp.l], no); + add_v3_v3v3(emdm->vertexNos[(int) efa->v1->tmp.l], emdm->vertexNos[(int) efa->v1->tmp.l], no); + add_v3_v3v3(emdm->vertexNos[(int) efa->v2->tmp.l], emdm->vertexNos[(int) efa->v2->tmp.l], no); + add_v3_v3v3(emdm->vertexNos[(int) efa->v3->tmp.l], emdm->vertexNos[(int) efa->v3->tmp.l], no); } for(i=0, eve= em->verts.first; eve; i++, eve=eve->next) { float *no = emdm->vertexNos[i]; /* following Mesh convention; we use vertex coordinate itself * for normal in this case */ - if (Normalize(no)==0.0) { + if (normalize_v3(no)==0.0) { VECCOPY(no, vertexCos[i]); - Normalize(no); + normalize_v3(no); } } } @@ -2482,7 +2482,7 @@ int editmesh_get_first_deform_matrices(Object *ob, EditMesh *em, float (**deform defmats= MEM_callocN(sizeof(*defmats)*numVerts, "defmats"); for(a=0; a<numVerts; a++) - Mat3One(defmats[a]); + unit_m3(defmats[a]); } mti->deformMatricesEM(md, ob, em, dm, deformedVerts, defmats, @@ -2554,11 +2554,11 @@ void DM_add_tangent_layer(DerivedMesh *dm) if (mf->v4) { v4= &mvert[mf->v4]; - CalcNormFloat4(v4->co, v3->co, v2->co, v1->co, fno); + normal_quad_v3( fno,v4->co, v3->co, v2->co, v1->co); } else { v4= NULL; - CalcNormFloat(v3->co, v2->co, v1->co, fno); + normal_tri_v3( fno,v3->co, v2->co, v1->co); } if(mtface) { @@ -2569,11 +2569,11 @@ void DM_add_tangent_layer(DerivedMesh *dm) } else { uv1= uv[0]; uv2= uv[1]; uv3= uv[2]; uv4= uv[3]; - spheremap(orco[mf->v1][0], orco[mf->v1][1], orco[mf->v1][2], &uv[0][0], &uv[0][1]); - spheremap(orco[mf->v2][0], orco[mf->v2][1], orco[mf->v2][2], &uv[1][0], &uv[1][1]); - spheremap(orco[mf->v3][0], orco[mf->v3][1], orco[mf->v3][2], &uv[2][0], &uv[2][1]); + map_to_sphere( &uv[0][0], &uv[0][1],orco[mf->v1][0], orco[mf->v1][1], orco[mf->v1][2]); + map_to_sphere( &uv[1][0], &uv[1][1],orco[mf->v2][0], orco[mf->v2][1], orco[mf->v2][2]); + map_to_sphere( &uv[2][0], &uv[2][1],orco[mf->v3][0], orco[mf->v3][1], orco[mf->v3][2]); if(v4) - spheremap(orco[mf->v4][0], orco[mf->v4][1], orco[mf->v4][2], &uv[3][0], &uv[3][1]); + map_to_sphere( &uv[3][0], &uv[3][1],orco[mf->v4][0], orco[mf->v4][1], orco[mf->v4][2]); } tangent_from_uv(uv1, uv2, uv3, v1->co, v2->co, v3->co, fno, tang); @@ -2603,11 +2603,11 @@ void DM_add_tangent_layer(DerivedMesh *dm) } else { uv1= uv[0]; uv2= uv[1]; uv3= uv[2]; uv4= uv[3]; - spheremap(orco[mf->v1][0], orco[mf->v1][1], orco[mf->v1][2], &uv[0][0], &uv[0][1]); - spheremap(orco[mf->v2][0], orco[mf->v2][1], orco[mf->v2][2], &uv[1][0], &uv[1][1]); - spheremap(orco[mf->v3][0], orco[mf->v3][1], orco[mf->v3][2], &uv[2][0], &uv[2][1]); + map_to_sphere( &uv[0][0], &uv[0][1],orco[mf->v1][0], orco[mf->v1][1], orco[mf->v1][2]); + map_to_sphere( &uv[1][0], &uv[1][1],orco[mf->v2][0], orco[mf->v2][1], orco[mf->v2][2]); + map_to_sphere( &uv[2][0], &uv[2][1],orco[mf->v3][0], orco[mf->v3][1], orco[mf->v3][2]); if(len==4) - spheremap(orco[mf->v4][0], orco[mf->v4][1], orco[mf->v4][2], &uv[3][0], &uv[3][1]); + map_to_sphere( &uv[3][0], &uv[3][1],orco[mf->v4][0], orco[mf->v4][1], orco[mf->v4][2]); } mf_vi[0]= mf->v1; @@ -2619,7 +2619,7 @@ void DM_add_tangent_layer(DerivedMesh *dm) vtang= find_vertex_tangent(vtangents[mf_vi[j]], mtface ? tf->uv[j] : uv[j]); VECCOPY(tangent[j], vtang); - Normalize(tangent[j]); + normalize_v3(tangent[j]); } } diff --git a/source/blender/blenkernel/intern/action.c b/source/blender/blenkernel/intern/action.c index 2dec76d1b6b..358a482c3cf 100644 --- a/source/blender/blenkernel/intern/action.c +++ b/source/blender/blenkernel/intern/action.c @@ -64,7 +64,7 @@ #include "BKE_utildefines.h" #include "BIK_api.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_ghash.h" @@ -453,7 +453,7 @@ bPoseChannel *verify_pose_channel(bPose* pose, const char* name) chan->limitmax[0]= chan->limitmax[1]= chan->limitmax[2]= 180.0f; chan->stiffness[0]= chan->stiffness[1]= chan->stiffness[2]= 0.0f; chan->ikrotweight = chan->iklinweight = 0.0f; - Mat4One(chan->constinv); + unit_m4(chan->constinv); BLI_addtail(&pose->chanbase, chan); @@ -471,7 +471,7 @@ bPoseChannel *get_active_posechannel (Object *ob) /* find active */ for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { - if ((pchan->bone) && (pchan->bone->flag & BONE_ACTIVE) && (pchan->bone->layer & arm->layer)) + if ((pchan->bone) && (pchan->bone == arm->act_bone) && (pchan->bone->layer & arm->layer)) return pchan; } @@ -611,8 +611,8 @@ static void copy_pose_channel_data(bPoseChannel *pchan, const bPoseChannel *chan pchan->rotAngle= chan->rotAngle; QUATCOPY(pchan->quat, chan->quat); pchan->rotmode= chan->rotmode; - Mat4CpyMat4(pchan->chan_mat, (float(*)[4])chan->chan_mat); - Mat4CpyMat4(pchan->pose_mat, (float(*)[4])chan->pose_mat); + copy_m4_m4(pchan->chan_mat, (float(*)[4])chan->chan_mat); + copy_m4_m4(pchan->pose_mat, (float(*)[4])chan->pose_mat); pchan->flag= chan->flag; con= chan->constraints.first; @@ -1013,8 +1013,8 @@ void copy_pose_result(bPose *to, bPose *from) for(pchanfrom= from->chanbase.first; pchanfrom; pchanfrom= pchanfrom->next) { pchanto= get_pose_channel(to, pchanfrom->name); if(pchanto) { - Mat4CpyMat4(pchanto->pose_mat, pchanfrom->pose_mat); - Mat4CpyMat4(pchanto->chan_mat, pchanfrom->chan_mat); + copy_m4_m4(pchanto->pose_mat, pchanfrom->pose_mat); + copy_m4_m4(pchanto->chan_mat, pchanfrom->chan_mat); /* used for local constraints */ VECCOPY(pchanto->loc, pchanfrom->loc); @@ -1040,9 +1040,9 @@ void what_does_obaction (Scene *scene, Object *ob, Object *workob, bPose *pose, clear_workob(workob); /* init workob */ - Mat4CpyMat4(workob->obmat, ob->obmat); - Mat4CpyMat4(workob->parentinv, ob->parentinv); - Mat4CpyMat4(workob->constinv, ob->constinv); + copy_m4_m4(workob->obmat, ob->obmat); + copy_m4_m4(workob->parentinv, ob->parentinv); + copy_m4_m4(workob->constinv, ob->constinv); workob->parent= ob->parent; workob->track= ob->track; @@ -1109,7 +1109,7 @@ static void blend_pose_strides(bPose *dst, bPose *src, float srcweight, short mo dstweight = 1.0F; } - VecLerpf(dst->stride_offset, dst->stride_offset, src->stride_offset, srcweight); + interp_v3_v3v3(dst->stride_offset, dst->stride_offset, src->stride_offset, srcweight); } @@ -1169,27 +1169,27 @@ static void blend_pose_offset_bone(bActionStrip *strip, bPose *dst, bPose *src, execute_action_ipo(achan, &pchan); /* store offset that moves src to location of pchan */ - VecSubf(vec, dpchan->loc, pchan.loc); + sub_v3_v3v3(vec, dpchan->loc, pchan.loc); - Mat4Mul3Vecfl(dpchan->bone->arm_mat, vec); + mul_mat3_m4_v3(dpchan->bone->arm_mat, vec); } } else { /* store offset that moves src to location of dst */ - VecSubf(vec, dpchan->loc, spchan->loc); - Mat4Mul3Vecfl(dpchan->bone->arm_mat, vec); + sub_v3_v3v3(vec, dpchan->loc, spchan->loc); + mul_mat3_m4_v3(dpchan->bone->arm_mat, vec); } /* if blending, we only add with factor scrweight */ - VecMulf(vec, srcweight); + mul_v3_fl(vec, srcweight); - VecAddf(dst->cyclic_offset, dst->cyclic_offset, vec); + add_v3_v3v3(dst->cyclic_offset, dst->cyclic_offset, vec); } } } - VecAddf(dst->cyclic_offset, dst->cyclic_offset, src->cyclic_offset); + add_v3_v3v3(dst->cyclic_offset, dst->cyclic_offset, src->cyclic_offset); } /* added "sizecorr" here, to allow armatures to be scaled and still have striding. @@ -1249,14 +1249,14 @@ static float stridechannel_frame(Object *ob, float sizecorr, bActionStrip *strip if (pdistNewNormalized <= 1) { // search for correction in positive path-direction where_on_path(ob, pdistNewNormalized, vec2, dir); /* vec needs size 4 */ - VecSubf(stride_offset, vec2, vec1); + sub_v3_v3v3(stride_offset, vec2, vec1); } else { // we reached the end of the path, search backwards instead where_on_path(ob, (pathdist-pdist)/path->totdist, vec2, dir); /* vec needs size 4 */ - VecSubf(stride_offset, vec1, vec2); + sub_v3_v3v3(stride_offset, vec1, vec2); } - Mat4Mul3Vecfl(ob->obmat, stride_offset); + mul_mat3_m4_v3(ob->obmat, stride_offset); return striptime; } } @@ -1295,10 +1295,10 @@ static void cyclic_offs_bone(Object *ob, bPose *pose, bActionStrip *strip, float } if(foundvert) { /* bring it into armature space */ - VecSubf(min, max, min); + sub_v3_v3v3(min, max, min); bone= get_named_bone(ob->data, strip->offs_bone); /* weak */ if(bone) { - Mat4Mul3Vecfl(bone->arm_mat, min); + mul_mat3_m4_v3(bone->arm_mat, min); /* dominant motion, cyclic_offset was cleared in rest_pose */ if (strip->flag & (ACTSTRIP_CYCLIC_USEX | ACTSTRIP_CYCLIC_USEY | ACTSTRIP_CYCLIC_USEZ)) { @@ -1549,7 +1549,7 @@ static void do_nla(Scene *scene, Object *ob, int blocktype) } else if(blocktype==ID_AR) { /* apply stride offset to object */ - VecAddf(ob->obmat[3], ob->obmat[3], ob->pose->stride_offset); + add_v3_v3v3(ob->obmat[3], ob->obmat[3], ob->pose->stride_offset); } /* free */ diff --git a/source/blender/blenkernel/intern/anim.c b/source/blender/blenkernel/intern/anim.c index 5cae2418e89..a1b138b9a74 100644 --- a/source/blender/blenkernel/intern/anim.c +++ b/source/blender/blenkernel/intern/anim.c @@ -35,7 +35,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" #include "BLI_editVert.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_rand.h" #include "DNA_listBase.h" @@ -134,11 +134,11 @@ void calc_curvepath(Object *ob) for(a=0; a<tot; a++) { fp++; if(cycl && a==tot-1) - VecSubf(xyz, bevpfirst->vec, bevp->vec); + sub_v3_v3v3(xyz, bevpfirst->vec, bevp->vec); else - VecSubf(xyz, (bevp+1)->vec, bevp->vec); + sub_v3_v3v3(xyz, (bevp+1)->vec, bevp->vec); - *fp= *(fp-1)+VecLength(xyz); + *fp= *(fp-1)+len_v3(xyz); bevp++; } @@ -176,11 +176,11 @@ void calc_curvepath(Object *ob) fac1= fac2/fac1; fac2= 1.0f-fac1; - VecLerpf(pp->vec, bevp->vec, bevpn->vec, fac2); + interp_v3_v3v3(pp->vec, bevp->vec, bevpn->vec, fac2); pp->vec[3]= fac1*bevp->alfa + fac2*bevpn->alfa; pp->radius= fac1*bevp->radius + fac2*bevpn->radius; - QuatInterpol(pp->quat, bevp->quat, bevpn->quat, fac2); - NormalQuat(pp->quat); + interp_qt_qtqt(pp->quat, bevp->quat, bevpn->quat, fac2); + normalize_qt(pp->quat); pp++; } @@ -284,20 +284,20 @@ int where_on_path(Object *ob, float ctime, float *vec, float *dir, float *quat, * to more then one index in data which can give divide by zero error */ /* totfac= data[0]+data[1]; - if(totfac>0.000001) QuatInterpol(q1, p0->quat, p1->quat, data[0] / totfac); + if(totfac>0.000001) interp_qt_qtqt(q1, p0->quat, p1->quat, data[0] / totfac); else QUATCOPY(q1, p1->quat); - NormalQuat(q1); + normalize_qt(q1); totfac= data[2]+data[3]; - if(totfac>0.000001) QuatInterpol(q2, p2->quat, p3->quat, data[2] / totfac); + if(totfac>0.000001) interp_qt_qtqt(q2, p2->quat, p3->quat, data[2] / totfac); else QUATCOPY(q1, p3->quat); - NormalQuat(q2); + normalize_qt(q2); totfac = data[0]+data[1]+data[2]+data[3]; - if(totfac>0.000001) QuatInterpol(quat, q1, q2, (data[0]+data[1]) / totfac); + if(totfac>0.000001) interp_qt_qtqt(quat, q1, q2, (data[0]+data[1]) / totfac); else QUATCOPY(quat, q2); - NormalQuat(quat); + normalize_qt(quat); */ // XXX - find some way to make quat interpolation work correctly, above code fails in rare but nasty cases. QUATCOPY(quat, p1->quat); @@ -317,8 +317,8 @@ static DupliObject *new_dupli_object(ListBase *lb, Object *ob, float mat[][4], i BLI_addtail(lb, dob); dob->ob= ob; - Mat4CpyMat4(dob->mat, mat); - Mat4CpyMat4(dob->omat, ob->obmat); + copy_m4_m4(dob->mat, mat); + copy_m4_m4(dob->omat, ob->obmat); dob->origlay= ob->lay; dob->index= index; dob->type= type; @@ -352,20 +352,20 @@ static void group_duplilist(ListBase *lb, Scene *scene, Object *ob, int level, i /* Group Dupli Offset, should apply after everything else */ if (group->dupli_ofs[0] || group->dupli_ofs[1] || group->dupli_ofs[2]) { - Mat4CpyMat4(tmat, go->ob->obmat); - VecSubf(tmat[3], tmat[3], group->dupli_ofs); - Mat4MulMat4(mat, tmat, ob->obmat); + copy_m4_m4(tmat, go->ob->obmat); + sub_v3_v3v3(tmat[3], tmat[3], group->dupli_ofs); + mul_m4_m4m4(mat, tmat, ob->obmat); } else { - Mat4MulMat4(mat, go->ob->obmat, ob->obmat); + mul_m4_m4m4(mat, go->ob->obmat, ob->obmat); } dob= new_dupli_object(lb, go->ob, mat, ob->lay, 0, OB_DUPLIGROUP, animated); dob->no_draw= (dob->origlay & group->layer)==0; if(go->ob->transflag & OB_DUPLI) { - Mat4CpyMat4(dob->ob->obmat, dob->mat); + copy_m4_m4(dob->ob->obmat, dob->mat); object_duplilist_recursive((ID *)group, scene, go->ob, lb, ob->obmat, level+1, animated); - Mat4CpyMat4(dob->ob->obmat, dob->omat); + copy_m4_m4(dob->ob->obmat, dob->omat); } } } @@ -402,7 +402,7 @@ static void frames_duplilist(ListBase *lb, Scene *scene, Object *ob, int level, #endif // XXX old animation system where_is_object_time(scene, ob, (float)scene->r.cfra); dob= new_dupli_object(lb, ob, ob->obmat, ob->lay, scene->r.cfra, OB_DUPLIFRAMES, animated); - Mat4CpyMat4(dob->omat, copyob.obmat); + copy_m4_m4(dob->omat, copyob.obmat); } } @@ -430,11 +430,11 @@ static void vertex_dupli__mapFunc(void *userData, int index, float *co, float *n float vec[3], q2[4], mat[3][3], tmat[4][4], obmat[4][4]; VECCOPY(vec, co); - Mat4MulVecfl(vdd->pmat, vec); - VecSubf(vec, vec, vdd->pmat[3]); - VecAddf(vec, vec, vdd->obmat[3]); + mul_m4_v3(vdd->pmat, vec); + sub_v3_v3v3(vec, vec, vdd->pmat[3]); + add_v3_v3v3(vec, vec, vdd->obmat[3]); - Mat4CpyMat4(obmat, vdd->obmat); + copy_m4_m4(obmat, vdd->obmat); VECCOPY(obmat[3], vec); if(vdd->par->transflag & OB_DUPLIROT) { @@ -445,11 +445,11 @@ static void vertex_dupli__mapFunc(void *userData, int index, float *co, float *n vec[0]= -no_s[0]; vec[1]= -no_s[1]; vec[2]= -no_s[2]; } - vectoquat(vec, vdd->ob->trackflag, vdd->ob->upflag, q2); + vec_to_quat( q2,vec, vdd->ob->trackflag, vdd->ob->upflag); - QuatToMat3(q2, mat); - Mat4CpyMat4(tmat, obmat); - Mat4MulMat43(obmat, tmat, mat); + quat_to_mat3( mat,q2); + copy_m4_m4(tmat, obmat); + mul_m4_m4m3(obmat, tmat, mat); } dob= new_dupli_object(vdd->lb, vdd->ob, obmat, vdd->par->lay, index, OB_DUPLIVERTS, vdd->animated); if(vdd->orco) @@ -457,10 +457,10 @@ static void vertex_dupli__mapFunc(void *userData, int index, float *co, float *n if(vdd->ob->transflag & OB_DUPLI) { float tmpmat[4][4]; - Mat4CpyMat4(tmpmat, vdd->ob->obmat); - Mat4CpyMat4(vdd->ob->obmat, obmat); /* pretend we are really this mat */ + copy_m4_m4(tmpmat, vdd->ob->obmat); + copy_m4_m4(vdd->ob->obmat, obmat); /* pretend we are really this mat */ object_duplilist_recursive((ID *)vdd->id, vdd->scene, vdd->ob, vdd->lb, obmat, vdd->level+1, vdd->animated); - Mat4CpyMat4(vdd->ob->obmat, tmpmat); + copy_m4_m4(vdd->ob->obmat, tmpmat); } } @@ -478,7 +478,7 @@ static void vertex_duplilist(ListBase *lb, ID *id, Scene *scene, Object *par, fl float vec[3], no[3], pmat[4][4]; int lay, totvert, a, oblay; - Mat4CpyMat4(pmat, par->obmat); + copy_m4_m4(pmat, par->obmat); /* simple preventing of too deep nested groups */ if(level>MAX_DUPLI_RECUR) return; @@ -533,9 +533,9 @@ static void vertex_duplilist(ListBase *lb, ID *id, Scene *scene, Object *par, fl when par_space_mat is NULL ob->obmat can be used instead of ob__obmat */ if(par_space_mat) - Mat4MulMat4(vdd.obmat, ob->obmat, par_space_mat); + mul_m4_m4m4(vdd.obmat, ob->obmat, par_space_mat); else - Mat4CpyMat4(vdd.obmat, ob->obmat); + copy_m4_m4(vdd.obmat, ob->obmat); vdd.id= id; vdd.level= level; @@ -544,7 +544,7 @@ static void vertex_duplilist(ListBase *lb, ID *id, Scene *scene, Object *par, fl vdd.ob= ob; vdd.scene= scene; vdd.par= par; - Mat4CpyMat4(vdd.pmat, pmat); + copy_m4_m4(vdd.pmat, pmat); /* mballs have a different dupli handling */ if(ob->type!=OB_MBALL) ob->flag |= OB_DONE; /* doesnt render */ @@ -596,7 +596,7 @@ static void face_duplilist(ListBase *lb, ID *id, Scene *scene, Object *par, floa /* simple preventing of too deep nested groups */ if(level>MAX_DUPLI_RECUR) return; - Mat4CpyMat4(pmat, par->obmat); + copy_m4_m4(pmat, par->obmat); em = BKE_mesh_get_editmesh(me); if(em) { @@ -664,11 +664,11 @@ static void face_duplilist(ListBase *lb, ID *id, Scene *scene, Object *par, floa when par_space_mat is NULL ob->obmat can be used instead of ob__obmat */ if(par_space_mat) - Mat4MulMat4(ob__obmat, ob->obmat, par_space_mat); + mul_m4_m4m4(ob__obmat, ob->obmat, par_space_mat); else - Mat4CpyMat4(ob__obmat, ob->obmat); + copy_m4_m4(ob__obmat, ob->obmat); - Mat3CpyMat4(imat, ob->parentinv); + copy_m3_m4(imat, ob->parentinv); /* mballs have a different dupli handling */ if(ob->type!=OB_MBALL) ob->flag |= OB_DONE; /* doesnt render */ @@ -686,34 +686,34 @@ static void face_duplilist(ListBase *lb, ID *id, Scene *scene, Object *par, floa /* translation */ if(v4) - CalcCent4f(cent, v1, v2, v3, v4); + cent_quad_v3(cent, v1, v2, v3, v4); else - CalcCent3f(cent, v1, v2, v3); - Mat4MulVecfl(pmat, cent); + cent_tri_v3(cent, v1, v2, v3); + mul_m4_v3(pmat, cent); - VecSubf(cent, cent, pmat[3]); - VecAddf(cent, cent, ob__obmat[3]); + sub_v3_v3v3(cent, cent, pmat[3]); + add_v3_v3v3(cent, cent, ob__obmat[3]); - Mat4CpyMat4(obmat, ob__obmat); + copy_m4_m4(obmat, ob__obmat); VECCOPY(obmat[3], cent); /* rotation */ - triatoquat(v1, v2, v3, quat); - QuatToMat3(quat, mat); + tri_to_quat( quat,v1, v2, v3); + quat_to_mat3( mat,quat); /* scale */ if(par->transflag & OB_DUPLIFACES_SCALE) { - float size= v4?AreaQ3Dfl(v1, v2, v3, v4):AreaT3Dfl(v1, v2, v3); + float size= v4? area_quad_v3(v1, v2, v3, v4): area_tri_v3(v1, v2, v3); size= sqrt(size) * par->dupfacesca; - Mat3MulFloat(mat[0], size); + mul_m3_fl(mat, size); } - Mat3CpyMat3(mat3, mat); - Mat3MulMat3(mat, imat, mat3); + copy_m3_m3(mat3, mat); + mul_m3_m3m3(mat, imat, mat3); - Mat4CpyMat4(tmat, obmat); - Mat4MulMat43(obmat, tmat, mat); + copy_m4_m4(tmat, obmat); + mul_m4_m4m3(obmat, tmat, mat); dob= new_dupli_object(lb, ob, obmat, lay, a, OB_DUPLIFACES, animated); if(G.rendering) { @@ -744,10 +744,10 @@ static void face_duplilist(ListBase *lb, ID *id, Scene *scene, Object *par, floa if(ob->transflag & OB_DUPLI) { float tmpmat[4][4]; - Mat4CpyMat4(tmpmat, ob->obmat); - Mat4CpyMat4(ob->obmat, obmat); /* pretend we are really this mat */ + copy_m4_m4(tmpmat, ob->obmat); + copy_m4_m4(ob->obmat, obmat); /* pretend we are really this mat */ object_duplilist_recursive((ID *)id, scene, ob, lb, ob->obmat, level+1, animated); - Mat4CpyMat4(ob->obmat, tmpmat); + copy_m4_m4(ob->obmat, tmpmat); } } @@ -935,22 +935,22 @@ static void new_particle_duplilist(ListBase *lb, ID *id, Scene *scene, Object *p if(psys_get_particle_state(&sim, a, &state, 0) == 0) continue; - QuatToMat4(state.rot, pamat); + quat_to_mat4( pamat,state.rot); VECCOPY(pamat[3], state.co); pamat[3][3]= 1.0f; } if(part->ren_as==PART_DRAW_GR && psys->part->draw & PART_DRAW_WHOLE_GR) { for(go= part->dup_group->gobject.first, b=0; go; go= go->next, b++) { - Mat4MulMat4(tmat, oblist[b]->obmat, pamat); - Mat4MulFloat3((float *)tmat, size*scale); + mul_m4_m4m4(tmat, oblist[b]->obmat, pamat); + mul_mat3_m4_fl(tmat, size*scale); if(par_space_mat) - Mat4MulMat4(mat, tmat, par_space_mat); + mul_m4_m4m4(mat, tmat, par_space_mat); else - Mat4CpyMat4(mat, tmat); + copy_m4_m4(mat, tmat); dob= new_dupli_object(lb, go->ob, mat, par->lay, counter, OB_DUPLIPARTS, animated); - Mat4CpyMat4(dob->omat, obcopylist[b].obmat); + copy_m4_m4(dob->omat, obcopylist[b].obmat); if(G.rendering) psys_get_dupli_texture(par, part, sim.psmd, pa, cpa, dob->uv, dob->orco); } @@ -962,21 +962,21 @@ static void new_particle_duplilist(ListBase *lb, ID *id, Scene *scene, Object *p VECCOPY(vec, obmat[3]); obmat[3][0] = obmat[3][1] = obmat[3][2] = 0.0f; - Mat4CpyMat4(mat, pamat); + copy_m4_m4(mat, pamat); - Mat4MulMat4(tmat, obmat, mat); - Mat4MulFloat3((float *)tmat, size*scale); + mul_m4_m4m4(tmat, obmat, mat); + mul_mat3_m4_fl(tmat, size*scale); if(part->draw & PART_DRAW_GLOBAL_OB) VECADD(tmat[3], tmat[3], vec); if(par_space_mat) - Mat4MulMat4(mat, tmat, par_space_mat); + mul_m4_m4m4(mat, tmat, par_space_mat); else - Mat4CpyMat4(mat, tmat); + copy_m4_m4(mat, tmat); dob= new_dupli_object(lb, ob, mat, ob->lay, counter, OB_DUPLIPARTS, animated); - Mat4CpyMat4(dob->omat, oldobmat); + copy_m4_m4(dob->omat, oldobmat); if(G.rendering) psys_get_dupli_texture(par, part, sim.psmd, pa, cpa, dob->uv, dob->orco); } @@ -1037,7 +1037,7 @@ static void font_duplilist(ListBase *lb, Scene *scene, Object *par, int level, i /* simple preventing of too deep nested groups */ if(level>MAX_DUPLI_RECUR) return; - Mat4CpyMat4(pmat, par->obmat); + copy_m4_m4(pmat, par->obmat); /* in par the family name is stored, use this to find the other objects */ @@ -1062,9 +1062,9 @@ static void font_duplilist(ListBase *lb, Scene *scene, Object *par, int level, i vec[1]= fsize*(ct->yof - yof); vec[2]= 0.0; - Mat4MulVecfl(pmat, vec); + mul_m4_v3(pmat, vec); - Mat4CpyMat4(obmat, par->obmat); + copy_m4_m4(obmat, par->obmat); VECCOPY(obmat[3], vec); new_dupli_object(lb, ob, obmat, par->lay, a, OB_DUPLIVERTS, animated); @@ -1122,7 +1122,7 @@ static void object_duplilist_recursive(ID *id, Scene *scene, Object *ob, ListBas if (level==0) { for(dob= duplilist->first; dob; dob= dob->next) if(dob->type == OB_DUPLIGROUP) - Mat4CpyMat4(dob->ob->obmat, dob->mat); + copy_m4_m4(dob->ob->obmat, dob->mat); } } } @@ -1143,7 +1143,7 @@ void free_object_duplilist(ListBase *lb) for(dob= lb->first; dob; dob= dob->next) { dob->ob->lay= dob->origlay; - Mat4CpyMat4(dob->ob->obmat, dob->omat); + copy_m4_m4(dob->ob->obmat, dob->omat); } BLI_freelistN(lb); diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c index 61e754ffbec..e2849825862 100644 --- a/source/blender/blenkernel/intern/anim_sys.c +++ b/source/blender/blenkernel/intern/anim_sys.c @@ -36,7 +36,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_dynstr.h" #include "DNA_anim_types.h" diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c index 3a8a3d4efc9..798c3a87846 100644 --- a/source/blender/blenkernel/intern/armature.c +++ b/source/blender/blenkernel/intern/armature.c @@ -34,7 +34,7 @@ #include "MEM_guardedalloc.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "DNA_armature_types.h" @@ -169,10 +169,13 @@ void make_local_armature(bArmature *arm) } } -static void copy_bonechildren (Bone* newBone, Bone* oldBone) +static void copy_bonechildren (Bone* newBone, Bone* oldBone, Bone* actBone, Bone **newActBone) { Bone *curBone, *newChildBone; + if(oldBone == actBone) + *newActBone= newBone; + /* Copy this bone's list*/ BLI_duplicatelist(&newBone->childbase, &oldBone->childbase); @@ -180,7 +183,7 @@ static void copy_bonechildren (Bone* newBone, Bone* oldBone) newChildBone=newBone->childbase.first; for (curBone=oldBone->childbase.first;curBone;curBone=curBone->next){ newChildBone->parent=newBone; - copy_bonechildren(newChildBone,curBone); + copy_bonechildren(newChildBone, curBone, actBone, newActBone); newChildBone=newChildBone->next; } } @@ -189,6 +192,7 @@ bArmature *copy_armature(bArmature *arm) { bArmature *newArm; Bone *oldBone, *newBone; + Bone *newActBone= NULL; newArm= copy_libblock (arm); BLI_duplicatelist(&newArm->bonebase, &arm->bonebase); @@ -197,10 +201,11 @@ bArmature *copy_armature(bArmature *arm) newBone=newArm->bonebase.first; for (oldBone=arm->bonebase.first;oldBone;oldBone=oldBone->next){ newBone->parent=NULL; - copy_bonechildren (newBone, oldBone); + copy_bonechildren (newBone, oldBone, arm->act_bone, &newActBone); newBone=newBone->next; }; + newArm->act_bone= newActBone; return newArm; } @@ -477,7 +482,7 @@ static void equalize_bezier(float *data, int desired) pdist[0]= 0.0f; for(a=0, fp= data; a<MAX_BBONE_SUBDIV; a++, fp+=4) { QUATCOPY(temp[a], fp); - pdist[a+1]= pdist[a]+VecLenf(fp, fp+4); + pdist[a+1]= pdist[a]+len_v3v3(fp, fp+4); } /* do last point */ QUATCOPY(temp[a], fp); @@ -527,16 +532,16 @@ Mat4 *b_bone_spline_setup(bPoseChannel *pchan, int rest) if(!rest) { /* check if we need to take non-uniform bone scaling into account */ - scale[0]= VecLength(pchan->pose_mat[0]); - scale[1]= VecLength(pchan->pose_mat[1]); - scale[2]= VecLength(pchan->pose_mat[2]); + scale[0]= len_v3(pchan->pose_mat[0]); + scale[1]= len_v3(pchan->pose_mat[1]); + scale[2]= len_v3(pchan->pose_mat[2]); if(fabs(scale[0] - scale[1]) > 1e-6f || fabs(scale[1] - scale[2]) > 1e-6f) { - Mat4One(scalemat); + unit_m4(scalemat); scalemat[0][0]= scale[0]; scalemat[1][1]= scale[1]; scalemat[2][2]= scale[2]; - Mat4Invert(iscalemat, scalemat); + invert_m4_m4(iscalemat, scalemat); length *= scale[1]; doscale = 1; @@ -559,15 +564,15 @@ Mat4 *b_bone_spline_setup(bPoseChannel *pchan, int rest) last point = (0, length, 0) */ if(rest) { - Mat4Invert(imat, pchan->bone->arm_mat); + invert_m4_m4(imat, pchan->bone->arm_mat); } else if(doscale) { - Mat4CpyMat4(posemat, pchan->pose_mat); - Mat4Ortho(posemat); - Mat4Invert(imat, posemat); + copy_m4_m4(posemat, pchan->pose_mat); + normalize_m4(posemat); + invert_m4_m4(imat, posemat); } else - Mat4Invert(imat, pchan->pose_mat); + invert_m4_m4(imat, pchan->pose_mat); if(prev) { float difmat[4][4], result[3][3], imat3[3][3]; @@ -577,7 +582,7 @@ Mat4 *b_bone_spline_setup(bPoseChannel *pchan, int rest) VECCOPY(h1, prev->bone->arm_head) else VECCOPY(h1, prev->pose_head) - Mat4MulVecfl(imat, h1); + mul_m4_v3(imat, h1); if(prev->bone->segments>1) { /* if previous bone is B-bone too, use average handle direction */ @@ -585,21 +590,21 @@ Mat4 *b_bone_spline_setup(bPoseChannel *pchan, int rest) roll1= 0.0f; } - Normalize(h1); - VecMulf(h1, -hlength1); + normalize_v3(h1); + mul_v3_fl(h1, -hlength1); if(prev->bone->segments==1) { /* find the previous roll to interpolate */ if(rest) - Mat4MulMat4(difmat, prev->bone->arm_mat, imat); + mul_m4_m4m4(difmat, prev->bone->arm_mat, imat); else - Mat4MulMat4(difmat, prev->pose_mat, imat); - Mat3CpyMat4(result, difmat); // the desired rotation at beginning of next bone + mul_m4_m4m4(difmat, prev->pose_mat, imat); + copy_m3_m4(result, difmat); // the desired rotation at beginning of next bone vec_roll_to_mat3(h1, 0.0f, mat3); // the result of vec_roll without roll - Mat3Inv(imat3, mat3); - Mat3MulMat3(mat3, result, imat3); // the matrix transforming vec_roll to desired roll + invert_m3_m3(imat3, mat3); + mul_m3_m3m3(mat3, result, imat3); // the matrix transforming vec_roll to desired roll roll1= (float)atan2(mat3[2][0], mat3[2][2]); } @@ -616,28 +621,28 @@ Mat4 *b_bone_spline_setup(bPoseChannel *pchan, int rest) VECCOPY(h2, next->bone->arm_tail) else VECCOPY(h2, next->pose_tail) - Mat4MulVecfl(imat, h2); + mul_m4_v3(imat, h2); /* if next bone is B-bone too, use average handle direction */ if(next->bone->segments>1); else h2[1]-= length; - Normalize(h2); + normalize_v3(h2); /* find the next roll to interpolate as well */ if(rest) - Mat4MulMat4(difmat, next->bone->arm_mat, imat); + mul_m4_m4m4(difmat, next->bone->arm_mat, imat); else - Mat4MulMat4(difmat, next->pose_mat, imat); - Mat3CpyMat4(result, difmat); // the desired rotation at beginning of next bone + mul_m4_m4m4(difmat, next->pose_mat, imat); + copy_m3_m4(result, difmat); // the desired rotation at beginning of next bone vec_roll_to_mat3(h2, 0.0f, mat3); // the result of vec_roll without roll - Mat3Inv(imat3, mat3); - Mat3MulMat3(mat3, imat3, result); // the matrix transforming vec_roll to desired roll + invert_m3_m3(imat3, mat3); + mul_m3_m3m3(mat3, imat3, result); // the matrix transforming vec_roll to desired roll roll2= (float)atan2(mat3[2][0], mat3[2][2]); /* and only now negate handle */ - VecMulf(h2, -hlength2); + mul_v3_fl(h2, -hlength2); } else { h2[0]= 0.0f; h2[1]= -hlength2; h2[2]= 0.0f; @@ -657,15 +662,15 @@ Mat4 *b_bone_spline_setup(bPoseChannel *pchan, int rest) /* make transformation matrices for the segments for drawing */ for(a=0, fp= data[0]; a<bone->segments; a++, fp+=4) { - VecSubf(h1, fp+4, fp); + sub_v3_v3v3(h1, fp+4, fp); vec_roll_to_mat3(h1, fp[3], mat3); // fp[3] is roll - Mat4CpyMat3(result_array[a].mat, mat3); + copy_m4_m3(result_array[a].mat, mat3); VECCOPY(result_array[a].mat[3], fp); if(doscale) { /* correct for scaling when this matrix is used in scaled space */ - Mat4MulSerie(result_array[a].mat, iscalemat, result_array[a].mat, + mul_serie_m4(result_array[a].mat, iscalemat, result_array[a].mat, scalemat, NULL, NULL, NULL, NULL, NULL); } } @@ -696,26 +701,26 @@ static void pchan_b_bone_defmats(bPoseChannel *pchan, int use_quaternion, int re /* first matrix is the inverse arm_mat, to bring points in local bone space for finding out which segment it belongs to */ - Mat4Invert(b_bone_mats[0].mat, bone->arm_mat); + invert_m4_m4(b_bone_mats[0].mat, bone->arm_mat); /* then we make the b_bone_mats: - first transform to local bone space - translate over the curve to the bbone mat space - transform with b_bone matrix - transform back into global space */ - Mat4One(tmat); + unit_m4(tmat); for(a=0; a<bone->segments; a++) { if(b_bone_rest) - Mat4Invert(tmat, b_bone_rest[a].mat); + invert_m4_m4(tmat, b_bone_rest[a].mat); else tmat[3][1] = -a*(bone->length/(float)bone->segments); - Mat4MulSerie(b_bone_mats[a+1].mat, pchan->chan_mat, bone->arm_mat, + mul_serie_m4(b_bone_mats[a+1].mat, pchan->chan_mat, bone->arm_mat, b_bone[a].mat, tmat, b_bone_mats[0].mat, NULL, NULL, NULL); if(use_quaternion) - Mat4ToDQuat(bone->arm_mat, b_bone_mats[a+1].mat, &b_bone_dual_quats[a]); + mat4_to_dquat( &b_bone_dual_quats[a],bone->arm_mat, b_bone_mats[a+1].mat); } } @@ -738,13 +743,13 @@ static void b_bone_deform(bPoseChannel *pchan, Bone *bone, float *co, DualQuat * CLAMP(a, 0, bone->segments-1); if(dq) { - DQuatCpyDQuat(dq, &((DualQuat*)pchan->b_bone_dual_quats)[a]); + copy_dq_dq(dq, &((DualQuat*)pchan->b_bone_dual_quats)[a]); } else { - Mat4MulVecfl(b_bone[a+1].mat, co); + mul_m4_v3(b_bone[a+1].mat, co); if(defmat) - Mat3CpyMat4(defmat, b_bone[a+1].mat); + copy_m3_m4(defmat, b_bone[a+1].mat); } } @@ -756,10 +761,10 @@ float distfactor_to_bone (float vec[3], float b1[3], float b2[3], float rad1, fl float pdelta[3]; float hsqr, a, l, rad; - VecSubf (bdelta, b2, b1); - l = Normalize (bdelta); + sub_v3_v3v3(bdelta, b2, b1); + l = normalize_v3(bdelta); - VecSubf (pdelta, vec, b1); + sub_v3_v3v3(pdelta, vec, b1); a = bdelta[0]*pdelta[0] + bdelta[1]*pdelta[1] + bdelta[2]*pdelta[2]; hsqr = ((pdelta[0]*pdelta[0]) + (pdelta[1]*pdelta[1]) + (pdelta[2]*pdelta[2])); @@ -804,12 +809,12 @@ static void pchan_deform_mat_add(bPoseChannel *pchan, float weight, float bbonem float wmat[3][3]; if(pchan->bone->segments>1) - Mat3CpyMat3(wmat, bbonemat); + copy_m3_m3(wmat, bbonemat); else - Mat3CpyMat4(wmat, pchan->chan_mat); + copy_m3_m4(wmat, pchan->chan_mat); - Mat3MulFloat((float*)wmat, weight); - Mat3AddMat3(mat, mat, wmat); + mul_m3_fl(wmat, weight); + add_m3_m3m3(mat, mat, wmat); } static float dist_bone_deform(bPoseChannel *pchan, float *vec, DualQuat *dq, float mat[][3], float *co) @@ -835,12 +840,12 @@ static float dist_bone_deform(bPoseChannel *pchan, float *vec, DualQuat *dq, flo // applies on cop and bbonemat b_bone_deform(pchan, bone, cop, NULL, (mat)?bbonemat:NULL); else - Mat4MulVecfl(pchan->chan_mat, cop); + mul_m4_v3(pchan->chan_mat, cop); // Make this a delta from the base position - VecSubf (cop, cop, co); + sub_v3_v3v3(cop, cop, co); cop[0]*=fac; cop[1]*=fac; cop[2]*=fac; - VecAddf (vec, vec, cop); + add_v3_v3v3(vec, vec, cop); if(mat) pchan_deform_mat_add(pchan, fac, bbonemat, mat); @@ -848,10 +853,10 @@ static float dist_bone_deform(bPoseChannel *pchan, float *vec, DualQuat *dq, flo else { if(bone->segments>1) { b_bone_deform(pchan, bone, cop, &bbonedq, NULL); - DQuatAddWeighted(dq, &bbonedq, fac); + add_weighted_dq_dq(dq, &bbonedq, fac); } else - DQuatAddWeighted(dq, pchan->dual_quat, fac); + add_weighted_dq_dq(dq, pchan->dual_quat, fac); } } } @@ -874,7 +879,7 @@ static void pchan_bone_deform(bPoseChannel *pchan, float weight, float *vec, Dua // applies on cop and bbonemat b_bone_deform(pchan, pchan->bone, cop, NULL, (mat)?bbonemat:NULL); else - Mat4MulVecfl(pchan->chan_mat, cop); + mul_m4_v3(pchan->chan_mat, cop); vec[0]+=(cop[0]-co[0])*weight; vec[1]+=(cop[1]-co[1])*weight; @@ -886,10 +891,10 @@ static void pchan_bone_deform(bPoseChannel *pchan, float weight, float *vec, Dua else { if(pchan->bone->segments>1) { b_bone_deform(pchan, pchan->bone, cop, &bbonedq, NULL); - DQuatAddWeighted(dq, &bbonedq, weight); + add_weighted_dq_dq(dq, &bbonedq, weight); } else - DQuatAddWeighted(dq, pchan->dual_quat, weight); + add_weighted_dq_dq(dq, pchan->dual_quat, weight); } (*contrib)+=weight; @@ -918,10 +923,10 @@ void armature_deform_verts(Object *armOb, Object *target, DerivedMesh *dm, if(arm->edbo) return; - Mat4Invert(obinv, target->obmat); - Mat4CpyMat4(premat, target->obmat); - Mat4MulMat4(postmat, armOb->obmat, obinv); - Mat4Invert(premat, postmat); + invert_m4_m4(obinv, target->obmat); + copy_m4_m4(premat, target->obmat); + mul_m4_m4m4(postmat, armOb->obmat, obinv); + invert_m4_m4(premat, postmat); /* bone defmats are already in the channels, chan_mat */ @@ -939,7 +944,7 @@ void armature_deform_verts(Object *armOb, Object *target, DerivedMesh *dm, if(use_quaternion) { pchan->dual_quat= &dualquats[totchan++]; - Mat4ToDQuat(pchan->bone->arm_mat, pchan->chan_mat, pchan->dual_quat); + mat4_to_dquat( pchan->dual_quat,pchan->bone->arm_mat, pchan->chan_mat); } } } @@ -1008,7 +1013,7 @@ void armature_deform_verts(Object *armOb, Object *target, DerivedMesh *dm, vec= sumvec; if(defMats) { - Mat3Clr((float*)summat); + zero_m3(summat); smat = summat; } } @@ -1045,7 +1050,7 @@ void armature_deform_verts(Object *armOb, Object *target, DerivedMesh *dm, co= prevCos?prevCos[i]:vertexCos[i]; /* Apply the object's matrix */ - Mat4MulVecfl(premat, co); + mul_m4_v3(premat, co); if(use_dverts && dvert && dvert->totweight) { // use weight groups ? int deformed = 0; @@ -1091,42 +1096,42 @@ void armature_deform_verts(Object *armOb, Object *target, DerivedMesh *dm, /* actually should be EPSILON? weight values and contrib can be like 10e-39 small */ if(contrib > 0.0001f) { if(use_quaternion) { - DQuatNormalize(dq, contrib); + normalize_dq(dq, contrib); if(armature_weight != 1.0f) { VECCOPY(dco, co); - DQuatMulVecfl(dq, dco, (defMats)? summat: NULL); - VecSubf(dco, dco, co); - VecMulf(dco, armature_weight); - VecAddf(co, co, dco); + mul_v3m3_dq( dco, (defMats)? summat: NULL,dq); + sub_v3_v3v3(dco, dco, co); + mul_v3_fl(dco, armature_weight); + add_v3_v3v3(co, co, dco); } else - DQuatMulVecfl(dq, co, (defMats)? summat: NULL); + mul_v3m3_dq( co, (defMats)? summat: NULL,dq); smat = summat; } else { - VecMulf(vec, armature_weight/contrib); - VecAddf(co, vec, co); + mul_v3_fl(vec, armature_weight/contrib); + add_v3_v3v3(co, vec, co); } if(defMats) { float pre[3][3], post[3][3], tmpmat[3][3]; - Mat3CpyMat4(pre, premat); - Mat3CpyMat4(post, postmat); - Mat3CpyMat3(tmpmat, defMats[i]); + copy_m3_m4(pre, premat); + copy_m3_m4(post, postmat); + copy_m3_m3(tmpmat, defMats[i]); if(!use_quaternion) /* quaternion already is scale corrected */ - Mat3MulFloat((float*)smat, armature_weight/contrib); + mul_m3_fl(smat, armature_weight/contrib); - Mat3MulSerie(defMats[i], tmpmat, pre, smat, post, + mul_serie_m3(defMats[i], tmpmat, pre, smat, post, NULL, NULL, NULL, NULL); } } /* always, check above code */ - Mat4MulVecfl(postmat, co); + mul_m4_v3(postmat, co); /* interpolate with previous modifier position using weight group */ @@ -1160,7 +1165,7 @@ void armature_deform_verts(Object *armOb, Object *target, DerivedMesh *dm, void get_objectspace_bone_matrix (struct Bone* bone, float M_accumulatedMatrix[][4], int root, int posed) { - Mat4CpyMat4(M_accumulatedMatrix, bone->arm_mat); + copy_m4_m4(M_accumulatedMatrix, bone->arm_mat); } /* **************** Space to Space API ****************** */ @@ -1174,10 +1179,10 @@ void armature_mat_world_to_pose(Object *ob, float inmat[][4], float outmat[][4]) if (ob==NULL) return; /* get inverse of (armature) object's matrix */ - Mat4Invert(obmat, ob->obmat); + invert_m4_m4(obmat, ob->obmat); /* multiply given matrix by object's-inverse to find pose-space matrix */ - Mat4MulMat4(outmat, obmat, inmat); + mul_m4_m4m4(outmat, obmat, inmat); } /* Convert Wolrd-Space Location to Pose-Space Location @@ -1190,7 +1195,7 @@ void armature_loc_world_to_pose(Object *ob, float *inloc, float *outloc) float nLocMat[4][4]; /* build matrix for location */ - Mat4One(xLocMat); + unit_m4(xLocMat); VECCOPY(xLocMat[3], inloc); /* get bone-space cursor matrix and extract location */ @@ -1212,24 +1217,24 @@ void armature_mat_pose_to_bone(bPoseChannel *pchan, float inmat[][4], float outm /* get the inverse matrix of the pchan's transforms */ if (pchan->rotmode) - LocEulSizeToMat4(pc_trans, pchan->loc, pchan->eul, pchan->size); + loc_eul_size_to_mat4(pc_trans, pchan->loc, pchan->eul, pchan->size); else - LocQuatSizeToMat4(pc_trans, pchan->loc, pchan->quat, pchan->size); - Mat4Invert(inv_trans, pc_trans); + loc_quat_size_to_mat4(pc_trans, pchan->loc, pchan->quat, pchan->size); + invert_m4_m4(inv_trans, pc_trans); /* Remove the pchan's transforms from it's pose_mat. * This should leave behind the effects of restpose + * parenting + constraints */ - Mat4MulMat4(pc_posemat, inv_trans, pchan->pose_mat); + mul_m4_m4m4(pc_posemat, inv_trans, pchan->pose_mat); /* get the inverse of the leftovers so that we can remove * that component from the supplied matrix */ - Mat4Invert(inv_posemat, pc_posemat); + invert_m4_m4(inv_posemat, pc_posemat); /* get the new matrix */ - Mat4MulMat4(outmat, inmat, inv_posemat); + mul_m4_m4m4(outmat, inmat, inv_posemat); } /* Convert Pose-Space Location to Bone-Space Location @@ -1242,7 +1247,7 @@ void armature_loc_pose_to_bone(bPoseChannel *pchan, float *inloc, float *outloc) float nLocMat[4][4]; /* build matrix for location */ - Mat4One(xLocMat); + unit_m4(xLocMat); VECCOPY(xLocMat[3], inloc); /* get bone-space cursor matrix and extract location */ @@ -1258,8 +1263,8 @@ void armature_mat_pose_to_delta(float delta_mat[][4], float pose_mat[][4], float { float imat[4][4]; - Mat4Invert(imat, arm_mat); - Mat4MulMat4(delta_mat, pose_mat, imat); + invert_m4_m4(imat, arm_mat); + mul_m4_m4m4(delta_mat, pose_mat, imat); } /* **************** Rotation Mode Conversions ****************************** */ @@ -1275,33 +1280,33 @@ void BKE_rotMode_change_values (float quat[4], float eul[3], float axis[3], floa if (newMode > 0) { /* to euler */ if (oldMode == ROT_MODE_AXISANGLE) { /* axis-angle to euler */ - AxisAngleToEulO(axis, *angle, eul, newMode); + axis_angle_to_eulO( eul, newMode,axis, *angle); } else if (oldMode == ROT_MODE_QUAT) { /* quat to euler */ - QuatToEulO(quat, eul, newMode); + quat_to_eulO( eul, newMode,quat); } /* else { no conversion needed } */ } else if (newMode == ROT_MODE_QUAT) { /* to quat */ if (oldMode == ROT_MODE_AXISANGLE) { /* axis angle to quat */ - AxisAngleToQuat(quat, axis, *angle); + axis_angle_to_quat(quat, axis, *angle); } else if (oldMode > 0) { /* euler to quat */ - EulOToQuat(eul, oldMode, quat); + eulO_to_quat( quat,eul, oldMode); } /* else { no conversion needed } */ } else if (newMode == ROT_MODE_AXISANGLE) { /* to axis-angle */ if (oldMode > 0) { /* euler to axis angle */ - EulOToAxisAngle(eul, oldMode, axis, angle); + eulO_to_axis_angle( axis, angle,eul, oldMode); } else if (oldMode == ROT_MODE_QUAT) { /* quat to axis angle */ - QuatToAxisAngle(quat, axis, angle); + quat_to_axis_angle( axis, angle,quat); } /* when converting to axis-angle, we need a special exception for the case when there is no axis */ @@ -1336,14 +1341,14 @@ void BKE_rotMode_change_values (float quat[4], float eul[3], float axis[3], floa void mat3_to_vec_roll(float mat[][3], float *vec, float *roll) { if (vec) - VecCopyf(vec, mat[1]); + copy_v3_v3(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); + invert_m3_m3(vecmatinv, vecmat); + mul_m3_m3m3(rollmat, vecmatinv, mat); *roll= (float)atan2(rollmat[2][0], rollmat[2][2]); } @@ -1358,26 +1363,26 @@ void vec_roll_to_mat3(float *vec, float roll, float mat[][3]) float rMatrix[3][3], bMatrix[3][3]; VECCOPY (nor, vec); - Normalize (nor); + normalize_v3(nor); /* Find Axis & Amount for bone matrix*/ - Crossf (axis,target,nor); + cross_v3_v3v3(axis,target,nor); - if (Inpf(axis,axis) > 0.0000000000001) { + if (dot_v3v3(axis,axis) > 0.0000000000001) { /* if nor is *not* a multiple of target ... */ - Normalize (axis); + normalize_v3(axis); - theta= NormalizedVecAngle2(target, nor); + theta= angle_normalized_v3v3(target, nor); /* Make Bone matrix*/ - VecRotToMat3(axis, theta, bMatrix); + vec_rot_to_mat3( bMatrix,axis, theta); } else { /* if nor is a multiple of target ... */ float updown; /* point same direction, or opposite? */ - updown = ( Inpf (target,nor) > 0 ) ? 1.0f : -1.0f; + updown = ( dot_v3v3(target,nor) > 0 ) ? 1.0f : -1.0f; /* I think this should work ... */ bMatrix[0][0]=updown; bMatrix[0][1]=0.0; bMatrix[0][2]=0.0; @@ -1386,10 +1391,10 @@ void vec_roll_to_mat3(float *vec, float roll, float mat[][3]) } /* Make Roll matrix*/ - VecRotToMat3(nor, roll, rMatrix); + vec_rot_to_mat3( rMatrix,nor, roll); /* Combine and output result*/ - Mat3MulMat3 (mat, rMatrix, bMatrix); + mul_m3_m3m3(mat, rMatrix, bMatrix); } @@ -1400,10 +1405,10 @@ void where_is_armature_bone(Bone *bone, Bone *prevbone) float vec[3]; /* Bone Space */ - VecSubf (vec, bone->tail, bone->head); + sub_v3_v3v3(vec, bone->tail, bone->head); vec_roll_to_mat3(vec, bone->roll, bone->bone_mat); - bone->length= VecLenf(bone->head, bone->tail); + bone->length= len_v3v3(bone->head, bone->tail); /* this is called on old file reading too... */ if(bone->xwidth==0.0) { @@ -1416,7 +1421,7 @@ void where_is_armature_bone(Bone *bone, Bone *prevbone) float offs_bone[4][4]; // yoffs(b-1) + root(b) + bonemat(b) /* bone transform itself */ - Mat4CpyMat3(offs_bone, bone->bone_mat); + copy_m4_m3(offs_bone, bone->bone_mat); /* The bone's root offset (is in the parent's coordinate system) */ VECCOPY(offs_bone[3], bone->head); @@ -1425,10 +1430,10 @@ void where_is_armature_bone(Bone *bone, Bone *prevbone) offs_bone[3][1]+= prevbone->length; /* Compose the matrix for this bone */ - Mat4MulMat4(bone->arm_mat, offs_bone, prevbone->arm_mat); + mul_m4_m4m4(bone->arm_mat, offs_bone, prevbone->arm_mat); } else { - Mat4CpyMat3(bone->arm_mat, bone->bone_mat); + copy_m4_m3(bone->arm_mat, bone->bone_mat); VECCOPY(bone->arm_mat[3], bone->head); } @@ -1436,8 +1441,8 @@ void where_is_armature_bone(Bone *bone, Bone *prevbone) VECCOPY(bone->arm_head, bone->arm_mat[3]); /* tail is in current local coord system */ VECCOPY(vec, bone->arm_mat[1]); - VecMulf(vec, bone->length); - VecAddf(bone->arm_tail, bone->arm_head, vec); + mul_v3_fl(vec, bone->length); + add_v3_v3v3(bone->arm_tail, bone->arm_head, vec); /* and the kiddies */ prevbone= bone; @@ -1689,8 +1694,6 @@ static void splineik_init_tree_from_pchan(Object *ob, bPoseChannel *pchan_tip) /* setup new empty array for the points list */ if (ikData->points) MEM_freeN(ikData->points); - // NOTE: just do chainlen+1 always for now, since we may get crashes otherwise - //ikData->numpoints= (ikData->flag & CONSTRAINT_SPLINEIK_NO_ROOT)? ikData->chainlen : ikData->chainlen+1; ikData->numpoints= ikData->chainlen+1; ikData->points= MEM_callocN(sizeof(float)*ikData->numpoints, "Spline IK Binding"); @@ -1749,6 +1752,7 @@ static void splineik_init_tree_from_pchan(Object *ob, bPoseChannel *pchan_tip) maxScale = totLength / splineLen; /* apply scaling correction to all of the temporary points */ + // TODO: this is really not adequate enough on really short chains for (i = 0; i < segcount; i++) jointPoints[i] *= maxScale; } @@ -1820,7 +1824,7 @@ static void splineik_evaluate_bone(tSplineIK_Tree *tree, Scene *scene, Object *o /* step 1a: get xyz positions for the tail endpoint of the bone */ if ( where_on_path(ikData->tar, tree->points[index], vec, dir, NULL, &rad) ) { /* convert the position to pose-space, then store it */ - Mat4MulVecfl(ob->imat, vec); + mul_m4_v3(ob->imat, vec); VECCOPY(poseTail, vec); /* set the new radius */ @@ -1828,28 +1832,21 @@ static void splineik_evaluate_bone(tSplineIK_Tree *tree, Scene *scene, Object *o } /* step 1b: get xyz positions for the head endpoint of the bone */ - /* firstly, calculate the position that the path suggests */ if ( where_on_path(ikData->tar, tree->points[index+1], vec, dir, NULL, &rad) ) { /* store the position, and convert it to pose space */ - Mat4MulVecfl(ob->imat, vec); + mul_m4_v3(ob->imat, vec); VECCOPY(poseHead, vec); /* set the new radius (it should be the average value) */ radius = (radius+rad) / 2; } - if ((ikData->flag & CONSTRAINT_SPLINEIK_NO_ROOT) && (pchan == tree->root)) - { - // this is the root bone, and it can be controlled however we like... - // TODO: how do we calculate the offset of the root, if we don't even know the binding? - VECCOPY(poseHead, pchan->pose_head); - } /* step 2: determine the implied transform from these endpoints * - splineVec: the vector direction that the spline applies on the bone * - scaleFac: the factor that the bone length is scaled by to get the desired amount */ - VecSubf(splineVec, poseTail, poseHead); - scaleFac= VecLength(splineVec) / pchan->bone->length; + sub_v3_v3v3(splineVec, poseTail, poseHead); + scaleFac= len_v3(splineVec) / pchan->bone->length; /* step 3: compute the shortest rotation needed to map from the bone rotation to the current axis * - this uses the same method as is used for the Damped Track Constraint (see the code there for details) @@ -1864,49 +1861,68 @@ static void splineik_evaluate_bone(tSplineIK_Tree *tree, Scene *scene, Object *o VECCOPY(rmat[0], pchan->pose_mat[0]); VECCOPY(rmat[1], pchan->pose_mat[1]); VECCOPY(rmat[2], pchan->pose_mat[2]); - Mat3Ortho(rmat); + normalize_m3(rmat); /* also, normalise the orientation imposed by the bone, now that we've extracted the scale factor */ - Normalize(splineVec); + normalize_v3(splineVec); /* calculate smallest axis-angle rotation necessary for getting from the * current orientation of the bone, to the spline-imposed direction */ - Crossf(raxis, rmat[1], splineVec); + cross_v3_v3v3(raxis, rmat[1], splineVec); - rangle= Inpf(rmat[1], splineVec); + rangle= dot_v3v3(rmat[1], splineVec); rangle= acos( MAX2(-1.0f, MIN2(1.0f, rangle)) ); /* construct rotation matrix from the axis-angle rotation found above * - this call takes care to make sure that the axis provided is a unit vector first */ - AxisAngleToMat3(raxis, rangle, dmat); + axis_angle_to_mat3( dmat,raxis, rangle); /* combine these rotations so that the y-axis of the bone is now aligned as the spline dictates, * while still maintaining roll control from the existing bone animation */ - Mat3MulMat3(tmat, dmat, rmat); // m1, m3, m2 - Mat3Ortho(tmat); /* attempt to reduce shearing, though I doubt this'll really help too much now... */ - Mat4CpyMat3(poseMat, tmat); + mul_m3_m3m3(tmat, dmat, rmat); // m1, m3, m2 + normalize_m3(tmat); /* attempt to reduce shearing, though I doubt this'll really help too much now... */ + copy_m4_m3(poseMat, tmat); } /* step 4: set the scaling factors for the axes */ + // TODO: include a no-scale option? { /* only multiply the y-axis by the scaling factor to get nice volume-preservation */ - VecMulf(poseMat[1], scaleFac); - - /* set the scaling factors of the x and z axes from the average radius of the curve? */ - if (ikData->flag & CONSTRAINT_SPLINEIK_RAD2FAT) { - VecMulf(poseMat[0], radius); - VecMulf(poseMat[2], radius); + mul_v3_fl(poseMat[1], scaleFac); + + /* set the scaling factors of the x and z axes from... */ + switch (ikData->xzScaleMode) { + case CONSTRAINT_SPLINEIK_XZS_RADIUS: + { + /* radius of curve */ + mul_v3_fl(poseMat[0], radius); + mul_v3_fl(poseMat[2], radius); + } + break; + case CONSTRAINT_SPLINEIK_XZS_ORIGINAL: + { + /* original scales get used */ + float scale; + + /* x-axis scale */ + scale= len_v3(pchan->pose_mat[0]); + mul_v3_fl(poseMat[0], scale); + /* z-axis scale */ + scale= len_v3(pchan->pose_mat[2]); + mul_v3_fl(poseMat[2], scale); + } + break; } } /* step 5: set the location of the bone in the matrix */ - VECCOPY(poseMat[3], pchan->pose_head); + VECCOPY(poseMat[3], poseHead); /* finally, store the new transform */ - Mat4CpyMat4(pchan->pose_mat, poseMat); + copy_m4_m4(pchan->pose_mat, poseMat); VECCOPY(pchan->pose_head, poseHead); VECCOPY(pchan->pose_tail, poseTail); @@ -1958,26 +1974,26 @@ void chan_calc_mat(bPoseChannel *chan) float tmat[3][3]; /* get scaling matrix */ - SizeToMat3(chan->size, smat); + size_to_mat3( smat,chan->size); /* rotations may either be quats, eulers (with various rotation orders), or axis-angle */ if (chan->rotmode > 0) { /* euler rotations (will cause gimble lock, but this can be alleviated a bit with rotation orders) */ - EulOToMat3(chan->eul, chan->rotmode, rmat); + eulO_to_mat3( rmat,chan->eul, chan->rotmode); } else if (chan->rotmode == ROT_MODE_AXISANGLE) { /* axis-angle - not really that great for 3D-changing orientations */ - AxisAngleToMat3(chan->rotAxis, chan->rotAngle, rmat); + axis_angle_to_mat3( rmat,chan->rotAxis, chan->rotAngle); } else { /* quats are normalised before use to eliminate scaling issues */ - NormalQuat(chan->quat); // TODO: do this with local vars only! - QuatToMat3(chan->quat, rmat); + normalize_qt(chan->quat); // TODO: do this with local vars only! + quat_to_mat3( rmat,chan->quat); } /* calculate matrix of bone (as 3x3 matrix, but then copy the 4x4) */ - Mat3MulMat3(tmat, rmat, smat); - Mat4CpyMat3(chan->chan_mat, tmat); + mul_m3_m3m3(tmat, rmat, smat); + copy_m4_m3(chan->chan_mat, tmat); /* prevent action channels breaking chains */ /* need to check for bone here, CONSTRAINT_TYPE_ACTION uses this call */ @@ -2041,8 +2057,8 @@ static void do_strip_modifiers(Scene *scene, Object *armob, Bone *bone, bPoseCha float mat4[4][4], mat3[3][3]; curve_deform_vector(scene, amod->ob, armob, bone->arm_mat[3], pchan->pose_mat[3], mat3, amod->no_rot_axis); - Mat4CpyMat4(mat4, pchan->pose_mat); - Mat4MulMat34(pchan->pose_mat, mat3, mat4); + copy_m4_m4(mat4, pchan->pose_mat); + mul_m4_m3m4(pchan->pose_mat, mat3, mat4); } } @@ -2059,8 +2075,8 @@ static void do_strip_modifiers(Scene *scene, Object *armob, Bone *bone, bPoseCha /* make a copy of starting conditions */ VECCOPY(loc, pchan->pose_mat[3]); - Mat4ToEul(pchan->pose_mat, eul); - Mat4ToSize(pchan->pose_mat, size); + mat4_to_eul( eul,pchan->pose_mat); + mat4_to_size( size,pchan->pose_mat); VECCOPY(eulo, eul); VECCOPY(sizeo, size); @@ -2070,14 +2086,14 @@ static void do_strip_modifiers(Scene *scene, Object *armob, Bone *bone, bPoseCha nor[0] = BLI_gNoise(amod->noisesize, size[0]+ofs, size[1], size[2], 0, 0) - ofs; nor[1] = BLI_gNoise(amod->noisesize, size[0], size[1]+ofs, size[2], 0, 0) - ofs; nor[2] = BLI_gNoise(amod->noisesize, size[0], size[1], size[2]+ofs, 0, 0) - ofs; - VecAddf(size, size, nor); + add_v3_v3v3(size, size, nor); if (sizeo[0] != 0) - VecMulf(pchan->pose_mat[0], size[0] / sizeo[0]); + mul_v3_fl(pchan->pose_mat[0], size[0] / sizeo[0]); if (sizeo[1] != 0) - VecMulf(pchan->pose_mat[1], size[1] / sizeo[1]); + mul_v3_fl(pchan->pose_mat[1], size[1] / sizeo[1]); if (sizeo[2] != 0) - VecMulf(pchan->pose_mat[2], size[2] / sizeo[2]); + mul_v3_fl(pchan->pose_mat[2], size[2] / sizeo[2]); } if (amod->channels & 2) { /* for rotation */ @@ -2086,10 +2102,10 @@ static void do_strip_modifiers(Scene *scene, Object *armob, Bone *bone, bPoseCha nor[2] = BLI_gNoise(amod->noisesize, eul[0], eul[1], eul[2]+ofs, 0, 0) - ofs; compatible_eul(nor, eulo); - VecAddf(eul, eul, nor); + add_v3_v3v3(eul, eul, nor); compatible_eul(eul, eulo); - LocEulSizeToMat4(pchan->pose_mat, loc, eul, size); + loc_eul_size_to_mat4(pchan->pose_mat, loc, eul, size); } if (amod->channels & 1) { /* for location */ @@ -2097,7 +2113,7 @@ static void do_strip_modifiers(Scene *scene, Object *armob, Bone *bone, bPoseCha nor[1] = BLI_gNoise(amod->noisesize, loc[0], loc[1]+ofs, loc[2], 0, 0) - ofs; nor[2] = BLI_gNoise(amod->noisesize, loc[0], loc[1], loc[2]+ofs, 0, 0) - ofs; - VecAddf(pchan->pose_mat[3], loc, nor); + add_v3_v3v3(pchan->pose_mat[3], loc, nor); } } } @@ -2132,7 +2148,7 @@ void where_is_pose_bone(Scene *scene, Object *ob, bPoseChannel *pchan, float cti float offs_bone[4][4]; // yoffs(b-1) + root(b) + bonemat(b) /* bone transform itself */ - Mat4CpyMat3(offs_bone, bone->bone_mat); + copy_m4_m3(offs_bone, bone->bone_mat); /* The bone's root offset (is in the parent's coordinate system) */ VECCOPY(offs_bone[3], bone->head); @@ -2145,39 +2161,39 @@ void where_is_pose_bone(Scene *scene, Object *ob, bPoseChannel *pchan, float cti float tmat[4][4]; /* the rotation of the parent restposition */ - Mat4CpyMat4(tmat, parbone->arm_mat); + copy_m4_m4(tmat, parbone->arm_mat); /* the location of actual parent transform */ VECCOPY(tmat[3], offs_bone[3]); offs_bone[3][0]= offs_bone[3][1]= offs_bone[3][2]= 0.0f; - Mat4MulVecfl(parchan->pose_mat, tmat[3]); + mul_m4_v3(parchan->pose_mat, tmat[3]); - Mat4MulSerie(pchan->pose_mat, tmat, offs_bone, pchan->chan_mat, NULL, NULL, NULL, NULL, NULL); + mul_serie_m4(pchan->pose_mat, tmat, offs_bone, pchan->chan_mat, NULL, NULL, NULL, NULL, NULL); } else if(bone->flag & BONE_NO_SCALE) { float orthmat[4][4]; /* get the official transform, but we only use the vector from it (optimize...) */ - Mat4MulSerie(pchan->pose_mat, parchan->pose_mat, offs_bone, pchan->chan_mat, NULL, NULL, NULL, NULL, NULL); + mul_serie_m4(pchan->pose_mat, parchan->pose_mat, offs_bone, pchan->chan_mat, NULL, NULL, NULL, NULL, NULL); VECCOPY(vec, pchan->pose_mat[3]); /* do this again, but with an ortho-parent matrix */ - Mat4CpyMat4(orthmat, parchan->pose_mat); - Mat4Ortho(orthmat); - Mat4MulSerie(pchan->pose_mat, orthmat, offs_bone, pchan->chan_mat, NULL, NULL, NULL, NULL, NULL); + copy_m4_m4(orthmat, parchan->pose_mat); + normalize_m4(orthmat); + mul_serie_m4(pchan->pose_mat, orthmat, offs_bone, pchan->chan_mat, NULL, NULL, NULL, NULL, NULL); /* copy correct transform */ VECCOPY(pchan->pose_mat[3], vec); } else - Mat4MulSerie(pchan->pose_mat, parchan->pose_mat, offs_bone, pchan->chan_mat, NULL, NULL, NULL, NULL, NULL); + mul_serie_m4(pchan->pose_mat, parchan->pose_mat, offs_bone, pchan->chan_mat, NULL, NULL, NULL, NULL, NULL); } else { - Mat4MulMat4(pchan->pose_mat, pchan->chan_mat, bone->arm_mat); + mul_m4_m4m4(pchan->pose_mat, pchan->chan_mat, bone->arm_mat); /* only rootbones get the cyclic offset (unless user doesn't want that) */ if ((bone->flag & BONE_NO_CYCLICOFFSET) == 0) - VecAddf(pchan->pose_mat[3], pchan->pose_mat[3], ob->pose->cyclic_offset); + add_v3_v3v3(pchan->pose_mat[3], pchan->pose_mat[3], ob->pose->cyclic_offset); } /* do NLA strip modifiers - i.e. curve follow */ @@ -2213,8 +2229,8 @@ void where_is_pose_bone(Scene *scene, Object *ob, bPoseChannel *pchan, float cti VECCOPY(pchan->pose_head, pchan->pose_mat[3]); /* calculate tail */ VECCOPY(vec, pchan->pose_mat[1]); - VecMulf(vec, bone->length); - VecAddf(pchan->pose_tail, pchan->pose_head, vec); + mul_v3_fl(vec, bone->length); + add_v3_v3v3(pchan->pose_tail, pchan->pose_head, vec); } /* This only reads anim data from channels, and writes to channels */ @@ -2242,14 +2258,14 @@ void where_is_pose (Scene *scene, Object *ob) for(pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { bone= pchan->bone; if(bone) { - Mat4CpyMat4(pchan->pose_mat, bone->arm_mat); + copy_m4_m4(pchan->pose_mat, bone->arm_mat); VECCOPY(pchan->pose_head, bone->arm_head); VECCOPY(pchan->pose_tail, bone->arm_tail); } } } else { - Mat4Invert(ob->imat, ob->obmat); // imat is needed + invert_m4_m4(ob->imat, ob->obmat); // imat is needed /* 1. clear flags */ for(pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { @@ -2287,8 +2303,8 @@ void where_is_pose (Scene *scene, Object *ob) /* calculating deform matrices */ for(pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { if(pchan->bone) { - Mat4Invert(imat, pchan->bone->arm_mat); - Mat4MulMat4(pchan->chan_mat, imat, pchan->pose_mat); + invert_m4_m4(imat, pchan->bone->arm_mat); + mul_m4_m4m4(pchan->chan_mat, imat, pchan->pose_mat); } } } diff --git a/source/blender/blenkernel/intern/boids.c b/source/blender/blenkernel/intern/boids.c index 712fb13cfc0..389009cca76 100644 --- a/source/blender/blenkernel/intern/boids.c +++ b/source/blender/blenkernel/intern/boids.c @@ -43,7 +43,7 @@ #include "DNA_listBase.h" #include "BLI_rand.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_kdtree.h" #include "BLI_kdopbvh.h" @@ -135,10 +135,10 @@ static int rule_goal_avoid(BoidRule *rule, BoidBrainData *bbd, BoidValues *val, /* estimate future location of target */ get_effector_data(eff, &efd, &epoint, 1); - VecMulf(efd.vel, efd.distance / (val->max_speed * bbd->timestep)); - VecAddf(efd.loc, efd.loc, efd.vel); - VecSubf(efd.vec_to_point, pa->prev_state.co, efd.loc); - efd.distance = VecLength(efd.vec_to_point); + mul_v3_fl(efd.vel, efd.distance / (val->max_speed * bbd->timestep)); + add_v3_v3v3(efd.loc, efd.loc, efd.vel); + sub_v3_v3v3(efd.vec_to_point, pa->prev_state.co, efd.loc); + efd.distance = len_v3(efd.vec_to_point); } if(rule->type == eBoidRuleType_Goal && boids->options & BOID_ALLOW_CLIMB && surface!=0.0f) { @@ -152,17 +152,17 @@ static int rule_goal_avoid(BoidRule *rule, BoidBrainData *bbd, BoidValues *val, priority > 2.0f * gabr->fear_factor) { /* detach from surface and try to fly away from danger */ VECCOPY(efd.vec_to_point, bpa->gravity); - VecMulf(efd.vec_to_point, -1.0f); + mul_v3_fl(efd.vec_to_point, -1.0f); } VECCOPY(bbd->wanted_co, efd.vec_to_point); - VecMulf(bbd->wanted_co, mul); + mul_v3_fl(bbd->wanted_co, mul); bbd->wanted_speed = val->max_speed * priority; /* with goals factor is approach velocity factor */ if(rule->type == eBoidRuleType_Goal && boids->landing_smoothness > 0.0f) { - float len2 = 2.0f*VecLength(pa->prev_state.vel); + float len2 = 2.0f*len_v3(pa->prev_state.vel); surface *= pa->size * boids->height; @@ -198,12 +198,12 @@ static int rule_avoid_collision(BoidRule *rule, BoidBrainData *bbd, BoidValues * float radius = val->personal_space * pa->size, ray_dir[3]; VECCOPY(col.co1, pa->prev_state.co); - VecAddf(col.co2, pa->prev_state.co, pa->prev_state.vel); - VecSubf(ray_dir, col.co2, col.co1); - VecMulf(ray_dir, acbr->look_ahead); + add_v3_v3v3(col.co2, pa->prev_state.co, pa->prev_state.vel); + sub_v3_v3v3(ray_dir, col.co2, col.co1); + mul_v3_fl(ray_dir, acbr->look_ahead); col.t = 0.0f; hit.index = -1; - hit.dist = col.ray_len = VecLength(ray_dir); + hit.dist = col.ray_len = len_v3(ray_dir); /* find out closest deflector object */ for(coll = bbd->sim->colliders->first; coll; coll=coll->next) { @@ -224,9 +224,9 @@ static int rule_avoid_collision(BoidRule *rule, BoidBrainData *bbd, BoidValues * VECCOPY(bbd->wanted_co, col.nor); - VecMulf(bbd->wanted_co, (1.0f - t) * val->personal_space * pa->size); + mul_v3_fl(bbd->wanted_co, (1.0f - t) * val->personal_space * pa->size); - bbd->wanted_speed = sqrt(t) * VecLength(pa->prev_state.vel); + bbd->wanted_speed = sqrt(t) * len_v3(pa->prev_state.vel); return 1; } @@ -235,39 +235,39 @@ static int rule_avoid_collision(BoidRule *rule, BoidBrainData *bbd, BoidValues * //check boids in own system if(acbr->options & BRULE_ACOLL_WITH_BOIDS) { - neighbors = BLI_kdtree_range_search(bbd->sim->psys->tree, acbr->look_ahead * VecLength(pa->prev_state.vel), pa->prev_state.co, pa->prev_state.ave, &ptn); + neighbors = BLI_kdtree_range_search(bbd->sim->psys->tree, acbr->look_ahead * len_v3(pa->prev_state.vel), pa->prev_state.co, pa->prev_state.ave, &ptn); if(neighbors > 1) for(n=1; n<neighbors; n++) { VECCOPY(co1, pa->prev_state.co); VECCOPY(vel1, pa->prev_state.vel); VECCOPY(co2, (bbd->sim->psys->particles + ptn[n].index)->prev_state.co); VECCOPY(vel2, (bbd->sim->psys->particles + ptn[n].index)->prev_state.vel); - VecSubf(loc, co1, co2); + sub_v3_v3v3(loc, co1, co2); - VecSubf(vec, vel1, vel2); + sub_v3_v3v3(vec, vel1, vel2); - inp = Inpf(vec,vec); + inp = dot_v3v3(vec,vec); /* velocities not parallel */ if(inp != 0.0f) { - t = -Inpf(loc, vec)/inp; + t = -dot_v3v3(loc, vec)/inp; /* cpa is not too far in the future so investigate further */ if(t > 0.0f && t < t_min) { VECADDFAC(co1, co1, vel1, t); VECADDFAC(co2, co2, vel2, t); - VecSubf(vec, co2, co1); + sub_v3_v3v3(vec, co2, co1); - len = Normalize(vec); + len = normalize_v3(vec); /* distance of cpa is close enough */ if(len < 2.0f * val->personal_space * pa->size) { t_min = t; - VecMulf(vec, VecLength(vel1)); - VecMulf(vec, (2.0f - t)/2.0f); - VecSubf(bbd->wanted_co, vel1, vec); - bbd->wanted_speed = VecLength(bbd->wanted_co); + mul_v3_fl(vec, len_v3(vel1)); + mul_v3_fl(vec, (2.0f - t)/2.0f); + sub_v3_v3v3(bbd->wanted_co, vel1, vec); + bbd->wanted_speed = len_v3(bbd->wanted_co); ret = 1; } } @@ -281,39 +281,39 @@ static int rule_avoid_collision(BoidRule *rule, BoidBrainData *bbd, BoidValues * ParticleSystem *epsys = psys_get_target_system(bbd->sim->ob, pt); if(epsys) { - neighbors = BLI_kdtree_range_search(epsys->tree, acbr->look_ahead * VecLength(pa->prev_state.vel), pa->prev_state.co, pa->prev_state.ave, &ptn); + neighbors = BLI_kdtree_range_search(epsys->tree, acbr->look_ahead * len_v3(pa->prev_state.vel), pa->prev_state.co, pa->prev_state.ave, &ptn); if(neighbors > 0) for(n=0; n<neighbors; n++) { VECCOPY(co1, pa->prev_state.co); VECCOPY(vel1, pa->prev_state.vel); VECCOPY(co2, (epsys->particles + ptn[n].index)->prev_state.co); VECCOPY(vel2, (epsys->particles + ptn[n].index)->prev_state.vel); - VecSubf(loc, co1, co2); + sub_v3_v3v3(loc, co1, co2); - VecSubf(vec, vel1, vel2); + sub_v3_v3v3(vec, vel1, vel2); - inp = Inpf(vec,vec); + inp = dot_v3v3(vec,vec); /* velocities not parallel */ if(inp != 0.0f) { - t = -Inpf(loc, vec)/inp; + t = -dot_v3v3(loc, vec)/inp; /* cpa is not too far in the future so investigate further */ if(t > 0.0f && t < t_min) { VECADDFAC(co1, co1, vel1, t); VECADDFAC(co2, co2, vel2, t); - VecSubf(vec, co2, co1); + sub_v3_v3v3(vec, co2, co1); - len = Normalize(vec); + len = normalize_v3(vec); /* distance of cpa is close enough */ if(len < 2.0f * val->personal_space * pa->size) { t_min = t; - VecMulf(vec, VecLength(vel1)); - VecMulf(vec, (2.0f - t)/2.0f); - VecSubf(bbd->wanted_co, vel1, vec); - bbd->wanted_speed = VecLength(bbd->wanted_co); + mul_v3_fl(vec, len_v3(vel1)); + mul_v3_fl(vec, (2.0f - t)/2.0f); + sub_v3_v3v3(bbd->wanted_co, vel1, vec); + bbd->wanted_speed = len_v3(bbd->wanted_co); ret = 1; } } @@ -340,9 +340,9 @@ static int rule_separate(BoidRule *rule, BoidBrainData *bbd, BoidValues *val, Pa int ret = 0; if(neighbors > 1 && ptn[1].dist!=0.0f) { - VecSubf(vec, pa->prev_state.co, bbd->sim->psys->particles[ptn[1].index].state.co); - VecMulf(vec, (2.0f * val->personal_space * pa->size - ptn[1].dist) / ptn[1].dist); - VecAddf(bbd->wanted_co, bbd->wanted_co, vec); + sub_v3_v3v3(vec, pa->prev_state.co, bbd->sim->psys->particles[ptn[1].index].state.co); + mul_v3_fl(vec, (2.0f * val->personal_space * pa->size - ptn[1].dist) / ptn[1].dist); + add_v3_v3v3(bbd->wanted_co, bbd->wanted_co, vec); bbd->wanted_speed = val->max_speed; len = ptn[1].dist; ret = 1; @@ -357,9 +357,9 @@ static int rule_separate(BoidRule *rule, BoidBrainData *bbd, BoidValues *val, Pa neighbors = BLI_kdtree_range_search(epsys->tree, 2.0f * val->personal_space * pa->size, pa->prev_state.co, NULL, &ptn); if(neighbors > 0 && ptn[0].dist < len) { - VecSubf(vec, pa->prev_state.co, ptn[0].co); - VecMulf(vec, (2.0f * val->personal_space * pa->size - ptn[0].dist) / ptn[1].dist); - VecAddf(bbd->wanted_co, bbd->wanted_co, vec); + sub_v3_v3v3(vec, pa->prev_state.co, ptn[0].co); + mul_v3_fl(vec, (2.0f * val->personal_space * pa->size - ptn[0].dist) / ptn[1].dist); + add_v3_v3v3(bbd->wanted_co, bbd->wanted_co, vec); bbd->wanted_speed = val->max_speed; len = ptn[0].dist; ret = 1; @@ -380,19 +380,19 @@ static int rule_flock(BoidRule *rule, BoidBrainData *bbd, BoidValues *val, Parti if(neighbors > 1) { for(n=1; n<neighbors; n++) { - VecAddf(loc, loc, bbd->sim->psys->particles[ptn[n].index].prev_state.co); - VecAddf(vec, vec, bbd->sim->psys->particles[ptn[n].index].prev_state.vel); + add_v3_v3v3(loc, loc, bbd->sim->psys->particles[ptn[n].index].prev_state.co); + add_v3_v3v3(vec, vec, bbd->sim->psys->particles[ptn[n].index].prev_state.vel); } - VecMulf(loc, 1.0f/((float)neighbors - 1.0f)); - VecMulf(vec, 1.0f/((float)neighbors - 1.0f)); + mul_v3_fl(loc, 1.0f/((float)neighbors - 1.0f)); + mul_v3_fl(vec, 1.0f/((float)neighbors - 1.0f)); - VecSubf(loc, loc, pa->prev_state.co); - VecSubf(vec, vec, pa->prev_state.vel); + sub_v3_v3v3(loc, loc, pa->prev_state.co); + sub_v3_v3v3(vec, vec, pa->prev_state.vel); - VecAddf(bbd->wanted_co, bbd->wanted_co, vec); - VecAddf(bbd->wanted_co, bbd->wanted_co, loc); - bbd->wanted_speed = VecLength(bbd->wanted_co); + add_v3_v3v3(bbd->wanted_co, bbd->wanted_co, vec); + add_v3_v3v3(bbd->wanted_co, bbd->wanted_co, loc); + bbd->wanted_speed = len_v3(bbd->wanted_co); ret = 1; } @@ -410,16 +410,16 @@ static int rule_follow_leader(BoidRule *rule, BoidBrainData *bbd, BoidValues *va float vec2[3], t; /* first check we're not blocking the leader*/ - VecSubf(vec, flbr->loc, flbr->oloc); - VecMulf(vec, 1.0f/bbd->timestep); + sub_v3_v3v3(vec, flbr->loc, flbr->oloc); + mul_v3_fl(vec, 1.0f/bbd->timestep); - VecSubf(loc, pa->prev_state.co, flbr->oloc); + sub_v3_v3v3(loc, pa->prev_state.co, flbr->oloc); - mul = Inpf(vec, vec); + mul = dot_v3v3(vec, vec); /* leader is not moving */ if(mul < 0.01) { - len = VecLength(loc); + len = len_v3(loc); /* too close to leader */ if(len < 2.0f * val->personal_space * pa->size) { VECCOPY(bbd->wanted_co, loc); @@ -428,16 +428,16 @@ static int rule_follow_leader(BoidRule *rule, BoidBrainData *bbd, BoidValues *va } } else { - t = Inpf(loc, vec)/mul; + t = dot_v3v3(loc, vec)/mul; /* possible blocking of leader in near future */ if(t > 0.0f && t < 3.0f) { VECCOPY(vec2, vec); - VecMulf(vec2, t); + mul_v3_fl(vec2, t); - VecSubf(vec2, loc, vec2); + sub_v3_v3v3(vec2, loc, vec2); - len = VecLength(vec2); + len = len_v3(vec2); if(len < 2.0f * val->personal_space * pa->size) { VECCOPY(bbd->wanted_co, vec2); @@ -454,15 +454,15 @@ static int rule_follow_leader(BoidRule *rule, BoidBrainData *bbd, BoidValues *va } else { VECCOPY(loc, flbr->oloc); - VecSubf(vec, flbr->loc, flbr->oloc); - VecMulf(vec, 1.0/bbd->timestep); + sub_v3_v3v3(vec, flbr->loc, flbr->oloc); + mul_v3_fl(vec, 1.0/bbd->timestep); } /* fac is seconds behind leader */ VECADDFAC(loc, loc, vec, -flbr->distance); - VecSubf(bbd->wanted_co, loc, pa->prev_state.co); - bbd->wanted_speed = VecLength(bbd->wanted_co); + sub_v3_v3v3(bbd->wanted_co, loc, pa->prev_state.co); + bbd->wanted_speed = len_v3(bbd->wanted_co); ret = 1; } @@ -473,13 +473,13 @@ static int rule_follow_leader(BoidRule *rule, BoidBrainData *bbd, BoidValues *va for(i = 0; i< bbd->sim->psys->totpart; i+=n){ VECCOPY(vec, bbd->sim->psys->particles[i].prev_state.vel); - VecSubf(loc, pa->prev_state.co, bbd->sim->psys->particles[i].prev_state.co); + sub_v3_v3v3(loc, pa->prev_state.co, bbd->sim->psys->particles[i].prev_state.co); - mul = Inpf(vec, vec); + mul = dot_v3v3(vec, vec); /* leader is not moving */ if(mul < 0.01) { - len = VecLength(loc); + len = len_v3(loc); /* too close to leader */ if(len < 2.0f * val->personal_space * pa->size) { VECCOPY(bbd->wanted_co, loc); @@ -488,16 +488,16 @@ static int rule_follow_leader(BoidRule *rule, BoidBrainData *bbd, BoidValues *va } } else { - t = Inpf(loc, vec)/mul; + t = dot_v3v3(loc, vec)/mul; /* possible blocking of leader in near future */ if(t > 0.0f && t < t_min) { VECCOPY(vec2, vec); - VecMulf(vec2, t); + mul_v3_fl(vec2, t); - VecSubf(vec2, loc, vec2); + sub_v3_v3v3(vec2, loc, vec2); - len = VecLength(vec2); + len = len_v3(vec2); if(len < 2.0f * val->personal_space * pa->size) { t_min = t; @@ -524,8 +524,8 @@ static int rule_follow_leader(BoidRule *rule, BoidBrainData *bbd, BoidValues *va /* fac is seconds behind leader */ VECADDFAC(loc, loc, vec, -flbr->distance); - VecSubf(bbd->wanted_co, loc, pa->prev_state.co); - bbd->wanted_speed = VecLength(bbd->wanted_co); + sub_v3_v3v3(bbd->wanted_co, loc, pa->prev_state.co); + bbd->wanted_speed = len_v3(bbd->wanted_co); ret = 1; } @@ -544,30 +544,30 @@ static int rule_average_speed(BoidRule *rule, BoidBrainData *bbd, BoidValues *va bpa->wander[1] += asbr->wander * (-1.0f + 2.0f * BLI_frand()); bpa->wander[2] += asbr->wander * (-1.0f + 2.0f * BLI_frand()); - Normalize(bpa->wander); + normalize_v3(bpa->wander); VECCOPY(vec, bpa->wander); - QuatMulVecf(pa->prev_state.rot, vec); + mul_qt_v3(pa->prev_state.rot, vec); VECCOPY(bbd->wanted_co, pa->prev_state.ave); - VecMulf(bbd->wanted_co, 1.1f); + mul_v3_fl(bbd->wanted_co, 1.1f); - VecAddf(bbd->wanted_co, bbd->wanted_co, vec); + add_v3_v3v3(bbd->wanted_co, bbd->wanted_co, vec); /* leveling */ if(asbr->level > 0.0f) { - Projf(vec, bbd->wanted_co, bbd->sim->psys->part->acc); - VecMulf(vec, asbr->level); - VecSubf(bbd->wanted_co, bbd->wanted_co, vec); + project_v3_v3v3(vec, bbd->wanted_co, bbd->sim->psys->part->acc); + mul_v3_fl(vec, asbr->level); + sub_v3_v3v3(bbd->wanted_co, bbd->wanted_co, vec); } } else { VECCOPY(bbd->wanted_co, pa->prev_state.ave); /* may happen at birth */ - if(Inp2f(bbd->wanted_co,bbd->wanted_co)==0.0f) { + if(dot_v2v2(bbd->wanted_co,bbd->wanted_co)==0.0f) { bbd->wanted_co[0] = 2.0f*(0.5f - BLI_frand()); bbd->wanted_co[1] = 2.0f*(0.5f - BLI_frand()); bbd->wanted_co[2] = 2.0f*(0.5f - BLI_frand()); @@ -575,9 +575,9 @@ static int rule_average_speed(BoidRule *rule, BoidBrainData *bbd, BoidValues *va /* leveling */ if(asbr->level > 0.0f) { - Projf(vec, bbd->wanted_co, bbd->sim->psys->part->acc); - VecMulf(vec, asbr->level); - VecSubf(bbd->wanted_co, bbd->wanted_co, vec); + project_v3_v3v3(vec, bbd->wanted_co, bbd->sim->psys->part->acc); + mul_v3_fl(vec, asbr->level); + sub_v3_v3v3(bbd->wanted_co, bbd->wanted_co, vec); } } @@ -641,20 +641,20 @@ static int rule_fight(BoidRule *rule, BoidBrainData *bbd, BoidValues *val, Parti } /* decide action if enemy presence found */ if(e_strength > 0.0f) { - VecSubf(bbd->wanted_co, closest_enemy, pa->prev_state.co); + sub_v3_v3v3(bbd->wanted_co, closest_enemy, pa->prev_state.co); /* attack if in range */ if(closest_dist <= bbd->part->boids->range + pa->size + enemy_pa->size) { float damage = BLI_frand(); float enemy_dir[3] = {bbd->wanted_co[0],bbd->wanted_co[1],bbd->wanted_co[2]}; - Normalize(enemy_dir); + normalize_v3(enemy_dir); /* fight mode */ bbd->wanted_speed = 0.0f; /* must face enemy to fight */ - if(Inpf(pa->prev_state.ave, enemy_dir)>0.5f) { + if(dot_v3v3(pa->prev_state.ave, enemy_dir)>0.5f) { bpa = enemy_pa->boid; bpa->data.health -= bbd->part->boids->strength * bbd->timestep * ((1.0f-bbd->part->boids->accuracy)*damage + bbd->part->boids->accuracy); } @@ -669,7 +669,7 @@ static int rule_fight(BoidRule *rule, BoidBrainData *bbd, BoidValues *val, Parti if(bpa->data.health/bbd->part->boids->health * bbd->part->boids->aggression < e_strength / f_strength) { /* decide to flee */ if(closest_dist < fbr->flee_distance * fbr->distance) { - VecMulf(bbd->wanted_co, -1.0f); + mul_v3_fl(bbd->wanted_co, -1.0f); bbd->wanted_speed = val->max_speed; } else { /* wait for better odds */ @@ -735,7 +735,7 @@ static Object *boid_find_ground(BoidBrainData *bbd, ParticleData *pa, float *gro /* take surface velocity into account */ closest_point_on_surface(surmd, pa->state.co, x, NULL, v); - VecAddf(x, x, v); + add_v3_v3v3(x, x, v); /* get actual position on surface */ closest_point_on_surface(surmd, x, ground_co, ground_nor, NULL); @@ -754,12 +754,12 @@ static Object *boid_find_ground(BoidBrainData *bbd, ParticleData *pa, float *gro VECCOPY(col.co1, pa->state.co); VECCOPY(col.co2, pa->state.co); - VecAddf(col.co1, col.co1, zvec); - VecSubf(col.co2, col.co2, zvec); - VecSubf(ray_dir, col.co2, col.co1); + add_v3_v3v3(col.co1, col.co1, zvec); + sub_v3_v3v3(col.co2, col.co2, zvec); + sub_v3_v3v3(ray_dir, col.co2, col.co1); col.t = 0.0f; hit.index = -1; - hit.dist = col.ray_len = VecLength(ray_dir); + hit.dist = col.ray_len = len_v3(ray_dir); /* find out upmost deflector object */ for(coll = bbd->sim->colliders->first; coll; coll = coll->next){ @@ -772,9 +772,9 @@ static Object *boid_find_ground(BoidBrainData *bbd, ParticleData *pa, float *gro /* then use that object */ if(hit.index>=0) { t = hit.dist/col.ray_len; - VecLerpf(ground_co, col.co1, col.co2, t); + interp_v3_v3v3(ground_co, col.co1, col.co2, t); VECCOPY(ground_nor, col.nor); - Normalize(ground_nor); + normalize_v3(ground_nor); return col.hit_ob; } else { @@ -829,23 +829,23 @@ static void boid_climb(BoidSettings *boids, ParticleData *pa, float *surface_co, /* gather apparent gravity */ VECADDFAC(bpa->gravity, bpa->gravity, surface_nor, -1.0); - Normalize(bpa->gravity); + normalize_v3(bpa->gravity); /* raise boid it's size from surface */ - VecMulf(nor, pa->size * boids->height); - VecAddf(pa->state.co, surface_co, nor); + mul_v3_fl(nor, pa->size * boids->height); + add_v3_v3v3(pa->state.co, surface_co, nor); /* remove normal component from velocity */ - Projf(vel, pa->state.vel, surface_nor); - VecSubf(pa->state.vel, pa->state.vel, vel); + project_v3_v3v3(vel, pa->state.vel, surface_nor); + sub_v3_v3v3(pa->state.vel, pa->state.vel, vel); } static float boid_goal_signed_dist(float *boid_co, float *goal_co, float *goal_nor) { float vec[3]; - VecSubf(vec, boid_co, goal_co); + sub_v3_v3v3(vec, boid_co, goal_co); - return Inpf(vec, goal_nor); + return dot_v3v3(vec, goal_nor); } /* wanted_co is relative to boid location */ static int apply_boid_rule(BoidBrainData *bbd, BoidRule *rule, BoidValues *val, ParticleData *pa, float fuzziness) @@ -859,7 +859,7 @@ static int apply_boid_rule(BoidBrainData *bbd, BoidRule *rule, BoidValues *val, if(boid_rules[rule->type](rule, bbd, val, pa)==0) return 0; - if(fuzziness < 0.0f || VecLenCompare(bbd->wanted_co, pa->prev_state.vel, fuzziness * VecLength(pa->prev_state.vel))==0) + if(fuzziness < 0.0f || compare_len_v3v3(bbd->wanted_co, pa->prev_state.vel, fuzziness * len_v3(pa->prev_state.vel))==0) return 1; else return 0; @@ -943,7 +943,7 @@ void boid_brain(BoidBrainData *bbd, int p, ParticleData *pa) int n = 0; for(rule = state->rules.first; rule; rule=rule->next) { if(apply_boid_rule(bbd, rule, &val, pa, -1.0f)) { - VecAddf(wanted_co, wanted_co, bbd->wanted_co); + add_v3_v3v3(wanted_co, wanted_co, bbd->wanted_co); wanted_speed += bbd->wanted_speed; n++; bbd->wanted_co[0]=bbd->wanted_co[1]=bbd->wanted_co[2]=bbd->wanted_speed=0.0f; @@ -951,7 +951,7 @@ void boid_brain(BoidBrainData *bbd, int p, ParticleData *pa) } if(n > 1) { - VecMulf(wanted_co, 1.0f/(float)n); + mul_v3_fl(wanted_co, 1.0f/(float)n); wanted_speed /= (float)n; } @@ -971,12 +971,12 @@ void boid_brain(BoidBrainData *bbd, int p, ParticleData *pa) float cvel[3], dir[3]; VECCOPY(dir, pa->prev_state.ave); - Normalize2(dir); + normalize_v2(dir); VECCOPY(cvel, bbd->wanted_co); - Normalize2(cvel); + normalize_v2(cvel); - if(Inp2f(cvel, dir) > 0.95 / mul) + if(dot_v2v2(cvel, dir) > 0.95 / mul) bpa->data.mode = eBoidMode_Liftoff; } else if(val.jump_speed > 0.0f) { @@ -990,20 +990,20 @@ void boid_brain(BoidBrainData *bbd, int p, ParticleData *pa) float len; VECCOPY(dir, pa->prev_state.ave); - Normalize2(dir); + normalize_v2(dir); VECCOPY(cvel, bbd->wanted_co); - Normalize2(cvel); + normalize_v2(cvel); - len = Vec2Length(pa->prev_state.vel); + len = len_v2(pa->prev_state.vel); /* first of all, are we going in a suitable direction? */ /* or at a suitably slow speed */ - if(Inp2f(cvel, dir) > 0.95f / mul || len <= state->rule_fuzziness) { + if(dot_v2v2(cvel, dir) > 0.95f / mul || len <= state->rule_fuzziness) { /* try to reach goal at highest point of the parabolic path */ - cur_v = Vec2Length(pa->prev_state.vel); + cur_v = len_v2(pa->prev_state.vel); z_v = sasqrt(-2.0f * bbd->part->acc[2] * bbd->wanted_co[2]); - ground_v = Vec2Length(bbd->wanted_co)*sasqrt(-0.5f * bbd->part->acc[2] / bbd->wanted_co[2]); + ground_v = len_v2(bbd->wanted_co)*sasqrt(-0.5f * bbd->part->acc[2] / bbd->wanted_co[2]); len = sasqrt((ground_v-cur_v)*(ground_v-cur_v) + z_v*z_v); @@ -1014,11 +1014,11 @@ void boid_brain(BoidBrainData *bbd, int p, ParticleData *pa) VECCOPY(jump_v, dir); jump_v[2] = z_v; - VecMulf(jump_v, ground_v); + mul_v3_fl(jump_v, ground_v); - Normalize(jump_v); - VecMulf(jump_v, len); - Vec2Addf(jump_v, jump_v, pa->prev_state.vel); + normalize_v3(jump_v); + mul_v3_fl(jump_v, len); + add_v2_v2v2(jump_v, jump_v, pa->prev_state.vel); } } } @@ -1103,7 +1103,7 @@ void boid_body(BoidBrainData *bbd, ParticleData *pa) VECCOPY(old_dir, pa->prev_state.ave); VECCOPY(wanted_dir, bbd->wanted_co); - new_speed = Normalize(wanted_dir); + new_speed = normalize_v3(wanted_dir); /* first check if we have valid direction we want to go towards */ if(new_speed == 0.0f) { @@ -1111,39 +1111,39 @@ void boid_body(BoidBrainData *bbd, ParticleData *pa) } else { float old_dir2[2], wanted_dir2[2], nor[3], angle; - Vec2Copyf(old_dir2, old_dir); - Normalize2(old_dir2); - Vec2Copyf(wanted_dir2, wanted_dir); - Normalize2(wanted_dir2); + copy_v2_v2(old_dir2, old_dir); + normalize_v2(old_dir2); + copy_v2_v2(wanted_dir2, wanted_dir); + normalize_v2(wanted_dir2); /* choose random direction to turn if wanted velocity */ /* is directly behind regardless of z-coordinate */ - if(Inp2f(old_dir2, wanted_dir2) < -0.99f) { + if(dot_v2v2(old_dir2, wanted_dir2) < -0.99f) { wanted_dir[0] = 2.0f*(0.5f - BLI_frand()); wanted_dir[1] = 2.0f*(0.5f - BLI_frand()); wanted_dir[2] = 2.0f*(0.5f - BLI_frand()); - Normalize(wanted_dir); + normalize_v3(wanted_dir); } /* constrain direction with maximum angular velocity */ - angle = saacos(Inpf(old_dir, wanted_dir)); + angle = saacos(dot_v3v3(old_dir, wanted_dir)); angle = MIN2(angle, val.max_ave); - Crossf(nor, old_dir, wanted_dir); - VecRotToQuat(nor, angle, q); + cross_v3_v3v3(nor, old_dir, wanted_dir); + axis_angle_to_quat( q,nor, angle); VECCOPY(new_dir, old_dir); - QuatMulVecf(q, new_dir); - Normalize(new_dir); + mul_qt_v3(q, new_dir); + normalize_v3(new_dir); /* save direction in case resulting velocity too small */ - VecRotToQuat(nor, angle*dtime, q); + axis_angle_to_quat( q,nor, angle*dtime); VECCOPY(pa->state.ave, old_dir); - QuatMulVecf(q, pa->state.ave); - Normalize(pa->state.ave); + mul_qt_v3(q, pa->state.ave); + normalize_v3(pa->state.ave); } /* constrain speed with maximum acceleration */ - old_speed = VecLength(pa->prev_state.vel); + old_speed = len_v3(pa->prev_state.vel); if(bbd->wanted_speed < old_speed) new_speed = MAX2(bbd->wanted_speed, old_speed - val.max_acc); @@ -1152,11 +1152,11 @@ void boid_body(BoidBrainData *bbd, ParticleData *pa) /* combine direction and speed */ VECCOPY(new_vel, new_dir); - VecMulf(new_vel, new_speed); + mul_v3_fl(new_vel, new_speed); /* maintain minimum flying velocity if not landing */ if(level >= landing_level) { - float len2 = Inp2f(new_vel,new_vel); + float len2 = dot_v2v2(new_vel,new_vel); float root; len2 = MAX2(len2, val.min_speed*val.min_speed); @@ -1164,20 +1164,20 @@ void boid_body(BoidBrainData *bbd, ParticleData *pa) new_vel[2] = new_vel[2] < 0.0f ? -root : root; - Normalize2(new_vel); - Vec2Mulf(new_vel, sasqrt(len2)); + normalize_v2(new_vel); + mul_v2_fl(new_vel, sasqrt(len2)); } /* finally constrain speed to max speed */ - new_speed = Normalize(new_vel); - VecMulf(new_vel, MIN2(new_speed, val.max_speed)); + new_speed = normalize_v3(new_vel); + mul_v3_fl(new_vel, MIN2(new_speed, val.max_speed)); /* get acceleration from difference of velocities */ - VecSubf(acc, new_vel, pa->prev_state.vel); + sub_v3_v3v3(acc, new_vel, pa->prev_state.vel); /* break acceleration to components */ - Projf(tan_acc, acc, pa->prev_state.ave); - VecSubf(nor_acc, acc, tan_acc); + project_v3_v3v3(tan_acc, acc, pa->prev_state.ave); + sub_v3_v3v3(nor_acc, acc, tan_acc); } /* account for effectors */ @@ -1185,32 +1185,32 @@ void boid_body(BoidBrainData *bbd, ParticleData *pa) pdDoEffectors(bbd->sim->psys->effectors, bbd->sim->colliders, bbd->part->effector_weights, &epoint, force, NULL); if(ELEM(bpa->data.mode, eBoidMode_OnLand, eBoidMode_Climbing)) { - float length = Normalize(force); + float length = normalize_v3(force); length = MAX2(0.0f, length - boids->land_stick_force); - VecMulf(force, length); + mul_v3_fl(force, length); } - VecAddf(acc, acc, force); + add_v3_v3v3(acc, acc, force); /* store smoothed acceleration for nice banking etc. */ VECADDFAC(bpa->data.acc, bpa->data.acc, acc, dtime); - VecMulf(bpa->data.acc, 1.0f / (1.0f + dtime)); + mul_v3_fl(bpa->data.acc, 1.0f / (1.0f + dtime)); /* integrate new location & velocity */ /* by regarding the acceleration as a force at this stage we*/ /* can get better control allthough it's a bit unphysical */ - VecMulf(acc, 1.0f/pa_mass); + mul_v3_fl(acc, 1.0f/pa_mass); VECCOPY(dvec, acc); - VecMulf(dvec, dtime*dtime*0.5f); + mul_v3_fl(dvec, dtime*dtime*0.5f); VECCOPY(bvec, pa->prev_state.vel); - VecMulf(bvec, dtime); - VecAddf(dvec, dvec, bvec); - VecAddf(pa->state.co, pa->state.co, dvec); + mul_v3_fl(bvec, dtime); + add_v3_v3v3(dvec, dvec, bvec); + add_v3_v3v3(pa->state.co, pa->state.co, dvec); VECADDFAC(pa->state.vel, pa->state.vel, acc, dtime); @@ -1224,9 +1224,9 @@ void boid_body(BoidBrainData *bbd, ParticleData *pa) float grav[3] = {0.0f, 0.0f, bbd->part->acc[2] < 0.0f ? -1.0f : 0.0f}; /* don't take forward acceleration into account (better banking) */ - if(Inpf(bpa->data.acc, pa->state.vel) > 0.0f) { - Projf(dvec, bpa->data.acc, pa->state.vel); - VecSubf(dvec, bpa->data.acc, dvec); + if(dot_v3v3(bpa->data.acc, pa->state.vel) > 0.0f) { + project_v3_v3v3(dvec, bpa->data.acc, pa->state.vel); + sub_v3_v3v3(dvec, bpa->data.acc, dvec); } else { VECCOPY(dvec, bpa->data.acc); @@ -1234,7 +1234,7 @@ void boid_body(BoidBrainData *bbd, ParticleData *pa) /* gather apparent gravity */ VECADDFAC(bpa->gravity, grav, dvec, -boids->banking); - Normalize(bpa->gravity); + normalize_v3(bpa->gravity); /* stick boid on goal when close enough */ if(bbd->goal_ob && boid_goal_signed_dist(pa->state.co, bbd->goal_co, bbd->goal_nor) <= pa->size * boids->height) { @@ -1257,7 +1257,7 @@ void boid_body(BoidBrainData *bbd, ParticleData *pa) /* gather apparent gravity */ VECADDFAC(bpa->gravity, bpa->gravity, grav, dtime); - Normalize(bpa->gravity); + normalize_v3(bpa->gravity); if(boids->options & BOID_ALLOW_LAND) { /* stick boid on goal when close enough */ @@ -1289,15 +1289,15 @@ void boid_body(BoidBrainData *bbd, ParticleData *pa) ///* gather apparent gravity to r_ve */ //VECADDFAC(pa->r_ve, pa->r_ve, ground_nor, -1.0); - //Normalize(pa->r_ve); + //normalize_v3(pa->r_ve); ///* raise boid it's size from surface */ - //VecMulf(nor, pa->size * boids->height); - //VecAddf(pa->state.co, ground_co, nor); + //mul_v3_fl(nor, pa->size * boids->height); + //add_v3_v3v3(pa->state.co, ground_co, nor); ///* remove normal component from velocity */ - //Projf(v, pa->state.vel, ground_nor); - //VecSubf(pa->state.vel, pa->state.vel, v); + //project_v3_v3v3(v, pa->state.vel, ground_nor); + //sub_v3_v3v3(pa->state.vel, pa->state.vel, v); break; } case eBoidMode_OnLand: @@ -1323,19 +1323,19 @@ void boid_body(BoidBrainData *bbd, ParticleData *pa) /* Don't take gravity's strength in to account, */ /* otherwise amount of banking is hard to control. */ VECCOPY(grav, ground_nor); - VecMulf(grav, -1.0f); + mul_v3_fl(grav, -1.0f); - Projf(dvec, bpa->data.acc, pa->state.vel); - VecSubf(dvec, bpa->data.acc, dvec); + project_v3_v3v3(dvec, bpa->data.acc, pa->state.vel); + sub_v3_v3v3(dvec, bpa->data.acc, dvec); /* gather apparent gravity */ VECADDFAC(bpa->gravity, grav, dvec, -boids->banking); - Normalize(bpa->gravity); + normalize_v3(bpa->gravity); } else { /* gather negative surface normal */ VECADDFAC(bpa->gravity, bpa->gravity, ground_nor, -1.0f); - Normalize(bpa->gravity); + normalize_v3(bpa->gravity); } break; } @@ -1343,36 +1343,36 @@ void boid_body(BoidBrainData *bbd, ParticleData *pa) /* save direction to state.ave unless the boid is falling */ /* (boids can't effect their direction when falling) */ - if(bpa->data.mode!=eBoidMode_Falling && VecLength(pa->state.vel) > 0.1*pa->size) { + if(bpa->data.mode!=eBoidMode_Falling && len_v3(pa->state.vel) > 0.1*pa->size) { VECCOPY(pa->state.ave, pa->state.vel); - Normalize(pa->state.ave); + normalize_v3(pa->state.ave); } /* apply damping */ if(ELEM(bpa->data.mode, eBoidMode_OnLand, eBoidMode_Climbing)) - VecMulf(pa->state.vel, 1.0f - 0.2f*bbd->part->dampfac); + mul_v3_fl(pa->state.vel, 1.0f - 0.2f*bbd->part->dampfac); /* calculate rotation matrix based on forward & down vectors */ if(bpa->data.mode == eBoidMode_InAir) { VECCOPY(mat[0], pa->state.ave); - Projf(dvec, bpa->gravity, pa->state.ave); - VecSubf(mat[2], bpa->gravity, dvec); - Normalize(mat[2]); + project_v3_v3v3(dvec, bpa->gravity, pa->state.ave); + sub_v3_v3v3(mat[2], bpa->gravity, dvec); + normalize_v3(mat[2]); } else { - Projf(dvec, pa->state.ave, bpa->gravity); - VecSubf(mat[0], pa->state.ave, dvec); - Normalize(mat[0]); + project_v3_v3v3(dvec, pa->state.ave, bpa->gravity); + sub_v3_v3v3(mat[0], pa->state.ave, dvec); + normalize_v3(mat[0]); VECCOPY(mat[2], bpa->gravity); } - VecMulf(mat[2], -1.0f); - Crossf(mat[1], mat[2], mat[0]); + mul_v3_fl(mat[2], -1.0f); + cross_v3_v3v3(mat[1], mat[2], mat[0]); /* apply rotation */ - Mat3ToQuat_is_ok(mat, q); - QuatCopy(pa->state.rot, q); + mat3_to_quat_is_ok( q,mat); + copy_qt_qt(pa->state.rot, q); } BoidRule *boid_new_rule(int type) diff --git a/source/blender/blenkernel/intern/booleanops.c b/source/blender/blenkernel/intern/booleanops.c index 5f0697f06ce..68e1f61a800 100644 --- a/source/blender/blenkernel/intern/booleanops.c +++ b/source/blender/blenkernel/intern/booleanops.c @@ -33,7 +33,7 @@ #include "MEM_guardedalloc.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_ghash.h" @@ -104,7 +104,7 @@ static void VertexIt_Fill(CSG_IteratorPtr it, CSG_IVertex *vert) float global_pos[3]; /* boolean happens in global space, transform both with obmat */ - VecMat4MulVecfl( + mul_v3_m4v3( global_pos, iterator->ob->obmat, verts[iterator->pos].co @@ -327,11 +327,11 @@ static void InterpCSGFace( for (j = 0; j < nr; j++) { // get coordinate into the space of the original mesh if (mapmat) - VecMat4MulVecfl(obco, mapmat, co[j]); + mul_v3_m4v3(obco, mapmat, co[j]); else - VecCopyf(obco, co[j]); + copy_v3_v3(obco, co[j]); - InterpWeightsQ3Dfl(orig_co[0], orig_co[1], orig_co[2], orig_co[3], obco, w[j]); + interp_weights_face_v3( w[j],orig_co[0], orig_co[1], orig_co[2], orig_co[3], obco); } CustomData_interp(&orig_dm->faceData, &dm->faceData, &orig_index, NULL, (float*)w, 1, index); @@ -375,7 +375,7 @@ static DerivedMesh *ConvertCSGDescriptorsToDerivedMesh( // we have to map the vertex coordinates back in the coordinate frame // of the resulting object, since it was computed in world space - VecMat4MulVecfl(mvert->co, parinv, csgvert.position); + mul_v3_m4v3(mvert->co, parinv, csgvert.position); } // a hash table to remap materials to indices @@ -478,9 +478,9 @@ DerivedMesh *NewBooleanDerivedMesh_intern( // we map the final object back into ob's local coordinate space. For this // we need to compute the inverse transform from global to ob (inv_mat), // and the transform from ob to ob_select for use in interpolation (map_mat) - Mat4Invert(inv_mat, ob->obmat); - Mat4MulMat4(map_mat, ob_select->obmat, inv_mat); - Mat4Invert(inv_mat, ob_select->obmat); + invert_m4_m4(inv_mat, ob->obmat); + mul_m4_m4m4(map_mat, ob_select->obmat, inv_mat); + invert_m4_m4(inv_mat, ob_select->obmat); { // interface with the boolean module: @@ -526,8 +526,8 @@ DerivedMesh *NewBooleanDerivedMesh_intern( CSG_FreeVertexDescriptor(&vd_o); CSG_FreeFaceDescriptor(&fd_o); } -// else -// XXX error("Unknown internal error in boolean"); + else + printf("Unknown internal error in boolean"); CSG_FreeBooleanOperation(bool_op); diff --git a/source/blender/blenkernel/intern/booleanops_mesh.c b/source/blender/blenkernel/intern/booleanops_mesh.c index 14e32873dbd..15a3d042622 100644 --- a/source/blender/blenkernel/intern/booleanops_mesh.c +++ b/source/blender/blenkernel/intern/booleanops_mesh.c @@ -47,7 +47,7 @@ #include "BKE_library.h" #include "BKE_material.h" -#include "BLI_arithb.h" +#include "BLI_math.h" /** * Implementation of boolean ops mesh interface. @@ -151,7 +151,7 @@ CSG_AddMeshToBlender( if (mesh == NULL) return 0; if (mesh->base == NULL) return 0; - Mat4Invert(inv_mat,mesh->base->object->obmat); + invert_m4_m4(inv_mat,mesh->base->object->obmat); // Create a new blender mesh object - using 'base' as // a template for the new object. diff --git a/source/blender/blenkernel/intern/brush.c b/source/blender/blenkernel/intern/brush.c index b415e7b7b17..2923853d6a7 100644 --- a/source/blender/blenkernel/intern/brush.c +++ b/source/blender/blenkernel/intern/brush.c @@ -42,7 +42,7 @@ #include "RNA_access.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_rand.h" @@ -846,8 +846,8 @@ int brush_painter_paint(BrushPainter *painter, BrushFunc func, float *pos, doubl /* setup starting time, direction vector and accumulated time */ starttime= painter->accumtime; - Vec2Subf(dmousepos, pos, painter->lastmousepos); - len= Normalize2(dmousepos); + sub_v2_v2v2(dmousepos, pos, painter->lastmousepos); + len= normalize_v2(dmousepos); painter->accumtime += curtime - painter->lasttime; /* do paint op over unpainted time distance */ @@ -881,8 +881,8 @@ int brush_painter_paint(BrushPainter *painter, BrushFunc func, float *pos, doubl /* setup starting distance, direction vector and accumulated distance */ startdistance= painter->accumdistance; - Vec2Subf(dmousepos, pos, painter->lastmousepos); - len= Normalize2(dmousepos); + sub_v2_v2v2(dmousepos, pos, painter->lastmousepos); + len= normalize_v2(dmousepos); painter->accumdistance += len; /* do paint op over unpainted distance */ diff --git a/source/blender/blenkernel/intern/bvhutils.c b/source/blender/blenkernel/intern/bvhutils.c index f2526231d50..5945be51aac 100644 --- a/source/blender/blenkernel/intern/bvhutils.c +++ b/source/blender/blenkernel/intern/bvhutils.c @@ -45,7 +45,7 @@ #include "BKE_displist.h" #include "BKE_global.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_linklist.h" #include "MEM_guardedalloc.h" @@ -55,7 +55,7 @@ static float ray_tri_intersection(const BVHTreeRay *ray, const float m_dist, con { float dist; - if(RayIntersectsTriangle((float*)ray->origin, (float*)ray->direction, (float*)v0, (float*)v1, (float*)v2, &dist, NULL)) + if(isect_ray_tri_v3((float*)ray->origin, (float*)ray->direction, (float*)v0, (float*)v1, (float*)v2, &dist, NULL)) return dist; return FLT_MAX; @@ -68,10 +68,10 @@ static float sphereray_tri_intersection(const BVHTreeRay *ray, float radius, con float p1[3]; float plane_normal[3], hit_point[3]; - CalcNormFloat((float*)v0, (float*)v1, (float*)v2, plane_normal); + normal_tri_v3( plane_normal,(float*)v0, (float*)v1, (float*)v2); VECADDFAC( p1, ray->origin, ray->direction, m_dist); - if(SweepingSphereIntersectsTriangleUV((float*)ray->origin, p1, radius, (float*)v0, (float*)v1, (float*)v2, &idist, hit_point)) + if(isect_sweeping_sphere_tri_v3((float*)ray->origin, p1, radius, (float*)v0, (float*)v1, (float*)v2, &idist, hit_point)) { return idist * m_dist; } @@ -384,9 +384,9 @@ static float nearest_point_in_tri_surface(const float *v0,const float *v1,const float w[3], x[3], y[3], z[3]; VECCOPY(w, v0); VECCOPY(x, e0); - VecMulf(x, S); + mul_v3_fl(x, S); VECCOPY(y, e1); - VecMulf(y, T); + mul_v3_fl(y, T); VECADD(z, w, x); VECADD(z, z, y); //VECSUB(d, p, z); @@ -430,7 +430,7 @@ static void mesh_faces_nearest_point(void *userdata, int index, const float *co, nearest->index = index; nearest->dist = dist; VECCOPY(nearest->co, nearest_tmp); - CalcNormFloat(t0, t1, t2, nearest->no); + normal_tri_v3( nearest->no,t0, t1, t2); } t1 = t2; @@ -469,7 +469,7 @@ static void mesh_faces_spherecast(void *userdata, int index, const BVHTreeRay *r hit->dist = dist; VECADDFAC(hit->co, ray->origin, ray->direction, dist); - CalcNormFloat(t0, t1, t2, hit->no); + normal_tri_v3( hit->no,t0, t1, t2); } t1 = t2; @@ -492,16 +492,17 @@ static void mesh_edges_nearest_point(void *userdata, int index, const float *co, t0 = vert[ edge->v1 ].co; t1 = vert[ edge->v2 ].co; - PclosestVL3Dfl(nearest_tmp, co, t0, t1); - dist = VecLenf(nearest_tmp, co); + // NOTE: casts to "float*" here are due to co being "const float*" + closest_to_line_segment_v3(nearest_tmp, (float*)co, t0, t1); + dist = len_v3v3(nearest_tmp, (float*)co); if(dist < nearest->dist) { nearest->index = index; nearest->dist = dist; VECCOPY(nearest->co, nearest_tmp); - VecSubf(nearest->no, t0, t1); - Normalize(nearest->no); + sub_v3_v3v3(nearest->no, t0, t1); + normalize_v3(nearest->no); } } diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c index 7acf77c6f90..a07965c2a58 100644 --- a/source/blender/blenkernel/intern/cdderivedmesh.c +++ b/source/blender/blenkernel/intern/cdderivedmesh.c @@ -45,7 +45,7 @@ #include "BKE_multires.h" #include "BKE_utildefines.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_edgehash.h" #include "BLI_editVert.h" @@ -440,7 +440,7 @@ int planes_contain_AABB(PBVHNode *node, void *data) } } - if(Inpf(planes[i], vmin) + planes[i][3] > 0) + if(dot_v3v3(planes[i], vmin) + planes[i][3] > 0) return 0; } @@ -523,12 +523,9 @@ static void cdDM_drawFacesSolid(DerivedMesh *dm, /* TODO make this better (cache facenormals as layer?) */ float nor[3]; if(mface->v4) { - CalcNormFloat4(mvert[mface->v1].co, mvert[mface->v2].co, - mvert[mface->v3].co, mvert[mface->v4].co, - nor); + normal_quad_v3( nor,mvert[mface->v1].co, mvert[mface->v2].co, mvert[mface->v3].co, mvert[mface->v4].co); } else { - CalcNormFloat(mvert[mface->v1].co, mvert[mface->v2].co, - mvert[mface->v3].co, nor); + normal_tri_v3( nor,mvert[mface->v1].co, mvert[mface->v2].co, mvert[mface->v3].co); } glNormal3fv(nor); } @@ -697,12 +694,9 @@ static void cdDM_drawFacesTex_common(DerivedMesh *dm, else { float nor[3]; if(mf->v4) { - CalcNormFloat4(mv[mf->v1].co, mv[mf->v2].co, - mv[mf->v3].co, mv[mf->v4].co, - nor); + normal_quad_v3( nor,mv[mf->v1].co, mv[mf->v2].co, mv[mf->v3].co, mv[mf->v4].co); } else { - CalcNormFloat(mv[mf->v1].co, mv[mf->v2].co, - mv[mf->v3].co, nor); + normal_tri_v3( nor,mv[mf->v1].co, mv[mf->v2].co, mv[mf->v3].co); } glNormal3fv(nor); } @@ -872,12 +866,9 @@ static void cdDM_drawMappedFaces(DerivedMesh *dm, int (*setDrawOptions)(void *us else { float nor[3]; if(mf->v4) { - CalcNormFloat4(mv[mf->v1].co, mv[mf->v2].co, - mv[mf->v3].co, mv[mf->v4].co, - nor); + normal_quad_v3( nor,mv[mf->v1].co, mv[mf->v2].co, mv[mf->v3].co, mv[mf->v4].co); } else { - CalcNormFloat(mv[mf->v1].co, mv[mf->v2].co, - mv[mf->v3].co, nor); + normal_tri_v3( nor,mv[mf->v1].co, mv[mf->v2].co, mv[mf->v3].co); } glNormal3fv(nor); } @@ -1047,12 +1038,9 @@ static void cdDM_drawMappedFacesGLSL(DerivedMesh *dm, int (*setMaterial)(int, vo /* TODO ideally a normal layer should always be available */ float nor[3]; if(mface->v4) { - CalcNormFloat4(mvert[mface->v1].co, mvert[mface->v2].co, - mvert[mface->v3].co, mvert[mface->v4].co, - nor); + normal_quad_v3( nor,mvert[mface->v1].co, mvert[mface->v2].co, mvert[mface->v3].co, mvert[mface->v4].co); } else { - CalcNormFloat(mvert[mface->v1].co, mvert[mface->v2].co, - mvert[mface->v3].co, nor); + normal_tri_v3( nor,mvert[mface->v1].co, mvert[mface->v2].co, mvert[mface->v3].co); } glNormal3fv(nor); } @@ -1389,18 +1377,16 @@ static void cdDM_foreachMappedFaceCenter( orig = i; VECCOPY(cent, mv[mf->v1].co); - VecAddf(cent, cent, mv[mf->v2].co); - VecAddf(cent, cent, mv[mf->v3].co); + add_v3_v3v3(cent, cent, mv[mf->v2].co); + add_v3_v3v3(cent, cent, mv[mf->v3].co); if (mf->v4) { - CalcNormFloat4(mv[mf->v1].co, mv[mf->v2].co, - mv[mf->v3].co, mv[mf->v4].co, no); - VecAddf(cent, cent, mv[mf->v4].co); - VecMulf(cent, 0.25f); + normal_quad_v3( no,mv[mf->v1].co, mv[mf->v2].co, mv[mf->v3].co, mv[mf->v4].co); + add_v3_v3v3(cent, cent, mv[mf->v4].co); + mul_v3_fl(cent, 0.25f); } else { - CalcNormFloat(mv[mf->v1].co, mv[mf->v2].co, - mv[mf->v3].co, no); - VecMulf(cent, 0.33333333333f); + normal_tri_v3( no,mv[mf->v1].co, mv[mf->v2].co, mv[mf->v3].co); + mul_v3_fl(cent, 0.33333333333f); } func(userData, orig, cent, no); @@ -1750,26 +1736,24 @@ void CDDM_calc_normals(DerivedMesh *dm) float *f_no = face_nors[i]; if(mf->v4) - CalcNormFloat4(mv[mf->v1].co, mv[mf->v2].co, - mv[mf->v3].co, mv[mf->v4].co, f_no); + normal_quad_v3( f_no,mv[mf->v1].co, mv[mf->v2].co, mv[mf->v3].co, mv[mf->v4].co); else - CalcNormFloat(mv[mf->v1].co, mv[mf->v2].co, - mv[mf->v3].co, f_no); + normal_tri_v3( f_no,mv[mf->v1].co, mv[mf->v2].co, mv[mf->v3].co); - VecAddf(temp_nors[mf->v1], temp_nors[mf->v1], f_no); - VecAddf(temp_nors[mf->v2], temp_nors[mf->v2], f_no); - VecAddf(temp_nors[mf->v3], temp_nors[mf->v3], f_no); + add_v3_v3v3(temp_nors[mf->v1], temp_nors[mf->v1], f_no); + add_v3_v3v3(temp_nors[mf->v2], temp_nors[mf->v2], f_no); + add_v3_v3v3(temp_nors[mf->v3], temp_nors[mf->v3], f_no); if(mf->v4) - VecAddf(temp_nors[mf->v4], temp_nors[mf->v4], f_no); + add_v3_v3v3(temp_nors[mf->v4], temp_nors[mf->v4], f_no); } /* normalize vertex normals and assign */ for(i = 0; i < numVerts; i++, mv++) { float *no = temp_nors[i]; - if (Normalize(no) == 0.0) { + if (normalize_v3(no) == 0.0) { VECCOPY(no, mv->co); - Normalize(no); + normalize_v3(no); } mv->no[0] = (short)(no[0] * 32767.0); @@ -1981,7 +1965,7 @@ DerivedMesh *MultiresDM_new(MultiresSubsurf *ms, DerivedMesh *orig, int numVerts mvert = CustomData_get_layer(&orig->vertData, CD_MVERT); mrdm->orco = MEM_callocN(sizeof(float) * 3 * orig->getNumVerts(orig), "multires orco"); for(i = 0; i < orig->getNumVerts(orig); ++i) - VecCopyf(mrdm->orco[i], mvert[i].co); + copy_v3_v3(mrdm->orco[i], mvert[i].co); } else DM_init(dm, numVerts, numEdges, numFaces); diff --git a/source/blender/blenkernel/intern/cloth.c b/source/blender/blenkernel/intern/cloth.c index 74f88a77e63..4a9cb237c01 100644 --- a/source/blender/blenkernel/intern/cloth.c +++ b/source/blender/blenkernel/intern/cloth.c @@ -403,7 +403,7 @@ static int do_step_cloth(Object *ob, ClothModifierData *clmd, DerivedMesh *resul /* Get the current position. */ VECCOPY(verts->xconst, mvert[i].co); - Mat4MulVecfl(ob->obmat, verts->xconst); + mul_m4_v3(ob->obmat, verts->xconst); } effectors = pdInitEffectors(clmd->scene, ob, NULL, clmd->sim_parms->effector_weights); @@ -723,7 +723,7 @@ static void cloth_to_object (Object *ob, ClothModifierData *clmd, DerivedMesh * if (clmd->clothObject) { /* inverse matrix is not uptodate... */ - Mat4Invert (ob->imat, ob->obmat); + invert_m4_m4(ob->imat, ob->obmat); mvert = CDDM_get_verts(dm); numverts = dm->getNumVerts(dm); @@ -731,7 +731,7 @@ static void cloth_to_object (Object *ob, ClothModifierData *clmd, DerivedMesh * for (i = 0; i < numverts; i++) { VECCOPY (mvert[i].co, cloth->verts[i].x); - Mat4MulVecfl (ob->imat, mvert[i].co); /* cloth is in global coords */ + mul_m4_v3(ob->imat, mvert[i].co); /* cloth is in global coords */ } } } @@ -867,7 +867,7 @@ static int cloth_from_object(Object *ob, ClothModifierData *clmd, DerivedMesh *d if(first) { VECCOPY ( verts->x, mvert[i].co ); - Mat4MulVecfl ( ob->obmat, verts->x ); + mul_m4_v3( ob->obmat, verts->x ); } /* no GUI interface yet */ @@ -884,7 +884,7 @@ static int cloth_from_object(Object *ob, ClothModifierData *clmd, DerivedMesh *d VECCOPY ( verts->xconst, verts->x ); VECCOPY ( verts->txold, verts->x ); VECCOPY ( verts->tx, verts->x ); - VecMulf ( verts->v, 0.0f ); + mul_v3_fl( verts->v, 0.0f ); verts->impulse_count = 0; VECCOPY ( verts->impulse, tnull ); diff --git a/source/blender/blenkernel/intern/collision.c b/source/blender/blenkernel/intern/collision.c index 8c664bc1a57..2ea54ac1f03 100644 --- a/source/blender/blenkernel/intern/collision.c +++ b/source/blender/blenkernel/intern/collision.c @@ -529,7 +529,7 @@ int cloth_collision_response_static ( ClothModifierData *clmd, CollisionModifier // calculate tangential velocity VECCOPY ( temp, collpair->normal ); - VecMulf ( temp, magrelVel ); + mul_v3_fl( temp, magrelVel ); VECSUB ( vrel_t_pre, relativeVelocity, temp ); // Decrease in magnitude of relative tangential velocity due to coulomb friction @@ -539,7 +539,7 @@ int cloth_collision_response_static ( ClothModifierData *clmd, CollisionModifier // Apply friction impulse. if ( magtangent > ALMOST_ZERO ) { - Normalize ( vrel_t_pre ); + normalize_v3( vrel_t_pre ); impulse = magtangent / ( 1.0 + w1*w1 + w2*w2 + w3*w3 ); // 2.0 * VECADDMUL ( cloth1->verts[collpair->ap1].impulse, vrel_t_pre, w1 * impulse ); @@ -681,7 +681,7 @@ CollPair* cloth_collision ( ModifierData *md1, ModifierData *md2, BVHTreeOverlap if ( distance <= ( epsilon1 + epsilon2 + ALMOST_ZERO ) ) { VECCOPY ( collpair->normal, collpair->vector ); - Normalize ( collpair->normal ); + normalize_v3( collpair->normal ); collpair->distance = distance; collpair->flag = 0; @@ -726,6 +726,7 @@ CollPair* cloth_collision ( ModifierData *md1, ModifierData *md2, BVHTreeOverlap return collpair; } +#if 0 static int cloth_collision_response_moving( ClothModifierData *clmd, CollisionModifierData *collmd, CollPair *collpair, CollPair *collision_end ) { int result = 0; @@ -778,7 +779,7 @@ static int cloth_collision_response_moving( ClothModifierData *clmd, CollisionMo // calculate tangential velocity VECCOPY ( temp, collpair->normal ); - VecMulf ( temp, magrelVel ); + mul_v3_fl( temp, magrelVel ); VECSUB ( vrel_t_pre, relativeVelocity, temp ); // Decrease in magnitude of relative tangential velocity due to coulomb friction @@ -788,7 +789,7 @@ static int cloth_collision_response_moving( ClothModifierData *clmd, CollisionMo // Apply friction impulse. if ( magtangent > ALMOST_ZERO ) { - Normalize ( vrel_t_pre ); + normalize_v3( vrel_t_pre ); impulse = 2.0 * magtangent / ( 1.0 + w1*w1 + w2*w2 + w3*w3 ); VECADDMUL ( cloth1->verts[collpair->ap1].impulse, vrel_t_pre, w1 * impulse ); @@ -834,6 +835,7 @@ static int cloth_collision_response_moving( ClothModifierData *clmd, CollisionMo } return result; } +#endif static float projectPointOntoLine(float *p, float *a, float *b) { @@ -853,15 +855,15 @@ static void calculateEENormal(float *np1, float *np2, float *np3, float *np4,flo // printf("l1: %f, l1: %f, l2: %f, l2: %f\n", line1[0], line1[1], line2[0], line2[1]); - Crossf(out_normal, line1, line2); + cross_v3_v3v3(out_normal, line1, line2); - length = Normalize(out_normal); + length = normalize_v3(out_normal); if (length <= FLT_EPSILON) { // lines are collinear VECSUB(out_normal, np2, np1); - Normalize(out_normal); + normalize_v3(out_normal); } } @@ -901,7 +903,7 @@ static float edgedge_distance(float np11[3], float np12[3], float np21[3], float VECSUB(line1, np12, np11); VECSUB(line2, np22, np21); - Crossf(cross, line1, line2); + cross_v3_v3v3(cross, line1, line2); length = INPR(cross, cross); if (length < FLT_EPSILON) @@ -912,7 +914,7 @@ static float edgedge_distance(float np11[3], float np12[3], float np21[3], float *out_a1 = 0; calculateEENormal(np11, np12, np21, np22, out_normal); VECSUB(temp, np22, np21); - VecMulf(temp, *out_a2); + mul_v3_fl(temp, *out_a2); VECADD(temp2, temp, np21); VECADD(temp2, temp2, np11); return INPR(temp2, temp2); @@ -928,7 +930,7 @@ static float edgedge_distance(float np11[3], float np12[3], float np21[3], float // return (np22 - (np11 + (np12 - np11) * out_a1)).lengthSquared(); VECSUB(temp, np12, np11); - VecMulf(temp, *out_a1); + mul_v3_fl(temp, *out_a1); VECADD(temp2, temp, np11); VECSUB(temp2, np22, temp2); return INPR(temp2, temp2); @@ -943,7 +945,7 @@ static float edgedge_distance(float np11[3], float np12[3], float np21[3], float // return (np21 - (np11 + (np12 - np11) * out_a1)).lengthSquared(); VECSUB(temp, np12, np11); - VecMulf(temp, *out_a1); + mul_v3_fl(temp, *out_a1); VECADD(temp2, temp, np11); VECSUB(temp2, np21, temp2); return INPR(temp2, temp2); @@ -991,12 +993,12 @@ static float edgedge_distance(float np11[3], float np12[3], float np21[3], float // p1= np11 + (np12 - np11) * out_a1; VECSUB(temp, np12, np11); - VecMulf(temp, *out_a1); + mul_v3_fl(temp, *out_a1); VECADD(p1, np11, temp); // p2 = np21 + (np22 - np21) * out_a2; VECSUB(temp, np22, np21); - VecMulf(temp, *out_a2); + mul_v3_fl(temp, *out_a2); VECADD(p2, np21, temp); calculateEENormal(np11, np12, np21, np22, out_normal); @@ -1022,7 +1024,7 @@ static float edgedge_distance(float np11[3], float np12[3], float np21[3], float // p1 = np11 + (np12 - np11) * out_a1; VECSUB(temp, np12, np11); - VecMulf(temp, *out_a1); + mul_v3_fl(temp, *out_a1); VECADD(p1, np11, temp); *out_a2 = projectPointOntoLine(p1, np21, np22); @@ -1032,7 +1034,7 @@ static float edgedge_distance(float np11[3], float np12[3], float np21[3], float // return (p1 - (np21 + (np22 - np21) * out_a2)).lengthSquared(); VECSUB(temp, np22, np21); - VecMulf(temp, *out_a2); + mul_v3_fl(temp, *out_a2); VECADD(temp, temp, np21); VECSUB(temp, p1, temp); return INPR(temp, temp); @@ -1044,7 +1046,7 @@ static float edgedge_distance(float np11[3], float np12[3], float np21[3], float // p2 = np21 + (np22 - np21) * out_a2; VECSUB(temp, np22, np21); - VecMulf(temp, *out_a2); + mul_v3_fl(temp, *out_a2); VECADD(p2, np21, temp); *out_a1 = projectPointOntoLine(p2, np11, np12); @@ -1054,7 +1056,7 @@ static float edgedge_distance(float np11[3], float np12[3], float np21[3], float // return ((np11 + (np12 - np11) * out_a1) - p2).lengthSquared(); VECSUB(temp, np12, np11); - VecMulf(temp, *out_a1); + mul_v3_fl(temp, *out_a1); VECADD(temp, temp, np11); VECSUB(temp, temp, p2); return INPR(temp, temp); @@ -1065,6 +1067,7 @@ static float edgedge_distance(float np11[3], float np12[3], float np21[3], float return 0; } +#if 0 static int cloth_collision_moving_edges ( ClothModifierData *clmd, CollisionModifierData *collmd, CollPair *collpair ) { EdgeCollPair edgecollpair; @@ -1217,16 +1220,16 @@ static int cloth_collision_moving_edges ( ClothModifierData *clmd, CollisionModi float desiredVn; VECCOPY(vrel_1_to_2, verts1[edgecollpair.p11].tv); - VecMulf(vrel_1_to_2, 1.0 - a); + mul_v3_fl(vrel_1_to_2, 1.0 - a); VECCOPY(temp, verts1[edgecollpair.p12].tv); - VecMulf(temp, a); + mul_v3_fl(temp, a); VECADD(vrel_1_to_2, vrel_1_to_2, temp); VECCOPY(temp, verts1[edgecollpair.p21].tv); - VecMulf(temp, 1.0 - b); + mul_v3_fl(temp, 1.0 - b); VECCOPY(temp2, verts1[edgecollpair.p22].tv); - VecMulf(temp2, b); + mul_v3_fl(temp2, b); VECADD(temp, temp, temp2); VECSUB(vrel_1_to_2, vrel_1_to_2, temp); @@ -1237,7 +1240,7 @@ static int cloth_collision_moving_edges ( ClothModifierData *clmd, CollisionModi if(out_normalVelocity < 0.0) { out_normalVelocity*= -1.0; - VecNegf(out_normal); + negate_v3(out_normal); } */ /* Inelastic repulsion impulse. */ @@ -1292,6 +1295,7 @@ static int cloth_collision_moving ( ClothModifierData *clmd, CollisionModifierDa return 1; } +#endif // return all collision objects in scene @@ -1707,7 +1711,7 @@ int cloth_bvh_objcollision (Object *ob, ClothModifierData * clmd, float step, fl continue; } - length = Normalize ( temp ); + length = normalize_v3( temp ); if ( length < mindistance ) { @@ -1715,17 +1719,17 @@ int cloth_bvh_objcollision (Object *ob, ClothModifierData * clmd, float step, fl if ( cloth->verts [i].flags & CLOTH_VERT_FLAG_PINNED ) { - VecMulf ( temp, -correction ); + mul_v3_fl( temp, -correction ); VECADD ( verts[j].tx, verts[j].tx, temp ); } else if ( cloth->verts [j].flags & CLOTH_VERT_FLAG_PINNED ) { - VecMulf ( temp, correction ); + mul_v3_fl( temp, correction ); VECADD ( verts[i].tx, verts[i].tx, temp ); } else { - VecMulf ( temp, -correction*0.5 ); + mul_v3_fl( temp, -correction*0.5 ); VECADD ( verts[j].tx, verts[j].tx, temp ); VECSUB ( verts[i].tx, verts[i].tx, temp ); diff --git a/source/blender/blenkernel/intern/colortools.c b/source/blender/blenkernel/intern/colortools.c index 8cd64ae2ece..f3448a60b5a 100644 --- a/source/blender/blenkernel/intern/colortools.c +++ b/source/blender/blenkernel/intern/colortools.c @@ -52,7 +52,7 @@ #include "BKE_utildefines.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_threads.h" #include "IMB_imbuf.h" @@ -462,35 +462,35 @@ static void curvemap_make_table(CurveMap *cuma, rctf *clipr) if(bezt[0].h2==HD_AUTO) { - hlen= VecLenf(bezt[0].vec[1], bezt[0].vec[2]); /* original handle length */ + hlen= len_v3v3(bezt[0].vec[1], bezt[0].vec[2]); /* original handle length */ /* clip handle point */ VECCOPY(vec, bezt[1].vec[0]); if(vec[0] < bezt[0].vec[1][0]) vec[0]= bezt[0].vec[1][0]; - VecSubf(vec, vec, bezt[0].vec[1]); - nlen= VecLength(vec); + sub_v3_v3v3(vec, vec, bezt[0].vec[1]); + nlen= len_v3(vec); if(nlen>FLT_EPSILON) { - VecMulf(vec, hlen/nlen); - VecAddf(bezt[0].vec[2], vec, bezt[0].vec[1]); - VecSubf(bezt[0].vec[0], bezt[0].vec[1], vec); + mul_v3_fl(vec, hlen/nlen); + add_v3_v3v3(bezt[0].vec[2], vec, bezt[0].vec[1]); + sub_v3_v3v3(bezt[0].vec[0], bezt[0].vec[1], vec); } } a= cuma->totpoint-1; if(bezt[a].h2==HD_AUTO) { - hlen= VecLenf(bezt[a].vec[1], bezt[a].vec[0]); /* original handle length */ + hlen= len_v3v3(bezt[a].vec[1], bezt[a].vec[0]); /* original handle length */ /* clip handle point */ VECCOPY(vec, bezt[a-1].vec[2]); if(vec[0] > bezt[a].vec[1][0]) vec[0]= bezt[a].vec[1][0]; - VecSubf(vec, vec, bezt[a].vec[1]); - nlen= VecLength(vec); + sub_v3_v3v3(vec, vec, bezt[a].vec[1]); + nlen= len_v3(vec); if(nlen>FLT_EPSILON) { - VecMulf(vec, hlen/nlen); - VecAddf(bezt[a].vec[0], vec, bezt[a].vec[1]); - VecSubf(bezt[a].vec[2], bezt[a].vec[1], vec); + mul_v3_fl(vec, hlen/nlen); + add_v3_v3v3(bezt[a].vec[0], vec, bezt[a].vec[1]); + sub_v3_v3v3(bezt[a].vec[2], bezt[a].vec[1], vec); } } } diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c index a94fd8f6bd2..c38e61d269a 100644 --- a/source/blender/blenkernel/intern/constraint.c +++ b/source/blender/blenkernel/intern/constraint.c @@ -36,7 +36,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_editVert.h" #include "DNA_armature_types.h" @@ -122,12 +122,12 @@ bConstraintOb *constraints_make_evalob (Scene *scene, Object *ob, void *subdata, cob->ob = ob; cob->type = datatype; cob->rotOrder = EULER_ORDER_DEFAULT; // TODO: when objects have rotation order too, use that - Mat4CpyMat4(cob->matrix, ob->obmat); + copy_m4_m4(cob->matrix, ob->obmat); } else - Mat4One(cob->matrix); + unit_m4(cob->matrix); - Mat4CpyMat4(cob->startmat, cob->matrix); + copy_m4_m4(cob->startmat, cob->matrix); } break; case CONSTRAINT_OBTYPE_BONE: @@ -148,18 +148,18 @@ bConstraintOb *constraints_make_evalob (Scene *scene, Object *ob, void *subdata, } /* matrix in world-space */ - Mat4MulMat4(cob->matrix, cob->pchan->pose_mat, ob->obmat); + mul_m4_m4m4(cob->matrix, cob->pchan->pose_mat, ob->obmat); } else - Mat4One(cob->matrix); + unit_m4(cob->matrix); - Mat4CpyMat4(cob->startmat, cob->matrix); + copy_m4_m4(cob->startmat, cob->matrix); } break; default: /* other types not yet handled */ - Mat4One(cob->matrix); - Mat4One(cob->startmat); + unit_m4(cob->matrix); + unit_m4(cob->startmat); break; } @@ -176,8 +176,8 @@ void constraints_clear_evalob (bConstraintOb *cob) return; /* calculate delta of constraints evaluation */ - Mat4Invert(imat, cob->startmat); - Mat4MulMat4(delta, imat, cob->matrix); + invert_m4_m4(imat, cob->startmat); + mul_m4_m4m4(delta, imat, cob->matrix); /* copy matrices back to source */ switch (cob->type) { @@ -186,10 +186,10 @@ void constraints_clear_evalob (bConstraintOb *cob) /* cob->ob might not exist! */ if (cob->ob) { /* copy new ob-matrix back to owner */ - Mat4CpyMat4(cob->ob->obmat, cob->matrix); + copy_m4_m4(cob->ob->obmat, cob->matrix); /* copy inverse of delta back to owner */ - Mat4Invert(cob->ob->constinv, delta); + invert_m4_m4(cob->ob->constinv, delta); } } break; @@ -198,10 +198,10 @@ void constraints_clear_evalob (bConstraintOb *cob) /* cob->ob or cob->pchan might not exist */ if (cob->ob && cob->pchan) { /* copy new pose-matrix back to owner */ - Mat4MulMat4(cob->pchan->pose_mat, cob->matrix, cob->ob->imat); + mul_m4_m4m4(cob->pchan->pose_mat, cob->matrix, cob->ob->imat); /* copy inverse of delta back to owner */ - Mat4Invert(cob->pchan->constinv, delta); + invert_m4_m4(cob->pchan->constinv, delta); } } break; @@ -235,9 +235,9 @@ void constraint_mat_convertspace (Object *ob, bPoseChannel *pchan, float mat[][4 case CONSTRAINT_SPACE_WORLD: /* ---------- FROM WORLDSPACE ---------- */ { /* world to pose */ - Mat4Invert(imat, ob->obmat); - Mat4CpyMat4(tempmat, mat); - Mat4MulMat4(mat, tempmat, imat); + invert_m4_m4(imat, ob->obmat); + copy_m4_m4(tempmat, mat); + mul_m4_m4m4(mat, tempmat, imat); /* use pose-space as stepping stone for other spaces... */ if (ELEM(to, CONSTRAINT_SPACE_LOCAL, CONSTRAINT_SPACE_PARLOCAL)) { @@ -250,8 +250,8 @@ void constraint_mat_convertspace (Object *ob, bPoseChannel *pchan, float mat[][4 { /* pose to world */ if (to == CONSTRAINT_SPACE_WORLD) { - Mat4CpyMat4(tempmat, mat); - Mat4MulMat4(mat, tempmat, ob->obmat); + copy_m4_m4(tempmat, mat); + mul_m4_m4m4(mat, tempmat, ob->obmat); } /* pose to local */ else if (to == CONSTRAINT_SPACE_LOCAL) { @@ -260,7 +260,7 @@ void constraint_mat_convertspace (Object *ob, bPoseChannel *pchan, float mat[][4 float offs_bone[4][4]; /* construct offs_bone the same way it is done in armature.c */ - Mat4CpyMat3(offs_bone, pchan->bone->bone_mat); + copy_m4_m3(offs_bone, pchan->bone->bone_mat); VECCOPY(offs_bone[3], pchan->bone->head); offs_bone[3][1]+= pchan->bone->parent->length; @@ -269,37 +269,37 @@ void constraint_mat_convertspace (Object *ob, bPoseChannel *pchan, float mat[][4 float tmat[4][4]; /* the rotation of the parent restposition */ - Mat4CpyMat4(tmat, pchan->bone->parent->arm_mat); + copy_m4_m4(tmat, pchan->bone->parent->arm_mat); /* the location of actual parent transform */ VECCOPY(tmat[3], offs_bone[3]); offs_bone[3][0]= offs_bone[3][1]= offs_bone[3][2]= 0.0f; - Mat4MulVecfl(pchan->parent->pose_mat, tmat[3]); + mul_m4_v3(pchan->parent->pose_mat, tmat[3]); - Mat4MulMat4(diff_mat, offs_bone, tmat); - Mat4Invert(imat, diff_mat); + mul_m4_m4m4(diff_mat, offs_bone, tmat); + invert_m4_m4(imat, diff_mat); } else { /* pose_mat = par_pose_mat * bone_mat * chan_mat */ - Mat4MulMat4(diff_mat, offs_bone, pchan->parent->pose_mat); - Mat4Invert(imat, diff_mat); + mul_m4_m4m4(diff_mat, offs_bone, pchan->parent->pose_mat); + invert_m4_m4(imat, diff_mat); } } else { /* pose_mat = chan_mat * arm_mat */ - Mat4Invert(imat, pchan->bone->arm_mat); + invert_m4_m4(imat, pchan->bone->arm_mat); } - Mat4CpyMat4(tempmat, mat); - Mat4MulMat4(mat, tempmat, imat); + copy_m4_m4(tempmat, mat); + mul_m4_m4m4(mat, tempmat, imat); } } /* pose to local with parent */ else if (to == CONSTRAINT_SPACE_PARLOCAL) { if (pchan->bone) { - Mat4Invert(imat, pchan->bone->arm_mat); - Mat4CpyMat4(tempmat, mat); - Mat4MulMat4(mat, tempmat, imat); + invert_m4_m4(imat, pchan->bone->arm_mat); + copy_m4_m4(tempmat, mat); + mul_m4_m4m4(mat, tempmat, imat); } } } @@ -313,7 +313,7 @@ void constraint_mat_convertspace (Object *ob, bPoseChannel *pchan, float mat[][4 float offs_bone[4][4]; /* construct offs_bone the same way it is done in armature.c */ - Mat4CpyMat3(offs_bone, pchan->bone->bone_mat); + copy_m4_m3(offs_bone, pchan->bone->bone_mat); VECCOPY(offs_bone[3], pchan->bone->head); offs_bone[3][1]+= pchan->bone->parent->length; @@ -322,29 +322,29 @@ void constraint_mat_convertspace (Object *ob, bPoseChannel *pchan, float mat[][4 float tmat[4][4]; /* the rotation of the parent restposition */ - Mat4CpyMat4(tmat, pchan->bone->parent->arm_mat); + copy_m4_m4(tmat, pchan->bone->parent->arm_mat); /* the location of actual parent transform */ VECCOPY(tmat[3], offs_bone[3]); offs_bone[3][0]= offs_bone[3][1]= offs_bone[3][2]= 0.0f; - Mat4MulVecfl(pchan->parent->pose_mat, tmat[3]); + mul_m4_v3(pchan->parent->pose_mat, tmat[3]); - Mat4MulMat4(diff_mat, offs_bone, tmat); - Mat4CpyMat4(tempmat, mat); - Mat4MulMat4(mat, tempmat, diff_mat); + mul_m4_m4m4(diff_mat, offs_bone, tmat); + copy_m4_m4(tempmat, mat); + mul_m4_m4m4(mat, tempmat, diff_mat); } else { /* pose_mat = par_pose_mat * bone_mat * chan_mat */ - Mat4MulMat4(diff_mat, offs_bone, pchan->parent->pose_mat); - Mat4CpyMat4(tempmat, mat); - Mat4MulMat4(mat, tempmat, diff_mat); + mul_m4_m4m4(diff_mat, offs_bone, pchan->parent->pose_mat); + copy_m4_m4(tempmat, mat); + mul_m4_m4m4(mat, tempmat, diff_mat); } } else { - Mat4CpyMat4(diff_mat, pchan->bone->arm_mat); + copy_m4_m4(diff_mat, pchan->bone->arm_mat); - Mat4CpyMat4(tempmat, mat); - Mat4MulMat4(mat, tempmat, diff_mat); + copy_m4_m4(tempmat, mat); + mul_m4_m4m4(mat, tempmat, diff_mat); } } @@ -359,9 +359,9 @@ void constraint_mat_convertspace (Object *ob, bPoseChannel *pchan, float mat[][4 { /* local + parent to pose */ if (pchan->bone) { - Mat4CpyMat4(diff_mat, pchan->bone->arm_mat); - Mat4CpyMat4(tempmat, mat); - Mat4MulMat4(mat, diff_mat, tempmat); + copy_m4_m4(diff_mat, pchan->bone->arm_mat); + copy_m4_m4(tempmat, mat); + mul_m4_m4m4(mat, diff_mat, tempmat); } /* use pose-space as stepping stone for other spaces */ @@ -379,19 +379,19 @@ void constraint_mat_convertspace (Object *ob, bPoseChannel *pchan, float mat[][4 /* check if object has a parent - otherwise this won't work */ if (ob->parent) { /* 'subtract' parent's effects from owner */ - Mat4MulMat4(diff_mat, ob->parentinv, ob->parent->obmat); - Mat4Invert(imat, diff_mat); - Mat4CpyMat4(tempmat, mat); - Mat4MulMat4(mat, tempmat, imat); + mul_m4_m4m4(diff_mat, ob->parentinv, ob->parent->obmat); + invert_m4_m4(imat, diff_mat); + copy_m4_m4(tempmat, mat); + mul_m4_m4m4(mat, tempmat, imat); } } else if (from==CONSTRAINT_SPACE_LOCAL && to==CONSTRAINT_SPACE_WORLD) { /* check that object has a parent - otherwise this won't work */ if (ob->parent) { /* 'add' parent's effect back to owner */ - Mat4CpyMat4(tempmat, mat); - Mat4MulMat4(diff_mat, ob->parentinv, ob->parent->obmat); - Mat4MulMat4(mat, tempmat, diff_mat); + copy_m4_m4(tempmat, mat); + mul_m4_m4m4(diff_mat, ob->parentinv, ob->parent->obmat); + mul_m4_m4m4(mat, tempmat, diff_mat); } } } @@ -412,7 +412,7 @@ static void contarget_get_mesh_mat (Scene *scene, Object *ob, char *substring, f short freeDM = 0; /* initialize target matrix using target matrix */ - Mat4CpyMat4(mat, ob->obmat); + copy_m4_m4(mat, ob->obmat); /* get index of vertex group */ dgroup = get_named_vertexgroup_num(ob, substring); @@ -453,8 +453,8 @@ static void contarget_get_mesh_mat (Scene *scene, Object *ob, char *substring, f if (dvert[i].dw[j].def_nr == dgroup) { dm->getVertCo(dm, i, co); dm->getVertNo(dm, i, nor); - VecAddf(vec, vec, co); - VecAddf(normal, normal, nor); + add_v3_v3v3(vec, vec, co); + add_v3_v3v3(normal, normal, nor); count++; break; } @@ -465,8 +465,8 @@ static void contarget_get_mesh_mat (Scene *scene, Object *ob, char *substring, f /* calculate averages of normal and coordinates */ if (count > 0) { - VecMulf(vec, 1.0f / count); - VecMulf(normal, 1.0f / count); + mul_v3_fl(vec, 1.0f / count); + mul_v3_fl(normal, 1.0f / count); } @@ -475,25 +475,25 @@ static void contarget_get_mesh_mat (Scene *scene, Object *ob, char *substring, f * calc_manipulator_stats, V3D_MANIP_NORMAL case */ /* we need the transpose of the inverse for a normal... */ - Mat3CpyMat4(imat, ob->obmat); + copy_m3_m4(imat, ob->obmat); - Mat3Inv(tmat, imat); - Mat3Transp(tmat); - Mat3MulVecfl(tmat, normal); + invert_m3_m3(tmat, imat); + transpose_m3(tmat); + mul_m3_v3(tmat, normal); - Normalize(normal); + normalize_v3(normal); VECCOPY(plane, tmat[1]); VECCOPY(tmat[2], normal); - Crossf(tmat[0], normal, plane); - Crossf(tmat[1], tmat[2], tmat[0]); + cross_v3_v3v3(tmat[0], normal, plane); + cross_v3_v3v3(tmat[1], tmat[2], tmat[0]); - Mat4CpyMat3(mat, tmat); - Mat4Ortho(mat); + copy_m4_m3(mat, tmat); + normalize_m4(mat); /* apply the average coordinate as the new location */ - VecMat4MulVecfl(tvec, ob->obmat, vec); + mul_v3_m4v3(tvec, ob->obmat, vec); VECCOPY(mat[3], tvec); } } @@ -521,7 +521,7 @@ static void contarget_get_lattice_mat (Object *ob, char *substring, float mat[][ int i, n; /* initialize target matrix using target matrix */ - Mat4CpyMat4(mat, ob->obmat); + copy_m4_m4(mat, ob->obmat); /* get index of vertex group */ dgroup = get_named_vertexgroup_num(ob, substring); @@ -541,7 +541,7 @@ static void contarget_get_lattice_mat (Object *ob, char *substring, float mat[][ else memcpy(tvec, bp->vec, 3*sizeof(float)); - VecAddf(vec, vec, tvec); + add_v3_v3v3(vec, vec, tvec); grouped++; break; @@ -555,8 +555,8 @@ static void contarget_get_lattice_mat (Object *ob, char *substring, float mat[][ /* find average location, then multiply by ob->obmat to find world-space location */ if (grouped) - VecMulf(vec, 1.0f / grouped); - VecMat4MulVecfl(tvec, ob->obmat, vec); + mul_v3_fl(vec, 1.0f / grouped); + mul_v3_m4v3(tvec, ob->obmat, vec); /* copy new location to matrix */ VECCOPY(mat[3], tvec); @@ -568,7 +568,7 @@ static void constraint_target_to_mat4 (Scene *scene, Object *ob, char *substring { /* Case OBJECT */ if (!strlen(substring)) { - Mat4CpyMat4(mat, ob->obmat); + copy_m4_m4(mat, ob->obmat); constraint_mat_convertspace(ob, NULL, mat, from, to); } /* Case VERTEXGROUP */ @@ -600,23 +600,23 @@ static void constraint_target_to_mat4 (Scene *scene, Object *ob, char *substring */ if (headtail < 0.000001) { /* skip length interpolation if set to head */ - Mat4MulMat4(mat, pchan->pose_mat, ob->obmat); + mul_m4_m4m4(mat, pchan->pose_mat, ob->obmat); } else { float tempmat[4][4], loc[3]; /* interpolate along length of bone */ - VecLerpf(loc, pchan->pose_head, pchan->pose_tail, headtail); + interp_v3_v3v3(loc, pchan->pose_head, pchan->pose_tail, headtail); /* use interpolated distance for subtarget */ - Mat4CpyMat4(tempmat, pchan->pose_mat); - VecCopyf(tempmat[3], loc); + copy_m4_m4(tempmat, pchan->pose_mat); + copy_v3_v3(tempmat[3], loc); - Mat4MulMat4(mat, tempmat, ob->obmat); + mul_m4_m4m4(mat, tempmat, ob->obmat); } } else - Mat4CpyMat4(mat, ob->obmat); + copy_m4_m4(mat, ob->obmat); /* convert matrix space as required */ constraint_mat_convertspace(ob, pchan, mat, from, to); @@ -665,7 +665,7 @@ static void default_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstrain if (VALID_CONS_TARGET(ct)) constraint_target_to_mat4(cob->scene, ct->tar, ct->subtarget, ct->matrix, CONSTRAINT_SPACE_WORLD, ct->space, con->headtail); else if (ct) - Mat4One(ct->matrix); + unit_m4(ct->matrix); } /* This following macro should be used for all standard single-target *_get_tars functions @@ -771,7 +771,7 @@ static void childof_new_data (void *cdata) data->flag = (CHILDOF_LOCX | CHILDOF_LOCY | CHILDOF_LOCZ | CHILDOF_ROTX |CHILDOF_ROTY | CHILDOF_ROTZ | CHILDOF_SIZEX | CHILDOF_SIZEY | CHILDOF_SIZEZ); - Mat4One(data->invmat); + unit_m4(data->invmat); } static int childof_get_tars (bConstraint *con, ListBase *list) @@ -812,16 +812,16 @@ static void childof_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *ta float loco[3], eulo[3], sizo[3]; /* get offset (parent-inverse) matrix */ - Mat4CpyMat4(invmat, data->invmat); + copy_m4_m4(invmat, data->invmat); /* extract components of both matrices */ VECCOPY(loc, ct->matrix[3]); - Mat4ToEulO(ct->matrix, eul, ct->rotOrder); - Mat4ToSize(ct->matrix, size); + mat4_to_eulO( eul, ct->rotOrder,ct->matrix); + mat4_to_size( size,ct->matrix); VECCOPY(loco, invmat[3]); - Mat4ToEulO(invmat, eulo, cob->rotOrder); - Mat4ToSize(invmat, sizo); + mat4_to_eulO( eulo, cob->rotOrder,invmat); + mat4_to_size( sizo,invmat); /* disable channels not enabled */ if (!(data->flag & CHILDOF_LOCX)) loc[0]= loco[0]= 0.0f; @@ -835,19 +835,19 @@ static void childof_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *ta if (!(data->flag & CHILDOF_SIZEZ)) size[2]= sizo[2]= 1.0f; /* make new target mat and offset mat */ - LocEulOSizeToMat4(ct->matrix, loc, eul, size, ct->rotOrder); - LocEulOSizeToMat4(invmat, loco, eulo, sizo, cob->rotOrder); + loc_eulO_size_to_mat4(ct->matrix, loc, eul, size, ct->rotOrder); + loc_eulO_size_to_mat4(invmat, loco, eulo, sizo, cob->rotOrder); /* multiply target (parent matrix) by offset (parent inverse) to get * the effect of the parent that will be exherted on the owner */ - Mat4MulMat4(parmat, invmat, ct->matrix); + mul_m4_m4m4(parmat, invmat, ct->matrix); /* now multiply the parent matrix by the owner matrix to get the * the effect of this constraint (i.e. owner is 'parented' to parent) */ - Mat4CpyMat4(tempmat, cob->matrix); - Mat4MulMat4(cob->matrix, tempmat, parmat); + copy_m4_m4(tempmat, cob->matrix); + mul_m4_m4m4(cob->matrix, tempmat, parmat); } } @@ -928,14 +928,14 @@ static void vectomat (float *vec, float *target_up, short axis, short upflag, sh float neg = -1; int right_index; - VecCopyf(n, vec); - if (Normalize(n) == 0.0) { + copy_v3_v3(n, vec); + if (normalize_v3(n) == 0.0) { n[0] = 0.0; n[1] = 0.0; n[2] = 1.0; } if (axis > 2) axis -= 3; - else VecNegf(n); + else negate_v3(n); /* n specifies the transformation of the track axis */ if (flags & TARGET_Z_UP) { @@ -952,19 +952,19 @@ static void vectomat (float *vec, float *target_up, short axis, short upflag, sh } /* project the up vector onto the plane specified by n */ - Projf(proj, u, n); /* first u onto n... */ - VecSubf(proj, u, proj); /* then onto the plane */ + project_v3_v3v3(proj, u, n); /* first u onto n... */ + sub_v3_v3v3(proj, u, proj); /* then onto the plane */ /* proj specifies the transformation of the up axis */ - if (Normalize(proj) == 0.0) { /* degenerate projection */ + if (normalize_v3(proj) == 0.0) { /* degenerate projection */ proj[0] = 0.0; proj[1] = 1.0; proj[2] = 0.0; } /* Normalized cross product of n and proj specifies transformation of the right axis */ - Crossf(right, proj, n); - Normalize(right); + cross_v3_v3v3(right, proj, n); + normalize_v3(right); if (axis != upflag) { right_index = 3 - axis - upflag; @@ -1004,7 +1004,7 @@ static void trackto_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *ta float tmat[4][4]; /* Get size property, since ob->size is only the object's own relative size, not its global one */ - Mat4ToSize(cob->matrix, size); + mat4_to_size( size,cob->matrix); /* Clear the object's rotation */ cob->matrix[0][0]=size[0]; @@ -1020,13 +1020,13 @@ static void trackto_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *ta /* targetmat[2] instead of ownermat[2] is passed to vectomat * for backwards compatability it seems... (Aligorith) */ - VecSubf(vec, cob->matrix[3], ct->matrix[3]); + sub_v3_v3v3(vec, cob->matrix[3], ct->matrix[3]); vectomat(vec, ct->matrix[2], (short)data->reserved1, (short)data->reserved2, data->flags, totmat); - Mat4CpyMat4(tmat, cob->matrix); - Mat4MulMat34(cob->matrix, totmat, tmat); + copy_m4_m4(tmat, cob->matrix); + mul_m4_m3m4(cob->matrix, totmat, tmat); } } @@ -1097,19 +1097,19 @@ static void kinematic_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstra Object *ob= cob->ob; if (ob == NULL) { - Mat4One(ct->matrix); + unit_m4(ct->matrix); } else { float vec[3]; /* move grabtarget into world space */ VECCOPY(vec, data->grabtarget); - Mat4MulVecfl(ob->obmat, vec); - Mat4CpyMat4(ct->matrix, ob->obmat); + mul_m4_v3(ob->obmat, vec); + copy_m4_m4(ct->matrix, ob->obmat); VECCOPY(ct->matrix[3], vec); } } else - Mat4One(ct->matrix); + unit_m4(ct->matrix); } } @@ -1176,8 +1176,8 @@ static void followpath_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstr float totmat[4][4]; float curvetime; - Mat4One(totmat); - Mat4One(ct->matrix); + unit_m4(totmat); + unit_m4(ct->matrix); /* note: when creating constraints that follow path, the curve gets the CU_PATH set now, * currently for paths to work it needs to go through the bevlist/displist system (ton) @@ -1211,34 +1211,34 @@ static void followpath_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstr if ( where_on_path(ct->tar, curvetime, vec, dir, NULL, &radius) ) { if (data->followflag & FOLLOWPATH_FOLLOW) { - vectoquat(dir, (short) data->trackflag, (short) data->upflag, quat); + vec_to_quat( quat,dir, (short) data->trackflag, (short) data->upflag); - Normalize(dir); + normalize_v3(dir); q[0]= (float)cos(0.5*vec[3]); x1= (float)sin(0.5*vec[3]); q[1]= -x1*dir[0]; q[2]= -x1*dir[1]; q[3]= -x1*dir[2]; - QuatMul(quat, q, quat); + mul_qt_qtqt(quat, q, quat); - QuatToMat4(quat, totmat); + quat_to_mat4( totmat,quat); } if (data->followflag & FOLLOWPATH_RADIUS) { float tmat[4][4], rmat[4][4]; - Mat4Scale(tmat, radius); - Mat4MulMat4(rmat, totmat, tmat); - Mat4CpyMat4(totmat, rmat); + scale_m4_fl(tmat, radius); + mul_m4_m4m4(rmat, totmat, tmat); + copy_m4_m4(totmat, rmat); } VECCOPY(totmat[3], vec); - Mat4MulSerie(ct->matrix, ct->tar->obmat, totmat, NULL, NULL, NULL, NULL, NULL, NULL); + mul_serie_m4(ct->matrix, ct->tar->obmat, totmat, NULL, NULL, NULL, NULL, NULL, NULL); } } } else if (ct) - Mat4One(ct->matrix); + unit_m4(ct->matrix); } static void followpath_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *targets) @@ -1253,25 +1253,25 @@ static void followpath_evaluate (bConstraint *con, bConstraintOb *cob, ListBase /* get Object local transform (loc/rot/size) to determine transformation from path */ //object_to_mat4(ob, obmat); - Mat4CpyMat4(obmat, cob->matrix); // FIXME!!! + copy_m4_m4(obmat, cob->matrix); // FIXME!!! /* get scaling of object before applying constraint */ - Mat4ToSize(cob->matrix, size); + mat4_to_size( size,cob->matrix); /* apply targetmat - containing location on path, and rotation */ - Mat4MulSerie(cob->matrix, ct->matrix, obmat, NULL, NULL, NULL, NULL, NULL, NULL); + mul_serie_m4(cob->matrix, ct->matrix, obmat, NULL, NULL, NULL, NULL, NULL, NULL); /* un-apply scaling caused by path */ if ((data->followflag & FOLLOWPATH_RADIUS)==0) { /* XXX - assume that scale correction means that radius will have some scale error in it - Campbell */ float obsize[3]; - Mat4ToSize(cob->matrix, obsize); + mat4_to_size( obsize,cob->matrix); if (obsize[0]) - VecMulf(cob->matrix[0], size[0] / obsize[0]); + mul_v3_fl(cob->matrix[0], size[0] / obsize[0]); if (obsize[1]) - VecMulf(cob->matrix[1], size[1] / obsize[1]); + mul_v3_fl(cob->matrix[1], size[1] / obsize[1]); if (obsize[2]) - VecMulf(cob->matrix[2], size[2] / obsize[2]); + mul_v3_fl(cob->matrix[2], size[2] / obsize[2]); } } } @@ -1349,9 +1349,9 @@ static void rotlimit_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *t float size[3]; VECCOPY(loc, cob->matrix[3]); - Mat4ToSize(cob->matrix, size); + mat4_to_size( size,cob->matrix); - Mat4ToEulO(cob->matrix, eul, cob->rotOrder); + mat4_to_eulO( eul, cob->rotOrder,cob->matrix); /* eulers: radians to degrees! */ eul[0] = (float)(eul[0] / M_PI * 180); @@ -1386,7 +1386,7 @@ static void rotlimit_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *t eul[1] = (float)(eul[1] / 180 * M_PI); eul[2] = (float)(eul[2] / 180 * M_PI); - LocEulOSizeToMat4(cob->matrix, loc, eul, size, cob->rotOrder); + loc_eulO_size_to_mat4(cob->matrix, loc, eul, size, cob->rotOrder); } static bConstraintTypeInfo CTI_ROTLIMIT = { @@ -1412,8 +1412,8 @@ static void sizelimit_evaluate (bConstraint *con, bConstraintOb *cob, ListBase * bSizeLimitConstraint *data = con->data; float obsize[3], size[3]; - Mat4ToSize(cob->matrix, size); - Mat4ToSize(cob->matrix, obsize); + mat4_to_size( size,cob->matrix); + mat4_to_size( obsize,cob->matrix); if (data->flag & LIMIT_XMIN) { if (size[0] < data->xmin) @@ -1441,11 +1441,11 @@ static void sizelimit_evaluate (bConstraint *con, bConstraintOb *cob, ListBase * } if (obsize[0]) - VecMulf(cob->matrix[0], size[0]/obsize[0]); + mul_v3_fl(cob->matrix[0], size[0]/obsize[0]); if (obsize[1]) - VecMulf(cob->matrix[1], size[1]/obsize[1]); + mul_v3_fl(cob->matrix[1], size[1]/obsize[1]); if (obsize[2]) - VecMulf(cob->matrix[2], size[2]/obsize[2]); + mul_v3_fl(cob->matrix[2], size[2]/obsize[2]); } static bConstraintTypeInfo CTI_SIZELIMIT = { @@ -1591,17 +1591,17 @@ static void rotlike_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *ta float size[3]; VECCOPY(loc, cob->matrix[3]); - Mat4ToSize(cob->matrix, size); + mat4_to_size( size,cob->matrix); /* to allow compatible rotations, must get both rotations in the order of the owner... */ - Mat4ToEulO(ct->matrix, eul, cob->rotOrder); - Mat4ToEulO(cob->matrix, obeul, cob->rotOrder); + mat4_to_eulO( eul, cob->rotOrder,ct->matrix); + mat4_to_eulO( obeul, cob->rotOrder,cob->matrix); if ((data->flag & ROTLIKE_X)==0) eul[0] = obeul[0]; else { if (data->flag & ROTLIKE_OFFSET) - eulerO_rot(eul, obeul[0], 'x', cob->rotOrder); + rotate_eulO(eul, cob->rotOrder, 'x', obeul[0]); if (data->flag & ROTLIKE_X_INVERT) eul[0] *= -1; @@ -1611,7 +1611,7 @@ static void rotlike_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *ta eul[1] = obeul[1]; else { if (data->flag & ROTLIKE_OFFSET) - eulerO_rot(eul, obeul[1], 'y', cob->rotOrder); + rotate_eulO(eul, cob->rotOrder, 'y', obeul[1]); if (data->flag & ROTLIKE_Y_INVERT) eul[1] *= -1; @@ -1621,14 +1621,14 @@ static void rotlike_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *ta eul[2] = obeul[2]; else { if (data->flag & ROTLIKE_OFFSET) - eulerO_rot(eul, obeul[2], 'z', cob->rotOrder); + rotate_eulO(eul, cob->rotOrder, 'z', obeul[2]); if (data->flag & ROTLIKE_Z_INVERT) eul[2] *= -1; } compatible_eul(eul, obeul); - LocEulOSizeToMat4(cob->matrix, loc, eul, size, cob->rotOrder); + loc_eulO_size_to_mat4(cob->matrix, loc, eul, size, cob->rotOrder); } } @@ -1690,32 +1690,32 @@ static void sizelike_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *t if (VALID_CONS_TARGET(ct)) { float obsize[3], size[3]; - Mat4ToSize(ct->matrix, size); - Mat4ToSize(cob->matrix, obsize); + mat4_to_size( size,ct->matrix); + mat4_to_size( obsize,cob->matrix); if ((data->flag & SIZELIKE_X) && (obsize[0] != 0)) { if (data->flag & SIZELIKE_OFFSET) { size[0] += (obsize[0] - 1.0f); - VecMulf(cob->matrix[0], size[0] / obsize[0]); + mul_v3_fl(cob->matrix[0], size[0] / obsize[0]); } else - VecMulf(cob->matrix[0], size[0] / obsize[0]); + mul_v3_fl(cob->matrix[0], size[0] / obsize[0]); } if ((data->flag & SIZELIKE_Y) && (obsize[1] != 0)) { if (data->flag & SIZELIKE_OFFSET) { size[1] += (obsize[1] - 1.0f); - VecMulf(cob->matrix[1], size[1] / obsize[1]); + mul_v3_fl(cob->matrix[1], size[1] / obsize[1]); } else - VecMulf(cob->matrix[1], size[1] / obsize[1]); + mul_v3_fl(cob->matrix[1], size[1] / obsize[1]); } if ((data->flag & SIZELIKE_Z) && (obsize[2] != 0)) { if (data->flag & SIZELIKE_OFFSET) { size[2] += (obsize[2] - 1.0f); - VecMulf(cob->matrix[2], size[2] / obsize[2]); + mul_v3_fl(cob->matrix[2], size[2] / obsize[2]); } else - VecMulf(cob->matrix[2], size[2] / obsize[2]); + mul_v3_fl(cob->matrix[2], size[2] / obsize[2]); } } } @@ -1816,7 +1816,7 @@ static void pycon_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstraintT #endif } else if (ct) - Mat4One(ct->matrix); + unit_m4(ct->matrix); } static void pycon_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *targets) @@ -1911,7 +1911,7 @@ static void actcon_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstraint short axis; /* initialise return matrix */ - Mat4One(ct->matrix); + unit_m4(ct->matrix); /* get the transform matrix of the target */ constraint_target_to_mat4(cob->scene, ct->tar, ct->subtarget, tempmat, CONSTRAINT_SPACE_WORLD, ct->space, con->headtail); @@ -1924,7 +1924,7 @@ static void actcon_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstraint */ if (data->type < 10) { /* extract rotation (is in whatever space target should be in) */ - Mat4ToEul(tempmat, vec); + mat4_to_eul( vec,tempmat); vec[0] *= (float)(180.0/M_PI); vec[1] *= (float)(180.0/M_PI); vec[2] *= (float)(180.0/M_PI); @@ -1932,7 +1932,7 @@ static void actcon_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstraint } else if (data->type < 20) { /* extract scaling (is in whatever space target should be in) */ - Mat4ToSize(tempmat, vec); + mat4_to_size( vec,tempmat); axis= data->type - 10; } else { @@ -1967,7 +1967,7 @@ static void actcon_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstraint /* convert animation to matrices for use here */ chan_calc_mat(tchan); - Mat4CpyMat4(ct->matrix, tchan->chan_mat); + copy_m4_m4(ct->matrix, tchan->chan_mat); /* Clean up */ free_pose(pose); @@ -1997,8 +1997,8 @@ static void actcon_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *tar /* Nice and simple... we just need to multiply the matrices, as the get_target_matrix * function has already taken care of everything else. */ - Mat4CpyMat4(temp, cob->matrix); - Mat4MulMat4(cob->matrix, ct->matrix, temp); + copy_m4_m4(temp, cob->matrix); + mul_m4_m4m4(cob->matrix, ct->matrix, temp); } } @@ -2067,7 +2067,7 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase * float mdet; /* Vector object -> target */ - VecSubf(vec, ct->matrix[3], cob->matrix[3]); + sub_v3_v3v3(vec, ct->matrix[3], cob->matrix[3]); switch (data->lockflag){ case LOCK_X: /* LOCK X */ { @@ -2075,71 +2075,71 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase * case TRACK_Y: /* LOCK X TRACK Y */ { /* Projection of Vector on the plane */ - Projf(vec2, vec, cob->matrix[0]); - VecSubf(totmat[1], vec, vec2); - Normalize(totmat[1]); + project_v3_v3v3(vec2, vec, cob->matrix[0]); + sub_v3_v3v3(totmat[1], vec, vec2); + normalize_v3(totmat[1]); /* the x axis is fixed */ totmat[0][0] = cob->matrix[0][0]; totmat[0][1] = cob->matrix[0][1]; totmat[0][2] = cob->matrix[0][2]; - Normalize(totmat[0]); + normalize_v3(totmat[0]); /* the z axis gets mapped onto a third orthogonal vector */ - Crossf(totmat[2], totmat[0], totmat[1]); + cross_v3_v3v3(totmat[2], totmat[0], totmat[1]); } break; case TRACK_Z: /* LOCK X TRACK Z */ { /* Projection of Vector on the plane */ - Projf(vec2, vec, cob->matrix[0]); - VecSubf(totmat[2], vec, vec2); - Normalize(totmat[2]); + project_v3_v3v3(vec2, vec, cob->matrix[0]); + sub_v3_v3v3(totmat[2], vec, vec2); + normalize_v3(totmat[2]); /* the x axis is fixed */ totmat[0][0] = cob->matrix[0][0]; totmat[0][1] = cob->matrix[0][1]; totmat[0][2] = cob->matrix[0][2]; - Normalize(totmat[0]); + normalize_v3(totmat[0]); /* the z axis gets mapped onto a third orthogonal vector */ - Crossf(totmat[1], totmat[2], totmat[0]); + cross_v3_v3v3(totmat[1], totmat[2], totmat[0]); } break; case TRACK_nY: /* LOCK X TRACK -Y */ { /* Projection of Vector on the plane */ - Projf(vec2, vec, cob->matrix[0]); - VecSubf(totmat[1], vec, vec2); - Normalize(totmat[1]); - VecNegf(totmat[1]); + project_v3_v3v3(vec2, vec, cob->matrix[0]); + sub_v3_v3v3(totmat[1], vec, vec2); + normalize_v3(totmat[1]); + negate_v3(totmat[1]); /* the x axis is fixed */ totmat[0][0] = cob->matrix[0][0]; totmat[0][1] = cob->matrix[0][1]; totmat[0][2] = cob->matrix[0][2]; - Normalize(totmat[0]); + normalize_v3(totmat[0]); /* the z axis gets mapped onto a third orthogonal vector */ - Crossf(totmat[2], totmat[0], totmat[1]); + cross_v3_v3v3(totmat[2], totmat[0], totmat[1]); } break; case TRACK_nZ: /* LOCK X TRACK -Z */ { /* Projection of Vector on the plane */ - Projf(vec2, vec, cob->matrix[0]); - VecSubf(totmat[2], vec, vec2); - Normalize(totmat[2]); - VecNegf(totmat[2]); + project_v3_v3v3(vec2, vec, cob->matrix[0]); + sub_v3_v3v3(totmat[2], vec, vec2); + normalize_v3(totmat[2]); + negate_v3(totmat[2]); /* the x axis is fixed */ totmat[0][0] = cob->matrix[0][0]; totmat[0][1] = cob->matrix[0][1]; totmat[0][2] = cob->matrix[0][2]; - Normalize(totmat[0]); + normalize_v3(totmat[0]); /* the z axis gets mapped onto a third orthogonal vector */ - Crossf(totmat[1], totmat[2], totmat[0]); + cross_v3_v3v3(totmat[1], totmat[2], totmat[0]); } break; default: @@ -2158,71 +2158,71 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase * case TRACK_X: /* LOCK Y TRACK X */ { /* Projection of Vector on the plane */ - Projf(vec2, vec, cob->matrix[1]); - VecSubf(totmat[0], vec, vec2); - Normalize(totmat[0]); + project_v3_v3v3(vec2, vec, cob->matrix[1]); + sub_v3_v3v3(totmat[0], vec, vec2); + normalize_v3(totmat[0]); /* the y axis is fixed */ totmat[1][0] = cob->matrix[1][0]; totmat[1][1] = cob->matrix[1][1]; totmat[1][2] = cob->matrix[1][2]; - Normalize(totmat[1]); + normalize_v3(totmat[1]); /* the z axis gets mapped onto a third orthogonal vector */ - Crossf(totmat[2], totmat[0], totmat[1]); + cross_v3_v3v3(totmat[2], totmat[0], totmat[1]); } break; case TRACK_Z: /* LOCK Y TRACK Z */ { /* Projection of Vector on the plane */ - Projf(vec2, vec, cob->matrix[1]); - VecSubf(totmat[2], vec, vec2); - Normalize(totmat[2]); + project_v3_v3v3(vec2, vec, cob->matrix[1]); + sub_v3_v3v3(totmat[2], vec, vec2); + normalize_v3(totmat[2]); /* the y axis is fixed */ totmat[1][0] = cob->matrix[1][0]; totmat[1][1] = cob->matrix[1][1]; totmat[1][2] = cob->matrix[1][2]; - Normalize(totmat[1]); + normalize_v3(totmat[1]); /* the z axis gets mapped onto a third orthogonal vector */ - Crossf(totmat[0], totmat[1], totmat[2]); + cross_v3_v3v3(totmat[0], totmat[1], totmat[2]); } break; case TRACK_nX: /* LOCK Y TRACK -X */ { /* Projection of Vector on the plane */ - Projf(vec2, vec, cob->matrix[1]); - VecSubf(totmat[0], vec, vec2); - Normalize(totmat[0]); - VecNegf(totmat[0]); + project_v3_v3v3(vec2, vec, cob->matrix[1]); + sub_v3_v3v3(totmat[0], vec, vec2); + normalize_v3(totmat[0]); + negate_v3(totmat[0]); /* the y axis is fixed */ totmat[1][0] = cob->matrix[1][0]; totmat[1][1] = cob->matrix[1][1]; totmat[1][2] = cob->matrix[1][2]; - Normalize(totmat[1]); + normalize_v3(totmat[1]); /* the z axis gets mapped onto a third orthogonal vector */ - Crossf(totmat[2], totmat[0], totmat[1]); + cross_v3_v3v3(totmat[2], totmat[0], totmat[1]); } break; case TRACK_nZ: /* LOCK Y TRACK -Z */ { /* Projection of Vector on the plane */ - Projf(vec2, vec, cob->matrix[1]); - VecSubf(totmat[2], vec, vec2); - Normalize(totmat[2]); - VecNegf(totmat[2]); + project_v3_v3v3(vec2, vec, cob->matrix[1]); + sub_v3_v3v3(totmat[2], vec, vec2); + normalize_v3(totmat[2]); + negate_v3(totmat[2]); /* the y axis is fixed */ totmat[1][0] = cob->matrix[1][0]; totmat[1][1] = cob->matrix[1][1]; totmat[1][2] = cob->matrix[1][2]; - Normalize(totmat[1]); + normalize_v3(totmat[1]); /* the z axis gets mapped onto a third orthogonal vector */ - Crossf(totmat[0], totmat[1], totmat[2]); + cross_v3_v3v3(totmat[0], totmat[1], totmat[2]); } break; default: @@ -2241,71 +2241,71 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase * case TRACK_X: /* LOCK Z TRACK X */ { /* Projection of Vector on the plane */ - Projf(vec2, vec, cob->matrix[2]); - VecSubf(totmat[0], vec, vec2); - Normalize(totmat[0]); + project_v3_v3v3(vec2, vec, cob->matrix[2]); + sub_v3_v3v3(totmat[0], vec, vec2); + normalize_v3(totmat[0]); /* the z axis is fixed */ totmat[2][0] = cob->matrix[2][0]; totmat[2][1] = cob->matrix[2][1]; totmat[2][2] = cob->matrix[2][2]; - Normalize(totmat[2]); + normalize_v3(totmat[2]); /* the x axis gets mapped onto a third orthogonal vector */ - Crossf(totmat[1], totmat[2], totmat[0]); + cross_v3_v3v3(totmat[1], totmat[2], totmat[0]); } break; case TRACK_Y: /* LOCK Z TRACK Y */ { /* Projection of Vector on the plane */ - Projf(vec2, vec, cob->matrix[2]); - VecSubf(totmat[1], vec, vec2); - Normalize(totmat[1]); + project_v3_v3v3(vec2, vec, cob->matrix[2]); + sub_v3_v3v3(totmat[1], vec, vec2); + normalize_v3(totmat[1]); /* the z axis is fixed */ totmat[2][0] = cob->matrix[2][0]; totmat[2][1] = cob->matrix[2][1]; totmat[2][2] = cob->matrix[2][2]; - Normalize(totmat[2]); + normalize_v3(totmat[2]); /* the x axis gets mapped onto a third orthogonal vector */ - Crossf(totmat[0], totmat[1], totmat[2]); + cross_v3_v3v3(totmat[0], totmat[1], totmat[2]); } break; case TRACK_nX: /* LOCK Z TRACK -X */ { /* Projection of Vector on the plane */ - Projf(vec2, vec, cob->matrix[2]); - VecSubf(totmat[0], vec, vec2); - Normalize(totmat[0]); - VecNegf(totmat[0]); + project_v3_v3v3(vec2, vec, cob->matrix[2]); + sub_v3_v3v3(totmat[0], vec, vec2); + normalize_v3(totmat[0]); + negate_v3(totmat[0]); /* the z axis is fixed */ totmat[2][0] = cob->matrix[2][0]; totmat[2][1] = cob->matrix[2][1]; totmat[2][2] = cob->matrix[2][2]; - Normalize(totmat[2]); + normalize_v3(totmat[2]); /* the x axis gets mapped onto a third orthogonal vector */ - Crossf(totmat[1], totmat[2], totmat[0]); + cross_v3_v3v3(totmat[1], totmat[2], totmat[0]); } break; case TRACK_nY: /* LOCK Z TRACK -Y */ { /* Projection of Vector on the plane */ - Projf(vec2, vec, cob->matrix[2]); - VecSubf(totmat[1], vec, vec2); - Normalize(totmat[1]); - VecNegf(totmat[1]); + project_v3_v3v3(vec2, vec, cob->matrix[2]); + sub_v3_v3v3(totmat[1], vec, vec2); + normalize_v3(totmat[1]); + negate_v3(totmat[1]); /* the z axis is fixed */ totmat[2][0] = cob->matrix[2][0]; totmat[2][1] = cob->matrix[2][1]; totmat[2][2] = cob->matrix[2][2]; - Normalize(totmat[2]); + normalize_v3(totmat[2]); /* the x axis gets mapped onto a third orthogonal vector */ - Crossf(totmat[0], totmat[1], totmat[2]); + cross_v3_v3v3(totmat[0], totmat[1], totmat[2]); } break; default: @@ -2330,18 +2330,18 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase * tmpmat[0][0] = cob->matrix[0][0];tmpmat[0][1] = cob->matrix[0][1];tmpmat[0][2] = cob->matrix[0][2]; tmpmat[1][0] = cob->matrix[1][0];tmpmat[1][1] = cob->matrix[1][1];tmpmat[1][2] = cob->matrix[1][2]; tmpmat[2][0] = cob->matrix[2][0];tmpmat[2][1] = cob->matrix[2][1];tmpmat[2][2] = cob->matrix[2][2]; - Normalize(tmpmat[0]); - Normalize(tmpmat[1]); - Normalize(tmpmat[2]); - Mat3Inv(invmat, tmpmat); - Mat3MulMat3(tmpmat, totmat, invmat); + normalize_v3(tmpmat[0]); + normalize_v3(tmpmat[1]); + normalize_v3(tmpmat[2]); + invert_m3_m3(invmat, tmpmat); + mul_m3_m3m3(tmpmat, totmat, invmat); totmat[0][0] = tmpmat[0][0];totmat[0][1] = tmpmat[0][1];totmat[0][2] = tmpmat[0][2]; totmat[1][0] = tmpmat[1][0];totmat[1][1] = tmpmat[1][1];totmat[1][2] = tmpmat[1][2]; totmat[2][0] = tmpmat[2][0];totmat[2][1] = tmpmat[2][1];totmat[2][2] = tmpmat[2][2]; - Mat4CpyMat4(tmat, cob->matrix); + copy_m4_m4(tmat, cob->matrix); - mdet = Det3x3( totmat[0][0],totmat[0][1],totmat[0][2], + mdet = determinant_m3( totmat[0][0],totmat[0][1],totmat[0][2], totmat[1][0],totmat[1][1],totmat[1][2], totmat[2][0],totmat[2][1],totmat[2][2]); if (mdet==0) { @@ -2351,7 +2351,7 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase * } /* apply out transformaton to the object */ - Mat4MulMat34(cob->matrix, totmat, tmat); + mul_m4_m3m4(cob->matrix, totmat, tmat); } } @@ -2416,7 +2416,7 @@ static void distlimit_evaluate (bConstraint *con, bConstraintOb *cob, ListBase * short clamp_surf= 0; /* calculate our current distance from the target */ - dist= VecLenf(cob->matrix[3], ct->matrix[3]); + dist= len_v3v3(cob->matrix[3], ct->matrix[3]); /* set distance (flag is only set when user demands it) */ if (data->dist == 0) @@ -2463,7 +2463,7 @@ static void distlimit_evaluate (bConstraint *con, bConstraintOb *cob, ListBase * /* clamp to 'surface' (i.e. move owner so that dist == data->dist) */ if (clamp_surf) { /* simply interpolate along line formed by target -> owner */ - VecLerpf(dvec, ct->matrix[3], cob->matrix[3], sfac); + interp_v3_v3v3(dvec, ct->matrix[3], cob->matrix[3], sfac); /* copy new vector onto owner */ VECCOPY(cob->matrix[3], dvec); @@ -2537,27 +2537,27 @@ static void stretchto_evaluate (bConstraint *con, bConstraintOb *cob, ListBase * float dist; /* store scaling before destroying obmat */ - Mat4ToSize(cob->matrix, size); + mat4_to_size( size,cob->matrix); /* store X orientation before destroying obmat */ xx[0] = cob->matrix[0][0]; xx[1] = cob->matrix[0][1]; xx[2] = cob->matrix[0][2]; - Normalize(xx); + normalize_v3(xx); /* store Z orientation before destroying obmat */ zz[0] = cob->matrix[2][0]; zz[1] = cob->matrix[2][1]; zz[2] = cob->matrix[2][2]; - Normalize(zz); + normalize_v3(zz); - VecSubf(vec, cob->matrix[3], ct->matrix[3]); + sub_v3_v3v3(vec, cob->matrix[3], ct->matrix[3]); vec[0] /= size[0]; vec[1] /= size[1]; vec[2] /= size[2]; - dist = Normalize(vec); - //dist = VecLenf( ob->obmat[3], targetmat[3]); + dist = normalize_v3(vec); + //dist = len_v3v3( ob->obmat[3], targetmat[3]); /* data->orglength==0 occurs on first run, and after 'R' button is clicked */ if (data->orglength == 0) @@ -2600,8 +2600,8 @@ static void stretchto_evaluate (bConstraint *con, bConstraintOb *cob, ListBase * cob->matrix[2][1]=0; cob->matrix[2][2]=size[2]*scale[2]; - VecSubf(vec, cob->matrix[3], ct->matrix[3]); - Normalize(vec); + sub_v3_v3v3(vec, cob->matrix[3], ct->matrix[3]); + normalize_v3(vec); /* new Y aligns object target connection*/ totmat[1][0] = -vec[0]; @@ -2611,8 +2611,8 @@ static void stretchto_evaluate (bConstraint *con, bConstraintOb *cob, ListBase * case PLANE_X: /* build new Z vector */ /* othogonal to "new Y" "old X! plane */ - Crossf(orth, vec, xx); - Normalize(orth); + cross_v3_v3v3(orth, vec, xx); + normalize_v3(orth); /* new Z*/ totmat[2][0] = orth[0]; @@ -2620,8 +2620,8 @@ static void stretchto_evaluate (bConstraint *con, bConstraintOb *cob, ListBase * totmat[2][2] = orth[2]; /* we decided to keep X plane*/ - Crossf(xx, orth, vec); - Normalize(xx); + cross_v3_v3v3(xx, orth, vec); + normalize_v3(xx); totmat[0][0] = xx[0]; totmat[0][1] = xx[1]; totmat[0][2] = xx[2]; @@ -2629,8 +2629,8 @@ static void stretchto_evaluate (bConstraint *con, bConstraintOb *cob, ListBase * case PLANE_Z: /* build new X vector */ /* othogonal to "new Y" "old Z! plane */ - Crossf(orth, vec, zz); - Normalize(orth); + cross_v3_v3v3(orth, vec, zz); + normalize_v3(orth); /* new X */ totmat[0][0] = -orth[0]; @@ -2638,16 +2638,16 @@ static void stretchto_evaluate (bConstraint *con, bConstraintOb *cob, ListBase * totmat[0][2] = -orth[2]; /* we decided to keep Z */ - Crossf(zz, orth, vec); - Normalize(zz); + cross_v3_v3v3(zz, orth, vec); + normalize_v3(zz); totmat[2][0] = zz[0]; totmat[2][1] = zz[1]; totmat[2][2] = zz[2]; break; } /* switch (data->plane) */ - Mat4CpyMat4(tmat, cob->matrix); - Mat4MulMat34(cob->matrix, totmat, tmat); + copy_m4_m4(tmat, cob->matrix); + mul_m4_m3m4(cob->matrix, totmat, tmat); } } @@ -2715,15 +2715,15 @@ static void minmax_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *tar float val1, val2; int index; - Mat4CpyMat4(obmat, cob->matrix); - Mat4CpyMat4(tarmat, ct->matrix); + copy_m4_m4(obmat, cob->matrix); + copy_m4_m4(tarmat, ct->matrix); if (data->flag & MINMAX_USEROT) { /* take rotation of target into account by doing the transaction in target's localspace */ - Mat4Invert(imat, tarmat); - Mat4MulMat4(tmat, obmat, imat); - Mat4CpyMat4(obmat, tmat); - Mat4One(tarmat); + invert_m4_m4(imat, tarmat); + mul_m4_m4m4(tmat, obmat, imat); + copy_m4_m4(obmat, tmat); + unit_m4(tarmat); } switch (data->minmaxflag) { @@ -2774,8 +2774,8 @@ static void minmax_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *tar } if (data->flag & MINMAX_USEROT) { /* get out of localspace */ - Mat4MulMat4(tmat, obmat, ct->matrix); - Mat4CpyMat4(cob->matrix, tmat); + mul_m4_m4m4(tmat, obmat, ct->matrix); + copy_m4_m4(cob->matrix, tmat); } else { VECCOPY(cob->matrix[3], obmat[3]); @@ -2899,7 +2899,7 @@ static void clampto_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstrain * might end up calling this... */ if (ct) - Mat4One(ct->matrix); + unit_m4(ct->matrix); } static void clampto_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *targets) @@ -2913,8 +2913,8 @@ static void clampto_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *ta float obmat[4][4], targetMatrix[4][4], ownLoc[3]; float curveMin[3], curveMax[3]; - Mat4CpyMat4(obmat, cob->matrix); - Mat4One(targetMatrix); + copy_m4_m4(obmat, cob->matrix); + unit_m4(targetMatrix); VECCOPY(ownLoc, obmat[3]); INIT_MINMAX(curveMin, curveMax) @@ -2930,7 +2930,7 @@ static void clampto_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *ta /* 1. determine which axis to sample on? */ if (data->flag == CLAMPTO_AUTO) { float size[3]; - VecSubf(size, curveMax, curveMin); + sub_v3_v3v3(size, curveMax, curveMin); /* find axis along which the bounding box has the greatest * extent. Otherwise, default to the x-axis, as that is quite @@ -3003,10 +3003,10 @@ static void clampto_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *ta /* 3. position on curve */ if (where_on_path(ct->tar, curvetime, vec, dir, NULL, NULL) ) { - Mat4One(totmat); + unit_m4(totmat); VECCOPY(totmat[3], vec); - Mat4MulSerie(targetMatrix, ct->tar->obmat, totmat, NULL, NULL, NULL, NULL, NULL, NULL); + mul_serie_m4(targetMatrix, ct->tar->obmat, totmat, NULL, NULL, NULL, NULL, NULL, NULL); } } @@ -3081,22 +3081,22 @@ static void transform_evaluate (bConstraint *con, bConstraintOb *cob, ListBase * /* obtain target effect */ switch (data->from) { case 2: /* scale */ - Mat4ToSize(ct->matrix, dvec); + mat4_to_size( dvec,ct->matrix); break; case 1: /* rotation (convert to degrees first) */ - Mat4ToEulO(ct->matrix, dvec, cob->rotOrder); + mat4_to_eulO( dvec, cob->rotOrder,ct->matrix); for (i=0; i<3; i++) dvec[i] = (float)(dvec[i] / M_PI * 180); break; default: /* location */ - VecCopyf(dvec, ct->matrix[3]); + copy_v3_v3(dvec, ct->matrix[3]); break; } /* extract components of owner's matrix */ VECCOPY(loc, cob->matrix[3]); - Mat4ToEulO(cob->matrix, eul, cob->rotOrder); - Mat4ToSize(cob->matrix, size); + mat4_to_eulO( eul, cob->rotOrder,cob->matrix); + mat4_to_size( size,cob->matrix); /* determine where in range current transforms lie */ if (data->expo) { @@ -3145,12 +3145,12 @@ static void transform_evaluate (bConstraint *con, bConstraintOb *cob, ListBase * loc[i]= (data->to_min[i] + (sval[(int)data->map[i]] * (data->to_max[i] - data->to_min[i]))); /* add original location back on (so that it can still be moved) */ - VecAddf(loc, cob->matrix[3], loc); + add_v3_v3v3(loc, cob->matrix[3], loc); break; } /* apply to matrix */ - LocEulOSizeToMat4(cob->matrix, loc, eul, size, cob->rotOrder); + loc_eulO_size_to_mat4(cob->matrix, loc, eul, size, cob->rotOrder); } } @@ -3222,7 +3222,7 @@ static void shrinkwrap_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstr hit.index = -1; hit.dist = 100000.0f; //TODO should use FLT_MAX.. but normal projection doenst yet supports it - Mat4One(ct->matrix); + unit_m4(ct->matrix); if(target != NULL) { @@ -3248,8 +3248,8 @@ static void shrinkwrap_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstr BLI_bvhtree_find_nearest(treeData.tree, co, &nearest, treeData.nearest_callback, &treeData); - dist = VecLenf(co, nearest.co); - VecLerpf(co, co, nearest.co, (dist - scon->dist)/dist); /* linear interpolation */ + dist = len_v3v3(co, nearest.co); + interp_v3_v3v3(co, co, nearest.co, (dist - scon->dist)/dist); /* linear interpolation */ space_transform_invert(&transform, co); break; @@ -3264,7 +3264,7 @@ static void shrinkwrap_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstr break; } - Normalize(no); + normalize_v3(no); bvhtree_from_mesh_faces(&treeData, target, scon->dist, 4, 6); @@ -3294,7 +3294,7 @@ static void shrinkwrap_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstr } /* co is in local object coordinates, change it to global and update target position */ - VecMat4MulVecfl(co, cob->matrix, co); + mul_v3_m4v3(co, cob->matrix, co); VECCOPY(ct->matrix[3], co); } } @@ -3378,23 +3378,23 @@ static void damptrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase * float rmat[3][3], tmat[4][4]; /* find the (unit) direction that the axis we're interested in currently points - * - Mat4Mul3Vecfl() only takes the 3x3 (rotation+scaling) components of the 4x4 matrix + * - mul_mat3_m4_v3() only takes the 3x3 (rotation+scaling) components of the 4x4 matrix * - the normalisation step at the end should take care of any unwanted scaling * left over in the 3x3 matrix we used */ VECCOPY(obvec, track_dir_vecs[data->trackflag]); - Mat4Mul3Vecfl(cob->matrix, obvec); + mul_mat3_m4_v3(cob->matrix, obvec); - if (Normalize(obvec) == 0.0f) { + if (normalize_v3(obvec) == 0.0f) { /* exceptional case - just use the track vector as appropriate */ VECCOPY(obvec, track_dir_vecs[data->trackflag]); } /* find the (unit) direction vector going from the owner to the target */ VECCOPY(obloc, cob->matrix[3]); - VecSubf(tarvec, ct->matrix[3], obloc); + sub_v3_v3v3(tarvec, ct->matrix[3], obloc); - if (Normalize(tarvec) == 0.0f) { + if (normalize_v3(tarvec) == 0.0f) { /* the target is sitting on the owner, so just make them use the same direction vectors */ // FIXME: or would it be better to use the pure direction vector? VECCOPY(tarvec, obvec); @@ -3409,23 +3409,23 @@ static void damptrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase * * - the min/max wrappers around (obvec . tarvec) result (stored temporarily in rangle) * are used to ensure that the smallest angle is chosen */ - Crossf(raxis, obvec, tarvec); + cross_v3_v3v3(raxis, obvec, tarvec); - rangle= Inpf(obvec, tarvec); + rangle= dot_v3v3(obvec, tarvec); rangle= acos( MAX2(-1.0f, MIN2(1.0f, rangle)) ); /* construct rotation matrix from the axis-angle rotation found above * - this call takes care to make sure that the axis provided is a unit vector first */ - AxisAngleToMat3(raxis, rangle, rmat); + axis_angle_to_mat3( rmat,raxis, rangle); /* rotate the owner in the way defined by this rotation matrix, then reapply the location since * we may have destroyed that in the process of multiplying the matrix */ - Mat4One(tmat); - Mat4MulMat34(tmat, rmat, cob->matrix); // m1, m3, m2 + unit_m4(tmat); + mul_m4_m3m4(tmat, rmat, cob->matrix); // m1, m3, m2 - Mat4CpyMat4(cob->matrix, tmat); + copy_m4_m4(cob->matrix, tmat); VECCOPY(cob->matrix[3], obloc); } } @@ -3509,7 +3509,7 @@ static void splineik_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstrai * might end up calling this... */ if (ct) - Mat4One(ct->matrix); + unit_m4(ct->matrix); } static bConstraintTypeInfo CTI_SPLINEIK = { @@ -3771,12 +3771,12 @@ void get_constraint_target_matrix (struct Scene *scene, bConstraint *con, int n, cob->ob= (Object *)ownerdata; cob->pchan= NULL; if (cob->ob) { - Mat4CpyMat4(cob->matrix, cob->ob->obmat); - Mat4CpyMat4(cob->startmat, cob->matrix); + copy_m4_m4(cob->matrix, cob->ob->obmat); + copy_m4_m4(cob->startmat, cob->matrix); } else { - Mat4One(cob->matrix); - Mat4One(cob->startmat); + unit_m4(cob->matrix); + unit_m4(cob->startmat); } } break; @@ -3785,12 +3785,12 @@ void get_constraint_target_matrix (struct Scene *scene, bConstraint *con, int n, cob->ob= NULL; /* this might not work at all :/ */ cob->pchan= (bPoseChannel *)ownerdata; if (cob->pchan) { - Mat4CpyMat4(cob->matrix, cob->pchan->pose_mat); - Mat4CpyMat4(cob->startmat, cob->matrix); + copy_m4_m4(cob->matrix, cob->pchan->pose_mat); + copy_m4_m4(cob->startmat, cob->matrix); } else { - Mat4One(cob->matrix); - Mat4One(cob->startmat); + unit_m4(cob->matrix); + unit_m4(cob->startmat); } } break; @@ -3807,7 +3807,7 @@ void get_constraint_target_matrix (struct Scene *scene, bConstraint *con, int n, if (ct) { if (cti->get_target_matrix) cti->get_target_matrix(con, cob, ct, ctime); - Mat4CpyMat4(mat, ct->matrix); + copy_m4_m4(mat, ct->matrix); } /* free targets + 'constraint-ob' */ @@ -3817,7 +3817,7 @@ void get_constraint_target_matrix (struct Scene *scene, bConstraint *con, int n, } else { /* invalid constraint - perhaps... */ - Mat4One(mat); + unit_m4(mat); } } @@ -3860,7 +3860,7 @@ void solve_constraints (ListBase *conlist, bConstraintOb *cob, float ctime) /* move owner matrix into right space */ constraint_mat_convertspace(cob->ob, cob->pchan, cob->matrix, CONSTRAINT_SPACE_WORLD, con->ownspace); - Mat4CpyMat4(oldmat, cob->matrix); + copy_m4_m4(oldmat, cob->matrix); /* prepare targets for constraint solving */ if (cti->get_constraint_targets) { @@ -3881,7 +3881,7 @@ void solve_constraints (ListBase *conlist, bConstraintOb *cob, float ctime) } else { for (ct= targets.first; ct; ct= ct->next) - Mat4One(ct->matrix); + unit_m4(ct->matrix); } } @@ -3898,21 +3898,21 @@ void solve_constraints (ListBase *conlist, bConstraintOb *cob, float ctime) /* Interpolate the enforcement, to blend result of constraint into final owner transform */ /* 1. Remove effects of original matrix from constraint solution ==> delta */ - Mat4Invert(imat, oldmat); - Mat4CpyMat4(solution, cob->matrix); - Mat4MulMat4(delta, solution, imat); + invert_m4_m4(imat, oldmat); + copy_m4_m4(solution, cob->matrix); + mul_m4_m4m4(delta, solution, imat); /* 2. If constraint influence is not full strength, then interpolate * identity_matrix --> delta_matrix to get the effect the constraint actually exerts */ if (enf < 1.0) { float identity[4][4]; - Mat4One(identity); - Mat4BlendMat4(delta, identity, delta, enf); + unit_m4(identity); + blend_m4_m4m4(delta, identity, delta, enf); } /* 3. Now multiply the delta by the matrix in use before the evaluation */ - Mat4MulMat4(cob->matrix, delta, oldmat); + mul_m4_m4m4(cob->matrix, delta, oldmat); /* move owner back into worldspace for next constraint/other business */ if ((con->flag & CONSTRAINT_SPACEONCE) == 0) diff --git a/source/blender/blenkernel/intern/context.c b/source/blender/blenkernel/intern/context.c index 7f2872c0797..21549f6b147 100644 --- a/source/blender/blenkernel/intern/context.c +++ b/source/blender/blenkernel/intern/context.c @@ -46,6 +46,8 @@ #include "BKE_screen.h" #include "BKE_global.h" +#include "BPY_extern.h" + #include <string.h> /* struct */ @@ -408,16 +410,26 @@ struct bContextDataResult { static int ctx_data_get(bContext *C, const char *member, bContextDataResult *result) { int done= 0, recursion= C->data.recursion; + int ret= 0; memset(result, 0, sizeof(bContextDataResult)); if(CTX_py_dict_get(C)) { - return bpy_context_get(C, member, result); + return BPY_context_get(C, member, result); +// if (BPY_context_get(C, member, result)) +// return 1; } /* we check recursion to ensure that we do not get infinite * loops requesting data from ourselfs in a context callback */ - if(!done && recursion < 1 && C->wm.store) { + + /* Ok, this looks evil... + * if(ret) done= -(-ret | -done); + * + * Values in order of importance + * (0, -1, 1) - Where 1 is highest priority + * */ + if(done!=1 && recursion < 1 && C->wm.store) { bContextStoreEntry *entry; C->data.recursion= 1; @@ -429,21 +441,28 @@ static int ctx_data_get(bContext *C, const char *member, bContextDataResult *res } } } - if(!done && recursion < 2 && C->wm.region) { + if(done!=1 && recursion < 2 && C->wm.region) { C->data.recursion= 2; - if(C->wm.region->type && C->wm.region->type->context) - done= C->wm.region->type->context(C, member, result); + if(C->wm.region->type && C->wm.region->type->context) { + ret = C->wm.region->type->context(C, member, result); + if(ret) done= -(-ret | -done); + + } } - if(!done && recursion < 3 && C->wm.area) { + if(done!=1 && recursion < 3 && C->wm.area) { C->data.recursion= 3; - if(C->wm.area->type && C->wm.area->type->context) - done= C->wm.area->type->context(C, member, result); + if(C->wm.area->type && C->wm.area->type->context) { + ret = C->wm.area->type->context(C, member, result); + if(ret) done= -(-ret | -done); + } } - if(!done && recursion < 4 && C->wm.screen) { + if(done!=1 && recursion < 4 && C->wm.screen) { bContextDataCallback cb= C->wm.screen->context; C->data.recursion= 4; - if(cb) - done= cb(C, member, result); + if(cb) { + ret = cb(C, member, result); + if(ret) done= -(-ret | -done); + } } C->data.recursion= recursion; @@ -455,7 +474,7 @@ static void *ctx_data_pointer_get(const bContext *C, const char *member) { bContextDataResult result; - if(C && ctx_data_get((bContext*)C, member, &result)) + if(C && ctx_data_get((bContext*)C, member, &result)==1) return result.ptr.data; return NULL; @@ -465,7 +484,7 @@ static int ctx_data_pointer_verify(const bContext *C, const char *member, void * { bContextDataResult result; - if(ctx_data_get((bContext*)C, member, &result)) { + if(ctx_data_get((bContext*)C, member, &result)==1) { *pointer= result.ptr.data; return 1; } @@ -479,7 +498,7 @@ static int ctx_data_collection_get(const bContext *C, const char *member, ListBa { bContextDataResult result; - if(ctx_data_get((bContext*)C, member, &result)) { + if(ctx_data_get((bContext*)C, member, &result)==1) { *list= result.list; return 1; } @@ -494,7 +513,7 @@ PointerRNA CTX_data_pointer_get(const bContext *C, const char *member) { bContextDataResult result; - if(ctx_data_get((bContext*)C, member, &result)) + if(ctx_data_get((bContext*)C, member, &result)==1) return result.ptr; else return PointerRNA_NULL; @@ -514,7 +533,7 @@ ListBase CTX_data_collection_get(const bContext *C, const char *member) { bContextDataResult result; - if(ctx_data_get((bContext*)C, member, &result)) { + if(ctx_data_get((bContext*)C, member, &result)==1) { return result.list; } else { @@ -524,11 +543,13 @@ ListBase CTX_data_collection_get(const bContext *C, const char *member) } } -void CTX_data_get(const bContext *C, const char *member, PointerRNA *r_ptr, ListBase *r_lb) +/* 1:found, -1:found but not set, 0:not found */ +int CTX_data_get(const bContext *C, const char *member, PointerRNA *r_ptr, ListBase *r_lb) { bContextDataResult result; + int ret= ctx_data_get((bContext*)C, member, &result); - if(ctx_data_get((bContext*)C, member, &result)) { + if(ret==1) { *r_ptr= result.ptr; *r_lb= result.list; } @@ -536,6 +557,8 @@ void CTX_data_get(const bContext *C, const char *member, PointerRNA *r_ptr, List memset(r_ptr, 0, sizeof(*r_ptr)); memset(r_lb, 0, sizeof(*r_lb)); } + + return ret; } static void data_dir_add(ListBase *lb, const char *member) diff --git a/source/blender/blenkernel/intern/curve.c b/source/blender/blenkernel/intern/curve.c index 5580070b922..83e2e0c29d9 100644 --- a/source/blender/blenkernel/intern/curve.c +++ b/source/blender/blenkernel/intern/curve.c @@ -40,7 +40,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "DNA_object_types.h" #include "DNA_curve_types.h" @@ -145,6 +145,7 @@ Curve *add_curve(char *name, int type) cu->fsize= 1.0; cu->ulheight = 0.05; cu->texflag= CU_AUTOSPACE; + cu->twist_mode= CU_TWIST_MINIMUM; // XXX: this one seems to be the best one in most cases, at least for curve deform... cu->bb= unit_boundbox(); @@ -991,7 +992,7 @@ static void forward_diff_bezier_cotangent(float *p0, float *p1, float *p2, float for(i=0; i<3; i++) { p[i]= (-6*t + 6)*p0[i] + (18*t - 12)*p1[i] + (-18*t + 6)*p2[i] + (6*t)*p3[i]; } - Normalize(p); + normalize_v3(p); p = (float *)(((char *)p)+stride); } } @@ -1597,7 +1598,7 @@ static void bevel_list_calc_bisect(BevList *bl) nr= bl->nr; while(nr--) { /* totally simple */ - VecBisect3(bevp1->dir, bevp0->vec, bevp1->vec, bevp2->vec); + bisect_v3_v3v3v3(bevp1->dir, bevp0->vec, bevp1->vec, bevp2->vec); bevp0= bevp1; bevp1= bevp2; @@ -1615,8 +1616,8 @@ static void bevel_list_flip_tangents(BevList *bl) nr= bl->nr; while(nr--) { - if(RAD2DEG(VecAngle2(bevp0->tan, bevp1->tan)) > 90) - VecNegf(bevp1->tan); + if(RAD2DEG(angle_v2v2(bevp0->tan, bevp1->tan)) > 90) + negate_v3(bevp1->tan); bevp0= bevp1; bevp1= bevp2; @@ -1636,9 +1637,9 @@ static void bevel_list_apply_tilt(BevList *bl) nr= bl->nr; while(nr--) { - AxisAngleToQuat(q, bevp1->dir, bevp1->alfa); - QuatMul(bevp1->quat, q, bevp1->quat); - NormalQuat(bevp1->quat); + axis_angle_to_quat(q, bevp1->dir, bevp1->alfa); + mul_qt_qtqt(bevp1->quat, q, bevp1->quat); + normalize_qt(bevp1->quat); bevp0= bevp1; bevp1= bevp2; @@ -1682,18 +1683,18 @@ static void bevel_list_smooth(BevList *bl, int smooth_iter) while(nr--) { /* interpolate quats */ float zaxis[3] = {0,0,1}, cross[3], q2[4]; - QuatInterpol(q, bevp0_quat, bevp2->quat, 0.5); - NormalQuat(q); + interp_qt_qtqt(q, bevp0_quat, bevp2->quat, 0.5); + normalize_qt(q); - QuatMulVecf(q, zaxis); - Crossf(cross, zaxis, bevp1->dir); - AxisAngleToQuat(q2, cross, NormalizedVecAngle2(zaxis, bevp1->dir)); - NormalQuat(q2); + mul_qt_v3(q, zaxis); + cross_v3_v3v3(cross, zaxis, bevp1->dir); + axis_angle_to_quat(q2, cross, angle_normalized_v3v3(zaxis, bevp1->dir)); + normalize_qt(q2); QUATCOPY(bevp0_quat, bevp1->quat); - QuatMul(q, q2, q); - QuatInterpol(bevp1->quat, bevp1->quat, q, 0.5); - NormalQuat(bevp1->quat); + mul_qt_qtqt(q, q2, q); + interp_qt_qtqt(bevp1->quat, bevp1->quat, q, 0.5); + normalize_qt(bevp1->quat); bevp0= bevp1; @@ -1715,8 +1716,8 @@ static void make_bevel_list_3D_zup(BevList *bl) nr= bl->nr; while(nr--) { /* totally simple */ - VecBisect3(bevp1->dir, bevp0->vec, bevp1->vec, bevp2->vec); - vectoquat(bevp1->dir, 5, 1, bevp1->quat); + bisect_v3_v3v3v3(bevp1->dir, bevp0->vec, bevp1->vec, bevp2->vec); + vec_to_quat( bevp1->quat,bevp1->dir, 5, 1); bevp0= bevp1; bevp1= bevp2; @@ -1742,15 +1743,15 @@ static void make_bevel_list_3D_minimum_twist(BevList *bl) while(nr--) { if(nr+4 > bl->nr) { /* first time and second time, otherwise first point adjusts last */ - vectoquat(bevp1->dir, 5, 1, bevp1->quat); + vec_to_quat( bevp1->quat,bevp1->dir, 5, 1); } else { - float angle= NormalizedVecAngle2(bevp0->dir, bevp1->dir); + float angle= angle_normalized_v3v3(bevp0->dir, bevp1->dir); if(angle > 0.0f) { /* otherwise we can keep as is */ - Crossf(cross_tmp, bevp0->dir, bevp1->dir); - AxisAngleToQuat(q, cross_tmp, angle); - QuatMul(bevp1->quat, q, bevp0->quat); + cross_v3_v3v3(cross_tmp, bevp0->dir, bevp1->dir); + axis_angle_to_quat(q, cross_tmp, angle); + mul_qt_qtqt(bevp1->quat, q, bevp0->quat); } else { QUATCOPY(bevp1->quat, bevp0->quat); @@ -1787,26 +1788,26 @@ static void make_bevel_list_3D_minimum_twist(BevList *bl) bevp_last--; /* quats and vec's are normalized, should not need to re-normalize */ - QuatMulVecf(bevp_first->quat, vec_1); - QuatMulVecf(bevp_last->quat, vec_2); - Normalize(vec_1); - Normalize(vec_2); + mul_qt_v3(bevp_first->quat, vec_1); + mul_qt_v3(bevp_last->quat, vec_2); + normalize_v3(vec_1); + normalize_v3(vec_2); /* align the vector, can avoid this and it looks 98% OK but * better to align the angle quat roll's before comparing */ { - Crossf(cross_tmp, bevp_last->dir, bevp_first->dir); - angle = NormalizedVecAngle2(bevp_first->dir, bevp_last->dir); - AxisAngleToQuat(q, cross_tmp, angle); - QuatMulVecf(q, vec_2); + cross_v3_v3v3(cross_tmp, bevp_last->dir, bevp_first->dir); + angle = angle_normalized_v3v3(bevp_first->dir, bevp_last->dir); + axis_angle_to_quat(q, cross_tmp, angle); + mul_qt_v3(q, vec_2); } - angle= NormalizedVecAngle2(vec_1, vec_2); + angle= angle_normalized_v3v3(vec_1, vec_2); /* flip rotation if needs be */ - Crossf(cross_tmp, vec_1, vec_2); - Normalize(cross_tmp); - if(NormalizedVecAngle2(bevp_first->dir, cross_tmp) < 90/(180.0/M_PI)) + cross_v3_v3v3(cross_tmp, vec_1, vec_2); + normalize_v3(cross_tmp); + if(angle_normalized_v3v3(bevp_first->dir, cross_tmp) < 90/(180.0/M_PI)) angle = -angle; bevp2= (BevPoint *)(bl+1); @@ -1817,8 +1818,8 @@ static void make_bevel_list_3D_minimum_twist(BevList *bl) while(nr--) { ang_fac= angle * (1.0f-((float)nr/bl->nr)); /* also works */ - AxisAngleToQuat(q, bevp1->dir, ang_fac); - QuatMul(bevp1->quat, q, bevp1->quat); + axis_angle_to_quat(q, bevp1->dir, ang_fac); + mul_qt_qtqt(bevp1->quat, q, bevp1->quat); bevp0= bevp1; bevp1= bevp2; @@ -1847,9 +1848,9 @@ static void make_bevel_list_3D_tangent(BevList *bl) nr= bl->nr; while(nr--) { - Crossf(cross_tmp, bevp1->tan, bevp1->dir); - Crossf(bevp1->tan, cross_tmp, bevp1->dir); - Normalize(bevp1->tan); + cross_v3_v3v3(cross_tmp, bevp1->tan, bevp1->dir); + cross_v3_v3v3(bevp1->tan, cross_tmp, bevp1->dir); + normalize_v3(bevp1->tan); bevp0= bevp1; bevp1= bevp2; @@ -1871,9 +1872,9 @@ static void make_bevel_list_3D_tangent(BevList *bl) float cross_tmp[3]; float zero[3] = {0,0,0}; - Crossf(cross_tmp, bevp1->tan, bevp1->dir); - Normalize(cross_tmp); - triatoquat(zero, cross_tmp, bevp1->tan, bevp1->quat); /* XXX - could be faster */ + cross_v3_v3v3(cross_tmp, bevp1->tan, bevp1->dir); + normalize_v3(cross_tmp); + tri_to_quat( bevp1->quat,zero, cross_tmp, bevp1->tan); /* XXX - could be faster */ bevp0= bevp1; bevp1= bevp2; @@ -2279,14 +2280,14 @@ void makeBevelList(Object *ob) bevp1= bevp2+1; /* simple quat/dir */ - VecSubf(bevp1->dir, bevp1->vec, bevp2->vec); - Normalize(bevp1->dir); + sub_v3_v3v3(bevp1->dir, bevp1->vec, bevp2->vec); + normalize_v3(bevp1->dir); - vectoquat(bevp1->dir, 5, 1, bevp1->quat); + vec_to_quat( bevp1->quat,bevp1->dir, 5, 1); - AxisAngleToQuat(q, bevp1->dir, bevp1->alfa); - QuatMul(bevp1->quat, q, bevp1->quat); - NormalQuat(bevp1->quat); + axis_angle_to_quat(q, bevp1->dir, bevp1->alfa); + mul_qt_qtqt(bevp1->quat, q, bevp1->quat); + normalize_qt(bevp1->quat); VECCOPY(bevp2->dir, bevp1->dir); QUATCOPY(bevp2->quat, bevp1->quat); } @@ -2420,10 +2421,10 @@ void calchandleNurb(BezTriple *bezt, BezTriple *prev, BezTriple *next, int mode) if(leftviolate || rightviolate) { /* align left handle */ float h1[3], h2[3]; - VecSubf(h1, p2-3, p2); - VecSubf(h2, p2, p2+3); - len1= Normalize(h1); - len2= Normalize(h2); + sub_v3_v3v3(h1, p2-3, p2); + sub_v3_v3v3(h2, p2, p2+3); + len1= normalize_v3(h1); + len2= normalize_v3(h2); vz= INPR(h1, h2); @@ -2459,8 +2460,8 @@ void calchandleNurb(BezTriple *bezt, BezTriple *prev, BezTriple *next, int mode) *(p2+5)= *(p2+2)+dz1; } - len2= VecLenf(p2, p2+3); - len1= VecLenf(p2, p2-3); + len2= len_v3v3(p2, p2+3); + len1= len_v3v3(p2, p2-3); if(len1==0.0) len1=1.0; if(len2==0.0) len2=1.0; @@ -2587,18 +2588,18 @@ void autocalchandlesNurb(Nurb *nu, int flag) if(flag==0 || (bezt1->f1 & flag) ) { bezt1->h1= 0; /* distance too short: vectorhandle */ - if( VecLenf( bezt1->vec[1], bezt0->vec[1] ) < 0.0001) { + if( len_v3v3( bezt1->vec[1], bezt0->vec[1] ) < 0.0001) { bezt1->h1= HD_VECT; leftsmall= 1; } else { /* aligned handle? */ - if(DistVL2Dfl(bezt1->vec[1], bezt1->vec[0], bezt1->vec[2]) < 0.0001) { + if(dist_to_line_v2(bezt1->vec[1], bezt1->vec[0], bezt1->vec[2]) < 0.0001) { align= 1; bezt1->h1= HD_ALIGN; } /* or vector handle? */ - if(DistVL2Dfl(bezt1->vec[0], bezt1->vec[1], bezt0->vec[1]) < 0.0001) + if(dist_to_line_v2(bezt1->vec[0], bezt1->vec[1], bezt0->vec[1]) < 0.0001) bezt1->h1= HD_VECT; } @@ -2607,7 +2608,7 @@ void autocalchandlesNurb(Nurb *nu, int flag) if(flag==0 || (bezt1->f3 & flag) ) { bezt1->h2= 0; /* distance too short: vectorhandle */ - if( VecLenf( bezt1->vec[1], bezt2->vec[1] ) < 0.0001) { + if( len_v3v3( bezt1->vec[1], bezt2->vec[1] ) < 0.0001) { bezt1->h2= HD_VECT; rightsmall= 1; } @@ -2616,7 +2617,7 @@ void autocalchandlesNurb(Nurb *nu, int flag) if(align) bezt1->h2= HD_ALIGN; /* or vector handle? */ - if(DistVL2Dfl(bezt1->vec[2], bezt1->vec[1], bezt2->vec[1]) < 0.0001) + if(dist_to_line_v2(bezt1->vec[2], bezt1->vec[1], bezt2->vec[1]) < 0.0001) bezt1->h2= HD_VECT; } diff --git a/source/blender/blenkernel/intern/customdata.c b/source/blender/blenkernel/intern/customdata.c index 28aaadea9c3..7b754025b6c 100644 --- a/source/blender/blenkernel/intern/customdata.c +++ b/source/blender/blenkernel/intern/customdata.c @@ -34,7 +34,7 @@ #include "BKE_customdata.h" #include "BKE_utildefines.h" // CLAMP -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_linklist.h" #include "BLI_mempool.h" @@ -410,21 +410,21 @@ static void mdisps_bilinear(float out[3], float (*disps)[3], int st, float u, fl vrat = v - y; uopp = 1 - urat; - VecCopyf(d[0], disps[y * st + x]); - VecCopyf(d[1], disps[y * st + x2]); - VecCopyf(d[2], disps[y2 * st + x]); - VecCopyf(d[3], disps[y2 * st + x2]); - VecMulf(d[0], uopp); - VecMulf(d[1], urat); - VecMulf(d[2], uopp); - VecMulf(d[3], urat); + copy_v3_v3(d[0], disps[y * st + x]); + copy_v3_v3(d[1], disps[y * st + x2]); + copy_v3_v3(d[2], disps[y2 * st + x]); + copy_v3_v3(d[3], disps[y2 * st + x2]); + mul_v3_fl(d[0], uopp); + mul_v3_fl(d[1], urat); + mul_v3_fl(d[2], uopp); + mul_v3_fl(d[3], urat); - VecAddf(d2[0], d[0], d[1]); - VecAddf(d2[1], d[2], d[3]); - VecMulf(d2[0], 1 - vrat); - VecMulf(d2[1], vrat); + add_v3_v3v3(d2[0], d[0], d[1]); + add_v3_v3v3(d2[1], d[2], d[3]); + mul_v3_fl(d2[0], 1 - vrat); + mul_v3_fl(d2[1], vrat); - VecAddf(out, d2[0], d2[1]); + add_v3_v3v3(out, d2[0], d2[1]); } static void layerSwap_mdisps(void *data, int *ci) @@ -440,7 +440,7 @@ static void layerSwap_mdisps(void *data, int *ci) for(y = 0; y < st; ++y) { for(x = 0; x < st; ++x) { - VecCopyf(d[(st - y - 1) * st + (st - x - 1)], s->disps[y * st + x]); + copy_v3_v3(d[(st - y - 1) * st + (st - x - 1)], s->disps[y * st + x]); } } @@ -462,7 +462,7 @@ static void layerInterp_mdisps(void **sources, float *weights, float *sub_weight /* Initialize the destination */ for(i = 0; i < d->totdisp; ++i) { float z[3] = {0,0,0}; - VecCopyf(d->disps[i], z); + copy_v3_v3(d->disps[i], z); } /* For now, some restrictions on the input */ @@ -493,7 +493,7 @@ static void layerInterp_mdisps(void **sources, float *weights, float *sub_weight float srcdisp[3]; mdisps_bilinear(srcdisp, s->disps, st, mid3[0], mid3[1]); - VecCopyf(d->disps[y * st + x], srcdisp); + copy_v3_v3(d->disps[y * st + x], srcdisp); } } } diff --git a/source/blender/blenkernel/intern/deform.c b/source/blender/blenkernel/intern/deform.c index b7949a6e06f..c1e45243bb5 100644 --- a/source/blender/blenkernel/intern/deform.c +++ b/source/blender/blenkernel/intern/deform.c @@ -59,7 +59,7 @@ #include "BKE_mesh.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #ifdef HAVE_CONFIG_H #include <config.h> diff --git a/source/blender/blenkernel/intern/depsgraph.c b/source/blender/blenkernel/intern/depsgraph.c index 36568ee5667..8b848ac5371 100644 --- a/source/blender/blenkernel/intern/depsgraph.c +++ b/source/blender/blenkernel/intern/depsgraph.c @@ -34,7 +34,7 @@ #endif #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "DNA_anim_types.h" #include "DNA_action_types.h" diff --git a/source/blender/blenkernel/intern/displist.c b/source/blender/blenkernel/intern/displist.c index 64af08d6f6a..48fb283c404 100644 --- a/source/blender/blenkernel/intern/displist.c +++ b/source/blender/blenkernel/intern/displist.c @@ -56,7 +56,7 @@ #include "DNA_key_types.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_editVert.h" #include "BLI_edgehash.h" @@ -220,12 +220,12 @@ void addnormalsDispList(Object *ob, ListBase *lb) for(; b<dl->nr; b++) { - CalcNormFloat4(v1, v3, v4, v2, nor); + normal_quad_v3( nor,v1, v3, v4, v2); - VecAddf(n1, n1, nor); - VecAddf(n2, n2, nor); - VecAddf(n3, n3, nor); - VecAddf(n4, n4, nor); + add_v3_v3v3(n1, n1, nor); + add_v3_v3v3(n2, n2, nor); + add_v3_v3v3(n3, n3, nor); + add_v3_v3v3(n4, n4, nor); v2= v1; v1+= 3; v4= v3; v3+= 3; @@ -236,7 +236,7 @@ void addnormalsDispList(Object *ob, ListBase *lb) a= dl->parts*dl->nr; v1= ndata; while(a--) { - Normalize(v1); + normalize_v3(v1); v1+= 3; } } @@ -475,11 +475,11 @@ static void init_fastshade_for_ob(Render *re, Object *ob, int *need_orco_r, floa init_fastshade_shadeinput(re); RE_DataBase_GetView(re, tmat); - Mat4MulMat4(mat, ob->obmat, tmat); + mul_m4_m4m4(mat, ob->obmat, tmat); - Mat4Invert(tmat, mat); - Mat3CpyMat4(imat, tmat); - if(ob->transflag & OB_NEG_SCALE) Mat3MulFloat((float *)imat, -1.0); + invert_m4_m4(tmat, mat); + copy_m3_m4(imat, tmat); + if(ob->transflag & OB_NEG_SCALE) mul_m3_fl(imat, -1.0); if (need_orco_r) *need_orco_r= 0; for(a=0; a<ob->totcol; a++) { @@ -563,7 +563,7 @@ static void mesh_create_shadedColors(Render *re, Object *ob, int onlyForMesh, un vn[0]= imat[0][0]*xn+imat[0][1]*yn+imat[0][2]*zn; vn[1]= imat[1][0]*xn+imat[1][1]*yn+imat[1][2]*zn; vn[2]= imat[2][0]*xn+imat[2][1]*yn+imat[2][2]*zn; - Normalize(vn); + normalize_v3(vn); } for (i=0; i<totface; i++) { @@ -586,15 +586,15 @@ static void mesh_create_shadedColors(Render *re, Object *ob, int onlyForMesh, un VECCOPY(nor, &nors[i*3]); } else { if (mf->v4) - CalcNormFloat4(mvert[mf->v1].co, mvert[mf->v2].co, mvert[mf->v3].co, mvert[mf->v4].co, nor); + normal_quad_v3( nor,mvert[mf->v1].co, mvert[mf->v2].co, mvert[mf->v3].co, mvert[mf->v4].co); else - CalcNormFloat(mvert[mf->v1].co, mvert[mf->v2].co, mvert[mf->v3].co, nor); + normal_tri_v3( nor,mvert[mf->v1].co, mvert[mf->v2].co, mvert[mf->v3].co); } n1[0]= imat[0][0]*nor[0]+imat[0][1]*nor[1]+imat[0][2]*nor[2]; n1[1]= imat[1][0]*nor[0]+imat[1][1]*nor[1]+imat[1][2]*nor[2]; n1[2]= imat[2][0]*nor[0]+imat[2][1]*nor[1]+imat[2][2]*nor[2]; - Normalize(n1); + normalize_v3(n1); for (j=0; j<nverts; j++) { MVert *mv= &mvert[vidx[j]]; @@ -603,7 +603,7 @@ static void mesh_create_shadedColors(Render *re, Object *ob, int onlyForMesh, un float *vn = (mf->flag & ME_SMOOTH)?&vnors[3*vidx[j]]:n1; VECCOPY(vec, mv->co); - Mat4MulVecfl(mat, vec); + mul_m4_v3(mat, vec); vec[0]+= 0.001*vn[0]; vec[1]+= 0.001*vn[1]; vec[2]+= 0.001*vn[2]; @@ -708,14 +708,14 @@ void shadeDispList(Scene *scene, Base *base) n1[0]= imat[0][0]*dl->nors[0]+imat[0][1]*dl->nors[1]+imat[0][2]*dl->nors[2]; n1[1]= imat[1][0]*dl->nors[0]+imat[1][1]*dl->nors[1]+imat[1][2]*dl->nors[2]; n1[2]= imat[2][0]*dl->nors[0]+imat[2][1]*dl->nors[1]+imat[2][2]*dl->nors[2]; - Normalize(n1); + normalize_v3(n1); fp= dl->verts; a= dl->nr; while(a--) { VECCOPY(vec, fp); - Mat4MulVecfl(mat, vec); + mul_m4_v3(mat, vec); fastshade(vec, n1, fp, ma, (char *)col1, NULL); @@ -731,12 +731,12 @@ void shadeDispList(Scene *scene, Base *base) while(a--) { VECCOPY(vec, fp); - Mat4MulVecfl(mat, vec); + mul_m4_v3(mat, vec); n1[0]= imat[0][0]*nor[0]+imat[0][1]*nor[1]+imat[0][2]*nor[2]; n1[1]= imat[1][0]*nor[0]+imat[1][1]*nor[1]+imat[1][2]*nor[2]; n1[2]= imat[2][0]*nor[0]+imat[2][1]*nor[1]+imat[2][2]*nor[2]; - Normalize(n1); + normalize_v3(n1); fastshade(vec, n1, fp, ma, (char *)col1, NULL); @@ -769,13 +769,13 @@ void shadeDispList(Scene *scene, Base *base) a= dl->nr; while(a--) { VECCOPY(vec, fp); - Mat4MulVecfl(mat, vec); + mul_m4_v3(mat, vec); /* transpose ! */ n1[0]= imat[0][0]*nor[0]+imat[0][1]*nor[1]+imat[0][2]*nor[2]; n1[1]= imat[1][0]*nor[0]+imat[1][1]*nor[1]+imat[1][2]*nor[2]; n1[2]= imat[2][0]*nor[0]+imat[2][1]*nor[1]+imat[2][2]*nor[2]; - Normalize(n1); + normalize_v3(n1); fastshade(vec, n1, fp, ma, (char *)col1, NULL); @@ -1612,7 +1612,7 @@ void makeDispListCurveTypes(Scene *scene, Object *ob, int forOrco) vec[1]= fp1[2]; vec[2]= 0.0; - QuatMulVecf(bevp->quat, vec); + mul_qt_v3(bevp->quat, vec); data[0]= bevp->vec[0] + fac*vec[0]; data[1]= bevp->vec[1] + fac*vec[1]; diff --git a/source/blender/blenkernel/intern/effect.c b/source/blender/blenkernel/intern/effect.c index 9b648e2c05c..6d63553396d 100644 --- a/source/blender/blenkernel/intern/effect.c +++ b/source/blender/blenkernel/intern/effect.c @@ -52,7 +52,7 @@ #include "DNA_texture_types.h" #include "DNA_scene_types.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_jitter.h" #include "BLI_listbase.h" @@ -221,8 +221,8 @@ static void precalculate_effector(EffectorCache *eff) if(cu->path && cu->path->data) { where_on_path(eff->ob, 0.0, eff->guide_loc, eff->guide_dir, NULL, &eff->guide_radius); - Mat4MulVecfl(eff->ob->obmat, eff->guide_loc); - Mat4Mul3Vecfl(eff->ob->obmat, eff->guide_dir); + mul_m4_v3(eff->ob->obmat, eff->guide_loc); + mul_mat3_m4_v3(eff->ob->obmat, eff->guide_dir); } } } @@ -433,8 +433,8 @@ static float eff_calc_visibility(ListBase *colliders, EffectorCache *eff, Effect return visibility; VECCOPY(norm, efd->vec_to_point); - VecNegf(norm); - len = Normalize(norm); + negate_v3(norm); + len = normalize_v3(norm); // check all collision objects for(col = colls->first; col; col = col->next) @@ -520,7 +520,7 @@ float effector_falloff(EffectorCache *eff, EffectorData *efd, EffectedPoint *poi float falloff = weights ? weights->weight[0] * weights->weight[eff->pd->forcefield] : 1.0f; float fac, r_fac; - fac = Inpf(efd->nor, efd->vec_to_point2); + fac = dot_v3v3(efd->nor, efd->vec_to_point2); if(eff->pd->zdir == PFIELD_Z_POS && fac < 0.0f) falloff=0.0f; @@ -537,7 +537,7 @@ float effector_falloff(EffectorCache *eff, EffectorData *efd, EffectedPoint *poi break; VECADDFAC(temp, efd->vec_to_point, efd->nor, -fac); - r_fac= VecLength(temp); + r_fac= len_v3(temp); falloff*= falloff_func_rad(eff->pd, r_fac); break; case PFIELD_FALL_CONE: @@ -545,7 +545,7 @@ float effector_falloff(EffectorCache *eff, EffectorData *efd, EffectedPoint *poi if(falloff == 0.0f) break; - r_fac=saacos(fac/VecLength(efd->vec_to_point))*180.0f/(float)M_PI; + r_fac=saacos(fac/len_v3(efd->vec_to_point))*180.0f/(float)M_PI; falloff*= falloff_func_rad(eff->pd, r_fac); break; @@ -574,12 +574,12 @@ int closest_point_on_surface(SurfaceModifierData *surmd, float *co, float *surfa MFace *mface = CDDM_get_face(surmd->dm, nearest.index); VECCOPY(surface_vel, surmd->v[mface->v1].co); - VecAddf(surface_vel, surface_vel, surmd->v[mface->v2].co); - VecAddf(surface_vel, surface_vel, surmd->v[mface->v3].co); + add_v3_v3v3(surface_vel, surface_vel, surmd->v[mface->v2].co); + add_v3_v3v3(surface_vel, surface_vel, surmd->v[mface->v3].co); if(mface->v4) - VecAddf(surface_vel, surface_vel, surmd->v[mface->v4].co); + add_v3_v3v3(surface_vel, surface_vel, surmd->v[mface->v4].co); - VecMulf(surface_vel, mface->v4 ? 0.25f : 0.333f); + mul_v3_fl(surface_vel, mface->v4 ? 0.25f : 0.333f); } return 1; } @@ -596,9 +596,9 @@ int get_effector_data(EffectorCache *eff, EffectorData *efd, EffectedPoint *poin float vec[3]; /* using velocity corrected location allows for easier sliding over effector surface */ - VecCopyf(vec, point->vel); - VecMulf(vec, point->vel_to_frame); - VecAddf(vec, vec, point->loc); + copy_v3_v3(vec, point->vel); + mul_v3_fl(vec, point->vel_to_frame); + add_v3_v3v3(vec, vec, point->loc); ret = closest_point_on_surface(eff->surmd, vec, efd->loc, efd->nor, real_velocity ? efd->vel : NULL); @@ -612,10 +612,10 @@ int get_effector_data(EffectorCache *eff, EffectorData *efd, EffectedPoint *poin dm->getVertCo(dm, *efd->index, efd->loc); dm->getVertNo(dm, *efd->index, efd->nor); - Mat4MulVecfl(eff->ob->obmat, efd->loc); - Mat4Mul3Vecfl(eff->ob->obmat, efd->nor); + mul_m4_v3(eff->ob->obmat, efd->loc); + mul_mat3_m4_v3(eff->ob->obmat, efd->nor); - Normalize(efd->nor); + normalize_v3(efd->nor); efd->size = 0.0f; @@ -660,15 +660,15 @@ int get_effector_data(EffectorCache *eff, EffectorData *efd, EffectedPoint *poin /* use z-axis as normal*/ VECCOPY(efd->nor, ob->obmat[2]); - Normalize(efd->nor); + normalize_v3(efd->nor); /* for vortex the shape chooses between old / new force */ if(eff->pd->shape == PFIELD_SHAPE_PLANE) { /* efd->loc is closes point on effector xy-plane */ float temp[3]; - VecSubf(temp, point->loc, ob->obmat[3]); - Projf(efd->loc, temp, efd->nor); - VecSubf(efd->loc, point->loc, efd->loc); + sub_v3_v3v3(temp, point->loc, ob->obmat[3]); + project_v3_v3v3(efd->loc, temp, efd->nor); + sub_v3_v3v3(efd->loc, point->loc, efd->loc); } else { VECCOPY(efd->loc, ob->obmat[3]); @@ -679,7 +679,7 @@ int get_effector_data(EffectorCache *eff, EffectorData *efd, EffectedPoint *poin where_is_object_time(eff->scene, ob, cfra - 1.0); - VecSubf(efd->vel, efd->vel, ob->obmat[3]); + sub_v3_v3v3(efd->vel, efd->vel, ob->obmat[3]); } *eff->ob = obcopy; @@ -690,8 +690,8 @@ int get_effector_data(EffectorCache *eff, EffectorData *efd, EffectedPoint *poin } if(ret) { - VecSubf(efd->vec_to_point, point->loc, efd->loc); - efd->distance = VecLength(efd->vec_to_point); + sub_v3_v3v3(efd->vec_to_point, point->loc, efd->loc); + efd->distance = len_v3(efd->vec_to_point); if(eff->flag & PE_USE_NORMAL_DATA) { VECCOPY(efd->vec_to_point2, efd->vec_to_point); @@ -699,9 +699,9 @@ int get_effector_data(EffectorCache *eff, EffectorData *efd, EffectedPoint *poin } else { /* for some effectors we need the object center every time */ - VecSubf(efd->vec_to_point2, point->loc, eff->ob->obmat[3]); + sub_v3_v3v3(efd->vec_to_point2, point->loc, eff->ob->obmat[3]); VECCOPY(efd->nor2, eff->ob->obmat[2]); - Normalize(efd->nor2); + normalize_v3(efd->nor2); } } @@ -764,12 +764,12 @@ static void do_texture_effector(EffectorCache *eff, EffectorData *efd, EffectedP VECCOPY(tex_co,point->loc); if(eff->pd->flag & PFIELD_TEX_2D) { - float fac=-Inpf(tex_co, efd->nor); + float fac=-dot_v3v3(tex_co, efd->nor); VECADDFAC(tex_co, tex_co, efd->nor, fac); } if(eff->pd->flag & PFIELD_TEX_OBJECT) { - Mat4Mul3Vecfl(eff->ob->obmat, tex_co); + mul_mat3_m4_v3(eff->ob->obmat, tex_co); } hasrgb = multitex_ext(eff->pd->tex, tex_co, NULL,NULL, 1, result); @@ -815,11 +815,11 @@ static void do_texture_effector(EffectorCache *eff, EffectorData *efd, EffectedP } if(eff->pd->flag & PFIELD_TEX_2D){ - float fac = -Inpf(force, efd->nor); + float fac = -dot_v3v3(force, efd->nor); VECADDFAC(force, force, efd->nor, fac); } - VecAddf(total_force, total_force, force); + add_v3_v3v3(total_force, total_force, force); } void do_physical_effector(EffectorCache *eff, EffectorData *efd, EffectedPoint *point, float *total_force) { @@ -844,51 +844,51 @@ void do_physical_effector(EffectorCache *eff, EffectorData *efd, EffectedPoint * switch(pd->forcefield){ case PFIELD_WIND: VECCOPY(force, efd->nor); - VecMulf(force, strength * efd->falloff); + mul_v3_fl(force, strength * efd->falloff); break; case PFIELD_FORCE: - Normalize(force); - VecMulf(force, strength * efd->falloff); + normalize_v3(force); + mul_v3_fl(force, strength * efd->falloff); break; case PFIELD_VORTEX: /* old vortex force */ if(pd->shape == PFIELD_SHAPE_POINT) { - Crossf(force, efd->nor, efd->vec_to_point); - Normalize(force); - VecMulf(force, strength * efd->distance * efd->falloff); + cross_v3_v3v3(force, efd->nor, efd->vec_to_point); + normalize_v3(force); + mul_v3_fl(force, strength * efd->distance * efd->falloff); } else { /* new vortex force */ - Crossf(temp, efd->nor2, efd->vec_to_point2); - VecMulf(temp, strength * efd->falloff); + cross_v3_v3v3(temp, efd->nor2, efd->vec_to_point2); + mul_v3_fl(temp, strength * efd->falloff); - Crossf(force, efd->nor2, temp); - VecMulf(force, strength * efd->falloff); + cross_v3_v3v3(force, efd->nor2, temp); + mul_v3_fl(force, strength * efd->falloff); VECADDFAC(temp, temp, point->vel, -point->vel_to_sec); - VecAddf(force, force, temp); + add_v3_v3v3(force, force, temp); } break; case PFIELD_MAGNET: if(eff->pd->shape == PFIELD_SHAPE_POINT) /* magnetic field of a moving charge */ - Crossf(temp, efd->nor, efd->vec_to_point); + cross_v3_v3v3(temp, efd->nor, efd->vec_to_point); else - VecCopyf(temp, efd->nor); + copy_v3_v3(temp, efd->nor); - Normalize(temp); - VecMulf(temp, strength * efd->falloff); - Crossf(force, point->vel, temp); - VecMulf(force, point->vel_to_sec); + normalize_v3(temp); + mul_v3_fl(temp, strength * efd->falloff); + cross_v3_v3v3(force, point->vel, temp); + mul_v3_fl(force, point->vel_to_sec); break; case PFIELD_HARMONIC: - VecMulf(force, -strength * efd->falloff); - VecCopyf(temp, point->vel); - VecMulf(temp, -damp * 2.0f * (float)sqrt(fabs(strength)) * point->vel_to_sec); - VecAddf(force, force, temp); + mul_v3_fl(force, -strength * efd->falloff); + copy_v3_v3(temp, point->vel); + mul_v3_fl(temp, -damp * 2.0f * (float)sqrt(fabs(strength)) * point->vel_to_sec); + add_v3_v3v3(force, force, temp); break; case PFIELD_CHARGE: - VecMulf(force, point->charge * strength * efd->falloff); + mul_v3_fl(force, point->charge * strength * efd->falloff); break; case PFIELD_LENNARDJ: fac = pow((efd->size + point->size) / efd->distance, 6.0); @@ -898,7 +898,7 @@ void do_physical_effector(EffectorCache *eff, EffectorData *efd, EffectedPoint * /* limit the repulsive term drastically to avoid huge forces */ fac = ((fac>2.0) ? 2.0 : fac); - VecMulf(force, strength * fac); + mul_v3_fl(force, strength * fac); break; case PFIELD_BOID: /* Boid field is handled completely in boids code. */ @@ -913,16 +913,16 @@ void do_physical_effector(EffectorCache *eff, EffectorData *efd, EffectedPoint * force[0] = -1.0f + 2.0f * BLI_gTurbulence(pd->f_size, temp[0], temp[1], temp[2], 2,0,2); force[1] = -1.0f + 2.0f * BLI_gTurbulence(pd->f_size, temp[1], temp[2], temp[0], 2,0,2); force[2] = -1.0f + 2.0f * BLI_gTurbulence(pd->f_size, temp[2], temp[0], temp[1], 2,0,2); - VecMulf(force, strength * efd->falloff); + mul_v3_fl(force, strength * efd->falloff); break; case PFIELD_DRAG: VECCOPY(force, point->vel); - fac = Normalize(force) * point->vel_to_sec; + fac = normalize_v3(force) * point->vel_to_sec; strength = MIN2(strength, 2.0f); damp = MIN2(damp, 2.0f); - VecMulf(force, -efd->falloff * fac * (strength * fac + damp)); + mul_v3_fl(force, -efd->falloff * fac * (strength * fac + damp)); break; } @@ -937,12 +937,12 @@ void do_physical_effector(EffectorCache *eff, EffectorData *efd, EffectedPoint * if(pd->flag & PFIELD_DO_ROTATION && point->ave && point->rot) { float xvec[3] = {1.0f, 0.0f, 0.0f}; float dave[3]; - QuatMulVecf(point->rot, xvec); - Crossf(dave, xvec, force); + mul_qt_v3(point->rot, xvec); + cross_v3_v3v3(dave, xvec, force); if(pd->f_flow != 0.0f) { VECADDFAC(dave, dave, point->ave, -pd->f_flow * efd->falloff); } - VecAddf(point->ave, point->ave, dave); + add_v3_v3v3(point->ave, point->ave, dave); } } diff --git a/source/blender/blenkernel/intern/exotic.c b/source/blender/blenkernel/intern/exotic.c index 8827897a509..48a05c2f6a7 100644 --- a/source/blender/blenkernel/intern/exotic.c +++ b/source/blender/blenkernel/intern/exotic.c @@ -64,7 +64,7 @@ #include "BKE_utildefines.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_editVert.h" #include "BKE_blender.h" @@ -180,7 +180,7 @@ static void mesh_add_normals_flags(Mesh *me) v3= me->mvert+mface->v3; v4= me->mvert+mface->v4; - CalcNormFloat(v1->co, v2->co, v3->co, nor); + normal_tri_v3( nor,v1->co, v2->co, v3->co); sno[0]= 32767.0*nor[0]; sno[1]= 32767.0*nor[1]; sno[2]= 32767.0*nor[2]; @@ -1249,7 +1249,7 @@ static void read_inventor(Scene *scene, char *str, struct ListBase *listb) VECCOPY(bp->vec, data); if(coordtype==4) { bp->vec[3]= data[3]; - VecMulf(bp->vec, 1.0f/data[3]); + mul_v3_fl(bp->vec, 1.0f/data[3]); } else bp->vec[3]= 1.0; data+= coordtype; @@ -1837,7 +1837,7 @@ static void write_vert_stl(Object *ob, MVert *verts, int index, FILE *fpSTL) float vert[3]; VECCOPY(vert, verts[(index)].co); - Mat4MulVecfl(ob->obmat, vert); + mul_m4_v3(ob->obmat, vert); if (ENDIAN_ORDER==B_ENDIAN) { SWITCH_INT(vert[0]); @@ -2174,7 +2174,7 @@ static void write_camera_vrml(FILE *fp, Object *ob) Camera *cam; if(ob==0) return; - Mat4Invert(ob->imat, ob->obmat); + invert_m4_m4(ob->imat, ob->obmat); fprintf(fp, "\tMatrixTransform {\n"); @@ -3031,10 +3031,10 @@ static void dxf_read_line(Scene *scene, int noob) { mvert= &me->mvert[(me->totvert-2)]; - VecSubf(mvert->co, cent, vcenter); + sub_v3_v3v3(mvert->co, cent, vcenter); mvert++; if (vspace) { VECCOPY(mvert->co, epoint); - } else VecSubf(mvert->co, epoint, vcenter); + } else sub_v3_v3v3(mvert->co, epoint, vcenter); mface= &(((MFace*)me->mface)[me->totface-1]); mface->v1= me->totvert-2; @@ -3237,7 +3237,7 @@ static void dxf_read_ellipse(Scene *scene, int noob) if (vspace) { VECCOPY(mvert->co, epoint); } else { - VecSubf(mvert->co, epoint, vcenter); + sub_v3_v3v3(mvert->co, epoint, vcenter); } if (v > 0) { @@ -3360,7 +3360,7 @@ static void dxf_read_arc(Scene *scene, int noob) if (vspace) { VECCOPY(mvert->co, epoint); } else { - VecSubf(mvert->co, epoint, vcenter); + sub_v3_v3v3(mvert->co, epoint, vcenter); } if (v > 0) { @@ -3470,7 +3470,7 @@ static void dxf_read_polyline(Scene *scene, int noob) { mvert= &me->mvert[me->totvert-1]; if (vspace) { VECCOPY(mvert->co, vert); - } else VecSubf(mvert->co, vert, vcenter); + } else sub_v3_v3v3(mvert->co, vert, vcenter); } /* make edges */ @@ -3556,7 +3556,7 @@ static void dxf_read_polyline(Scene *scene, int noob) { mvert= &me->mvert[(me->totvert-1)]; if (vspace) { VECCOPY(mvert->co, vert); - } else VecSubf(mvert->co, vert, vcenter); + } else sub_v3_v3v3(mvert->co, vert, vcenter); } else if (vflags & 128) { if(vids[2]==0) { @@ -3687,7 +3687,7 @@ static void dxf_read_lwpolyline(Scene *scene, int noob) { if (vspace) { VECCOPY(mvert->co, vert); } else { - VecSubf(mvert->co, vert, vcenter); + sub_v3_v3v3(mvert->co, vert, vcenter); } if (v > 0) { @@ -3859,20 +3859,20 @@ static void dxf_read_3dface(Scene *scene, int noob) ftmp=NULL; mvert= &me->mvert[(me->totvert-nverts)]; - VecSubf(mvert->co, cent, vcenter); + sub_v3_v3v3(mvert->co, cent, vcenter); mvert++; if (vspace) { VECCOPY(mvert->co, vert2); - } else VecSubf(mvert->co, vert2, vcenter); + } else sub_v3_v3v3(mvert->co, vert2, vcenter); mvert++; if (vspace) { VECCOPY(mvert->co, vert3); - } else VecSubf(mvert->co, vert3, vcenter); + } else sub_v3_v3v3(mvert->co, vert3, vcenter); if (nverts==4) { mvert++; if (vspace) { VECCOPY(mvert->co, vert4); - } else VecSubf(mvert->co, vert4, vcenter); + } else sub_v3_v3v3(mvert->co, vert4, vcenter); } mface= &(((MFace*)me->mface)[me->totface-1]); diff --git a/source/blender/blenkernel/intern/fcurve.c b/source/blender/blenkernel/intern/fcurve.c index 0ecd1fe912b..a1e6570608f 100644 --- a/source/blender/blenkernel/intern/fcurve.c +++ b/source/blender/blenkernel/intern/fcurve.c @@ -43,7 +43,7 @@ #include "DNA_anim_types.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_noise.h" #include "BKE_fcurve.h" @@ -924,11 +924,11 @@ static float evaluate_driver (ChannelDriver *driver, float evaltime) } /* use the final posed locations */ - Mat4ToQuat(pchan->pose_mat, q1); - Mat4ToQuat(pchan2->pose_mat, q2); + mat4_to_quat( q1,pchan->pose_mat); + mat4_to_quat( q2,pchan2->pose_mat); - QuatInv(q1); - QuatMul(quat, q1, q2); + invert_qt(q1); + mul_qt_qtqt(quat, q1, q2); angle = 2.0f * (saacos(quat[0])); angle= ABS(angle); @@ -1017,13 +1017,13 @@ static int findzero (float x, float q0, float q1, float q2, float q3, float *o) if (d > 0.0) { t= sqrt(d); - o[0]= (float)(Sqrt3d(-q+t) + Sqrt3d(-q-t) - a); + o[0]= (float)(sqrt3d(-q+t) + sqrt3d(-q-t) - a); if ((o[0] >= SMALL) && (o[0] <= 1.000001)) return 1; else return 0; } else if (d == 0.0) { - t= Sqrt3d(-q); + t= sqrt3d(-q); o[0]= (float)(2*t - a); if ((o[0] >= SMALL) && (o[0] <= 1.000001)) nr++; diff --git a/source/blender/blenkernel/intern/fluidsim.c b/source/blender/blenkernel/intern/fluidsim.c index aa163b821c8..9453c2a0ad1 100644 --- a/source/blender/blenkernel/intern/fluidsim.c +++ b/source/blender/blenkernel/intern/fluidsim.c @@ -40,7 +40,7 @@ #include "DNA_particle_types.h" #include "DNA_scene_types.h" // N_T -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BKE_cdderivedmesh.h" @@ -563,13 +563,13 @@ void fluid_get_bb(MVert *mvert, int totvert, float obmat[][4], float vec[3]; VECCOPY(vec, mvert[0].co); - Mat4MulVecfl(obmat, vec); + mul_m4_v3(obmat, vec); bbsx = vec[0]; bbsy = vec[1]; bbsz = vec[2]; bbex = vec[0]; bbey = vec[1]; bbez = vec[2]; for(i = 1; i < totvert; i++) { VECCOPY(vec, mvert[i].co); - Mat4MulVecfl(obmat, vec); + mul_m4_v3(obmat, vec); if(vec[0] < bbsx){ bbsx= vec[0]; } if(vec[1] < bbsy){ bbsy= vec[1]; } @@ -626,7 +626,7 @@ void initElbeemMesh(struct Scene *scene, struct Object *ob, verts = MEM_callocN( totvert*3*sizeof(float), "elbeemmesh_vertices"); for(i=0; i<totvert; i++) { VECCOPY( &verts[i*3], mvert[i].co); - if(useGlobalCoords) { Mat4MulVecfl(ob->obmat, &verts[i*3]); } + if(useGlobalCoords) { mul_m4_v3(ob->obmat, &verts[i*3]); } } *vertices = verts; diff --git a/source/blender/blenkernel/intern/fmodifier.c b/source/blender/blenkernel/intern/fmodifier.c index 4e79f6238b5..f70de4983e3 100644 --- a/source/blender/blenkernel/intern/fmodifier.c +++ b/source/blender/blenkernel/intern/fmodifier.c @@ -41,7 +41,7 @@ #include "DNA_anim_types.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_noise.h" #include "BKE_fcurve.h" diff --git a/source/blender/blenkernel/intern/font.c b/source/blender/blenkernel/intern/font.c index 4e05bf45d3d..e2dccf02b40 100644 --- a/source/blender/blenkernel/intern/font.c +++ b/source/blender/blenkernel/intern/font.c @@ -41,7 +41,7 @@ #include "MEM_guardedalloc.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_vfontdata.h" @@ -968,12 +968,12 @@ struct chartrans *BKE_text_to_curve(Scene *scene, Object *ob, int mode) float minx, maxx, miny, maxy; float timeofs, sizefac; - Mat4Invert(imat, ob->obmat); - Mat3CpyMat4(imat3, imat); + invert_m4_m4(imat, ob->obmat); + copy_m3_m4(imat3, imat); - Mat3CpyMat4(cmat, cu->textoncurve->obmat); - Mat3MulMat3(cmat, cmat, imat3); - sizefac= Normalize(cmat[0])/cu->fsize; + copy_m3_m4(cmat, cu->textoncurve->obmat); + mul_m3_m3m3(cmat, cmat, imat3); + sizefac= normalize_v3(cmat[0])/cu->fsize; minx=miny= 1.0e20f; maxx=maxy= -1.0e20f; @@ -1042,7 +1042,7 @@ struct chartrans *BKE_text_to_curve(Scene *scene, Object *ob, int mode) where_on_path(cu->textoncurve, ctime, vec, tvec, NULL, NULL); where_on_path(cu->textoncurve, ctime+dtime, tvec, rotvec, NULL, NULL); - VecMulf(vec, sizefac); + mul_v3_fl(vec, sizefac); ct->rot= (float)(M_PI-atan2(rotvec[1], rotvec[0])); @@ -1196,7 +1196,7 @@ struct chartrans *BKE_text_to_curve(Scene *scene, Object *ob, int mode) vecyo[0] = ct->xof; vecyo[1] = ct->yof; vecyo[2] = 0; - Mat4MulVecfl(ob->obmat, vecyo); + mul_m4_v3(ob->obmat, vecyo); VECCOPY(ob->loc, vecyo); outta = 1; cu->sepchar = 0; diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c index 43c4137e73e..5023d87cef8 100644 --- a/source/blender/blenkernel/intern/gpencil.c +++ b/source/blender/blenkernel/intern/gpencil.c @@ -36,7 +36,7 @@ #include "IMB_imbuf.h" #include "IMB_imbuf_types.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "DNA_listBase.h" diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c index efe53f6f8ef..0452b38a2e5 100644 --- a/source/blender/blenkernel/intern/image.c +++ b/source/blender/blenkernel/intern/image.c @@ -61,7 +61,7 @@ #include "DNA_sequence_types.h" #include "DNA_userdef_types.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_threads.h" diff --git a/source/blender/blenkernel/intern/implicit.c b/source/blender/blenkernel/intern/implicit.c index de215ae4af9..f2b737fa3c2 100644 --- a/source/blender/blenkernel/intern/implicit.c +++ b/source/blender/blenkernel/intern/implicit.c @@ -297,6 +297,7 @@ DO_INLINE void sub_lfvector_lfvector(float (*to)[3], float (*fLongVectorA)[3], f /////////////////////////// // 3x3 matrix /////////////////////////// +#if 0 /* printf 3x3 matrix on console: for debug output */ static void print_fmatrix(float m3[3][3]) { @@ -304,6 +305,7 @@ static void print_fmatrix(float m3[3][3]) printf("%f\t%f\t%f\n",m3[1][0],m3[1][1],m3[1][2]); printf("%f\t%f\t%f\n\n",m3[2][0],m3[2][1],m3[2][2]); } +#endif /* copy 3x3 matrix */ DO_INLINE void cp_fmatrix(float to[3][3], float from[3][3]) @@ -972,6 +974,7 @@ DO_INLINE void BuildPPinv(fmatrix3x3 *lA, fmatrix3x3 *P, fmatrix3x3 *Pinv) } } +#if 0 /* // version 1.3 static int cg_filtered_pre(lfVector *dv, fmatrix3x3 *lA, lfVector *lB, lfVector *z, fmatrix3x3 *S, fmatrix3x3 *P, fmatrix3x3 *Pinv) @@ -1143,6 +1146,7 @@ static int cg_filtered_pre(lfVector *dv, fmatrix3x3 *lA, lfVector *lB, lfVector return iterations<conjgrad_looplimit; } +#endif // outer product is NOT cross product!!! DO_INLINE void dfdx_spring_type1(float to[3][3], float extent[3], float length, float L, float dot, float k) @@ -1550,28 +1554,28 @@ static void cloth_calc_force(ClothModifierData *clmd, float frame, lfVector *lF, CalcFloat(lX[mfaces[i].v1],lX[mfaces[i].v2],lX[mfaces[i].v3],triunnormal); VECCOPY(trinormal, triunnormal); - Normalize(trinormal); + normalize_v3(trinormal); // add wind from v1 VECCOPY(tmp, trinormal); - VecMulf(tmp, calculateVertexWindForce(winvec[mfaces[i].v1], triunnormal)); + mul_v3_fl(tmp, calculateVertexWindForce(winvec[mfaces[i].v1], triunnormal)); VECADDS(lF[mfaces[i].v1], lF[mfaces[i].v1], tmp, factor); // add wind from v2 VECCOPY(tmp, trinormal); - VecMulf(tmp, calculateVertexWindForce(winvec[mfaces[i].v2], triunnormal)); + mul_v3_fl(tmp, calculateVertexWindForce(winvec[mfaces[i].v2], triunnormal)); VECADDS(lF[mfaces[i].v2], lF[mfaces[i].v2], tmp, factor); // add wind from v3 VECCOPY(tmp, trinormal); - VecMulf(tmp, calculateVertexWindForce(winvec[mfaces[i].v3], triunnormal)); + mul_v3_fl(tmp, calculateVertexWindForce(winvec[mfaces[i].v3], triunnormal)); VECADDS(lF[mfaces[i].v3], lF[mfaces[i].v3], tmp, factor); // add wind from v4 if(mfaces[i].v4) { VECCOPY(tmp, trinormal); - VecMulf(tmp, calculateVertexWindForce(winvec[mfaces[i].v4], triunnormal)); + mul_v3_fl(tmp, calculateVertexWindForce(winvec[mfaces[i].v4], triunnormal)); VECADDS(lF[mfaces[i].v4], lF[mfaces[i].v4], tmp, factor); } } @@ -1652,7 +1656,7 @@ int implicit_solver (Object *ob, float frame, ClothModifierData *clmd, ListBase if(verts [i].flags & CLOTH_VERT_FLAG_PINNED) { VECSUB(id->V[i], verts[i].xconst, verts[i].xold); - // VecMulf(id->V[i], clmd->sim_parms->stepsPerFrame); + // mul_v3_fl(id->V[i], clmd->sim_parms->stepsPerFrame); } } } @@ -1725,7 +1729,7 @@ int implicit_solver (Object *ob, float frame, ClothModifierData *clmd, ListBase VECCOPY(id->Xnew[i], verts[i].tx); VECCOPY(id->Vnew[i], verts[i].tv); - VecMulf(id->Vnew[i], clmd->sim_parms->stepsPerFrame); + mul_v3_fl(id->Vnew[i], clmd->sim_parms->stepsPerFrame); } } diff --git a/source/blender/blenkernel/intern/ipo.c b/source/blender/blenkernel/intern/ipo.c index 5dc26143533..9e9a1719952 100644 --- a/source/blender/blenkernel/intern/ipo.c +++ b/source/blender/blenkernel/intern/ipo.c @@ -70,7 +70,7 @@ #include "DNA_world_types.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_dynstr.h" #include "BKE_utildefines.h" diff --git a/source/blender/blenkernel/intern/key.c b/source/blender/blenkernel/intern/key.c index 61f51d61e0b..0b067c6ef7b 100644 --- a/source/blender/blenkernel/intern/key.c +++ b/source/blender/blenkernel/intern/key.c @@ -1192,11 +1192,11 @@ static void do_curve_key(Scene *scene, Object *ob, Key *key, char *out, int tot) #endif // XXX old animation system flag= setkeys(ctime, &key->block, k, t, 0); - + if(flag==0) - ; /* do_key(a, a+step, tot, (char *)out, key, k, t, 0); */ + do_key(a, a+step, tot, (char *)out, key, actkb, k, t, 0); else - ; /* cp_key(a, a+step, tot, (char *)out, key, k[2],0); */ + cp_key(a, a+step, tot, (char *)out, key, actkb, k[2], NULL, 0); } } else { diff --git a/source/blender/blenkernel/intern/lattice.c b/source/blender/blenkernel/intern/lattice.c index c53101299c6..dc548edbb25 100644 --- a/source/blender/blenkernel/intern/lattice.c +++ b/source/blender/blenkernel/intern/lattice.c @@ -39,7 +39,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "DNA_armature_types.h" #include "DNA_mesh_types.h" @@ -155,10 +155,10 @@ void resizelattice(Lattice *lt, int uNew, int vNew, int wNew, Object *ltOb) /* prevent using deformed locations */ freedisplist(<Ob->disp); - Mat4CpyMat4(mat, ltOb->obmat); - Mat4One(ltOb->obmat); + copy_m4_m4(mat, ltOb->obmat); + unit_m4(ltOb->obmat); lattice_deform_verts(ltOb, NULL, NULL, vertexCos, uNew*vNew*wNew, NULL); - Mat4CpyMat4(ltOb->obmat, mat); + copy_m4_m4(ltOb->obmat, mat); lt->typeu = typeu; lt->typev = typev; @@ -310,18 +310,18 @@ void init_latt_deform(Object *oblatt, Object *ob) /* for example with a particle system: ob==0 */ if(ob==NULL) { /* in deformspace, calc matrix */ - Mat4Invert(lt->latmat, oblatt->obmat); + invert_m4_m4(lt->latmat, oblatt->obmat); /* back: put in deform array */ - Mat4Invert(imat, lt->latmat); + invert_m4_m4(imat, lt->latmat); } else { /* in deformspace, calc matrix */ - Mat4Invert(imat, oblatt->obmat); - Mat4MulMat4(lt->latmat, ob->obmat, imat); + invert_m4_m4(imat, oblatt->obmat); + mul_m4_m4m4(lt->latmat, ob->obmat, imat); /* back: put in deform array */ - Mat4Invert(imat, lt->latmat); + invert_m4_m4(imat, lt->latmat); } for(w=0,fw=lt->fw; w<lt->pntsw; w++,fw+=lt->dw) { @@ -337,7 +337,7 @@ void init_latt_deform(Object *oblatt, Object *ob) fp[2] = bp->vec[2] - fw; } - Mat4Mul3Vecfl(imat, fp); + mul_mat3_m4_v3(imat, fp); } } } @@ -356,7 +356,7 @@ void calc_latt_deform(Object *ob, float *co, float weight) /* co is in local coords, treat with latmat */ VECCOPY(vec, co); - Mat4MulVecfl(lt->latmat, vec); + mul_m4_v3(lt->latmat, vec); /* u v w coords */ @@ -456,15 +456,15 @@ typedef struct { static void init_curve_deform(Object *par, Object *ob, CurveDeform *cd, int dloc) { - Mat4Invert(ob->imat, ob->obmat); - Mat4MulMat4(cd->objectspace, par->obmat, ob->imat); - Mat4Invert(cd->curvespace, cd->objectspace); - Mat3CpyMat4(cd->objectspace3, cd->objectspace); + invert_m4_m4(ob->imat, ob->obmat); + mul_m4_m4m4(cd->objectspace, par->obmat, ob->imat); + invert_m4_m4(cd->curvespace, cd->objectspace); + copy_m3_m4(cd->objectspace3, cd->objectspace); // offset vector for 'no smear' if(dloc) { - Mat4Invert(par->imat, par->obmat); - VecMat4MulVecfl(cd->dloc, par->imat, ob->obmat[3]); + invert_m4_m4(par->imat, par->obmat); + mul_v3_m4v3(cd->dloc, par->imat, ob->obmat[3]); } else cd->dloc[0]=cd->dloc[1]=cd->dloc[2]= 0.0f; @@ -497,15 +497,15 @@ static int where_on_path_deform(Object *ob, float ctime, float *vec, float *dir, float dvec[3]; if(ctime < 0.0) { - VecSubf(dvec, path->data[1].vec, path->data[0].vec); - VecMulf(dvec, ctime*(float)path->len); + sub_v3_v3v3(dvec, path->data[1].vec, path->data[0].vec); + mul_v3_fl(dvec, ctime*(float)path->len); VECADD(vec, vec, dvec); if(quat) QUATCOPY(quat, path->data[0].quat); if(radius) *radius= path->data[0].radius; } else if(ctime > 1.0) { - VecSubf(dvec, path->data[path->len-1].vec, path->data[path->len-2].vec); - VecMulf(dvec, (ctime-1.0)*(float)path->len); + sub_v3_v3v3(dvec, path->data[path->len-1].vec, path->data[path->len-2].vec); + mul_v3_fl(dvec, (ctime-1.0)*(float)path->len); VECADD(vec, vec, dvec); if(quat) QUATCOPY(quat, path->data[path->len-1].quat); if(radius) *radius= path->data[path->len-1].radius; @@ -570,28 +570,28 @@ static int calc_curve_deform(Scene *scene, Object *par, float *co, short axis, C dir[cd->no_rot_axis-1]= 0.0f; /* -1 for compatibility with old track defines */ - vectoquat(dir, axis-1, upflag, quat); + vec_to_quat( quat,dir, axis-1, upflag); /* the tilt */ if(loc[3]!=0.0) { - Normalize(dir); + normalize_v3(dir); q[0]= (float)cos(0.5*loc[3]); fac= (float)sin(0.5*loc[3]); q[1]= -fac*dir[0]; q[2]= -fac*dir[1]; q[3]= -fac*dir[2]; - QuatMul(quat, q, quat); + mul_qt_qtqt(quat, q, quat); } #endif - static float q_x90d[4] = {0.70710676908493, 0.70710676908493, 0.0, 0.0}; // float rot_axis[3]= {1,0,0}; AxisAngleToQuat(q, rot_axis, 90 * (M_PI / 180)); - static float q_y90d[4] = {0.70710676908493, 0.0, 0.70710676908493, 0.0}; // float rot_axis[3]= {0,1,0}; AxisAngleToQuat(q, rot_axis, 90 * (M_PI / 180)); - static float q_z90d[4] = {0.70710676908493, 0.0, 0.0, 0.70710676908493}; // float rot_axis[3]= {0,0,2}; AxisAngleToQuat(q, rot_axis, 90 * (M_PI / 180)); + static float q_x90d[4] = {0.70710676908493, 0.70710676908493, 0.0, 0.0}; // float rot_axis[3]= {1,0,0}; axis_angle_to_quat(q, rot_axis, 90 * (M_PI / 180)); + static float q_y90d[4] = {0.70710676908493, 0.0, 0.70710676908493, 0.0}; // float rot_axis[3]= {0,1,0}; axis_angle_to_quat(q, rot_axis, 90 * (M_PI / 180)); + static float q_z90d[4] = {0.70710676908493, 0.0, 0.0, 0.70710676908493}; // float rot_axis[3]= {0,0,2}; axis_angle_to_quat(q, rot_axis, 90 * (M_PI / 180)); - static float q_nx90d[4] = {0.70710676908493, -0.70710676908493, 0.0, 0.0}; // float rot_axis[3]= {1,0,0}; AxisAngleToQuat(q, rot_axis, -90 * (M_PI / 180)); - static float q_ny90d[4] = {0.70710676908493, 0.0, -0.70710676908493, 0.0}; // float rot_axis[3]= {0,1,0}; AxisAngleToQuat(q, rot_axis, -90 * (M_PI / 180)); - static float q_nz90d[4] = {0.70710676908493, 0.0, 0.0, -0.70710676908493}; // float rot_axis[3]= {0,0,2}; AxisAngleToQuat(q, rot_axis, -90 * (M_PI / 180)); + static float q_nx90d[4] = {0.70710676908493, -0.70710676908493, 0.0, 0.0}; // float rot_axis[3]= {1,0,0}; axis_angle_to_quat(q, rot_axis, -90 * (M_PI / 180)); + static float q_ny90d[4] = {0.70710676908493, 0.0, -0.70710676908493, 0.0}; // float rot_axis[3]= {0,1,0}; axis_angle_to_quat(q, rot_axis, -90 * (M_PI / 180)); + static float q_nz90d[4] = {0.70710676908493, 0.0, 0.0, -0.70710676908493}; // float rot_axis[3]= {0,0,2}; axis_angle_to_quat(q, rot_axis, -90 * (M_PI / 180)); if(cd->no_rot_axis) { /* set by caller */ @@ -602,12 +602,12 @@ static int calc_curve_deform(Scene *scene, Object *par, float *co, short axis, C VECCOPY(dir_flat, dir); dir_flat[cd->no_rot_axis-1]= 0.0f; - Normalize(dir); - Normalize(dir_flat); + normalize_v3(dir); + normalize_v3(dir_flat); - RotationBetweenVectorsToQuat(q, dir, dir_flat); /* Could this be done faster? */ + rotation_between_vecs_to_quat(q, dir, dir_flat); /* Could this be done faster? */ - QuatMul(new_quat, q, new_quat); + mul_qt_qtqt(new_quat, q, new_quat); } @@ -624,14 +624,14 @@ static int calc_curve_deform(Scene *scene, Object *par, float *co, short axis, C switch(axis) { case MOD_CURVE_POSX: - QuatMul(quat, new_quat, q_y90d); + mul_qt_qtqt(quat, new_quat, q_y90d); cent[0]= 0.0; cent[1]= co[2]; cent[2]= co[1]; break; case MOD_CURVE_NEGX: - QuatMul(quat, new_quat, q_ny90d); + mul_qt_qtqt(quat, new_quat, q_ny90d); cent[0]= 0.0; cent[1]= -co[1]; @@ -639,28 +639,28 @@ static int calc_curve_deform(Scene *scene, Object *par, float *co, short axis, C break; case MOD_CURVE_POSY: - QuatMul(quat, new_quat, q_x90d); + mul_qt_qtqt(quat, new_quat, q_x90d); cent[0]= co[2]; cent[1]= 0.0; cent[2]= -co[0]; break; case MOD_CURVE_NEGY: - QuatMul(quat, new_quat, q_nx90d); + mul_qt_qtqt(quat, new_quat, q_nx90d); cent[0]= -co[0]; cent[1]= 0.0; cent[2]= -co[2]; break; case MOD_CURVE_POSZ: - QuatMul(quat, new_quat, q_z90d); + mul_qt_qtqt(quat, new_quat, q_z90d); cent[0]= co[1]; cent[1]= -co[0]; cent[2]= 0.0; break; case MOD_CURVE_NEGZ: - QuatMul(quat, new_quat, q_nz90d); + mul_qt_qtqt(quat, new_quat, q_nz90d); cent[0]= co[0]; cent[1]= -co[1]; @@ -670,11 +670,11 @@ static int calc_curve_deform(Scene *scene, Object *par, float *co, short axis, C /* scale if enabled */ if(cu->flag & CU_PATH_RADIUS) - VecMulf(cent, radius); + mul_v3_fl(cent, radius); /* local rotation */ - NormalQuat(quat); - QuatMulVecf(quat, cent); + normalize_qt(quat); + mul_qt_v3(quat, cent); /* translation */ VECADD(co, cent, loc); @@ -739,7 +739,7 @@ void curve_deform_verts(Scene *scene, Object *cuOb, Object *target, DerivedMesh for(j = 0; j < dvert->totweight; j++) { if(dvert->dw[j].def_nr == index) { - Mat4MulVecfl(cd.curvespace, vertexCos[a]); + mul_m4_v3(cd.curvespace, vertexCos[a]); DO_MINMAX(vertexCos[a], cd.dmin, cd.dmax); break; } @@ -754,9 +754,9 @@ void curve_deform_verts(Scene *scene, Object *cuOb, Object *target, DerivedMesh if(dvert->dw[j].def_nr == index) { VECCOPY(vec, vertexCos[a]); calc_curve_deform(scene, cuOb, vec, defaxis, &cd, NULL); - VecLerpf(vertexCos[a], vertexCos[a], vec, + interp_v3_v3v3(vertexCos[a], vertexCos[a], vec, dvert->dw[j].weight); - Mat4MulVecfl(cd.objectspace, vertexCos[a]); + mul_m4_v3(cd.objectspace, vertexCos[a]); break; } } @@ -766,13 +766,13 @@ void curve_deform_verts(Scene *scene, Object *cuOb, Object *target, DerivedMesh INIT_MINMAX(cd.dmin, cd.dmax); for(a = 0; a < numVerts; a++) { - Mat4MulVecfl(cd.curvespace, vertexCos[a]); + mul_m4_v3(cd.curvespace, vertexCos[a]); DO_MINMAX(vertexCos[a], cd.dmin, cd.dmax); } for(a = 0; a < numVerts; a++) { calc_curve_deform(scene, cuOb, vertexCos[a], defaxis, &cd, NULL); - Mat4MulVecfl(cd.objectspace, vertexCos[a]); + mul_m4_v3(cd.objectspace, vertexCos[a]); } } cu->flag = flag; @@ -787,7 +787,7 @@ void curve_deform_vector(Scene *scene, Object *cuOb, Object *target, float *orco float quat[4]; if(cuOb->type != OB_CURVE) { - Mat3One(mat); + unit_m3(mat); return; } @@ -797,18 +797,18 @@ void curve_deform_vector(Scene *scene, Object *cuOb, Object *target, float *orco VECCOPY(cd.dmin, orco); VECCOPY(cd.dmax, orco); - Mat4MulVecfl(cd.curvespace, vec); + mul_m4_v3(cd.curvespace, vec); if(calc_curve_deform(scene, cuOb, vec, target->trackflag+1, &cd, quat)) { float qmat[3][3]; - QuatToMat3(quat, qmat); - Mat3MulMat3(mat, qmat, cd.objectspace3); + quat_to_mat3( qmat,quat); + mul_m3_m3m3(mat, qmat, cd.objectspace3); } else - Mat3One(mat); + unit_m3(mat); - Mat4MulVecfl(cd.objectspace, vec); + mul_m4_v3(cd.objectspace, vec); } @@ -939,7 +939,7 @@ void outside_lattice(Lattice *lt) bp->vec[1]+= (1.0f-fac1)*bp1->vec[1] + fac1*bp2->vec[1]; bp->vec[2]+= (1.0f-fac1)*bp1->vec[2] + fac1*bp2->vec[2]; - VecMulf(bp->vec, 0.3333333f); + mul_v3_fl(bp->vec, 0.3333333f); } } diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c index c2260e1e761..a3e0ab04991 100644 --- a/source/blender/blenkernel/intern/material.c +++ b/source/blender/blenkernel/intern/material.c @@ -46,7 +46,7 @@ #include "DNA_userdef_types.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BKE_animsys.h" #include "BKE_blender.h" diff --git a/source/blender/blenkernel/intern/mball.c b/source/blender/blenkernel/intern/mball.c index 3ca7dac4bc9..d731ab4230b 100644 --- a/source/blender/blenkernel/intern/mball.c +++ b/source/blender/blenkernel/intern/mball.c @@ -47,7 +47,7 @@ #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BKE_utildefines.h" @@ -436,7 +436,7 @@ Object *find_basis_mball(Scene *scene, Object *basis) void calc_mballco(MetaElem *ml, float *vec) { if(ml->mat) { - Mat4MulVecfl((float ( * )[4])ml->mat, vec); + mul_m4_v3((float ( * )[4])ml->mat, vec); } } @@ -448,7 +448,7 @@ float densfunc(MetaElem *ball, float x, float y, float z) vec[0]= x; vec[1]= y; vec[2]= z; - Mat4MulVecfl((float ( * )[4])ball->imat, vec); + mul_m4_v3((float ( * )[4])ball->imat, vec); dx= vec[0]; dy= vec[1]; dz= vec[2]; @@ -1508,8 +1508,8 @@ float init_meta(Scene *scene, Object *ob) /* return totsize */ int a, obnr, zero_size=0; char obname[32]; - Mat4CpyMat4(obmat, ob->obmat); /* to cope with duplicators from next_object */ - Mat4Invert(obinv, ob->obmat); + copy_m4_m4(obmat, ob->obmat); /* to cope with duplicators from next_object */ + invert_m4_m4(obinv, ob->obmat); a= 0; splitIDname(ob->id.name+2, obname, &obnr); @@ -1581,15 +1581,15 @@ float init_meta(Scene *scene, Object *ob) /* return totsize */ if(ml->s > 10.0) ml->s = 10.0; /* Rotation of MetaElem is stored in quat */ - QuatToMat4(ml->quat, temp3); + quat_to_mat4( temp3,ml->quat); /* Translation of MetaElem */ - Mat4One(temp2); + unit_m4(temp2); temp2[3][0]= ml->x; temp2[3][1]= ml->y; temp2[3][2]= ml->z; - Mat4MulMat4(temp1, temp3, temp2); + mul_m4_m4m4(temp1, temp3, temp2); /* make a copy because of duplicates */ mainb[a]= new_pgn_element(sizeof(MetaElem)); @@ -1600,12 +1600,12 @@ float init_meta(Scene *scene, Object *ob) /* return totsize */ imat= new_pgn_element(4*4*sizeof(float)); /* mat is the matrix to transform from mball into the basis-mball */ - Mat4Invert(obinv, obmat); - Mat4MulMat4(temp2, bob->obmat, obinv); + invert_m4_m4(obinv, obmat); + mul_m4_m4m4(temp2, bob->obmat, obinv); /* MetaBall transformation */ - Mat4MulMat4(mat, temp1, temp2); + mul_m4_m4m4(mat, temp1, temp2); - Mat4Invert(imat,mat); + invert_m4_m4(imat,mat); mainb[a]->rad2= ml->rad*ml->rad; @@ -1648,7 +1648,7 @@ float init_meta(Scene *scene, Object *ob) /* return totsize */ /* transformation of Metalem bb */ for(i=0; i<8; i++) - Mat4MulVecfl((float ( * )[4])mat, mainb[a]->bb->vec[i]); + mul_m4_v3((float ( * )[4])mat, mainb[a]->bb->vec[i]); /* find max and min of transformed bb */ for(i=0; i<8; i++){ diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c index 6ef557ca879..d5c597b802c 100644 --- a/source/blender/blenkernel/intern/mesh.c +++ b/source/blender/blenkernel/intern/mesh.c @@ -70,7 +70,7 @@ #include "BLI_blenlib.h" #include "BLI_editVert.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_edgehash.h" @@ -1086,7 +1086,7 @@ void mesh_to_curve(Scene *scene, Object *ob) /* add points */ vl= polyline.first; for (i=0, bp=nu->bp; i < totpoly; i++, bp++, vl=(VertLink *)vl->next) { - VecCopyf(bp->vec, mverts[vl->index].co); + copy_v3_v3(bp->vec, mverts[vl->index].co); bp->f1= SELECT; bp->radius = bp->weight = 1.0; } @@ -1146,23 +1146,23 @@ void mesh_calc_normals(MVert *mverts, int numVerts, MFace *mfaces, int numFaces, float *f_no= &fnors[i*3]; if (mf->v4) - CalcNormFloat4(mverts[mf->v1].co, mverts[mf->v2].co, mverts[mf->v3].co, mverts[mf->v4].co, f_no); + normal_quad_v3( f_no,mverts[mf->v1].co, mverts[mf->v2].co, mverts[mf->v3].co, mverts[mf->v4].co); else - CalcNormFloat(mverts[mf->v1].co, mverts[mf->v2].co, mverts[mf->v3].co, f_no); + normal_tri_v3( f_no,mverts[mf->v1].co, mverts[mf->v2].co, mverts[mf->v3].co); - VecAddf(tnorms[mf->v1], tnorms[mf->v1], f_no); - VecAddf(tnorms[mf->v2], tnorms[mf->v2], f_no); - VecAddf(tnorms[mf->v3], tnorms[mf->v3], f_no); + add_v3_v3v3(tnorms[mf->v1], tnorms[mf->v1], f_no); + add_v3_v3v3(tnorms[mf->v2], tnorms[mf->v2], f_no); + add_v3_v3v3(tnorms[mf->v3], tnorms[mf->v3], f_no); if (mf->v4) - VecAddf(tnorms[mf->v4], tnorms[mf->v4], f_no); + add_v3_v3v3(tnorms[mf->v4], tnorms[mf->v4], f_no); } for (i=0; i<numVerts; i++) { MVert *mv= &mverts[i]; float *no= tnorms[i]; - if (Normalize(no)==0.0) { + if (normalize_v3(no)==0.0) { VECCOPY(no, mv->co); - Normalize(no); + normalize_v3(no); } mv->no[0]= (short)(no[0]*32767.0); @@ -1262,7 +1262,7 @@ UvVertMap *make_uv_vert_map(struct MFace *mface, struct MTFace *tface, unsigned next= iterv->next; uv2= (tf+iterv->f)->uv[iterv->tfindex]; - Vec2Subf(uvdiff, uv2, uv); + sub_v2_v2v2(uvdiff, uv2, uv); if(fabs(uv[0]-uv2[0]) < limit[0] && fabs(uv[1]-uv2[1]) < limit[1]) { diff --git a/source/blender/blenkernel/intern/modifier.c b/source/blender/blenkernel/intern/modifier.c index 1193e8247be..50c907fd1ca 100644 --- a/source/blender/blenkernel/intern/modifier.c +++ b/source/blender/blenkernel/intern/modifier.c @@ -41,7 +41,7 @@ #include "float.h" #include "ctype.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_kdopbvh.h" #include "BLI_kdtree.h" @@ -82,7 +82,7 @@ #include "BKE_anim.h" #include "BKE_action.h" #include "BKE_bmesh.h" -// XXX #include "BKE_booleanops.h" +#include "BKE_booleanops.h" #include "BKE_cloth.h" #include "BKE_collision.h" #include "BKE_cdderivedmesh.h" @@ -113,18 +113,12 @@ #include "BKE_shrinkwrap.h" #include "BKE_simple_deform.h" -//XXX #include "LOD_DependKludge.h" #include "LOD_decimation.h" -// XXX -static struct DerivedMesh *NewBooleanDerivedMesh() {return NULL;} - #include "CCGSubSurf.h" #include "RE_shader_ext.h" -//XXX #include "BIF_meshlaplacian.h" - /* Utility */ static int is_last_displist(Object *ob) @@ -1193,7 +1187,7 @@ static DerivedMesh *arrayModifier_doArray(ArrayModifierData *amd, if(amd->end_cap && amd->end_cap != ob) end_cap = amd->end_cap->derivedFinal; - Mat4One(offset); + unit_m4(offset); indexMap = MEM_callocN(sizeof(*indexMap) * dm->getNumVerts(dm), "indexmap"); @@ -1203,7 +1197,7 @@ static DerivedMesh *arrayModifier_doArray(ArrayModifierData *amd, maxVerts = dm->getNumVerts(dm); if(amd->offset_type & MOD_ARR_OFF_CONST) - VecAddf(offset[3], offset[3], amd->offset); + add_v3_v3v3(offset[3], offset[3], amd->offset); if(amd->offset_type & MOD_ARR_OFF_RELATIVE) { for(j = 0; j < 3; j++) offset[3][j] += amd->scale[j] * vertarray_size(src_mvert, @@ -1215,14 +1209,14 @@ static DerivedMesh *arrayModifier_doArray(ArrayModifierData *amd, float result_mat[4][4]; if(ob) - Mat4Invert(obinv, ob->obmat); + invert_m4_m4(obinv, ob->obmat); else - Mat4One(obinv); + unit_m4(obinv); - Mat4MulSerie(result_mat, offset, + mul_serie_m4(result_mat, offset, obinv, amd->offset_ob->obmat, NULL, NULL, NULL, NULL, NULL); - Mat4CpyMat4(offset, result_mat); + copy_m4_m4(offset, result_mat); } if(amd->fit_type == MOD_ARR_FITCURVE && amd->curve_ob) { @@ -1232,7 +1226,7 @@ static DerivedMesh *arrayModifier_doArray(ArrayModifierData *amd, float scale; object_to_mat3(amd->curve_ob, tmp_mat); - scale = Mat3ToScalef(tmp_mat); + scale = mat3_to_scale(tmp_mat); if(!cu->path) { cu->flag |= CU_PATH; // needed for path & bevlist @@ -1247,7 +1241,7 @@ static DerivedMesh *arrayModifier_doArray(ArrayModifierData *amd, prescribed length */ if(amd->fit_type == MOD_ARR_FITLENGTH || amd->fit_type == MOD_ARR_FITCURVE) { - float dist = sqrt(Inpf(offset[3], offset[3])); + float dist = sqrt(dot_v3v3(offset[3], offset[3])); if(dist > 1e-6f) /* this gives length = first copy start to last copy end @@ -1280,11 +1274,11 @@ static DerivedMesh *arrayModifier_doArray(ArrayModifierData *amd, result = CDDM_from_template(dm, finalVerts, finalEdges, finalFaces); /* calculate the offset matrix of the final copy (for merging) */ - Mat4One(final_offset); + unit_m4(final_offset); for(j=0; j < count - 1; j++) { - Mat4MulMat4(tmp_mat, final_offset, offset); - Mat4CpyMat4(final_offset, tmp_mat); + mul_m4_m4m4(tmp_mat, final_offset, offset); + copy_m4_m4(final_offset, tmp_mat); } numVerts = numEdges = numFaces = 0; @@ -1320,7 +1314,7 @@ static DerivedMesh *arrayModifier_doArray(ArrayModifierData *amd, if((count > 1) && (amd->flags & MOD_ARR_MERGE)) { float tmp_co[3]; VECCOPY(tmp_co, mv->co); - Mat4MulVecfl(offset, tmp_co); + mul_m4_v3(offset, tmp_co); for(j = 0; j < maxVerts; j++) { /* if vertex already merged, don't use it */ @@ -1328,15 +1322,15 @@ static DerivedMesh *arrayModifier_doArray(ArrayModifierData *amd, inMV = &src_mvert[j]; /* if this vert is within merge limit, merge */ - if(VecLenCompare(tmp_co, inMV->co, amd->merge_dist)) { + if(compare_len_v3v3(tmp_co, inMV->co, amd->merge_dist)) { indexMap[i].merge = j; /* test for merging with final copy of merge target */ if(amd->flags & MOD_ARR_MERGEFINAL) { VECCOPY(tmp_co, inMV->co); inMV = &src_mvert[i]; - Mat4MulVecfl(final_offset, tmp_co); - if(VecLenCompare(tmp_co, inMV->co, amd->merge_dist)) + mul_m4_v3(final_offset, tmp_co); + if(compare_len_v3v3(tmp_co, inMV->co, amd->merge_dist)) indexMap[i].merge_final = 1; } break; @@ -1353,7 +1347,7 @@ static DerivedMesh *arrayModifier_doArray(ArrayModifierData *amd, *mv2 = *mv; numVerts++; - Mat4MulVecfl(offset, co); + mul_m4_v3(offset, co); VECCOPY(mv2->co, co); } } else if(indexMap[i].merge != i && indexMap[i].merge_final) { @@ -1510,7 +1504,7 @@ static DerivedMesh *arrayModifier_doArray(ArrayModifierData *amd, cap_medge = start_cap->getEdgeArray(start_cap); cap_mface = start_cap->getFaceArray(start_cap); - Mat4Invert(startoffset, offset); + invert_m4_m4(startoffset, offset); vert_map = MEM_callocN(sizeof(*vert_map) * capVerts, "arrayModifier_doArray vert_map"); @@ -1526,12 +1520,12 @@ static DerivedMesh *arrayModifier_doArray(ArrayModifierData *amd, int j; VECCOPY(tmp_co, mv->co); - Mat4MulVecfl(startoffset, tmp_co); + mul_m4_v3(startoffset, tmp_co); for(j = 0; j < maxVerts; j++) { in_mv = &src_mvert[j]; /* if this vert is within merge limit, merge */ - if(VecLenCompare(tmp_co, in_mv->co, amd->merge_dist)) { + if(compare_len_v3v3(tmp_co, in_mv->co, amd->merge_dist)) { vert_map[i] = calc_mapping(indexMap, j, 0); merged = 1; break; @@ -1542,7 +1536,7 @@ static DerivedMesh *arrayModifier_doArray(ArrayModifierData *amd, if(!merged) { DM_copy_vert_data(start_cap, result, i, numVerts, 1); mvert[numVerts] = *mv; - Mat4MulVecfl(startoffset, mvert[numVerts].co); + mul_m4_v3(startoffset, mvert[numVerts].co); origindex[numVerts] = ORIGINDEX_NONE; vert_map[i] = numVerts; @@ -1611,7 +1605,7 @@ static DerivedMesh *arrayModifier_doArray(ArrayModifierData *amd, cap_medge = end_cap->getEdgeArray(end_cap); cap_mface = end_cap->getFaceArray(end_cap); - Mat4MulMat4(endoffset, final_offset, offset); + mul_m4_m4m4(endoffset, final_offset, offset); vert_map = MEM_callocN(sizeof(*vert_map) * capVerts, "arrayModifier_doArray vert_map"); @@ -1627,12 +1621,12 @@ static DerivedMesh *arrayModifier_doArray(ArrayModifierData *amd, int j; VECCOPY(tmp_co, mv->co); - Mat4MulVecfl(offset, tmp_co); + mul_m4_v3(offset, tmp_co); for(j = 0; j < maxVerts; j++) { in_mv = &src_mvert[j]; /* if this vert is within merge limit, merge */ - if(VecLenCompare(tmp_co, in_mv->co, amd->merge_dist)) { + if(compare_len_v3v3(tmp_co, in_mv->co, amd->merge_dist)) { vert_map[i] = calc_mapping(indexMap, j, count - 1); merged = 1; break; @@ -1643,7 +1637,7 @@ static DerivedMesh *arrayModifier_doArray(ArrayModifierData *amd, if(!merged) { DM_copy_vert_data(end_cap, result, i, numVerts, 1); mvert[numVerts] = *mv; - Mat4MulVecfl(endoffset, mvert[numVerts].co); + mul_m4_v3(endoffset, mvert[numVerts].co); origindex[numVerts] = ORIGINDEX_NONE; vert_map[i] = numVerts; @@ -1927,9 +1921,9 @@ static DerivedMesh *doMirrorOnAxis(MirrorModifierData *mmd, if (mmd->mirror_ob) { float obinv[4][4]; - Mat4Invert(obinv, mmd->mirror_ob->obmat); - Mat4MulMat4(mtx, ob->obmat, obinv); - Mat4Invert(imtx, mtx); + invert_m4_m4(obinv, mmd->mirror_ob->obmat); + mul_m4_m4m4(mtx, ob->obmat, obinv); + invert_m4_m4(imtx, mtx); } for(i = 0; i < maxVerts; i++) { @@ -1940,10 +1934,10 @@ static DerivedMesh *doMirrorOnAxis(MirrorModifierData *mmd, dm->getVert(dm, i, &inMV); - VecCopyf(co, inMV.co); + copy_v3_v3(co, inMV.co); if (mmd->mirror_ob) { - VecMat4MulVecfl(co, mtx, co); + mul_v3_m4v3(co, mtx, co); } isShared = ABS(co[axis])<=tolerance; @@ -1961,9 +1955,9 @@ static DerivedMesh *doMirrorOnAxis(MirrorModifierData *mmd, if(isShared) { co[axis] = 0; if (mmd->mirror_ob) { - VecMat4MulVecfl(co, imtx, co); + mul_v3_m4v3(co, imtx, co); } - VecCopyf(mv->co, co); + copy_v3_v3(mv->co, co); mv->flag |= ME_VERT_MERGED; } else { @@ -1975,9 +1969,9 @@ static DerivedMesh *doMirrorOnAxis(MirrorModifierData *mmd, co[axis] = -co[axis]; if (mmd->mirror_ob) { - VecMat4MulVecfl(co, imtx, co); + mul_v3_m4v3(co, imtx, co); } - VecCopyf(mv2->co, co); + copy_v3_v3(mv2->co, co); if (mmd->flag & MOD_MIR_VGROUP){ dvert = DM_get_vert_data(result, numVerts, CD_MDEFORMVERT); @@ -2483,12 +2477,12 @@ static SmoothMesh *smoothmesh_from_derivedmesh(DerivedMesh *dm) if(face->edges[2]->verts[1]->oldIndex == mf.v3) face->flip[2] = 1; face->edges[3] = BLI_edgehash_lookup(edges, mf.v4, mf.v1); if(face->edges[3]->verts[1]->oldIndex == mf.v4) face->flip[3] = 1; - CalcNormFloat4(v1.co, v2.co, v3.co, v4.co, face->normal); + normal_quad_v3( face->normal,v1.co, v2.co, v3.co, v4.co); } else { face->edges[2] = BLI_edgehash_lookup(edges, mf.v3, mf.v1); if(face->edges[2]->verts[1]->oldIndex == mf.v3) face->flip[2] = 1; face->edges[3] = NULL; - CalcNormFloat(v1.co, v2.co, v3.co, face->normal); + normal_tri_v3( face->normal,v1.co, v2.co, v3.co); } for(j = 0; j < SMOOTHFACE_MAX_EDGES && face->edges[j]; j++) { @@ -3185,7 +3179,7 @@ static void tag_and_count_extra_edges(SmoothMesh *mesh, float split_angle, /* we know the edge has 2 faces, so check the angle */ SmoothFace *face1 = edge->faces->link; SmoothFace *face2 = edge->faces->next->link; - float edge_angle_cos = Inpf(face1->normal, + float edge_angle_cos = dot_v3v3(face1->normal, face2->normal); if(edge_angle_cos < threshold) { @@ -3581,7 +3575,7 @@ static void get_texture_coords(DisplaceModifierData *dmd, Object *ob, if(texmapping == MOD_DISP_MAP_OBJECT) { if(dmd->map_object) - Mat4Invert(mapob_imat, dmd->map_object->obmat); + invert_m4_m4(mapob_imat, dmd->map_object->obmat); else /* if there is no map object, default to local */ texmapping = MOD_DISP_MAP_LOCAL; } @@ -3647,12 +3641,12 @@ static void get_texture_coords(DisplaceModifierData *dmd, Object *ob, break; case MOD_DISP_MAP_GLOBAL: VECCOPY(*texco, *co); - Mat4MulVecfl(ob->obmat, *texco); + mul_m4_v3(ob->obmat, *texco); break; case MOD_DISP_MAP_OBJECT: VECCOPY(*texco, *co); - Mat4MulVecfl(ob->obmat, *texco); - Mat4MulVecfl(mapob_imat, *texco); + mul_m4_v3(ob->obmat, *texco); + mul_m4_v3(mapob_imat, *texco); break; } } @@ -3923,7 +3917,7 @@ static DerivedMesh *uvprojectModifier_do(UVProjectModifierData *umd, /* convert coords to world space */ for(i = 0, co = coords; i < numVerts; ++i, ++co) - Mat4MulVecfl(ob->obmat, *co); + mul_m4_v3(ob->obmat, *co); /* calculate a projection matrix and normal for each projector */ for(i = 0; i < num_projectors; ++i) { @@ -3931,7 +3925,7 @@ static DerivedMesh *uvprojectModifier_do(UVProjectModifierData *umd, float offsetmat[4][4]; Camera *cam = NULL; /* calculate projection matrix */ - Mat4Invert(projectors[i].projmat, projectors[i].ob->obmat); + invert_m4_m4(projectors[i].projmat, projectors[i].ob->obmat); if(projectors[i].ob->type == OB_CAMERA) { cam = (Camera *)projectors[i].ob->data; @@ -3953,9 +3947,8 @@ static DerivedMesh *uvprojectModifier_do(UVProjectModifierData *umd, xmin = -xmax; ymin = -ymax; - i_window(xmin, xmax, ymin, ymax, - cam->clipsta, cam->clipend, perspmat); - Mat4MulMat4(tmpmat, projectors[i].projmat, perspmat); + perspective_m4( perspmat,xmin, xmax, ymin, ymax, cam->clipsta, cam->clipend); + mul_m4_m4m4(tmpmat, projectors[i].projmat, perspmat); } else if(cam->type == CAM_ORTHO) { float orthomat[4][4]; float xmax; @@ -3973,16 +3966,15 @@ static DerivedMesh *uvprojectModifier_do(UVProjectModifierData *umd, xmin = -xmax; ymin = -ymax; - i_ortho(xmin, xmax, ymin, ymax, - cam->clipsta, cam->clipend, orthomat); - Mat4MulMat4(tmpmat, projectors[i].projmat, orthomat); + orthographic_m4( orthomat,xmin, xmax, ymin, ymax, cam->clipsta, cam->clipend); + mul_m4_m4m4(tmpmat, projectors[i].projmat, orthomat); } } else { - Mat4CpyMat4(tmpmat, projectors[i].projmat); + copy_m4_m4(tmpmat, projectors[i].projmat); } - Mat4One(offsetmat); - Mat4MulFloat3(offsetmat[0], 0.5); + unit_m4(offsetmat); + mul_mat3_m4_fl(offsetmat, 0.5); offsetmat[3][0] = offsetmat[3][1] = offsetmat[3][2] = 0.5; if (cam) { @@ -3998,19 +3990,19 @@ static DerivedMesh *uvprojectModifier_do(UVProjectModifierData *umd, } } - Mat4MulMat4(projectors[i].projmat, tmpmat, offsetmat); + mul_m4_m4m4(projectors[i].projmat, tmpmat, offsetmat); /* calculate worldspace projector normal (for best projector test) */ projectors[i].normal[0] = 0; projectors[i].normal[1] = 0; projectors[i].normal[2] = 1; - Mat4Mul3Vecfl(projectors[i].ob->obmat, projectors[i].normal); + mul_mat3_m4_v3(projectors[i].ob->obmat, projectors[i].normal); } /* if only one projector, project coords to UVs */ if(num_projectors == 1) for(i = 0, co = coords; i < numVerts; ++i, ++co) - Mat4MulVec3Project(projectors[0].projmat, *co); + mul_project_m4_v4(projectors[0].projmat, *co); mface = dm->getFaceArray(dm); numFaces = dm->getNumFaces(dm); @@ -4047,19 +4039,19 @@ static DerivedMesh *uvprojectModifier_do(UVProjectModifierData *umd, /* get the untransformed face normal */ if(mf->v4) { VECCOPY(co4, coords[mf->v4]); - CalcNormFloat4(co1, co2, co3, co4, face_no); + normal_quad_v3( face_no,co1, co2, co3, co4); } else { - CalcNormFloat(co1, co2, co3, face_no); + normal_tri_v3( face_no,co1, co2, co3); } /* find the projector which the face points at most directly * (projector normal with largest dot product is best) */ - best_dot = Inpf(projectors[0].normal, face_no); + best_dot = dot_v3v3(projectors[0].normal, face_no); best_projector = &projectors[0]; for(j = 1; j < num_projectors; ++j) { - float tmp_dot = Inpf(projectors[j].normal, + float tmp_dot = dot_v3v3(projectors[j].normal, face_no); if(tmp_dot > best_dot) { best_dot = tmp_dot; @@ -4067,11 +4059,11 @@ static DerivedMesh *uvprojectModifier_do(UVProjectModifierData *umd, } } - Mat4MulVec3Project(best_projector->projmat, co1); - Mat4MulVec3Project(best_projector->projmat, co2); - Mat4MulVec3Project(best_projector->projmat, co3); + mul_project_m4_v4(best_projector->projmat, co1); + mul_project_m4_v4(best_projector->projmat, co2); + mul_project_m4_v4(best_projector->projmat, co3); if(mf->v4) - Mat4MulVec3Project(best_projector->projmat, co4); + mul_project_m4_v4(best_projector->projmat, co4); /* apply transformed coords as UVs */ tface->uv[0][0] = co1[0]; @@ -4138,11 +4130,11 @@ static DerivedMesh *decimateModifier_applyModifier( ModifierData *md, Object *ob, DerivedMesh *derivedData, int useRenderParams, int isFinalCalc) { - // DecimateModifierData *dmd = (DecimateModifierData*) md; + DecimateModifierData *dmd = (DecimateModifierData*) md; DerivedMesh *dm = derivedData, *result = NULL; MVert *mvert; MFace *mface; - // LOD_Decimation_Info lod; + LOD_Decimation_Info lod; int totvert, totface; int a, numTris; @@ -4164,8 +4156,6 @@ static DerivedMesh *decimateModifier_applyModifier( goto exit; } - // XXX -#if 0 lod.vertex_buffer= MEM_mallocN(3*sizeof(float)*totvert, "vertices"); lod.vertex_normal_buffer= MEM_mallocN(3*sizeof(float)*totvert, "normals"); lod.triangle_index_buffer= MEM_mallocN(3*sizeof(int)*numTris, "trias"); @@ -4250,10 +4240,6 @@ static DerivedMesh *decimateModifier_applyModifier( MEM_freeN(lod.vertex_buffer); MEM_freeN(lod.vertex_normal_buffer); MEM_freeN(lod.triangle_index_buffer); -#else - modifier_setError(md, "Modifier not working yet in 2.5."); - goto exit; -#endif exit: return result; @@ -4372,11 +4358,11 @@ static void smoothModifier_do( if (uctmp[idx1] < 255) { uctmp[idx1]++; - VecAddf(v1, v1, fvec); + add_v3_v3v3(v1, v1, fvec); } if (uctmp[idx2] < 255) { uctmp[idx2]++; - VecAddf(v2, v2, fvec); + add_v3_v3v3(v2, v2, fvec); } } @@ -4590,14 +4576,14 @@ static void castModifier_sphere_do( * we use its location, transformed to ob's local space */ if (ctrl_ob) { if(flag & MOD_CAST_USE_OB_TRANSFORM) { - Mat4Invert(ctrl_ob->imat, ctrl_ob->obmat); - Mat4MulMat4(mat, ob->obmat, ctrl_ob->imat); - Mat4Invert(imat, mat); + invert_m4_m4(ctrl_ob->imat, ctrl_ob->obmat); + mul_m4_m4m4(mat, ob->obmat, ctrl_ob->imat); + invert_m4_m4(imat, mat); } - Mat4Invert(ob->imat, ob->obmat); + invert_m4_m4(ob->imat, ob->obmat); VECCOPY(center, ctrl_ob->obmat[3]); - Mat4MulVecfl(ob->imat, center); + mul_m4_v3(ob->imat, center); } /* now we check which options the user wants */ @@ -4632,7 +4618,7 @@ static void castModifier_sphere_do( if(len <= 0) { for (i = 0; i < numVerts; i++) { - len += VecLenf(center, vertexCos[i]); + len += len_v3v3(center, vertexCos[i]); } len /= numVerts; @@ -4654,9 +4640,9 @@ static void castModifier_sphere_do( VECCOPY(tmp_co, vertexCos[i]); if(ctrl_ob) { if(flag & MOD_CAST_USE_OB_TRANSFORM) { - Mat4MulVecfl(mat, tmp_co); + mul_m4_v3(mat, tmp_co); } else { - VecSubf(tmp_co, tmp_co, center); + sub_v3_v3v3(tmp_co, tmp_co, center); } } @@ -4666,7 +4652,7 @@ static void castModifier_sphere_do( vec[2] = 0.0f; if (has_radius) { - if (VecLength(vec) > cmd->radius) continue; + if (len_v3(vec) > cmd->radius) continue; } for (j = 0; j < dvert[i].totweight; ++j) { @@ -4680,7 +4666,7 @@ static void castModifier_sphere_do( fac = fac_orig * dw->weight; facm = 1.0f - fac; - Normalize(vec); + normalize_v3(vec); if (flag & MOD_CAST_X) tmp_co[0] = fac*vec[0]*len + facm*tmp_co[0]; @@ -4691,9 +4677,9 @@ static void castModifier_sphere_do( if(ctrl_ob) { if(flag & MOD_CAST_USE_OB_TRANSFORM) { - Mat4MulVecfl(imat, tmp_co); + mul_m4_v3(imat, tmp_co); } else { - VecAddf(tmp_co, tmp_co, center); + add_v3_v3v3(tmp_co, tmp_co, center); } } @@ -4709,9 +4695,9 @@ static void castModifier_sphere_do( VECCOPY(tmp_co, vertexCos[i]); if(ctrl_ob) { if(flag & MOD_CAST_USE_OB_TRANSFORM) { - Mat4MulVecfl(mat, tmp_co); + mul_m4_v3(mat, tmp_co); } else { - VecSubf(tmp_co, tmp_co, center); + sub_v3_v3v3(tmp_co, tmp_co, center); } } @@ -4721,10 +4707,10 @@ static void castModifier_sphere_do( vec[2] = 0.0f; if (has_radius) { - if (VecLength(vec) > cmd->radius) continue; + if (len_v3(vec) > cmd->radius) continue; } - Normalize(vec); + normalize_v3(vec); if (flag & MOD_CAST_X) tmp_co[0] = fac*vec[0]*len + facm*tmp_co[0]; @@ -4735,9 +4721,9 @@ static void castModifier_sphere_do( if(ctrl_ob) { if(flag & MOD_CAST_USE_OB_TRANSFORM) { - Mat4MulVecfl(imat, tmp_co); + mul_m4_v3(imat, tmp_co); } else { - VecAddf(tmp_co, tmp_co, center); + add_v3_v3v3(tmp_co, tmp_co, center); } } @@ -4792,14 +4778,14 @@ static void castModifier_cuboid_do( if (ctrl_ob) { if(flag & MOD_CAST_USE_OB_TRANSFORM) { - Mat4Invert(ctrl_ob->imat, ctrl_ob->obmat); - Mat4MulMat4(mat, ob->obmat, ctrl_ob->imat); - Mat4Invert(imat, mat); + invert_m4_m4(ctrl_ob->imat, ctrl_ob->obmat); + mul_m4_m4m4(mat, ob->obmat, ctrl_ob->imat); + invert_m4_m4(imat, mat); } - Mat4Invert(ob->imat, ob->obmat); + invert_m4_m4(ob->imat, ob->obmat); VECCOPY(center, ctrl_ob->obmat[3]); - Mat4MulVecfl(ob->imat, center); + mul_m4_v3(ob->imat, center); } if((flag & MOD_CAST_SIZE_FROM_RADIUS) && has_radius) { @@ -4828,7 +4814,7 @@ static void castModifier_cuboid_do( DO_MINMAX(center, min, max); for (i = 0; i < numVerts; i++) { - VecSubf(vec, vertexCos[i], center); + sub_v3_v3v3(vec, vertexCos[i], center); DO_MINMAX(vec, min, max); } } @@ -4871,9 +4857,9 @@ static void castModifier_cuboid_do( VECCOPY(tmp_co, vertexCos[i]); if(ctrl_ob) { if(flag & MOD_CAST_USE_OB_TRANSFORM) { - Mat4MulVecfl(mat, tmp_co); + mul_m4_v3(mat, tmp_co); } else { - VecSubf(tmp_co, tmp_co, center); + sub_v3_v3v3(tmp_co, tmp_co, center); } } @@ -4909,7 +4895,7 @@ static void castModifier_cuboid_do( if (tmp_co[2] > 0.0f) octant += 4; /* apex is the bb's vertex at the chosen octant */ - VecCopyf(apex, bb[octant]); + copy_v3_v3(apex, bb[octant]); /* find which bb plane is closest to this vertex ... */ d[0] = tmp_co[0] / apex[0]; @@ -4947,9 +4933,9 @@ static void castModifier_cuboid_do( if(ctrl_ob) { if(flag & MOD_CAST_USE_OB_TRANSFORM) { - Mat4MulVecfl(imat, tmp_co); + mul_m4_v3(imat, tmp_co); } else { - VecAddf(tmp_co, tmp_co, center); + add_v3_v3v3(tmp_co, tmp_co, center); } } @@ -4967,9 +4953,9 @@ static void castModifier_cuboid_do( VECCOPY(tmp_co, vertexCos[i]); if(ctrl_ob) { if(flag & MOD_CAST_USE_OB_TRANSFORM) { - Mat4MulVecfl(mat, tmp_co); + mul_m4_v3(mat, tmp_co); } else { - VecSubf(tmp_co, tmp_co, center); + sub_v3_v3v3(tmp_co, tmp_co, center); } } @@ -4984,7 +4970,7 @@ static void castModifier_cuboid_do( if (tmp_co[1] > 0.0f) octant += 2; if (tmp_co[2] > 0.0f) octant += 4; - VecCopyf(apex, bb[octant]); + copy_v3_v3(apex, bb[octant]); d[0] = tmp_co[0] / apex[0]; d[1] = tmp_co[1] / apex[1]; @@ -5015,9 +5001,9 @@ static void castModifier_cuboid_do( if(ctrl_ob) { if(flag & MOD_CAST_USE_OB_TRANSFORM) { - Mat4MulVecfl(imat, tmp_co); + mul_m4_v3(imat, tmp_co); } else { - VecAddf(tmp_co, tmp_co, center); + add_v3_v3v3(tmp_co, tmp_co, center); } } @@ -5182,7 +5168,7 @@ static void wavemod_get_texture_coords(WaveModifierData *wmd, Object *ob, if(texmapping == MOD_WAV_MAP_OBJECT) { if(wmd->map_object) - Mat4Invert(wmd->map_object->imat, wmd->map_object->obmat); + invert_m4_m4(wmd->map_object->imat, wmd->map_object->obmat); else /* if there is no map object, default to local */ texmapping = MOD_WAV_MAP_LOCAL; } @@ -5248,12 +5234,12 @@ static void wavemod_get_texture_coords(WaveModifierData *wmd, Object *ob, break; case MOD_WAV_MAP_GLOBAL: VECCOPY(*texco, *co); - Mat4MulVecfl(ob->obmat, *texco); + mul_m4_v3(ob->obmat, *texco); break; case MOD_WAV_MAP_OBJECT: VECCOPY(*texco, *co); - Mat4MulVecfl(ob->obmat, *texco); - Mat4MulVecfl(wmd->map_object->imat, *texco); + mul_m4_v3(ob->obmat, *texco); + mul_m4_v3(wmd->map_object->imat, *texco); break; } } @@ -5279,8 +5265,8 @@ static void waveModifier_do(WaveModifierData *md, if(wmd->objectcenter){ float mat[4][4]; /* get the control object's location in local coordinates */ - Mat4Invert(ob->imat, ob->obmat); - Mat4MulMat4(mat, wmd->objectcenter->obmat, ob->imat); + invert_m4_m4(ob->imat, ob->obmat); + mul_m4_m4m4(mat, wmd->objectcenter->obmat, ob->imat); wmd->startx = mat[3][0]; wmd->starty = mat[3][1]; @@ -5669,14 +5655,14 @@ static void hookModifier_deformVerts( /* get world-space matrix of target, corrected for the space the verts are in */ if (hmd->subtarget[0] && pchan) { /* bone target if there's a matching pose-channel */ - Mat4MulMat4(dmat, pchan->pose_mat, hmd->object->obmat); + mul_m4_m4m4(dmat, pchan->pose_mat, hmd->object->obmat); } else { /* just object target */ - Mat4CpyMat4(dmat, hmd->object->obmat); + copy_m4_m4(dmat, hmd->object->obmat); } - Mat4Invert(ob->imat, ob->obmat); - Mat4MulSerie(mat, ob->imat, dmat, hmd->parentinv, + invert_m4_m4(ob->imat, ob->obmat); + mul_serie_m4(mat, ob->imat, dmat, hmd->parentinv, NULL, NULL, NULL, NULL, NULL); /* vertex indices? */ @@ -5706,29 +5692,29 @@ static void hookModifier_deformVerts( if(orig_index == index) { co = vertexCos[j]; if(hmd->falloff != 0.0) { - float len = VecLenf(co, hmd->cent); + float len = len_v3v3(co, hmd->cent); if(len > hmd->falloff) fac = 0.0; else if(len > 0.0) fac *= sqrt(1.0 - len / hmd->falloff); } if(fac != 0.0) { - VecMat4MulVecfl(vec, mat, co); - VecLerpf(co, co, vec, fac); + mul_v3_m4v3(vec, mat, co); + interp_v3_v3v3(co, co, vec, fac); } } } } else { if(hmd->falloff != 0.0) { - float len = VecLenf(co, hmd->cent); + float len = len_v3v3(co, hmd->cent); if(len > hmd->falloff) fac = 0.0; else if(len > 0.0) fac *= sqrt(1.0 - len / hmd->falloff); } if(fac != 0.0) { - VecMat4MulVecfl(vec, mat, co); - VecLerpf(co, co, vec, fac); + mul_v3_m4v3(vec, mat, co); + interp_v3_v3v3(co, co, vec, fac); } } } @@ -5767,14 +5753,14 @@ static void hookModifier_deformVerts( float *co = vertexCos[i]; if(hmd->falloff != 0.0) { - float len = VecLenf(co, hmd->cent); + float len = len_v3v3(co, hmd->cent); if(len > hmd->falloff) fac = 0.0; else if(len > 0.0) fac *= sqrt(1.0 - len / hmd->falloff); } - VecMat4MulVecfl(vec, mat, co); - VecLerpf(co, co, vec, fac); + mul_v3_m4v3(vec, mat, co); + interp_v3_v3v3(co, co, vec, fac); } } } @@ -6110,7 +6096,7 @@ static void collisionModifier_deformVerts( for ( i = 0; i < numverts; i++ ) { // we save global positions - Mat4MulVecfl ( ob->obmat, collmd->x[i].co ); + mul_m4_v3( ob->obmat, collmd->x[i].co ); } collmd->xnew = MEM_dupallocN(collmd->x); // frame end position @@ -6140,7 +6126,7 @@ static void collisionModifier_deformVerts( for ( i = 0; i < numverts; i++ ) { // we save global positions - Mat4MulVecfl ( ob->obmat, collmd->xnew[i].co ); + mul_m4_v3( ob->obmat, collmd->xnew[i].co ); } memcpy(collmd->current_xnew, collmd->x, numverts*sizeof(MVert)); @@ -6286,14 +6272,14 @@ static void surfaceModifier_deformVerts( /* convert to global coordinates and calculate velocity */ for(i = 0, x = surmd->x, v = surmd->v; i<numverts; i++, x++, v++) { vec = CDDM_get_vert(surmd->dm, i)->co; - Mat4MulVecfl(ob->obmat, vec); + mul_m4_v3(ob->obmat, vec); if(init) v->co[0] = v->co[1] = v->co[2] = 0.0f; else - VecSubf(v->co, vec, x->co); + sub_v3_v3v3(v->co, vec, x->co); - VecCopyf(x->co, vec); + copy_v3_v3(x->co, vec); } surmd->cfra = md->scene->r.cfra; @@ -6390,12 +6376,6 @@ static CustomDataMask booleanModifier_requiredDataMask(Object *ob, ModifierData dataMask |= (1 << CD_MDEFORMVERT); - /* particles only need this if they are after a non deform modifier, and - * the modifier stack will only create them in that case. */ -// dataMask |= CD_MASK_ORIGSPACE; - -// dataMask |= CD_MASK_ORCO; - return dataMask; } @@ -6733,7 +6713,7 @@ static DerivedMesh * particleInstanceModifier_applyModifier( psys_get_particle_on_path(&sim, first_particle + i/totvert, &state,1); - Normalize(state.vel); + normalize_v3(state.vel); /* TODO: incremental rotations somehow */ if(state.vel[axis] < -0.9999 || state.vel[axis] > 0.9999) { @@ -6744,10 +6724,10 @@ static DerivedMesh * particleInstanceModifier_applyModifier( float temp[3] = {0.0f,0.0f,0.0f}; temp[axis] = 1.0f; - Crossf(cross, temp, state.vel); + cross_v3_v3v3(cross, temp, state.vel); /* state.vel[axis] is the only component surviving from a dot product with the axis */ - VecRotToQuat(cross,saacos(state.vel[axis]),state.rot); + axis_angle_to_quat(state.rot,cross,saacos(state.vel[axis])); } } @@ -6756,9 +6736,9 @@ static DerivedMesh * particleInstanceModifier_applyModifier( psys_get_particle_state(&sim, first_particle + i/totvert, &state,1); } - QuatMulVecf(state.rot,mv->co); + mul_qt_v3(state.rot,mv->co); if(pimd->flag & eParticleInstanceFlag_UseSize) - VecMulf(mv->co, size[i/totvert]); + mul_v3_fl(mv->co, size[i/totvert]); VECADD(mv->co,mv->co,state.co); } @@ -6921,14 +6901,14 @@ static void explodeModifier_createFacepa(ExplodeModifierData *emd, /* set face-particle-indexes to nearest particle to face center */ for(i=0,fa=mface; i<totface; i++,fa++){ - VecAddf(center,mvert[fa->v1].co,mvert[fa->v2].co); - VecAddf(center,center,mvert[fa->v3].co); + add_v3_v3v3(center,mvert[fa->v1].co,mvert[fa->v2].co); + add_v3_v3v3(center,center,mvert[fa->v3].co); if(fa->v4){ - VecAddf(center,center,mvert[fa->v4].co); - VecMulf(center,0.25); + add_v3_v3v3(center,center,mvert[fa->v4].co); + mul_v3_fl(center,0.25); } else - VecMulf(center,0.3333f); + mul_v3_fl(center,0.3333f); p= BLI_kdtree_find_nearest(tree,center,NULL,NULL); @@ -7100,7 +7080,7 @@ static DerivedMesh * explodeModifier_splitEdges(ExplodeModifierData *emd, Derive mv=CDDM_get_vert(splitdm,i); VECADD(dupve->co,dupve->co,mv->co); - VecMulf(dupve->co,0.5); + mul_v3_fl(dupve->co,0.5); } BLI_edgehashIterator_free(ehi); @@ -7316,7 +7296,7 @@ static DerivedMesh * explodeModifier_splitEdges(ExplodeModifierData *emd, Derive VECADD(dupve->co,dupve->co,mv->co); mv=CDDM_get_vert(splitdm,mf->v4); VECADD(dupve->co,dupve->co,mv->co); - VecMulf(dupve->co,0.25); + mul_v3_fl(dupve->co,0.25); df1=CDDM_get_face(splitdm,curdupface); @@ -7492,7 +7472,7 @@ static DerivedMesh * explodeModifier_explodeMesh(ExplodeModifierData *emd, /*dupvert= CDDM_get_verts(explode);*/ /* getting back to object space */ - Mat4Invert(imat,ob->obmat); + invert_m4_m4(imat,ob->obmat); psmd->psys->lattice = psys_get_lattice(&sim); @@ -7519,23 +7499,23 @@ static DerivedMesh * explodeModifier_explodeMesh(ExplodeModifierData *emd, /* get particle state */ psys_particle_on_emitter(psmd,part->from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,loc0,nor,0,0,0,0); - Mat4MulVecfl(ob->obmat,loc0); + mul_m4_v3(ob->obmat,loc0); state.time=cfra; psys_get_particle_state(&sim, i, &state, 1); vertco=CDDM_get_vert(explode,v)->co; - Mat4MulVecfl(ob->obmat,vertco); + mul_m4_v3(ob->obmat,vertco); VECSUB(vertco,vertco,loc0); /* apply rotation, size & location */ - QuatMulVecf(state.rot,vertco); - VecMulf(vertco,pa->size); + mul_qt_v3(state.rot,vertco); + mul_v3_fl(vertco,pa->size); VECADD(vertco,vertco,state.co); - Mat4MulVecfl(imat,vertco); + mul_m4_v3(imat,vertco); } } BLI_edgehashIterator_free(ehi); @@ -7866,17 +7846,17 @@ static void meshdeformModifier_do( float (*vertexCos)[3], int numVerts) { MeshDeformModifierData *mmd = (MeshDeformModifierData*) md; - Mesh *me= ob->data; + Mesh *me= (mmd->object)? mmd->object->data: NULL; + EditMesh *em = (me)? BKE_mesh_get_editmesh(me): NULL; DerivedMesh *tmpdm, *cagedm; MDeformVert *dvert = NULL; MDeformWeight *dw; - EditMesh *em = BKE_mesh_get_editmesh(me); MVert *cagemvert; float imat[4][4], cagemat[4][4], iobmat[4][4], icagemat[3][3], cmat[4][4]; float weight, totweight, fac, co[3], *weights, (*dco)[3], (*bindcos)[3]; int a, b, totvert, totcagevert, defgrp_index; - if(!mmd->object || (!mmd->bindcos && !mmd->needbind)) + if(!mmd->object || (!mmd->bindcos && !mmd->bindfunc)) return; /* get cage derivedmesh */ @@ -7901,11 +7881,11 @@ static void meshdeformModifier_do( return; /* compute matrices to go in and out of cage object space */ - Mat4Invert(imat, mmd->object->obmat); - Mat4MulMat4(cagemat, ob->obmat, imat); - Mat4MulMat4(cmat, cagemat, mmd->bindmat); - Mat4Invert(iobmat, cmat); - Mat3CpyMat4(icagemat, iobmat); + invert_m4_m4(imat, mmd->object->obmat); + mul_m4_m4m4(cagemat, ob->obmat, imat); + mul_m4_m4m4(cmat, cagemat, mmd->bindmat); + invert_m4_m4(iobmat, cmat); + copy_m3_m4(icagemat, iobmat); /* bind weights if needed */ if(!mmd->bindcos) { @@ -7914,7 +7894,7 @@ static void meshdeformModifier_do( /* progress bar redraw can make this recursive .. */ if(!recursive) { recursive = 1; - //XXX harmonic_coordinates_bind(mmd, vertexCos, numVerts, cagemat); + mmd->bindfunc(md->scene, mmd, (float*)vertexCos, numVerts, cagemat); recursive = 0; } } @@ -7939,7 +7919,7 @@ static void meshdeformModifier_do( VECCOPY(co, cagemvert[a].co); if(G.rt != 527) { - Mat4MulVecfl(mmd->bindmat, co); + mul_m4_v3(mmd->bindmat, co); /* compute difference with world space bind coord */ VECSUB(dco[a], co, bindcos[a]); } @@ -7993,7 +7973,7 @@ static void meshdeformModifier_do( if(mmd->flag & MOD_MDEF_DYNAMIC_BIND) { /* transform coordinate into cage's local space */ VECCOPY(co, vertexCos[b]); - Mat4MulVecfl(cagemat, co); + mul_m4_v3(cagemat, co); totweight= meshdeform_dynamic_bind(mmd, dco, co); } else { @@ -8010,8 +7990,8 @@ static void meshdeformModifier_do( } if(totweight > 0.0f) { - VecMulf(co, fac/totweight); - Mat3MulVecfl(icagemat, co); + mul_v3_fl(co, fac/totweight); + mul_m3_v3(icagemat, co); if(G.rt != 527) VECADD(vertexCos[b], vertexCos[b], co) else @@ -8102,7 +8082,7 @@ static DerivedMesh *multiresModifier_applyModifier(ModifierData *md, Object *ob, int i; MVert *dst = CDDM_get_verts(final); for(i = 0; i < mmd->undo_verts_tot; ++i) { - VecCopyf(dst[i].co, mmd->undo_verts[i].co); + copy_v3_v3(dst[i].co, mmd->undo_verts[i].co); } CDDM_calc_normals(final); @@ -8383,10 +8363,10 @@ static void shapekeyModifier_deformMatricesEM( int a; if(kb && kb->totelem==numVerts && kb!=key->refkey) { - Mat3Scale(scale, kb->curval); + scale_m3_fl(scale, kb->curval); for(a=0; a<numVerts; a++) - Mat3CpyMat3(defMats[a], scale); + copy_m3_m3(defMats[a], scale); } } diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c index e1a51a05ca4..47b2914b0f5 100644 --- a/source/blender/blenkernel/intern/multires.c +++ b/source/blender/blenkernel/intern/multires.c @@ -37,7 +37,7 @@ #include "DNA_scene_types.h" #include "DNA_view3d_types.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BKE_cdderivedmesh.h" @@ -164,7 +164,7 @@ int multiresModifier_reshape(MultiresModifierData *mmd, Object *dst, Object *src int i; for(i = 0; i < src_me->totvert; ++i) - VecCopyf(mvert[i].co, src_me->mvert[i].co); + copy_v3_v3(mvert[i].co, src_me->mvert[i].co); mrdm->needsFree = 1; MultiresDM_mark_as_modified(mrdm); mrdm->release(mrdm); @@ -178,9 +178,9 @@ int multiresModifier_reshape(MultiresModifierData *mmd, Object *dst, Object *src static void Mat3FromColVecs(float mat[][3], float v1[3], float v2[3], float v3[3]) { - VecCopyf(mat[0], v1); - VecCopyf(mat[1], v2); - VecCopyf(mat[2], v3); + copy_v3_v3(mat[0], v1); + copy_v3_v3(mat[1], v2); + copy_v3_v3(mat[2], v3); } static DerivedMesh *multires_subdisp_pre(DerivedMesh *mrdm, int distance, int simple) @@ -233,7 +233,7 @@ static void multires_subdisp(DerivedMesh *orig, Object *ob, DerivedMesh *final, if(!addverts) { for(i = 0; i < totvert; ++i) { float z[3] = {0,0,0}; - VecCopyf(mvd[i].co, z); + copy_v3_v3(mvd[i].co, z); } } @@ -424,7 +424,7 @@ void multiresModifier_del_levels(struct MultiresModifierData *mmd, struct Object for(j = 0, y = 0; y < st; y += skip) { for(x = 0; x < st; x += skip) { - VecCopyf(disps[j], mdisps[i].disps[y * st + x]); + copy_v3_v3(disps[j], mdisps[i].disps[y * st + x]); ++j; } } @@ -998,27 +998,27 @@ static void calc_disp_mat(MultiresDisplacer *d, float mat[3][3]) if(u < 0) { u = multires_index_at_loc(d->face_index, d->x - 1, d->y, d, &d->edges_primary); - VecSubf(t1, base->co, d->subco[u].co); + sub_v3_v3v3(t1, base->co, d->subco[u].co); } else - VecSubf(t1, d->subco[u].co, base->co); + sub_v3_v3v3(t1, d->subco[u].co, base->co); if(v < 0) { v = multires_index_at_loc(d->face_index, d->x, d->y - 1, d, &d->edges_primary); - VecSubf(t2, base->co, d->subco[v].co); + sub_v3_v3v3(t2, base->co, d->subco[v].co); } else - VecSubf(t2, d->subco[v].co, base->co); + sub_v3_v3v3(t2, d->subco[v].co, base->co); //printf("uu=%d, vv=%d\n", u, v); - Normalize(t1); - Normalize(t2); + normalize_v3(t1); + normalize_v3(t2); Mat3FromColVecs(mat, t1, t2, norm); if(d->invert) { - Mat3Inv(inv, mat); - Mat3CpyMat3(mat, inv); + invert_m3_m3(inv, mat); + copy_m3_m3(mat, inv); } } @@ -1033,23 +1033,23 @@ static void multires_displace(MultiresDisplacer *d, float co[3]) data = d->grid->disps[(d->y * d->spacing) * d->disp_st + (d->x * d->spacing)]; if(d->invert) - VecSubf(disp, co, subco->co); + sub_v3_v3v3(disp, co, subco->co); else - VecCopyf(disp, data); + copy_v3_v3(disp, data); /* Apply ts matrix to displacement */ calc_disp_mat(d, mat); - Mat3MulVecfl(mat, disp); + mul_m3_v3(mat, disp); if(d->invert) { - VecCopyf(data, disp); + copy_v3_v3(data, disp); } else { if(d->type == 4 || d->type == 5) - VecMulf(disp, d->weight); - VecAddf(co, co, disp); + mul_v3_fl(disp, d->weight); + add_v3_v3v3(co, co, disp); } if(d->type == 2) { @@ -1200,7 +1200,7 @@ static void multiresModifier_update(DerivedMesh *dm) /* Subtract the original vertex cos from the new vertex cos */ verts_new = CDDM_get_verts(dm); for(i = 0; i < dm->getNumVerts(dm); ++i) - VecSubf(verts_new[i].co, verts_new[i].co, cur_lvl_orig_verts[i].co); + sub_v3_v3v3(verts_new[i].co, verts_new[i].co, cur_lvl_orig_verts[i].co); final = multires_subdisp_pre(dm, totlvl - lvl, 0); @@ -1579,7 +1579,7 @@ void multires_load_old(DerivedMesh *dm, Multires *mr) /* Transfer verts */ for(i = 0; i < totvert; ++i) - VecCopyf(vdst[i].co, vsrc[vvmap[i]].co); + copy_v3_v3(vdst[i].co, vsrc[vvmap[i]].co); MEM_freeN(vvmap); } diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c index 2776444c8a0..1b0f1f28d2c 100644 --- a/source/blender/blenkernel/intern/node.c +++ b/source/blender/blenkernel/intern/node.c @@ -32,6 +32,7 @@ #endif #include <stdlib.h> +#include <stddef.h> #include <string.h> #include "DNA_ID.h" @@ -53,7 +54,7 @@ #include "BKE_text.h" #include "BKE_utildefines.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_rand.h" #include "BLI_threads.h" @@ -903,7 +904,11 @@ void nodeAddSockets(bNode *node, bNodeType *ntype) } } } - +/* Find the first available, non-duplicate name for a given node */ +void nodeUniqueName(bNodeTree *ntree, bNode *node) +{ + BLI_uniquename(&ntree->nodes, node, "Node", '.', offsetof(bNode, name), 32); +} bNode *nodeAddNodeType(bNodeTree *ntree, int type, bNodeTree *ngroup, ID *id) { @@ -937,6 +942,9 @@ bNode *nodeAddNodeType(bNodeTree *ntree, int type, bNodeTree *ngroup, ID *id) } else BLI_strncpy(node->name, ntype->name, NODE_MAXSTR); + + nodeUniqueName(ntree, node); + node->type= ntype->type; node->flag= NODE_SELECT|ntype->flag; node->width= ntype->width; @@ -989,6 +997,8 @@ bNode *nodeCopyNode(struct bNodeTree *ntree, struct bNode *node, int internal) bNodeSocket *sock, *oldsock; *nnode= *node; + nodeUniqueName(ntree, nnode); + BLI_addtail(&ntree->nodes, nnode); BLI_duplicatelist(&nnode->inputs, &node->inputs); @@ -1054,7 +1064,7 @@ bNodeTree *ntreeAddTree(int type) if(ntree->type==NTREE_SHADER) BLI_strncpy(ntree->id.name, "NTShader Nodetree", sizeof(ntree->id.name)); else if(ntree->type==NTREE_COMPOSIT) - BLI_strncpy(ntree->id.name, "NTComposit Nodetree", sizeof(ntree->id.name)); + BLI_strncpy(ntree->id.name, "NTCompositing Nodetree", sizeof(ntree->id.name)); else if(ntree->type==NTREE_TEXTURE) BLI_strncpy(ntree->id.name, "NTTexture Nodetree", sizeof(ntree->id.name)); @@ -1662,7 +1672,8 @@ void ntreeSocketUseFlags(bNodeTree *ntree) /* tag all thats in use */ for(link= ntree->links.first; link; link= link->next) { link->fromsock->flag |= SOCK_IN_USE; - link->tosock->flag |= SOCK_IN_USE; + if(link->tosock) // FIXME This can be NULL, when dragging a new link in the UI, should probably copy the node tree for preview render - campbell + link->tosock->flag |= SOCK_IN_USE; } } diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index 6f0749e0fcd..27bfd6f36a3 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -70,7 +70,7 @@ #include "DNA_world_types.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_editVert.h" #include "BKE_utildefines.h" @@ -732,13 +732,13 @@ float dof_camera(Object *ob) return 0.0f; if (cam->dof_ob) { /* too simple, better to return the distance on the view axis only - * return VecLenf(ob->obmat[3], cam->dof_ob->obmat[3]); */ + * return len_v3v3(ob->obmat[3], cam->dof_ob->obmat[3]); */ float mat[4][4], obmat[4][4]; - Mat4CpyMat4(obmat, ob->obmat); - Mat4Ortho(obmat); - Mat4Invert(ob->imat, obmat); - Mat4MulMat4(mat, cam->dof_ob->obmat, ob->imat); + copy_m4_m4(obmat, ob->obmat); + normalize_m4(obmat); + invert_m4_m4(ob->imat, obmat); + mul_m4_m4m4(mat, cam->dof_ob->obmat, ob->imat); return (float)fabs(mat[3][2]); } return cam->YF_dofdist; @@ -957,8 +957,8 @@ Object *add_only_object(int type, char *name) /* ob->transflag= OB_QUAT; */ #if 0 /* not used yet */ - QuatOne(ob->quat); - QuatOne(ob->dquat); + unit_qt(ob->quat); + unit_qt(ob->dquat); #endif ob->col[0]= ob->col[1]= ob->col[2]= 1.0; @@ -968,9 +968,9 @@ Object *add_only_object(int type, char *name) ob->rot[0]= ob->rot[1]= ob->rot[2]= 0.0; ob->size[0]= ob->size[1]= ob->size[2]= 1.0; - Mat4One(ob->constinv); - Mat4One(ob->parentinv); - Mat4One(ob->obmat); + unit_m4(ob->constinv); + unit_m4(ob->parentinv); + unit_m4(ob->obmat); ob->dt= OB_SHADED; ob->empty_drawtype= OB_ARROWS; ob->empty_drawsize= 1.0; @@ -1456,7 +1456,7 @@ void object_make_proxy(Object *ob, Object *target, Object *gob) } ob->parent= target->parent; /* libdata */ - Mat4CpyMat4(ob->parentinv, target->parentinv); + copy_m4_m4(ob->parentinv, target->parentinv); /* copy animdata stuff - drivers only for now... */ if ((target->adt) && (target->adt->drivers.first)) { @@ -1580,7 +1580,7 @@ void object_scale_to_mat3(Object *ob, float mat[][3]) vec[0]= ob->size[0]+ob->dsize[0]; vec[1]= ob->size[1]+ob->dsize[1]; vec[2]= ob->size[2]+ob->dsize[2]; - SizeToMat3(vec, mat); + size_to_mat3( mat,vec); } // TODO: this should take rotation orders into account later... @@ -1591,29 +1591,29 @@ void object_rot_to_mat3(Object *ob, float mat[][3]) /* initialise the delta-rotation matrix, which will get (pre)multiplied * with the rotation matrix to yield the appropriate rotation */ - Mat3One(dmat); + unit_m3(dmat); /* rotations may either be quats, eulers (with various rotation orders), or axis-angle */ if (ob->rotmode > 0) { /* euler rotations (will cause gimble lock, but this can be alleviated a bit with rotation orders) */ - EulOToMat3(ob->rot, ob->rotmode, rmat); - EulOToMat3(ob->drot, ob->rotmode, dmat); + eulO_to_mat3( rmat,ob->rot, ob->rotmode); + eulO_to_mat3( dmat,ob->drot, ob->rotmode); } else if (ob->rotmode == ROT_MODE_AXISANGLE) { /* axis-angle - not really that great for 3D-changing orientations */ - AxisAngleToMat3(ob->rotAxis, ob->rotAngle, rmat); - AxisAngleToMat3(ob->drotAxis, ob->drotAngle, dmat); + axis_angle_to_mat3( rmat,ob->rotAxis, ob->rotAngle); + axis_angle_to_mat3( dmat,ob->drotAxis, ob->drotAngle); } else { /* quats are normalised before use to eliminate scaling issues */ - NormalQuat(ob->quat); - QuatToMat3(ob->quat, rmat); - QuatToMat3(ob->dquat, dmat); + normalize_qt(ob->quat); + quat_to_mat3( rmat,ob->quat); + quat_to_mat3( dmat,ob->dquat); } /* combine these rotations */ // XXX is this correct? if errors, change the order of multiplication... - Mat3MulMat3(mat, dmat, rmat); + mul_m3_m3m3(mat, dmat, rmat); } void object_to_mat3(Object *ob, float mat[][3]) /* no parent */ @@ -1627,7 +1627,7 @@ void object_to_mat3(Object *ob, float mat[][3]) /* no parent */ /* rot */ object_rot_to_mat3(ob, rmat); - Mat3MulMat3(mat, rmat, smat); + mul_m3_m3m3(mat, rmat, smat); } void object_to_mat4(Object *ob, float mat[][4]) @@ -1636,7 +1636,7 @@ void object_to_mat4(Object *ob, float mat[][4]) object_to_mat3(ob, tmat); - Mat4CpyMat3(mat, tmat); + copy_m4_m3(mat, tmat); mat[3][0]= ob->loc[0] + ob->dloc[0]; mat[3][1]= ob->loc[1] + ob->dloc[1]; @@ -1651,7 +1651,7 @@ static void ob_parcurve(Scene *scene, Object *ob, Object *par, float mat[][4]) float q[4], vec[4], dir[3], quat[4], radius, x1, ctime; float timeoffs = 0.0, sf_orig = 0.0; - Mat4One(mat); + unit_m4(mat); cu= par->data; if(cu->path==NULL || cu->path->data==NULL) /* only happens on reload file, but violates depsgraph still... fix! */ @@ -1699,25 +1699,25 @@ static void ob_parcurve(Scene *scene, Object *ob, Object *par, float mat[][4]) if( where_on_path(par, ctime, vec, dir, NULL, &radius) ) { if(cu->flag & CU_FOLLOW) { - vectoquat(dir, ob->trackflag, ob->upflag, quat); + vec_to_quat( quat,dir, ob->trackflag, ob->upflag); /* the tilt */ - Normalize(dir); + normalize_v3(dir); q[0]= (float)cos(0.5*vec[3]); x1= (float)sin(0.5*vec[3]); q[1]= -x1*dir[0]; q[2]= -x1*dir[1]; q[3]= -x1*dir[2]; - QuatMul(quat, q, quat); + mul_qt_qtqt(quat, q, quat); - QuatToMat4(quat, mat); + quat_to_mat4( mat,quat); } if(cu->flag & CU_PATH_RADIUS) { float tmat[4][4], rmat[4][4]; - Mat4Scale(tmat, radius); - Mat4MulMat4(rmat, mat, tmat); - Mat4CpyMat4(mat, rmat); + scale_m4_fl(tmat, radius); + mul_m4_m4m4(rmat, mat, tmat); + copy_m4_m4(mat, rmat); } VECCOPY(mat[3], vec); @@ -1731,7 +1731,7 @@ static void ob_parbone(Object *ob, Object *par, float mat[][4]) float vec[3]; if (par->type!=OB_ARMATURE) { - Mat4One(mat); + unit_m4(mat); return; } @@ -1739,17 +1739,17 @@ static void ob_parbone(Object *ob, Object *par, float mat[][4]) pchan= get_pose_channel(par->pose, ob->parsubstr); if (!pchan){ printf ("Object %s with Bone parent: bone %s doesn't exist\n", ob->id.name+2, ob->parsubstr); - Mat4One(mat); + unit_m4(mat); return; } /* get bone transform */ - Mat4CpyMat4(mat, pchan->pose_mat); + copy_m4_m4(mat, pchan->pose_mat); /* but for backwards compatibility, the child has to move to the tail */ VECCOPY(vec, mat[1]); - VecMulf(vec, pchan->bone->length); - VecAddf(mat[3], mat[3], vec); + mul_v3_fl(vec, pchan->bone->length); + add_v3_v3v3(mat[3], mat[3], vec); } static void give_parvert(Object *par, int nr, float *vec) @@ -1788,7 +1788,7 @@ static void give_parvert(Object *par, int nr, float *vec) if(vindex == nr) { dm->getVertCo(dm, i, co); - VecAddf(vec, vec, co); + add_v3_v3v3(vec, vec, co); count++; } } @@ -1796,7 +1796,7 @@ static void give_parvert(Object *par, int nr, float *vec) if (count==0) { /* keep as 0,0,0 */ } else if(count > 0) { - VecMulf(vec, 1.0f / count); + mul_v3_fl(vec, 1.0f / count); } else { /* use first index if its out of range */ dm->getVertCo(dm, 0, vec); @@ -1880,7 +1880,7 @@ static void ob_parvert3(Object *ob, Object *par, float mat[][4]) float cmat[3][3], v1[3], v2[3], v3[3], q[4]; /* in local ob space */ - Mat4One(mat); + unit_m4(mat); if (ELEM4(par->type, OB_MESH, OB_SURF, OB_CURVE, OB_LATTICE)) { @@ -1888,17 +1888,17 @@ static void ob_parvert3(Object *ob, Object *par, float mat[][4]) give_parvert(par, ob->par2, v2); give_parvert(par, ob->par3, v3); - triatoquat(v1, v2, v3, q); - QuatToMat3(q, cmat); - Mat4CpyMat3(mat, cmat); + tri_to_quat( q,v1, v2, v3); + quat_to_mat3( cmat,q); + copy_m4_m3(mat, cmat); if(ob->type==OB_CURVE) { VECCOPY(mat[3], v1); } else { - VecAddf(mat[3], v1, v2); - VecAddf(mat[3], mat[3], v3); - VecMulf(mat[3], 0.3333333f); + add_v3_v3v3(mat[3], v1, v2); + add_v3_v3v3(mat[3], mat[3], v3); + mul_v3_fl(mat[3], 0.3333333f); } } } @@ -1986,8 +1986,8 @@ void where_is_object_time(Scene *scene, Object *ob, float ctime) } /* set negative scale flag in object */ - Crossf(vec, ob->obmat[0], ob->obmat[1]); - if( Inpf(vec, ob->obmat[2]) < 0.0 ) ob->transflag |= OB_NEG_SCALE; + cross_v3_v3v3(vec, ob->obmat[0], ob->obmat[1]); + if( dot_v3v3(vec, ob->obmat[2]) < 0.0 ) ob->transflag |= OB_NEG_SCALE; else ob->transflag &= ~OB_NEG_SCALE; } @@ -2001,7 +2001,7 @@ static void solve_parenting (Scene *scene, Object *ob, Object *par, float obmat[ object_to_mat4(ob, locmat); - if(ob->partype & PARSLOW) Mat4CpyMat4(slowmat, obmat); + if(ob->partype & PARSLOW) copy_m4_m4(slowmat, obmat); switch(ob->partype & PARTYPE) { case PAROBJECT: @@ -2013,43 +2013,43 @@ static void solve_parenting (Scene *scene, Object *ob, Object *par, float obmat[ } } - if(ok) Mat4MulSerie(totmat, par->obmat, tmat, + if(ok) mul_serie_m4(totmat, par->obmat, tmat, NULL, NULL, NULL, NULL, NULL, NULL); - else Mat4CpyMat4(totmat, par->obmat); + else copy_m4_m4(totmat, par->obmat); break; case PARBONE: ob_parbone(ob, par, tmat); - Mat4MulSerie(totmat, par->obmat, tmat, + mul_serie_m4(totmat, par->obmat, tmat, NULL, NULL, NULL, NULL, NULL, NULL); break; case PARVERT1: - Mat4One(totmat); + unit_m4(totmat); if (simul){ VECCOPY(totmat[3], par->obmat[3]); } else{ give_parvert(par, ob->par1, vec); - VecMat4MulVecfl(totmat[3], par->obmat, vec); + mul_v3_m4v3(totmat[3], par->obmat, vec); } break; case PARVERT3: ob_parvert3(ob, par, tmat); - Mat4MulSerie(totmat, par->obmat, tmat, + mul_serie_m4(totmat, par->obmat, tmat, NULL, NULL, NULL, NULL, NULL, NULL); break; case PARSKEL: - Mat4CpyMat4(totmat, par->obmat); + copy_m4_m4(totmat, par->obmat); break; } // total - Mat4MulSerie(tmat, totmat, ob->parentinv, + mul_serie_m4(tmat, totmat, ob->parentinv, NULL, NULL, NULL, NULL, NULL, NULL); - Mat4MulSerie(obmat, tmat, locmat, + mul_serie_m4(obmat, tmat, locmat, NULL, NULL, NULL, NULL, NULL, NULL); if (simul) { @@ -2057,7 +2057,7 @@ static void solve_parenting (Scene *scene, Object *ob, Object *par, float obmat[ } else{ // external usable originmat - Mat3CpyMat4(originmat, tmat); + copy_m3_m4(originmat, tmat); // origin, voor help line if( (ob->partype & 15)==PARSKEL ) { @@ -2076,9 +2076,9 @@ void solve_tracking (Object *ob, float targetmat[][4]) float totmat[3][3]; float tmat[4][4]; - VecSubf(vec, ob->obmat[3], targetmat[3]); - vectoquat(vec, ob->trackflag, ob->upflag, quat); - QuatToMat3(quat, totmat); + sub_v3_v3v3(vec, ob->obmat[3], targetmat[3]); + vec_to_quat( quat,vec, ob->trackflag, ob->upflag); + quat_to_mat3( totmat,quat); if(ob->parent && (ob->transflag & OB_POWERTRACK)) { /* 'temporal' : clear parent info */ @@ -2091,9 +2091,9 @@ void solve_tracking (Object *ob, float targetmat[][4]) tmat[3][2]= ob->obmat[3][2]; tmat[3][3]= ob->obmat[3][3]; } - else Mat4CpyMat4(tmat, ob->obmat); + else copy_m4_m4(tmat, ob->obmat); - Mat4MulMat34(ob->obmat, totmat, tmat); + mul_m4_m3m4(ob->obmat, totmat, tmat); } @@ -2165,9 +2165,9 @@ void what_does_parent(Scene *scene, Object *ob, Object *workob) { clear_workob(workob); - Mat4One(workob->obmat); - Mat4One(workob->parentinv); - Mat4One(workob->constinv); + unit_m4(workob->obmat); + unit_m4(workob->parentinv); + unit_m4(workob->constinv); workob->parent= ob->parent; workob->track= ob->track; @@ -2255,7 +2255,7 @@ void minmax_object(Object *ob, float *min, float *max) bb= *(cu->bb); for(a=0; a<8; a++) { - Mat4MulVecfl(ob->obmat, bb.vec[a]); + mul_m4_v3(ob->obmat, bb.vec[a]); DO_MINMAX(bb.vec[a], min, max); } break; @@ -2264,10 +2264,10 @@ void minmax_object(Object *ob, float *min, float *max) bPoseChannel *pchan; for(pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { VECCOPY(vec, pchan->pose_head); - Mat4MulVecfl(ob->obmat, vec); + mul_m4_v3(ob->obmat, vec); DO_MINMAX(vec, min, max); VECCOPY(vec, pchan->pose_tail); - Mat4MulVecfl(ob->obmat, vec); + mul_m4_v3(ob->obmat, vec); DO_MINMAX(vec, min, max); } break; @@ -2280,7 +2280,7 @@ void minmax_object(Object *ob, float *min, float *max) bb = *mesh_get_bb(ob); for(a=0; a<8; a++) { - Mat4MulVecfl(ob->obmat, bb.vec[a]); + mul_m4_v3(ob->obmat, bb.vec[a]); DO_MINMAX(bb.vec[a], min, max); } } @@ -2292,11 +2292,11 @@ void minmax_object(Object *ob, float *min, float *max) DO_MINMAX(ob->obmat[3], min, max); VECCOPY(vec, ob->obmat[3]); - VecAddf(vec, vec, ob->size); + add_v3_v3v3(vec, vec, ob->size); DO_MINMAX(vec, min, max); VECCOPY(vec, ob->obmat[3]); - VecSubf(vec, vec, ob->size); + sub_v3_v3v3(vec, vec, ob->size); DO_MINMAX(vec, min, max); break; } @@ -2347,11 +2347,11 @@ void object_handle_update(Scene *scene, Object *ob) // printf("ob proxy copy, lib ob %s proxy %s\n", ob->id.name, ob->proxy_from->id.name); if(ob->proxy_from->proxy_group) {/* transform proxy into group space */ Object *obg= ob->proxy_from->proxy_group; - Mat4Invert(obg->imat, obg->obmat); - Mat4MulMat4(ob->obmat, ob->proxy_from->obmat, obg->imat); + invert_m4_m4(obg->imat, obg->obmat); + mul_m4_m4m4(ob->obmat, ob->proxy_from->obmat, obg->imat); } else - Mat4CpyMat4(ob->obmat, ob->proxy_from->obmat); + copy_m4_m4(ob->obmat, ob->proxy_from->obmat); } else where_is_object(scene, ob); @@ -2532,7 +2532,7 @@ int ray_hit_boundbox(struct BoundBox *bb, float ray_start[3], float ray_normal[3 v1 = triangle_indexes[i][0]; v2 = triangle_indexes[i][1]; v3 = triangle_indexes[i][2]; - result = RayIntersectsTriangle(ray_start, ray_normal, bb->vec[v1], bb->vec[v2], bb->vec[v3], &lambda, NULL); + result = isect_ray_tri_v3(ray_start, ray_normal, bb->vec[v1], bb->vec[v2], bb->vec[v3], &lambda, NULL); } return result; diff --git a/source/blender/blenkernel/intern/particle.c b/source/blender/blenkernel/intern/particle.c index 6bd2a03a628..860533652ad 100644 --- a/source/blender/blenkernel/intern/particle.c +++ b/source/blender/blenkernel/intern/particle.c @@ -51,7 +51,7 @@ #include "DNA_smoke_types.h" #include "DNA_texture_types.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_dynstr.h" #include "BLI_kdtree.h" @@ -618,12 +618,12 @@ static float psys_render_projected_area(ParticleSystem *psys, float *center, flo /* transform to view space */ VECCOPY(co, center); co[3]= 1.0f; - Mat4MulVec4fl(data->viewmat, co); + mul_m4_v4(data->viewmat, co); /* compute two vectors orthogonal to view vector */ VECCOPY(view, co); - Normalize(view); - VecOrthoBasisf(view, ortho1, ortho2); + normalize_v3(view); + ortho_basis_v3v3_v3( ortho1, ortho2,view); /* compute on screen minification */ w= co[2]*data->winmat[2][3] + data->winmat[3][3]; @@ -637,7 +637,7 @@ static float psys_render_projected_area(ParticleSystem *psys, float *center, flo /* viewport of the screen test */ /* project point on screen */ - Mat4MulVec4fl(data->winmat, co); + mul_m4_v4(data->winmat, co); if(co[3] != 0.0f) { co[0]= 0.5f*data->winx*(1.0f + co[0]/co[3]); co[1]= 0.5f*data->winy*(1.0f + co[1]/co[3]); @@ -698,9 +698,9 @@ void psys_render_set(Object *ob, ParticleSystem *psys, float viewmat[][4], float psys->pathcachebufs.first = psys->pathcachebufs.last = NULL; psys->childcachebufs.first = psys->childcachebufs.last = NULL; - Mat4CpyMat4(data->winmat, winmat); - Mat4MulMat4(data->viewmat, ob->obmat, viewmat); - Mat4MulMat4(data->mat, data->viewmat, winmat); + copy_m4_m4(data->winmat, winmat); + mul_m4_m4m4(data->viewmat, ob->obmat, viewmat); + mul_m4_m4m4(data->mat, data->viewmat, winmat); data->winx= winx; data->winy= winy; @@ -828,11 +828,11 @@ int psys_render_simplify_distribution(ParticleThreadContext *ctx, int tot) if(mf->v4) { VECCOPY(co4, mvert[mf->v4].co); VECADD(facecenter[b], facecenter[b], co4); - facearea[b] += AreaQ3Dfl(co1, co2, co3, co4); + facearea[b] += area_quad_v3(co1, co2, co3, co4); facetotvert[b] += 4; } else { - facearea[b] += AreaT3Dfl(co1, co2, co3); + facearea[b] += area_tri_v3(co1, co2, co3); facetotvert[b] += 3; } } @@ -840,7 +840,7 @@ int psys_render_simplify_distribution(ParticleThreadContext *ctx, int tot) for(a=0; a<totorigface; a++) if(facetotvert[a] > 0) - VecMulf(facecenter[a], 1.0f/facetotvert[a]); + mul_v3_fl(facecenter[a], 1.0f/facetotvert[a]); /* for conversion from BU area / pixel area to reference screen size */ mesh_get_texspace(me, 0, 0, size); @@ -1007,7 +1007,7 @@ void psys_interpolate_particle(short type, ParticleKey keys[4], float dt, Partic float t[4]; if(type<0) { - VecfCubicInterpol(keys[1].co, keys[1].vel, keys[2].co, keys[2].vel, dt, result->co, result->vel); + interp_cubic_v3( result->co, result->vel,keys[1].co, keys[1].vel, keys[2].co, keys[2].vel, dt); } else { key_curve_position_weights(dt, t, type); @@ -1280,9 +1280,9 @@ static void do_particle_interpolation(ParticleSystem *psys, int p, ParticleData /* convert velocity to timestep size */ if(pind->keyed || pind->cache || point_vel){ - VecMulf(keys[1].vel, dfra / frs_sec); - VecMulf(keys[2].vel, dfra / frs_sec); - QuatInterpol(result->rot,keys[1].rot,keys[2].rot,keytime); + mul_v3_fl(keys[1].vel, dfra / frs_sec); + mul_v3_fl(keys[2].vel, dfra / frs_sec); + interp_qt_qtqt(result->rot,keys[1].rot,keys[2].rot,keytime); } /* now we should have in chronologiacl order k1<=k2<=t<=k3<=k4 with keytime between [0,1]->[k2,k3] (k1 & k4 used for cardinal & bspline interpolation)*/ @@ -1292,7 +1292,7 @@ static void do_particle_interpolation(ParticleSystem *psys, int p, ParticleData /* the velocity needs to be converted back from cubic interpolation */ if(pind->keyed || pind->cache || point_vel) - VecMulf(result->vel, frs_sec / dfra); + mul_v3_fl(result->vel, frs_sec / dfra); } /************************************************/ /* Particles on a dm */ @@ -1312,14 +1312,14 @@ void psys_interpolate_face(MVert *mvert, MFace *mface, MTFace *tface, float (*or VECCOPY(n1,(mvert+mface->v1)->no); VECCOPY(n2,(mvert+mface->v2)->no); VECCOPY(n3,(mvert+mface->v3)->no); - Normalize(n1); - Normalize(n2); - Normalize(n3); + normalize_v3(n1); + normalize_v3(n2); + normalize_v3(n3); if(mface->v4) { v4= (mvert+mface->v4)->co; VECCOPY(n4,(mvert+mface->v4)->no); - Normalize(n4); + normalize_v3(n4); vec[0]= w[0]*v1[0] + w[1]*v2[0] + w[2]*v3[0] + w[3]*v4[0]; vec[1]= w[0]*v1[1] + w[1]*v2[1] + w[2]*v3[1] + w[3]*v4[1]; @@ -1332,7 +1332,7 @@ void psys_interpolate_face(MVert *mvert, MFace *mface, MTFace *tface, float (*or nor[2]= w[0]*n1[2] + w[1]*n2[2] + w[2]*n3[2] + w[3]*n4[2]; } else - CalcNormFloat4(v1,v2,v3,v4,nor); + normal_quad_v3(nor,v1,v2,v3,v4); } } else { @@ -1347,7 +1347,7 @@ void psys_interpolate_face(MVert *mvert, MFace *mface, MTFace *tface, float (*or nor[2]= w[0]*n1[2] + w[1]*n2[2] + w[2]*n3[2]; } else - CalcNormFloat(v1,v2,v3,nor); + normal_tri_v3(nor,v1,v2,v3); } } @@ -1361,11 +1361,11 @@ void psys_interpolate_face(MVert *mvert, MFace *mface, MTFace *tface, float (*or } else{ uv1= tuv[0]; uv2= tuv[1]; uv3= tuv[2]; uv4= tuv[3]; - spheremap(v1[0], v1[1], v1[2], uv1, uv1+1); - spheremap(v2[0], v2[1], v2[2], uv2, uv2+1); - spheremap(v3[0], v3[1], v3[2], uv3, uv3+1); + map_to_sphere( uv1, uv1+1,v1[0], v1[1], v1[2]); + map_to_sphere( uv2, uv2+1,v2[0], v2[1], v2[2]); + map_to_sphere( uv3, uv3+1,v3[0], v3[1], v3[2]); if(v4) - spheremap(v4[0], v4[1], v4[2], uv4, uv4+1); + map_to_sphere( uv4, uv4+1,v4[0], v4[1], v4[2]); } if(v4){ @@ -1375,8 +1375,8 @@ void psys_interpolate_face(MVert *mvert, MFace *mface, MTFace *tface, float (*or t1= uv3[1] - uv1[1]; t2= uv4[1] - uv1[1]; - VecSubf(e1, v3, v1); - VecSubf(e2, v4, v1); + sub_v3_v3v3(e1, v3, v1); + sub_v3_v3v3(e2, v4, v1); } else{ s1= uv2[0] - uv1[0]; @@ -1385,8 +1385,8 @@ void psys_interpolate_face(MVert *mvert, MFace *mface, MTFace *tface, float (*or t1= uv2[1] - uv1[1]; t2= uv3[1] - uv1[1]; - VecSubf(e1, v2, v1); - VecSubf(e2, v3, v1); + sub_v3_v3v3(e1, v2, v1); + sub_v3_v3v3(e2, v3, v1); } vtan[0] = (s1*e2[0] - s2*e1[0]); @@ -1411,7 +1411,7 @@ void psys_interpolate_face(MVert *mvert, MFace *mface, MTFace *tface, float (*or orco[2]= w[0]*o1[2] + w[1]*o2[2] + w[2]*o3[2] + w[3]*o4[2]; if(ornor) - CalcNormFloat4(o1, o2, o3, o4, ornor); + normal_quad_v3( ornor,o1, o2, o3, o4); } else { orco[0]= w[0]*o1[0] + w[1]*o2[0] + w[2]*o3[0]; @@ -1419,7 +1419,7 @@ void psys_interpolate_face(MVert *mvert, MFace *mface, MTFace *tface, float (*or orco[2]= w[0]*o1[2] + w[1]*o2[2] + w[2]*o3[2]; if(ornor) - CalcNormFloat(o1, o2, o3, ornor); + normal_tri_v3( ornor,o1, o2, o3); } } else { @@ -1517,10 +1517,10 @@ static void psys_origspace_to_w(OrigSpaceFace *osface, int quad, float *w, float if(quad) { v[3][0]= osface->uv[3][0]; v[3][1]= osface->uv[3][1]; v[3][2]= 0.0f; - MeanValueWeights(v, 4, co, neww); + interp_weights_poly_v3( neww,v, 4, co); } else { - MeanValueWeights(v, 3, co, neww); + interp_weights_poly_v3( neww,v, 3, co); neww[3]= 0.0f; } } @@ -1566,10 +1566,10 @@ int psys_particle_dm_face_lookup(Object *ob, DerivedMesh *dm, int index, float * /* check that this intersects - Its possible this misses :/ - * could also check its not between */ if(quad) { - if(IsectPQ2Df(uv, faceuv[0], faceuv[1], faceuv[2], faceuv[3])) + if(isect_point_quad_v2(uv, faceuv[0], faceuv[1], faceuv[2], faceuv[3])) return findex; } - else if(IsectPT2Df(uv, faceuv[0], faceuv[1], faceuv[2])) + else if(isect_point_tri_v2(uv, faceuv[0], faceuv[1], faceuv[2])) return findex; } } @@ -1582,10 +1582,10 @@ int psys_particle_dm_face_lookup(Object *ob, DerivedMesh *dm, int index, float * /* check that this intersects - Its possible this misses :/ - * could also check its not between */ if(quad) { - if(IsectPQ2Df(uv, faceuv[0], faceuv[1], faceuv[2], faceuv[3])) + if(isect_point_quad_v2(uv, faceuv[0], faceuv[1], faceuv[2], faceuv[3])) return findex; } - else if(IsectPT2Df(uv, faceuv[0], faceuv[1], faceuv[2])) + else if(isect_point_tri_v2(uv, faceuv[0], faceuv[1], faceuv[2])) return findex; } } @@ -1678,7 +1678,7 @@ void psys_particle_on_dm(DerivedMesh *dm, int from, int index, int index_dmcache if(nor) { dm->getVertNo(dm,mapindex,nor); - Normalize(nor); + normalize_v3(nor); } if(orco) @@ -1686,7 +1686,7 @@ void psys_particle_on_dm(DerivedMesh *dm, int from, int index, int index_dmcache if(ornor) { dm->getVertNo(dm,mapindex,nor); - Normalize(nor); + normalize_v3(nor); } if(utan && vtan) { @@ -1711,8 +1711,8 @@ void psys_particle_on_dm(DerivedMesh *dm, int from, int index, int index_dmcache if(nor) VECCOPY(nor,tmpnor); - Normalize(tmpnor); - VecMulf(tmpnor,-foffset); + normalize_v3(tmpnor); + mul_v3_fl(tmpnor,-foffset); VECADD(vec,vec,tmpnor); } else @@ -1835,42 +1835,42 @@ static void do_prekink(ParticleKey *state, ParticleKey *par, float *par_rot, flo if(par_rot) QUATCOPY(q2,par_rot) else - vectoquat(par->vel,axis,(axis+1)%3, q2); - QuatMulVecf(q2,vec); - VecMulf(vec,amplitude); + vec_to_quat( q2,par->vel,axis,(axis+1)%3); + mul_qt_v3(q2,vec); + mul_v3_fl(vec,amplitude); VECADD(state->co,state->co,vec); VECSUB(vec,state->co,par->co); if(t!=0.0) - VecRotToQuat(par->vel,t,q1); + axis_angle_to_quat(q1,par->vel,t); - QuatMulVecf(q1,vec); + mul_qt_v3(q1,vec); VECADD(state->co,par->co,vec); break; case PART_KINK_RADIAL: VECSUB(vec,state->co,par->co); - Normalize(vec); - VecMulf(vec,amplitude*(float)sin(t)); + normalize_v3(vec); + mul_v3_fl(vec,amplitude*(float)sin(t)); VECADD(state->co,state->co,vec); break; case PART_KINK_WAVE: vec[axis]=1.0; if(obmat) - Mat4Mul3Vecfl(obmat,vec); + mul_mat3_m4_v3(obmat,vec); if(par_rot) - QuatMulVecf(par_rot,vec); + mul_qt_v3(par_rot,vec); - Projf(q1,vec,par->vel); + project_v3_v3v3(q1,vec,par->vel); VECSUB(vec,vec,q1); - Normalize(vec); + normalize_v3(vec); - VecMulf(vec,amplitude*(float)sin(t)); + mul_v3_fl(vec,amplitude*(float)sin(t)); VECADD(state->co,state->co,vec); break; @@ -1884,46 +1884,46 @@ static void do_prekink(ParticleKey *state, ParticleKey *par, float *par_rot, flo if(par_rot) QUATCOPY(q2,par_rot) else - vectoquat(par->vel,axis,(axis+1)%3,q2); - QuatMulVecf(q2,y_vec); - QuatMulVecf(q2,z_vec); + vec_to_quat(q2,par->vel,axis,(axis+1)%3); + mul_qt_v3(q2,y_vec); + mul_qt_v3(q2,z_vec); VECSUB(vec_from_par,state->co,par->co); VECCOPY(vec_one,vec_from_par); - radius=Normalize(vec_one); + radius=normalize_v3(vec_one); - inp_y=Inpf(y_vec,vec_one); - inp_z=Inpf(z_vec,vec_one); + inp_y=dot_v3v3(y_vec,vec_one); + inp_z=dot_v3v3(z_vec,vec_one); if(inp_y>0.5){ VECCOPY(state_co,y_vec); - VecMulf(y_vec,amplitude*(float)cos(t)); - VecMulf(z_vec,amplitude/2.0f*(float)sin(2.0f*t)); + mul_v3_fl(y_vec,amplitude*(float)cos(t)); + mul_v3_fl(z_vec,amplitude/2.0f*(float)sin(2.0f*t)); } else if(inp_z>0.0){ VECCOPY(state_co,z_vec); - VecMulf(state_co,(float)sin(M_PI/3.0f)); + mul_v3_fl(state_co,(float)sin(M_PI/3.0f)); VECADDFAC(state_co,state_co,y_vec,-0.5f); - VecMulf(y_vec,-amplitude*(float)cos(t + M_PI/3.0f)); - VecMulf(z_vec,amplitude/2.0f*(float)cos(2.0f*t + M_PI/6.0f)); + mul_v3_fl(y_vec,-amplitude*(float)cos(t + M_PI/3.0f)); + mul_v3_fl(z_vec,amplitude/2.0f*(float)cos(2.0f*t + M_PI/6.0f)); } else{ VECCOPY(state_co,z_vec); - VecMulf(state_co,-(float)sin(M_PI/3.0f)); + mul_v3_fl(state_co,-(float)sin(M_PI/3.0f)); VECADDFAC(state_co,state_co,y_vec,-0.5f); - VecMulf(y_vec,amplitude*(float)-sin(t+M_PI/6.0f)); - VecMulf(z_vec,amplitude/2.0f*(float)-sin(2.0f*t+M_PI/3.0f)); + mul_v3_fl(y_vec,amplitude*(float)-sin(t+M_PI/6.0f)); + mul_v3_fl(z_vec,amplitude/2.0f*(float)-sin(2.0f*t+M_PI/3.0f)); } - VecMulf(state_co,amplitude); + mul_v3_fl(state_co,amplitude); VECADD(state_co,state_co,par->co); VECSUB(vec_from_par,state->co,state_co); - length=Normalize(vec_from_par); - VecMulf(vec_from_par,MIN2(length,amplitude/2.0f)); + length=normalize_v3(vec_from_par); + mul_v3_fl(vec_from_par,MIN2(length,amplitude/2.0f)); VECADD(state_co,par->co,y_vec); VECADD(state_co,state_co,z_vec); @@ -1934,7 +1934,7 @@ static void do_prekink(ParticleKey *state, ParticleKey *par, float *par_rot, flo if(t<shape){ shape=t/shape; shape=(float)sqrt((double)shape); - VecLerpf(state->co,state->co,state_co,shape); + interp_v3_v3v3(state->co,state->co,state_co,shape); } else{ VECCOPY(state->co,state_co); @@ -1958,7 +1958,7 @@ static void do_clump(ParticleKey *state, ParticleKey *par, float time, float clu clump = -clumpfac*pa_clump*(float)pow(1.0-(double)time,(double)cpow); else clump = clumpfac*pa_clump*(float)pow((double)time,(double)cpow); - VecLerpf(state->co,state->co,par->co,clump); + interp_v3_v3v3(state->co,state->co,par->co,clump); } } void precalc_guides(ParticleSimulationData *sim, ListBase *effectors) @@ -1990,7 +1990,7 @@ void precalc_guides(ParticleSimulationData *sim, ListBase *effectors) VECSUB(efd.vec_to_point, state.co, eff->guide_loc); VECCOPY(efd.nor, eff->guide_dir); - efd.distance = VecLength(efd.vec_to_point); + efd.distance = len_v3(efd.vec_to_point); VECCOPY(data->vec_to_point, efd.vec_to_point); data->strength = effector_falloff(eff, &efd, &point, weights); @@ -2037,33 +2037,33 @@ int do_guides(ListBase *effectors, ParticleKey *state, int index, float time) return 0; } - Mat4MulVecfl(eff->ob->obmat, guidevec); - Mat4Mul3Vecfl(eff->ob->obmat, guidedir); + mul_m4_v3(eff->ob->obmat, guidevec); + mul_mat3_m4_v3(eff->ob->obmat, guidedir); - Normalize(guidedir); + normalize_v3(guidedir); VECCOPY(vec_to_point, data->vec_to_point); if(guidetime != 0.0){ /* curve direction */ - Crossf(temp, eff->guide_dir, guidedir); - angle = Inpf(eff->guide_dir, guidedir)/(VecLength(eff->guide_dir)); + cross_v3_v3v3(temp, eff->guide_dir, guidedir); + angle = dot_v3v3(eff->guide_dir, guidedir)/(len_v3(eff->guide_dir)); angle = saacos(angle); - VecRotToQuat(temp, angle, rot2); - QuatMulVecf(rot2, vec_to_point); + axis_angle_to_quat( rot2,temp, angle); + mul_qt_v3(rot2, vec_to_point); /* curve tilt */ - VecRotToQuat(guidedir, guidevec[3] - eff->guide_loc[3], rot2); - QuatMulVecf(rot2, vec_to_point); + axis_angle_to_quat( rot2,guidedir, guidevec[3] - eff->guide_loc[3]); + mul_qt_v3(rot2, vec_to_point); } /* curve taper */ if(cu->taperobj) - VecMulf(vec_to_point, calc_taper(eff->scene, cu->taperobj, (int)(data->strength*guidetime*100.0), 100)); + mul_v3_fl(vec_to_point, calc_taper(eff->scene, cu->taperobj, (int)(data->strength*guidetime*100.0), 100)); else{ /* curve size*/ if(cu->flag & CU_PATH_RADIUS) { - VecMulf(vec_to_point, radius); + mul_v3_fl(vec_to_point, radius); } } par.co[0] = par.co[1] = par.co[2] = 0.0f; @@ -2081,13 +2081,13 @@ int do_guides(ListBase *effectors, ParticleKey *state, int index, float time) if(totstrength != 0.0){ if(totstrength > 1.0) - VecMulf(effect, 1.0f / totstrength); + mul_v3_fl(effect, 1.0f / totstrength); CLAMP(totstrength, 0.0, 1.0); //VECADD(effect,effect,pa_zero); - VecLerpf(state->co, state->co, effect, totstrength); + interp_v3_v3v3(state->co, state->co, effect, totstrength); - Normalize(veffect); - VecMulf(veffect, VecLength(state->vel)); + normalize_v3(veffect); + mul_v3_fl(veffect, len_v3(state->vel)); VECCOPY(state->vel, veffect); return 1; } @@ -2102,7 +2102,7 @@ static void do_rough(float *loc, float mat[4][4], float t, float fac, float size if((float)fabs((float)(-1.5+loc[0]+loc[1]+loc[2]))<1.5f*thres) return; VECCOPY(rco,loc); - VecMulf(rco,t); + mul_v3_fl(rco,t); rough[0]=-1.0f+2.0f*BLI_gTurbulence(size, rco[0], rco[1], rco[2], 2,0,2); rough[1]=-1.0f+2.0f*BLI_gTurbulence(size, rco[1], rco[2], rco[0], 2,0,2); rough[2]=-1.0f+2.0f*BLI_gTurbulence(size, rco[2], rco[0], rco[1], 2,0,2); @@ -2117,10 +2117,10 @@ static void do_rough_end(float *loc, float mat[4][4], float t, float fac, float float roughfac; roughfac=fac*(float)pow((double)t,shape); - Vec2Copyf(rough,loc); + copy_v2_v2(rough,loc); rough[0]=-1.0f+2.0f*rough[0]; rough[1]=-1.0f+2.0f*rough[1]; - Vec2Mulf(rough,roughfac); + mul_v2_fl(rough,roughfac); VECADDFAC(state->co,state->co,mat[0],rough[0]); VECADDFAC(state->co,state->co,mat[1],rough[1]); @@ -2142,23 +2142,23 @@ static void do_path_effectors(ParticleSimulationData *sim, int i, ParticleCacheK pd_point_from_particle(sim, sim->psys->particles+i, &eff_key, &epoint); pdDoEffectors(sim->psys->effectors, sim->colliders, sim->psys->part->effector_weights, &epoint, force, NULL); - VecMulf(force, effector*pow((float)k / (float)steps, 100.0f * sim->psys->part->eff_hair) / (float)steps); + mul_v3_fl(force, effector*pow((float)k / (float)steps, 100.0f * sim->psys->part->eff_hair) / (float)steps); - VecAddf(force, force, vec); + add_v3_v3v3(force, force, vec); - Normalize(force); + normalize_v3(force); VECADDFAC(ca->co, (ca-1)->co, force, *length); if(k < steps) { - VecSubf(vec, (ca+1)->co, ca->co); - *length = VecLength(vec); + sub_v3_v3v3(vec, (ca+1)->co, ca->co); + *length = len_v3(vec); } } static int check_path_length(int k, ParticleCacheKey *keys, ParticleCacheKey *state, float max_length, float *cur_length, float length, float *dvec) { if(*cur_length + length > max_length){ - VecMulf(dvec, (max_length - *cur_length) / length); + mul_v3_fl(dvec, (max_length - *cur_length) / length); VECADD(state->co, (state - 1)->co, dvec); keys->steps = k; /* something over the maximum step value */ @@ -2172,13 +2172,13 @@ static int check_path_length(int k, ParticleCacheKey *keys, ParticleCacheKey *st static void offset_child(ChildParticle *cpa, ParticleKey *par, ParticleKey *child, float flat, float radius) { VECCOPY(child->co,cpa->fuv); - VecMulf(child->co,radius); + mul_v3_fl(child->co,radius); child->co[0]*=flat; VECCOPY(child->vel,par->vel); - QuatMulVecf(par->rot,child->co); + mul_qt_v3(par->rot,child->co); QUATCOPY(child->rot,par->rot); @@ -2247,14 +2247,14 @@ static void get_strand_normal(Material *ma, float *surfnor, float surfdist, floa return; if(ma->mode & MA_STR_SURFDIFF) { - Crossf(cross, surfnor, nor); - Crossf(nstrand, nor, cross); + cross_v3_v3v3(cross, surfnor, nor); + cross_v3_v3v3(nstrand, nor, cross); blend= INPR(nstrand, surfnor); CLAMP(blend, 0.0f, 1.0f); - VecLerpf(vnor, nstrand, surfnor, blend); - Normalize(vnor); + interp_v3_v3v3(vnor, nstrand, surfnor, blend); + normalize_v3(vnor); } else VECCOPY(vnor, nor) @@ -2262,8 +2262,8 @@ static void get_strand_normal(Material *ma, float *surfnor, float surfdist, floa if(ma->strand_surfnor > 0.0f) { if(ma->strand_surfnor > surfdist) { blend= (ma->strand_surfnor - surfdist)/ma->strand_surfnor; - VecLerpf(vnor, vnor, surfnor, blend); - Normalize(vnor); + interp_v3_v3v3(vnor, vnor, surfnor, blend); + normalize_v3(vnor); } } @@ -2276,7 +2276,7 @@ static int psys_threads_init_path(ParticleThread *threads, Scene *scene, float c /* Object *ob= ctx->sim.ob; */ ParticleSystem *psys= ctx->sim.psys; ParticleSettings *part = psys->part; - ParticleEditSettings *pset = &scene->toolsettings->particle; +/* ParticleEditSettings *pset = &scene->toolsettings->particle; */ int totparent=0, between=0; int steps = (int)pow(2.0, (double)part->draw_step); int totchild = psys->totchild; @@ -2440,7 +2440,7 @@ static void psys_thread_create_path(ParticleThread *thread, struct ChildParticle if(part->path_start==0.0f) { /* we need to save the actual root position of the child for positioning it accurately to the surface of the emitter */ VECCOPY(cpa_1st,co); - Mat4MulVecfl(ob->obmat,cpa_1st); + mul_m4_v3(ob->obmat,cpa_1st); } pa = psys->particles + cpa->parent; @@ -2538,8 +2538,8 @@ static void psys_thread_create_path(ParticleThread *thread, struct ChildParticle do_path_effectors(&ctx->sim, cpa->pa[0], state, k, ctx->steps, keys->co, ptex.effector, 0.0f, ctx->cfra, &eff_length, eff_vec); } else { - VecSubf(eff_vec,(state+1)->co,state->co); - eff_length= VecLength(eff_vec); + sub_v3_v3v3(eff_vec,(state+1)->co,state->co); + eff_length= len_v3(eff_vec); } } } @@ -2599,17 +2599,17 @@ static void psys_thread_create_path(ParticleThread *thread, struct ChildParticle // } // if(i<psys->totpart) - // VecLerpf(state->co, (pcache[i] + k)->co, state->co, branchfac); + // interp_v3_v3v3(state->co, (pcache[i] + k)->co, state->co, branchfac); // else // /* this is not threadsafe, but should only happen for // * branching particles particles, which are not threaded */ - // VecLerpf(state->co, (cache[i - psys->totpart] + k)->co, state->co, branchfac); + // interp_v3_v3v3(state->co, (cache[i - psys->totpart] + k)->co, state->co, branchfac); //} /* we have to correct velocity because of kink & clump */ if(k>1){ VECSUB((state-1)->vel,state->co,(state-2)->co); - VecMulf((state-1)->vel,0.5); + mul_v3_fl((state-1)->vel,0.5); if(ctx->ma && (part->draw & PART_DRAW_MAT_COL)) get_strand_normal(ctx->ma, ornor, cur_length, (state-1)->vel); @@ -2841,9 +2841,9 @@ void psys_cache_paths(ParticleSimulationData *sim, float cfra) /* dynamic hair is in object space */ /* keyed and baked are allready in global space */ if(hair_dm) - Mat4MulVecfl(sim->ob->obmat, result.co); + mul_m4_v3(sim->ob->obmat, result.co); else if(!keyed && !baked && !(psys->flag & PSYS_GLOBAL_HAIR)) - Mat4MulVecfl(hairmat, result.co); + mul_m4_v3(hairmat, result.co); VECCOPY(ca->co, result.co); VECCOPY(ca->col, col); @@ -2851,8 +2851,8 @@ void psys_cache_paths(ParticleSimulationData *sim, float cfra) /*--modify paths and calculate rotation & velocity--*/ - VecSubf(vec,(cache[p]+1)->co,cache[p]->co); - length = VecLength(vec); + sub_v3_v3v3(vec,(cache[p]+1)->co,cache[p]->co); + length = len_v3(vec); effector= 1.0f; if(vg_effector) @@ -2882,7 +2882,7 @@ void psys_cache_paths(ParticleSimulationData *sim, float cfra) /* calculate initial tangent for incremental rotations */ VECSUB(tangent, ca->co, (ca - 1)->co); VECCOPY(prev_tangent, tangent); - Normalize(prev_tangent); + normalize_v3(prev_tangent); /* First rotation is based on emitting face orientation. */ /* This is way better than having flipping rotations resulting */ @@ -2890,13 +2890,13 @@ void psys_cache_paths(ParticleSimulationData *sim, float cfra) /* It's not an ideal solution though since it disregards the */ /* initial tangent, but taking that in to account will allow */ /* the possibility of flipping again. -jahka */ - Mat3ToQuat_is_ok(rotmat, (ca-1)->rot); + mat3_to_quat_is_ok( (ca-1)->rot,rotmat); } else { VECSUB(tangent, ca->co, (ca - 1)->co); - Normalize(tangent); + normalize_v3(tangent); - cosangle= Inpf(tangent, prev_tangent); + cosangle= dot_v3v3(tangent, prev_tangent); /* note we do the comparison on cosangle instead of * angle, since floating point accuracy makes it give @@ -2906,9 +2906,9 @@ void psys_cache_paths(ParticleSimulationData *sim, float cfra) } else { angle= saacos(cosangle); - Crossf(normal, prev_tangent, tangent); - VecRotToQuat(normal, angle, q); - QuatMul((ca - 1)->rot, q, (ca - 2)->rot); + cross_v3_v3v3(normal, prev_tangent, tangent); + axis_angle_to_quat( q,normal, angle); + mul_qt_qtqt((ca - 1)->rot, q, (ca - 2)->rot); } VECCOPY(prev_tangent, tangent); @@ -3034,7 +3034,7 @@ void psys_cache_edit_paths(Scene *scene, Object *ob, PTCacheEdit *edit, float cf /* non-hair points are allready in global space */ if(psys && !(psys->flag & PSYS_GLOBAL_HAIR)) { - Mat4MulVecfl(hairmat, result.co); + mul_m4_v3(hairmat, result.co); /* create rotations for proper creation of children */ if(k) { @@ -3044,7 +3044,7 @@ void psys_cache_edit_paths(Scene *scene, Object *ob, PTCacheEdit *edit, float cf /* calculate initial tangent for incremental rotations */ VECSUB(tangent, ca->co, (ca - 1)->co); VECCOPY(prev_tangent, tangent); - Normalize(prev_tangent); + normalize_v3(prev_tangent); /* First rotation is based on emitting face orientation. */ /* This is way better than having flipping rotations resulting */ @@ -3052,13 +3052,13 @@ void psys_cache_edit_paths(Scene *scene, Object *ob, PTCacheEdit *edit, float cf /* It's not an ideal solution though since it disregards the */ /* initial tangent, but taking that in to account will allow */ /* the possibility of flipping again. -jahka */ - Mat3ToQuat_is_ok(rotmat, (ca-1)->rot); + mat3_to_quat_is_ok( (ca-1)->rot,rotmat); } else { VECSUB(tangent, ca->co, (ca - 1)->co); - Normalize(tangent); + normalize_v3(tangent); - cosangle= Inpf(tangent, prev_tangent); + cosangle= dot_v3v3(tangent, prev_tangent); /* note we do the comparison on cosangle instead of * angle, since floating point accuracy makes it give @@ -3068,9 +3068,9 @@ void psys_cache_edit_paths(Scene *scene, Object *ob, PTCacheEdit *edit, float cf } else { angle= saacos(cosangle); - Crossf(normal, prev_tangent, tangent); - VecRotToQuat(normal, angle, q); - QuatMul((ca - 1)->rot, q, (ca - 2)->rot); + cross_v3_v3v3(normal, prev_tangent, tangent); + axis_angle_to_quat( q,normal, angle); + mul_qt_qtqt((ca - 1)->rot, q, (ca - 2)->rot); } VECCOPY(prev_tangent, tangent); @@ -3094,13 +3094,13 @@ void psys_cache_edit_paths(Scene *scene, Object *ob, PTCacheEdit *edit, float cf } else{ keytime = (t - (*pind.ekey[0]->time))/((*pind.ekey[1]->time) - (*pind.ekey[0]->time)); - VecLerpf(ca->col, sel_col, nosel_col, keytime); + interp_v3_v3v3(ca->col, sel_col, nosel_col, keytime); } } else{ if((ekey + (pind.ekey[1] - point->keys))->flag & PEK_SELECT){ keytime = (t - (*pind.ekey[0]->time))/((*pind.ekey[1]->time) - (*pind.ekey[0]->time)); - VecLerpf(ca->col, nosel_col, sel_col, keytime); + interp_v3_v3v3(ca->col, nosel_col, sel_col, keytime); } else{ VECCOPY(ca->col, nosel_col); @@ -3144,12 +3144,12 @@ static void key_from_object(Object *ob, ParticleKey *key){ VECADD(key->vel,key->vel,key->co); - Mat4MulVecfl(ob->obmat,key->co); - Mat4MulVecfl(ob->obmat,key->vel); - Mat4ToQuat(ob->obmat,q); + mul_m4_v3(ob->obmat,key->co); + mul_m4_v3(ob->obmat,key->vel); + mat4_to_quat(q,ob->obmat); VECSUB(key->vel,key->vel,key->co); - QuatMul(key->rot,q,key->rot); + mul_qt_qtqt(key->rot,q,key->rot); } #endif @@ -3161,7 +3161,7 @@ static void triatomat(float *v1, float *v2, float *v3, float (*uv)[2], float mat mat[3][3]= 1.0f; /* first axis is the normal */ - CalcNormFloat(v1, v2, v3, mat[2]); + normal_tri_v3( mat[2],v1, v2, v3); /* second axis along (1, 0) in uv space */ if(uv) { @@ -3180,18 +3180,18 @@ static void triatomat(float *v1, float *v2, float *v3, float (*uv)[2], float mat mat[1][0]= w1*(v2[0] - v1[0]) + w2*(v3[0] - v1[0]); mat[1][1]= w1*(v2[1] - v1[1]) + w2*(v3[1] - v1[1]); mat[1][2]= w1*(v2[2] - v1[2]) + w2*(v3[2] - v1[2]); - Normalize(mat[1]); + normalize_v3(mat[1]); } else mat[1][0]= mat[1][1]= mat[1][2]= 0.0f; } else { - VecSubf(mat[1], v2, v1); - Normalize(mat[1]); + sub_v3_v3v3(mat[1], v2, v1); + normalize_v3(mat[1]); } /* third as a cross product */ - Crossf(mat[0], mat[1], mat[2]); + cross_v3_v3v3(mat[0], mat[1], mat[2]); } static void psys_face_mat(Object *ob, DerivedMesh *dm, ParticleData *pa, float mat[][4], int orco) @@ -3203,7 +3203,7 @@ static void psys_face_mat(Object *ob, DerivedMesh *dm, ParticleData *pa, float m int i = pa->num_dmcache==DMCACHE_NOTFOUND ? pa->num : pa->num_dmcache; - if (i==-1 || i >= dm->getNumFaces(dm)) { Mat4One(mat); return; } + if (i==-1 || i >= dm->getNumFaces(dm)) { unit_m4(mat); return; } mface=dm->getFaceData(dm,i,CD_MFACE); osface=dm->getFaceData(dm,i,CD_ORIGSPACE); @@ -3252,8 +3252,8 @@ void psys_vec_rot_to_face(DerivedMesh *dm, ParticleData *pa, float *vec) float mat[4][4]; psys_face_mat(0, dm, pa, mat, 0); - Mat4Transp(mat); /* cheap inverse for rotation matrix */ - Mat4Mul3Vecfl(mat, vec); + transpose_m4(mat); /* cheap inverse for rotation matrix */ + mul_mat3_m4_v3(mat, vec); } void psys_mat_hair_to_global(Object *ob, DerivedMesh *dm, short from, ParticleData *pa, float hairmat[][4]) @@ -3262,7 +3262,7 @@ void psys_mat_hair_to_global(Object *ob, DerivedMesh *dm, short from, ParticleDa psys_mat_hair_to_object(ob, dm, from, pa, facemat); - Mat4MulMat4(hairmat, facemat, ob->obmat); + mul_m4_m4m4(hairmat, facemat, ob->obmat); } /************************************************/ @@ -3334,6 +3334,8 @@ void object_remove_particle_system(Scene *scene, Object *ob) if(ob->particlesystem.first) ((ParticleSystem *) ob->particlesystem.first)->flag |= PSYS_CURRENT; + else + ob->mode &= ~OB_MODE_PARTICLE_EDIT; DAG_scene_sort(scene); DAG_id_flush_update(&ob->id, OB_RECALC_DATA); @@ -3847,8 +3849,8 @@ void psys_get_particle_on_path(ParticleSimulationData *sim, int p, ParticleKey * if(!keyed && !cached) { if((pa->flag & PARS_REKEY)==0) { psys_mat_hair_to_global(sim->ob, sim->psmd->dm, part->from, pa, hairmat); - Mat4MulVecfl(hairmat, state->co); - Mat4Mul3Vecfl(hairmat, state->vel); + mul_m4_v3(hairmat, state->co); + mul_mat3_m4_v3(hairmat, state->vel); if(sim->psys->effectors && (part->flag & PART_CHILD_GUIDE)==0) { do_guides(sim->psys->effectors, state, p, state->time); @@ -3861,7 +3863,7 @@ void psys_get_particle_on_path(ParticleSimulationData *sim, int p, ParticleKey * } } else if(totchild){ - //Mat4Invert(imat,ob->obmat); + //invert_m4_m4(imat,ob->obmat); cpa=psys->child+p-totpart; @@ -3900,7 +3902,7 @@ void psys_get_particle_on_path(ParticleSimulationData *sim, int p, ParticleKey * /* we need to save the actual root position of the child for positioning it accurately to the surface of the emitter */ //VECCOPY(cpa_1st,co); - //Mat4MulVecfl(ob->obmat,cpa_1st); + //mul_m4_v3(ob->obmat,cpa_1st); pa = psys->particles + cpa->parent; @@ -3977,22 +3979,22 @@ void psys_get_particle_on_path(ParticleSimulationData *sim, int p, ParticleKey * /* try to estimate correct velocity */ if(vel){ ParticleKey tstate; - float length = VecLength(state->vel); + float length = len_v3(state->vel); if(t>=0.001f){ tstate.time=t-0.001f; psys_get_particle_on_path(sim,p,&tstate,0); VECSUB(state->vel,state->co,tstate.co); - Normalize(state->vel); + normalize_v3(state->vel); } else{ tstate.time=t+0.001f; psys_get_particle_on_path(sim,p,&tstate,0); VECSUB(state->vel,tstate.co,state->co); - Normalize(state->vel); + normalize_v3(state->vel); } - VecMulf(state->vel, length); + mul_v3_fl(state->vel, length); } } } @@ -4099,16 +4101,16 @@ int psys_get_particle_state(ParticleSimulationData *sim, int p, ParticleKey *sta keytime = (state->time - keys[1].time) / dfra; /* convert velocity to timestep size */ - VecMulf(keys[1].vel, dfra * timestep); - VecMulf(keys[2].vel, dfra * timestep); + mul_v3_fl(keys[1].vel, dfra * timestep); + mul_v3_fl(keys[2].vel, dfra * timestep); psys_interpolate_particle(-1, keys, keytime, state, 1); /* convert back to real velocity */ - VecMulf(state->vel, 1.0f / (dfra * timestep)); + mul_v3_fl(state->vel, 1.0f / (dfra * timestep)); - VecLerpf(state->ave, keys[1].ave, keys[2].ave, keytime); - QuatInterpol(state->rot, keys[1].rot, keys[2].rot, keytime); + interp_v3_v3v3(state->ave, keys[1].ave, keys[2].ave, keytime); + interp_qt_qtqt(state->rot, keys[1].rot, keys[2].rot, keytime); } } else { @@ -4182,8 +4184,8 @@ void psys_get_dupli_path_transform(ParticleSimulationData *sim, ParticleData *pa float loc[3], nor[3], vec[3], side[3], len, obrotmat[4][4], qmat[4][4]; float xvec[3] = {-1.0, 0.0, 0.0}, q[4]; - VecSubf(vec, (cache+cache->steps-1)->co, cache->co); - len= Normalize(vec); + sub_v3_v3v3(vec, (cache+cache->steps-1)->co, cache->co); + len= normalize_v3(vec); if(pa) psys_particle_on_emitter(psmd,sim->psys->part->from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,loc,nor,0,0,0,0); @@ -4196,17 +4198,17 @@ void psys_get_dupli_path_transform(ParticleSimulationData *sim, ParticleData *pa if(!pa) pa= psys->particles+cpa->pa[0]; - vectoquat(xvec, ob->trackflag, ob->upflag, q); - QuatToMat4(q, obrotmat); + vec_to_quat( q,xvec, ob->trackflag, ob->upflag); + quat_to_mat4( obrotmat,q); obrotmat[3][3]= 1.0f; - QuatToMat4(pa->state.rot, qmat); - Mat4MulMat4(mat, obrotmat, qmat); + quat_to_mat4( qmat,pa->state.rot); + mul_m4_m4m4(mat, obrotmat, qmat); } else { /* make sure that we get a proper side vector */ - if(fabs(Inpf(nor,vec))>0.999999) { - if(fabs(Inpf(nor,xvec))>0.999999) { + if(fabs(dot_v3v3(nor,vec))>0.999999) { + if(fabs(dot_v3v3(nor,xvec))>0.999999) { nor[0] = 0.0f; nor[1] = 1.0f; nor[2] = 0.0f; @@ -4217,11 +4219,11 @@ void psys_get_dupli_path_transform(ParticleSimulationData *sim, ParticleData *pa nor[2] = 0.0f; } } - Crossf(side, nor, vec); - Normalize(side); - Crossf(nor, vec, side); + cross_v3_v3v3(side, nor, vec); + normalize_v3(side); + cross_v3_v3v3(nor, vec, side); - Mat4One(mat); + unit_m4(mat); VECCOPY(mat[0], vec); VECCOPY(mat[1], side); VECCOPY(mat[2], nor); @@ -4242,62 +4244,62 @@ void psys_make_billboard(ParticleBillboardData *bb, float xvec[3], float yvec[3] if(bb->lock && (bb->align == PART_BB_VIEW)) { VECCOPY(xvec, bb->ob->obmat[0]); - Normalize(xvec); + normalize_v3(xvec); VECCOPY(yvec, bb->ob->obmat[1]); - Normalize(yvec); + normalize_v3(yvec); VECCOPY(zvec, bb->ob->obmat[2]); - Normalize(zvec); + normalize_v3(zvec); } else if(bb->align == PART_BB_VEL) { float temp[3]; VECCOPY(temp, bb->vel); - Normalize(temp); + normalize_v3(temp); VECSUB(zvec, bb->ob->obmat[3], bb->vec); if(bb->lock) { - float fac = -Inpf(zvec, temp); + float fac = -dot_v3v3(zvec, temp); VECADDFAC(zvec, zvec, temp, fac); } - Normalize(zvec); + normalize_v3(zvec); - Crossf(xvec,temp,zvec); - Normalize(xvec); + cross_v3_v3v3(xvec,temp,zvec); + normalize_v3(xvec); - Crossf(yvec,zvec,xvec); + cross_v3_v3v3(yvec,zvec,xvec); } else { VECSUB(zvec, bb->ob->obmat[3], bb->vec); if(bb->lock) zvec[bb->align] = 0.0f; - Normalize(zvec); + normalize_v3(zvec); if(bb->align < PART_BB_VIEW) - Crossf(xvec, onevec, zvec); + cross_v3_v3v3(xvec, onevec, zvec); else - Crossf(xvec, bb->ob->obmat[1], zvec); - Normalize(xvec); + cross_v3_v3v3(xvec, bb->ob->obmat[1], zvec); + normalize_v3(xvec); - Crossf(yvec,zvec,xvec); + cross_v3_v3v3(yvec,zvec,xvec); } VECCOPY(tvec, xvec); VECCOPY(tvec2, yvec); - VecMulf(xvec, cos(bb->tilt * (float)M_PI)); - VecMulf(tvec2, sin(bb->tilt * (float)M_PI)); + mul_v3_fl(xvec, cos(bb->tilt * (float)M_PI)); + mul_v3_fl(tvec2, sin(bb->tilt * (float)M_PI)); VECADD(xvec, xvec, tvec2); - VecMulf(yvec, cos(bb->tilt * (float)M_PI)); - VecMulf(tvec, -sin(bb->tilt * (float)M_PI)); + mul_v3_fl(yvec, cos(bb->tilt * (float)M_PI)); + mul_v3_fl(tvec, -sin(bb->tilt * (float)M_PI)); VECADD(yvec, yvec, tvec); - VecMulf(xvec, bb->size); - VecMulf(yvec, bb->size); + mul_v3_fl(xvec, bb->size); + mul_v3_fl(yvec, bb->size); VECADDFAC(center, bb->vec, xvec, bb->offset[0]); VECADDFAC(center, center, yvec, bb->offset[1]); diff --git a/source/blender/blenkernel/intern/particle_system.c b/source/blender/blenkernel/intern/particle_system.c index d66c990cbe1..075c6f6207f 100644 --- a/source/blender/blenkernel/intern/particle_system.c +++ b/source/blender/blenkernel/intern/particle_system.c @@ -54,7 +54,7 @@ #include "BLI_rand.h" #include "BLI_jitter.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_kdtree.h" #include "BLI_kdopbvh.h" @@ -405,7 +405,7 @@ static void distribute_particles_in_grid(DerivedMesh *dm, ParticleSystem *psys) min[2]-=d/2.0f; for(i=0,mv=mvert; i<totvert; i++,mv++){ - VecSubf(vec,mv->co,min); + sub_v3_v3v3(vec,mv->co,min); vec[0]/=delta[0]; vec[1]/=delta[1]; vec[2]/=delta[2]; @@ -447,7 +447,7 @@ static void distribute_particles_in_grid(DerivedMesh *dm, ParticleSystem *psys) VECCOPY(v2,mvert[mface->v2].co); VECCOPY(v3,mvert[mface->v3].co); - if(AxialLineIntersectsTriangle(a,co1, co2, v2, v3, v1, &lambda)){ + if(isect_axial_line_tri_v3(a,co1, co2, v2, v3, v1, &lambda)){ if(from==PART_FROM_FACE) (pa+(int)(lambda*size[a])*a0mul)->flag &= ~PARS_UNEXIST; else /* store number of intersections */ @@ -457,7 +457,7 @@ static void distribute_particles_in_grid(DerivedMesh *dm, ParticleSystem *psys) if(mface->v4){ VECCOPY(v4,mvert[mface->v4].co); - if(AxialLineIntersectsTriangle(a,co1, co2, v4, v1, v3, &lambda)){ + if(isect_axial_line_tri_v3(a,co1, co2, v4, v1, v3, &lambda)){ if(from==PART_FROM_FACE) (pa+(int)(lambda*size[a])*a0mul)->flag &= ~PARS_UNEXIST; else @@ -577,10 +577,10 @@ static void psys_uv_to_w(float u, float v, int quad, float *w) if(quad) { vert[3][0]= 0.0f; vert[3][1]= 1.0f; vert[3][2]= 0.0f; - MeanValueWeights(vert, 4, co, w); + interp_weights_poly_v3( w,vert, 4, co); } else { - MeanValueWeights(vert, 3, co, w); + interp_weights_poly_v3( w,vert, 3, co); w[3]= 0.0f; } } @@ -669,8 +669,8 @@ static void psys_thread_distribute_particle(ParticleThread *thread, ParticleData psys_interpolate_face(mvert,mface,0,0,pa->fuv,co1,nor,0,0,0,0); - Normalize(nor); - VecMulf(nor,-100.0); + normalize_v3(nor); + mul_v3_fl(nor,-100.0); VECADD(co2,co1,nor); @@ -684,7 +684,7 @@ static void psys_thread_distribute_particle(ParticleThread *thread, ParticleData v2=mvert[mface->v2].co; v3=mvert[mface->v3].co; - if(LineIntersectsTriangle(co1, co2, v2, v3, v1, &cur_d, 0)){ + if(isect_line_tri_v3(co1, co2, v2, v3, v1, &cur_d, 0)){ if(cur_d<min_d){ min_d=cur_d; pa->foffset=cur_d*50.0f; /* to the middle of volume */ @@ -694,7 +694,7 @@ static void psys_thread_distribute_particle(ParticleThread *thread, ParticleData if(mface->v4){ v4=mvert[mface->v4].co; - if(LineIntersectsTriangle(co1, co2, v4, v1, v3, &cur_d, 0)){ + if(isect_line_tri_v3(co1, co2, v4, v1, v3, &cur_d, 0)){ if(cur_d<min_d){ min_d=cur_d; pa->foffset=cur_d*50.0f; /* to the middle of volume */ @@ -776,18 +776,18 @@ static void psys_thread_distribute_particle(ParticleThread *thread, ParticleData // int min_seam=0, near_vert=0; // /* find closest seam */ // for(i=0; i<ctx->totseam; i++, seam++){ - // VecSubf(temp,co1,seam->v0); - // inp=Inpf(temp,seam->dir)/seam->length2; + // sub_v3_v3v3(temp,co1,seam->v0); + // inp=dot_v3v3(temp,seam->dir)/seam->length2; // if(inp<0.0f){ - // cur_len=VecLenf(co1,seam->v0); + // cur_len=len_v3v3(co1,seam->v0); // } // else if(inp>1.0f){ - // cur_len=VecLenf(co1,seam->v1); + // cur_len=len_v3v3(co1,seam->v1); // } // else{ - // VecCopyf(temp2,seam->dir); - // VecMulf(temp2,inp); - // cur_len=VecLenf(temp,temp2); + // copy_v3_v3(temp2,seam->dir); + // mul_v3_fl(temp2,inp); + // cur_len=len_v3v3(temp,temp2); // } // if(cur_len<min_len){ // min_len=cur_len; @@ -799,27 +799,27 @@ static void psys_thread_distribute_particle(ParticleThread *thread, ParticleData // } // seam=ctx->seams+min_seam; // - // VecCopyf(temp,seam->v0); + // copy_v3_v3(temp,seam->v0); // // if(near_vert){ // if(near_vert==-1) - // VecSubf(tan,co1,seam->v0); + // sub_v3_v3v3(tan,co1,seam->v0); // else{ - // VecSubf(tan,co1,seam->v1); - // VecCopyf(temp,seam->v1); + // sub_v3_v3v3(tan,co1,seam->v1); + // copy_v3_v3(temp,seam->v1); // } - // Normalize(tan); + // normalize_v3(tan); // } // else{ - // VecCopyf(tan,seam->tan); - // VecSubf(temp2,co1,temp); - // if(Inpf(tan,temp2)<0.0f) - // VecNegf(tan); + // copy_v3_v3(tan,seam->tan); + // sub_v3_v3v3(temp2,co1,temp); + // if(dot_v3v3(tan,temp2)<0.0f) + // negate_v3(tan); // } // for(w=0; w<maxw; w++){ - // VecSubf(temp2,ptn[w].co,temp); - // if(Inpf(tan,temp2)<0.0f){ + // sub_v3_v3v3(temp2,ptn[w].co,temp); + // if(dot_v3v3(tan,temp2)<0.0f){ // parent[w]=-1; // pweight[w]=0.0f; // } @@ -989,12 +989,12 @@ static int psys_threads_init_distribution(ParticleThread *threads, Scene *scene, // for(p=0, ed=medge; p<totedge; p++,ed++){ // if(ed->flag&ME_SEAM){ - // VecCopyf(cur_seam->v0,(mvert+ed->v1)->co); - // VecCopyf(cur_seam->v1,(mvert+ed->v2)->co); + // copy_v3_v3(cur_seam->v0,(mvert+ed->v1)->co); + // copy_v3_v3(cur_seam->v1,(mvert+ed->v2)->co); - // VecSubf(cur_seam->dir,cur_seam->v1,cur_seam->v0); + // sub_v3_v3v3(cur_seam->dir,cur_seam->v1,cur_seam->v0); - // cur_seam->length2=VecLength(cur_seam->dir); + // cur_seam->length2=len_v3(cur_seam->dir); // cur_seam->length2*=cur_seam->length2; // temp[0]=(float)((mvert+ed->v1)->no[0]); @@ -1004,12 +1004,12 @@ static int psys_threads_init_distribution(ParticleThread *threads, Scene *scene, // temp2[1]=(float)((mvert+ed->v2)->no[1]); // temp2[2]=(float)((mvert+ed->v2)->no[2]); - // VecAddf(cur_seam->nor,temp,temp2); - // Normalize(cur_seam->nor); + // add_v3_v3v3(cur_seam->nor,temp,temp2); + // normalize_v3(cur_seam->nor); - // Crossf(cur_seam->tan,cur_seam->dir,cur_seam->nor); + // cross_v3_v3v3(cur_seam->tan,cur_seam->dir,cur_seam->nor); - // Normalize(cur_seam->tan); + // normalize_v3(cur_seam->tan); // cur_seam++; // } @@ -1035,7 +1035,7 @@ static int psys_threads_init_distribution(ParticleThread *threads, Scene *scene, cpa->fuv[0]=2.0f*BLI_frand()-1.0f; cpa->fuv[1]=2.0f*BLI_frand()-1.0f; cpa->fuv[2]=2.0f*BLI_frand()-1.0f; - length=VecLength(cpa->fuv); + length=len_v3(cpa->fuv); } cpa->num=-1; @@ -1176,10 +1176,10 @@ static int psys_threads_init_distribution(ParticleThread *threads, Scene *scene, v4= (MVert*)dm->getVertData(dm,mf->v4,CD_MVERT); VECCOPY(co4, v4->co); } - cur= AreaQ3Dfl(co1, co2, co3, co4); + cur= area_quad_v3(co1, co2, co3, co4); } else - cur= AreaT3Dfl(co1, co2, co3); + cur= area_tri_v3(co1, co2, co3); if(cur>maxweight) maxweight=cur; @@ -1682,7 +1682,7 @@ void reset_particle(ParticleSimulationData *sim, ParticleData *pa, float dtime, r_rot[1] = 2.0f * (PSYS_FRAND(p + 17) - 0.5f); r_rot[2] = 2.0f * (PSYS_FRAND(p + 18) - 0.5f); r_rot[3] = 2.0f * (PSYS_FRAND(p + 19) - 0.5f); - NormalQuat(r_rot); + normalize_qt(r_rot); r_phase = PSYS_FRAND(p + 20); @@ -1699,15 +1699,15 @@ void reset_particle(ParticleSimulationData *sim, ParticleData *pa, float dtime, psys_get_particle_state(&tsim, pa->num, &state, 1); psys_get_from_key(&state, loc, nor, rot, 0); - QuatMulVecf(rot, vtan); - QuatMulVecf(rot, utan); + mul_qt_v3(rot, vtan); + mul_qt_v3(rot, utan); VECCOPY(p_vel, state.vel); - speed=Normalize(p_vel); - VecMulf(p_vel, Inpf(r_vel, p_vel)); + speed=normalize_v3(p_vel); + mul_v3_fl(p_vel, dot_v3v3(r_vel, p_vel)); VECSUB(p_vel, r_vel, p_vel); - Normalize(p_vel); - VecMulf(p_vel, speed); + normalize_v3(p_vel); + mul_v3_fl(p_vel, speed); VECCOPY(pa->fuv, loc); /* abusing pa->fuv (not used for "from particle") for storing emit location */ } @@ -1731,46 +1731,46 @@ void reset_particle(ParticleSimulationData *sim, ParticleData *pa, float dtime, /* particles live in global space so */ /* let's convert: */ /* -location */ - Mat4MulVecfl(ob->obmat,loc); + mul_m4_v3(ob->obmat,loc); /* -normal */ - Mat4Mul3Vecfl(ob->obmat,nor); - Normalize(nor); + mul_mat3_m4_v3(ob->obmat,nor); + normalize_v3(nor); /* -tangent */ if(part->tanfac!=0.0){ //float phase=vg_rot?2.0f*(psys_particle_value_from_verts(sim->psmd->dm,part->from,pa,vg_rot)-0.5f):0.0f; float phase=0.0f; - VecMulf(vtan,-(float)cos(M_PI*(part->tanphase+phase))); + mul_v3_fl(vtan,-(float)cos(M_PI*(part->tanphase+phase))); fac=-(float)sin(M_PI*(part->tanphase+phase)); VECADDFAC(vtan,vtan,utan,fac); - Mat4Mul3Vecfl(ob->obmat,vtan); + mul_mat3_m4_v3(ob->obmat,vtan); VECCOPY(utan,nor); - VecMulf(utan,Inpf(vtan,nor)); + mul_v3_fl(utan,dot_v3v3(vtan,nor)); VECSUB(vtan,vtan,utan); - Normalize(vtan); + normalize_v3(vtan); } /* -velocity */ if(part->randfac!=0.0){ - Mat4Mul3Vecfl(ob->obmat,r_vel); - Normalize(r_vel); + mul_mat3_m4_v3(ob->obmat,r_vel); + normalize_v3(r_vel); } /* -angular velocity */ if(part->avemode==PART_AVE_RAND){ - Mat4Mul3Vecfl(ob->obmat,r_ave); - Normalize(r_ave); + mul_mat3_m4_v3(ob->obmat,r_ave); + normalize_v3(r_ave); } /* -rotation */ if(part->randrotfac != 0.0f){ - Mat4ToQuat(ob->obmat,rot); - QuatMul(r_rot,r_rot,rot); + mat4_to_quat(rot,ob->obmat); + mul_qt_qtqt(r_rot,r_rot,rot); } } @@ -1785,8 +1785,8 @@ void reset_particle(ParticleSimulationData *sim, ParticleData *pa, float dtime, /* boids store direction in ave */ if(fabs(nor[2])==1.0f) { - VecSubf(pa->state.ave, loc, ob->obmat[3]); - Normalize(pa->state.ave); + sub_v3_v3v3(pa->state.ave, loc, ob->obmat[3]); + normalize_v3(pa->state.ave); } else { VECCOPY(pa->state.ave, nor); @@ -1799,17 +1799,17 @@ void reset_particle(ParticleSimulationData *sim, ParticleData *pa, float dtime, bpa->gravity[2] = sim->scene->physics_settings.gravity[2]; /* calculate rotation matrix */ - Projf(dvec, r_vel, pa->state.ave); - VecSubf(mat[0], pa->state.ave, dvec); - Normalize(mat[0]); + project_v3_v3v3(dvec, r_vel, pa->state.ave); + sub_v3_v3v3(mat[0], pa->state.ave, dvec); + normalize_v3(mat[0]); VECCOPY(mat[2], r_vel); - VecMulf(mat[2], -1.0f); - Normalize(mat[2]); - Crossf(mat[1], mat[2], mat[0]); + mul_v3_fl(mat[2], -1.0f); + normalize_v3(mat[2]); + cross_v3_v3v3(mat[1], mat[2], mat[0]); /* apply rotation */ - Mat3ToQuat_is_ok(mat, q); - QuatCopy(pa->state.rot, q); + mat3_to_quat_is_ok( q,mat); + copy_qt_qt(pa->state.rot, q); bpa->data.health = part->boids->health; bpa->data.mode = eBoidMode_InAir; @@ -1828,7 +1828,7 @@ void reset_particle(ParticleSimulationData *sim, ParticleData *pa, float dtime, /* *emitter velocity */ if(dtime!=0.0 && part->obfac!=0.0){ VECSUB(vel,loc,pa->state.co); - VecMulf(vel,part->obfac/dtime); + mul_v3_fl(vel,part->obfac/dtime); } /* *emitter normal */ @@ -1843,17 +1843,17 @@ void reset_particle(ParticleSimulationData *sim, ParticleData *pa, float dtime, /* *emitter object orientation */ if(part->ob_vel[0]!=0.0) { VECCOPY(vec, ob->obmat[0]); - Normalize(vec); + normalize_v3(vec); VECADDFAC(vel, vel, vec, part->ob_vel[0]); } if(part->ob_vel[1]!=0.0) { VECCOPY(vec, ob->obmat[1]); - Normalize(vec); + normalize_v3(vec); VECADDFAC(vel, vel, vec, part->ob_vel[1]); } if(part->ob_vel[2]!=0.0) { VECCOPY(vec, ob->obmat[2]); - Normalize(vec); + normalize_v3(vec); VECADDFAC(vel, vel, vec, part->ob_vel[2]); } @@ -1874,7 +1874,7 @@ void reset_particle(ParticleSimulationData *sim, ParticleData *pa, float dtime, // ptex.ivel*=icu->curval; //} - VecMulf(vel,ptex.ivel); + mul_v3_fl(vel,ptex.ivel); VECCOPY(pa->state.vel,vel); @@ -1889,10 +1889,10 @@ void reset_particle(ParticleSimulationData *sim, ParticleData *pa, float dtime, /* create vector into which rotation is aligned */ switch(part->rotmode){ case PART_ROT_NOR: - VecCopyf(rot_vec, nor); + copy_v3_v3(rot_vec, nor); break; case PART_ROT_VEL: - VecCopyf(rot_vec, vel); + copy_v3_v3(rot_vec, vel); break; case PART_ROT_GLOB_X: case PART_ROT_GLOB_Y: @@ -1902,28 +1902,28 @@ void reset_particle(ParticleSimulationData *sim, ParticleData *pa, float dtime, case PART_ROT_OB_X: case PART_ROT_OB_Y: case PART_ROT_OB_Z: - VecCopyf(rot_vec, ob->obmat[part->rotmode - PART_ROT_OB_X]); + copy_v3_v3(rot_vec, ob->obmat[part->rotmode - PART_ROT_OB_X]); break; } /* create rotation quat */ - VecNegf(rot_vec); - vectoquat(rot_vec, OB_POSX, OB_POSZ, q2); + negate_v3(rot_vec); + vec_to_quat( q2,rot_vec, OB_POSX, OB_POSZ); /* randomize rotation quat */ if(part->randrotfac!=0.0f) - QuatInterpol(rot, q2, r_rot, part->randrotfac); + interp_qt_qtqt(rot, q2, r_rot, part->randrotfac); else - QuatCopy(rot,q2); + copy_qt_qt(rot,q2); /* rotation phase */ phasefac = part->phasefac; if(part->randphasefac != 0.0f) phasefac += part->randphasefac * r_phase; - VecRotToQuat(x_vec, phasefac*(float)M_PI, q_phase); + axis_angle_to_quat( q_phase,x_vec, phasefac*(float)M_PI); /* combine base rotation & phase */ - QuatMul(pa->state.rot, rot, q_phase); + mul_qt_qtqt(pa->state.rot, rot, q_phase); } /* -angular velocity */ @@ -1939,13 +1939,13 @@ void reset_particle(ParticleSimulationData *sim, ParticleData *pa, float dtime, VECCOPY(pa->state.ave,r_ave); break; } - Normalize(pa->state.ave); - VecMulf(pa->state.ave,part->avefac); + normalize_v3(pa->state.ave); + mul_v3_fl(pa->state.ave,part->avefac); //icu=find_ipocurve(psys->part->ipo,PART_EMIT_AVE); //if(icu){ // calc_icu(icu,100*((pa->time-part->sta)/(part->end-part->sta))); - // VecMulf(pa->state.ave,icu->curval); + // mul_v3_fl(pa->state.ave,icu->curval); //} } } @@ -2157,7 +2157,7 @@ static void set_keyed_keys(ParticleSimulationData *sim) // } // } // else{ -// dist=VecLenf(pa->state.co, re->state.co); +// dist=len_v3v3(pa->state.co, re->state.co); // if(dist <= re->size){ // if(pa->alive==PARS_UNBORN){ // pa->time=re->time; @@ -2168,12 +2168,12 @@ static void set_keyed_keys(ParticleSimulationData *sim) // float vec[3]; // VECSUB(vec,pa->state.co, re->state.co); // if(birth==0) -// VecMulf(vec,(float)pow(1.0f-dist/re->size,part->reactshape)); +// mul_v3_fl(vec,(float)pow(1.0f-dist/re->size,part->reactshape)); // VECADDFAC(pa->state.vel,pa->state.vel,vec,part->reactfac); // VECADDFAC(pa->state.vel,pa->state.vel,re->state.vel,part->partfac); // } // if(birth) -// VecMulf(pa->state.vel,(float)pow(1.0f-dist/re->size,part->reactshape)); +// mul_v3_fl(pa->state.vel,(float)pow(1.0f-dist/re->size,part->reactshape)); // } // } // } @@ -2301,7 +2301,7 @@ static void apply_particle_forces(ParticleSimulationData *sim, int p, float dfra /* calculate air-particle interaction */ if(part->dragfac!=0.0f){ - fac=-part->dragfac*pa->size*pa->size*VecLength(states[i].vel); + fac=-part->dragfac*pa->size*pa->size*len_v3(states[i].vel); VECADDFAC(force,force,states[i].vel,fac); } @@ -2313,7 +2313,7 @@ static void apply_particle_forces(ParticleSimulationData *sim, int p, float dfra } /* force to acceleration*/ - VecMulf(force,1.0f/pa_mass); + mul_v3_fl(force,1.0f/pa_mass); /* add global acceleration (gravitation) */ if(sim->scene->physics_settings.flag & PHYS_GLOBAL_GRAVITY @@ -2321,7 +2321,7 @@ static void apply_particle_forces(ParticleSimulationData *sim, int p, float dfra && (part->type != PART_HAIR || part->effector_weights->flag & EFF_WEIGHT_DO_HAIR)) { float gravity[3]; VECCOPY(gravity, sim->scene->physics_settings.gravity); - VecMulf(gravity, part->effector_weights->global_gravity); + mul_v3_fl(gravity, part->effector_weights->global_gravity); VECADD(force,force,gravity); } @@ -2348,9 +2348,9 @@ static void apply_particle_forces(ParticleSimulationData *sim, int p, float dfra switch(i){ case 0: VECCOPY(dx[0],states->vel); - VecMulf(dx[0],dtime); + mul_v3_fl(dx[0],dtime); VECCOPY(dv[0],force); - VecMulf(dv[0],dtime); + mul_v3_fl(dv[0],dtime); VECADDFAC(states[1].co,states->co,dx[0],0.5f); VECADDFAC(states[1].vel,states->vel,dv[0],0.5f); @@ -2358,18 +2358,18 @@ static void apply_particle_forces(ParticleSimulationData *sim, int p, float dfra break; case 1: VECADDFAC(dx[1],states->vel,dv[0],0.5f); - VecMulf(dx[1],dtime); + mul_v3_fl(dx[1],dtime); VECCOPY(dv[1],force); - VecMulf(dv[1],dtime); + mul_v3_fl(dv[1],dtime); VECADDFAC(states[2].co,states->co,dx[1],0.5f); VECADDFAC(states[2].vel,states->vel,dv[1],0.5f); break; case 2: VECADDFAC(dx[2],states->vel,dv[1],0.5f); - VecMulf(dx[2],dtime); + mul_v3_fl(dx[2],dtime); VECCOPY(dv[2],force); - VecMulf(dv[2],dtime); + mul_v3_fl(dv[2],dtime); VECADD(states[3].co,states->co,dx[2]); VECADD(states[3].vel,states->vel,dv[2]); @@ -2377,9 +2377,9 @@ static void apply_particle_forces(ParticleSimulationData *sim, int p, float dfra break; case 3: VECADD(dx[3],states->vel,dv[2]); - VecMulf(dx[3],dtime); + mul_v3_fl(dx[3],dtime); VECCOPY(dv[3],force); - VecMulf(dv[3],dtime); + mul_v3_fl(dv[3],dtime); VECADDFAC(pa->state.co,states->co,dx[0],1.0f/6.0f); VECADDFAC(pa->state.co,pa->state.co,dx[1],1.0f/3.0f); @@ -2397,7 +2397,7 @@ static void apply_particle_forces(ParticleSimulationData *sim, int p, float dfra /* damp affects final velocity */ if(part->dampfac!=0.0) - VecMulf(pa->state.vel,1.0f-part->dampfac); + mul_v3_fl(pa->state.vel,1.0f-part->dampfac); VECCOPY(pa->state.ave, states->ave); @@ -2414,7 +2414,7 @@ static void apply_particle_forces(ParticleSimulationData *sim, int p, float dfra VECCOPY(pa->state.co,tkey.co); /* guides don't produce valid velocity */ VECSUB(pa->state.vel,tkey.co,pa->prev_state.co); - VecMulf(pa->state.vel,1.0f/dtime); + mul_v3_fl(pa->state.vel,1.0f/dtime); pa->state.time=tkey.time; } } @@ -2426,35 +2426,35 @@ static void rotate_particle(ParticleSettings *part, ParticleData *pa, float dfra if((part->flag & PART_ROT_DYN)==0){ if(part->avemode==PART_AVE_SPIN){ float angle; - float len1 = VecLength(pa->prev_state.vel); - float len2 = VecLength(pa->state.vel); + float len1 = len_v3(pa->prev_state.vel); + float len2 = len_v3(pa->state.vel); if(len1==0.0f || len2==0.0f) pa->state.ave[0]=pa->state.ave[1]=pa->state.ave[2]=0.0f; else{ - Crossf(pa->state.ave,pa->prev_state.vel,pa->state.vel); - Normalize(pa->state.ave); - angle=Inpf(pa->prev_state.vel,pa->state.vel)/(len1*len2); - VecMulf(pa->state.ave,saacos(angle)/dtime); + cross_v3_v3v3(pa->state.ave,pa->prev_state.vel,pa->state.vel); + normalize_v3(pa->state.ave); + angle=dot_v3v3(pa->prev_state.vel,pa->state.vel)/(len1*len2); + mul_v3_fl(pa->state.ave,saacos(angle)/dtime); } - VecRotToQuat(pa->state.vel,dtime*part->avefac,rot2); + axis_angle_to_quat(rot2,pa->state.vel,dtime*part->avefac); } } - rotfac=VecLength(pa->state.ave); - if(rotfac==0.0){ /* QuatOne (in VecRotToQuat) doesn't give unit quat [1,0,0,0]?? */ + rotfac=len_v3(pa->state.ave); + if(rotfac==0.0){ /* unit_qt(in VecRotToQuat) doesn't give unit quat [1,0,0,0]?? */ rot1[0]=1.0; rot1[1]=rot1[2]=rot1[3]=0; } else{ - VecRotToQuat(pa->state.ave,rotfac*dtime,rot1); + axis_angle_to_quat(rot1,pa->state.ave,rotfac*dtime); } - QuatMul(pa->state.rot,rot1,pa->prev_state.rot); - QuatMul(pa->state.rot,rot2,pa->state.rot); + mul_qt_qtqt(pa->state.rot,rot1,pa->prev_state.rot); + mul_qt_qtqt(pa->state.rot,rot2,pa->state.rot); /* keep rotation quat in good health */ - NormalQuat(pa->state.rot); + normalize_qt(pa->state.rot); } /* convert from triangle barycentric weights to quad mean value weights */ @@ -2471,7 +2471,7 @@ static void intersect_dm_quad_weights(float *v1, float *v2, float *v3, float *v4 co[1]= v1[1]*w[0] + v2[1]*w[1] + v3[1]*w[2] + v4[1]*w[3]; co[2]= v1[2]*w[0] + v2[2]*w[1] + v3[2]*w[2] + v4[2]*w[3]; - MeanValueWeights(vert, 4, co, w); + interp_weights_poly_v3( w,vert, 4, co); } /* check intersection with a derivedmesh */ @@ -2537,18 +2537,18 @@ int psys_intersect_dm(Scene *scene, Object *ob, DerivedMesh *dm, float *vert_cos DO_MINMAX(v3,min,max); if(mface->v4) DO_MINMAX(v4,min,max) - if(AabbIntersectAabb(min,max,p_min,p_max)==0) + if(isect_aabb_aabb_v3(min,max,p_min,p_max)==0) continue; } else{ VECCOPY(min, face_minmax+6*i); VECCOPY(max, face_minmax+6*i+3); - if(AabbIntersectAabb(min,max,p_min,p_max)==0) + if(isect_aabb_aabb_v3(min,max,p_min,p_max)==0) continue; } if(radius>0.0f){ - if(SweepingSphereIntersectsTriangleUV(co1, co2, radius, v2, v3, v1, &cur_d, cur_ipoint)){ + if(isect_sweeping_sphere_tri_v3(co1, co2, radius, v2, v3, v1, &cur_d, cur_ipoint)){ if(cur_d<*min_d){ *min_d=cur_d; VECCOPY(ipoint,cur_ipoint); @@ -2557,7 +2557,7 @@ int psys_intersect_dm(Scene *scene, Object *ob, DerivedMesh *dm, float *vert_cos } } if(mface->v4){ - if(SweepingSphereIntersectsTriangleUV(co1, co2, radius, v4, v1, v3, &cur_d, cur_ipoint)){ + if(isect_sweeping_sphere_tri_v3(co1, co2, radius, v4, v1, v3, &cur_d, cur_ipoint)){ if(cur_d<*min_d){ *min_d=cur_d; VECCOPY(ipoint,cur_ipoint); @@ -2568,7 +2568,7 @@ int psys_intersect_dm(Scene *scene, Object *ob, DerivedMesh *dm, float *vert_cos } } else{ - if(LineIntersectsTriangle(co1, co2, v1, v2, v3, &cur_d, cur_uv)){ + if(isect_line_tri_v3(co1, co2, v1, v2, v3, &cur_d, cur_uv)){ if(cur_d<*min_d){ *min_d=cur_d; min_w[0]= 1.0 - cur_uv[0] - cur_uv[1]; @@ -2582,7 +2582,7 @@ int psys_intersect_dm(Scene *scene, Object *ob, DerivedMesh *dm, float *vert_cos } } if(mface->v4){ - if(LineIntersectsTriangle(co1, co2, v1, v3, v4, &cur_d, cur_uv)){ + if(isect_line_tri_v3(co1, co2, v1, v3, v4, &cur_d, cur_uv)){ if(cur_d<*min_d){ *min_d=cur_d; min_w[0]= 1.0 - cur_uv[0] - cur_uv[1]; @@ -2618,7 +2618,7 @@ void particle_intersect_face(void *userdata, int index, const BVHTreeRay *ray, B VECCOPY(vel, v[ face->v1 ].co); VECADD(vel, vel, v[ face->v2 ].co); VECADD(vel, vel, v[ face->v3 ].co); - VecMulf(vel, 0.33334f); + mul_v3_fl(vel, 0.33334f); /* substract face velocity, in other words convert to a coordinate system where only the particle moves */ @@ -2628,16 +2628,16 @@ void particle_intersect_face(void *userdata, int index, const BVHTreeRay *ray, B do { if(ray->radius == 0.0f) { - if(LineIntersectsTriangle(co1, co2, t0, t1, t2, &t, uv)) { + if(isect_line_tri_v3(co1, co2, t0, t1, t2, &t, uv)) { if(t >= 0.0f && t < hit->dist/col->ray_len) { hit->dist = col->ray_len * t; hit->index = index; /* calculate normal that's facing the particle */ - CalcNormFloat(t0, t1, t2, col->nor); + normal_tri_v3( col->nor,t0, t1, t2); VECSUB(temp, co2, co1); - if(Inpf(col->nor, temp) > 0.0f) - VecNegf(col->nor); + if(dot_v3v3(col->nor, temp) > 0.0f) + negate_v3(col->nor); VECCOPY(col->vel,vel); @@ -2647,15 +2647,15 @@ void particle_intersect_face(void *userdata, int index, const BVHTreeRay *ray, B } } else { - if(SweepingSphereIntersectsTriangleUV(co1, co2, ray->radius, t0, t1, t2, &t, ipoint)) { + if(isect_sweeping_sphere_tri_v3(co1, co2, ray->radius, t0, t1, t2, &t, ipoint)) { if(t >=0.0f && t < hit->dist/col->ray_len) { hit->dist = col->ray_len * t; hit->index = index; - VecLerpf(temp, co1, co2, t); + interp_v3_v3v3(temp, co1, co2, t); VECSUB(col->nor, temp, ipoint); - Normalize(col->nor); + normalize_v3(col->nor); VECCOPY(col->vel,vel); @@ -2706,7 +2706,7 @@ static void deflect_particle(ParticleSimulationData *sim, int p, float dfra, flo VECSUB(ray_dir, col.co2, col.co1); hit.index = -1; - hit.dist = col.ray_len = VecLength(ray_dir); + hit.dist = col.ray_len = len_v3(ray_dir); /* even if particle is stationary we want to check for moving colliders */ /* if hit.dist is zero the bvhtree_ray_cast will just ignore everything */ @@ -2738,10 +2738,10 @@ static void deflect_particle(ParticleSimulationData *sim, int p, float dfra, flo float t = hit.dist/col.ray_len; /* time of collision between this iteration */ float dt = col.t + t * (1.0f - col.t); /* time of collision between frame change*/ - VecLerpf(co, col.co1, col.co2, t); + interp_v3_v3v3(co, col.co1, col.co2, t); VECSUB(vec, col.co2, col.co1); - VecMulf(col.vel, 1.0f-col.t); + mul_v3_fl(col.vel, 1.0f-col.t); /* particle dies in collision */ if(through == 0 && (part->flag & PART_DIE_ON_COL || pd->flag & PDEFLE_KILL_PART)) { @@ -2752,9 +2752,9 @@ static void deflect_particle(ParticleSimulationData *sim, int p, float dfra, flo VECADDFAC(co, co, col.nor, (through ? -0.0001f : 0.0001f)); VECCOPY(pa->state.co, co); - VecLerpf(pa->state.vel, pa->prev_state.vel, pa->state.vel, dt); - QuatInterpol(pa->state.rot, pa->prev_state.rot, pa->state.rot, dt); - VecLerpf(pa->state.ave, pa->prev_state.ave, pa->state.ave, dt); + interp_v3_v3v3(pa->state.vel, pa->prev_state.vel, pa->state.vel, dt); + interp_qt_qtqt(pa->state.rot, pa->prev_state.rot, pa->state.rot, dt); + interp_v3_v3v3(pa->state.ave, pa->prev_state.ave, pa->state.ave, dt); /* particle is dead so we don't need to calculate further */ deflections=max_deflections; @@ -2772,13 +2772,13 @@ static void deflect_particle(ParticleSimulationData *sim, int p, float dfra, flo CLAMP(frict,0.0,1.0); /* treat normal & tangent components separately */ - inp = Inpf(col.nor, vec); - inp_v = Inpf(col.nor, col.vel); + inp = dot_v3v3(col.nor, vec); + inp_v = dot_v3v3(col.nor, col.vel); VECADDFAC(tan_vec, vec, col.nor, -inp); VECADDFAC(tan_vel, col.vel, col.nor, -inp_v); if((part->flag & PART_ROT_DYN)==0) - VecLerpf(tan_vec, tan_vec, tan_vel, frict); + interp_v3_v3v3(tan_vec, tan_vec, tan_vel, frict); VECCOPY(nor_vec, col.nor); inp *= 1.0f - damp; @@ -2788,9 +2788,9 @@ static void deflect_particle(ParticleSimulationData *sim, int p, float dfra, flo /* special case for object hitting the particle from behind */ if(through==0 && ((inp_v>0 && inp>0 && inp_v>inp) || (inp_v<0 && inp<0 && inp_v<inp))) - VecMulf(nor_vec, inp_v); + mul_v3_fl(nor_vec, inp_v); else - VecMulf(nor_vec, inp_v + (through ? 1.0f : -1.0f) * inp); + mul_v3_fl(nor_vec, inp_v + (through ? 1.0f : -1.0f) * inp); /* angular <-> linear velocity - slightly more physical and looks even nicer than before */ if(part->flag & PART_ROT_DYN) { @@ -2800,37 +2800,37 @@ static void deflect_particle(ParticleSimulationData *sim, int p, float dfra, flo VECSUB(surface_vel, tan_vec, tan_vel); /* direction of rolling friction */ - Crossf(rot_vel, pa->state.ave, col.nor); + cross_v3_v3v3(rot_vel, pa->state.ave, col.nor); /* convert to current dt */ - VecMulf(rot_vel, (timestep*dfra) * (1.0f - col.t)); - VecMulf(rot_vel, pa->size); + mul_v3_fl(rot_vel, (timestep*dfra) * (1.0f - col.t)); + mul_v3_fl(rot_vel, pa->size); /* apply sliding friction */ VECSUB(surface_vel, surface_vel, rot_vel); VECCOPY(friction, surface_vel); - VecMulf(surface_vel, 1.0 - frict); - VecMulf(friction, frict); + mul_v3_fl(surface_vel, 1.0 - frict); + mul_v3_fl(friction, frict); /* sliding changes angular velocity */ - Crossf(dave, col.nor, friction); - VecMulf(dave, 1.0f/MAX2(pa->size, 0.001)); + cross_v3_v3v3(dave, col.nor, friction); + mul_v3_fl(dave, 1.0f/MAX2(pa->size, 0.001)); /* we assume rolling friction is around 0.01 of sliding friction */ - VecMulf(rot_vel, 1.0 - frict*0.01); + mul_v3_fl(rot_vel, 1.0 - frict*0.01); /* change in angular velocity has to be added to the linear velocity too */ - Crossf(dvel, dave, col.nor); - VecMulf(dvel, pa->size); + cross_v3_v3v3(dvel, dave, col.nor); + mul_v3_fl(dvel, pa->size); VECADD(rot_vel, rot_vel, dvel); VECADD(surface_vel, surface_vel, rot_vel); VECADD(tan_vec, surface_vel, tan_vel); /* convert back to normal time */ - VecMulf(dave, 1.0f/MAX2((timestep*dfra) * (1.0f - col.t), 0.00001)); + mul_v3_fl(dave, 1.0f/MAX2((timestep*dfra) * (1.0f - col.t), 0.00001)); - VecMulf(pa->state.ave, 1.0 - frict*0.01); + mul_v3_fl(pa->state.ave, 1.0 - frict*0.01); VECADD(pa->state.ave, pa->state.ave, dave); } @@ -2839,7 +2839,7 @@ static void deflect_particle(ParticleSimulationData *sim, int p, float dfra, flo /* calculate velocity from collision vector */ VECCOPY(vel, vec); - VecMulf(vel, 1.0f/MAX2((timestep*dfra) * (1.0f - col.t), 0.00001)); + mul_v3_fl(vel, 1.0f/MAX2((timestep*dfra) * (1.0f - col.t), 0.00001)); /* make sure we don't hit the current face again */ VECADDFAC(co, co, col.nor, (through ? -0.0001f : 0.0001f)); @@ -2854,15 +2854,15 @@ static void deflect_particle(ParticleSimulationData *sim, int p, float dfra, flo /* store state for reactors */ //VECCOPY(reaction_state.co, co); - //VecLerpf(reaction_state.vel, pa->prev_state.vel, pa->state.vel, dt); - //QuatInterpol(reaction_state.rot, pa->prev_state.rot, pa->state.rot, dt); + //interp_v3_v3v3(reaction_state.vel, pa->prev_state.vel, pa->state.vel, dt); + //interp_qt_qtqt(reaction_state.rot, pa->prev_state.rot, pa->state.rot, dt); /* set coordinates for next iteration */ VECCOPY(col.co1, co); VECADDFAC(col.co2, co, vec, 1.0f - t); col.t = dt; - if(VecLength(vec) < 0.001 && VecLength(pa->state.vel) < 0.001) { + if(len_v3(vec) < 0.001 && len_v3(pa->state.vel) < 0.001) { /* kill speed to stop slipping */ VECCOPY(pa->state.vel,zerovec); VECCOPY(pa->state.co, co); @@ -3011,7 +3011,7 @@ static void do_hair_dynamics(ParticleSimulationData *sim) VECSUB(temp, key->co, (key+1)->co); VECCOPY(mvert->co, key->co); VECADD(mvert->co, mvert->co, temp); - Mat4MulVecfl(hairmat, mvert->co); + mul_m4_v3(hairmat, mvert->co); mvert++; medge->v1 = pa->hair_index - 1; @@ -3030,7 +3030,7 @@ static void do_hair_dynamics(ParticleSimulationData *sim) } VECCOPY(mvert->co, key->co); - Mat4MulVecfl(hairmat, mvert->co); + mul_m4_v3(hairmat, mvert->co); mvert++; if(k) { @@ -3105,7 +3105,7 @@ static void save_hair(ParticleSimulationData *sim, float cfra){ PARTICLE_P; int totpart; - Mat4Invert(ob->imat, ob->obmat); + invert_m4_m4(ob->imat, ob->obmat); psys->lattice= psys_get_lattice(sim); @@ -3125,8 +3125,8 @@ static void save_hair(ParticleSimulationData *sim, float cfra){ key += pa->totkey; /* convert from global to geometry space */ - VecCopyf(key->co, pa->state.co); - Mat4MulVecfl(ob->imat, key->co); + copy_v3_v3(key->co, pa->state.co); + mul_m4_v3(ob->imat, key->co); if(pa->totkey) { VECSUB(key->co, key->co, root->co); @@ -3941,6 +3941,6 @@ void particle_system_update(Scene *scene, Object *ob, ParticleSystem *psys) system_step(&sim, cfra); /* save matrix for duplicators */ - Mat4Invert(psys->imat, ob->obmat); + invert_m4_m4(psys->imat, ob->obmat); } diff --git a/source/blender/blenkernel/intern/pointcache.c b/source/blender/blenkernel/intern/pointcache.c index 68f0e33a98f..c2798b4a746 100644 --- a/source/blender/blenkernel/intern/pointcache.c +++ b/source/blender/blenkernel/intern/pointcache.c @@ -170,12 +170,12 @@ static void ptcache_interpolate_softbody(int index, void *soft_v, void **data, f dfra = cfra2 - cfra1; - VecMulf(keys[1].vel, dfra); - VecMulf(keys[2].vel, dfra); + mul_v3_fl(keys[1].vel, dfra); + mul_v3_fl(keys[2].vel, dfra); psys_interpolate_particle(-1, keys, (cfra - cfra1) / dfra, keys, 1); - VecMulf(keys->vel, 1.0f / dfra); + mul_v3_fl(keys->vel, 1.0f / dfra); VECCOPY(bp->pos, keys->co); VECCOPY(bp->vec, keys->vel); @@ -255,18 +255,18 @@ static void ptcache_read_particle(int index, void *psys_v, void **data, float fr /* determine velocity from previous location */ if(data[BPHYS_DATA_LOCATION] && !data[BPHYS_DATA_VELOCITY]) { if(cfra > pa->prev_state.time) { - VecSubf(pa->state.vel, pa->state.co, pa->prev_state.co); - VecMulf(pa->state.vel, (cfra - pa->prev_state.time) / frs_sec); + sub_v3_v3v3(pa->state.vel, pa->state.co, pa->prev_state.co); + mul_v3_fl(pa->state.vel, (cfra - pa->prev_state.time) / frs_sec); } else { - VecSubf(pa->state.vel, pa->prev_state.co, pa->state.co); - VecMulf(pa->state.vel, (pa->prev_state.time - cfra) / frs_sec); + sub_v3_v3v3(pa->state.vel, pa->prev_state.co, pa->state.co); + mul_v3_fl(pa->state.vel, (pa->prev_state.time - cfra) / frs_sec); } } /* determine rotation from velocity */ if(data[BPHYS_DATA_LOCATION] && !data[BPHYS_DATA_ROTATION]) { - vectoquat(pa->state.vel, OB_NEGX, OB_POSZ, pa->state.rot); + vec_to_quat( pa->state.rot,pa->state.vel, OB_NEGX, OB_POSZ); } } static void ptcache_interpolate_particle(int index, void *psys_v, void **data, float frs_sec, float cfra, float cfra1, float cfra2, float *old_data) @@ -292,18 +292,18 @@ static void ptcache_interpolate_particle(int index, void *psys_v, void **data, f /* determine velocity from previous location */ if(data[BPHYS_DATA_LOCATION] && !data[BPHYS_DATA_VELOCITY]) { if(keys[1].time > keys[2].time) { - VecSubf(keys[2].vel, keys[1].co, keys[2].co); - VecMulf(keys[2].vel, (keys[1].time - keys[2].time) / frs_sec); + sub_v3_v3v3(keys[2].vel, keys[1].co, keys[2].co); + mul_v3_fl(keys[2].vel, (keys[1].time - keys[2].time) / frs_sec); } else { - VecSubf(keys[2].vel, keys[2].co, keys[1].co); - VecMulf(keys[2].vel, (keys[2].time - keys[1].time) / frs_sec); + sub_v3_v3v3(keys[2].vel, keys[2].co, keys[1].co); + mul_v3_fl(keys[2].vel, (keys[2].time - keys[1].time) / frs_sec); } } /* determine rotation from velocity */ if(data[BPHYS_DATA_LOCATION] && !data[BPHYS_DATA_ROTATION]) { - vectoquat(keys[2].vel, OB_NEGX, OB_POSZ, keys[2].rot); + vec_to_quat( keys[2].rot,keys[2].vel, OB_NEGX, OB_POSZ); } if(cfra > pa->time) @@ -311,13 +311,13 @@ static void ptcache_interpolate_particle(int index, void *psys_v, void **data, f dfra = cfra2 - cfra1; - VecMulf(keys[1].vel, dfra / frs_sec); - VecMulf(keys[2].vel, dfra / frs_sec); + mul_v3_fl(keys[1].vel, dfra / frs_sec); + mul_v3_fl(keys[2].vel, dfra / frs_sec); psys_interpolate_particle(-1, keys, (cfra - cfra1) / dfra, &pa->state, 1); - QuatInterpol(pa->state.rot, keys[1].rot, keys[2].rot, (cfra - cfra1) / dfra); + interp_qt_qtqt(pa->state.rot, keys[1].rot, keys[2].rot, (cfra - cfra1) / dfra); - VecMulf(pa->state.vel, frs_sec / dfra); + mul_v3_fl(pa->state.vel, frs_sec / dfra); pa->state.time = cfra; } @@ -425,18 +425,18 @@ static int ptcache_totwrite_particle(void *psys_v) // /* determine velocity from previous location */ // if(data[BPHYS_DATA_LOCATION] && !data[BPHYS_DATA_VELOCITY]) { // if(cfra > pa->prev_state.time) { -// VecSubf(pa->state.vel, pa->state.co, pa->prev_state.co); -// VecMulf(pa->state.vel, (cfra - pa->prev_state.time) / frs_sec); +// sub_v3_v3v3(pa->state.vel, pa->state.co, pa->prev_state.co); +// mul_v3_fl(pa->state.vel, (cfra - pa->prev_state.time) / frs_sec); // } // else { -// VecSubf(pa->state.vel, pa->prev_state.co, pa->state.co); -// VecMulf(pa->state.vel, (pa->prev_state.time - cfra) / frs_sec); +// sub_v3_v3v3(pa->state.vel, pa->prev_state.co, pa->state.co); +// mul_v3_fl(pa->state.vel, (pa->prev_state.time - cfra) / frs_sec); // } // } // // /* determine rotation from velocity */ // if(data[BPHYS_DATA_LOCATION] && !data[BPHYS_DATA_ROTATION]) { -// vectoquat(pa->state.vel, OB_POSX, OB_POSZ, pa->state.rot); +// vec_to_quat( pa->state.rot,pa->state.vel, OB_POSX, OB_POSZ); // } //} //static void ptcache_interpolate_particle_stream(int index, void *psys_v, void **data, float frs_sec, float cfra, float cfra1, float cfra2, float *old_data) @@ -461,13 +461,13 @@ static int ptcache_totwrite_particle(void *psys_v) // // dfra = cfra2 - cfra1; // -// VecMulf(keys[1].vel, dfra / frs_sec); -// VecMulf(keys[2].vel, dfra / frs_sec); +// mul_v3_fl(keys[1].vel, dfra / frs_sec); +// mul_v3_fl(keys[2].vel, dfra / frs_sec); // // psys_interpolate_particle(-1, keys, (cfra - cfra1) / dfra, &pa->state, 1); -// QuatInterpol(pa->state.rot, keys[1].rot,keys[2].rot, (cfra - cfra1) / dfra); +// interp_qt_qtqt(pa->state.rot, keys[1].rot,keys[2].rot, (cfra - cfra1) / dfra); // -// VecMulf(pa->state.vel, frs_sec / dfra); +// mul_v3_fl(pa->state.vel, frs_sec / dfra); // // pa->state.time = cfra; //} @@ -525,12 +525,12 @@ static void ptcache_interpolate_cloth(int index, void *cloth_v, void **data, flo dfra = cfra2 - cfra1; - VecMulf(keys[1].vel, dfra); - VecMulf(keys[2].vel, dfra); + mul_v3_fl(keys[1].vel, dfra); + mul_v3_fl(keys[2].vel, dfra); psys_interpolate_particle(-1, keys, (cfra - cfra1) / dfra, keys, 1); - VecMulf(keys->vel, 1.0f / dfra); + mul_v3_fl(keys->vel, 1.0f / dfra); VECCOPY(vert->x, keys->co); VECCOPY(vert->v, keys->vel); diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c index 4f72ca96f5f..91fd0bac400 100644 --- a/source/blender/blenkernel/intern/scene.c +++ b/source/blender/blenkernel/intern/scene.c @@ -89,7 +89,7 @@ #include "BPY_extern.h" #endif -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" //XXX #include "nla.h" @@ -323,6 +323,7 @@ Scene *add_scene(char *name) sce->r.cfra= 1; sce->r.sfra= 1; sce->r.efra= 250; + sce->r.frame_step= 1; sce->r.xsch= 1920; sce->r.ysch= 1080; sce->r.xasp= 1; @@ -653,7 +654,7 @@ int next_object(Scene *scene, int val, Base **base, Object **ob) /* handle dupli's */ if(dupob) { - Mat4CpyMat4(dupob->ob->obmat, dupob->mat); + copy_m4_m4(dupob->ob->obmat, dupob->mat); (*base)->flag |= OB_FROMDUPLI; *ob= dupob->ob; @@ -666,7 +667,7 @@ int next_object(Scene *scene, int val, Base **base, Object **ob) (*base)->flag &= ~OB_FROMDUPLI; for(dupob= duplilist->first; dupob; dupob= dupob->next) { - Mat4CpyMat4(dupob->ob->obmat, dupob->omat); + copy_m4_m4(dupob->ob->obmat, dupob->omat); } free_object_duplilist(duplilist); diff --git a/source/blender/blenkernel/intern/seqeffects.c b/source/blender/blenkernel/intern/seqeffects.c index 078258092f7..a175ddf975a 100644 --- a/source/blender/blenkernel/intern/seqeffects.c +++ b/source/blender/blenkernel/intern/seqeffects.c @@ -38,7 +38,7 @@ #include "DNA_sequence_types.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BKE_global.h" #include "BKE_plugin_types.h" diff --git a/source/blender/blenkernel/intern/sequence.c b/source/blender/blenkernel/intern/sequence.c index 1ab085f5fa8..a986e9d7a94 100644 --- a/source/blender/blenkernel/intern/sequence.c +++ b/source/blender/blenkernel/intern/sequence.c @@ -63,8 +63,8 @@ /* **** XXX ******** */ static int seqrectx= 0; /* bad bad global! */ static int seqrecty= 0; -static void waitcursor(int val) {} -static int blender_test_break() {return 0;} +//static void waitcursor(int val) {} +//static int blender_test_break() {return 0;} /* **** XXX ******** */ @@ -1230,6 +1230,7 @@ static struct ImBuf * seq_proxy_fetch(Scene *scene, Sequence * seq, int cfra, in } } +#if 0 static void do_build_seq_ibuf(Scene *scene, Sequence * seq, TStripElem *se, int cfra, int build_proxy_run, int render_size); @@ -1360,6 +1361,7 @@ static void seq_proxy_rebuild(Scene *scene, Sequence * seq) } waitcursor(0); } +#endif /* ********************************************************************** @@ -2631,6 +2633,7 @@ ImBuf *give_ibuf_seq(Scene *scene, int rectx, int recty, int cfra, int chanshown return i; } +#if 0 /* check used when we need to change seq->blend_mode but not to effect or audio strips */ static int seq_can_blend(Sequence *seq) { @@ -2640,6 +2643,7 @@ static int seq_can_blend(Sequence *seq) return 0; } } +#endif /* *********************** threading api ******************* */ @@ -2651,8 +2655,8 @@ static pthread_mutex_t queue_lock = PTHREAD_MUTEX_INITIALIZER; static pthread_mutex_t wakeup_lock = PTHREAD_MUTEX_INITIALIZER; static pthread_cond_t wakeup_cond = PTHREAD_COND_INITIALIZER; -static pthread_mutex_t prefetch_ready_lock = PTHREAD_MUTEX_INITIALIZER; -static pthread_cond_t prefetch_ready_cond = PTHREAD_COND_INITIALIZER; +//static pthread_mutex_t prefetch_ready_lock = PTHREAD_MUTEX_INITIALIZER; +//static pthread_cond_t prefetch_ready_cond = PTHREAD_COND_INITIALIZER; static pthread_mutex_t frame_done_lock = PTHREAD_MUTEX_INITIALIZER; static pthread_cond_t frame_done_cond = PTHREAD_COND_INITIALIZER; @@ -2685,6 +2689,7 @@ typedef struct PrefetchQueueElem { struct ImBuf * ibuf; } PrefetchQueueElem; +#if 0 static void *seq_prefetch_thread(void * This_) { PrefetchThread * This = This_; @@ -2833,6 +2838,7 @@ static void seq_stop_threads() /* deinit malloc mutex */ BLI_end_threads(0); } +#endif void give_ibuf_prefetch_request(int rectx, int recty, int cfra, int chanshown, int render_size) @@ -2859,6 +2865,7 @@ void give_ibuf_prefetch_request(int rectx, int recty, int cfra, int chanshown, pthread_mutex_unlock(&wakeup_lock); } +#if 0 static void seq_wait_for_prefetch_ready() { PrefetchThread *tslot; @@ -2887,6 +2894,7 @@ static void seq_wait_for_prefetch_ready() fprintf(stderr, "SEQ-THREAD: prefetch done\n"); } +#endif ImBuf *give_ibuf_seq_threaded(Scene *scene, int rectx, int recty, int cfra, int chanshown, int render_size) { @@ -2993,6 +3001,7 @@ static void free_anim_seq(Sequence *seq) } } +#if 0 static void free_imbuf_seq_except(Scene *scene, int cfra) { Editing *ed= seq_give_editing(scene, FALSE); @@ -3042,6 +3051,7 @@ static void free_imbuf_seq_except(Scene *scene, int cfra) } SEQ_END } +#endif void free_imbuf_seq(ListBase * seqbase, int check_mem_usage) { @@ -3187,6 +3197,7 @@ void free_imbuf_seq() } #endif +#if 0 // XXX old animation system static void free_imbuf_seq_with_ipo(Scene *scene, struct Ipo *ipo) { /* force update of all sequences with this ipo, on ipo changes */ @@ -3206,6 +3217,7 @@ static void free_imbuf_seq_with_ipo(Scene *scene, struct Ipo *ipo) } SEQ_END } +#endif /* seq funcs's for transforming internally notice the difference between start/end and left/right. diff --git a/source/blender/blenkernel/intern/shrinkwrap.c b/source/blender/blenkernel/intern/shrinkwrap.c index efb7db04029..c9bf29ed29c 100644 --- a/source/blender/blenkernel/intern/shrinkwrap.c +++ b/source/blender/blenkernel/intern/shrinkwrap.c @@ -51,7 +51,7 @@ #include "BKE_mesh.h" #include "BKE_subsurf.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_kdtree.h" #include "BLI_kdopbvh.h" #include "BLI_editVert.h" @@ -116,31 +116,31 @@ DerivedMesh *object_get_derived_final(struct Scene *scene, Object *ob, CustomDat void space_transform_from_matrixs(SpaceTransform *data, float local[4][4], float target[4][4]) { float itarget[4][4]; - Mat4Invert(itarget, target); - Mat4MulSerie(data->local2target, itarget, local, 0, 0, 0, 0, 0, 0); - Mat4Invert(data->target2local, data->local2target); + invert_m4_m4(itarget, target); + mul_serie_m4(data->local2target, itarget, local, 0, 0, 0, 0, 0, 0); + invert_m4_m4(data->target2local, data->local2target); } void space_transform_apply(const SpaceTransform *data, float *co) { - VecMat4MulVecfl(co, ((SpaceTransform*)data)->local2target, co); + mul_v3_m4v3(co, ((SpaceTransform*)data)->local2target, co); } void space_transform_invert(const SpaceTransform *data, float *co) { - VecMat4MulVecfl(co, ((SpaceTransform*)data)->target2local, co); + mul_v3_m4v3(co, ((SpaceTransform*)data)->target2local, co); } static void space_transform_apply_normal(const SpaceTransform *data, float *no) { - Mat4Mul3Vecfl( ((SpaceTransform*)data)->local2target, no); - Normalize(no); // TODO: could we just determine de scale value from the matrix? + mul_mat3_m4_v3( ((SpaceTransform*)data)->local2target, no); + normalize_v3(no); // TODO: could we just determine de scale value from the matrix? } static void space_transform_invert_normal(const SpaceTransform *data, float *no) { - Mat4Mul3Vecfl(((SpaceTransform*)data)->target2local, no); - Normalize(no); // TODO: could we just determine de scale value from the matrix? + mul_mat3_m4_v3(((SpaceTransform*)data)->target2local, no); + normalize_v3(no); // TODO: could we just determine de scale value from the matrix? } /* @@ -223,7 +223,7 @@ static void shrinkwrap_calc_nearest_vertex(ShrinkwrapCalcData *calc) VECCOPY(tmp_co, nearest.co); space_transform_invert(&calc->local2target, tmp_co); - VecLerpf(co, co, tmp_co, weight); //linear interpolation + interp_v3_v3v3(co, co, tmp_co, weight); //linear interpolation } } @@ -258,7 +258,7 @@ int normal_projection_project_vertex(char options, const float *vert, const floa space_transform_apply_normal( transf, tmp_no ); no = tmp_no; - hit_tmp.dist *= Mat4ToScalef( ((SpaceTransform*)transf)->local2target ); + hit_tmp.dist *= mat4_to_scale( ((SpaceTransform*)transf)->local2target ); } else { @@ -285,7 +285,7 @@ int normal_projection_project_vertex(char options, const float *vert, const floa space_transform_invert( transf, hit_tmp.co ); space_transform_invert_normal( transf, hit_tmp.no ); - hit_tmp.dist = VecLenf( (float*)vert, hit_tmp.co ); + hit_tmp.dist = len_v3v3( (float*)vert, hit_tmp.co ); } memcpy(hit, &hit_tmp, sizeof(hit_tmp) ); @@ -331,7 +331,7 @@ static void shrinkwrap_calc_normal_projection(ShrinkwrapCalcData *calc, struct S if(calc->smd->projAxis & MOD_SHRINKWRAP_PROJECT_OVER_Y_AXIS) proj_axis[1] = 1.0f; if(calc->smd->projAxis & MOD_SHRINKWRAP_PROJECT_OVER_Z_AXIS) proj_axis[2] = 1.0f; - Normalize(proj_axis); + normalize_v3(proj_axis); //Invalid projection direction if(INPR(proj_axis, proj_axis) < FLT_EPSILON) @@ -364,7 +364,7 @@ static void shrinkwrap_calc_normal_projection(ShrinkwrapCalcData *calc, struct S { VECCOPY(tmp_co, calc->vert[i].co); if(calc->smd->projAxis == MOD_SHRINKWRAP_PROJECT_OVER_NORMAL) - NormalShortToFloat(tmp_no, calc->vert[i].no); + normal_short_to_float_v3(tmp_no, calc->vert[i].no); else VECCOPY(tmp_no, proj_axis); } @@ -403,7 +403,7 @@ static void shrinkwrap_calc_normal_projection(ShrinkwrapCalcData *calc, struct S if(hit.index != -1) { - VecLerpf(co, co, hit.co, weight); + interp_v3_v3v3(co, co, hit.co, weight); } } } @@ -486,14 +486,14 @@ static void shrinkwrap_calc_nearest_surface_point(ShrinkwrapCalcData *calc) //Adjusting the vertex weight, so that after interpolating it keeps a certain distance from the nearest position float dist = sasqrt( nearest.dist ); if(dist > FLT_EPSILON) - VecLerpf(tmp_co, tmp_co, nearest.co, (dist - calc->keepDist)/dist); //linear interpolation + interp_v3_v3v3(tmp_co, tmp_co, nearest.co, (dist - calc->keepDist)/dist); //linear interpolation else VECCOPY( tmp_co, nearest.co ); } //Convert the coordinates back to mesh coordinates space_transform_invert(&calc->local2target, tmp_co); - VecLerpf(co, co, tmp_co, weight); //linear interpolation + interp_v3_v3v3(co, co, tmp_co, weight); //linear interpolation } } diff --git a/source/blender/blenkernel/intern/simple_deform.c b/source/blender/blenkernel/intern/simple_deform.c index 2978a6f7f01..b2920615f5a 100644 --- a/source/blender/blenkernel/intern/simple_deform.c +++ b/source/blender/blenkernel/intern/simple_deform.c @@ -35,7 +35,7 @@ #include "BKE_lattice.h" #include "BKE_deform.h" #include "BKE_utildefines.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BKE_shrinkwrap.h" #include <string.h> @@ -171,8 +171,8 @@ void SimpleDeformModifier_do(SimpleDeformModifierData *smd, struct Object *ob, s } else { - Mat4CpyMat4(transf->local2target, smd->origin->obmat); - Mat4Invert(transf->target2local, transf->local2target); + copy_m4_m4(transf->local2target, smd->origin->obmat); + invert_m4_m4(transf->target2local, transf->local2target); } } @@ -246,7 +246,7 @@ void SimpleDeformModifier_do(SimpleDeformModifierData *smd, struct Object *ob, s axis_limit(limit_axis, smd_limit, co, dcut); simpleDeform_callback(smd_factor, dcut, co); //Apply deform - VecLerpf(vertexCos[i], vertexCos[i], co, weight); //Use vertex weight has coef of linear interpolation + interp_v3_v3v3(vertexCos[i], vertexCos[i], co, weight); //Use vertex weight has coef of linear interpolation if(transf) space_transform_invert(transf, vertexCos[i]); } diff --git a/source/blender/blenkernel/intern/sketch.c b/source/blender/blenkernel/intern/sketch.c index 8deae7e8e10..a41c7747b1a 100644 --- a/source/blender/blenkernel/intern/sketch.c +++ b/source/blender/blenkernel/intern/sketch.c @@ -30,7 +30,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BKE_sketch.h" #include "BKE_utildefines.h" @@ -73,7 +73,7 @@ void sk_initPoint(SK_Point *pt, SK_DrawData *dd, float *no) if (no) { VECCOPY(pt->no, no); - Normalize(pt->no); + normalize_v3(pt->no); } else { @@ -235,7 +235,7 @@ void sk_straightenStroke(SK_Stroke *stk, int start, int end, float p_start[3], f total = end - start; - VecSubf(delta_p, p_end, p_start); + sub_v3_v3v3(delta_p, p_end, p_start); prev = stk->points + start; next = stk->points + end; @@ -259,8 +259,8 @@ void sk_straightenStroke(SK_Stroke *stk, int start, int end, float p_start[3], f float *p = stk->points[start + 1 + i].p; VECCOPY(p, delta_p); - VecMulf(p, delta); - VecAddf(p, p, p_start); + mul_v3_fl(p, delta); + add_v3_v3v3(p, p, p_start); } } @@ -320,9 +320,9 @@ void sk_flattenStroke(SK_Stroke *stk, int start, int end) VECCOPY(normal, stk->points[start].no); - VecSubf(distance, stk->points[end].p, stk->points[start].p); - Projf(normal, distance, normal); - limit = Normalize(normal); + sub_v3_v3v3(distance, stk->points[end].p, stk->points[start].p); + project_v3_v3v3(normal, distance, normal); + limit = normalize_v3(normal); for (i = 1; i < total - 1; i++) { @@ -330,14 +330,14 @@ void sk_flattenStroke(SK_Stroke *stk, int start, int end) float offset[3]; float *p = stk->points[start + i].p; - VecSubf(distance, p, stk->points[start].p); - Projf(distance, distance, normal); + sub_v3_v3v3(distance, p, stk->points[start].p); + project_v3_v3v3(distance, distance, normal); VECCOPY(offset, normal); - VecMulf(offset, d); + mul_v3_fl(offset, d); - VecSubf(p, p, distance); - VecAddf(p, p, offset); + sub_v3_v3v3(p, p, distance); + add_v3_v3v3(p, p, offset); } } diff --git a/source/blender/blenkernel/intern/smoke.c b/source/blender/blenkernel/intern/smoke.c index b7fe0bdfc98..0a106b1920d 100644 --- a/source/blender/blenkernel/intern/smoke.c +++ b/source/blender/blenkernel/intern/smoke.c @@ -44,7 +44,7 @@ #include "BLI_rand.h" #include "BLI_jitter.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_edgehash.h" #include "BLI_kdtree.h" #include "BLI_kdopbvh.h" @@ -150,7 +150,7 @@ int smokeModifier_init (SmokeModifierData *smd, Object *ob, Scene *scene, Derive float tmp[3]; VECCOPY(tmp, verts[i].co); - Mat4MulVecfl(ob->obmat, tmp); + mul_m4_v3(ob->obmat, tmp); // min BB min[0] = MIN2(min[0], tmp[0]); @@ -262,8 +262,8 @@ int smokeModifier_init (SmokeModifierData *smd, Object *ob, Scene *scene, Derive // bvhtree_from_mesh_faces(smd->flow->bvh, dm, 0.0, 2, 6); // copy obmat - // Mat4CpyMat4(smd->flow->mat, ob->obmat); - // Mat4CpyMat4(smd->flow->mat_old, ob->obmat); + // copy_m4_m4(smd->flow->mat, ob->obmat); + // copy_m4_m4(smd->flow->mat_old, ob->obmat); } */ @@ -283,8 +283,8 @@ int smokeModifier_init (SmokeModifierData *smd, Object *ob, Scene *scene, Derive SmokeCollSettings *scs = smd->coll; // copy obmat - Mat4CpyMat4(scs->mat, ob->obmat); - Mat4CpyMat4(scs->mat_old, ob->obmat); + copy_m4_m4(scs->mat, ob->obmat); + copy_m4_m4(scs->mat_old, ob->obmat); fill_scs_points(ob, dm, scs); } @@ -332,7 +332,7 @@ static void fill_scs_points(Object *ob, DerivedMesh *dm, SmokeCollSettings *scs) { float tmpvec[3]; VECCOPY(tmpvec, mvert[i].co); - Mat4MulVecfl (ob->obmat, tmpvec); + mul_m4_v3(ob->obmat, tmpvec); VECCOPY(&scs->points[i * 3], tmpvec); } @@ -358,10 +358,10 @@ static void fill_scs_points(Object *ob, DerivedMesh *dm, SmokeCollSettings *scs) VECSUB(side2, mvert[ mface[i].v3 ].co, mvert[ mface[i].v1 ].co); } - Crossf(trinormorg, side1, side2); - Normalize(trinormorg); + cross_v3_v3v3(trinormorg, side1, side2); + normalize_v3(trinormorg); VECCOPY(trinorm, trinormorg); - VecMulf(trinorm, 0.25 * cell_len); + mul_v3_fl(trinorm, 0.25 * cell_len); for(j = 0; j <= divs1; j++) { @@ -390,9 +390,9 @@ static void fill_scs_points(Object *ob, DerivedMesh *dm, SmokeCollSettings *scs) VECCOPY(p3, mvert[ mface[i].v3 ].co); } - VecMulf(p1, (1.0-uf-vf)); - VecMulf(p2, uf); - VecMulf(p3, vf); + mul_v3_fl(p1, (1.0-uf-vf)); + mul_v3_fl(p2, uf); + mul_v3_fl(p3, vf); VECADD(p, p1, p2); VECADD(p, p, p3); @@ -403,7 +403,7 @@ static void fill_scs_points(Object *ob, DerivedMesh *dm, SmokeCollSettings *scs) // mMovPoints.push_back(p + trinorm); VECCOPY(tmpvec, p); VECADD(tmpvec, tmpvec, trinorm); - Mat4MulVecfl (ob->obmat, tmpvec); + mul_m4_v3(ob->obmat, tmpvec); VECCOPY(&scs->points[3 * (dm->getNumVerts(dm) + newdivs)], tmpvec); newdivs++; @@ -413,7 +413,7 @@ static void fill_scs_points(Object *ob, DerivedMesh *dm, SmokeCollSettings *scs) // mMovPoints.push_back(p - trinorm); VECCOPY(tmpvec, p); VECSUB(tmpvec, tmpvec, trinorm); - Mat4MulVecfl (ob->obmat, tmpvec); + mul_m4_v3(ob->obmat, tmpvec); VECCOPY(&scs->points[3 * (dm->getNumVerts(dm) + newdivs)], tmpvec); newdivs++; } @@ -466,11 +466,11 @@ void calcTriangleDivs(Object *ob, MVert *verts, int numverts, MFace *faces, int int divs1=0, divs2=0, divs3=0; VECCOPY(p0, verts[faces[i].v1].co); - Mat4MulVecfl (ob->obmat, p0); + mul_m4_v3(ob->obmat, p0); VECCOPY(p1, verts[faces[i].v2].co); - Mat4MulVecfl (ob->obmat, p1); + mul_m4_v3(ob->obmat, p1); VECCOPY(p2, verts[faces[i].v3].co); - Mat4MulVecfl (ob->obmat, p2); + mul_m4_v3(ob->obmat, p2); VECSUB(side1, p1, p0); VECSUB(side2, p2, p0); @@ -478,12 +478,12 @@ void calcTriangleDivs(Object *ob, MVert *verts, int numverts, MFace *faces, int if(INPR(side1, side1) > fsTri*fsTri) { - float tmp = Normalize(side1); + float tmp = normalize_v3(side1); divs1 = (int)ceil(tmp/fsTri); } if(INPR(side2, side2) > fsTri*fsTri) { - float tmp = Normalize(side2); + float tmp = normalize_v3(side2); divs2 = (int)ceil(tmp/fsTri); /* @@ -505,11 +505,11 @@ void calcTriangleDivs(Object *ob, MVert *verts, int numverts, MFace *faces, int facecounter++; VECCOPY(p0, verts[faces[i].v3].co); - Mat4MulVecfl (ob->obmat, p0); + mul_m4_v3(ob->obmat, p0); VECCOPY(p1, verts[faces[i].v4].co); - Mat4MulVecfl (ob->obmat, p1); + mul_m4_v3(ob->obmat, p1); VECCOPY(p2, verts[faces[i].v1].co); - Mat4MulVecfl (ob->obmat, p2); + mul_m4_v3(ob->obmat, p2); VECSUB(side1, p1, p0); VECSUB(side2, p2, p0); @@ -517,12 +517,12 @@ void calcTriangleDivs(Object *ob, MVert *verts, int numverts, MFace *faces, int if(INPR(side1, side1) > fsTri*fsTri) { - float tmp = Normalize(side1); + float tmp = normalize_v3(side1); divs1 = (int)ceil(tmp/fsTri); } if(INPR(side2, side2) > fsTri*fsTri) { - float tmp = Normalize(side2); + float tmp = normalize_v3(side2); divs2 = (int)ceil(tmp/fsTri); } @@ -849,7 +849,7 @@ static void smoke_calc_domain(Scene *scene, Object *ob, SmokeModifierData *smd) else if(pa->alive == PARS_DEAD && (part->flag & PART_DIED)==0) continue; else if(pa->flag & (PARS_UNEXIST+PARS_NO_DISP)) continue; // VECCOPY(pos, pa->state.co); - // Mat4MulVecfl (ob->imat, pos); + // mul_m4_v3(ob->imat, pos); // 1. get corresponding cell get_cell(smd->domain->p0, smd->domain->res, smd->domain->dx, pa->state.co, cell, 0); // check if cell is valid (in the domain boundary) @@ -1105,8 +1105,8 @@ void smokeModifier_do(SmokeModifierData *smd, Scene *scene, Object *ob, DerivedM // rigid movement support /* - Mat4CpyMat4(smd->flow->mat_old, smd->flow->mat); - Mat4CpyMat4(smd->flow->mat, ob->obmat); + copy_m4_m4(smd->flow->mat_old, smd->flow->mat); + copy_m4_m4(smd->flow->mat, ob->obmat); */ } else if(scene->r.cfra < smd->time) @@ -1131,8 +1131,8 @@ void smokeModifier_do(SmokeModifierData *smd, Scene *scene, Object *ob, DerivedM smd->coll->dm = CDDM_copy(dm); // rigid movement support - Mat4CpyMat4(smd->coll->mat_old, smd->coll->mat); - Mat4CpyMat4(smd->coll->mat, ob->obmat); + copy_m4_m4(smd->coll->mat_old, smd->coll->mat); + copy_m4_m4(smd->coll->mat, ob->obmat); } else if(scene->r.cfra < smd->time) { @@ -1378,7 +1378,7 @@ static void get_cell(float *p0, int res[3], float dx, float *pos, int *cell, int float tmp[3]; VECSUB(tmp, pos, p0); - VecMulf(tmp, 1.0 / dx); + mul_v3_fl(tmp, 1.0 / dx); if(correct) { diff --git a/source/blender/blenkernel/intern/softbody.c b/source/blender/blenkernel/intern/softbody.c index 6e986325f55..34071b0034c 100644 --- a/source/blender/blenkernel/intern/softbody.c +++ b/source/blender/blenkernel/intern/softbody.c @@ -66,7 +66,7 @@ variables on the UI for now #include "DNA_scene_types.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_ghash.h" #include "BLI_threads.h" @@ -265,7 +265,7 @@ static ccd_Mesh *ccd_mesh_make(Object *ob, DerivedMesh *dm) /* ah yeah, put the verices to global coords once */ /* and determine the ortho BB on the fly */ for(i=0; i < pccd_M->totvert; i++){ - Mat4MulVecfl(ob->obmat, pccd_M->mvert[i].co); + mul_m4_v3(ob->obmat, pccd_M->mvert[i].co); /* evaluate limits */ VECCOPY(v,pccd_M->mvert[i].co); @@ -362,7 +362,7 @@ static void ccd_mesh_update(Object *ob,ccd_Mesh *pccd_M, DerivedMesh *dm) /* ah yeah, put the verices to global coords once */ /* and determine the ortho BB on the fly */ for(i=0; i < pccd_M->totvert; i++){ - Mat4MulVecfl(ob->obmat, pccd_M->mvert[i].co); + mul_m4_v3(ob->obmat, pccd_M->mvert[i].co); /* evaluate limits */ VECCOPY(v,pccd_M->mvert[i].co); @@ -593,7 +593,7 @@ static void add_mesh_quad_diag_springs(Object *ob) if (ob->soft){ int nofquads; - float s_shear = ob->soft->shearstiff*ob->soft->shearstiff; + //float s_shear = ob->soft->shearstiff*ob->soft->shearstiff; nofquads = count_mesh_quads(me); if (nofquads) { @@ -1059,8 +1059,8 @@ static int sb_detect_face_pointCached(float face_v1[3],float face_v2[3],float fa /* calculate face normal once again SIGH */ VECSUB(edge1, face_v1, face_v2); VECSUB(edge2, face_v3, face_v2); - Crossf(d_nvect, edge2, edge1); - Normalize(d_nvect); + cross_v3_v3v3(d_nvect, edge2, edge1); + normalize_v3(d_nvect); hash = vertexowner->soft->scratch->colliderhash; @@ -1103,14 +1103,14 @@ static int sb_detect_face_pointCached(float face_v1[3],float face_v2[3],float fa while(a){ VECCOPY(nv1,mvert[a-1].co); if(mprevvert){ - VecMulf(nv1,time); + mul_v3_fl(nv1,time); Vec3PlusStVec(nv1,(1.0f-time),mprevvert[a-1].co); } /* origin to face_v2*/ VECSUB(nv1, nv1, face_v2); - facedist = Inpf(nv1,d_nvect); + facedist = dot_v3v3(nv1,d_nvect); if (ABS(facedist)<outerfacethickness){ - if (point_in_tri_prism(nv1, face_v1,face_v2,face_v3) ){ + if (isect_point_tri_prism_v3(nv1, face_v1,face_v2,face_v3) ){ float df; if (facedist > 0){ df = (outerfacethickness-facedist)/outerfacethickness; @@ -1218,17 +1218,17 @@ static int sb_detect_face_collisionCached(float face_v1[3],float face_v2[3],floa VECCOPY(nv4,mvert[mface->v4].co); } if (mprevvert){ - VecMulf(nv1,time); + mul_v3_fl(nv1,time); Vec3PlusStVec(nv1,(1.0f-time),mprevvert[mface->v1].co); - VecMulf(nv2,time); + mul_v3_fl(nv2,time); Vec3PlusStVec(nv2,(1.0f-time),mprevvert[mface->v2].co); - VecMulf(nv3,time); + mul_v3_fl(nv3,time); Vec3PlusStVec(nv3,(1.0f-time),mprevvert[mface->v3].co); if (mface->v4){ - VecMulf(nv4,time); + mul_v3_fl(nv4,time); Vec3PlusStVec(nv4,(1.0f-time),mprevvert[mface->v4].co); } } @@ -1237,12 +1237,12 @@ static int sb_detect_face_collisionCached(float face_v1[3],float face_v2[3],floa /* switch origin to be nv2*/ VECSUB(edge1, nv1, nv2); VECSUB(edge2, nv3, nv2); - Crossf(d_nvect, edge2, edge1); - Normalize(d_nvect); + cross_v3_v3v3(d_nvect, edge2, edge1); + normalize_v3(d_nvect); if ( - LineIntersectsTriangle(nv1, nv2, face_v1, face_v2, face_v3, &t, NULL) || - LineIntersectsTriangle(nv2, nv3, face_v1, face_v2, face_v3, &t, NULL) || - LineIntersectsTriangle(nv3, nv1, face_v1, face_v2, face_v3, &t, NULL) ){ + isect_line_tri_v3(nv1, nv2, face_v1, face_v2, face_v3, &t, NULL) || + isect_line_tri_v3(nv2, nv3, face_v1, face_v2, face_v3, &t, NULL) || + isect_line_tri_v3(nv3, nv1, face_v1, face_v2, face_v3, &t, NULL) ){ Vec3PlusStVec(force,-0.5f,d_nvect); *damp=tune*ob->pd->pdef_sbdamp; deflected = 2; @@ -1251,13 +1251,13 @@ static int sb_detect_face_collisionCached(float face_v1[3],float face_v2[3],floa /* switch origin to be nv4 */ VECSUB(edge1, nv3, nv4); VECSUB(edge2, nv1, nv4); - Crossf(d_nvect, edge2, edge1); - Normalize(d_nvect); + cross_v3_v3v3(d_nvect, edge2, edge1); + normalize_v3(d_nvect); if ( - /* LineIntersectsTriangle(nv1, nv3, face_v1, face_v2, face_v3, &t, NULL) || + /* isect_line_tri_v3(nv1, nv3, face_v1, face_v2, face_v3, &t, NULL) || we did that edge allready */ - LineIntersectsTriangle(nv3, nv4, face_v1, face_v2, face_v3, &t, NULL) || - LineIntersectsTriangle(nv4, nv1, face_v1, face_v2, face_v3, &t, NULL) ){ + isect_line_tri_v3(nv3, nv4, face_v1, face_v2, face_v3, &t, NULL) || + isect_line_tri_v3(nv4, nv1, face_v1, face_v2, face_v3, &t, NULL) ){ Vec3PlusStVec(force,-0.5f,d_nvect); *damp=tune*ob->pd->pdef_sbdamp; deflected = 2; @@ -1380,7 +1380,7 @@ static int sb_detect_edge_collisionCached(float edge_v1[3],float edge_v2[3],floa aabbmax[1] = MAX2(edge_v1[1],edge_v2[1]); aabbmax[2] = MAX2(edge_v1[2],edge_v2[2]); - el = VecLenf(edge_v1,edge_v2); + el = len_v3v3(edge_v1,edge_v2); hash = vertexowner->soft->scratch->colliderhash; ihash = BLI_ghashIterator_new(hash); @@ -1446,17 +1446,17 @@ static int sb_detect_edge_collisionCached(float edge_v1[3],float edge_v2[3],floa VECCOPY(nv4,mvert[mface->v4].co); } if (mprevvert){ - VecMulf(nv1,time); + mul_v3_fl(nv1,time); Vec3PlusStVec(nv1,(1.0f-time),mprevvert[mface->v1].co); - VecMulf(nv2,time); + mul_v3_fl(nv2,time); Vec3PlusStVec(nv2,(1.0f-time),mprevvert[mface->v2].co); - VecMulf(nv3,time); + mul_v3_fl(nv3,time); Vec3PlusStVec(nv3,(1.0f-time),mprevvert[mface->v3].co); if (mface->v4){ - VecMulf(nv4,time); + mul_v3_fl(nv4,time); Vec3PlusStVec(nv4,(1.0f-time),mprevvert[mface->v4].co); } } @@ -1466,15 +1466,15 @@ static int sb_detect_edge_collisionCached(float edge_v1[3],float edge_v2[3],floa VECSUB(edge1, nv1, nv2); VECSUB(edge2, nv3, nv2); - Crossf(d_nvect, edge2, edge1); - Normalize(d_nvect); - if ( LineIntersectsTriangle(edge_v1, edge_v2, nv1, nv2, nv3, &t, NULL)){ + cross_v3_v3v3(d_nvect, edge2, edge1); + normalize_v3(d_nvect); + if ( isect_line_tri_v3(edge_v1, edge_v2, nv1, nv2, nv3, &t, NULL)){ float v1[3],v2[3]; float intrusiondepth,i1,i2; VECSUB(v1, edge_v1, nv2); VECSUB(v2, edge_v2, nv2); - i1 = Inpf(v1,d_nvect); - i2 = Inpf(v2,d_nvect); + i1 = dot_v3v3(v1,d_nvect); + i2 = dot_v3v3(v2,d_nvect); intrusiondepth = -MIN2(i1,i2)/el; Vec3PlusStVec(force,intrusiondepth,d_nvect); *damp=ob->pd->pdef_sbdamp; @@ -1485,15 +1485,15 @@ static int sb_detect_edge_collisionCached(float edge_v1[3],float edge_v2[3],floa VECSUB(edge1, nv3, nv4); VECSUB(edge2, nv1, nv4); - Crossf(d_nvect, edge2, edge1); - Normalize(d_nvect); - if (LineIntersectsTriangle( edge_v1, edge_v2,nv1, nv3, nv4, &t, NULL)){ + cross_v3_v3v3(d_nvect, edge2, edge1); + normalize_v3(d_nvect); + if (isect_line_tri_v3( edge_v1, edge_v2,nv1, nv3, nv4, &t, NULL)){ float v1[3],v2[3]; float intrusiondepth,i1,i2; VECSUB(v1, edge_v1, nv4); VECSUB(v2, edge_v2, nv4); - i1 = Inpf(v1,d_nvect); - i2 = Inpf(v2,d_nvect); + i1 = dot_v3v3(v1,d_nvect); + i2 = dot_v3v3(v2,d_nvect); intrusiondepth = -MIN2(i1,i2)/el; @@ -1531,7 +1531,7 @@ static void _scan_for_ext_spring_forces(Scene *scene, Object *ob, float timenow, if (ob->softflag & OB_SB_EDGECOLL){ if ( sb_detect_edge_collisionCached (sb->bpoint[bs->v1].pos , sb->bpoint[bs->v2].pos, &damp,feedback,ob->lay,ob,timenow)){ - VecAddf(bs->ext_force,bs->ext_force,feedback); + add_v3_v3v3(bs->ext_force,bs->ext_force,feedback); bs->flag |= BSF_INTERSECT; //bs->cf=damp; bs->cf=sb->choke*0.01f; @@ -1550,30 +1550,30 @@ static void _scan_for_ext_spring_forces(Scene *scene, Object *ob, float timenow, EffectedPoint epoint; float speed[3]={0.0f,0.0f,0.0f}; float pos[3]; - VecMidf(pos, sb->bpoint[bs->v1].pos , sb->bpoint[bs->v2].pos); - VecMidf(vel, sb->bpoint[bs->v1].vec , sb->bpoint[bs->v2].vec); + mid_v3_v3v3(pos, sb->bpoint[bs->v1].pos , sb->bpoint[bs->v2].pos); + mid_v3_v3v3(vel, sb->bpoint[bs->v1].vec , sb->bpoint[bs->v2].vec); pd_point_from_soft(scene, pos, vel, -1, &epoint); pdDoEffectors(do_effector, NULL, sb->effector_weights, &epoint, force, speed); - VecMulf(speed,windfactor); - VecAddf(vel,vel,speed); + mul_v3_fl(speed,windfactor); + add_v3_v3v3(vel,vel,speed); } /* media in rest */ else{ VECADD(vel, sb->bpoint[bs->v1].vec , sb->bpoint[bs->v2].vec); } - f = Normalize(vel); + f = normalize_v3(vel); f = -0.0001f*f*f*sb->aeroedge; /* (todo) add a nice angle dependant function done for now BUT */ /* still there could be some nice drag/lift function, but who needs it */ VECSUB(sp, sb->bpoint[bs->v1].pos , sb->bpoint[bs->v2].pos); - Projf(pr,vel,sp); + project_v3_v3v3(pr,vel,sp); VECSUB(vel,vel,pr); - Normalize(vel); + normalize_v3(vel); if (ob->softflag & OB_SB_AERO_ANGLE){ - Normalize(sp); - Vec3PlusStVec(bs->ext_force,f*(1.0f-ABS(Inpf(vel,sp))),vel); + normalize_v3(sp); + Vec3PlusStVec(bs->ext_force,f*(1.0f-ABS(dot_v3v3(vel,sp))),vel); } else{ Vec3PlusStVec(bs->ext_force,f,vel); // to keep compatible with 2.45 release files @@ -1671,15 +1671,15 @@ static int choose_winner(float*w, float* pos,float*a,float*b,float*c,float*ca,fl { float mindist,cp; int winner =1; - mindist = ABS(Inpf(pos,a)); + mindist = ABS(dot_v3v3(pos,a)); - cp = ABS(Inpf(pos,b)); + cp = ABS(dot_v3v3(pos,b)); if ( mindist < cp ){ mindist = cp; winner =2; } - cp = ABS(Inpf(pos,c)); + cp = ABS(dot_v3v3(pos,c)); if (mindist < cp ){ mindist = cp; winner =3; @@ -1805,17 +1805,17 @@ static int sb_detect_vertex_collisionCached(float opco[3], float facenormal[3], VECSUB(vv4,nv4,mprevvert[mface->v4].co); } - VecMulf(nv1,time); + mul_v3_fl(nv1,time); Vec3PlusStVec(nv1,(1.0f-time),mprevvert[mface->v1].co); - VecMulf(nv2,time); + mul_v3_fl(nv2,time); Vec3PlusStVec(nv2,(1.0f-time),mprevvert[mface->v2].co); - VecMulf(nv3,time); + mul_v3_fl(nv3,time); Vec3PlusStVec(nv3,(1.0f-time),mprevvert[mface->v3].co); if (mface->v4){ - VecMulf(nv4,time); + mul_v3_fl(nv4,time); Vec3PlusStVec(nv4,(1.0f-time),mprevvert[mface->v4].co); } } @@ -1826,14 +1826,14 @@ static int sb_detect_vertex_collisionCached(float opco[3], float facenormal[3], VECSUB(edge2, nv3, nv2); VECSUB(dv1,opco,nv2); /* abuse dv1 to have vertex in question at *origin* of triangle */ - Crossf(d_nvect, edge2, edge1); - n_mag = Normalize(d_nvect); - facedist = Inpf(dv1,d_nvect); + cross_v3_v3v3(d_nvect, edge2, edge1); + n_mag = normalize_v3(d_nvect); + facedist = dot_v3v3(dv1,d_nvect); // so rules are // if ((facedist > innerfacethickness) && (facedist < outerfacethickness)){ - if (point_in_tri_prism(opco, nv1, nv2, nv3) ){ + if (isect_point_tri_prism_v3(opco, nv1, nv2, nv3) ){ force_mag_norm =(float)exp(-ee*facedist); if (facedist > outerfacethickness*ff) force_mag_norm =(float)force_mag_norm*fa*(facedist - outerfacethickness)*(facedist - outerfacethickness); @@ -1863,12 +1863,12 @@ static int sb_detect_vertex_collisionCached(float opco[3], float facenormal[3], VECSUB(edge2, nv1, nv4); VECSUB(dv1,opco,nv4); /* abuse dv1 to have vertex in question at *origin* of triangle */ - Crossf(d_nvect, edge2, edge1); - n_mag = Normalize(d_nvect); - facedist = Inpf(dv1,d_nvect); + cross_v3_v3v3(d_nvect, edge2, edge1); + n_mag = normalize_v3(d_nvect); + facedist = dot_v3v3(dv1,d_nvect); if ((facedist > innerfacethickness) && (facedist < outerfacethickness)){ - if (point_in_tri_prism(opco, nv1, nv3, nv4) ){ + if (isect_point_tri_prism_v3(opco, nv1, nv3, nv4) ){ force_mag_norm =(float)exp(-ee*facedist); if (facedist > outerfacethickness*ff) force_mag_norm =(float)force_mag_norm*fa*(facedist - outerfacethickness)*(facedist - outerfacethickness); @@ -1898,45 +1898,45 @@ static int sb_detect_vertex_collisionCached(float opco[3], float facenormal[3], { // see if 'outer' hits an edge float dist; - PclosestVL3Dfl(ve, opco, nv1, nv2); + closest_to_line_segment_v3(ve, opco, nv1, nv2); VECSUB(ve,opco,ve); - dist = Normalize(ve); + dist = normalize_v3(ve); if ((dist < outerfacethickness)&&(dist < mindistedge )){ VECCOPY(coledge,ve); mindistedge = dist, deflected=1; } - PclosestVL3Dfl(ve, opco, nv2, nv3); + closest_to_line_segment_v3(ve, opco, nv2, nv3); VECSUB(ve,opco,ve); - dist = Normalize(ve); + dist = normalize_v3(ve); if ((dist < outerfacethickness)&&(dist < mindistedge )){ VECCOPY(coledge,ve); mindistedge = dist, deflected=1; } - PclosestVL3Dfl(ve, opco, nv3, nv1); + closest_to_line_segment_v3(ve, opco, nv3, nv1); VECSUB(ve,opco,ve); - dist = Normalize(ve); + dist = normalize_v3(ve); if ((dist < outerfacethickness)&&(dist < mindistedge )){ VECCOPY(coledge,ve); mindistedge = dist, deflected=1; } if (mface->v4){ /* quad */ - PclosestVL3Dfl(ve, opco, nv3, nv4); + closest_to_line_segment_v3(ve, opco, nv3, nv4); VECSUB(ve,opco,ve); - dist = Normalize(ve); + dist = normalize_v3(ve); if ((dist < outerfacethickness)&&(dist < mindistedge )){ VECCOPY(coledge,ve); mindistedge = dist, deflected=1; } - PclosestVL3Dfl(ve, opco, nv1, nv4); + closest_to_line_segment_v3(ve, opco, nv1, nv4); VECSUB(ve,opco,ve); - dist = Normalize(ve); + dist = normalize_v3(ve); if ((dist < outerfacethickness)&&(dist < mindistedge )){ VECCOPY(coledge,ve); mindistedge = dist, @@ -1974,12 +1974,12 @@ static int sb_detect_vertex_collisionCached(float opco[3], float facenormal[3], } BLI_ghashIterator_free(ihash); - if (cavel) VecMulf(avel,1.0f/(float)cavel); + if (cavel) mul_v3_fl(avel,1.0f/(float)cavel); VECCOPY(vel,avel); if (ci) *intrusion /= ci; if (deflected){ VECCOPY(facenormal,force); - Normalize(facenormal); + normalize_v3(facenormal); } return deflected; } @@ -2060,8 +2060,8 @@ static void sb_spring_force(Object *ob,int bpi,BodySpring *bs,float iks,float fo } /* do bp1 <--> bp2 elastic */ - VecSubf(dir,bp1->pos,bp2->pos); - distance = Normalize(dir); + sub_v3_v3v3(dir,bp1->pos,bp2->pos); + distance = normalize_v3(dir); if (bs->len < distance) iks = 1.0f/(1.0f-sb->inspring)-1.0f ;/* inner spring constants function */ else @@ -2092,10 +2092,10 @@ static void sb_spring_force(Object *ob,int bpi,BodySpring *bs,float iks,float fo Vec3PlusStVec(bp1->force,(bs->len - distance)*forcefactor,dir); /* do bp1 <--> bp2 viscous */ - VecSubf(dvel,bp1->vec,bp2->vec); + sub_v3_v3v3(dvel,bp1->vec,bp2->vec); kd = sb->infrict * sb_fric_force_scale(ob); - absvel = Normalize(dvel); - projvel = Inpf(dir,dvel); + absvel = normalize_v3(dvel); + projvel = dot_v3v3(dir,dvel); kd *= absvel * projvel; Vec3PlusStVec(bp1->force,-kd,dir); @@ -2169,11 +2169,11 @@ static int _softbody_calc_forces_slice_in_a_thread(Scene *scene, Object *ob, flo for(c=sb->totpoint, obp= sb->bpoint; c>=ifirst+bb; c--, obp++) { compare = (obp->colball + bp->colball); - VecSubf(def, bp->pos, obp->pos); + sub_v3_v3v3(def, bp->pos, obp->pos); /* rather check the AABBoxes before ever calulating the real distance */ /* mathematically it is completly nuts, but performace is pretty much (3) times faster */ if ((ABS(def[0]) > compare) || (ABS(def[1]) > compare) || (ABS(def[2]) > compare)) continue; - distance = Normalize(def); + distance = normalize_v3(def); if (distance < compare ){ /* exclude body points attached with a spring */ attached = 0; @@ -2186,16 +2186,16 @@ static int _softbody_calc_forces_slice_in_a_thread(Scene *scene, Object *ob, flo if (!attached){ float f = bstune/(distance) + bstune/(compare*compare)*distance - 2.0f*bstune/compare ; - VecMidf(velcenter, bp->vec, obp->vec); - VecSubf(dvel,velcenter,bp->vec); - VecMulf(dvel,bp->mass); + mid_v3_v3v3(velcenter, bp->vec, obp->vec); + sub_v3_v3v3(dvel,velcenter,bp->vec); + mul_v3_fl(dvel,bp->mass); Vec3PlusStVec(bp->force,f*(1.0f-sb->balldamp),def); Vec3PlusStVec(bp->force,sb->balldamp,dvel); /* exploit force(a,b) == -force(b,a) part2/2 */ - VecSubf(dvel,velcenter,obp->vec); - VecMulf(dvel,bp->mass); + sub_v3_v3v3(dvel,velcenter,obp->vec); + mul_v3_fl(dvel,bp->mass); Vec3PlusStVec(obp->force,sb->balldamp,dvel); Vec3PlusStVec(obp->force,-f*(1.0f-sb->balldamp),def); @@ -2213,16 +2213,16 @@ static int _softbody_calc_forces_slice_in_a_thread(Scene *scene, Object *ob, flo if(ob->softflag & OB_SB_GOAL) { /* true elastic goal */ float ks,kd; - VecSubf(auxvect,bp->pos,bp->origT); + sub_v3_v3v3(auxvect,bp->pos,bp->origT); ks = 1.0f/(1.0f- bp->goal*sb->goalspring)-1.0f ; bp->force[0]+= -ks*(auxvect[0]); bp->force[1]+= -ks*(auxvect[1]); bp->force[2]+= -ks*(auxvect[2]); /* calulate damping forces generated by goals*/ - VecSubf(velgoal,bp->origS, bp->origE); + sub_v3_v3v3(velgoal,bp->origS, bp->origE); kd = sb->goalfrict * sb_fric_force_scale(ob) ; - VecAddf(auxvect,velgoal,bp->vec); + add_v3_v3v3(auxvect,velgoal,bp->vec); if (forcetime > 0.0 ) { /* make sure friction does not become rocket motor on time reversal */ bp->force[0]-= kd * (auxvect[0]); @@ -2241,8 +2241,8 @@ static int _softbody_calc_forces_slice_in_a_thread(Scene *scene, Object *ob, flo if (sb && scene->physics_settings.flag & PHYS_GLOBAL_GRAVITY){ float gravity[3]; VECCOPY(gravity, scene->physics_settings.gravity); - VecMulf(gravity, sb_grav_force_scale(ob)*bp->mass*sb->effector_weights->global_gravity); /* individual mass of node here */ - VecAddf(bp->force, bp->force, gravity); + mul_v3_fl(gravity, sb_grav_force_scale(ob)*bp->mass*sb->effector_weights->global_gravity); /* individual mass of node here */ + add_v3_v3v3(bp->force, bp->force, gravity); } /* particle field & vortex */ @@ -2256,7 +2256,7 @@ static int _softbody_calc_forces_slice_in_a_thread(Scene *scene, Object *ob, flo pdDoEffectors(do_effector, NULL, sb->effector_weights, &epoint, force, speed); /* apply forcefield*/ - VecMulf(force,fieldfactor* eval_sb_fric_force_scale); + mul_v3_fl(force,fieldfactor* eval_sb_fric_force_scale); VECADD(bp->force, bp->force, force); /* BP friction in moving media */ @@ -2309,7 +2309,7 @@ static int _softbody_calc_forces_slice_in_a_thread(Scene *scene, Object *ob, flo for(b=bp->nofsprings;b>0;b--){ bs = sb->bspring + bp->springs[b-1]; if (do_springcollision || do_aero){ - VecAddf(bp->force,bp->force,bs->ext_force); + add_v3_v3v3(bp->force,bp->force,bs->ext_force); if (bs->flag & BSF_INTERSECT) bp->choke = bs->cf; @@ -2478,7 +2478,7 @@ static void softbody_calc_forces(Scene *scene, Object *ob, float forcetime, floa if (scene->physics_settings.flag & PHYS_GLOBAL_GRAVITY){ VECCOPY(gravity, scene->physics_settings.gravity); - VecMulf(gravity, sb_grav_force_scale(ob)*sb->effector_weights->global_gravity); + mul_v3_fl(gravity, sb_grav_force_scale(ob)*sb->effector_weights->global_gravity); } /* check conditions for various options */ @@ -2538,13 +2538,13 @@ static void softbody_calc_forces(Scene *scene, Object *ob, float forcetime, floa //if ((bp->octantflag & obp->octantflag) == 0) continue; compare = (obp->colball + bp->colball); - VecSubf(def, bp->pos, obp->pos); + sub_v3_v3v3(def, bp->pos, obp->pos); /* rather check the AABBoxes before ever calulating the real distance */ /* mathematically it is completly nuts, but performace is pretty much (3) times faster */ if ((ABS(def[0]) > compare) || (ABS(def[1]) > compare) || (ABS(def[2]) > compare)) continue; - distance = Normalize(def); + distance = normalize_v3(def); if (distance < compare ){ /* exclude body points attached with a spring */ attached = 0; @@ -2557,9 +2557,9 @@ static void softbody_calc_forces(Scene *scene, Object *ob, float forcetime, floa if (!attached){ float f = tune/(distance) + tune/(compare*compare)*distance - 2.0f*tune/compare ; - VecMidf(velcenter, bp->vec, obp->vec); - VecSubf(dvel,velcenter,bp->vec); - VecMulf(dvel,bp->mass); + mid_v3_v3v3(velcenter, bp->vec, obp->vec); + sub_v3_v3v3(dvel,velcenter,bp->vec); + mul_v3_fl(dvel,bp->mass); Vec3PlusStVec(bp->force,f*(1.0f-sb->balldamp),def); Vec3PlusStVec(bp->force,sb->balldamp,dvel); @@ -2589,8 +2589,8 @@ static void softbody_calc_forces(Scene *scene, Object *ob, float forcetime, floa } /* exploit force(a,b) == -force(b,a) part2/2 */ - VecSubf(dvel,velcenter,obp->vec); - VecMulf(dvel,(bp->mass+obp->mass)/2.0f); + sub_v3_v3v3(dvel,velcenter,obp->vec); + mul_v3_fl(dvel,(bp->mass+obp->mass)/2.0f); Vec3PlusStVec(obp->force,sb->balldamp,dvel); Vec3PlusStVec(obp->force,-f*(1.0f-sb->balldamp),def); @@ -2609,7 +2609,7 @@ static void softbody_calc_forces(Scene *scene, Object *ob, float forcetime, floa /* do goal stuff */ if(ob->softflag & OB_SB_GOAL) { /* true elastic goal */ - VecSubf(auxvect,bp->pos,bp->origT); + sub_v3_v3v3(auxvect,bp->pos,bp->origT); ks = 1.0f/(1.0f- bp->goal*sb->goalspring)-1.0f ; bp->force[0]+= -ks*(auxvect[0]); bp->force[1]+= -ks*(auxvect[1]); @@ -2624,9 +2624,9 @@ static void softbody_calc_forces(Scene *scene, Object *ob, float forcetime, floa /* calulate damping forces generated by goals*/ - VecSubf(velgoal,bp->origS, bp->origE); + sub_v3_v3v3(velgoal,bp->origS, bp->origE); kd = sb->goalfrict * sb_fric_force_scale(ob) ; - VecAddf(auxvect,velgoal,bp->vec); + add_v3_v3v3(auxvect,velgoal,bp->vec); if (forcetime > 0.0 ) { /* make sure friction does not become rocket motor on time reversal */ bp->force[0]-= kd * (auxvect[0]); @@ -2634,7 +2634,7 @@ static void softbody_calc_forces(Scene *scene, Object *ob, float forcetime, floa bp->force[2]-= kd * (auxvect[2]); if(nl_flags & NLF_BUILD){ //int ia =3*(sb->totpoint-a); - Normalize(auxvect); + normalize_v3(auxvect); /* depending on my vel */ //dfdv_goal(ia,ia,kd*forcetime); } @@ -2663,7 +2663,7 @@ static void softbody_calc_forces(Scene *scene, Object *ob, float forcetime, floa pdDoEffectors(do_effector, NULL, sb->effector_weights, &epoint, force, speed); /* apply forcefield*/ - VecMulf(force,fieldfactor* eval_sb_fric_force_scale); + mul_v3_fl(force,fieldfactor* eval_sb_fric_force_scale); VECADD(bp->force, bp->force, force); /* BP friction in moving media */ @@ -2750,7 +2750,7 @@ static void softbody_calc_forces(Scene *scene, Object *ob, float forcetime, floa for(b=bp->nofsprings;b>0;b--){ bs = sb->bspring + bp->springs[b-1]; if (do_springcollision || do_aero){ - VecAddf(bp->force,bp->force,bs->ext_force); + add_v3_v3v3(bp->force,bp->force,bs->ext_force); if (bs->flag & BSF_INTERSECT) bp->choke = bs->cf; @@ -2882,7 +2882,7 @@ static void softbody_apply_forces(Object *ob, float forcetime, int mode, float * /* the ( ... )' operator denotes derivate respective time */ /* the euler step for velocity then becomes */ /* v(t + dt) = v(t) + a(t) * dt */ - VecMulf(bp->force,timeovermass);/* individual mass of node here */ + mul_v3_fl(bp->force,timeovermass);/* individual mass of node here */ /* some nasty if's to have heun in here too */ VECCOPY(dv,bp->force); @@ -2909,17 +2909,17 @@ static void softbody_apply_forces(Object *ob, float forcetime, int mode, float * /* so here is (x)'= v(elocity) */ /* the euler step for location then becomes */ /* x(t + dt) = x(t) + v(t~) * dt */ - VecMulf(dx,forcetime); + mul_v3_fl(dx,forcetime); /* the freezer coming sooner or later */ /* - if ((Inpf(dx,dx)<freezeloc )&&(Inpf(bp->force,bp->force)<freezeforce )){ + if ((dot_v3v3(dx,dx)<freezeloc )&&(dot_v3v3(bp->force,bp->force)<freezeforce )){ bp->frozen /=2; } else{ bp->frozen =MIN2(bp->frozen*1.05f,1.0f); } - VecMulf(dx,bp->frozen); + mul_v3_fl(dx,bp->frozen); */ /* again some nasty if's to have heun in here too */ if (mode ==1){ @@ -2940,10 +2940,10 @@ static void softbody_apply_forces(Object *ob, float forcetime, int mode, float * we don't want to end up in deep space so we add some <viscosity> to balance that out */ if (bp->choke2 > 0.0f){ - VecMulf(bp->vec,(1.0f - bp->choke2)); + mul_v3_fl(bp->vec,(1.0f - bp->choke2)); } if (bp->choke > 0.0f){ - VecMulf(bp->vec,(1.0f - bp->choke)); + mul_v3_fl(bp->vec,(1.0f - bp->choke)); } } @@ -2959,7 +2959,7 @@ static void softbody_apply_forces(Object *ob, float forcetime, int mode, float * if (bp->flag & SBF_DOFUZZY) fuzzy =1; } /*for*/ - if (sb->totpoint) VecMulf(cm,1.0f/sb->totpoint); + if (sb->totpoint) mul_v3_fl(cm,1.0f/sb->totpoint); if (sb->scratch){ VECCOPY(sb->scratch->aabbmin,aabbmin); VECCOPY(sb->scratch->aabbmax,aabbmax); @@ -3100,7 +3100,7 @@ static void apply_spring_memory(Object *ob) bs = &sb->bspring[a]; bp1 =&sb->bpoint[bs->v1]; bp2 =&sb->bpoint[bs->v2]; - l = VecLenf(bp1->pos,bp2->pos); + l = len_v3v3(bp1->pos,bp2->pos); r = bs->len/l; if (( r > 1.05f) || (r < 0.95)){ bs->len = ((100.0f - b) * bs->len + b*l)/100.0f; @@ -3192,7 +3192,7 @@ static void springs_from_mesh(Object *ob) bp= ob->soft->bpoint; for(a=0; a<me->totvert; a++, bp++) { VECCOPY(bp->origS, me->mvert[a].co); - Mat4MulVecfl(ob->obmat, bp->origS); + mul_m4_v3(ob->obmat, bp->origS); } } @@ -3203,7 +3203,7 @@ static void springs_from_mesh(Object *ob) } for(a=0; a<sb->totspring; a++) { BodySpring *bs = &sb->bspring[a]; - bs->len= scale*VecLenf(sb->bpoint[bs->v1].origS, sb->bpoint[bs->v2].origS); + bs->len= scale*len_v3v3(sb->bpoint[bs->v1].origS, sb->bpoint[bs->v2].origS); } } } @@ -3341,10 +3341,10 @@ static float globallen(float *v1,float *v2,Object *ob) { float p1[3],p2[3]; VECCOPY(p1,v1); - Mat4MulVecfl(ob->obmat, p1); + mul_m4_v3(ob->obmat, p1); VECCOPY(p2,v2); - Mat4MulVecfl(ob->obmat, p2); - return VecLenf(p1,p2); + mul_m4_v3(ob->obmat, p2); + return len_v3v3(p1,p2); } static void makelatticesprings(Lattice *lt, BodySpring *bs, int dostiff,Object *ob) @@ -3573,12 +3573,12 @@ static void softbody_to_object(Object *ob, float (*vertexCos)[3], int numVerts, int a; /* inverse matrix is not uptodate... */ - Mat4Invert(ob->imat, ob->obmat); + invert_m4_m4(ob->imat, ob->obmat); for(a=0; a<numVerts; a++, bp++) { VECCOPY(vertexCos[a], bp->pos); if(local==0) - Mat4MulVecfl(ob->imat, vertexCos[a]); /* softbody is in global coords, baked optionally not */ + mul_m4_v3(ob->imat, vertexCos[a]); /* softbody is in global coords, baked optionally not */ } } @@ -3706,7 +3706,7 @@ static void softbody_update_positions(Object *ob, SoftBody *sb, float (*vertexCo /* copy the position of the goals at desired end time */ VECCOPY(bp->origE, vertexCos[a]); /* vertexCos came from local world, go global */ - Mat4MulVecfl(ob->obmat, bp->origE); + mul_m4_v3(ob->obmat, bp->origE); /* just to be save give bp->origT a defined value will be calulated in interpolate_exciter()*/ VECCOPY(bp->origT, bp->origE); @@ -3720,7 +3720,7 @@ static void softbody_reset(Object *ob, SoftBody *sb, float (*vertexCos)[3], int for(a=0,bp=sb->bpoint; a<numVerts; a++, bp++) { VECCOPY(bp->pos, vertexCos[a]); - Mat4MulVecfl(ob->obmat, bp->pos); /* yep, sofbody is global coords*/ + mul_m4_v3(ob->obmat, bp->pos); /* yep, sofbody is global coords*/ VECCOPY(bp->origS, bp->pos); VECCOPY(bp->origE, bp->pos); VECCOPY(bp->origT, bp->pos); diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c index 125c8a0c464..7197437bfd4 100644 --- a/source/blender/blenkernel/intern/subsurf_ccg.c +++ b/source/blender/blenkernel/intern/subsurf_ccg.c @@ -54,7 +54,7 @@ #include "BLI_blenlib.h" #include "BLI_editVert.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_linklist.h" #include "BLI_memarena.h" #include "BLI_edgehash.h" @@ -561,7 +561,7 @@ static DerivedMesh *ss_to_cdderivedmesh(CCGSubSurf *ss, int ssFromEditmesh, } DM_interp_vert_data(dm, result, vertIdx, weight[0][0], numVerts, i); - VecCopyf(mvert->co, ccgSubSurf_getFaceCenterData(f)); + copy_v3_v3(mvert->co, ccgSubSurf_getFaceCenterData(f)); *origIndex = ORIGINDEX_NONE; ++mvert; ++origIndex; @@ -579,7 +579,7 @@ static DerivedMesh *ss_to_cdderivedmesh(CCGSubSurf *ss, int ssFromEditmesh, w[nextS] = weight[x][0][2]; w[otherS] = weight[x][0][3]; DM_interp_vert_data(dm, result, vertIdx, w, numVerts, i); - VecCopyf(mvert->co, + copy_v3_v3(mvert->co, ccgSubSurf_getFaceGridEdgeData(ss, f, S, x)); *origIndex = ORIGINDEX_NONE; @@ -602,7 +602,7 @@ static DerivedMesh *ss_to_cdderivedmesh(CCGSubSurf *ss, int ssFromEditmesh, w[nextS] = weight[y * gridFaces + x][0][2]; w[otherS] = weight[y * gridFaces + x][0][3]; DM_interp_vert_data(dm, result, vertIdx, w, numVerts, i); - VecCopyf(mvert->co, + copy_v3_v3(mvert->co, ccgSubSurf_getFaceGridData(ss, f, S, x, y)); *origIndex = ORIGINDEX_NONE; ++mvert; @@ -633,7 +633,7 @@ static DerivedMesh *ss_to_cdderivedmesh(CCGSubSurf *ss, int ssFromEditmesh, w[1] = (float) x / (edgeSize - 1); w[0] = 1 - w[1]; DM_interp_vert_data(dm, result, vertIdx, w, 2, i); - VecCopyf(mvert->co, ccgSubSurf_getEdgeData(ss, e, x)); + copy_v3_v3(mvert->co, ccgSubSurf_getEdgeData(ss, e, x)); *origIndex = ORIGINDEX_NONE; ++mvert; ++origIndex; @@ -651,7 +651,7 @@ static DerivedMesh *ss_to_cdderivedmesh(CCGSubSurf *ss, int ssFromEditmesh, vertIdx = GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(v)); DM_copy_vert_data(dm, result, vertIdx, i, 1); - VecCopyf(mvert->co, ccgSubSurf_getVertData(ss, v)); + copy_v3_v3(mvert->co, ccgSubSurf_getVertData(ss, v)); *((int*)ccgSubSurf_getVertUserData(ss, v)) = i; *origIndex = ccgDM_getVertMapIndex(ss, v); @@ -1016,19 +1016,19 @@ static void ccgDM_getFinalVert(DerivedMesh *dm, int vertNum, MVert *mv) offset = vertNum - ccgdm->faceMap[i].startVert; if(offset < 1) { - VecCopyf(mv->co, ccgSubSurf_getFaceCenterData(f)); + copy_v3_v3(mv->co, ccgSubSurf_getFaceCenterData(f)); } else if(offset < gridSideEnd) { offset -= 1; grid = offset / gridSideVerts; x = offset % gridSideVerts + 1; - VecCopyf(mv->co, ccgSubSurf_getFaceGridEdgeData(ss, f, grid, x)); + copy_v3_v3(mv->co, ccgSubSurf_getFaceGridEdgeData(ss, f, grid, x)); } else if(offset < gridInternalEnd) { offset -= gridSideEnd; grid = offset / gridInternalVerts; offset %= gridInternalVerts; y = offset / gridSideVerts + 1; x = offset % gridSideVerts + 1; - VecCopyf(mv->co, ccgSubSurf_getFaceGridData(ss, f, grid, x, y)); + copy_v3_v3(mv->co, ccgSubSurf_getFaceGridData(ss, f, grid, x, y)); } } else if((vertNum < ccgdm->vertMap[0].startVert) && (ccgSubSurf_getNumEdges(ss) > 0)) { /* this vert comes from edge data */ @@ -1043,14 +1043,14 @@ static void ccgDM_getFinalVert(DerivedMesh *dm, int vertNum, MVert *mv) e = ccgdm->edgeMap[i].edge; x = vertNum - ccgdm->edgeMap[i].startVert + 1; - VecCopyf(mv->co, ccgSubSurf_getEdgeData(ss, e, x)); + copy_v3_v3(mv->co, ccgSubSurf_getEdgeData(ss, e, x)); } else { /* this vert comes from vert data */ CCGVert *v; i = vertNum - ccgdm->vertMap[0].startVert; v = ccgdm->vertMap[i].vert; - VecCopyf(mv->co, ccgSubSurf_getVertData(ss, v)); + copy_v3_v3(mv->co, ccgSubSurf_getVertData(ss, v)); } } @@ -1188,11 +1188,11 @@ static void ccgDM_copyFinalVertArray(DerivedMesh *dm, MVert *mvert) CCGFace *f = ccgdm->faceMap[index].face; int x, y, S, numVerts = ccgSubSurf_getFaceNumVerts(f); - VecCopyf(mvert[i++].co, ccgSubSurf_getFaceCenterData(f)); + copy_v3_v3(mvert[i++].co, ccgSubSurf_getFaceCenterData(f)); for(S = 0; S < numVerts; S++) { for(x = 1; x < gridSize - 1; x++) { - VecCopyf(mvert[i++].co, + copy_v3_v3(mvert[i++].co, ccgSubSurf_getFaceGridEdgeData(ss, f, S, x)); } } @@ -1200,7 +1200,7 @@ static void ccgDM_copyFinalVertArray(DerivedMesh *dm, MVert *mvert) for(S = 0; S < numVerts; S++) { for(y = 1; y < gridSize - 1; y++) { for(x = 1; x < gridSize - 1; x++) { - VecCopyf(mvert[i++].co, + copy_v3_v3(mvert[i++].co, ccgSubSurf_getFaceGridData(ss, f, S, x, y)); } } @@ -1213,7 +1213,7 @@ static void ccgDM_copyFinalVertArray(DerivedMesh *dm, MVert *mvert) int x; for(x = 1; x < edgeSize - 1; x++) { - VecCopyf(mvert[i++].co, ccgSubSurf_getEdgeData(ss, e, x)); + copy_v3_v3(mvert[i++].co, ccgSubSurf_getEdgeData(ss, e, x)); } } @@ -1221,7 +1221,7 @@ static void ccgDM_copyFinalVertArray(DerivedMesh *dm, MVert *mvert) for(index = 0; index < totvert; index++) { CCGVert *v = ccgdm->vertMap[index].vert; - VecCopyf(mvert[i].co, ccgSubSurf_getVertData(ss, v)); + copy_v3_v3(mvert[i].co, ccgSubSurf_getVertData(ss, v)); i++; } @@ -1397,18 +1397,18 @@ static void ccgdm_getVertCos(DerivedMesh *dm, float (*cos)[3]) { CCGFace *f = faceMap2[index]; int x, y, S, numVerts = ccgSubSurf_getFaceNumVerts(f); - VecCopyf(cos[i++], ccgSubSurf_getFaceCenterData(f)); + copy_v3_v3(cos[i++], ccgSubSurf_getFaceCenterData(f)); for (S=0; S<numVerts; S++) { for (x=1; x<gridSize-1; x++) { - VecCopyf(cos[i++], ccgSubSurf_getFaceGridEdgeData(ss, f, S, x)); + copy_v3_v3(cos[i++], ccgSubSurf_getFaceGridEdgeData(ss, f, S, x)); } } for (S=0; S<numVerts; S++) { for (y=1; y<gridSize-1; y++) { for (x=1; x<gridSize-1; x++) { - VecCopyf(cos[i++], ccgSubSurf_getFaceGridData(ss, f, S, x, y)); + copy_v3_v3(cos[i++], ccgSubSurf_getFaceGridData(ss, f, S, x, y)); } } } @@ -1419,13 +1419,13 @@ static void ccgdm_getVertCos(DerivedMesh *dm, float (*cos)[3]) { int x; for (x=1; x<edgeSize-1; x++) { - VecCopyf(cos[i++], ccgSubSurf_getEdgeData(ss, e, x)); + copy_v3_v3(cos[i++], ccgSubSurf_getEdgeData(ss, e, x)); } } for (index=0; index<totvert; index++) { CCGVert *v = vertMap2[index]; - VecCopyf(cos[i++], ccgSubSurf_getVertData(ss, v)); + copy_v3_v3(cos[i++], ccgSubSurf_getVertData(ss, v)); } MEM_freeN(vertMap2); @@ -2709,17 +2709,17 @@ void subsurf_calculate_limit_positions(Mesh *me, float (*positions_r)[3]) for (i=0; i<N; i++) { CCGEdge *e = ccgSubSurf_getVertEdge(v, i); - VecAddf(edge_sum, edge_sum, ccgSubSurf_getEdgeData(ss, e, 1)); + add_v3_v3v3(edge_sum, edge_sum, ccgSubSurf_getEdgeData(ss, e, 1)); } for (i=0; i<numFaces; i++) { CCGFace *f = ccgSubSurf_getVertFace(v, i); - VecAddf(face_sum, face_sum, ccgSubSurf_getFaceCenterData(f)); + add_v3_v3v3(face_sum, face_sum, ccgSubSurf_getFaceCenterData(f)); } /* ad-hoc correction for boundary vertices, to at least avoid them moving completely out of place (brecht) */ if(numFaces && numFaces != N) - VecMulf(face_sum, (float)N/(float)numFaces); + mul_v3_fl(face_sum, (float)N/(float)numFaces); co = ccgSubSurf_getVertData(ss, v); positions_r[idx][0] = (co[0]*N*N + edge_sum[0]*4 + face_sum[0])/(N*(N+5)); diff --git a/source/blender/blenkernel/intern/texture.c b/source/blender/blenkernel/intern/texture.c index 14460423999..0171c58f2c6 100644 --- a/source/blender/blenkernel/intern/texture.c +++ b/source/blender/blenkernel/intern/texture.c @@ -41,7 +41,7 @@ #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_rand.h" #include "BLI_kdopbvh.h" @@ -215,7 +215,7 @@ TexMapping *add_mapping(void) texmap->size[0]= texmap->size[1]= texmap->size[2]= 1.0f; texmap->max[0]= texmap->max[1]= texmap->max[2]= 1.0f; - Mat4One(texmap->mat); + unit_m4(texmap->mat); return texmap; } @@ -224,16 +224,16 @@ void init_mapping(TexMapping *texmap) { float eul[3], smat[3][3], rmat[3][3], mat[3][3]; - SizeToMat3(texmap->size, smat); + size_to_mat3( smat,texmap->size); eul[0]= (M_PI/180.0f)*texmap->rot[0]; eul[1]= (M_PI/180.0f)*texmap->rot[1]; eul[2]= (M_PI/180.0f)*texmap->rot[2]; - EulToMat3(eul, rmat); + eul_to_mat3( rmat,eul); - Mat3MulMat3(mat, rmat, smat); + mul_m3_m3m3(mat, rmat, smat); - Mat4CpyMat3(texmap->mat, mat); + copy_m4_m3(texmap->mat, mat); VECCOPY(texmap->mat[3], texmap->loc); } diff --git a/source/blender/blenkernel/intern/world.c b/source/blender/blenkernel/intern/world.c index c75c9272e5c..b5f8bc81b81 100644 --- a/source/blender/blenkernel/intern/world.c +++ b/source/blender/blenkernel/intern/world.c @@ -42,7 +42,7 @@ #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BKE_utildefines.h" diff --git a/source/blender/blenlib/BLI_arithb.h b/source/blender/blenlib/BLI_arithb.h deleted file mode 100644 index 16da7d25721..00000000000 --- a/source/blender/blenlib/BLI_arithb.h +++ /dev/null @@ -1,571 +0,0 @@ -#undef TEST_ACTIVE -//#define ACTIVE 1 -/** - * blenlib/BLI_arithb.h mar 2001 Nzc - * - * $Id$ - * - * ***** BEGIN GPL 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. - * All rights reserved. - * - * The Original Code is: all of this file. - * - * Contributor(s): none yet. - * - * ***** END GPL LICENSE BLOCK ***** - * */ - -#ifndef BLI_ARITHB_H -#define BLI_ARITHB_H - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef WIN32 -#define _USE_MATH_DEFINES -#endif - -#include <math.h> - -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif -#ifndef M_PI_2 -#define M_PI_2 1.57079632679489661923 -#endif -#ifndef M_SQRT2 -#define M_SQRT2 1.41421356237309504880 -#endif -#ifndef M_SQRT1_2 -#define M_SQRT1_2 0.70710678118654752440 -#endif -#ifndef M_1_PI -#define M_1_PI 0.318309886183790671538 -#endif - -#ifndef M_E -#define M_E 2.7182818284590452354 -#endif -#ifndef M_LOG2E -#define M_LOG2E 1.4426950408889634074 -#endif -#ifndef M_LOG10E -#define M_LOG10E 0.43429448190325182765 -#endif -#ifndef M_LN2 -#define M_LN2 0.69314718055994530942 -#endif -#ifndef M_LN10 -#define M_LN10 2.30258509299404568402 -#endif - -#ifndef sqrtf -#define sqrtf(a) ((float)sqrt(a)) -#endif -#ifndef powf -#define powf(a, b) ((float)pow(a, b)) -#endif -#ifndef cosf -#define cosf(a) ((float)cos(a)) -#endif -#ifndef sinf -#define sinf(a) ((float)sin(a)) -#endif -#ifndef acosf -#define acosf(a) ((float)acos(a)) -#endif -#ifndef asinf -#define asinf(a) ((float)asin(a)) -#endif -#ifndef atan2f -#define atan2f(a, b) ((float)atan2(a, b)) -#endif -#ifndef tanf -#define tanf(a) ((float)tan(a)) -#endif -#ifndef atanf -#define atanf(a) ((float)atan(a)) -#endif -#ifndef floorf -#define floorf(a) ((float)floor(a)) -#endif -#ifndef ceilf -#define ceilf(a) ((float)ceil(a)) -#endif -#ifndef fabsf -#define fabsf(a) ((float)fabs(a)) -#endif -#ifndef logf -#define logf(a) ((float)log(a)) -#endif -#ifndef expf -#define expf(a) ((float)exp(a)) -#endif -#ifndef fmodf -#define fmodf(a, b) ((float)fmod(a, b)) -#endif - -#ifdef WIN32 - #ifndef FREE_WINDOWS - #define isnan(n) _isnan(n) - #define finite _finite - #endif -#endif - -#define MAT4_UNITY {{ 1.0, 0.0, 0.0, 0.0},\ - { 0.0, 1.0, 0.0, 0.0},\ - { 0.0, 0.0, 1.0, 0.0},\ - { 0.0, 0.0, 0.0, 1.0}} - -#define MAT3_UNITY {{ 1.0, 0.0, 0.0},\ - { 0.0, 1.0, 0.0},\ - { 0.0, 0.0, 1.0}} - - -void CalcCent3f(float *cent, float *v1, float *v2, float *v3); -void CalcCent4f(float *cent, float *v1, float *v2, float *v3, float *v4); - -void Crossf(float *c, float *a, float *b); -void Projf(float *c, float *v1, float *v2); - -float Inpf(float *v1, float *v2); -float Inp2f(float *v1, float *v2); - -float Normalize(float *n); -float Normalize2(float *n); - -float Sqrt3f(float f); -double Sqrt3d(double d); - -float saacos(float fac); -float saasin(float fac); -float sasqrt(float fac); -float saacosf(float fac); -float saasinf(float fac); -float sasqrtf(float fac); - -int FloatCompare(float *v1, float *v2, float limit); -int FloatCompare4(float *v1, float *v2, float limit); -float FloatLerpf(float target, float origin, float fac); - -float CalcNormFloat(float *v1, float *v2, float *v3, float *n); -float CalcNormFloat4(float *v1, float *v2, float *v3, float *v4, float *n); - -void CalcNormLong(int *v1, int *v2, int *v3, float *n); -/* CalcNormShort: is ook uitprodukt - (translates as 'is also out/cross product') */ -void CalcNormShort(short *v1, short *v2, short *v3, float *n); -float power_of_2(float val); - -/** - * @section Euler conversion routines (With Custom Order) - */ - -/* Defines for rotation orders - * WARNING: must match the eRotationModes in DNA_action_types.h - * order matters - types are saved to file! - */ -typedef enum eEulerRotationOrders { - EULER_ORDER_DEFAULT = 1, /* Blender 'default' (classic) is basically XYZ */ - EULER_ORDER_XYZ = 1, /* Blender 'default' (classic) - must be as 1 to sync with PoseChannel rotmode */ - EULER_ORDER_XZY, - EULER_ORDER_YXZ, - EULER_ORDER_YZX, - EULER_ORDER_ZXY, - EULER_ORDER_ZYX, - /* NOTE: there are about 6 more entries when including duplicated entries too */ -} eEulerRotationOrders; - -void EulOToQuat(float eul[3], short order, float quat[4]); -void QuatToEulO(float quat[4], float eul[3], short order); - -void EulOToMat3(float eul[3], short order, float Mat[3][3]); -void EulOToMat4(float eul[3], short order, float Mat[4][4]); - -void Mat3ToEulO(float Mat[3][3], float eul[3], short order); -void Mat4ToEulO(float Mat[4][4], float eul[3], short order); - -void Mat3ToCompatibleEulO(float mat[3][3], float eul[3], float oldrot[3], short order); - -void eulerO_rot(float beul[3], float ang, char axis, short order); - -/** - * @section Euler conversion routines (Blender XYZ) - */ - -void EulToMat3(float *eul, float mat[][3]); -void EulToMat4(float *eul, float mat[][4]); - -void Mat3ToEul(float tmat[][3], float *eul); -void Mat4ToEul(float tmat[][4],float *eul); - -void EulToQuat(float *eul, float *quat); - -void Mat3ToCompatibleEul(float mat[][3], float *eul, float *oldrot); -void EulToGimbalAxis(float gmat[][3], float *eul, short order); - - -void compatible_eul(float *eul, float *oldrot); -void euler_rot(float *beul, float ang, char axis); - - -/** - * @section Quaternion arithmetic routines - */ - -int QuatIsNul(float *q); -void QuatToEul(float *quat, float *eul); -void QuatOne(float *); -void QuatMul(float *, float *, float *); -void QuatMulVecf(float *q, float *v); -void QuatMulf(float *q, float f); -void QuatMulFac(float *q, float fac); - -void NormalQuat(float *); -void VecRotToQuat(float *vec, float phi, float *quat); - -void QuatSub(float *q, float *q1, float *q2); -void QuatConj(float *q); -void QuatInv(float *q); -float QuatDot(float *q1, float *q2); -void QuatCopy(float *q1, float *q2); - -void printquat(char *str, float q[4]); - -void QuatInterpol(float *result, float *quat1, float *quat2, float t); -void QuatAdd(float *result, float *quat1, float *quat2, float t); - -void QuatToMat3(float *q, float m[][3]); -void QuatToMat4(float *q, float m[][4]); - -/** - * @section matrix multiplication and copying routines - */ - -void Mat3MulFloat(float *m, float f); -void Mat4MulFloat(float *m, float f); -void Mat4MulFloat3(float *m, float f); - -void Mat3Transp(float mat[][3]); -void Mat4Transp(float mat[][4]); - -int Mat4Invert(float inverse[][4], float mat[][4]); -void Mat4InvertSimp(float inverse[][4], float mat[][4]); -void Mat4Inv(float *m1, float *m2); -void Mat4InvGG(float out[][4], float in[][4]); -void Mat3Inv(float m1[][3], float m2[][3]); - -void Mat3CpyMat4(float m1[][3],float m2[][4]); -void Mat4CpyMat3(float m1[][4], float m2[][3]); - -void Mat3BlendMat3(float out[][3], float dst[][3], float src[][3], float srcweight); -void Mat4BlendMat4(float out[][4], float dst[][4], float src[][4], float srcweight); - -float Det2x2(float a,float b,float c, float d); - -float Det3x3( - float a1, float a2, float a3, - float b1, float b2, float b3, - float c1, float c2, float c3 -); - -float Det4x4(float m[][4]); - -void Mat3Adj(float m1[][3], float m[][3]); -void Mat4Adj(float out[][4], float in[][4]); - -void Mat4MulMat4(float m1[][4], float m2[][4], float m3[][4]); -void subMat4MulMat4(float *m1, float *m2, float *m3); -#ifndef TEST_ACTIVE -void Mat3MulMat3(float m1[][3], float m3[][3], float m2[][3]); -#else -void Mat3MulMat3(float *m1, float *m3, float *m2); -#endif -void Mat4MulMat34(float (*m1)[4], float (*m3)[3], float (*m2)[4]); -void Mat4CpyMat4(float m1[][4], float m2[][4]); -void Mat4SwapMat4(float m1[][4], float m2[][4]); -void Mat3CpyMat3(float m1[][3], float m2[][3]); - -void Mat3MulSerie(float answ[][3], - float m1[][3], float m2[][3], float m3[][3], - float m4[][3], float m5[][3], float m6[][3], - float m7[][3], float m8[][3] -); - -void Mat4MulSerie(float answ[][4], float m1[][4], - float m2[][4], float m3[][4], float m4[][4], - float m5[][4], float m6[][4], float m7[][4], - float m8[][4] -); - -void Mat4Clr(float *m); -void Mat3Clr(float *m); - -void Mat3One(float m[][3]); -void Mat4One(float m[][4]); - -void Mat3Scale(float m[][3], float scale); -void Mat4Scale(float m[][4], float scale); - -/* NOTE: These only normalise the matrix, they don't make it orthogonal */ -void Mat3Ortho(float mat[][3]); -void Mat4Ortho(float mat[][4]); - -int IsMat3Orthogonal(float mat[][3]); -void Mat3Orthogonal(float mat[][3], int axis); /* axis is the one to keep in place (assumes it is non-null) */ -int IsMat4Orthogonal(float mat[][4]); -void Mat4Orthogonal(float mat[][4], int axis); /* axis is the one to keep in place (assumes it is non-null) */ - -void VecMat4MulVecfl(float *in, float mat[][4], float *vec); -void Mat4MulMat43(float (*m1)[4], float (*m3)[4], float (*m2)[3]); -void Mat3IsMat3MulMat4(float m1[][3], float m2[][3], float m3[][4]); - -void Mat4MulVec(float mat[][4],int *vec); -void Mat4MulVecfl(float mat[][4], float *vec); -void Mat4Mul3Vecfl(float mat[][4], float *vec); -void Mat4MulVec3Project(float mat[][4],float *vec); -void Mat4MulVec4fl(float mat[][4], float *vec); -void Mat3MulVec(float mat[][3],int *vec); -void Mat3MulVecfl(float mat[][3], float *vec); -void Mat3MulVecd(float mat[][3], double *vec); -void Mat3TransMulVecfl(float mat[][3], float *vec); - -void Mat3AddMat3(float m1[][3], float m2[][3], float m3[][3]); -void Mat4AddMat4(float m1[][4], float m2[][4], float m3[][4]); - -void VecUpMat3old(float *vec, float mat[][3], short axis); -void VecUpMat3(float *vec, float mat[][3], short axis); - -void VecCopyf(float *v1, float *v2); -int VecLen(int *v1, int *v2); -float VecLenf(float v1[3], float v2[3]); -float VecLength(float *v); -void VecMulf(float *v1, float f); -void VecNegf(float *v1); - -int VecLenCompare(float *v1, float *v2, float limit); -int VecCompare(float *v1, float *v2, float limit); -int VecEqual(float *v1, float *v2); -int VecIsNull(float *v); - -void printvecf(char *str,float v[3]); -void printvec4f(char *str, float v[4]); - -void VecAddf(float *v, float *v1, float *v2); -void VecSubf(float *v, float *v1, float *v2); -void VecMulVecf(float *v, float *v1, float *v2); -void VecLerpf(float *target, const float *a, const float *b, const float t); -void VecLerp3f(float p[3], const float v1[3], const float v2[3], const float v3[3], const float w[3]); -void VecMidf(float *v, float *v1, float *v2); - -void VecOrthoBasisf(float *v, float *v1, float *v2); - -float Vec2Lenf(float *v1, float *v2); -float Vec2Length(float *v); -void Vec2Mulf(float *v1, float f); -void Vec2Addf(float *v, float *v1, float *v2); -void Vec2Subf(float *v, float *v1, float *v2); -void Vec2Copyf(float *v1, float *v2); -void Vec2Lerpf(float *target, const float *a, const float *b, const float t); -void Vec2Lerp3f(float p[2], const float v1[2], const float v2[2], const float v3[2], const float w[3]); - -void AxisAngleToQuat(float q[4], float axis[3], float angle); -void QuatToAxisAngle(float q[4], float axis[3], float *angle); -void AxisAngleToEulO(float axis[3], float angle, float eul[3], short order); -void EulOToAxisAngle(float eul[3], short order, float axis[3], float *angle); -void AxisAngleToMat3(float axis[3], float angle, float mat[3][3]); -void AxisAngleToMat4(float axis[3], float angle, float mat[4][4]); -void Mat3ToAxisAngle(float mat[3][3], float axis[3], float *angle); -void Mat4ToAxisAngle(float mat[4][4], float axis[3], float *angle); - -void Mat3ToVecRot(float mat[3][3], float axis[3], float *angle); -void Mat4ToVecRot(float mat[4][4], float axis[3], float *angle); -void VecRotToMat3(float *vec, float phi, float mat[][3]); -void VecRotToMat4(float *vec, float phi, float mat[][4]); - -void RotationBetweenVectorsToQuat(float *q, float v1[3], float v2[3]); -void vectoquat(float *vec, short axis, short upflag, float *q); -void Mat3ToQuat_is_ok(float wmat[][3], float *q); - -void VecReflect(float *out, float *v1, float *v2); -void VecBisect3(float *v, float *v1, float *v2, float *v3); -float VecAngle2(float *v1, float *v2); -float VecAngle3(float *v1, float *v2, float *v3); -float NormalizedVecAngle2(float *v1, float *v2); - -float Vec2Angle3(float *v1, float *v2, float *v3); -float NormalizedVecAngle2_2D(float *v1, float *v2); - -void NormalShortToFloat(float *out, short *in); -void NormalFloatToShort(short *out, float *in); - -float DistVL2Dfl(float *v1, float *v2, float *v3); -float PdistVL2Dfl(float *v1, float *v2, float *v3); -float PdistVL3Dfl(float *v1, float *v2, float *v3); -void PclosestVL3Dfl(float *closest, float v1[3], float v2[3], float v3[3]); -float AreaF2Dfl(float *v1, float *v2, float *v3); -float AreaQ3Dfl(float *v1, float *v2, float *v3, float *v4); -float AreaT3Dfl(float *v1, float *v2, float *v3); -float AreaPoly3Dfl(int nr, float *verts, float *normal); - -/* intersect Line-Line - return: - -1: colliniar - 0: no intersection of segments - 1: exact intersection of segments - 2: cross-intersection of segments -*/ -extern short IsectLL2Df(float *v1, float *v2, float *v3, float *v4); -extern short IsectLL2Ds(short *v1, short *v2, short *v3, short *v4); - -/*point in tri, 0 no intersection, 1 intersect */ -int IsectPT2Df(float pt[2], float v1[2], float v2[2], float v3[2]); -/* point in quad, 0 no intersection, 1 intersect */ -int IsectPQ2Df(float pt[2], float v1[2], float v2[2], float v3[2], float v4[2]); - -/* interpolation weights of point in a triangle or quad, v4 may be NULL */ -void InterpWeightsQ3Dfl(float *v1, float *v2, float *v3, float *v4, float *co, float *w); -/* interpolation weights of point in a polygon with >= 3 vertices */ -void MeanValueWeights(float v[][3], int n, float *co, float *w); - -void i_lookat( - float vx, float vy, - float vz, float px, - float py, float pz, - float twist, float mat[][4] -); - -void i_window( - float left, float right, - float bottom, float top, - float nearClip, float farClip, - float mat[][4] -); - -#define BLI_CS_SMPTE 0 -#define BLI_CS_REC709 1 -#define BLI_CS_CIE 2 - -#define RAD2DEG(_rad) ((_rad)*(180.0/M_PI)) -#define DEG2RAD(_deg) ((_deg)*(M_PI/180.0)) - -void hsv_to_rgb(float h, float s, float v, float *r, float *g, float *b); -void hex_to_rgb(char *hexcol, float *r, float *g, float *b); -void rgb_to_yuv(float r, float g, float b, float *ly, float *lu, float *lv); -void yuv_to_rgb(float y, float u, float v, float *lr, float *lg, float *lb); -void ycc_to_rgb(float y, float cb, float cr, float *lr, float *lg, float *lb); -void rgb_to_ycc(float r, float g, float b, float *ly, float *lcb, float *lcr); -void rgb_to_hsv(float r, float g, float b, float *lh, float *ls, float *lv); -void xyz_to_rgb(float x, float y, float z, float *r, float *g, float *b, int colorspace); -int constrain_rgb(float *r, float *g, float *b); -unsigned int hsv_to_cpack(float h, float s, float v); -unsigned int rgb_to_cpack(float r, float g, float b); -void cpack_to_rgb(unsigned int col, float *r, float *g, float *b); -void MinMaxRGB(short c[]); - - - -void VecStar(float mat[][3],float *vec); - -short EenheidsMat(float mat[][3]); - -void i_ortho(float left, float right, float bottom, float top, float nearClip, float farClip, float matrix[][4]); -void i_polarview(float dist, float azimuth, float incidence, float twist, float Vm[][4]); -void i_translate(float Tx, float Ty, float Tz, float mat[][4]); -void i_multmatrix(float icand[][4], float Vm[][4]); -void i_rotate(float angle, char axis, float mat[][4]); - - - -void MinMax3(float *min, float *max, float *vec); -void SizeToMat3(float *size, float mat[][3]); -void SizeToMat4(float *size, float mat[][4]); - -float Mat3ToScalef(float mat[][3]); -float Mat4ToScalef(float mat[][4]); - -void printmatrix3(char *str, float m[][3]); -void printmatrix4(char *str, float m[][4]); - -/* uit Sig.Proc.85 pag 253 */ -void Mat3ToQuat(float wmat[][3], float *q); -void Mat4ToQuat(float m[][4], float *q); - -void Mat3ToSize(float mat[][3], float *size); -void Mat4ToSize(float mat[][4], float *size); - -void triatoquat(float *v1, float *v2, float *v3, float *quat); - -void LocEulSizeToMat4(float mat[4][4], float loc[3], float eul[3], float size[3]); -void LocEulOSizeToMat4(float mat[4][4], float loc[3], float eul[3], float size[3], short rotOrder); -void LocQuatSizeToMat4(float mat[4][4], float loc[3], float quat[4], float size[3]); - -void tubemap(float x, float y, float z, float *u, float *v); -void spheremap(float x, float y, float z, float *u, float *v); - -int LineIntersectLine(float v1[3], float v2[3], float v3[3], float v4[3], float i1[3], float i2[3]); -int LineIntersectLineStrict(float v1[3], float v2[3], float v3[3], float v4[3], float vi[3], float *lambda); -int LineIntersectsTriangle(float p1[3], float p2[3], float v0[3], float v1[3], float v2[3], float *lambda, float *uv); -int RayIntersectsTriangle(float p1[3], float d[3], float v0[3], float v1[3], float v2[3], float *lambda, float *uv); -int RayIntersectsTriangleThreshold(float p1[3], float d[3], float v0[3], float v1[3], float v2[3], float *lambda, float *uv, float threshold); -int SweepingSphereIntersectsTriangleUV(float p1[3], float p2[3], float radius, float v0[3], float v1[3], float v2[3], float *lambda, float *ipoint); -int AxialLineIntersectsTriangle(int axis, float co1[3], float co2[3], float v0[3], float v1[3], float v2[3], float *lambda); -int AabbIntersectAabb(float min1[3], float max1[3], float min2[3], float max2[3]); -void VecfCubicInterpol(float *x1, float *v1, float *x2, float *v2, float t, float *x, float *v); -void PointInQuad2DUV(float v0[2], float v1[2], float v2[2], float v3[2], float pt[2], float *uv); -void PointInFace2DUV(int isquad, float v0[2], float v1[2], float v2[2], float v3[2], float pt[2], float *uv); -int IsPointInTri2D(float v1[2], float v2[2], float v3[2], float pt[2]); -int IsPointInTri2DInts(int x1, int y1, int x2, int y2, int a, int b); -int point_in_tri_prism(float p[3], float v1[3], float v2[3], float v3[3]); - -float lambda_cp_line_ex(float p[3], float l1[3], float l2[3], float cp[3]); - -float AngleToLength(const float angle); - -typedef struct DualQuat { - float quat[4]; - float trans[4]; - - float scale[4][4]; - float scale_weight; -} DualQuat; - -void Mat4ToDQuat(float basemat[][4], float mat[][4], DualQuat *dq); -void DQuatToMat4(DualQuat *dq, float mat[][4]); -void DQuatAddWeighted(DualQuat *dqsum, DualQuat *dq, float weight); -void DQuatNormalize(DualQuat *dq, float totweight); -void DQuatMulVecfl(DualQuat *dq, float *co, float mat[][3]); -void DQuatCpyDQuat(DualQuat *dq1, DualQuat *dq2); - -/* Tangent stuff */ -typedef struct VertexTangent { - float tang[3], uv[2]; - struct VertexTangent *next; -} VertexTangent; - -void sum_or_add_vertex_tangent(void *arena, VertexTangent **vtang, float *tang, float *uv); -float *find_vertex_tangent(VertexTangent *vtang, float *uv); -void tangent_from_uv(float *uv1, float *uv2, float *uv3, float *co1, float *co2, float *co3, float *n, float *tang); - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/source/blender/blenlib/BLI_math.h b/source/blender/blenlib/BLI_math.h new file mode 100644 index 00000000000..b1917bc27b7 --- /dev/null +++ b/source/blender/blenlib/BLI_math.h @@ -0,0 +1,64 @@ +/** + * $Id$ + * + * ***** BEGIN GPL 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * The Original Code is: some of this file. + * + * ***** END GPL LICENSE BLOCK ***** + * */ + +#ifndef BLI_MATH +#define BLI_MATH + +/* Abbreviations: + * + * fl = float + * db = double + * v2 = vec2 = vector 2 + * v3 = vec3 = vector 3 + * v4 = vec4 = vector 4 + * qt = quat = quaternion + * dq = dquat = dual quaternion + * m2 = mat2 = matrix 2x2 + * m3 = mat3 = matrix 3x3 + * m4 = mat4 = matrix 4x4 + * eul = euler rotation + * eulO = euler with order + * + * Variable Names: + * + * f = single value + * a, b, c = vectors + * r = result vector + * A, B, C = matrices + * R = result matrix + * + */ + +#include "BLI_math_base.h" +#include "BLI_math_color.h" +#include "BLI_math_geom.h" +#include "BLI_math_matrix.h" +#include "BLI_math_rotation.h" +#include "BLI_math_vector.h" + +#endif /* BLI_MATH */ + diff --git a/source/blender/blenlib/BLI_math_base.h b/source/blender/blenlib/BLI_math_base.h new file mode 100644 index 00000000000..4e845ae35d9 --- /dev/null +++ b/source/blender/blenlib/BLI_math_base.h @@ -0,0 +1,156 @@ +/** + * $Id$ + * + * ***** BEGIN GPL 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * The Original Code is: some of this file. + * + * ***** END GPL LICENSE BLOCK ***** + * */ + +#ifndef BLI_MATH_BASE +#define BLI_MATH_BASE + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef WIN32 +#define _USE_MATH_DEFINES +#endif + +#include <math.h> + +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif +#ifndef M_PI_2 +#define M_PI_2 1.57079632679489661923 +#endif +#ifndef M_SQRT2 +#define M_SQRT2 1.41421356237309504880 +#endif +#ifndef M_SQRT1_2 +#define M_SQRT1_2 0.70710678118654752440 +#endif +#ifndef M_1_PI +#define M_1_PI 0.318309886183790671538 +#endif +#ifndef M_E +#define M_E 2.7182818284590452354 +#endif +#ifndef M_LOG2E +#define M_LOG2E 1.4426950408889634074 +#endif +#ifndef M_LOG10E +#define M_LOG10E 0.43429448190325182765 +#endif +#ifndef M_LN2 +#define M_LN2 0.69314718055994530942 +#endif +#ifndef M_LN10 +#define M_LN10 2.30258509299404568402 +#endif + +#ifndef sqrtf +#define sqrtf(a) ((float)sqrt(a)) +#endif +#ifndef powf +#define powf(a, b) ((float)pow(a, b)) +#endif +#ifndef cosf +#define cosf(a) ((float)cos(a)) +#endif +#ifndef sinf +#define sinf(a) ((float)sin(a)) +#endif +#ifndef acosf +#define acosf(a) ((float)acos(a)) +#endif +#ifndef asinf +#define asinf(a) ((float)asin(a)) +#endif +#ifndef atan2f +#define atan2f(a, b) ((float)atan2(a, b)) +#endif +#ifndef tanf +#define tanf(a) ((float)tan(a)) +#endif +#ifndef atanf +#define atanf(a) ((float)atan(a)) +#endif +#ifndef floorf +#define floorf(a) ((float)floor(a)) +#endif +#ifndef ceilf +#define ceilf(a) ((float)ceil(a)) +#endif +#ifndef fabsf +#define fabsf(a) ((float)fabs(a)) +#endif +#ifndef logf +#define logf(a) ((float)log(a)) +#endif +#ifndef expf +#define expf(a) ((float)exp(a)) +#endif +#ifndef fmodf +#define fmodf(a, b) ((float)fmod(a, b)) +#endif + +#ifdef WIN32 +#ifndef FREE_WINDOWS +#define isnan(n) _isnan(n) +#define finite _finite +#endif +#endif + +#ifndef SWAP +#define SWAP(type, a, b) { type sw_ap; sw_ap=(a); (a)=(b); (b)=sw_ap; } +#endif + +#ifndef CLAMP +#define CLAMP(a, b, c) if((a)<(b)) (a)=(b); else if((a)>(c)) (a)=(c) +#endif + +/******************************* Float ******************************/ + +float sqrt3f(float f); +double sqrt3d(double d); + +float saacosf(float f); +float saasinf(float f); +float sasqrtf(float f); +float saacos(float fac); +float saasin(float fac); +float sasqrt(float fac); + +float interpf(float a, float b, float t); + +float power_of_2(float f); + +float shell_angle_to_dist(float angle); + +#ifdef __cplusplus +} +#endif + +#endif /* BLI_MATH_BASE */ + diff --git a/source/blender/blenlib/BLI_math_color.h b/source/blender/blenlib/BLI_math_color.h new file mode 100644 index 00000000000..b2d14f3ecbd --- /dev/null +++ b/source/blender/blenlib/BLI_math_color.h @@ -0,0 +1,66 @@ +/** + * $Id$ + * + * ***** BEGIN GPL 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * The Original Code is: some of this file. + * + * ***** END GPL LICENSE BLOCK ***** + * */ + +#ifndef BLI_MATH_COLOR +#define BLI_MATH_COLOR + +#ifdef __cplusplus +extern "C" { +#endif + +#define BLI_CS_SMPTE 0 +#define BLI_CS_REC709 1 +#define BLI_CS_CIE 2 + +/******************* Conversion to RGB ********************/ + +void hsv_to_rgb(float h, float s, float v, float *r, float *g, float *b); +void hex_to_rgb(char *hexcol, float *r, float *g, float *b); +void yuv_to_rgb(float y, float u, float v, float *lr, float *lg, float *lb); +void ycc_to_rgb(float y, float cb, float cr, float *lr, float *lg, float *lb); +void xyz_to_rgb(float x, float y, float z, float *r, float *g, float *b, int colorspace); +void cpack_to_rgb(unsigned int col, float *r, float *g, float *b); + +/***************** Conversion from RGB ********************/ + +void rgb_to_yuv(float r, float g, float b, float *ly, float *lu, float *lv); +void rgb_to_ycc(float r, float g, float b, float *ly, float *lcb, float *lcr); +void rgb_to_hsv(float r, float g, float b, float *lh, float *ls, float *lv); +unsigned int rgb_to_cpack(float r, float g, float b); +unsigned int hsv_to_cpack(float h, float s, float v); + +/************************** Other *************************/ + +int constrain_rgb(float *r, float *g, float *b); +void minmax_rgb(short c[3]); + +#ifdef __cplusplus +} +#endif + +#endif /* BLI_MATH_COLOR */ + diff --git a/source/blender/blenlib/BLI_math_geom.h b/source/blender/blenlib/BLI_math_geom.h new file mode 100644 index 00000000000..d54be9d5e03 --- /dev/null +++ b/source/blender/blenlib/BLI_math_geom.h @@ -0,0 +1,156 @@ +/** + * $Id$ + * + * ***** BEGIN GPL 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * The Original Code is: some of this file. + * + * ***** END GPL LICENSE BLOCK ***** + * */ + +#ifndef BLI_MATH_GEOM +#define BLI_MATH_GEOM + +#ifdef __cplusplus +extern "C" { +#endif + +/********************************** Polygons *********************************/ + +void cent_tri_v3(float r[3], float a[3], float b[3], float c[3]); +void cent_quad_v3(float r[3], float a[3], float b[3], float c[3], float d[3]); + +float normal_tri_v3(float r[3], float a[3], float b[3], float c[3]); +float normal_quad_v3(float r[3], float a[3], float b[3], float c[3], float d[3]); + +float area_tri_v2(float a[2], float b[2], float c[2]); +float area_tri_v3(float a[3], float b[3], float c[3]); +float area_quad_v3(float a[3], float b[3], float c[3], float d[3]); +float area_poly_v3(int nr, float verts[][3], float normal[3]); + +/********************************* Distance **********************************/ + +float dist_to_line_v2(float p[2], float l1[2], float l2[2]); +float dist_to_line_segment_v2(float p[2], float l1[2], float l2[2]); + +float dist_to_line_segment_v3(float p[3], float l1[3], float l2[3]); +float closest_to_line_v3(float r[3], float p[3], float l1[3], float l2[3]); +void closest_to_line_segment_v3(float r[3], float p[3], float l1[3], float l2[3]); + +/******************************* Intersection ********************************/ + +/* TODO int return value consistency */ + +/* line-line */ +#define ISECT_LINE_LINE_COLINEAR -1 +#define ISECT_LINE_LINE_NONE 0 +#define ISECT_LINE_LINE_EXACT 1 +#define ISECT_LINE_LINE_CROSS 2 + +int isect_line_line_v2(float a1[2], float a2[2], float b1[2], float b2[2]); +int isect_line_line_v2_short(short a1[2], short a2[2], short b1[2], short b2[2]); + +/* Returns the number of point of interests + * 0 - lines are colinear + * 1 - lines are coplanar, i1 is set to intersection + * 2 - i1 and i2 are the nearest points on line 1 (v1, v2) and line 2 (v3, v4) respectively + * */ + +int isect_line_line_v3(float v1[3], float v2[3], + float v3[3], float v4[3], float i1[3], float i2[3]); +int isect_line_line_strict_v3(float v1[3], float v2[3], + float v3[3], float v4[3], float vi[3], float *lambda); + +/* line/ray triangle */ +int isect_line_tri_v3(float p1[3], float p2[3], + float v0[3], float v1[3], float v2[3], float *lambda, float *uv); +int isect_ray_tri_v3(float p1[3], float d[3], + float v0[3], float v1[3], float v2[3], float *lambda, float *uv); +int isect_ray_tri_threshold_v3(float p1[3], float d[3], + float v0[3], float v1[3], float v2[3], float *lambda, float *uv, float threshold); + +/* point in polygon */ +int isect_point_tri_v2(float p[2], float a[2], float b[2], float c[2]); +int isect_point_quad_v2(float p[2], float a[2], float b[2], float c[2], float d[2]); + +int isect_point_tri_v2(float v1[2], float v2[2], float v3[2], float pt[2]); +int isect_point_tri_v2_int(int x1, int y1, int x2, int y2, int a, int b); +int isect_point_tri_prism_v3(float p[3], float v1[3], float v2[3], float v3[3]); + +void isect_point_quad_uv_v2(float v0[2], float v1[2], float v2[2], float v3[2], + float pt[2], float *uv); +void isect_point_face_uv_v2(int isquad, float v0[2], float v1[2], float v2[2], + float v3[2], float pt[2], float *uv); + +/* other */ +int isect_sweeping_sphere_tri_v3(float p1[3], float p2[3], float radius, + float v0[3], float v1[3], float v2[3], float *lambda, float *ipoint); + +int isect_axial_line_tri_v3(int axis, float co1[3], float co2[3], + float v0[3], float v1[3], float v2[3], float *lambda); + +int isect_aabb_aabb_v3(float min1[3], float max1[3], float min2[3], float max2[3]); + +/****************************** Interpolation ********************************/ + +/* tri or quad, d can be NULL */ +void interp_weights_face_v3(float w[4], + float a[3], float b[3], float c[3], float d[3], float p[3]); +void interp_weights_poly_v3(float w[], float v[][3], int n, float p[3]); + +void interp_cubic_v3(float x[3], float v[3], + float x1[3], float v1[3], float x2[3], float v2[3], float t); + +/***************************** View & Projection *****************************/ + +void lookat_m4(float mat[4][4], float vx, float vy, + float vz, float px, float py, float pz, float twist); +void polarview_m4(float mat[4][4], float dist, float azimuth, + float incidence, float twist); + +void perspective_m4(float mat[4][4], float left, float right, + float bottom, float top, float nearClip, float farClip); +void orthographic_m4(float mat[4][4], float left, float right, + float bottom, float top, float nearClip, float farClip); + +/********************************** Mapping **********************************/ + +void map_to_tube(float *u, float *v, float x, float y, float z); +void map_to_sphere(float *u, float *v, float x, float y, float z); + +/********************************* Tangents **********************************/ + +typedef struct VertexTangent { + float tang[3], uv[2]; + struct VertexTangent *next; +} VertexTangent; + +float *find_vertex_tangent(VertexTangent *vtang, float *uv); +void sum_or_add_vertex_tangent(void *arena, VertexTangent **vtang, + float *tang, float *uv); +void tangent_from_uv(float *uv1, float *uv2, float *uv3, + float *co1, float *co2, float *co3, float *n, float *tang); + +#ifdef __cplusplus +} +#endif + +#endif /* BLI_MATH_GEOM */ + diff --git a/source/blender/blenlib/BLI_math_matrix.h b/source/blender/blenlib/BLI_math_matrix.h new file mode 100644 index 00000000000..53476e4d03c --- /dev/null +++ b/source/blender/blenlib/BLI_math_matrix.h @@ -0,0 +1,160 @@ +/** + * $Id$ + * + * ***** BEGIN GPL 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + + * The Original Code is: some of this file. + * + * ***** END GPL LICENSE BLOCK ***** + * */ + +#ifndef BLI_MATH_MATRIX +#define BLI_MATH_MATRIX + +#ifdef __cplusplus +extern "C" { +#endif + +/********************************* Init **************************************/ + +#define MAT4_UNITY {{ 1.0, 0.0, 0.0, 0.0},\ + { 0.0, 1.0, 0.0, 0.0},\ + { 0.0, 0.0, 1.0, 0.0},\ + { 0.0, 0.0, 0.0, 1.0}} + +#define MAT3_UNITY {{ 1.0, 0.0, 0.0},\ + { 0.0, 1.0, 0.0},\ + { 0.0, 0.0, 1.0}} + +void zero_m3(float R[3][3]); +void zero_m4(float R[4][4]); + +void unit_m3(float R[3][3]); +void unit_m4(float R[4][4]); + +void copy_m3_m3(float R[3][3], float A[3][3]); +void copy_m4_m4(float R[4][4], float A[4][4]); +void copy_m3_m4(float R[3][3], float A[4][4]); +void copy_m4_m3(float R[4][4], float A[3][3]); + +void swap_m3m3(float A[3][3], float B[3][3]); +void swap_m4m4(float A[4][4], float B[4][4]); + +/******************************** Arithmetic *********************************/ + +void add_m3_m3m3(float R[3][3], float A[3][3], float B[3][3]); +void add_m4_m4m4(float R[4][4], float A[4][4], float B[4][4]); + +void mul_m3_m3m3(float R[3][3], float A[3][3], float B[3][3]); +void mul_m4_m4m4(float R[4][4], float A[4][4], float B[4][4]); +void mul_m4_m3m4(float R[4][4], float A[3][3], float B[4][4]); +void mul_m4_m4m3(float R[4][4], float A[4][4], float B[3][3]); +void mul_m3_m3m4(float R[3][3], float A[3][3], float B[4][4]); + +void mul_serie_m3(float R[3][3], + float M1[3][3], float M2[3][3], float M3[3][3], float M4[3][3], + float M5[3][3], float M6[3][3], float M7[3][3], float M8[3][3]); +void mul_serie_m4(float R[4][4], + float M1[4][4], float M2[4][4], float M3[4][4], float M4[4][4], + float M5[4][4], float M6[4][4], float M7[4][4], float M8[4][4]); + +void mul_m4_v3(float M[4][4], float r[3]); +void mul_v3_m4v3(float r[3], float M[4][4], float v[3]); +void mul_mat3_m4_v3(float M[4][4], float r[3]); +void mul_m4_v4(float M[4][4], float r[3]); +void mul_project_m4_v4(float M[4][4], float r[3]); + +void mul_m3_v3(float M[3][3], float r[3]); +void mul_transposed_m3_v3(float M[3][3], float r[3]); +void mul_m3_v3_double(float M[3][3], double r[3]); + +void mul_m3_fl(float R[3][3], float f); +void mul_m4_fl(float R[4][4], float f); +void mul_mat3_m4_fl(float R[4][4], float f); + +int invert_m3(float R[3][3]); +int invert_m3_m3(float R[3][3], float A[3][3]); +int invert_m4(float R[4][4]); +int invert_m4_m4(float R[4][4], float A[4][4]); + +/****************************** Linear Algebra *******************************/ + +void transpose_m3(float R[3][3]); +void transpose_m4(float R[4][4]); + +void normalize_m3(float R[3][3]); +void normalize_m4(float R[4][4]); + +void orthogonalize_m3(float R[3][3], int axis); +void orthogonalize_m4(float R[4][4], int axis); + +int is_orthogonal_m3(float mat[3][3]); +int is_orthogonal_m4(float mat[4][4]); + +void adjoint_m3_m3(float R[3][3], float A[3][3]); +void adjoint_m4_m4(float R[4][4], float A[4][4]); + +float determinant_m2( + float a, float b, + float c, float d); +float determinant_m3( + float a, float b, float c, + float d, float e, float f, + float g, float h, float i); +float determinant_m4(float A[4][4]); + +/****************************** Transformations ******************************/ + +void scale_m3_fl(float R[3][3], float scale); +void scale_m4_fl(float R[4][4], float scale); + +float mat3_to_scale(float M[3][3]); +float mat4_to_scale(float M[4][4]); + +void size_to_mat3(float R[3][3], float size[3]); +void size_to_mat4(float R[4][4], float size[3]); + +void mat3_to_size(float r[3], float M[3][3]); +void mat4_to_size(float r[3], float M[4][4]); + +void translate_m4(float mat[4][4], float tx, float ty, float tz); +void rotate_m4(float mat[4][4], char axis, float angle); + +void loc_eul_size_to_mat4(float R[4][4], + float loc[3], float eul[3], float size[3]); +void loc_eulO_size_to_mat4(float R[4][4], + float loc[3], float eul[3], float size[3], short order); +void loc_quat_size_to_mat4(float R[4][4], + float loc[3], float quat[4], float size[3]); + +void blend_m3_m3m3(float R[3][3], float A[3][3], float B[3][3], float t); +void blend_m4_m4m4(float R[4][4], float A[4][4], float B[4][4], float t); + +/*********************************** Other ***********************************/ + +void print_m3(char *str, float M[3][3]); +void print_m4(char *str, float M[3][4]); + +#ifdef __cplusplus +} +#endif + +#endif /* BLI_MATH_MATRIX */ + diff --git a/source/blender/blenlib/BLI_math_rotation.h b/source/blender/blenlib/BLI_math_rotation.h new file mode 100644 index 00000000000..b221d89487f --- /dev/null +++ b/source/blender/blenlib/BLI_math_rotation.h @@ -0,0 +1,173 @@ +/** + * $Id$ + * + * ***** BEGIN GPL 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * The Original Code is: some of this file. + * + * ***** END GPL LICENSE BLOCK ***** + * */ + +#ifndef BLI_MATH_ROTATION +#define BLI_MATH_ROTATION + +#ifdef __cplusplus +extern "C" { +#endif + +#define RAD2DEG(_rad) ((_rad)*(180.0/M_PI)) +#define DEG2RAD(_deg) ((_deg)*(M_PI/180.0)) + +/******************************** Quaternions ********************************/ +/* stored in (w, x, y, z) order */ + +/* init */ +void unit_qt(float q[4]); +void copy_qt_qt(float q[4], float a[4]); + +/* arithmetic */ +void mul_qt_qtqt(float q[4], float a[4], float b[4]); +void mul_qt_v3(float q[4], float r[3]); +void mul_qt_fl(float q[4], float f); +void mul_fac_qt_fl(float q[4], float f); + +void sub_qt_qtqt(float q[4], float a[4], float b[4]); + +void invert_qt(float q[4]); +void conjugate_qt(float q[4]); +float dot_qtqt(float a[4], float b[4]); +void normalize_qt(float q[4]); + +/* comparison */ +int is_zero_qt(float q[4]); + +/* interpolation */ +void interp_qt_qtqt(float q[4], float a[4], float b[4], float t); +void add_qt_qtqt(float q[4], float a[4], float b[4], float t); + +/* conversion */ +void quat_to_mat3(float mat[3][3], float q[4]); +void quat_to_mat4(float mat[4][4], float q[4]); + +void mat3_to_quat(float q[4], float mat[3][3]); +void mat4_to_quat(float q[4], float mat[4][4]); +void tri_to_quat(float q[4], float a[3], float b[3], float c[3]); +void vec_to_quat(float q[4], float vec[3], short axis, short upflag); +void rotation_between_vecs_to_quat(float q[4], float v1[3], float v2[3]); + +/* TODO: don't what this is, but it's not the same as mat3_to_quat */ +void mat3_to_quat_is_ok(float q[4], float mat[3][3]); + +/* other */ +void print_qt(char *str, float q[4]); + +/******************************** Axis Angle *********************************/ + +/* conversion */ +void axis_angle_to_quat(float r[4], float axis[3], float angle); +void axis_angle_to_mat3(float R[3][3], float axis[3], float angle); +void axis_angle_to_mat4(float R[4][4], float axis[3], float angle); + +void quat_to_axis_angle(float axis[3], float *angle, float q[4]); +void mat3_to_axis_angle(float axis[3], float *angle, float M[3][3]); +void mat4_to_axis_angle(float axis[3], float *angle, float M[4][4]); + +/****************************** Vector/Rotation ******************************/ +/* old axis angle code */ +/* TODO: the following calls should probably be depreceated sometime */ + +/* conversion */ +void mat3_to_vec_rot(float vec[3], float *phi, float mat[3][3]); +void mat4_to_vec_rot(float vec[3], float *phi, float mat[4][4]); + +void vec_rot_to_quat(float quat[4], float vec[3], float phi); +void vec_rot_to_mat3(float mat[3][3], float vec[3], float phi); +void vec_rot_to_mat4(float mat[4][4], float vec[3], float phi); + +/******************************** XYZ Eulers *********************************/ + +void eul_to_quat(float quat[4], float eul[3]); +void eul_to_mat3(float mat[3][3], float eul[3]); +void eul_to_mat4(float mat[4][4], float eul[3]); + +void quat_to_eul(float eul[3], float quat[4]); +void mat3_to_eul(float eul[3], float mat[3][3]); +void mat4_to_eul(float eul[3], float mat[4][4]); + +void compatible_eul(float eul[3], float old[3]); +void mat3_to_compatible_eul(float eul[3], float old[3], float mat[3][3]); + +void rotate_eul(float eul[3], char axis, float angle); + +/************************** Arbitrary Order Eulers ***************************/ + +/* warning: must match the eRotationModes in DNA_action_types.h + * order matters - types are saved to file. */ + +typedef enum eEulerRotationOrders { + EULER_ORDER_DEFAULT = 1, /* blender classic = XYZ */ + EULER_ORDER_XYZ = 1, + EULER_ORDER_XZY, + EULER_ORDER_YXZ, + EULER_ORDER_YZX, + EULER_ORDER_ZXY, + EULER_ORDER_ZYX, + /* there are 6 more entries with dulpicate entries included */ +} eEulerRotationOrders; + +void eulO_to_quat(float quat[4], float eul[3], short order); +void eulO_to_mat3(float mat[3][3], float eul[3], short order); +void eulO_to_mat4(float mat[4][4], float eul[3], short order); +void eulO_to_axis_angle(float axis[3], float *angle, float eul[3], short order); +void eulO_to_gimbal_axis(float gmat[3][3], float eul[3], short order); + +void quat_to_eulO(float eul[3], short order, float quat[4]); +void mat3_to_eulO(float eul[3], short order, float mat[3][3]); +void mat4_to_eulO(float eul[3], short order, float mat[4][4]); +void axis_angle_to_eulO(float eul[3], short order, float axis[3], float angle); + +void mat3_to_compatible_eulO(float eul[3], float old[3], short order, float mat[3][3]); + +void rotate_eulO(float eul[3], short order, char axis, float angle); + +/******************************* Dual Quaternions ****************************/ + +typedef struct DualQuat { + float quat[4]; + float trans[4]; + + float scale[4][4]; + float scale_weight; +} DualQuat; + +void copy_dq_dq(DualQuat *r, DualQuat *dq); +void normalize_dq(DualQuat *dq, float totw); +void add_weighted_dq_dq(DualQuat *r, DualQuat *dq, float weight); +void mul_v3m3_dq(float r[3], float R[3][3], DualQuat *dq); + +void mat4_to_dquat(DualQuat *r, float base[4][4], float M[4][4]); +void dquat_to_mat4(float R[4][4], DualQuat *dq); + +#ifdef __cplusplus +} +#endif + +#endif /* BLI_MATH_ROTATION */ + diff --git a/source/blender/blenlib/BLI_math_vector.h b/source/blender/blenlib/BLI_math_vector.h new file mode 100644 index 00000000000..26602353425 --- /dev/null +++ b/source/blender/blenlib/BLI_math_vector.h @@ -0,0 +1,149 @@ +/** + * $Id$ + * + * ***** BEGIN GPL 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * The Original Code is: some of this file. + * + * ***** END GPL LICENSE BLOCK ***** + * */ + +#ifndef BLI_MATH_VECTOR +#define BLI_MATH_VECTOR + +#ifdef __cplusplus +extern "C" { +#endif + +/* add platform/compiler checks here if it is not supported */ +#define BLI_MATH_INLINE + +#ifdef BLI_MATH_INLINE +#ifdef _MSC_VER +#define MINLINE static __inline +#else +#define MINLINE static inline +#endif +#include "intern/math_vector_inline.c" +#else +#define MINLINE +#endif + +/************************************* Init ***********************************/ + +MINLINE void zero_v2(float r[2]); +MINLINE void zero_v3(float r[3]); + +MINLINE void copy_v2_v2(float r[2], float a[2]); +MINLINE void copy_v3_v3(float r[3], float a[3]); + +/********************************* Arithmetic ********************************/ + +MINLINE void add_v2_v2(float r[2], float a[2]); +MINLINE void add_v2_v2v2(float r[2], float a[2], float b[2]); +MINLINE void add_v3_v3(float r[3], float a[3]); +MINLINE void add_v3_v3v3(float r[3], float a[3], float b[3]); + +MINLINE void sub_v2_v2(float r[2], float a[2]); +MINLINE void sub_v2_v2v2(float r[2], float a[2], float b[2]); +MINLINE void sub_v3_v3(float r[3], float a[3]); +MINLINE void sub_v3_v3v3(float r[3], float a[3], float b[3]); + +MINLINE void mul_v2_fl(float r[2], float f); +MINLINE void mul_v3_fl(float r[3], float f); +MINLINE void mul_v3_v3fl(float r[3], float a[3], float f); +MINLINE void mul_v3_v3(float r[3], float a[3]); +MINLINE void mul_v3_v3v3(float r[3], float a[3], float b[3]); + +MINLINE void negate_v3(float r[3]); +MINLINE void negate_v3_v3(float r[3], float a[3]); + +MINLINE float dot_v2v2(float a[2], float b[2]); +MINLINE float dot_v3v3(float a[3], float b[3]); + +MINLINE float cross_v2v2(float a[2], float b[2]); +MINLINE void cross_v3_v3v3(float r[3], float a[3], float b[3]); + +MINLINE void star_m3_v3(float R[3][3],float a[3]); + +/*********************************** Length **********************************/ + +MINLINE float len_v2(float a[2]); +MINLINE float len_v2v2(float a[2], float b[2]); +MINLINE float len_v3(float a[3]); +MINLINE float len_v3v3(float a[3], float b[3]); + +MINLINE float normalize_v2(float r[2]); +MINLINE float normalize_v3(float r[3]); + +/******************************* Interpolation *******************************/ + +void interp_v2_v2v2(float r[2], float a[2], float b[2], float t); +void interp_v2_v2v2v2(float r[2], float a[2], float b[2], float c[3], float t[3]); +void interp_v3_v3v3(float r[3], float a[3], float b[3], float t); +void interp_v3_v3v3v3(float p[3], float v1[3], float v2[3], float v3[3], float w[3]); + +void mid_v3_v3v3(float r[3], float a[3], float b[3]); + +/********************************* Comparison ********************************/ + +int is_zero_v3(float a[3]); +int equals_v3v3(float a[3], float b[3]); +int compare_v3v3(float a[3], float b[3], float limit); +int compare_len_v3v3(float a[3], float b[3], float limit); + +int compare_v4v4(float a[4], float b[4], float limit); + +/********************************** Angles ***********************************/ +/* - angle with 2 arguments is angle between vector */ +/* - angle with 3 arguments is angle between 3 points at the middle point */ +/* - angle_normalized_* is faster equivalent if vectors are normalized */ + +float angle_v2v2(float a[2], float b[2]); +float angle_v2v2v2(float a[2], float b[2], float c[2]); +float angle_normalized_v2v2(float a[2], float b[2]); +float angle_v3v3(float a[2], float b[2]); +float angle_v3v3v3(float a[2], float b[2], float c[2]); +float angle_normalized_v3v3(float a[3], float b[3]); + +/********************************* Geometry **********************************/ + +void project_v3_v3v3(float r[3], float p[3], float n[3]); +void reflect_v3_v3v3(float r[3], float v[3], float n[3]); +void ortho_basis_v3v3_v3(float r1[3], float r2[3], float a[3]); +void bisect_v3_v3v3v3(float r[3], float a[3], float b[3], float c[3]); + +/*********************************** Other ***********************************/ + +void print_v2(char *str, float a[2]); +void print_v3(char *str, float a[3]); +void print_v4(char *str, float a[4]); + +void normal_short_to_float_v3(float r[3], short n[3]); +void normal_float_to_short_v3(short r[3], float n[3]); + +void minmax_v3_v3v3(float r[3], float min[3], float max[3]); + +#ifdef __cplusplus +} +#endif + +#endif /* BLI_MATH_VECTOR */ + diff --git a/source/blender/blenlib/intern/BLI_kdopbvh.c b/source/blender/blenlib/intern/BLI_kdopbvh.c index eea49254a0e..3f4b9fbae25 100644 --- a/source/blender/blenlib/intern/BLI_kdopbvh.c +++ b/source/blender/blenlib/intern/BLI_kdopbvh.c @@ -37,7 +37,7 @@ #include "BKE_utildefines.h" #include "BLI_kdopbvh.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #ifdef _OPENMP #include <omp.h> @@ -332,10 +332,12 @@ static void sort(BVHNode **a0, int begin, int end, int axis) bvh_insertionsort(a, begin, end, axis); } } +#if 0 static void sort_along_axis(BVHTree *tree, int start, int end, int axis) { sort(tree->nodes, start, end, axis); } +#endif //after a call to this function you can expect one of: // every node to left of a[n] are smaller or equal to it @@ -1532,6 +1534,7 @@ static void dfs_raycast(BVHRayCastData *data, BVHNode *node) } } +#if 0 static void iterative_raycast(BVHRayCastData *data, BVHNode *node) { while(node) @@ -1562,6 +1565,7 @@ static void iterative_raycast(BVHRayCastData *data, BVHNode *node) } } } +#endif int BLI_bvhtree_ray_cast(BVHTree *tree, const float *co, const float *dir, float radius, BVHTreeRayHit *hit, BVHTree_RayCastCallback callback, void *userdata) { @@ -1578,7 +1582,7 @@ int BLI_bvhtree_ray_cast(BVHTree *tree, const float *co, const float *dir, float VECCOPY(data.ray.direction, dir); data.ray.radius = radius; - Normalize(data.ray.direction); + normalize_v3(data.ray.direction); for(i=0; i<3; i++) { @@ -1635,7 +1639,7 @@ float BLI_bvhtree_bb_raycast(float *bv, float *light_start, float *light_end, fl data.ray.origin[1] = light_start[1]; data.ray.origin[2] = light_start[2]; - Normalize(data.ray.direction); + normalize_v3(data.ray.direction); VECCOPY(data.ray_dot_axis, data.ray.direction); dist = ray_nearest_hit(&data, bv); diff --git a/source/blender/blenlib/intern/BLI_kdtree.c b/source/blender/blenlib/intern/BLI_kdtree.c index ccf79ed42dc..abf61bfb734 100644 --- a/source/blender/blenlib/intern/BLI_kdtree.c +++ b/source/blender/blenlib/intern/BLI_kdtree.c @@ -34,7 +34,7 @@ #include "MEM_guardedalloc.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_kdtree.h" #define SWAP(type, a, b) { type sw_ap; sw_ap=(a); (a)=(b); (b)=sw_ap; } @@ -76,8 +76,8 @@ void BLI_kdtree_insert(KDTree *tree, int index, float *co, float *nor) KDTreeNode *node= &tree->nodes[tree->totnode++]; node->index= index; - VecCopyf(node->co, co); - if(nor) VecCopyf(node->nor, nor); + copy_v3_v3(node->co, co); + if(nor) copy_v3_v3(node->nor, nor); } static KDTreeNode *kdtree_balance(KDTreeNode *nodes, int totnode, int axis) @@ -225,7 +225,7 @@ int BLI_kdtree_find_nearest(KDTree *tree, float *co, float *nor, KDTreeNearest * if(nearest) { nearest->index= min_node->index; nearest->dist= sqrt(min_dist); - VecCopyf(nearest->co, min_node->co); + copy_v3_v3(nearest->co, min_node->co); } if(stack != defaultstack) @@ -249,7 +249,7 @@ static void add_nearest(KDTreeNearest *ptn, int *found, int n, int index, float ptn[i].index= index; ptn[i].dist= dist; - VecCopyf(ptn[i].co, co); + copy_v3_v3(ptn[i].co, co); } /* finds the nearest n entries in tree to specified coordinates */ @@ -366,7 +366,7 @@ static void add_in_range(KDTreeNearest **ptn, int found, int *totfoundstack, int to->index = index; to->dist = sqrt(dist); - VecCopyf(to->co, co); + copy_v3_v3(to->co, co); } int BLI_kdtree_range_search(KDTree *tree, float range, float *co, float *nor, KDTreeNearest **nearest) { diff --git a/source/blender/blenlib/intern/arithb.c b/source/blender/blenlib/intern/arithb.c deleted file mode 100644 index 4b54de25101..00000000000 --- a/source/blender/blenlib/intern/arithb.c +++ /dev/null @@ -1,5489 +0,0 @@ -/* arithb.c - * - * simple math for blender code - * - * sort of cleaned up mar-01 nzc - * - * $Id$ - * - * ***** BEGIN GPL 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. - * All rights reserved. - * - * The Original Code is: all of this file. - * - * Contributor(s): none yet. - * - * ***** END GPL LICENSE BLOCK ***** - */ - -/* ************************ FUNKTIES **************************** */ - -#include <stdlib.h> -#include <math.h> -#include <sys/types.h> -#include <string.h> -#include <float.h> - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#if defined(__sun__) || defined( __sun ) || defined (__sparc) || defined (__sparc__) -#include <strings.h> -#endif - -#if !defined(__sgi) && !defined(WIN32) -#include <sys/time.h> -#include <unistd.h> -#endif - -#include <stdio.h> -#include "BLI_arithb.h" -#include "BLI_memarena.h" - -/* A few small defines. Keep'em local! */ -#define SMALL_NUMBER 1.e-8 -#define ABS(x) ((x) < 0 ? -(x) : (x)) -#define SWAP(type, a, b) { type sw_ap; sw_ap=(a); (a)=(b); (b)=sw_ap; } -#define CLAMP(a, b, c) if((a)<(b)) (a)=(b); else if((a)>(c)) (a)=(c) - -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#ifndef M_SQRT2 -#define M_SQRT2 1.41421356237309504880 -#endif - - -float saacos(float fac) -{ - if(fac<= -1.0f) return (float)M_PI; - else if(fac>=1.0f) return 0.0; - else return (float)acos(fac); -} - -float saasin(float fac) -{ - if(fac<= -1.0f) return (float)-M_PI/2.0f; - else if(fac>=1.0f) return (float)M_PI/2.0f; - else return (float)asin(fac); -} - -float sasqrt(float fac) -{ - if(fac<=0.0) return 0.0; - return (float)sqrt(fac); -} - -float saacosf(float fac) -{ - if(fac<= -1.0f) return (float)M_PI; - else if(fac>=1.0f) return 0.0f; - else return (float)acosf(fac); -} - -float saasinf(float fac) -{ - if(fac<= -1.0f) return (float)-M_PI/2.0f; - else if(fac>=1.0f) return (float)M_PI/2.0f; - else return (float)asinf(fac); -} - -float sasqrtf(float fac) -{ - if(fac<=0.0) return 0.0; - return (float)sqrtf(fac); -} - -float Normalize(float *n) -{ - float d, invd; - - d= n[0]*n[0]+n[1]*n[1]+n[2]*n[2]; - /* A larger value causes normalize errors in a scaled down models with camera xtreme close */ - if(d>1.0e-35f) { - d= (float)sqrt(d); - invd= 1.0f/d; - - n[0]*=invd; - n[1]*=invd; - n[2]*=invd; - } else { - n[0]=n[1]=n[2]= 0.0f; - d= 0.0f; - } - return d; -} - -/* Crossf stores the cross product c = a x b */ -void Crossf(float *c, float *a, float *b) -{ - c[0] = a[1] * b[2] - a[2] * b[1]; - c[1] = a[2] * b[0] - a[0] * b[2]; - c[2] = a[0] * b[1] - a[1] * b[0]; -} - -/* Inpf returns the dot product, also called the scalar product and inner product */ -float Inpf( float *v1, float *v2) -{ - return v1[0]*v2[0]+v1[1]*v2[1]+v1[2]*v2[2]; -} - -/* Project v1 on v2 */ -void Projf(float *c, float *v1, float *v2) -{ - float mul; - mul = Inpf(v1, v2) / Inpf(v2, v2); - - c[0] = mul * v2[0]; - c[1] = mul * v2[1]; - c[2] = mul * v2[2]; -} - -void Mat3Transp(float mat[][3]) -{ - float t; - - t = mat[0][1] ; - mat[0][1] = mat[1][0] ; - mat[1][0] = t; - t = mat[0][2] ; - mat[0][2] = mat[2][0] ; - mat[2][0] = t; - t = mat[1][2] ; - mat[1][2] = mat[2][1] ; - mat[2][1] = t; -} - -void Mat4Transp(float mat[][4]) -{ - float t; - - t = mat[0][1] ; - mat[0][1] = mat[1][0] ; - mat[1][0] = t; - t = mat[0][2] ; - mat[0][2] = mat[2][0] ; - mat[2][0] = t; - t = mat[0][3] ; - mat[0][3] = mat[3][0] ; - mat[3][0] = t; - - t = mat[1][2] ; - mat[1][2] = mat[2][1] ; - mat[2][1] = t; - t = mat[1][3] ; - mat[1][3] = mat[3][1] ; - mat[3][1] = t; - - t = mat[2][3] ; - mat[2][3] = mat[3][2] ; - mat[3][2] = t; -} - - -/* - * invertmat - - * computes the inverse of mat and puts it in inverse. Returns - * TRUE on success (i.e. can always find a pivot) and FALSE on failure. - * Uses Gaussian Elimination with partial (maximal column) pivoting. - * - * Mark Segal - 1992 - */ - -int Mat4Invert(float inverse[][4], float mat[][4]) -{ - int i, j, k; - double temp; - float tempmat[4][4]; - float max; - int maxj; - - /* Set inverse to identity */ - for (i=0; i<4; i++) - for (j=0; j<4; j++) - inverse[i][j] = 0; - for (i=0; i<4; i++) - inverse[i][i] = 1; - - /* Copy original matrix so we don't mess it up */ - for(i = 0; i < 4; i++) - for(j = 0; j <4; j++) - tempmat[i][j] = mat[i][j]; - - for(i = 0; i < 4; i++) { - /* Look for row with max pivot */ - max = ABS(tempmat[i][i]); - maxj = i; - for(j = i + 1; j < 4; j++) { - if(ABS(tempmat[j][i]) > max) { - max = ABS(tempmat[j][i]); - maxj = j; - } - } - /* Swap rows if necessary */ - if (maxj != i) { - for( k = 0; k < 4; k++) { - SWAP(float, tempmat[i][k], tempmat[maxj][k]); - SWAP(float, inverse[i][k], inverse[maxj][k]); - } - } - - temp = tempmat[i][i]; - if (temp == 0) - return 0; /* No non-zero pivot */ - for(k = 0; k < 4; k++) { - tempmat[i][k] = (float)(tempmat[i][k]/temp); - inverse[i][k] = (float)(inverse[i][k]/temp); - } - for(j = 0; j < 4; j++) { - if(j != i) { - temp = tempmat[j][i]; - for(k = 0; k < 4; k++) { - tempmat[j][k] -= (float)(tempmat[i][k]*temp); - inverse[j][k] -= (float)(inverse[i][k]*temp); - } - } - } - } - return 1; -} -#ifdef TEST_ACTIVE -void Mat4InvertSimp(float inverse[][4], float mat[][4]) -{ - /* only for Matrices that have a rotation */ - /* based at GG IV pag 205 */ - float scale; - - scale= mat[0][0]*mat[0][0] + mat[1][0]*mat[1][0] + mat[2][0]*mat[2][0]; - if(scale==0.0) return; - - scale= 1.0/scale; - - /* transpose and scale */ - inverse[0][0]= scale*mat[0][0]; - inverse[1][0]= scale*mat[0][1]; - inverse[2][0]= scale*mat[0][2]; - inverse[0][1]= scale*mat[1][0]; - inverse[1][1]= scale*mat[1][1]; - inverse[2][1]= scale*mat[1][2]; - inverse[0][2]= scale*mat[2][0]; - inverse[1][2]= scale*mat[2][1]; - inverse[2][2]= scale*mat[2][2]; - - inverse[3][0]= -(inverse[0][0]*mat[3][0] + inverse[1][0]*mat[3][1] + inverse[2][0]*mat[3][2]); - inverse[3][1]= -(inverse[0][1]*mat[3][0] + inverse[1][1]*mat[3][1] + inverse[2][1]*mat[3][2]); - inverse[3][2]= -(inverse[0][2]*mat[3][0] + inverse[1][2]*mat[3][1] + inverse[2][2]*mat[3][2]); - - inverse[0][3]= inverse[1][3]= inverse[2][3]= 0.0; - inverse[3][3]= 1.0; -} -#endif -/* struct Matrix4; */ - -#ifdef TEST_ACTIVE -/* this seems to be unused.. */ - -void Mat4Inv(float *m1, float *m2) -{ - -/* This gets me into trouble: */ - float mat1[3][3], mat2[3][3]; - -/* void Mat3Inv(); */ -/* void Mat3CpyMat4(); */ -/* void Mat4CpyMat3(); */ - - Mat3CpyMat4((float*)mat2,m2); - Mat3Inv((float*)mat1, (float*) mat2); - Mat4CpyMat3(m1, mat1); - -} -#endif - - -float Det2x2(float a,float b,float c,float d) -{ - - return a*d - b*c; -} - - - -float Det3x3(float a1, float a2, float a3, - float b1, float b2, float b3, - float c1, float c2, float c3 ) -{ - float ans; - - ans = a1 * Det2x2( b2, b3, c2, c3 ) - - b1 * Det2x2( a2, a3, c2, c3 ) - + c1 * Det2x2( a2, a3, b2, b3 ); - - return ans; -} - -float Det4x4(float m[][4]) -{ - float ans; - float a1,a2,a3,a4,b1,b2,b3,b4,c1,c2,c3,c4,d1,d2,d3,d4; - - a1= m[0][0]; - b1= m[0][1]; - c1= m[0][2]; - d1= m[0][3]; - - a2= m[1][0]; - b2= m[1][1]; - c2= m[1][2]; - d2= m[1][3]; - - a3= m[2][0]; - b3= m[2][1]; - c3= m[2][2]; - d3= m[2][3]; - - a4= m[3][0]; - b4= m[3][1]; - c4= m[3][2]; - d4= m[3][3]; - - ans = a1 * Det3x3( b2, b3, b4, c2, c3, c4, d2, d3, d4) - - b1 * Det3x3( a2, a3, a4, c2, c3, c4, d2, d3, d4) - + c1 * Det3x3( a2, a3, a4, b2, b3, b4, d2, d3, d4) - - d1 * Det3x3( a2, a3, a4, b2, b3, b4, c2, c3, c4); - - return ans; -} - - -void Mat4Adj(float out[][4], float in[][4]) /* out = ADJ(in) */ -{ - float a1, a2, a3, a4, b1, b2, b3, b4; - float c1, c2, c3, c4, d1, d2, d3, d4; - - a1= in[0][0]; - b1= in[0][1]; - c1= in[0][2]; - d1= in[0][3]; - - a2= in[1][0]; - b2= in[1][1]; - c2= in[1][2]; - d2= in[1][3]; - - a3= in[2][0]; - b3= in[2][1]; - c3= in[2][2]; - d3= in[2][3]; - - a4= in[3][0]; - b4= in[3][1]; - c4= in[3][2]; - d4= in[3][3]; - - - out[0][0] = Det3x3( b2, b3, b4, c2, c3, c4, d2, d3, d4); - out[1][0] = - Det3x3( a2, a3, a4, c2, c3, c4, d2, d3, d4); - out[2][0] = Det3x3( a2, a3, a4, b2, b3, b4, d2, d3, d4); - out[3][0] = - Det3x3( a2, a3, a4, b2, b3, b4, c2, c3, c4); - - out[0][1] = - Det3x3( b1, b3, b4, c1, c3, c4, d1, d3, d4); - out[1][1] = Det3x3( a1, a3, a4, c1, c3, c4, d1, d3, d4); - out[2][1] = - Det3x3( a1, a3, a4, b1, b3, b4, d1, d3, d4); - out[3][1] = Det3x3( a1, a3, a4, b1, b3, b4, c1, c3, c4); - - out[0][2] = Det3x3( b1, b2, b4, c1, c2, c4, d1, d2, d4); - out[1][2] = - Det3x3( a1, a2, a4, c1, c2, c4, d1, d2, d4); - out[2][2] = Det3x3( a1, a2, a4, b1, b2, b4, d1, d2, d4); - out[3][2] = - Det3x3( a1, a2, a4, b1, b2, b4, c1, c2, c4); - - out[0][3] = - Det3x3( b1, b2, b3, c1, c2, c3, d1, d2, d3); - out[1][3] = Det3x3( a1, a2, a3, c1, c2, c3, d1, d2, d3); - out[2][3] = - Det3x3( a1, a2, a3, b1, b2, b3, d1, d2, d3); - out[3][3] = Det3x3( a1, a2, a3, b1, b2, b3, c1, c2, c3); -} - -void Mat4InvGG(float out[][4], float in[][4]) /* from Graphic Gems I, out= INV(in) */ -{ - int i, j; - float det; - - /* calculate the adjoint matrix */ - - Mat4Adj(out,in); - - det = Det4x4(out); - - if ( fabs( det ) < SMALL_NUMBER) { - return; - } - - /* scale the adjoint matrix to get the inverse */ - - for (i=0; i<4; i++) - for(j=0; j<4; j++) - out[i][j] = out[i][j] / det; - - /* the last factor is not always 1. For that reason an extra division should be implemented? */ -} - - -void Mat3Inv(float m1[][3], float m2[][3]) -{ - short a,b; - float det; - - /* calc adjoint */ - Mat3Adj(m1,m2); - - /* then determinant old matrix! */ - det= m2[0][0]* (m2[1][1]*m2[2][2] - m2[1][2]*m2[2][1]) - -m2[1][0]* (m2[0][1]*m2[2][2] - m2[0][2]*m2[2][1]) - +m2[2][0]* (m2[0][1]*m2[1][2] - m2[0][2]*m2[1][1]); - - if(det==0) det=1; - det= 1/det; - for(a=0;a<3;a++) { - for(b=0;b<3;b++) { - m1[a][b]*=det; - } - } -} - -void Mat3Adj(float m1[][3], float m[][3]) -{ - m1[0][0]=m[1][1]*m[2][2]-m[1][2]*m[2][1]; - m1[0][1]= -m[0][1]*m[2][2]+m[0][2]*m[2][1]; - m1[0][2]=m[0][1]*m[1][2]-m[0][2]*m[1][1]; - - m1[1][0]= -m[1][0]*m[2][2]+m[1][2]*m[2][0]; - m1[1][1]=m[0][0]*m[2][2]-m[0][2]*m[2][0]; - m1[1][2]= -m[0][0]*m[1][2]+m[0][2]*m[1][0]; - - m1[2][0]=m[1][0]*m[2][1]-m[1][1]*m[2][0]; - m1[2][1]= -m[0][0]*m[2][1]+m[0][1]*m[2][0]; - m1[2][2]=m[0][0]*m[1][1]-m[0][1]*m[1][0]; -} - -void Mat4MulMat4(float m1[][4], float m2[][4], float m3[][4]) -{ - /* matrix product: m1[j][k] = m2[j][i].m3[i][k] */ - - m1[0][0] = m2[0][0]*m3[0][0] + m2[0][1]*m3[1][0] + m2[0][2]*m3[2][0] + m2[0][3]*m3[3][0]; - m1[0][1] = m2[0][0]*m3[0][1] + m2[0][1]*m3[1][1] + m2[0][2]*m3[2][1] + m2[0][3]*m3[3][1]; - m1[0][2] = m2[0][0]*m3[0][2] + m2[0][1]*m3[1][2] + m2[0][2]*m3[2][2] + m2[0][3]*m3[3][2]; - m1[0][3] = m2[0][0]*m3[0][3] + m2[0][1]*m3[1][3] + m2[0][2]*m3[2][3] + m2[0][3]*m3[3][3]; - - m1[1][0] = m2[1][0]*m3[0][0] + m2[1][1]*m3[1][0] + m2[1][2]*m3[2][0] + m2[1][3]*m3[3][0]; - m1[1][1] = m2[1][0]*m3[0][1] + m2[1][1]*m3[1][1] + m2[1][2]*m3[2][1] + m2[1][3]*m3[3][1]; - m1[1][2] = m2[1][0]*m3[0][2] + m2[1][1]*m3[1][2] + m2[1][2]*m3[2][2] + m2[1][3]*m3[3][2]; - m1[1][3] = m2[1][0]*m3[0][3] + m2[1][1]*m3[1][3] + m2[1][2]*m3[2][3] + m2[1][3]*m3[3][3]; - - m1[2][0] = m2[2][0]*m3[0][0] + m2[2][1]*m3[1][0] + m2[2][2]*m3[2][0] + m2[2][3]*m3[3][0]; - m1[2][1] = m2[2][0]*m3[0][1] + m2[2][1]*m3[1][1] + m2[2][2]*m3[2][1] + m2[2][3]*m3[3][1]; - m1[2][2] = m2[2][0]*m3[0][2] + m2[2][1]*m3[1][2] + m2[2][2]*m3[2][2] + m2[2][3]*m3[3][2]; - m1[2][3] = m2[2][0]*m3[0][3] + m2[2][1]*m3[1][3] + m2[2][2]*m3[2][3] + m2[2][3]*m3[3][3]; - - m1[3][0] = m2[3][0]*m3[0][0] + m2[3][1]*m3[1][0] + m2[3][2]*m3[2][0] + m2[3][3]*m3[3][0]; - m1[3][1] = m2[3][0]*m3[0][1] + m2[3][1]*m3[1][1] + m2[3][2]*m3[2][1] + m2[3][3]*m3[3][1]; - m1[3][2] = m2[3][0]*m3[0][2] + m2[3][1]*m3[1][2] + m2[3][2]*m3[2][2] + m2[3][3]*m3[3][2]; - m1[3][3] = m2[3][0]*m3[0][3] + m2[3][1]*m3[1][3] + m2[3][2]*m3[2][3] + m2[3][3]*m3[3][3]; - -} -#ifdef TEST_ACTIVE -void subMat4MulMat4(float *m1, float *m2, float *m3) -{ - - m1[0]= m2[0]*m3[0] + m2[1]*m3[4] + m2[2]*m3[8]; - m1[1]= m2[0]*m3[1] + m2[1]*m3[5] + m2[2]*m3[9]; - m1[2]= m2[0]*m3[2] + m2[1]*m3[6] + m2[2]*m3[10]; - m1[3]= m2[0]*m3[3] + m2[1]*m3[7] + m2[2]*m3[11] + m2[3]; - m1+=4; - m2+=4; - m1[0]= m2[0]*m3[0] + m2[1]*m3[4] + m2[2]*m3[8]; - m1[1]= m2[0]*m3[1] + m2[1]*m3[5] + m2[2]*m3[9]; - m1[2]= m2[0]*m3[2] + m2[1]*m3[6] + m2[2]*m3[10]; - m1[3]= m2[0]*m3[3] + m2[1]*m3[7] + m2[2]*m3[11] + m2[3]; - m1+=4; - m2+=4; - m1[0]= m2[0]*m3[0] + m2[1]*m3[4] + m2[2]*m3[8]; - m1[1]= m2[0]*m3[1] + m2[1]*m3[5] + m2[2]*m3[9]; - m1[2]= m2[0]*m3[2] + m2[1]*m3[6] + m2[2]*m3[10]; - m1[3]= m2[0]*m3[3] + m2[1]*m3[7] + m2[2]*m3[11] + m2[3]; -} -#endif - -#ifndef TEST_ACTIVE -void Mat3MulMat3(float m1[][3], float m3[][3], float m2[][3]) -#else -void Mat3MulMat3(float *m1, float *m3, float *m2) -#endif -{ - /* m1[i][j] = m2[i][k]*m3[k][j], args are flipped! */ -#ifndef TEST_ACTIVE - m1[0][0]= m2[0][0]*m3[0][0] + m2[0][1]*m3[1][0] + m2[0][2]*m3[2][0]; - m1[0][1]= m2[0][0]*m3[0][1] + m2[0][1]*m3[1][1] + m2[0][2]*m3[2][1]; - m1[0][2]= m2[0][0]*m3[0][2] + m2[0][1]*m3[1][2] + m2[0][2]*m3[2][2]; - - m1[1][0]= m2[1][0]*m3[0][0] + m2[1][1]*m3[1][0] + m2[1][2]*m3[2][0]; - m1[1][1]= m2[1][0]*m3[0][1] + m2[1][1]*m3[1][1] + m2[1][2]*m3[2][1]; - m1[1][2]= m2[1][0]*m3[0][2] + m2[1][1]*m3[1][2] + m2[1][2]*m3[2][2]; - - m1[2][0]= m2[2][0]*m3[0][0] + m2[2][1]*m3[1][0] + m2[2][2]*m3[2][0]; - m1[2][1]= m2[2][0]*m3[0][1] + m2[2][1]*m3[1][1] + m2[2][2]*m3[2][1]; - m1[2][2]= m2[2][0]*m3[0][2] + m2[2][1]*m3[1][2] + m2[2][2]*m3[2][2]; -#else - m1[0]= m2[0]*m3[0] + m2[1]*m3[3] + m2[2]*m3[6]; - m1[1]= m2[0]*m3[1] + m2[1]*m3[4] + m2[2]*m3[7]; - m1[2]= m2[0]*m3[2] + m2[1]*m3[5] + m2[2]*m3[8]; - m1+=3; - m2+=3; - m1[0]= m2[0]*m3[0] + m2[1]*m3[3] + m2[2]*m3[6]; - m1[1]= m2[0]*m3[1] + m2[1]*m3[4] + m2[2]*m3[7]; - m1[2]= m2[0]*m3[2] + m2[1]*m3[5] + m2[2]*m3[8]; - m1+=3; - m2+=3; - m1[0]= m2[0]*m3[0] + m2[1]*m3[3] + m2[2]*m3[6]; - m1[1]= m2[0]*m3[1] + m2[1]*m3[4] + m2[2]*m3[7]; - m1[2]= m2[0]*m3[2] + m2[1]*m3[5] + m2[2]*m3[8]; -#endif -} /* end of void Mat3MulMat3(float m1[][3], float m3[][3], float m2[][3]) */ - -void Mat4MulMat43(float (*m1)[4], float (*m3)[4], float (*m2)[3]) -{ - m1[0][0]= m2[0][0]*m3[0][0] + m2[0][1]*m3[1][0] + m2[0][2]*m3[2][0]; - m1[0][1]= m2[0][0]*m3[0][1] + m2[0][1]*m3[1][1] + m2[0][2]*m3[2][1]; - m1[0][2]= m2[0][0]*m3[0][2] + m2[0][1]*m3[1][2] + m2[0][2]*m3[2][2]; - m1[1][0]= m2[1][0]*m3[0][0] + m2[1][1]*m3[1][0] + m2[1][2]*m3[2][0]; - m1[1][1]= m2[1][0]*m3[0][1] + m2[1][1]*m3[1][1] + m2[1][2]*m3[2][1]; - m1[1][2]= m2[1][0]*m3[0][2] + m2[1][1]*m3[1][2] + m2[1][2]*m3[2][2]; - m1[2][0]= m2[2][0]*m3[0][0] + m2[2][1]*m3[1][0] + m2[2][2]*m3[2][0]; - m1[2][1]= m2[2][0]*m3[0][1] + m2[2][1]*m3[1][1] + m2[2][2]*m3[2][1]; - m1[2][2]= m2[2][0]*m3[0][2] + m2[2][1]*m3[1][2] + m2[2][2]*m3[2][2]; -} -/* m1 = m2 * m3, ignore the elements on the 4th row/column of m3*/ -void Mat3IsMat3MulMat4(float m1[][3], float m2[][3], float m3[][4]) -{ - /* m1[i][j] = m2[i][k] * m3[k][j] */ - m1[0][0] = m2[0][0] * m3[0][0] + m2[0][1] * m3[1][0] +m2[0][2] * m3[2][0]; - m1[0][1] = m2[0][0] * m3[0][1] + m2[0][1] * m3[1][1] +m2[0][2] * m3[2][1]; - m1[0][2] = m2[0][0] * m3[0][2] + m2[0][1] * m3[1][2] +m2[0][2] * m3[2][2]; - - m1[1][0] = m2[1][0] * m3[0][0] + m2[1][1] * m3[1][0] +m2[1][2] * m3[2][0]; - m1[1][1] = m2[1][0] * m3[0][1] + m2[1][1] * m3[1][1] +m2[1][2] * m3[2][1]; - m1[1][2] = m2[1][0] * m3[0][2] + m2[1][1] * m3[1][2] +m2[1][2] * m3[2][2]; - - m1[2][0] = m2[2][0] * m3[0][0] + m2[2][1] * m3[1][0] +m2[2][2] * m3[2][0]; - m1[2][1] = m2[2][0] * m3[0][1] + m2[2][1] * m3[1][1] +m2[2][2] * m3[2][1]; - m1[2][2] = m2[2][0] * m3[0][2] + m2[2][1] * m3[1][2] +m2[2][2] * m3[2][2]; -} - - - -void Mat4MulMat34(float (*m1)[4], float (*m3)[3], float (*m2)[4]) -{ - m1[0][0]= m2[0][0]*m3[0][0] + m2[0][1]*m3[1][0] + m2[0][2]*m3[2][0]; - m1[0][1]= m2[0][0]*m3[0][1] + m2[0][1]*m3[1][1] + m2[0][2]*m3[2][1]; - m1[0][2]= m2[0][0]*m3[0][2] + m2[0][1]*m3[1][2] + m2[0][2]*m3[2][2]; - m1[1][0]= m2[1][0]*m3[0][0] + m2[1][1]*m3[1][0] + m2[1][2]*m3[2][0]; - m1[1][1]= m2[1][0]*m3[0][1] + m2[1][1]*m3[1][1] + m2[1][2]*m3[2][1]; - m1[1][2]= m2[1][0]*m3[0][2] + m2[1][1]*m3[1][2] + m2[1][2]*m3[2][2]; - m1[2][0]= m2[2][0]*m3[0][0] + m2[2][1]*m3[1][0] + m2[2][2]*m3[2][0]; - m1[2][1]= m2[2][0]*m3[0][1] + m2[2][1]*m3[1][1] + m2[2][2]*m3[2][1]; - m1[2][2]= m2[2][0]*m3[0][2] + m2[2][1]*m3[1][2] + m2[2][2]*m3[2][2]; -} - -void Mat4CpyMat4(float m1[][4], float m2[][4]) -{ - memcpy(m1, m2, 4*4*sizeof(float)); -} - -void Mat4SwapMat4(float m1[][4], float m2[][4]) -{ - float t; - int i, j; - - for(i = 0; i < 4; i++) { - for (j = 0; j < 4; j++) { - t = m1[i][j]; - m1[i][j] = m2[i][j]; - m2[i][j] = t; - } - } -} - -typedef float Mat3Row[3]; -typedef float Mat4Row[4]; - -#ifdef TEST_ACTIVE -void Mat3CpyMat4(float *m1p, float *m2p) -#else -void Mat3CpyMat4(float m1[][3], float m2[][4]) -#endif -{ -#ifdef TEST_ACTIVE - int i, j; - Mat3Row *m1= (Mat3Row *)m1p; - Mat4Row *m2= (Mat4Row *)m2p; - for ( i = 0; i++; i < 3) { - for (j = 0; j++; j < 3) { - m1p[3*i + j] = m2p[4*i + j]; - } - } -#endif - m1[0][0]= m2[0][0]; - m1[0][1]= m2[0][1]; - m1[0][2]= m2[0][2]; - - m1[1][0]= m2[1][0]; - m1[1][1]= m2[1][1]; - m1[1][2]= m2[1][2]; - - m1[2][0]= m2[2][0]; - m1[2][1]= m2[2][1]; - m1[2][2]= m2[2][2]; -} - -/* Butched. See .h for comment */ -/* void Mat4CpyMat3(float m1[][4], float m2[][3]) */ -#ifdef TEST_ACTIVE -void Mat4CpyMat3(float* m1, float *m2) -{ - int i; - for (i = 0; i < 3; i++) { - m1[(4*i)] = m2[(3*i)]; - m1[(4*i) + 1]= m2[(3*i) + 1]; - m1[(4*i) + 2]= m2[(3*i) + 2]; - m1[(4*i) + 3]= 0.0; - i++; - } - - m1[12]=m1[13]= m1[14]= 0.0; - m1[15]= 1.0; -} -#else - -void Mat4CpyMat3(float m1[][4], float m2[][3]) /* no clear */ -{ - m1[0][0]= m2[0][0]; - m1[0][1]= m2[0][1]; - m1[0][2]= m2[0][2]; - - m1[1][0]= m2[1][0]; - m1[1][1]= m2[1][1]; - m1[1][2]= m2[1][2]; - - m1[2][0]= m2[2][0]; - m1[2][1]= m2[2][1]; - m1[2][2]= m2[2][2]; - - /* Reevan's Bugfix */ - m1[0][3]=0.0F; - m1[1][3]=0.0F; - m1[2][3]=0.0F; - - m1[3][0]=0.0F; - m1[3][1]=0.0F; - m1[3][2]=0.0F; - m1[3][3]=1.0F; - - -} -#endif - -void Mat3CpyMat3(float m1[][3], float m2[][3]) -{ - /* destination comes first: */ - memcpy(&m1[0], &m2[0], 9*sizeof(float)); -} - -void Mat3MulSerie(float answ[][3], - float m1[][3], float m2[][3], float m3[][3], - float m4[][3], float m5[][3], float m6[][3], - float m7[][3], float m8[][3]) -{ - float temp[3][3]; - - if(m1==0 || m2==0) return; - - - Mat3MulMat3(answ, m2, m1); - if(m3) { - Mat3MulMat3(temp, m3, answ); - if(m4) { - Mat3MulMat3(answ, m4, temp); - if(m5) { - Mat3MulMat3(temp, m5, answ); - if(m6) { - Mat3MulMat3(answ, m6, temp); - if(m7) { - Mat3MulMat3(temp, m7, answ); - if(m8) { - Mat3MulMat3(answ, m8, temp); - } - else Mat3CpyMat3(answ, temp); - } - } - else Mat3CpyMat3(answ, temp); - } - } - else Mat3CpyMat3(answ, temp); - } -} - -void Mat4MulSerie(float answ[][4], float m1[][4], - float m2[][4], float m3[][4], float m4[][4], - float m5[][4], float m6[][4], float m7[][4], - float m8[][4]) -{ - float temp[4][4]; - - if(m1==0 || m2==0) return; - - Mat4MulMat4(answ, m2, m1); - if(m3) { - Mat4MulMat4(temp, m3, answ); - if(m4) { - Mat4MulMat4(answ, m4, temp); - if(m5) { - Mat4MulMat4(temp, m5, answ); - if(m6) { - Mat4MulMat4(answ, m6, temp); - if(m7) { - Mat4MulMat4(temp, m7, answ); - if(m8) { - Mat4MulMat4(answ, m8, temp); - } - else Mat4CpyMat4(answ, temp); - } - } - else Mat4CpyMat4(answ, temp); - } - } - else Mat4CpyMat4(answ, temp); - } -} - -void Mat3BlendMat3(float out[][3], float dst[][3], float src[][3], float srcweight) -{ - float squat[4], dquat[4], fquat[4]; - float ssize[3], dsize[3], fsize[4]; - float rmat[3][3], smat[3][3]; - - Mat3ToQuat(dst, dquat); - Mat3ToSize(dst, dsize); - - Mat3ToQuat(src, squat); - Mat3ToSize(src, ssize); - - /* do blending */ - QuatInterpol(fquat, dquat, squat, srcweight); - VecLerpf(fsize, dsize, ssize, srcweight); - - /* compose new matrix */ - QuatToMat3(fquat, rmat); - SizeToMat3(fsize, smat); - Mat3MulMat3(out, rmat, smat); -} - -void Mat4BlendMat4(float out[][4], float dst[][4], float src[][4], float srcweight) -{ - float squat[4], dquat[4], fquat[4]; - float ssize[3], dsize[3], fsize[4]; - float sloc[3], dloc[3], floc[3]; - - Mat4ToQuat(dst, dquat); - Mat4ToSize(dst, dsize); - VecCopyf(dloc, dst[3]); - - Mat4ToQuat(src, squat); - Mat4ToSize(src, ssize); - VecCopyf(sloc, src[3]); - - /* do blending */ - VecLerpf(floc, dloc, sloc, srcweight); - QuatInterpol(fquat, dquat, squat, srcweight); - VecLerpf(fsize, dsize, ssize, srcweight); - - /* compose new matrix */ - LocQuatSizeToMat4(out, floc, fquat, fsize); -} - -void Mat4Clr(float *m) -{ - memset(m, 0, 4*4*sizeof(float)); -} - -void Mat3Clr(float *m) -{ - memset(m, 0, 3*3*sizeof(float)); -} - -void Mat4One(float m[][4]) -{ - - m[0][0]= m[1][1]= m[2][2]= m[3][3]= 1.0; - m[0][1]= m[0][2]= m[0][3]= 0.0; - m[1][0]= m[1][2]= m[1][3]= 0.0; - m[2][0]= m[2][1]= m[2][3]= 0.0; - m[3][0]= m[3][1]= m[3][2]= 0.0; -} - -void Mat3One(float m[][3]) -{ - - m[0][0]= m[1][1]= m[2][2]= 1.0; - m[0][1]= m[0][2]= 0.0; - m[1][0]= m[1][2]= 0.0; - m[2][0]= m[2][1]= 0.0; -} - -void Mat4Scale(float m[][4], float scale) -{ - - m[0][0]= m[1][1]= m[2][2]= scale; - m[3][3]= 1.0; - m[0][1]= m[0][2]= m[0][3]= 0.0; - m[1][0]= m[1][2]= m[1][3]= 0.0; - m[2][0]= m[2][1]= m[2][3]= 0.0; - m[3][0]= m[3][1]= m[3][2]= 0.0; -} - -void Mat3Scale(float m[][3], float scale) -{ - - m[0][0]= m[1][1]= m[2][2]= scale; - m[0][1]= m[0][2]= 0.0; - m[1][0]= m[1][2]= 0.0; - m[2][0]= m[2][1]= 0.0; -} - -void Mat4MulVec( float mat[][4], int *vec) -{ - int x,y; - - x=vec[0]; - y=vec[1]; - vec[0]=(int)(x*mat[0][0] + y*mat[1][0] + mat[2][0]*vec[2] + mat[3][0]); - vec[1]=(int)(x*mat[0][1] + y*mat[1][1] + mat[2][1]*vec[2] + mat[3][1]); - vec[2]=(int)(x*mat[0][2] + y*mat[1][2] + mat[2][2]*vec[2] + mat[3][2]); -} - -void Mat4MulVecfl( float mat[][4], float *vec) -{ - float x,y; - - x=vec[0]; - y=vec[1]; - vec[0]=x*mat[0][0] + y*mat[1][0] + mat[2][0]*vec[2] + mat[3][0]; - vec[1]=x*mat[0][1] + y*mat[1][1] + mat[2][1]*vec[2] + mat[3][1]; - vec[2]=x*mat[0][2] + y*mat[1][2] + mat[2][2]*vec[2] + mat[3][2]; -} - -void VecMat4MulVecfl(float *in, float mat[][4], float *vec) -{ - float x,y; - - x=vec[0]; - y=vec[1]; - in[0]= x*mat[0][0] + y*mat[1][0] + mat[2][0]*vec[2] + mat[3][0]; - in[1]= x*mat[0][1] + y*mat[1][1] + mat[2][1]*vec[2] + mat[3][1]; - in[2]= x*mat[0][2] + y*mat[1][2] + mat[2][2]*vec[2] + mat[3][2]; -} - -void Mat4Mul3Vecfl( float mat[][4], float *vec) -{ - float x,y; - - x= vec[0]; - y= vec[1]; - vec[0]= x*mat[0][0] + y*mat[1][0] + mat[2][0]*vec[2]; - vec[1]= x*mat[0][1] + y*mat[1][1] + mat[2][1]*vec[2]; - vec[2]= x*mat[0][2] + y*mat[1][2] + mat[2][2]*vec[2]; -} - -void Mat4MulVec3Project(float mat[][4], float *vec) -{ - float w; - - w = vec[0]*mat[0][3] + vec[1]*mat[1][3] + vec[2]*mat[2][3] + mat[3][3]; - Mat4MulVecfl(mat, vec); - - vec[0] /= w; - vec[1] /= w; - vec[2] /= w; -} - -void Mat4MulVec4fl( float mat[][4], float *vec) -{ - float x,y,z; - - x=vec[0]; - y=vec[1]; - z= vec[2]; - vec[0]=x*mat[0][0] + y*mat[1][0] + z*mat[2][0] + mat[3][0]*vec[3]; - vec[1]=x*mat[0][1] + y*mat[1][1] + z*mat[2][1] + mat[3][1]*vec[3]; - vec[2]=x*mat[0][2] + y*mat[1][2] + z*mat[2][2] + mat[3][2]*vec[3]; - vec[3]=x*mat[0][3] + y*mat[1][3] + z*mat[2][3] + mat[3][3]*vec[3]; -} - -void Mat3MulVec( float mat[][3], int *vec) -{ - int x,y; - - x=vec[0]; - y=vec[1]; - vec[0]= (int)(x*mat[0][0] + y*mat[1][0] + mat[2][0]*vec[2]); - vec[1]= (int)(x*mat[0][1] + y*mat[1][1] + mat[2][1]*vec[2]); - vec[2]= (int)(x*mat[0][2] + y*mat[1][2] + mat[2][2]*vec[2]); -} - -void Mat3MulVecfl( float mat[][3], float *vec) -{ - float x,y; - - x=vec[0]; - y=vec[1]; - vec[0]= x*mat[0][0] + y*mat[1][0] + mat[2][0]*vec[2]; - vec[1]= x*mat[0][1] + y*mat[1][1] + mat[2][1]*vec[2]; - vec[2]= x*mat[0][2] + y*mat[1][2] + mat[2][2]*vec[2]; -} - -void Mat3MulVecd( float mat[][3], double *vec) -{ - double x,y; - - x=vec[0]; - y=vec[1]; - vec[0]= x*mat[0][0] + y*mat[1][0] + mat[2][0]*vec[2]; - vec[1]= x*mat[0][1] + y*mat[1][1] + mat[2][1]*vec[2]; - vec[2]= x*mat[0][2] + y*mat[1][2] + mat[2][2]*vec[2]; -} - -void Mat3TransMulVecfl( float mat[][3], float *vec) -{ - float x,y; - - x=vec[0]; - y=vec[1]; - vec[0]= x*mat[0][0] + y*mat[0][1] + mat[0][2]*vec[2]; - vec[1]= x*mat[1][0] + y*mat[1][1] + mat[1][2]*vec[2]; - vec[2]= x*mat[2][0] + y*mat[2][1] + mat[2][2]*vec[2]; -} - -void Mat3MulFloat(float *m, float f) -{ - int i; - - for(i=0;i<9;i++) m[i]*=f; -} - -void Mat4MulFloat(float *m, float f) -{ - int i; - - for(i=0;i<16;i++) m[i]*=f; /* count to 12: without vector component */ -} - - -void Mat4MulFloat3(float *m, float f) /* only scale component */ -{ - int i,j; - - for(i=0; i<3; i++) { - for(j=0; j<3; j++) { - - m[4*i+j] *= f; - } - } -} - -void Mat3AddMat3(float m1[][3], float m2[][3], float m3[][3]) -{ - int i, j; - - for(i=0;i<3;i++) - for(j=0;j<3;j++) - m1[i][j]= m2[i][j] + m3[i][j]; -} - -void Mat4AddMat4(float m1[][4], float m2[][4], float m3[][4]) -{ - int i, j; - - for(i=0;i<4;i++) - for(j=0;j<4;j++) - m1[i][j]= m2[i][j] + m3[i][j]; -} - -void VecStar(float mat[][3], float *vec) -{ - - mat[0][0]= mat[1][1]= mat[2][2]= 0.0; - mat[0][1]= -vec[2]; - mat[0][2]= vec[1]; - mat[1][0]= vec[2]; - mat[1][2]= -vec[0]; - mat[2][0]= -vec[1]; - mat[2][1]= vec[0]; - -} -#ifdef TEST_ACTIVE -short EenheidsMat(float mat[][3]) -{ - - if(mat[0][0]==1.0 && mat[0][1]==0.0 && mat[0][2]==0.0) - if(mat[1][0]==0.0 && mat[1][1]==1.0 && mat[1][2]==0.0) - if(mat[2][0]==0.0 && mat[2][1]==0.0 && mat[2][2]==1.0) - return 1; - return 0; -} -#endif - -int FloatCompare( float *v1, float *v2, float limit) -{ - - if( fabs(v1[0]-v2[0])<limit ) { - if( fabs(v1[1]-v2[1])<limit ) { - if( fabs(v1[2]-v2[2])<limit ) return 1; - } - } - return 0; -} - -int FloatCompare4( float *v1, float *v2, float limit) -{ - - if( fabs(v1[0]-v2[0])<limit ) { - if( fabs(v1[1]-v2[1])<limit ) { - if( fabs(v1[2]-v2[2])<limit ) { - if( fabs(v1[3]-v2[3])<limit ) return 1; - } - } - } - return 0; -} - -float FloatLerpf( float target, float origin, float fac) -{ - return (fac*target) + (1.0f-fac)*origin; -} - -void printvecf( char *str, float v[3]) -{ - printf("%s: %.3f %.3f %.3f\n", str, v[0], v[1], v[2]); - -} - -void printquat( char *str, float q[4]) -{ - printf("%s: %.3f %.3f %.3f %.3f\n", str, q[0], q[1], q[2], q[3]); - -} - -void printvec4f( char *str, float v[4]) -{ - printf("%s\n", str); - printf("%f %f %f %f\n",v[0],v[1],v[2], v[3]); - printf("\n"); - -} - -void printmatrix4( char *str, float m[][4]) -{ - printf("%s\n", str); - printf("%f %f %f %f\n",m[0][0],m[1][0],m[2][0],m[3][0]); - printf("%f %f %f %f\n",m[0][1],m[1][1],m[2][1],m[3][1]); - printf("%f %f %f %f\n",m[0][2],m[1][2],m[2][2],m[3][2]); - printf("%f %f %f %f\n",m[0][3],m[1][3],m[2][3],m[3][3]); - printf("\n"); - -} - -void printmatrix3( char *str, float m[][3]) -{ - printf("%s\n", str); - printf("%f %f %f\n",m[0][0],m[1][0],m[2][0]); - printf("%f %f %f\n",m[0][1],m[1][1],m[2][1]); - printf("%f %f %f\n",m[0][2],m[1][2],m[2][2]); - printf("\n"); - -} - -/* **************** QUATERNIONS ********** */ - -int QuatIsNul(float *q) -{ - return (q[0] == 0 && q[1] == 0 && q[2] == 0 && q[3] == 0); -} - -void QuatMul(float *q, float *q1, float *q2) -{ - float t0,t1,t2; - - t0= q1[0]*q2[0]-q1[1]*q2[1]-q1[2]*q2[2]-q1[3]*q2[3]; - t1= q1[0]*q2[1]+q1[1]*q2[0]+q1[2]*q2[3]-q1[3]*q2[2]; - t2= q1[0]*q2[2]+q1[2]*q2[0]+q1[3]*q2[1]-q1[1]*q2[3]; - q[3]= q1[0]*q2[3]+q1[3]*q2[0]+q1[1]*q2[2]-q1[2]*q2[1]; - q[0]=t0; - q[1]=t1; - q[2]=t2; -} - -/* Assumes a unit quaternion */ -void QuatMulVecf(float *q, float *v) -{ - float t0, t1, t2; - - t0= -q[1]*v[0]-q[2]*v[1]-q[3]*v[2]; - t1= q[0]*v[0]+q[2]*v[2]-q[3]*v[1]; - t2= q[0]*v[1]+q[3]*v[0]-q[1]*v[2]; - v[2]= q[0]*v[2]+q[1]*v[1]-q[2]*v[0]; - v[0]=t1; - v[1]=t2; - - t1= t0*-q[1]+v[0]*q[0]-v[1]*q[3]+v[2]*q[2]; - t2= t0*-q[2]+v[1]*q[0]-v[2]*q[1]+v[0]*q[3]; - v[2]= t0*-q[3]+v[2]*q[0]-v[0]*q[2]+v[1]*q[1]; - v[0]=t1; - v[1]=t2; -} - -void QuatConj(float *q) -{ - q[1] = -q[1]; - q[2] = -q[2]; - q[3] = -q[3]; -} - -float QuatDot(float *q1, float *q2) -{ - return q1[0]*q2[0] + q1[1]*q2[1] + q1[2]*q2[2] + q1[3]*q2[3]; -} - -void QuatInv(float *q) -{ - float f = QuatDot(q, q); - - if (f == 0.0f) - return; - - QuatConj(q); - QuatMulf(q, 1.0f/f); -} - -/* simple mult */ -void QuatMulf(float *q, float f) -{ - q[0] *= f; - q[1] *= f; - q[2] *= f; - q[3] *= f; -} - -void QuatSub(float *q, float *q1, float *q2) -{ - q2[0]= -q2[0]; - QuatMul(q, q1, q2); - q2[0]= -q2[0]; -} - -/* angular mult factor */ -void QuatMulFac(float *q, float fac) -{ - float angle= fac*saacos(q[0]); /* quat[0]= cos(0.5*angle), but now the 0.5 and 2.0 rule out */ - - float co= (float)cos(angle); - float si= (float)sin(angle); - q[0]= co; - Normalize(q+1); - q[1]*= si; - q[2]*= si; - q[3]*= si; - -} - -void QuatToMat3( float *q, float m[][3]) -{ - double q0, q1, q2, q3, qda,qdb,qdc,qaa,qab,qac,qbb,qbc,qcc; - - q0= M_SQRT2 * q[0]; - q1= M_SQRT2 * q[1]; - q2= M_SQRT2 * q[2]; - q3= M_SQRT2 * q[3]; - - qda= q0*q1; - qdb= q0*q2; - qdc= q0*q3; - qaa= q1*q1; - qab= q1*q2; - qac= q1*q3; - qbb= q2*q2; - qbc= q2*q3; - qcc= q3*q3; - - m[0][0]= (float)(1.0-qbb-qcc); - m[0][1]= (float)(qdc+qab); - m[0][2]= (float)(-qdb+qac); - - m[1][0]= (float)(-qdc+qab); - m[1][1]= (float)(1.0-qaa-qcc); - m[1][2]= (float)(qda+qbc); - - m[2][0]= (float)(qdb+qac); - m[2][1]= (float)(-qda+qbc); - m[2][2]= (float)(1.0-qaa-qbb); -} - - -void QuatToMat4( float *q, float m[][4]) -{ - double q0, q1, q2, q3, qda,qdb,qdc,qaa,qab,qac,qbb,qbc,qcc; - - q0= M_SQRT2 * q[0]; - q1= M_SQRT2 * q[1]; - q2= M_SQRT2 * q[2]; - q3= M_SQRT2 * q[3]; - - qda= q0*q1; - qdb= q0*q2; - qdc= q0*q3; - qaa= q1*q1; - qab= q1*q2; - qac= q1*q3; - qbb= q2*q2; - qbc= q2*q3; - qcc= q3*q3; - - m[0][0]= (float)(1.0-qbb-qcc); - m[0][1]= (float)(qdc+qab); - m[0][2]= (float)(-qdb+qac); - m[0][3]= 0.0f; - - m[1][0]= (float)(-qdc+qab); - m[1][1]= (float)(1.0-qaa-qcc); - m[1][2]= (float)(qda+qbc); - m[1][3]= 0.0f; - - m[2][0]= (float)(qdb+qac); - m[2][1]= (float)(-qda+qbc); - m[2][2]= (float)(1.0-qaa-qbb); - m[2][3]= 0.0f; - - m[3][0]= m[3][1]= m[3][2]= 0.0f; - m[3][3]= 1.0f; -} - -void Mat3ToQuat(float wmat[][3], float *q) -{ - double tr, s; - float mat[3][3]; - - /* work on a copy */ - Mat3CpyMat3(mat, wmat); - Mat3Ortho(mat); /* this is needed AND a NormalQuat in the end */ - - tr= 0.25*(1.0+mat[0][0]+mat[1][1]+mat[2][2]); - - if(tr>FLT_EPSILON) { - s= sqrt( tr); - q[0]= (float)s; - s= 1.0/(4.0*s); - q[1]= (float)((mat[1][2]-mat[2][1])*s); - q[2]= (float)((mat[2][0]-mat[0][2])*s); - q[3]= (float)((mat[0][1]-mat[1][0])*s); - } - else { - if(mat[0][0] > mat[1][1] && mat[0][0] > mat[2][2]) { - s= 2.0*sqrtf(1.0 + mat[0][0] - mat[1][1] - mat[2][2]); - q[1]= (float)(0.25*s); - - s= 1.0/s; - q[0]= (float)((mat[2][1] - mat[1][2])*s); - q[2]= (float)((mat[1][0] + mat[0][1])*s); - q[3]= (float)((mat[2][0] + mat[0][2])*s); - } - else if(mat[1][1] > mat[2][2]) { - s= 2.0*sqrtf(1.0 + mat[1][1] - mat[0][0] - mat[2][2]); - q[2]= (float)(0.25*s); - - s= 1.0/s; - q[0]= (float)((mat[2][0] - mat[0][2])*s); - q[1]= (float)((mat[1][0] + mat[0][1])*s); - q[3]= (float)((mat[2][1] + mat[1][2])*s); - } - else { - s= 2.0*sqrtf(1.0 + mat[2][2] - mat[0][0] - mat[1][1]); - q[3]= (float)(0.25*s); - - s= 1.0/s; - q[0]= (float)((mat[1][0] - mat[0][1])*s); - q[1]= (float)((mat[2][0] + mat[0][2])*s); - q[2]= (float)((mat[2][1] + mat[1][2])*s); - } - } - NormalQuat(q); -} - -void Mat3ToQuat_is_ok( float wmat[][3], float *q) -{ - float mat[3][3], matr[3][3], matn[3][3], q1[4], q2[4], angle, si, co, nor[3]; - - /* work on a copy */ - Mat3CpyMat3(mat, wmat); - Mat3Ortho(mat); - - /* rotate z-axis of matrix to z-axis */ - - nor[0] = mat[2][1]; /* cross product with (0,0,1) */ - nor[1] = -mat[2][0]; - nor[2] = 0.0; - Normalize(nor); - - co= mat[2][2]; - angle= 0.5f*saacos(co); - - co= (float)cos(angle); - si= (float)sin(angle); - q1[0]= co; - q1[1]= -nor[0]*si; /* negative here, but why? */ - q1[2]= -nor[1]*si; - q1[3]= -nor[2]*si; - - /* rotate back x-axis from mat, using inverse q1 */ - QuatToMat3(q1, matr); - Mat3Inv(matn, matr); - Mat3MulVecfl(matn, mat[0]); - - /* and align x-axes */ - angle= (float)(0.5*atan2(mat[0][1], mat[0][0])); - - co= (float)cos(angle); - si= (float)sin(angle); - q2[0]= co; - q2[1]= 0.0f; - q2[2]= 0.0f; - q2[3]= si; - - QuatMul(q, q1, q2); -} - - -void Mat4ToQuat( float m[][4], float *q) -{ - float mat[3][3]; - - Mat3CpyMat4(mat, m); - Mat3ToQuat(mat, q); - -} - -void QuatOne(float *q) -{ - q[0]= 1.0; - q[1]= q[2]= q[3]= 0.0; -} - -void NormalQuat(float *q) -{ - float len; - - len= (float)sqrt(q[0]*q[0]+q[1]*q[1]+q[2]*q[2]+q[3]*q[3]); - if(len!=0.0) { - q[0]/= len; - q[1]/= len; - q[2]/= len; - q[3]/= len; - } else { - q[1]= 1.0f; - q[0]= q[2]= q[3]= 0.0f; - } -} - -void RotationBetweenVectorsToQuat(float *q, float v1[3], float v2[3]) -{ - float axis[3]; - float angle; - - Crossf(axis, v1, v2); - - angle = NormalizedVecAngle2(v1, v2); - - AxisAngleToQuat(q, axis, angle); -} - -void vectoquat(float *vec, short axis, short upflag, float *q) -{ - float q2[4], nor[3], *fp, mat[3][3], angle, si, co, x2, y2, z2, len1; - - /* first rotate to axis */ - if(axis>2) { - x2= vec[0] ; y2= vec[1] ; z2= vec[2]; - axis-= 3; - } - else { - x2= -vec[0] ; y2= -vec[1] ; z2= -vec[2]; - } - - q[0]=1.0; - q[1]=q[2]=q[3]= 0.0; - - len1= (float)sqrt(x2*x2+y2*y2+z2*z2); - if(len1 == 0.0) return; - - /* nasty! I need a good routine for this... - * problem is a rotation of an Y axis to the negative Y-axis for example. - */ - - if(axis==0) { /* x-axis */ - nor[0]= 0.0; - nor[1]= -z2; - nor[2]= y2; - - if(fabs(y2)+fabs(z2)<0.0001) - nor[1]= 1.0; - - co= x2; - } - else if(axis==1) { /* y-axis */ - nor[0]= z2; - nor[1]= 0.0; - nor[2]= -x2; - - if(fabs(x2)+fabs(z2)<0.0001) - nor[2]= 1.0; - - co= y2; - } - else { /* z-axis */ - nor[0]= -y2; - nor[1]= x2; - nor[2]= 0.0; - - if(fabs(x2)+fabs(y2)<0.0001) - nor[0]= 1.0; - - co= z2; - } - co/= len1; - - Normalize(nor); - - angle= 0.5f*saacos(co); - si= (float)sin(angle); - q[0]= (float)cos(angle); - q[1]= nor[0]*si; - q[2]= nor[1]*si; - q[3]= nor[2]*si; - - if(axis!=upflag) { - QuatToMat3(q, mat); - - fp= mat[2]; - if(axis==0) { - if(upflag==1) angle= (float)(0.5*atan2(fp[2], fp[1])); - else angle= (float)(-0.5*atan2(fp[1], fp[2])); - } - else if(axis==1) { - if(upflag==0) angle= (float)(-0.5*atan2(fp[2], fp[0])); - else angle= (float)(0.5*atan2(fp[0], fp[2])); - } - else { - if(upflag==0) angle= (float)(0.5*atan2(-fp[1], -fp[0])); - else angle= (float)(-0.5*atan2(-fp[0], -fp[1])); - } - - co= (float)cos(angle); - si= (float)(sin(angle)/len1); - q2[0]= co; - q2[1]= x2*si; - q2[2]= y2*si; - q2[3]= z2*si; - - QuatMul(q,q2,q); - } -} - -void VecUpMat3old( float *vec, float mat[][3], short axis) -{ - float inp, up[3]; - short cox = 0, coy = 0, coz = 0; - - /* using different up's is not useful, infact there is no real 'up'! - */ - - up[0]= 0.0; - up[1]= 0.0; - up[2]= 1.0; - - if(axis==0) { - cox= 0; coy= 1; coz= 2; /* Y up Z tr */ - } - if(axis==1) { - cox= 1; coy= 2; coz= 0; /* Z up X tr */ - } - if(axis==2) { - cox= 2; coy= 0; coz= 1; /* X up Y tr */ - } - if(axis==3) { - cox= 0; coy= 2; coz= 1; /* */ - } - if(axis==4) { - cox= 1; coy= 0; coz= 2; /* */ - } - if(axis==5) { - cox= 2; coy= 1; coz= 0; /* Y up X tr */ - } - - mat[coz][0]= vec[0]; - mat[coz][1]= vec[1]; - mat[coz][2]= vec[2]; - Normalize((float *)mat[coz]); - - inp= mat[coz][0]*up[0] + mat[coz][1]*up[1] + mat[coz][2]*up[2]; - mat[coy][0]= up[0] - inp*mat[coz][0]; - mat[coy][1]= up[1] - inp*mat[coz][1]; - mat[coy][2]= up[2] - inp*mat[coz][2]; - - Normalize((float *)mat[coy]); - - Crossf(mat[cox], mat[coy], mat[coz]); - -} - -void VecUpMat3(float *vec, float mat[][3], short axis) -{ - float inp; - short cox = 0, coy = 0, coz = 0; - - /* using different up's is not useful, infact there is no real 'up'! - */ - - if(axis==0) { - cox= 0; coy= 1; coz= 2; /* Y up Z tr */ - } - if(axis==1) { - cox= 1; coy= 2; coz= 0; /* Z up X tr */ - } - if(axis==2) { - cox= 2; coy= 0; coz= 1; /* X up Y tr */ - } - if(axis==3) { - cox= 0; coy= 1; coz= 2; /* Y op -Z tr */ - vec[0]= -vec[0]; - vec[1]= -vec[1]; - vec[2]= -vec[2]; - } - if(axis==4) { - cox= 1; coy= 0; coz= 2; /* */ - } - if(axis==5) { - cox= 2; coy= 1; coz= 0; /* Y up X tr */ - } - - mat[coz][0]= vec[0]; - mat[coz][1]= vec[1]; - mat[coz][2]= vec[2]; - Normalize((float *)mat[coz]); - - inp= mat[coz][2]; - mat[coy][0]= - inp*mat[coz][0]; - mat[coy][1]= - inp*mat[coz][1]; - mat[coy][2]= 1.0f - inp*mat[coz][2]; - - Normalize((float *)mat[coy]); - - Crossf(mat[cox], mat[coy], mat[coz]); - -} - -/* A & M Watt, Advanced animation and rendering techniques, 1992 ACM press */ -void QuatInterpolW(float *, float *, float *, float ); // XXX why this? - -void QuatInterpolW(float *result, float *quat1, float *quat2, float t) -{ - float omega, cosom, sinom, sc1, sc2; - - cosom = quat1[0]*quat2[0] + quat1[1]*quat2[1] + quat1[2]*quat2[2] + quat1[3]*quat2[3] ; - - /* rotate around shortest angle */ - if ((1.0f + cosom) > 0.0001f) { - - if ((1.0f - cosom) > 0.0001f) { - omega = (float)acos(cosom); - sinom = (float)sin(omega); - sc1 = (float)sin((1.0 - t) * omega) / sinom; - sc2 = (float)sin(t * omega) / sinom; - } - else { - sc1 = 1.0f - t; - sc2 = t; - } - result[0] = sc1*quat1[0] + sc2*quat2[0]; - result[1] = sc1*quat1[1] + sc2*quat2[1]; - result[2] = sc1*quat1[2] + sc2*quat2[2]; - result[3] = sc1*quat1[3] + sc2*quat2[3]; - } - else { - result[0] = quat2[3]; - result[1] = -quat2[2]; - result[2] = quat2[1]; - result[3] = -quat2[0]; - - sc1 = (float)sin((1.0 - t)*M_PI_2); - sc2 = (float)sin(t*M_PI_2); - - result[0] = sc1*quat1[0] + sc2*result[0]; - result[1] = sc1*quat1[1] + sc2*result[1]; - result[2] = sc1*quat1[2] + sc2*result[2]; - result[3] = sc1*quat1[3] + sc2*result[3]; - } -} - -void QuatInterpol(float *result, float *quat1, float *quat2, float t) -{ - float quat[4], omega, cosom, sinom, sc1, sc2; - - cosom = quat1[0]*quat2[0] + quat1[1]*quat2[1] + quat1[2]*quat2[2] + quat1[3]*quat2[3] ; - - /* rotate around shortest angle */ - if (cosom < 0.0f) { - cosom = -cosom; - quat[0]= -quat1[0]; - quat[1]= -quat1[1]; - quat[2]= -quat1[2]; - quat[3]= -quat1[3]; - } - else { - quat[0]= quat1[0]; - quat[1]= quat1[1]; - quat[2]= quat1[2]; - quat[3]= quat1[3]; - } - - if ((1.0f - cosom) > 0.0001f) { - omega = (float)acos(cosom); - sinom = (float)sin(omega); - sc1 = (float)sin((1 - t) * omega) / sinom; - sc2 = (float)sin(t * omega) / sinom; - } else { - sc1= 1.0f - t; - sc2= t; - } - - result[0] = sc1 * quat[0] + sc2 * quat2[0]; - result[1] = sc1 * quat[1] + sc2 * quat2[1]; - result[2] = sc1 * quat[2] + sc2 * quat2[2]; - result[3] = sc1 * quat[3] + sc2 * quat2[3]; -} - -void QuatAdd(float *result, float *quat1, float *quat2, float t) -{ - result[0]= quat1[0] + t*quat2[0]; - result[1]= quat1[1] + t*quat2[1]; - result[2]= quat1[2] + t*quat2[2]; - result[3]= quat1[3] + t*quat2[3]; -} - -void QuatCopy(float *q1, float *q2) -{ - q1[0]= q2[0]; - q1[1]= q2[1]; - q1[2]= q2[2]; - q1[3]= q2[3]; -} - -/* **************** DUAL QUATERNIONS ************** */ - -/* - Conversion routines between (regular quaternion, translation) and - dual quaternion. - - Version 1.0.0, February 7th, 2007 - - Copyright (C) 2006-2007 University of Dublin, Trinity College, All Rights - Reserved - - This software is provided 'as-is', without any express or implied - warranty. In no event will the author(s) be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. - - Author: Ladislav Kavan, kavanl@cs.tcd.ie - - Changes for Blender: - - renaming, style changes and optimizations - - added support for scaling -*/ - -void Mat4ToDQuat(float basemat[][4], float mat[][4], DualQuat *dq) -{ - float *t, *q, dscale[3], scale[3], basequat[4]; - float baseRS[4][4], baseinv[4][4], baseR[4][4], baseRinv[4][4]; - float R[4][4], S[4][4]; - - /* split scaling and rotation, there is probably a faster way to do - this, it's done like this now to correctly get negative scaling */ - Mat4MulMat4(baseRS, basemat, mat); - Mat4ToSize(baseRS, scale); - - VecCopyf(dscale, scale); - dscale[0] -= 1.0f; dscale[1] -= 1.0f; dscale[2] -= 1.0f; - - if((Det4x4(mat) < 0.0f) || VecLength(dscale) > 1e-4) { - /* extract R and S */ - Mat4ToQuat(baseRS, basequat); - QuatToMat4(basequat, baseR); - VecCopyf(baseR[3], baseRS[3]); - - Mat4Invert(baseinv, basemat); - Mat4MulMat4(R, baseinv, baseR); - - Mat4Invert(baseRinv, baseR); - Mat4MulMat4(S, baseRS, baseRinv); - - /* set scaling part */ - Mat4MulSerie(dq->scale, basemat, S, baseinv, 0, 0, 0, 0, 0); - dq->scale_weight= 1.0f; - } - else { - /* matrix does not contain scaling */ - Mat4CpyMat4(R, mat); - dq->scale_weight= 0.0f; - } - - /* non-dual part */ - Mat4ToQuat(R, dq->quat); - - /* dual part */ - t= R[3]; - q= dq->quat; - dq->trans[0]= -0.5f*( t[0]*q[1] + t[1]*q[2] + t[2]*q[3]); - dq->trans[1]= 0.5f*( t[0]*q[0] + t[1]*q[3] - t[2]*q[2]); - dq->trans[2]= 0.5f*(-t[0]*q[3] + t[1]*q[0] + t[2]*q[1]); - dq->trans[3]= 0.5f*( t[0]*q[2] - t[1]*q[1] + t[2]*q[0]); -} - -void DQuatToMat4(DualQuat *dq, float mat[][4]) -{ - float len, *t, q0[4]; - - /* regular quaternion */ - QuatCopy(q0, dq->quat); - - /* normalize */ - len= (float)sqrt(QuatDot(q0, q0)); - if(len != 0.0f) - QuatMulf(q0, 1.0f/len); - - /* rotation */ - QuatToMat4(q0, mat); - - /* translation */ - t= dq->trans; - mat[3][0]= 2.0f*(-t[0]*q0[1] + t[1]*q0[0] - t[2]*q0[3] + t[3]*q0[2]); - mat[3][1]= 2.0f*(-t[0]*q0[2] + t[1]*q0[3] + t[2]*q0[0] - t[3]*q0[1]); - mat[3][2]= 2.0f*(-t[0]*q0[3] - t[1]*q0[2] + t[2]*q0[1] + t[3]*q0[0]); - - /* note: this does not handle scaling */ -} - -void DQuatAddWeighted(DualQuat *dqsum, DualQuat *dq, float weight) -{ - int flipped= 0; - - /* make sure we interpolate quats in the right direction */ - if (QuatDot(dq->quat, dqsum->quat) < 0) { - flipped= 1; - weight= -weight; - } - - /* interpolate rotation and translation */ - dqsum->quat[0] += weight*dq->quat[0]; - dqsum->quat[1] += weight*dq->quat[1]; - dqsum->quat[2] += weight*dq->quat[2]; - dqsum->quat[3] += weight*dq->quat[3]; - - dqsum->trans[0] += weight*dq->trans[0]; - dqsum->trans[1] += weight*dq->trans[1]; - dqsum->trans[2] += weight*dq->trans[2]; - dqsum->trans[3] += weight*dq->trans[3]; - - /* interpolate scale - but only if needed */ - if (dq->scale_weight) { - float wmat[4][4]; - - if(flipped) /* we don't want negative weights for scaling */ - weight= -weight; - - Mat4CpyMat4(wmat, dq->scale); - Mat4MulFloat((float*)wmat, weight); - Mat4AddMat4(dqsum->scale, dqsum->scale, wmat); - dqsum->scale_weight += weight; - } -} - -void DQuatNormalize(DualQuat *dq, float totweight) -{ - float scale= 1.0f/totweight; - - QuatMulf(dq->quat, scale); - QuatMulf(dq->trans, scale); - - if(dq->scale_weight) { - float addweight= totweight - dq->scale_weight; - - if(addweight) { - dq->scale[0][0] += addweight; - dq->scale[1][1] += addweight; - dq->scale[2][2] += addweight; - dq->scale[3][3] += addweight; - } - - Mat4MulFloat((float*)dq->scale, scale); - dq->scale_weight= 1.0f; - } -} - -void DQuatMulVecfl(DualQuat *dq, float *co, float mat[][3]) -{ - float M[3][3], t[3], scalemat[3][3], len2; - float w= dq->quat[0], x= dq->quat[1], y= dq->quat[2], z= dq->quat[3]; - float t0= dq->trans[0], t1= dq->trans[1], t2= dq->trans[2], t3= dq->trans[3]; - - /* rotation matrix */ - M[0][0]= w*w + x*x - y*y - z*z; - M[1][0]= 2*(x*y - w*z); - M[2][0]= 2*(x*z + w*y); - - M[0][1]= 2*(x*y + w*z); - M[1][1]= w*w + y*y - x*x - z*z; - M[2][1]= 2*(y*z - w*x); - - M[0][2]= 2*(x*z - w*y); - M[1][2]= 2*(y*z + w*x); - M[2][2]= w*w + z*z - x*x - y*y; - - len2= QuatDot(dq->quat, dq->quat); - if(len2 > 0.0f) - len2= 1.0f/len2; - - /* translation */ - t[0]= 2*(-t0*x + w*t1 - t2*z + y*t3); - t[1]= 2*(-t0*y + t1*z - x*t3 + w*t2); - t[2]= 2*(-t0*z + x*t2 + w*t3 - t1*y); - - /* apply scaling */ - if(dq->scale_weight) - Mat4MulVecfl(dq->scale, co); - - /* apply rotation and translation */ - Mat3MulVecfl(M, co); - co[0]= (co[0] + t[0])*len2; - co[1]= (co[1] + t[1])*len2; - co[2]= (co[2] + t[2])*len2; - - /* compute crazyspace correction mat */ - if(mat) { - if(dq->scale_weight) { - Mat3CpyMat4(scalemat, dq->scale); - Mat3MulMat3(mat, M, scalemat); - } - else - Mat3CpyMat3(mat, M); - Mat3MulFloat((float*)mat, len2); - } -} - -void DQuatCpyDQuat(DualQuat *dq1, DualQuat *dq2) -{ - memcpy(dq1, dq2, sizeof(DualQuat)); -} - -/* **************** VIEW / PROJECTION ******************************** */ - - -void i_ortho( - float left, float right, - float bottom, float top, - float nearClip, float farClip, - float matrix[][4] -){ - float Xdelta, Ydelta, Zdelta; - - Xdelta = right - left; - Ydelta = top - bottom; - Zdelta = farClip - nearClip; - if (Xdelta == 0.0 || Ydelta == 0.0 || Zdelta == 0.0) { - return; - } - Mat4One(matrix); - matrix[0][0] = 2.0f/Xdelta; - matrix[3][0] = -(right + left)/Xdelta; - matrix[1][1] = 2.0f/Ydelta; - matrix[3][1] = -(top + bottom)/Ydelta; - matrix[2][2] = -2.0f/Zdelta; /* note: negate Z */ - matrix[3][2] = -(farClip + nearClip)/Zdelta; -} - -void i_window( - float left, float right, - float bottom, float top, - float nearClip, float farClip, - float mat[][4] -){ - float Xdelta, Ydelta, Zdelta; - - Xdelta = right - left; - Ydelta = top - bottom; - Zdelta = farClip - nearClip; - - if (Xdelta == 0.0 || Ydelta == 0.0 || Zdelta == 0.0) { - return; - } - mat[0][0] = nearClip * 2.0f/Xdelta; - mat[1][1] = nearClip * 2.0f/Ydelta; - mat[2][0] = (right + left)/Xdelta; /* note: negate Z */ - mat[2][1] = (top + bottom)/Ydelta; - mat[2][2] = -(farClip + nearClip)/Zdelta; - mat[2][3] = -1.0f; - mat[3][2] = (-2.0f * nearClip * farClip)/Zdelta; - mat[0][1] = mat[0][2] = mat[0][3] = - mat[1][0] = mat[1][2] = mat[1][3] = - mat[3][0] = mat[3][1] = mat[3][3] = 0.0; - -} - -void i_translate(float Tx, float Ty, float Tz, float mat[][4]) -{ - mat[3][0] += (Tx*mat[0][0] + Ty*mat[1][0] + Tz*mat[2][0]); - mat[3][1] += (Tx*mat[0][1] + Ty*mat[1][1] + Tz*mat[2][1]); - mat[3][2] += (Tx*mat[0][2] + Ty*mat[1][2] + Tz*mat[2][2]); -} - -void i_multmatrix( float icand[][4], float Vm[][4]) -{ - int row, col; - float temp[4][4]; - - for(row=0 ; row<4 ; row++) - for(col=0 ; col<4 ; col++) - temp[row][col] = icand[row][0] * Vm[0][col] - + icand[row][1] * Vm[1][col] - + icand[row][2] * Vm[2][col] - + icand[row][3] * Vm[3][col]; - Mat4CpyMat4(Vm, temp); -} - -void i_rotate(float angle, char axis, float mat[][4]) -{ - int col; - float temp[4]; - float cosine, sine; - - for(col=0; col<4 ; col++) /* init temp to zero matrix */ - temp[col] = 0; - - angle = (float)(angle*(3.1415926535/180.0)); - cosine = (float)cos(angle); - sine = (float)sin(angle); - switch(axis){ - case 'x': - case 'X': - for(col=0 ; col<4 ; col++) - temp[col] = cosine*mat[1][col] + sine*mat[2][col]; - for(col=0 ; col<4 ; col++) { - mat[2][col] = - sine*mat[1][col] + cosine*mat[2][col]; - mat[1][col] = temp[col]; - } - break; - - case 'y': - case 'Y': - for(col=0 ; col<4 ; col++) - temp[col] = cosine*mat[0][col] - sine*mat[2][col]; - for(col=0 ; col<4 ; col++) { - mat[2][col] = sine*mat[0][col] + cosine*mat[2][col]; - mat[0][col] = temp[col]; - } - break; - - case 'z': - case 'Z': - for(col=0 ; col<4 ; col++) - temp[col] = cosine*mat[0][col] + sine*mat[1][col]; - for(col=0 ; col<4 ; col++) { - mat[1][col] = - sine*mat[0][col] + cosine*mat[1][col]; - mat[0][col] = temp[col]; - } - break; - } -} - -void i_polarview(float dist, float azimuth, float incidence, float twist, float Vm[][4]) -{ - - Mat4One(Vm); - - i_translate(0.0, 0.0, -dist, Vm); - i_rotate(-twist,'z', Vm); - i_rotate(-incidence,'x', Vm); - i_rotate(-azimuth,'z', Vm); -} - -void i_lookat(float vx, float vy, float vz, float px, float py, float pz, float twist, float mat[][4]) -{ - float sine, cosine, hyp, hyp1, dx, dy, dz; - float mat1[4][4]; - - Mat4One(mat); - Mat4One(mat1); - - i_rotate(-twist,'z', mat); - - dx = px - vx; - dy = py - vy; - dz = pz - vz; - hyp = dx * dx + dz * dz; /* hyp squared */ - hyp1 = (float)sqrt(dy*dy + hyp); - hyp = (float)sqrt(hyp); /* the real hyp */ - - if (hyp1 != 0.0) { /* rotate X */ - sine = -dy / hyp1; - cosine = hyp /hyp1; - } else { - sine = 0; - cosine = 1.0f; - } - mat1[1][1] = cosine; - mat1[1][2] = sine; - mat1[2][1] = -sine; - mat1[2][2] = cosine; - - i_multmatrix(mat1, mat); - - mat1[1][1] = mat1[2][2] = 1.0f; /* be careful here to reinit */ - mat1[1][2] = mat1[2][1] = 0.0; /* those modified by the last */ - - /* paragraph */ - if (hyp != 0.0f) { /* rotate Y */ - sine = dx / hyp; - cosine = -dz / hyp; - } else { - sine = 0; - cosine = 1.0f; - } - mat1[0][0] = cosine; - mat1[0][2] = -sine; - mat1[2][0] = sine; - mat1[2][2] = cosine; - - i_multmatrix(mat1, mat); - i_translate(-vx,-vy,-vz, mat); /* translate viewpoint to origin */ -} - - - - - -/* ************************************************ */ - -void Mat3Orthogonal(float mat[][3], int axis) -{ - float size[3]; - size[0] = VecLength(mat[0]); - size[1] = VecLength(mat[1]); - size[2] = VecLength(mat[2]); - Normalize(mat[axis]); - switch(axis) - { - case 0: - if (Inpf(mat[0], mat[1]) < 1) { - Crossf(mat[2], mat[0], mat[1]); - Normalize(mat[2]); - Crossf(mat[1], mat[2], mat[0]); - } else if (Inpf(mat[0], mat[2]) < 1) { - Crossf(mat[1], mat[2], mat[0]); - Normalize(mat[1]); - Crossf(mat[2], mat[0], mat[1]); - } else { - float vec[3] = {mat[0][1], mat[0][2], mat[0][0]}; - - Crossf(mat[2], mat[0], vec); - Normalize(mat[2]); - Crossf(mat[1], mat[2], mat[0]); - } - case 1: - if (Inpf(mat[1], mat[0]) < 1) { - Crossf(mat[2], mat[0], mat[1]); - Normalize(mat[2]); - Crossf(mat[0], mat[1], mat[2]); - } else if (Inpf(mat[0], mat[2]) < 1) { - Crossf(mat[0], mat[1], mat[2]); - Normalize(mat[0]); - Crossf(mat[2], mat[0], mat[1]); - } else { - float vec[3] = {mat[1][1], mat[1][2], mat[1][0]}; - - Crossf(mat[0], mat[1], vec); - Normalize(mat[0]); - Crossf(mat[2], mat[0], mat[1]); - } - case 2: - if (Inpf(mat[2], mat[0]) < 1) { - Crossf(mat[1], mat[2], mat[0]); - Normalize(mat[1]); - Crossf(mat[0], mat[1], mat[2]); - } else if (Inpf(mat[2], mat[1]) < 1) { - Crossf(mat[0], mat[1], mat[2]); - Normalize(mat[0]); - Crossf(mat[1], mat[2], mat[0]); - } else { - float vec[3] = {mat[2][1], mat[2][2], mat[2][0]}; - - Crossf(mat[0], vec, mat[2]); - Normalize(mat[0]); - Crossf(mat[1], mat[2], mat[0]); - } - } - VecMulf(mat[0], size[0]); - VecMulf(mat[1], size[1]); - VecMulf(mat[2], size[2]); -} - -void Mat4Orthogonal(float mat[][4], int axis) -{ - float size[3]; - size[0] = VecLength(mat[0]); - size[1] = VecLength(mat[1]); - size[2] = VecLength(mat[2]); - Normalize(mat[axis]); - switch(axis) - { - case 0: - if (Inpf(mat[0], mat[1]) < 1) { - Crossf(mat[2], mat[0], mat[1]); - Normalize(mat[2]); - Crossf(mat[1], mat[2], mat[0]); - } else if (Inpf(mat[0], mat[2]) < 1) { - Crossf(mat[1], mat[2], mat[0]); - Normalize(mat[1]); - Crossf(mat[2], mat[0], mat[1]); - } else { - float vec[3] = {mat[0][1], mat[0][2], mat[0][0]}; - - Crossf(mat[2], mat[0], vec); - Normalize(mat[2]); - Crossf(mat[1], mat[2], mat[0]); - } - case 1: - Normalize(mat[0]); - if (Inpf(mat[1], mat[0]) < 1) { - Crossf(mat[2], mat[0], mat[1]); - Normalize(mat[2]); - Crossf(mat[0], mat[1], mat[2]); - } else if (Inpf(mat[0], mat[2]) < 1) { - Crossf(mat[0], mat[1], mat[2]); - Normalize(mat[0]); - Crossf(mat[2], mat[0], mat[1]); - } else { - float vec[3] = {mat[1][1], mat[1][2], mat[1][0]}; - - Crossf(mat[0], mat[1], vec); - Normalize(mat[0]); - Crossf(mat[2], mat[0], mat[1]); - } - case 2: - if (Inpf(mat[2], mat[0]) < 1) { - Crossf(mat[1], mat[2], mat[0]); - Normalize(mat[1]); - Crossf(mat[0], mat[1], mat[2]); - } else if (Inpf(mat[2], mat[1]) < 1) { - Crossf(mat[0], mat[1], mat[2]); - Normalize(mat[0]); - Crossf(mat[1], mat[2], mat[0]); - } else { - float vec[3] = {mat[2][1], mat[2][2], mat[2][0]}; - - Crossf(mat[0], vec, mat[2]); - Normalize(mat[0]); - Crossf(mat[1], mat[2], mat[0]); - } - } - VecMulf(mat[0], size[0]); - VecMulf(mat[1], size[1]); - VecMulf(mat[2], size[2]); -} - -int IsMat3Orthogonal(float mat[][3]) -{ - if (fabs(Inpf(mat[0], mat[1])) > 1.5 * FLT_EPSILON) - return 0; - - if (fabs(Inpf(mat[1], mat[2])) > 1.5 * FLT_EPSILON) - return 0; - - if (fabs(Inpf(mat[0], mat[2])) > 1.5 * FLT_EPSILON) - return 0; - - return 1; -} - -int IsMat4Orthogonal(float mat[][4]) -{ - if (fabs(Inpf(mat[0], mat[1])) > 1.5 * FLT_EPSILON) - return 0; - - if (fabs(Inpf(mat[1], mat[2])) > 1.5 * FLT_EPSILON) - return 0; - - if (fabs(Inpf(mat[0], mat[2])) > 1.5 * FLT_EPSILON) - return 0; - - return 1; -} - -void Mat3Ortho(float mat[][3]) -{ - Normalize(mat[0]); - Normalize(mat[1]); - Normalize(mat[2]); -} - -void Mat4Ortho(float mat[][4]) -{ - float len; - - len= Normalize(mat[0]); - if(len!=0.0) mat[0][3]/= len; - len= Normalize(mat[1]); - if(len!=0.0) mat[1][3]/= len; - len= Normalize(mat[2]); - if(len!=0.0) mat[2][3]/= len; -} - -void VecCopyf(float *v1, float *v2) -{ - v1[0]= v2[0]; - v1[1]= v2[1]; - v1[2]= v2[2]; -} - -int VecLen( int *v1, int *v2) -{ - float x,y,z; - - x=(float)(v1[0]-v2[0]); - y=(float)(v1[1]-v2[1]); - z=(float)(v1[2]-v2[2]); - return (int)floor(sqrt(x*x+y*y+z*z)); -} - -float VecLenf(float v1[3], float v2[3]) -{ - float x,y,z; - - x=v1[0]-v2[0]; - y=v1[1]-v2[1]; - z=v1[2]-v2[2]; - return (float)sqrt(x*x+y*y+z*z); -} - -float VecLength(float *v) -{ - return (float) sqrt(v[0]*v[0] + v[1]*v[1] + v[2]*v[2]); -} - -void VecAddf(float *v, float *v1, float *v2) -{ - v[0]= v1[0]+ v2[0]; - v[1]= v1[1]+ v2[1]; - v[2]= v1[2]+ v2[2]; -} - -void VecSubf(float *v, float *v1, float *v2) -{ - v[0]= v1[0]- v2[0]; - v[1]= v1[1]- v2[1]; - v[2]= v1[2]- v2[2]; -} - -void VecMulVecf(float *v, float *v1, float *v2) -{ - v[0] = v1[0] * v2[0]; - v[1] = v1[1] * v2[1]; - v[2] = v1[2] * v2[2]; -} - -void VecLerpf(float *target, const float *a, const float *b, const float t) -{ - const float s = 1.0f-t; - - target[0]= s*a[0] + t*b[0]; - target[1]= s*a[1] + t*b[1]; - target[2]= s*a[2] + t*b[2]; -} - -void Vec2Lerpf(float *target, const float *a, const float *b, const float t) -{ - const float s = 1.0f-t; - - target[0]= s*a[0] + t*b[0]; - target[1]= s*a[1] + t*b[1]; -} - -/* weight 3 vectors, (VecWeightf in 2.4x) - * 'w' must be unit length but is not a vector, just 3 weights */ -void VecLerp3f(float p[3], const float v1[3], const float v2[3], const float v3[3], const float w[3]) -{ - p[0] = v1[0]*w[0] + v2[0]*w[1] + v3[0]*w[2]; - p[1] = v1[1]*w[0] + v2[1]*w[1] + v3[1]*w[2]; - p[2] = v1[2]*w[0] + v2[2]*w[1] + v3[2]*w[2]; -} - -/* weight 3 2D vectors, (Vec2Weightf in 2.4x) - * 'w' must be unit length but is not a vector, just 3 weights */ -void Vec2Lerp3f(float p[2], const float v1[2], const float v2[2], const float v3[2], const float w[3]) -{ - p[0] = v1[0]*w[0] + v2[0]*w[1] + v3[0]*w[2]; - p[1] = v1[1]*w[0] + v2[1]*w[1] + v3[1]*w[2]; -} - -void VecMidf(float *v, float *v1, float *v2) -{ - v[0]= 0.5f*(v1[0]+ v2[0]); - v[1]= 0.5f*(v1[1]+ v2[1]); - v[2]= 0.5f*(v1[2]+ v2[2]); -} - -void VecMulf(float *v1, float f) -{ - - v1[0]*= f; - v1[1]*= f; - v1[2]*= f; -} - -void VecNegf(float *v1) -{ - v1[0] = -v1[0]; - v1[1] = -v1[1]; - v1[2] = -v1[2]; -} - -void VecOrthoBasisf(float *v, float *v1, float *v2) -{ - const float f = (float)sqrt(v[0]*v[0] + v[1]*v[1]); - - if (f < 1e-35f) { - // degenerate case - v1[0] = (v[2] < 0.0f) ? -1.0f : 1.0f; - v1[1] = v1[2] = v2[0] = v2[2] = 0.0f; - v2[1] = 1.0f; - } - else { - const float d= 1.0f/f; - - v1[0] = v[1]*d; - v1[1] = -v[0]*d; - v1[2] = 0.0f; - v2[0] = -v[2]*v1[1]; - v2[1] = v[2]*v1[0]; - v2[2] = v[0]*v1[1] - v[1]*v1[0]; - } -} - -int VecLenCompare(float *v1, float *v2, float limit) -{ - float x,y,z; - - x=v1[0]-v2[0]; - y=v1[1]-v2[1]; - z=v1[2]-v2[2]; - - return ((x*x + y*y + z*z) < (limit*limit)); -} - -int VecCompare( float *v1, float *v2, float limit) -{ - if( fabs(v1[0]-v2[0])<limit ) - if( fabs(v1[1]-v2[1])<limit ) - if( fabs(v1[2]-v2[2])<limit ) return 1; - return 0; -} - -int VecEqual(float *v1, float *v2) -{ - return ((v1[0]==v2[0]) && (v1[1]==v2[1]) && (v1[2]==v2[2])); -} - -int VecIsNull(float *v) -{ - return (v[0] == 0 && v[1] == 0 && v[2] == 0); -} - -void CalcNormShort( short *v1, short *v2, short *v3, float *n) /* is also cross product */ -{ - float n1[3],n2[3]; - - n1[0]= (float)(v1[0]-v2[0]); - n2[0]= (float)(v2[0]-v3[0]); - n1[1]= (float)(v1[1]-v2[1]); - n2[1]= (float)(v2[1]-v3[1]); - n1[2]= (float)(v1[2]-v2[2]); - n2[2]= (float)(v2[2]-v3[2]); - n[0]= n1[1]*n2[2]-n1[2]*n2[1]; - n[1]= n1[2]*n2[0]-n1[0]*n2[2]; - n[2]= n1[0]*n2[1]-n1[1]*n2[0]; - Normalize(n); -} - -void CalcNormLong( int* v1, int*v2, int*v3, float *n) -{ - float n1[3],n2[3]; - - n1[0]= (float)(v1[0]-v2[0]); - n2[0]= (float)(v2[0]-v3[0]); - n1[1]= (float)(v1[1]-v2[1]); - n2[1]= (float)(v2[1]-v3[1]); - n1[2]= (float)(v1[2]-v2[2]); - n2[2]= (float)(v2[2]-v3[2]); - n[0]= n1[1]*n2[2]-n1[2]*n2[1]; - n[1]= n1[2]*n2[0]-n1[0]*n2[2]; - n[2]= n1[0]*n2[1]-n1[1]*n2[0]; - Normalize(n); -} - -float CalcNormFloat( float *v1, float *v2, float *v3, float *n) -{ - float n1[3],n2[3]; - - n1[0]= v1[0]-v2[0]; - n2[0]= v2[0]-v3[0]; - n1[1]= v1[1]-v2[1]; - n2[1]= v2[1]-v3[1]; - n1[2]= v1[2]-v2[2]; - n2[2]= v2[2]-v3[2]; - n[0]= n1[1]*n2[2]-n1[2]*n2[1]; - n[1]= n1[2]*n2[0]-n1[0]*n2[2]; - n[2]= n1[0]*n2[1]-n1[1]*n2[0]; - return Normalize(n); -} - -float CalcNormFloat4( float *v1, float *v2, float *v3, float *v4, float *n) -{ - /* real cross! */ - float n1[3],n2[3]; - - n1[0]= v1[0]-v3[0]; - n1[1]= v1[1]-v3[1]; - n1[2]= v1[2]-v3[2]; - - n2[0]= v2[0]-v4[0]; - n2[1]= v2[1]-v4[1]; - n2[2]= v2[2]-v4[2]; - - n[0]= n1[1]*n2[2]-n1[2]*n2[1]; - n[1]= n1[2]*n2[0]-n1[0]*n2[2]; - n[2]= n1[0]*n2[1]-n1[1]*n2[0]; - - return Normalize(n); -} - - -void CalcCent3f(float *cent, float *v1, float *v2, float *v3) -{ - - cent[0]= 0.33333f*(v1[0]+v2[0]+v3[0]); - cent[1]= 0.33333f*(v1[1]+v2[1]+v3[1]); - cent[2]= 0.33333f*(v1[2]+v2[2]+v3[2]); -} - -void CalcCent4f(float *cent, float *v1, float *v2, float *v3, float *v4) -{ - - cent[0]= 0.25f*(v1[0]+v2[0]+v3[0]+v4[0]); - cent[1]= 0.25f*(v1[1]+v2[1]+v3[1]+v4[1]); - cent[2]= 0.25f*(v1[2]+v2[2]+v3[2]+v4[2]); -} - -float Sqrt3f(float f) -{ - if(f==0.0) return 0; - if(f<0) return (float)(-exp(log(-f)/3)); - else return (float)(exp(log(f)/3)); -} - -double Sqrt3d(double d) -{ - if(d==0.0) return 0; - if(d<0) return -exp(log(-d)/3); - else return exp(log(d)/3); -} - -void NormalShortToFloat(float *out, short *in) -{ - out[0] = in[0] / 32767.0f; - out[1] = in[1] / 32767.0f; - out[2] = in[2] / 32767.0f; -} - -void NormalFloatToShort(short *out, float *in) -{ - out[0] = (short)(in[0] * 32767.0); - out[1] = (short)(in[1] * 32767.0); - out[2] = (short)(in[2] * 32767.0); -} - -/* distance v1 to line v2-v3 */ -/* using Hesse formula, NO LINE PIECE! */ -float DistVL2Dfl( float *v1, float *v2, float *v3) { - float a[2],deler; - - a[0]= v2[1]-v3[1]; - a[1]= v3[0]-v2[0]; - deler= (float)sqrt(a[0]*a[0]+a[1]*a[1]); - if(deler== 0.0f) return 0; - - return (float)(fabs((v1[0]-v2[0])*a[0]+(v1[1]-v2[1])*a[1])/deler); - -} - -/* distance v1 to line-piece v2-v3 */ -float PdistVL2Dfl( float *v1, float *v2, float *v3) -{ - float labda, rc[2], pt[2], len; - - rc[0]= v3[0]-v2[0]; - rc[1]= v3[1]-v2[1]; - len= rc[0]*rc[0]+ rc[1]*rc[1]; - if(len==0.0) { - rc[0]= v1[0]-v2[0]; - rc[1]= v1[1]-v2[1]; - return (float)(sqrt(rc[0]*rc[0]+ rc[1]*rc[1])); - } - - labda= ( rc[0]*(v1[0]-v2[0]) + rc[1]*(v1[1]-v2[1]) )/len; - if(labda<=0.0) { - pt[0]= v2[0]; - pt[1]= v2[1]; - } - else if(labda>=1.0) { - pt[0]= v3[0]; - pt[1]= v3[1]; - } - else { - pt[0]= labda*rc[0]+v2[0]; - pt[1]= labda*rc[1]+v2[1]; - } - - rc[0]= pt[0]-v1[0]; - rc[1]= pt[1]-v1[1]; - return (float)sqrt(rc[0]*rc[0]+ rc[1]*rc[1]); -} - -float AreaF2Dfl( float *v1, float *v2, float *v3) -{ - return (float)(0.5*fabs( (v1[0]-v2[0])*(v2[1]-v3[1]) + (v1[1]-v2[1])*(v3[0]-v2[0]) )); -} - - -float AreaQ3Dfl( float *v1, float *v2, float *v3, float *v4) /* only convex Quadrilaterals */ -{ - float len, vec1[3], vec2[3], n[3]; - - VecSubf(vec1, v2, v1); - VecSubf(vec2, v4, v1); - Crossf(n, vec1, vec2); - len= Normalize(n); - - VecSubf(vec1, v4, v3); - VecSubf(vec2, v2, v3); - Crossf(n, vec1, vec2); - len+= Normalize(n); - - return (len/2.0f); -} - -float AreaT3Dfl( float *v1, float *v2, float *v3) /* Triangles */ -{ - float len, vec1[3], vec2[3], n[3]; - - VecSubf(vec1, v3, v2); - VecSubf(vec2, v1, v2); - Crossf(n, vec1, vec2); - len= Normalize(n); - - return (len/2.0f); -} - -#define MAX2(x,y) ( (x)>(y) ? (x) : (y) ) -#define MAX3(x,y,z) MAX2( MAX2((x),(y)) , (z) ) - - -float AreaPoly3Dfl(int nr, float *verts, float *normal) -{ - float x, y, z, area, max; - float *cur, *prev; - int a, px=0, py=1; - - /* first: find dominant axis: 0==X, 1==Y, 2==Z */ - x= (float)fabs(normal[0]); - y= (float)fabs(normal[1]); - z= (float)fabs(normal[2]); - max = MAX3(x, y, z); - if(max==y) py=2; - else if(max==x) { - px=1; - py= 2; - } - - /* The Trapezium Area Rule */ - prev= verts+3*(nr-1); - cur= verts; - area= 0; - for(a=0; a<nr; a++) { - area+= (cur[px]-prev[px])*(cur[py]+prev[py]); - prev= cur; - cur+=3; - } - - return (float)fabs(0.5*area/max); -} - -/* intersect Line-Line, shorts */ -short IsectLL2Ds(short *v1, short *v2, short *v3, short *v4) -{ - /* return: - -1: colliniar - 0: no intersection of segments - 1: exact intersection of segments - 2: cross-intersection of segments - */ - float div, labda, mu; - - div= (float)((v2[0]-v1[0])*(v4[1]-v3[1])-(v2[1]-v1[1])*(v4[0]-v3[0])); - if(div==0.0f) return -1; - - labda= ((float)(v1[1]-v3[1])*(v4[0]-v3[0])-(v1[0]-v3[0])*(v4[1]-v3[1]))/div; - - mu= ((float)(v1[1]-v3[1])*(v2[0]-v1[0])-(v1[0]-v3[0])*(v2[1]-v1[1]))/div; - - if(labda>=0.0f && labda<=1.0f && mu>=0.0f && mu<=1.0f) { - if(labda==0.0f || labda==1.0f || mu==0.0f || mu==1.0f) return 1; - return 2; - } - return 0; -} - -/* intersect Line-Line, floats */ -short IsectLL2Df(float *v1, float *v2, float *v3, float *v4) -{ - /* return: - -1: colliniar -0: no intersection of segments -1: exact intersection of segments -2: cross-intersection of segments - */ - float div, labda, mu; - - div= (v2[0]-v1[0])*(v4[1]-v3[1])-(v2[1]-v1[1])*(v4[0]-v3[0]); - if(div==0.0) return -1; - - labda= ((float)(v1[1]-v3[1])*(v4[0]-v3[0])-(v1[0]-v3[0])*(v4[1]-v3[1]))/div; - - mu= ((float)(v1[1]-v3[1])*(v2[0]-v1[0])-(v1[0]-v3[0])*(v2[1]-v1[1]))/div; - - if(labda>=0.0 && labda<=1.0 && mu>=0.0 && mu<=1.0) { - if(labda==0.0 || labda==1.0 || mu==0.0 || mu==1.0) return 1; - return 2; - } - return 0; -} - -/* --1: colliniar - 1: intersection - -*/ -static short IsectLLPt2Df(float x0,float y0,float x1,float y1, - float x2,float y2,float x3,float y3, float *xi,float *yi) - -{ - /* - this function computes the intersection of the sent lines - and returns the intersection point, note that the function assumes - the lines intersect. the function can handle vertical as well - as horizontal lines. note the function isn't very clever, it simply - applies the math, but we don't need speed since this is a - pre-processing step - */ - float c1,c2, // constants of linear equations - det_inv, // the inverse of the determinant of the coefficient - m1,m2; // the slopes of each line - /* - compute slopes, note the cludge for infinity, however, this will - be close enough - */ - if ( fabs( x1-x0 ) > 0.000001 ) - m1 = ( y1-y0 ) / ( x1-x0 ); - else - return -1; /*m1 = ( float ) 1e+10;*/ // close enough to infinity - - if ( fabs( x3-x2 ) > 0.000001 ) - m2 = ( y3-y2 ) / ( x3-x2 ); - else - return -1; /*m2 = ( float ) 1e+10;*/ // close enough to infinity - - if (fabs(m1-m2) < 0.000001) - return -1; /* paralelle lines */ - -// compute constants - - c1 = ( y0-m1*x0 ); - c2 = ( y2-m2*x2 ); - -// compute the inverse of the determinate - - det_inv = 1.0f / ( -m1 + m2 ); - -// use Kramers rule to compute xi and yi - - *xi= ( ( -c2 + c1 ) *det_inv ); - *yi= ( ( m2*c1 - m1*c2 ) *det_inv ); - - return 1; -} // end Intersect_Lines - -#define SIDE_OF_LINE(pa,pb,pp) ((pa[0]-pp[0])*(pb[1]-pp[1]))-((pb[0]-pp[0])*(pa[1]-pp[1])) -/* point in tri */ -int IsectPT2Df(float pt[2], float v1[2], float v2[2], float v3[2]) -{ - if (SIDE_OF_LINE(v1,v2,pt)>=0.0) { - if (SIDE_OF_LINE(v2,v3,pt)>=0.0) { - if (SIDE_OF_LINE(v3,v1,pt)>=0.0) { - return 1; - } - } - } else { - if (! (SIDE_OF_LINE(v2,v3,pt)>=0.0) ) { - if (! (SIDE_OF_LINE(v3,v1,pt)>=0.0)) { - return -1; - } - } - } - - return 0; -} -/* point in quad - only convex quads */ -int IsectPQ2Df(float pt[2], float v1[2], float v2[2], float v3[2], float v4[2]) -{ - if (SIDE_OF_LINE(v1,v2,pt)>=0.0) { - if (SIDE_OF_LINE(v2,v3,pt)>=0.0) { - if (SIDE_OF_LINE(v3,v4,pt)>=0.0) { - if (SIDE_OF_LINE(v4,v1,pt)>=0.0) { - return 1; - } - } - } - } else { - if (! (SIDE_OF_LINE(v2,v3,pt)>=0.0) ) { - if (! (SIDE_OF_LINE(v3,v4,pt)>=0.0)) { - if (! (SIDE_OF_LINE(v4,v1,pt)>=0.0)) { - return -1; - } - } - } - } - - return 0; -} - - -/** - * - * @param min - * @param max - * @param vec - */ -void MinMax3(float *min, float *max, float *vec) -{ - if(min[0]>vec[0]) min[0]= vec[0]; - if(min[1]>vec[1]) min[1]= vec[1]; - if(min[2]>vec[2]) min[2]= vec[2]; - - if(max[0]<vec[0]) max[0]= vec[0]; - if(max[1]<vec[1]) max[1]= vec[1]; - if(max[2]<vec[2]) max[2]= vec[2]; -} - -static float TriSignedArea(float *v1, float *v2, float *v3, int i, int j) -{ - return 0.5f*((v1[i]-v2[i])*(v2[j]-v3[j]) + (v1[j]-v2[j])*(v3[i]-v2[i])); -} - -static int BarycentricWeights(float *v1, float *v2, float *v3, float *co, float *n, float *w) -{ - float xn, yn, zn, a1, a2, a3, asum; - short i, j; - - /* find best projection of face XY, XZ or YZ: barycentric weights of - the 2d projected coords are the same and faster to compute */ - xn= (float)fabs(n[0]); - yn= (float)fabs(n[1]); - zn= (float)fabs(n[2]); - if(zn>=xn && zn>=yn) {i= 0; j= 1;} - else if(yn>=xn && yn>=zn) {i= 0; j= 2;} - else {i= 1; j= 2;} - - a1= TriSignedArea(v2, v3, co, i, j); - a2= TriSignedArea(v3, v1, co, i, j); - a3= TriSignedArea(v1, v2, co, i, j); - - asum= a1 + a2 + a3; - - if (fabs(asum) < FLT_EPSILON) { - /* zero area triangle */ - w[0]= w[1]= w[2]= 1.0f/3.0f; - return 1; - } - - asum= 1.0f/asum; - w[0]= a1*asum; - w[1]= a2*asum; - w[2]= a3*asum; - - return 0; -} - -void InterpWeightsQ3Dfl(float *v1, float *v2, float *v3, float *v4, float *co, float *w) -{ - float w2[3]; - - w[0]= w[1]= w[2]= w[3]= 0.0f; - - /* first check for exact match */ - if(VecEqual(co, v1)) - w[0]= 1.0f; - else if(VecEqual(co, v2)) - w[1]= 1.0f; - else if(VecEqual(co, v3)) - w[2]= 1.0f; - else if(v4 && VecEqual(co, v4)) - w[3]= 1.0f; - else { - /* otherwise compute barycentric interpolation weights */ - float n1[3], n2[3], n[3]; - int degenerate; - - VecSubf(n1, v1, v3); - if (v4) { - VecSubf(n2, v2, v4); - } - else { - VecSubf(n2, v2, v3); - } - Crossf(n, n1, n2); - - /* OpenGL seems to split this way, so we do too */ - if (v4) { - degenerate= BarycentricWeights(v1, v2, v4, co, n, w); - SWAP(float, w[2], w[3]); - - if(degenerate || (w[0] < 0.0f)) { - /* if w[1] is negative, co is on the other side of the v1-v3 edge, - so we interpolate using the other triangle */ - degenerate= BarycentricWeights(v2, v3, v4, co, n, w2); - - if(!degenerate) { - w[0]= 0.0f; - w[1]= w2[0]; - w[2]= w2[1]; - w[3]= w2[2]; - } - } - } - else - BarycentricWeights(v1, v2, v3, co, n, w); - } -} - -/* Mean value weights - smooth interpolation weights for polygons with - * more than 3 vertices */ -static float MeanValueHalfTan(float *v1, float *v2, float *v3) -{ - float d2[3], d3[3], cross[3], area, dot, len; - - VecSubf(d2, v2, v1); - VecSubf(d3, v3, v1); - Crossf(cross, d2, d3); - - area= VecLength(cross); - dot= Inpf(d2, d3); - len= VecLength(d2)*VecLength(d3); - - if(area == 0.0f) - return 0.0f; - else - return (len - dot)/area; -} - -void MeanValueWeights(float v[][3], int n, float *co, float *w) -{ - float totweight, t1, t2, len, *vmid, *vprev, *vnext; - int i; - - totweight= 0.0f; - - for(i=0; i<n; i++) { - vmid= v[i]; - vprev= (i == 0)? v[n-1]: v[i-1]; - vnext= (i == n-1)? v[0]: v[i+1]; - - t1= MeanValueHalfTan(co, vprev, vmid); - t2= MeanValueHalfTan(co, vmid, vnext); - - len= VecLenf(co, vmid); - w[i]= (t1+t2)/len; - totweight += w[i]; - } - - if(totweight != 0.0f) - for(i=0; i<n; i++) - w[i] /= totweight; -} - - -/* ************ EULER *************** */ - -/* Euler Rotation Order Code: - * was adapted from - ANSI C code from the article - "Euler Angle Conversion" - by Ken Shoemake, shoemake@graphics.cis.upenn.edu - in "Graphics Gems IV", Academic Press, 1994 - * for use in Blender - */ - -/* Type for rotation order info - see wiki for derivation details */ -typedef struct RotOrderInfo { - short axis[3]; - short parity; /* parity of axis permutation (even=0, odd=1) - 'n' in original code */ -} RotOrderInfo; - -/* Array of info for Rotation Order calculations - * WARNING: must be kept in same order as eEulerRotationOrders - */ -static RotOrderInfo rotOrders[]= { - /* i, j, k, n */ - {{0, 1, 2}, 0}, // XYZ - {{0, 2, 1}, 1}, // XZY - {{1, 0, 2}, 1}, // YXZ - {{1, 2, 0}, 0}, // YZX - {{2, 0, 1}, 0}, // ZXY - {{2, 1, 0}, 1} // ZYZ -}; - -/* Get relevant pointer to rotation order set from the array - * NOTE: since we start at 1 for the values, but arrays index from 0, - * there is -1 factor involved in this process... - */ -#define GET_ROTATIONORDER_INFO(order) (((order)>=1) ? &rotOrders[(order)-1] : &rotOrders[0]) - -/* Construct quaternion from Euler angles (in radians). */ -void EulOToQuat(float e[3], short order, float q[4]) -{ - RotOrderInfo *R= GET_ROTATIONORDER_INFO(order); - short i=R->axis[0], j=R->axis[1], k=R->axis[2]; - double ti, tj, th, ci, cj, ch, si, sj, sh, cc, cs, sc, ss; - double a[3]; - - ti = e[i]/2; tj = e[j]/2; th = e[k]/2; - - if (R->parity) e[j] = -e[j]; - - ci = cos(ti); cj = cos(tj); ch = cos(th); - si = sin(ti); sj = sin(tj); sh = sin(th); - - cc = ci*ch; cs = ci*sh; - sc = si*ch; ss = si*sh; - - a[i] = cj*sc - sj*cs; - a[j] = cj*ss + sj*cc; - a[k] = cj*cs - sj*sc; - - q[0] = cj*cc + sj*ss; - q[1] = a[0]; - q[2] = a[1]; - q[3] = a[2]; - - if (R->parity) q[j] = -q[j]; -} - -/* Convert quaternion to Euler angles (in radians). */ -void QuatToEulO(float q[4], float e[3], short order) -{ - float M[3][3]; - - QuatToMat3(q, M); - Mat3ToEulO(M, e, order); -} - -/* Construct 3x3 matrix from Euler angles (in radians). */ -void EulOToMat3(float e[3], short order, float M[3][3]) -{ - RotOrderInfo *R= GET_ROTATIONORDER_INFO(order); - short i=R->axis[0], j=R->axis[1], k=R->axis[2]; - double ti, tj, th, ci, cj, ch, si, sj, sh, cc, cs, sc, ss; - - if (R->parity) { - ti = -e[i]; tj = -e[j]; th = -e[k]; - } - else { - ti = e[i]; tj = e[j]; th = e[k]; - } - - ci = cos(ti); cj = cos(tj); ch = cos(th); - si = sin(ti); sj = sin(tj); sh = sin(th); - - cc = ci*ch; cs = ci*sh; - sc = si*ch; ss = si*sh; - - M[i][i] = cj*ch; M[j][i] = sj*sc-cs; M[k][i] = sj*cc+ss; - M[i][j] = cj*sh; M[j][j] = sj*ss+cc; M[k][j] = sj*cs-sc; - M[i][k] = -sj; M[j][k] = cj*si; M[k][k] = cj*ci; -} - -/* Construct 4x4 matrix from Euler angles (in radians). */ -void EulOToMat4(float e[3], short order, float M[4][4]) -{ - float m[3][3]; - - /* for now, we'll just do this the slow way (i.e. copying matrices) */ - Mat3Ortho(m); - EulOToMat3(e, order, m); - Mat4CpyMat3(M, m); -} - -/* Convert 3x3 matrix to Euler angles (in radians). */ -void Mat3ToEulO(float M[3][3], float e[3], short order) -{ - RotOrderInfo *R= GET_ROTATIONORDER_INFO(order); - short i=R->axis[0], j=R->axis[1], k=R->axis[2]; - double cy = sqrt(M[i][i]*M[i][i] + M[i][j]*M[i][j]); - - if (cy > 16*FLT_EPSILON) { - e[i] = atan2(M[j][k], M[k][k]); - e[j] = atan2(-M[i][k], cy); - e[k] = atan2(M[i][j], M[i][i]); - } - else { - e[i] = atan2(-M[k][j], M[j][j]); - e[j] = atan2(-M[i][k], cy); - e[k] = 0; - } - - if (R->parity) { - e[0] = -e[0]; - e[1] = -e[1]; - e[2] = -e[2]; - } -} - -/* Convert 4x4 matrix to Euler angles (in radians). */ -void Mat4ToEulO(float M[4][4], float e[3], short order) -{ - float m[3][3]; - - /* for now, we'll just do this the slow way (i.e. copying matrices) */ - Mat3CpyMat4(m, M); - Mat3Ortho(m); - Mat3ToEulO(m, e, order); -} - -/* returns two euler calculation methods, so we can pick the best */ -static void mat3_to_eulo2(float M[3][3], float *e1, float *e2, short order) -{ - RotOrderInfo *R= GET_ROTATIONORDER_INFO(order); - short i=R->axis[0], j=R->axis[1], k=R->axis[2]; - float m[3][3]; - double cy; - - /* process the matrix first */ - Mat3CpyMat3(m, M); - Mat3Ortho(m); - - cy= sqrt(m[i][i]*m[i][i] + m[i][j]*m[i][j]); - - if (cy > 16*FLT_EPSILON) { - e1[i] = atan2(m[j][k], m[k][k]); - e1[j] = atan2(-m[i][k], cy); - e1[k] = atan2(m[i][j], m[i][i]); - - e2[i] = atan2(-m[j][k], -m[k][k]); - e2[j] = atan2(-m[i][k], -cy); - e2[k] = atan2(-m[i][j], -m[i][i]); - } - else { - e1[i] = atan2(-m[k][j], m[j][j]); - e1[j] = atan2(-m[i][k], cy); - e1[k] = 0; - - VecCopyf(e2, e1); - } - - if (R->parity) { - e1[0] = -e1[0]; - e1[1] = -e1[1]; - e1[2] = -e1[2]; - - e2[0] = -e2[0]; - e2[1] = -e2[1]; - e2[2] = -e2[2]; - } -} - -/* uses 2 methods to retrieve eulers, and picks the closest */ -void Mat3ToCompatibleEulO(float mat[3][3], float eul[3], float oldrot[3], short order) -{ - float eul1[3], eul2[3]; - float d1, d2; - - mat3_to_eulo2(mat, eul1, eul2, order); - - compatible_eul(eul1, oldrot); - compatible_eul(eul2, oldrot); - - d1= (float)fabs(eul1[0]-oldrot[0]) + (float)fabs(eul1[1]-oldrot[1]) + (float)fabs(eul1[2]-oldrot[2]); - d2= (float)fabs(eul2[0]-oldrot[0]) + (float)fabs(eul2[1]-oldrot[1]) + (float)fabs(eul2[2]-oldrot[2]); - - /* return best, which is just the one with lowest difference */ - if (d1 > d2) - VecCopyf(eul, eul2); - else - VecCopyf(eul, eul1); -} - -/* rotate the given euler by the given angle on the specified axis */ -// NOTE: is this safe to do with different axis orders? -void eulerO_rot(float beul[3], float ang, char axis, short order) -{ - float eul[3], mat1[3][3], mat2[3][3], totmat[3][3]; - - eul[0]= eul[1]= eul[2]= 0.0f; - if (axis=='x') - eul[0]= ang; - else if (axis=='y') - eul[1]= ang; - else - eul[2]= ang; - - EulOToMat3(eul, order, mat1); - EulOToMat3(beul, order, mat2); - - Mat3MulMat3(totmat, mat2, mat1); - - Mat3ToEulO(totmat, beul, order); -} - -/* ************ EULER (old XYZ) *************** */ - -/* XYZ order */ -void EulToMat3( float *eul, float mat[][3]) -{ - double ci, cj, ch, si, sj, sh, cc, cs, sc, ss; - - ci = cos(eul[0]); - cj = cos(eul[1]); - ch = cos(eul[2]); - si = sin(eul[0]); - sj = sin(eul[1]); - sh = sin(eul[2]); - cc = ci*ch; - cs = ci*sh; - sc = si*ch; - ss = si*sh; - - mat[0][0] = (float)(cj*ch); - mat[1][0] = (float)(sj*sc-cs); - mat[2][0] = (float)(sj*cc+ss); - mat[0][1] = (float)(cj*sh); - mat[1][1] = (float)(sj*ss+cc); - mat[2][1] = (float)(sj*cs-sc); - mat[0][2] = (float)-sj; - mat[1][2] = (float)(cj*si); - mat[2][2] = (float)(cj*ci); - -} - -/* XYZ order */ -void EulToMat4( float *eul,float mat[][4]) -{ - double ci, cj, ch, si, sj, sh, cc, cs, sc, ss; - - ci = cos(eul[0]); - cj = cos(eul[1]); - ch = cos(eul[2]); - si = sin(eul[0]); - sj = sin(eul[1]); - sh = sin(eul[2]); - cc = ci*ch; - cs = ci*sh; - sc = si*ch; - ss = si*sh; - - mat[0][0] = (float)(cj*ch); - mat[1][0] = (float)(sj*sc-cs); - mat[2][0] = (float)(sj*cc+ss); - mat[0][1] = (float)(cj*sh); - mat[1][1] = (float)(sj*ss+cc); - mat[2][1] = (float)(sj*cs-sc); - mat[0][2] = (float)-sj; - mat[1][2] = (float)(cj*si); - mat[2][2] = (float)(cj*ci); - - - mat[3][0]= mat[3][1]= mat[3][2]= mat[0][3]= mat[1][3]= mat[2][3]= 0.0f; - mat[3][3]= 1.0f; -} - -/* returns two euler calculation methods, so we can pick the best */ -/* XYZ order */ -static void mat3_to_eul2(float tmat[][3], float *eul1, float *eul2) -{ - float cy, quat[4], mat[3][3]; - - Mat3ToQuat(tmat, quat); - QuatToMat3(quat, mat); - Mat3CpyMat3(mat, tmat); - Mat3Ortho(mat); - - cy = (float)sqrt(mat[0][0]*mat[0][0] + mat[0][1]*mat[0][1]); - - if (cy > 16.0*FLT_EPSILON) { - - eul1[0] = (float)atan2(mat[1][2], mat[2][2]); - eul1[1] = (float)atan2(-mat[0][2], cy); - eul1[2] = (float)atan2(mat[0][1], mat[0][0]); - - eul2[0] = (float)atan2(-mat[1][2], -mat[2][2]); - eul2[1] = (float)atan2(-mat[0][2], -cy); - eul2[2] = (float)atan2(-mat[0][1], -mat[0][0]); - - } else { - eul1[0] = (float)atan2(-mat[2][1], mat[1][1]); - eul1[1] = (float)atan2(-mat[0][2], cy); - eul1[2] = 0.0f; - - VecCopyf(eul2, eul1); - } -} - -/* XYZ order */ -void Mat3ToEul(float tmat[][3], float *eul) -{ - float eul1[3], eul2[3]; - - mat3_to_eul2(tmat, eul1, eul2); - - /* return best, which is just the one with lowest values it in */ - if( fabs(eul1[0])+fabs(eul1[1])+fabs(eul1[2]) > fabs(eul2[0])+fabs(eul2[1])+fabs(eul2[2])) { - VecCopyf(eul, eul2); - } - else { - VecCopyf(eul, eul1); - } -} - -/* XYZ order */ -void Mat4ToEul(float tmat[][4], float *eul) -{ - float tempMat[3][3]; - - Mat3CpyMat4(tempMat, tmat); - Mat3Ortho(tempMat); - Mat3ToEul(tempMat, eul); -} - -/* XYZ order */ -void QuatToEul(float *quat, float *eul) -{ - float mat[3][3]; - - QuatToMat3(quat, mat); - Mat3ToEul(mat, eul); -} - -/* XYZ order */ -void EulToQuat(float *eul, float *quat) -{ - float ti, tj, th, ci, cj, ch, si, sj, sh, cc, cs, sc, ss; - - ti = eul[0]*0.5f; tj = eul[1]*0.5f; th = eul[2]*0.5f; - ci = (float)cos(ti); cj = (float)cos(tj); ch = (float)cos(th); - si = (float)sin(ti); sj = (float)sin(tj); sh = (float)sin(th); - cc = ci*ch; cs = ci*sh; sc = si*ch; ss = si*sh; - - quat[0] = cj*cc + sj*ss; - quat[1] = cj*sc - sj*cs; - quat[2] = cj*ss + sj*cc; - quat[3] = cj*cs - sj*sc; -} - -/* XYZ order */ -void euler_rot(float *beul, float ang, char axis) -{ - float eul[3], mat1[3][3], mat2[3][3], totmat[3][3]; - - eul[0]= eul[1]= eul[2]= 0.0f; - if(axis=='x') eul[0]= ang; - else if(axis=='y') eul[1]= ang; - else eul[2]= ang; - - EulToMat3(eul, mat1); - EulToMat3(beul, mat2); - - Mat3MulMat3(totmat, mat2, mat1); - - Mat3ToEul(totmat, beul); - -} - -/* exported to transform.c */ -/* order independent! */ -void compatible_eul(float *eul, float *oldrot) -{ - float dx, dy, dz; - - /* correct differences of about 360 degrees first */ - dx= eul[0] - oldrot[0]; - dy= eul[1] - oldrot[1]; - dz= eul[2] - oldrot[2]; - - while(fabs(dx) > 5.1) { - if(dx > 0.0f) eul[0] -= 2.0f*(float)M_PI; else eul[0]+= 2.0f*(float)M_PI; - dx= eul[0] - oldrot[0]; - } - while(fabs(dy) > 5.1) { - if(dy > 0.0f) eul[1] -= 2.0f*(float)M_PI; else eul[1]+= 2.0f*(float)M_PI; - dy= eul[1] - oldrot[1]; - } - while(fabs(dz) > 5.1) { - if(dz > 0.0f) eul[2] -= 2.0f*(float)M_PI; else eul[2]+= 2.0f*(float)M_PI; - dz= eul[2] - oldrot[2]; - } - - /* is 1 of the axis rotations larger than 180 degrees and the other small? NO ELSE IF!! */ - if( fabs(dx) > 3.2 && fabs(dy)<1.6 && fabs(dz)<1.6 ) { - if(dx > 0.0) eul[0] -= 2.0f*(float)M_PI; else eul[0]+= 2.0f*(float)M_PI; - } - if( fabs(dy) > 3.2 && fabs(dz)<1.6 && fabs(dx)<1.6 ) { - if(dy > 0.0) eul[1] -= 2.0f*(float)M_PI; else eul[1]+= 2.0f*(float)M_PI; - } - if( fabs(dz) > 3.2 && fabs(dx)<1.6 && fabs(dy)<1.6 ) { - if(dz > 0.0) eul[2] -= 2.0f*(float)M_PI; else eul[2]+= 2.0f*(float)M_PI; - } - - /* the method below was there from ancient days... but why! probably because the code sucks :) - */ -#if 0 - /* calc again */ - dx= eul[0] - oldrot[0]; - dy= eul[1] - oldrot[1]; - dz= eul[2] - oldrot[2]; - - /* special case, tested for x-z */ - - if( (fabs(dx) > 3.1 && fabs(dz) > 1.5 ) || ( fabs(dx) > 1.5 && fabs(dz) > 3.1 ) ) { - if(dx > 0.0) eul[0] -= M_PI; else eul[0]+= M_PI; - if(eul[1] > 0.0) eul[1]= M_PI - eul[1]; else eul[1]= -M_PI - eul[1]; - if(dz > 0.0) eul[2] -= M_PI; else eul[2]+= M_PI; - - } - else if( (fabs(dx) > 3.1 && fabs(dy) > 1.5 ) || ( fabs(dx) > 1.5 && fabs(dy) > 3.1 ) ) { - if(dx > 0.0) eul[0] -= M_PI; else eul[0]+= M_PI; - if(dy > 0.0) eul[1] -= M_PI; else eul[1]+= M_PI; - if(eul[2] > 0.0) eul[2]= M_PI - eul[2]; else eul[2]= -M_PI - eul[2]; - } - else if( (fabs(dy) > 3.1 && fabs(dz) > 1.5 ) || ( fabs(dy) > 1.5 && fabs(dz) > 3.1 ) ) { - if(eul[0] > 0.0) eul[0]= M_PI - eul[0]; else eul[0]= -M_PI - eul[0]; - if(dy > 0.0) eul[1] -= M_PI; else eul[1]+= M_PI; - if(dz > 0.0) eul[2] -= M_PI; else eul[2]+= M_PI; - } -#endif -} - -/* uses 2 methods to retrieve eulers, and picks the closest */ -/* XYZ order */ -void Mat3ToCompatibleEul(float mat[][3], float *eul, float *oldrot) -{ - float eul1[3], eul2[3]; - float d1, d2; - - mat3_to_eul2(mat, eul1, eul2); - - compatible_eul(eul1, oldrot); - compatible_eul(eul2, oldrot); - - d1= (float)fabs(eul1[0]-oldrot[0]) + (float)fabs(eul1[1]-oldrot[1]) + (float)fabs(eul1[2]-oldrot[2]); - d2= (float)fabs(eul2[0]-oldrot[0]) + (float)fabs(eul2[1]-oldrot[1]) + (float)fabs(eul2[2]-oldrot[2]); - - /* return best, which is just the one with lowest difference */ - if( d1 > d2) { - VecCopyf(eul, eul2); - } - else { - VecCopyf(eul, eul1); - } - -} - -/* the matrix is written to as 3 axis vectors */ -void EulToGimbalAxis(float gmat[][3], float *eul, short order) -{ - RotOrderInfo *R= GET_ROTATIONORDER_INFO(order); - - float mat[3][3]; - float teul[3]; - - /* first axis is local */ - EulOToMat3(eul, order, mat); - VecCopyf(gmat[R->axis[0]], mat[R->axis[0]]); - - /* second axis is local minus first rotation */ - VecCopyf(teul, eul); - teul[R->axis[0]] = 0; - EulOToMat3(teul, order, mat); - VecCopyf(gmat[R->axis[1]], mat[R->axis[1]]); - - - /* Last axis is global */ - gmat[R->axis[2]][0] = 0; - gmat[R->axis[2]][1] = 0; - gmat[R->axis[2]][2] = 0; - gmat[R->axis[2]][R->axis[2]] = 1; -} - -/* ************ AXIS ANGLE *************** */ - -/* Axis angle to Quaternions */ -void AxisAngleToQuat(float q[4], float axis[3], float angle) -{ - float nor[3]; - float si; - - VecCopyf(nor, axis); - Normalize(nor); - - angle /= 2; - si = (float)sin(angle); - q[0] = (float)cos(angle); - q[1] = nor[0] * si; - q[2] = nor[1] * si; - q[3] = nor[2] * si; -} - -/* Quaternions to Axis Angle */ -void QuatToAxisAngle(float q[4], float axis[3], float *angle) -{ - float ha, si; - - /* calculate angle/2, and sin(angle/2) */ - ha= (float)acos(q[0]); - si= (float)sin(ha); - - /* from half-angle to angle */ - *angle= ha * 2; - - /* prevent division by zero for axis conversion */ - if (fabs(si) < 0.0005) - si= 1.0f; - - axis[0]= q[1] / si; - axis[1]= q[2] / si; - axis[2]= q[3] / si; -} - -/* Axis Angle to Euler Rotation */ -void AxisAngleToEulO(float axis[3], float angle, float eul[3], short order) -{ - float q[4]; - - /* use quaternions as intermediate representation for now... */ - AxisAngleToQuat(q, axis, angle); - QuatToEulO(q, eul, order); -} - -/* Euler Rotation to Axis Angle */ -void EulOToAxisAngle(float eul[3], short order, float axis[3], float *angle) -{ - float q[4]; - - /* use quaternions as intermediate representation for now... */ - EulOToQuat(eul, order, q); - QuatToAxisAngle(q, axis, angle); -} - -/* axis angle to 3x3 matrix - safer version (normalisation of axis performed) */ -void AxisAngleToMat3(float axis[3], float angle, float mat[3][3]) -{ - float nor[3], nsi[3], co, si, ico; - - /* normalise the axis first (to remove unwanted scaling) */ - VecCopyf(nor, axis); - Normalize(nor); - - /* now convert this to a 3x3 matrix */ - co= (float)cos(angle); - si= (float)sin(angle); - - ico= (1.0f - co); - nsi[0]= nor[0]*si; - nsi[1]= nor[1]*si; - nsi[2]= nor[2]*si; - - mat[0][0] = ((nor[0] * nor[0]) * ico) + co; - mat[0][1] = ((nor[0] * nor[1]) * ico) + nsi[2]; - mat[0][2] = ((nor[0] * nor[2]) * ico) - nsi[1]; - mat[1][0] = ((nor[0] * nor[1]) * ico) - nsi[2]; - mat[1][1] = ((nor[1] * nor[1]) * ico) + co; - mat[1][2] = ((nor[1] * nor[2]) * ico) + nsi[0]; - mat[2][0] = ((nor[0] * nor[2]) * ico) + nsi[1]; - mat[2][1] = ((nor[1] * nor[2]) * ico) - nsi[0]; - mat[2][2] = ((nor[2] * nor[2]) * ico) + co; -} - -/* axis angle to 4x4 matrix - safer version (normalisation of axis performed) */ -void AxisAngleToMat4(float axis[3], float angle, float mat[4][4]) -{ - float tmat[3][3]; - - AxisAngleToMat3(axis, angle, tmat); - Mat4One(mat); - Mat4CpyMat3(mat, tmat); -} - -/* 3x3 matrix to axis angle (see Mat4ToVecRot too) */ -void Mat3ToAxisAngle(float mat[3][3], float axis[3], float *angle) -{ - float q[4]; - - /* use quaternions as intermediate representation */ - // TODO: it would be nicer to go straight there... - Mat3ToQuat(mat, q); - QuatToAxisAngle(q, axis, angle); -} - -/* 4x4 matrix to axis angle (see Mat4ToVecRot too) */ -void Mat4ToAxisAngle(float mat[4][4], float axis[3], float *angle) -{ - float q[4]; - - /* use quaternions as intermediate representation */ - // TODO: it would be nicer to go straight there... - Mat4ToQuat(mat, q); - QuatToAxisAngle(q, axis, angle); -} - -/* ************ AXIS ANGLE (unchecked) *************** */ -// TODO: the following calls should probably be depreceated sometime - -/* 3x3 matrix to axis angle */ -void Mat3ToVecRot(float mat[3][3], float axis[3], float *angle) -{ - float q[4]; - - /* use quaternions as intermediate representation */ - // TODO: it would be nicer to go straight there... - Mat3ToQuat(mat, q); - QuatToAxisAngle(q, axis, angle); -} - -/* 4x4 matrix to axis angle */ -void Mat4ToVecRot(float mat[4][4], float axis[3], float *angle) -{ - float q[4]; - - /* use quaternions as intermediate representation */ - // TODO: it would be nicer to go straight there... - Mat4ToQuat(mat, q); - QuatToAxisAngle(q, axis, angle); -} - -/* axis angle to 3x3 matrix */ -void VecRotToMat3(float *vec, float phi, float mat[][3]) -{ - /* rotation of phi radials around vec */ - float vx, vx2, vy, vy2, vz, vz2, co, si; - - vx= vec[0]; - vy= vec[1]; - vz= vec[2]; - vx2= vx*vx; - vy2= vy*vy; - vz2= vz*vz; - co= (float)cos(phi); - si= (float)sin(phi); - - mat[0][0]= vx2+co*(1.0f-vx2); - mat[0][1]= vx*vy*(1.0f-co)+vz*si; - mat[0][2]= vz*vx*(1.0f-co)-vy*si; - mat[1][0]= vx*vy*(1.0f-co)-vz*si; - mat[1][1]= vy2+co*(1.0f-vy2); - mat[1][2]= vy*vz*(1.0f-co)+vx*si; - mat[2][0]= vz*vx*(1.0f-co)+vy*si; - mat[2][1]= vy*vz*(1.0f-co)-vx*si; - mat[2][2]= vz2+co*(1.0f-vz2); -} - -/* axis angle to 4x4 matrix */ -void VecRotToMat4(float *vec, float phi, float mat[][4]) -{ - float tmat[3][3]; - - VecRotToMat3(vec, phi, tmat); - Mat4One(mat); - Mat4CpyMat3(mat, tmat); -} - -/* axis angle to quaternion */ -void VecRotToQuat(float *vec, float phi, float *quat) -{ - /* rotation of phi radials around vec */ - float si; - - quat[1]= vec[0]; - quat[2]= vec[1]; - quat[3]= vec[2]; - - if( Normalize(quat+1) == 0.0f) { - QuatOne(quat); - } - else { - quat[0]= (float)cos( phi/2.0 ); - si= (float)sin( phi/2.0 ); - quat[1] *= si; - quat[2] *= si; - quat[3] *= si; - } -} - -/* ************ VECTORS *************** */ - -/* Returns a vector bisecting the angle at v2 formed by v1, v2 and v3 */ -void VecBisect3(float *out, float *v1, float *v2, float *v3) -{ - float d_12[3], d_23[3]; - VecSubf(d_12, v2, v1); - VecSubf(d_23, v3, v2); - Normalize(d_12); - Normalize(d_23); - VecAddf(out, d_12, d_23); - Normalize(out); -} - -/* Returns a reflection vector from a vector and a normal vector -reflect = vec - ((2 * DotVecs(vec, mirror)) * mirror) -*/ -void VecReflect(float *out, float *v1, float *v2) -{ - float vec[3], normal[3]; - float reflect[3] = {0.0f, 0.0f, 0.0f}; - float dot2; - - VecCopyf(vec, v1); - VecCopyf(normal, v2); - - Normalize(normal); - - dot2 = 2 * Inpf(vec, normal); - - reflect[0] = vec[0] - (dot2 * normal[0]); - reflect[1] = vec[1] - (dot2 * normal[1]); - reflect[2] = vec[2] - (dot2 * normal[2]); - - VecCopyf(out, reflect); -} - -/* Return the angle in degrees between vecs 1-2 and 2-3 in degrees - If v1 is a shoulder, v2 is the elbow and v3 is the hand, - this would return the angle at the elbow */ -float VecAngle3(float *v1, float *v2, float *v3) -{ - float vec1[3], vec2[3]; - - VecSubf(vec1, v2, v1); - VecSubf(vec2, v2, v3); - Normalize(vec1); - Normalize(vec2); - - return NormalizedVecAngle2(vec1, vec2); -} - -float Vec2Angle3(float *v1, float *v2, float *v3) -{ - float vec1[2], vec2[2]; - - vec1[0] = v2[0]-v1[0]; - vec1[1] = v2[1]-v1[1]; - - vec2[0] = v2[0]-v3[0]; - vec2[1] = v2[1]-v3[1]; - - Normalize2(vec1); - Normalize2(vec2); - - return NormalizedVecAngle2_2D(vec1, vec2); -} - -/* Return the shortest angle in degrees between the 2 vectors */ -float VecAngle2(float *v1, float *v2) -{ - float vec1[3], vec2[3]; - - VecCopyf(vec1, v1); - VecCopyf(vec2, v2); - Normalize(vec1); - Normalize(vec2); - - return NormalizedVecAngle2(vec1, vec2); -} - -float NormalizedVecAngle2(float *v1, float *v2) -{ - /* this is the same as acos(Inpf(v1, v2)), but more accurate */ - if (Inpf(v1, v2) < 0.0f) { - float vec[3]; - - vec[0]= -v2[0]; - vec[1]= -v2[1]; - vec[2]= -v2[2]; - - return (float)M_PI - 2.0f*(float)saasin(VecLenf(vec, v1)/2.0f); - } - else - return 2.0f*(float)saasin(VecLenf(v2, v1)/2.0f); -} - -float NormalizedVecAngle2_2D(float *v1, float *v2) -{ - /* this is the same as acos(Inpf(v1, v2)), but more accurate */ - if (Inp2f(v1, v2) < 0.0f) { - float vec[2]; - - vec[0]= -v2[0]; - vec[1]= -v2[1]; - - return (float)M_PI - 2.0f*saasin(Vec2Lenf(vec, v1)/2.0f); - } - else - return 2.0f*(float)saasin(Vec2Lenf(v2, v1)/2.0f); -} - -/* ******************************************** */ - -void SizeToMat3( float *size, float mat[][3]) -{ - mat[0][0]= size[0]; - mat[0][1]= 0.0f; - mat[0][2]= 0.0f; - mat[1][1]= size[1]; - mat[1][0]= 0.0f; - mat[1][2]= 0.0f; - mat[2][2]= size[2]; - mat[2][1]= 0.0f; - mat[2][0]= 0.0f; -} - -void SizeToMat4( float *size, float mat[][4]) -{ - float tmat[3][3]; - - SizeToMat3(size, tmat); - Mat4One(mat); - Mat4CpyMat3(mat, tmat); -} - -void Mat3ToSize( float mat[][3], float *size) -{ - size[0]= VecLength(mat[0]); - size[1]= VecLength(mat[1]); - size[2]= VecLength(mat[2]); -} - -void Mat4ToSize( float mat[][4], float *size) -{ - size[0]= VecLength(mat[0]); - size[1]= VecLength(mat[1]); - size[2]= VecLength(mat[2]); -} - -/* this gets the average scale of a matrix, only use when your scaling - * data that has no idea of scale axis, examples are bone-envelope-radius - * and curve radius */ -float Mat3ToScalef(float mat[][3]) -{ - /* unit length vector */ - float unit_vec[3] = {0.577350269189626f, 0.577350269189626f, 0.577350269189626f}; - Mat3MulVecfl(mat, unit_vec); - return VecLength(unit_vec); -} - -float Mat4ToScalef(float mat[][4]) -{ - float tmat[3][3]; - Mat3CpyMat4(tmat, mat); - return Mat3ToScalef(tmat); -} - - -/* ************* SPECIALS ******************* */ - -void triatoquat( float *v1, float *v2, float *v3, float *quat) -{ - /* imaginary x-axis, y-axis triangle is being rotated */ - float vec[3], q1[4], q2[4], n[3], si, co, angle, mat[3][3], imat[3][3]; - - /* move z-axis to face-normal */ - CalcNormFloat(v1, v2, v3, vec); - - n[0]= vec[1]; - n[1]= -vec[0]; - n[2]= 0.0f; - Normalize(n); - - if(n[0]==0.0f && n[1]==0.0f) n[0]= 1.0f; - - angle= -0.5f*(float)saacos(vec[2]); - co= (float)cos(angle); - si= (float)sin(angle); - q1[0]= co; - q1[1]= n[0]*si; - q1[2]= n[1]*si; - q1[3]= 0.0f; - - /* rotate back line v1-v2 */ - QuatToMat3(q1, mat); - Mat3Inv(imat, mat); - VecSubf(vec, v2, v1); - Mat3MulVecfl(imat, vec); - - /* what angle has this line with x-axis? */ - vec[2]= 0.0f; - Normalize(vec); - - angle= (float)(0.5*atan2(vec[1], vec[0])); - co= (float)cos(angle); - si= (float)sin(angle); - q2[0]= co; - q2[1]= 0.0f; - q2[2]= 0.0f; - q2[3]= si; - - QuatMul(quat, q1, q2); -} - -void MinMaxRGB(short c[]) -{ - if(c[0]>255) c[0]=255; - else if(c[0]<0) c[0]=0; - if(c[1]>255) c[1]=255; - else if(c[1]<0) c[1]=0; - if(c[2]>255) c[2]=255; - else if(c[2]<0) c[2]=0; -} - -float Vec2Lenf(float *v1, float *v2) -{ - float x, y; - - x = v1[0]-v2[0]; - y = v1[1]-v2[1]; - return (float)sqrt(x*x+y*y); -} - -float Vec2Length(float *v) -{ - return (float)sqrt(v[0]*v[0] + v[1]*v[1]); -} - -void Vec2Mulf(float *v1, float f) -{ - v1[0]*= f; - v1[1]*= f; -} - -void Vec2Addf(float *v, float *v1, float *v2) -{ - v[0]= v1[0]+ v2[0]; - v[1]= v1[1]+ v2[1]; -} - -void Vec2Subf(float *v, float *v1, float *v2) -{ - v[0]= v1[0]- v2[0]; - v[1]= v1[1]- v2[1]; -} - -void Vec2Copyf(float *v1, float *v2) -{ - v1[0]= v2[0]; - v1[1]= v2[1]; -} - -float Inp2f(float *v1, float *v2) -{ - return v1[0]*v2[0]+v1[1]*v2[1]; -} - -float Normalize2(float *n) -{ - float d; - - d= n[0]*n[0]+n[1]*n[1]; - - if(d>1.0e-35f) { - d= (float)sqrt(d); - n[0]/=d; - n[1]/=d; - } else { - n[0]=n[1]= 0.0f; - d= 0.0f; - } - return d; -} - -void hsv_to_rgb(float h, float s, float v, float *r, float *g, float *b) -{ - int i; - float f, p, q, t; - - h *= 360.0f; - - if(s==0.0f) { - *r = v; - *g = v; - *b = v; - } - else { - if(h== 360.0f) h = 0.0f; - - h /= 60.0f; - i = (int)floor(h); - f = h - i; - p = v*(1.0f-s); - q = v*(1.0f-(s*f)); - t = v*(1.0f-(s*(1.0f-f))); - - switch (i) { - case 0 : - *r = v; - *g = t; - *b = p; - break; - case 1 : - *r = q; - *g = v; - *b = p; - break; - case 2 : - *r = p; - *g = v; - *b = t; - break; - case 3 : - *r = p; - *g = q; - *b = v; - break; - case 4 : - *r = t; - *g = p; - *b = v; - break; - case 5 : - *r = v; - *g = p; - *b = q; - break; - } - } -} - -void rgb_to_yuv(float r, float g, float b, float *ly, float *lu, float *lv) -{ - float y, u, v; - y= 0.299f*r + 0.587f*g + 0.114f*b; - u=-0.147f*r - 0.289f*g + 0.436f*b; - v= 0.615f*r - 0.515f*g - 0.100f*b; - - *ly=y; - *lu=u; - *lv=v; -} - -void yuv_to_rgb(float y, float u, float v, float *lr, float *lg, float *lb) -{ - float r, g, b; - r=y+1.140f*v; - g=y-0.394f*u - 0.581f*v; - b=y+2.032f*u; - - *lr=r; - *lg=g; - *lb=b; -} - -void rgb_to_ycc(float r, float g, float b, float *ly, float *lcb, float *lcr) -{ - float sr,sg, sb; - float y, cr, cb; - - sr=255.0f*r; - sg=255.0f*g; - sb=255.0f*b; - - - y=(0.257f*sr)+(0.504f*sg)+(0.098f*sb)+16.0f; - cb=(-0.148f*sr)-(0.291f*sg)+(0.439f*sb)+128.0f; - cr=(0.439f*sr)-(0.368f*sg)-(0.071f*sb)+128.0f; - - *ly=y; - *lcb=cb; - *lcr=cr; -} - -void ycc_to_rgb(float y, float cb, float cr, float *lr, float *lg, float *lb) -{ - float r,g,b; - - r=1.164f*(y-16.0f)+1.596f*(cr-128.0f); - g=1.164f*(y-16.0f)-0.813f*(cr-128.0f)-0.392f*(cb-128.0f); - b=1.164f*(y-16.0f)+2.017f*(cb-128.0f); - - *lr=r/255.0f; - *lg=g/255.0f; - *lb=b/255.0f; -} - -void hex_to_rgb(char *hexcol, float *r, float *g, float *b) -{ - unsigned int ri, gi, bi; - - if (hexcol[0] == '#') hexcol++; - - if (sscanf(hexcol, "%02x%02x%02x", &ri, &gi, &bi)) { - *r = ri / 255.0f; - *g = gi / 255.0f; - *b = bi / 255.0f; - } -} - -void rgb_to_hsv(float r, float g, float b, float *lh, float *ls, float *lv) -{ - float h, s, v; - float cmax, cmin, cdelta; - float rc, gc, bc; - - cmax = r; - cmin = r; - cmax = (g>cmax ? g:cmax); - cmin = (g<cmin ? g:cmin); - cmax = (b>cmax ? b:cmax); - cmin = (b<cmin ? b:cmin); - - v = cmax; /* value */ - if (cmax != 0.0f) - s = (cmax - cmin)/cmax; - else { - s = 0.0f; - h = 0.0f; - } - if (s == 0.0f) - h = -1.0f; - else { - cdelta = cmax-cmin; - rc = (cmax-r)/cdelta; - gc = (cmax-g)/cdelta; - bc = (cmax-b)/cdelta; - if (r==cmax) - h = bc-gc; - else - if (g==cmax) - h = 2.0f+rc-bc; - else - h = 4.0f+gc-rc; - h = h*60.0f; - if (h < 0.0f) - h += 360.0f; - } - - *ls = s; - *lh = h / 360.0f; - if(*lh < 0.0f) *lh= 0.0f; - *lv = v; -} - -/*http://brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html */ - -void xyz_to_rgb(float xc, float yc, float zc, float *r, float *g, float *b, int colorspace) -{ - switch (colorspace) { - case BLI_CS_SMPTE: - *r = (3.50570f * xc) + (-1.73964f * yc) + (-0.544011f * zc); - *g = (-1.06906f * xc) + (1.97781f * yc) + (0.0351720f * zc); - *b = (0.0563117f * xc) + (-0.196994f * yc) + (1.05005f * zc); - break; - case BLI_CS_REC709: - *r = (3.240476f * xc) + (-1.537150f * yc) + (-0.498535f * zc); - *g = (-0.969256f * xc) + (1.875992f * yc) + (0.041556f * zc); - *b = (0.055648f * xc) + (-0.204043f * yc) + (1.057311f * zc); - break; - case BLI_CS_CIE: - *r = (2.28783848734076f * xc) + (-0.833367677835217f * yc) + (-0.454470795871421f * zc); - *g = (-0.511651380743862f * xc) + (1.42275837632178f * yc) + (0.0888930017552939f * zc); - *b = (0.00572040983140966f * xc) + (-0.0159068485104036f * yc) + (1.0101864083734f * zc); - break; - } -} - -/*If the requested RGB shade contains a negative weight for - one of the primaries, it lies outside the colour gamut - accessible from the given triple of primaries. Desaturate - it by adding white, equal quantities of R, G, and B, enough - to make RGB all positive. The function returns 1 if the - components were modified, zero otherwise.*/ -int constrain_rgb(float *r, float *g, float *b) -{ - float w; - - /* Amount of white needed is w = - min(0, *r, *g, *b) */ - - w = (0 < *r) ? 0 : *r; - w = (w < *g) ? w : *g; - w = (w < *b) ? w : *b; - w = -w; - - /* Add just enough white to make r, g, b all positive. */ - - if (w > 0) { - *r += w; *g += w; *b += w; - return 1; /* Color modified to fit RGB gamut */ - } - - return 0; /* Color within RGB gamut */ -} - - -/* we define a 'cpack' here as a (3 byte color code) number that can be expressed like 0xFFAA66 or so. - for that reason it is sensitive for endianness... with this function it works correctly -*/ - -unsigned int hsv_to_cpack(float h, float s, float v) -{ - short r, g, b; - float rf, gf, bf; - unsigned int col; - - hsv_to_rgb(h, s, v, &rf, &gf, &bf); - - r= (short)(rf*255.0f); - g= (short)(gf*255.0f); - b= (short)(bf*255.0f); - - col= ( r + (g*256) + (b*256*256) ); - return col; -} - - -unsigned int rgb_to_cpack(float r, float g, float b) -{ - int ir, ig, ib; - - ir= (int)floor(255.0*r); - if(ir<0) ir= 0; else if(ir>255) ir= 255; - ig= (int)floor(255.0*g); - if(ig<0) ig= 0; else if(ig>255) ig= 255; - ib= (int)floor(255.0*b); - if(ib<0) ib= 0; else if(ib>255) ib= 255; - - return (ir+ (ig*256) + (ib*256*256)); -} - -void cpack_to_rgb(unsigned int col, float *r, float *g, float *b) -{ - - *r= (float)((col)&0xFF); - *r /= 255.0f; - - *g= (float)(((col)>>8)&0xFF); - *g /= 255.0f; - - *b= (float)(((col)>>16)&0xFF); - *b /= 255.0f; -} - - -/* *************** PROJECTIONS ******************* */ - -void tubemap(float x, float y, float z, float *u, float *v) -{ - float len; - - *v = (z + 1.0f) / 2.0f; - - len= (float)sqrt(x*x+y*y); - if(len > 0.0f) - *u = (float)((1.0 - (atan2(x/len,y/len) / M_PI)) / 2.0); - else - *v = *u = 0.0f; /* to avoid un-initialized variables */ -} - -/* ------------------------------------------------------------------------- */ - -void spheremap(float x, float y, float z, float *u, float *v) -{ - float len; - - len= (float)sqrt(x*x+y*y+z*z); - if(len > 0.0f) { - if(x==0.0f && y==0.0f) *u= 0.0f; /* othwise domain error */ - else *u = (float)((1.0 - (float)atan2(x,y) / M_PI) / 2.0); - - z/=len; - *v = 1.0f - (float)saacos(z)/(float)M_PI; - } else { - *v = *u = 0.0f; /* to avoid un-initialized variables */ - } -} - -/* ------------------------------------------------------------------------- */ - -/* proposed api by ton and zr, not used yet */ -#if 0 -/* ***************** m1 = m2 ***************** */ -static void cpy_m3_m3(float m1[][3], float m2[][3]) -{ - memcpy(m1[0], m2[0], 9*sizeof(float)); -} - -/* ***************** m1 = m2 ***************** */ -static void cpy_m4_m4(float m1[][4], float m2[][4]) -{ - memcpy(m1[0], m2[0], 16*sizeof(float)); -} - -/* ***************** identity matrix ***************** */ -static void ident_m4(float m[][4]) -{ - - m[0][0]= m[1][1]= m[2][2]= m[3][3]= 1.0; - m[0][1]= m[0][2]= m[0][3]= 0.0; - m[1][0]= m[1][2]= m[1][3]= 0.0; - m[2][0]= m[2][1]= m[2][3]= 0.0; - m[3][0]= m[3][1]= m[3][2]= 0.0; -} - -/* ***************** m1 = m2 (pre) * m3 (post) ***************** */ -static void mul_m3_m3m3(float m1[][3], float m2[][3], float m3[][3]) -{ - float m[3][3]; - - m[0][0]= m2[0][0]*m3[0][0] + m2[1][0]*m3[0][1] + m2[2][0]*m3[0][2]; - m[0][1]= m2[0][1]*m3[0][0] + m2[1][1]*m3[0][1] + m2[2][1]*m3[0][2]; - m[0][2]= m2[0][2]*m3[0][0] + m2[1][2]*m3[0][1] + m2[2][2]*m3[0][2]; - - m[1][0]= m2[0][0]*m3[1][0] + m2[1][0]*m3[1][1] + m2[2][0]*m3[1][2]; - m[1][1]= m2[0][1]*m3[1][0] + m2[1][1]*m3[1][1] + m2[2][1]*m3[1][2]; - m[1][2]= m2[0][2]*m3[1][0] + m2[1][2]*m3[1][1] + m2[2][2]*m3[1][2]; - - m[2][0]= m2[0][0]*m3[2][0] + m2[1][0]*m3[2][1] + m2[2][0]*m3[2][2]; - m[2][1]= m2[0][1]*m3[2][0] + m2[1][1]*m3[2][1] + m2[2][1]*m3[2][2]; - m[2][2]= m2[0][2]*m3[2][0] + m2[1][2]*m3[2][1] + m2[2][2]*m3[2][2]; - - cpy_m3_m3(m1, m2); -} - -/* ***************** m1 = m2 (pre) * m3 (post) ***************** */ -static void mul_m4_m4m4(float m1[][4], float m2[][4], float m3[][4]) -{ - float m[4][4]; - - m[0][0]= m2[0][0]*m3[0][0] + m2[1][0]*m3[0][1] + m2[2][0]*m3[0][2] + m2[3][0]*m3[0][3]; - m[0][1]= m2[0][1]*m3[0][0] + m2[1][1]*m3[0][1] + m2[2][1]*m3[0][2] + m2[3][1]*m3[0][3]; - m[0][2]= m2[0][2]*m3[0][0] + m2[1][2]*m3[0][1] + m2[2][2]*m3[0][2] + m2[3][2]*m3[0][3]; - m[0][3]= m2[0][3]*m3[0][0] + m2[1][3]*m3[0][1] + m2[2][3]*m3[0][2] + m2[3][3]*m3[0][3]; - - m[1][0]= m2[0][0]*m3[1][0] + m2[1][0]*m3[1][1] + m2[2][0]*m3[1][2] + m2[3][0]*m3[1][3]; - m[1][1]= m2[0][1]*m3[1][0] + m2[1][1]*m3[1][1] + m2[2][1]*m3[1][2] + m2[3][1]*m3[1][3]; - m[1][2]= m2[0][2]*m3[1][0] + m2[1][2]*m3[1][1] + m2[2][2]*m3[1][2] + m2[3][2]*m3[1][3]; - m[1][3]= m2[0][3]*m3[1][0] + m2[1][3]*m3[1][1] + m2[2][3]*m3[1][2] + m2[3][3]*m3[1][3]; - - m[2][0]= m2[0][0]*m3[2][0] + m2[1][0]*m3[2][1] + m2[2][0]*m3[2][2] + m2[3][0]*m3[2][3]; - m[2][1]= m2[0][1]*m3[2][0] + m2[1][1]*m3[2][1] + m2[2][1]*m3[2][2] + m2[3][1]*m3[2][3]; - m[2][2]= m2[0][2]*m3[2][0] + m2[1][2]*m3[2][1] + m2[2][2]*m3[2][2] + m2[3][2]*m3[2][3]; - m[2][3]= m2[0][3]*m3[2][0] + m2[1][3]*m3[2][1] + m2[2][3]*m3[2][2] + m2[3][3]*m3[2][3]; - - m[3][0]= m2[0][0]*m3[3][0] + m2[1][0]*m3[3][1] + m2[2][0]*m3[3][2] + m2[3][0]*m3[3][3]; - m[3][1]= m2[0][1]*m3[3][0] + m2[1][1]*m3[3][1] + m2[2][1]*m3[3][2] + m2[3][1]*m3[3][3]; - m[3][2]= m2[0][2]*m3[3][0] + m2[1][2]*m3[3][1] + m2[2][2]*m3[3][2] + m2[3][2]*m3[3][3]; - m[3][3]= m2[0][3]*m3[3][0] + m2[1][3]*m3[3][1] + m2[2][3]*m3[3][2] + m2[3][3]*m3[3][3]; - - cpy_m4_m4(m1, m2); -} - -/* ***************** m1 = inverse(m2) ***************** */ -static void inv_m3_m3(float m1[][3], float m2[][3]) -{ - short a,b; - float det; - - /* calc adjoint */ - Mat3Adj(m1, m2); - - /* then determinant old matrix! */ - det= m2[0][0]* (m2[1][1]*m2[2][2] - m2[1][2]*m2[2][1]) - -m2[1][0]* (m2[0][1]*m2[2][2] - m2[0][2]*m2[2][1]) - +m2[2][0]* (m2[0][1]*m2[1][2] - m2[0][2]*m2[1][1]); - - if(det==0.0f) det=1.0f; - det= 1.0f/det; - for(a=0;a<3;a++) { - for(b=0;b<3;b++) { - m1[a][b]*=det; - } - } -} - -/* ***************** m1 = inverse(m2) ***************** */ -static int inv_m4_m4(float inverse[][4], float mat[][4]) -{ - int i, j, k; - double temp; - float tempmat[4][4]; - float max; - int maxj; - - /* Set inverse to identity */ - ident_m4(inverse); - - /* Copy original matrix so we don't mess it up */ - cpy_m4_m4(tempmat, mat); - - for(i = 0; i < 4; i++) { - /* Look for row with max pivot */ - max = ABS(tempmat[i][i]); - maxj = i; - for(j = i + 1; j < 4; j++) { - if(ABS(tempmat[j][i]) > max) { - max = ABS(tempmat[j][i]); - maxj = j; - } - } - /* Swap rows if necessary */ - if (maxj != i) { - for( k = 0; k < 4; k++) { - SWAP(float, tempmat[i][k], tempmat[maxj][k]); - SWAP(float, inverse[i][k], inverse[maxj][k]); - } - } - - temp = tempmat[i][i]; - if (temp == 0) - return 0; /* No non-zero pivot */ - for(k = 0; k < 4; k++) { - tempmat[i][k] = (float)(tempmat[i][k]/temp); - inverse[i][k] = (float)(inverse[i][k]/temp); - } - for(j = 0; j < 4; j++) { - if(j != i) { - temp = tempmat[j][i]; - for(k = 0; k < 4; k++) { - tempmat[j][k] -= (float)(tempmat[i][k]*temp); - inverse[j][k] -= (float)(inverse[i][k]*temp); - } - } - } - } - return 1; -} - -/* ***************** v1 = v2 * mat ***************** */ -static void mul_v3_v3m4(float *v1, float *v2, float mat[][4]) -{ - float x, y; - - x= v2[0]; /* work with a copy, v1 can be same as v2 */ - y= v2[1]; - v1[0]= x*mat[0][0] + y*mat[1][0] + mat[2][0]*v2[2] + mat[3][0]; - v1[1]= x*mat[0][1] + y*mat[1][1] + mat[2][1]*v2[2] + mat[3][1]; - v1[2]= x*mat[0][2] + y*mat[1][2] + mat[2][2]*v2[2] + mat[3][2]; - -} - -#endif - -/* moved from effect.c - test if the line starting at p1 ending at p2 intersects the triangle v0..v2 - return non zero if it does -*/ -int LineIntersectsTriangle(float p1[3], float p2[3], float v0[3], float v1[3], float v2[3], float *lambda, float *uv) -{ - - float p[3], s[3], d[3], e1[3], e2[3], q[3]; - float a, f, u, v; - - VecSubf(e1, v1, v0); - VecSubf(e2, v2, v0); - VecSubf(d, p2, p1); - - Crossf(p, d, e2); - a = Inpf(e1, p); - if ((a > -0.000001) && (a < 0.000001)) return 0; - f = 1.0f/a; - - VecSubf(s, p1, v0); - - Crossf(q, s, e1); - *lambda = f * Inpf(e2, q); - if ((*lambda < 0.0)||(*lambda > 1.0)) return 0; - - u = f * Inpf(s, p); - if ((u < 0.0)||(u > 1.0)) return 0; - - v = f * Inpf(d, q); - if ((v < 0.0)||((u + v) > 1.0)) return 0; - - if(uv) { - uv[0]= u; - uv[1]= v; - } - - return 1; -} - -/* moved from effect.c - test if the ray starting at p1 going in d direction intersects the triangle v0..v2 - return non zero if it does -*/ -int RayIntersectsTriangle(float p1[3], float d[3], float v0[3], float v1[3], float v2[3], float *lambda, float *uv) -{ - float p[3], s[3], e1[3], e2[3], q[3]; - float a, f, u, v; - - VecSubf(e1, v1, v0); - VecSubf(e2, v2, v0); - - Crossf(p, d, e2); - a = Inpf(e1, p); - if ((a > -FLT_EPSILON) && (a < FLT_EPSILON)) return 0; - f = 1.0f/a; - - VecSubf(s, p1, v0); - - Crossf(q, s, e1); - *lambda = f * Inpf(e2, q); - if ((*lambda < 0.0)) return 0; - - u = f * Inpf(s, p); - if ((u < 0.0)||(u > 1.0)) return 0; - - v = f * Inpf(d, q); - if ((v < 0.0)||((u + v) > 1.0)) return 0; - - if(uv) { - uv[0]= u; - uv[1]= v; - } - - return 1; -} - -int RayIntersectsTriangleThreshold(float p1[3], float d[3], float v0[3], float v1[3], float v2[3], float *lambda, float *uv, float threshold) -{ - float p[3], s[3], e1[3], e2[3], q[3]; - float a, f, u, v; - float du = 0, dv = 0; - - VecSubf(e1, v1, v0); - VecSubf(e2, v2, v0); - - Crossf(p, d, e2); - a = Inpf(e1, p); - if ((a > -0.000001) && (a < 0.000001)) return 0; - f = 1.0f/a; - - VecSubf(s, p1, v0); - - Crossf(q, s, e1); - *lambda = f * Inpf(e2, q); - if ((*lambda < 0.0)) return 0; - - u = f * Inpf(s, p); - v = f * Inpf(d, q); - - if (u < 0) du = u; - if (u > 1) du = u - 1; - if (v < 0) dv = v; - if (v > 1) dv = v - 1; - if (u > 0 && v > 0 && u + v > 1) - { - float t = u + v - 1; - du = u - t/2; - dv = v - t/2; - } - - VecMulf(e1, du); - VecMulf(e2, dv); - - if (Inpf(e1, e1) + Inpf(e2, e2) > threshold * threshold) - { - return 0; - } - - if(uv) { - uv[0]= u; - uv[1]= v; - } - - return 1; -} - - -/* Adapted from the paper by Kasper Fauerby */ -/* "Improved Collision detection and Response" */ -static int getLowestRoot(float a, float b, float c, float maxR, float* root) -{ - // Check if a solution exists - float determinant = b*b - 4.0f*a*c; - - // If determinant is negative it means no solutions. - if (determinant >= 0.0f) - { - // calculate the two roots: (if determinant == 0 then - // x1==x2 but let’s disregard that slight optimization) - float sqrtD = (float)sqrt(determinant); - float r1 = (-b - sqrtD) / (2.0f*a); - float r2 = (-b + sqrtD) / (2.0f*a); - - // Sort so x1 <= x2 - if (r1 > r2) - SWAP( float, r1, r2); - - // Get lowest root: - if (r1 > 0.0f && r1 < maxR) - { - *root = r1; - return 1; - } - - // It is possible that we want x2 - this can happen - // if x1 < 0 - if (r2 > 0.0f && r2 < maxR) - { - *root = r2; - return 1; - } - } - // No (valid) solutions - return 0; -} - -int SweepingSphereIntersectsTriangleUV(float p1[3], float p2[3], float radius, float v0[3], float v1[3], float v2[3], float *lambda, float *ipoint) -{ - float e1[3], e2[3], e3[3], point[3], vel[3], /*dist[3],*/ nor[3], temp[3], bv[3]; - float a, b, c, d, e, x, y, z, radius2=radius*radius; - float elen2,edotv,edotbv,nordotv,vel2; - float newLambda; - int found_by_sweep=0; - - VecSubf(e1,v1,v0); - VecSubf(e2,v2,v0); - VecSubf(vel,p2,p1); - -/*---test plane of tri---*/ - Crossf(nor,e1,e2); - Normalize(nor); - - /* flip normal */ - if(Inpf(nor,vel)>0.0f) VecNegf(nor); - - a=Inpf(p1,nor)-Inpf(v0,nor); - nordotv=Inpf(nor,vel); - - if (fabs(nordotv) < 0.000001) - { - if(fabs(a)>=radius) - { - return 0; - } - } - else - { - float t0=(-a+radius)/nordotv; - float t1=(-a-radius)/nordotv; - - if(t0>t1) - SWAP(float, t0, t1); - - if(t0>1.0f || t1<0.0f) return 0; - - /* clamp to [0,1] */ - CLAMP(t0, 0.0f, 1.0f); - CLAMP(t1, 0.0f, 1.0f); - - /*---test inside of tri---*/ - /* plane intersection point */ - - point[0] = p1[0] + vel[0]*t0 - nor[0]*radius; - point[1] = p1[1] + vel[1]*t0 - nor[1]*radius; - point[2] = p1[2] + vel[2]*t0 - nor[2]*radius; - - - /* is the point in the tri? */ - a=Inpf(e1,e1); - b=Inpf(e1,e2); - c=Inpf(e2,e2); - - VecSubf(temp,point,v0); - d=Inpf(temp,e1); - e=Inpf(temp,e2); - - x=d*c-e*b; - y=e*a-d*b; - z=x+y-(a*c-b*b); - - - if( z <= 0.0f && (x >= 0.0f && y >= 0.0f)) - { - //( ((unsigned int)z)& ~(((unsigned int)x)|((unsigned int)y)) ) & 0x80000000){ - *lambda=t0; - VecCopyf(ipoint,point); - return 1; - } - } - - - *lambda=1.0f; - -/*---test points---*/ - a=vel2=Inpf(vel,vel); - - /*v0*/ - VecSubf(temp,p1,v0); - b=2.0f*Inpf(vel,temp); - c=Inpf(temp,temp)-radius2; - - if(getLowestRoot(a, b, c, *lambda, lambda)) - { - VecCopyf(ipoint,v0); - found_by_sweep=1; - } - - /*v1*/ - VecSubf(temp,p1,v1); - b=2.0f*Inpf(vel,temp); - c=Inpf(temp,temp)-radius2; - - if(getLowestRoot(a, b, c, *lambda, lambda)) - { - VecCopyf(ipoint,v1); - found_by_sweep=1; - } - - /*v2*/ - VecSubf(temp,p1,v2); - b=2.0f*Inpf(vel,temp); - c=Inpf(temp,temp)-radius2; - - if(getLowestRoot(a, b, c, *lambda, lambda)) - { - VecCopyf(ipoint,v2); - found_by_sweep=1; - } - -/*---test edges---*/ - VecSubf(e3,v2,v1); //wasnt yet calculated - - - /*e1*/ - VecSubf(bv,v0,p1); - - elen2 = Inpf(e1,e1); - edotv = Inpf(e1,vel); - edotbv = Inpf(e1,bv); - - a=elen2*(-Inpf(vel,vel))+edotv*edotv; - b=2.0f*(elen2*Inpf(vel,bv)-edotv*edotbv); - c=elen2*(radius2-Inpf(bv,bv))+edotbv*edotbv; - - if(getLowestRoot(a, b, c, *lambda, &newLambda)) - { - e=(edotv*newLambda-edotbv)/elen2; - - if(e >= 0.0f && e <= 1.0f) - { - *lambda = newLambda; - VecCopyf(ipoint,e1); - VecMulf(ipoint,e); - VecAddf(ipoint,ipoint,v0); - found_by_sweep=1; - } - } - - /*e2*/ - /*bv is same*/ - elen2 = Inpf(e2,e2); - edotv = Inpf(e2,vel); - edotbv = Inpf(e2,bv); - - a=elen2*(-Inpf(vel,vel))+edotv*edotv; - b=2.0f*(elen2*Inpf(vel,bv)-edotv*edotbv); - c=elen2*(radius2-Inpf(bv,bv))+edotbv*edotbv; - - if(getLowestRoot(a, b, c, *lambda, &newLambda)) - { - e=(edotv*newLambda-edotbv)/elen2; - - if(e >= 0.0f && e <= 1.0f) - { - *lambda = newLambda; - VecCopyf(ipoint,e2); - VecMulf(ipoint,e); - VecAddf(ipoint,ipoint,v0); - found_by_sweep=1; - } - } - - /*e3*/ - VecSubf(bv,v0,p1); - elen2 = Inpf(e1,e1); - edotv = Inpf(e1,vel); - edotbv = Inpf(e1,bv); - - VecSubf(bv,v1,p1); - elen2 = Inpf(e3,e3); - edotv = Inpf(e3,vel); - edotbv = Inpf(e3,bv); - - a=elen2*(-Inpf(vel,vel))+edotv*edotv; - b=2.0f*(elen2*Inpf(vel,bv)-edotv*edotbv); - c=elen2*(radius2-Inpf(bv,bv))+edotbv*edotbv; - - if(getLowestRoot(a, b, c, *lambda, &newLambda)) - { - e=(edotv*newLambda-edotbv)/elen2; - - if(e >= 0.0f && e <= 1.0f) - { - *lambda = newLambda; - VecCopyf(ipoint,e3); - VecMulf(ipoint,e); - VecAddf(ipoint,ipoint,v1); - found_by_sweep=1; - } - } - - - return found_by_sweep; -} -int AxialLineIntersectsTriangle(int axis, float p1[3], float p2[3], float v0[3], float v1[3], float v2[3], float *lambda) -{ - float p[3], e1[3], e2[3]; - float u, v, f; - int a0=axis, a1=(axis+1)%3, a2=(axis+2)%3; - - //return LineIntersectsTriangle(p1,p2,v0,v1,v2,lambda); - - ///* first a simple bounding box test */ - //if(MIN3(v0[a1],v1[a1],v2[a1]) > p1[a1]) return 0; - //if(MIN3(v0[a2],v1[a2],v2[a2]) > p1[a2]) return 0; - //if(MAX3(v0[a1],v1[a1],v2[a1]) < p1[a1]) return 0; - //if(MAX3(v0[a2],v1[a2],v2[a2]) < p1[a2]) return 0; - - ///* then a full intersection test */ - - VecSubf(e1,v1,v0); - VecSubf(e2,v2,v0); - VecSubf(p,v0,p1); - - f= (e2[a1]*e1[a2]-e2[a2]*e1[a1]); - if ((f > -0.000001) && (f < 0.000001)) return 0; - - v= (p[a2]*e1[a1]-p[a1]*e1[a2])/f; - if ((v < 0.0)||(v > 1.0)) return 0; - - f= e1[a1]; - if((f > -0.000001) && (f < 0.000001)){ - f= e1[a2]; - if((f > -0.000001) && (f < 0.000001)) return 0; - u= (-p[a2]-v*e2[a2])/f; - } - else - u= (-p[a1]-v*e2[a1])/f; - - if ((u < 0.0)||((u + v) > 1.0)) return 0; - - *lambda = (p[a0]+u*e1[a0]+v*e2[a0])/(p2[a0]-p1[a0]); - - if ((*lambda < 0.0)||(*lambda > 1.0)) return 0; - - return 1; -} - -/* Returns the number of point of interests - * 0 - lines are colinear - * 1 - lines are coplanar, i1 is set to intersection - * 2 - i1 and i2 are the nearest points on line 1 (v1, v2) and line 2 (v3, v4) respectively - * */ -int LineIntersectLine(float v1[3], float v2[3], float v3[3], float v4[3], float i1[3], float i2[3]) -{ - float a[3], b[3], c[3], ab[3], cb[3], dir1[3], dir2[3]; - float d; - - VecSubf(c, v3, v1); - VecSubf(a, v2, v1); - VecSubf(b, v4, v3); - - VecCopyf(dir1, a); - Normalize(dir1); - VecCopyf(dir2, b); - Normalize(dir2); - d = Inpf(dir1, dir2); - if (d == 1.0f || d == -1.0f) { - /* colinear */ - return 0; - } - - Crossf(ab, a, b); - d = Inpf(c, ab); - - /* test if the two lines are coplanar */ - if (d > -0.000001f && d < 0.000001f) { - Crossf(cb, c, b); - - VecMulf(a, Inpf(cb, ab) / Inpf(ab, ab)); - VecAddf(i1, v1, a); - VecCopyf(i2, i1); - - return 1; /* one intersection only */ - } - /* if not */ - else { - float n[3], t[3]; - float v3t[3], v4t[3]; - VecSubf(t, v1, v3); - - /* offset between both plane where the lines lies */ - Crossf(n, a, b); - Projf(t, t, n); - - /* for the first line, offset the second line until it is coplanar */ - VecAddf(v3t, v3, t); - VecAddf(v4t, v4, t); - - VecSubf(c, v3t, v1); - VecSubf(a, v2, v1); - VecSubf(b, v4t, v3t); - - Crossf(ab, a, b); - Crossf(cb, c, b); - - VecMulf(a, Inpf(cb, ab) / Inpf(ab, ab)); - VecAddf(i1, v1, a); - - /* for the second line, just substract the offset from the first intersection point */ - VecSubf(i2, i1, t); - - return 2; /* two nearest points */ - } -} - -/* Intersection point strictly between the two lines - * 0 when no intersection is found - * */ -int LineIntersectLineStrict(float v1[3], float v2[3], float v3[3], float v4[3], float vi[3], float *lambda) -{ - float a[3], b[3], c[3], ab[3], cb[3], ca[3], dir1[3], dir2[3]; - float d; - float d1; - - VecSubf(c, v3, v1); - VecSubf(a, v2, v1); - VecSubf(b, v4, v3); - - VecCopyf(dir1, a); - Normalize(dir1); - VecCopyf(dir2, b); - Normalize(dir2); - d = Inpf(dir1, dir2); - if (d == 1.0f || d == -1.0f || d == 0) { - /* colinear or one vector is zero-length*/ - return 0; - } - - d1 = d; - - Crossf(ab, a, b); - d = Inpf(c, ab); - - /* test if the two lines are coplanar */ - if (d > -0.000001f && d < 0.000001f) { - float f1, f2; - Crossf(cb, c, b); - Crossf(ca, c, a); - - f1 = Inpf(cb, ab) / Inpf(ab, ab); - f2 = Inpf(ca, ab) / Inpf(ab, ab); - - if (f1 >= 0 && f1 <= 1 && - f2 >= 0 && f2 <= 1) - { - VecMulf(a, f1); - VecAddf(vi, v1, a); - - if (lambda != NULL) - { - *lambda = f1; - } - - return 1; /* intersection found */ - } - else - { - return 0; - } - } - else - { - return 0; - } -} - -int AabbIntersectAabb(float min1[3], float max1[3], float min2[3], float max2[3]) -{ - return (min1[0]<max2[0] && min1[1]<max2[1] && min1[2]<max2[2] && - min2[0]<max1[0] && min2[1]<max1[1] && min2[2]<max1[2]); -} - -/* find closest point to p on line through l1,l2 and return lambda, - * where (0 <= lambda <= 1) when cp is in the line segement l1,l2 - */ -float lambda_cp_line_ex(float p[3], float l1[3], float l2[3], float cp[3]) -{ - float h[3],u[3],lambda; - VecSubf(u, l2, l1); - VecSubf(h, p, l1); - lambda =Inpf(u,h)/Inpf(u,u); - cp[0] = l1[0] + u[0] * lambda; - cp[1] = l1[1] + u[1] * lambda; - cp[2] = l1[2] + u[2] * lambda; - return lambda; -} - -#if 0 -/* little sister we only need to know lambda */ -static float lambda_cp_line(float p[3], float l1[3], float l2[3]) -{ - float h[3],u[3]; - VecSubf(u, l2, l1); - VecSubf(h, p, l1); - return(Inpf(u,h)/Inpf(u,u)); -} -#endif - -/* useful to calculate an even width shell, by taking the angle between 2 planes. - * The return value is a scale on the offset. - * no angle between planes is 1.0, as the angle between the 2 planes approches 180d - * the distance gets very high, 180d would be inf, but this case isn't valid */ -float AngleToLength(const float angle) -{ - return (angle < SMALL_NUMBER) ? 1.0f : fabsf(1.0f / cosf(angle * (M_PI/180.0f))); -} - -/* Similar to LineIntersectsTriangleUV, except it operates on a quad and in 2d, assumes point is in quad */ -void PointInQuad2DUV(float v0[2], float v1[2], float v2[2], float v3[2], float pt[2], float *uv) -{ - float x0,y0, x1,y1, wtot, v2d[2], w1, w2; - - /* used for paralelle lines */ - float pt3d[3], l1[3], l2[3], pt_on_line[3]; - - /* compute 2 edges of the quad intersection point */ - if (IsectLLPt2Df(v0[0],v0[1],v1[0],v1[1], v2[0],v2[1],v3[0],v3[1], &x0,&y0) == 1) { - /* the intersection point between the quad-edge intersection and the point in the quad we want the uv's for */ - /* should never be paralle !! */ - /*printf("\tnot paralelle 1\n");*/ - IsectLLPt2Df(pt[0],pt[1],x0,y0, v0[0],v0[1],v3[0],v3[1], &x1,&y1); - - /* Get the weights from the new intersection point, to each edge */ - v2d[0] = x1-v0[0]; - v2d[1] = y1-v0[1]; - w1 = Vec2Length(v2d); - - v2d[0] = x1-v3[0]; /* some but for the other vert */ - v2d[1] = y1-v3[1]; - w2 = Vec2Length(v2d); - wtot = w1+w2; - /*w1 = w1/wtot;*/ - /*w2 = w2/wtot;*/ - uv[0] = w1/wtot; - } else { - /* lines are paralelle, lambda_cp_line_ex is 3d grrr */ - /*printf("\tparalelle1\n");*/ - pt3d[0] = pt[0]; - pt3d[1] = pt[1]; - pt3d[2] = l1[2] = l2[2] = 0.0f; - - l1[0] = v0[0]; l1[1] = v0[1]; - l2[0] = v1[0]; l2[1] = v1[1]; - lambda_cp_line_ex(pt3d, l1, l2, pt_on_line); - v2d[0] = pt[0]-pt_on_line[0]; /* same, for the other vert */ - v2d[1] = pt[1]-pt_on_line[1]; - w1 = Vec2Length(v2d); - - l1[0] = v2[0]; l1[1] = v2[1]; - l2[0] = v3[0]; l2[1] = v3[1]; - lambda_cp_line_ex(pt3d, l1, l2, pt_on_line); - v2d[0] = pt[0]-pt_on_line[0]; /* same, for the other vert */ - v2d[1] = pt[1]-pt_on_line[1]; - w2 = Vec2Length(v2d); - wtot = w1+w2; - uv[0] = w1/wtot; - } - - /* Same as above to calc the uv[1] value, alternate calculation */ - - if (IsectLLPt2Df(v0[0],v0[1],v3[0],v3[1], v1[0],v1[1],v2[0],v2[1], &x0,&y0) == 1) { /* was v0,v1 v2,v3 now v0,v3 v1,v2*/ - /* never paralle if above was not */ - /*printf("\tnot paralelle2\n");*/ - IsectLLPt2Df(pt[0],pt[1],x0,y0, v0[0],v0[1],v1[0],v1[1], &x1,&y1);/* was v0,v3 now v0,v1*/ - - v2d[0] = x1-v0[0]; - v2d[1] = y1-v0[1]; - w1 = Vec2Length(v2d); - - v2d[0] = x1-v1[0]; - v2d[1] = y1-v1[1]; - w2 = Vec2Length(v2d); - wtot = w1+w2; - uv[1] = w1/wtot; - } else { - /* lines are paralelle, lambda_cp_line_ex is 3d grrr */ - /*printf("\tparalelle2\n");*/ - pt3d[0] = pt[0]; - pt3d[1] = pt[1]; - pt3d[2] = l1[2] = l2[2] = 0.0f; - - - l1[0] = v0[0]; l1[1] = v0[1]; - l2[0] = v3[0]; l2[1] = v3[1]; - lambda_cp_line_ex(pt3d, l1, l2, pt_on_line); - v2d[0] = pt[0]-pt_on_line[0]; /* some but for the other vert */ - v2d[1] = pt[1]-pt_on_line[1]; - w1 = Vec2Length(v2d); - - l1[0] = v1[0]; l1[1] = v1[1]; - l2[0] = v2[0]; l2[1] = v2[1]; - lambda_cp_line_ex(pt3d, l1, l2, pt_on_line); - v2d[0] = pt[0]-pt_on_line[0]; /* some but for the other vert */ - v2d[1] = pt[1]-pt_on_line[1]; - w2 = Vec2Length(v2d); - wtot = w1+w2; - uv[1] = w1/wtot; - } - /* may need to flip UV's here */ -} - -/* same as above but does tri's and quads, tri's are a bit of a hack */ -void PointInFace2DUV(int isquad, float v0[2], float v1[2], float v2[2], float v3[2], float pt[2], float *uv) -{ - if (isquad) { - PointInQuad2DUV(v0, v1, v2, v3, pt, uv); - } - else { - /* not for quads, use for our abuse of LineIntersectsTriangleUV */ - float p1_3d[3], p2_3d[3], v0_3d[3], v1_3d[3], v2_3d[3], lambda; - - p1_3d[0] = p2_3d[0] = uv[0]; - p1_3d[1] = p2_3d[1] = uv[1]; - p1_3d[2] = 1.0f; - p2_3d[2] = -1.0f; - v0_3d[2] = v1_3d[2] = v2_3d[2] = 0.0; - - /* generate a new fuv, (this is possibly a non optimal solution, - * since we only need 2d calculation but use 3d func's) - * - * this method makes an imaginary triangle in 2d space using the UV's from the derived mesh face - * Then find new uv coords using the fuv and this face with LineIntersectsTriangleUV. - * This means the new values will be correct in relation to the derived meshes face. - */ - Vec2Copyf(v0_3d, v0); - Vec2Copyf(v1_3d, v1); - Vec2Copyf(v2_3d, v2); - - /* Doing this in 3D is not nice */ - LineIntersectsTriangle(p1_3d, p2_3d, v0_3d, v1_3d, v2_3d, &lambda, uv); - } -} - -int IsPointInTri2D(float v1[2], float v2[2], float v3[2], float pt[2]) -{ - float inp1, inp2, inp3; - - inp1= (v2[0]-v1[0])*(v1[1]-pt[1]) + (v1[1]-v2[1])*(v1[0]-pt[0]); - inp2= (v3[0]-v2[0])*(v2[1]-pt[1]) + (v2[1]-v3[1])*(v2[0]-pt[0]); - inp3= (v1[0]-v3[0])*(v3[1]-pt[1]) + (v3[1]-v1[1])*(v3[0]-pt[0]); - - if(inp1<=0.0f && inp2<=0.0f && inp3<=0.0f) return 1; - if(inp1>=0.0f && inp2>=0.0f && inp3>=0.0f) return 1; - - return 0; -} - -#if 0 -int IsPointInTri2D(float v0[2], float v1[2], float v2[2], float pt[2]) -{ - /* not for quads, use for our abuse of LineIntersectsTriangleUV */ - float p1_3d[3], p2_3d[3], v0_3d[3], v1_3d[3], v2_3d[3]; - /* not used */ - float lambda, uv[3]; - - p1_3d[0] = p2_3d[0] = uv[0]= pt[0]; - p1_3d[1] = p2_3d[1] = uv[1]= uv[2]= pt[1]; - p1_3d[2] = 1.0f; - p2_3d[2] = -1.0f; - v0_3d[2] = v1_3d[2] = v2_3d[2] = 0.0; - - /* generate a new fuv, (this is possibly a non optimal solution, - * since we only need 2d calculation but use 3d func's) - * - * this method makes an imaginary triangle in 2d space using the UV's from the derived mesh face - * Then find new uv coords using the fuv and this face with LineIntersectsTriangleUV. - * This means the new values will be correct in relation to the derived meshes face. - */ - Vec2Copyf(v0_3d, v0); - Vec2Copyf(v1_3d, v1); - Vec2Copyf(v2_3d, v2); - - /* Doing this in 3D is not nice */ - return LineIntersectsTriangle(p1_3d, p2_3d, v0_3d, v1_3d, v2_3d, &lambda, uv); -} -#endif - -/* - - x1,y2 - | \ - | \ .(a,b) - | \ - x1,y1-- x2,y1 - -*/ -int IsPointInTri2DInts(int x1, int y1, int x2, int y2, int a, int b) -{ - float v1[2], v2[2], v3[2], p[2]; - - v1[0]= (float)x1; - v1[1]= (float)y1; - - v2[0]= (float)x1; - v2[1]= (float)y2; - - v3[0]= (float)x2; - v3[1]= (float)y1; - - p[0]= (float)a; - p[1]= (float)b; - - return IsPointInTri2D(v1, v2, v3, p); - -} - -/* (x1,v1)(t1=0)------(x2,v2)(t2=1), 0<t<1 --> (x,v)(t) */ -void VecfCubicInterpol(float *x1, float *v1, float *x2, float *v2, float t, float *x, float *v) -{ - float a[3],b[3]; - float t2= t*t; - float t3= t2*t; - - /* cubic interpolation */ - a[0]= v1[0] + v2[0] + 2*(x1[0] - x2[0]); - a[1]= v1[1] + v2[1] + 2*(x1[1] - x2[1]); - a[2]= v1[2] + v2[2] + 2*(x1[2] - x2[2]); - - b[0]= -2*v1[0] - v2[0] - 3*(x1[0] - x2[0]); - b[1]= -2*v1[1] - v2[1] - 3*(x1[1] - x2[1]); - b[2]= -2*v1[2] - v2[2] - 3*(x1[2] - x2[2]); - - x[0]= a[0]*t3 + b[0]*t2 + v1[0]*t + x1[0]; - x[1]= a[1]*t3 + b[1]*t2 + v1[1]*t + x1[1]; - x[2]= a[2]*t3 + b[2]*t2 + v1[2]*t + x1[2]; - - v[0]= 3*a[0]*t2 + 2*b[0]*t + v1[0]; - v[1]= 3*a[1]*t2 + 2*b[1]*t + v1[1]; - v[2]= 3*a[2]*t2 + 2*b[2]*t + v1[2]; -} - -static int point_in_slice(float p[3], float v1[3], float l1[3], float l2[3]) -{ -/* -what is a slice ? -some maths: -a line including l1,l2 and a point not on the line -define a subset of R3 delimeted by planes parallel to the line and orthogonal -to the (point --> line) distance vector,one plane on the line one on the point, -the room inside usually is rather small compared to R3 though still infinte -useful for restricting (speeding up) searches -e.g. all points of triangular prism are within the intersection of 3 'slices' -onother trivial case : cube -but see a 'spat' which is a deformed cube with paired parallel planes needs only 3 slices too -*/ - float h,rp[3],cp[3],q[3]; - - lambda_cp_line_ex(v1,l1,l2,cp); - VecSubf(q,cp,v1); - - VecSubf(rp,p,v1); - h=Inpf(q,rp)/Inpf(q,q); - if (h < 0.0f || h > 1.0f) return 0; - return 1; -} - -#if 0 -/*adult sister defining the slice planes by the origin and the normal -NOTE |normal| may not be 1 but defining the thickness of the slice*/ -static int point_in_slice_as(float p[3],float origin[3],float normal[3]) -{ - float h,rp[3]; - VecSubf(rp,p,origin); - h=Inpf(normal,rp)/Inpf(normal,normal); - if (h < 0.0f || h > 1.0f) return 0; - return 1; -} - -/*mama (knowing the squared lenght of the normal)*/ -static int point_in_slice_m(float p[3],float origin[3],float normal[3],float lns) -{ - float h,rp[3]; - VecSubf(rp,p,origin); - h=Inpf(normal,rp)/lns; - if (h < 0.0f || h > 1.0f) return 0; - return 1; -} -#endif - - -int point_in_tri_prism(float p[3], float v1[3], float v2[3], float v3[3]) -{ - if(!point_in_slice(p,v1,v2,v3)) return 0; - if(!point_in_slice(p,v2,v3,v1)) return 0; - if(!point_in_slice(p,v3,v1,v2)) return 0; - return 1; -} - -/* point closest to v1 on line v2-v3 in 3D */ -void PclosestVL3Dfl(float *closest, float v1[3], float v2[3], float v3[3]) -{ - float lambda, cp[3]; - - lambda= lambda_cp_line_ex(v1, v2, v3, cp); - - if(lambda <= 0.0f) - VecCopyf(closest, v2); - else if(lambda >= 1.0f) - VecCopyf(closest, v3); - else - VecCopyf(closest, cp); -} - -/* distance v1 to line-piece v2-v3 in 3D */ -float PdistVL3Dfl(float *v1, float *v2, float *v3) -{ - float closest[3]; - - PclosestVL3Dfl(closest, v1, v2, v3); - - return VecLenf(closest, v1); -} - -/********************************************************/ - -/* make a 4x4 matrix out of 3 transform components */ -/* matrices are made in the order: scale * rot * loc */ -// TODO: need to have a version that allows for rotation order... -void LocEulSizeToMat4(float mat[4][4], float loc[3], float eul[3], float size[3]) -{ - float rmat[3][3], smat[3][3], tmat[3][3]; - - /* initialise new matrix */ - Mat4One(mat); - - /* make rotation + scaling part */ - EulToMat3(eul, rmat); - SizeToMat3(size, smat); - Mat3MulMat3(tmat, rmat, smat); - - /* copy rot/scale part to output matrix*/ - Mat4CpyMat3(mat, tmat); - - /* copy location to matrix */ - mat[3][0] = loc[0]; - mat[3][1] = loc[1]; - mat[3][2] = loc[2]; -} - -/* make a 4x4 matrix out of 3 transform components */ -/* matrices are made in the order: scale * rot * loc */ -void LocEulOSizeToMat4(float mat[4][4], float loc[3], float eul[3], float size[3], short rotOrder) -{ - float rmat[3][3], smat[3][3], tmat[3][3]; - - /* initialise new matrix */ - Mat4One(mat); - - /* make rotation + scaling part */ - EulOToMat3(eul, rotOrder, rmat); - SizeToMat3(size, smat); - Mat3MulMat3(tmat, rmat, smat); - - /* copy rot/scale part to output matrix*/ - Mat4CpyMat3(mat, tmat); - - /* copy location to matrix */ - mat[3][0] = loc[0]; - mat[3][1] = loc[1]; - mat[3][2] = loc[2]; -} - - -/* make a 4x4 matrix out of 3 transform components */ -/* matrices are made in the order: scale * rot * loc */ -void LocQuatSizeToMat4(float mat[4][4], float loc[3], float quat[4], float size[3]) -{ - float rmat[3][3], smat[3][3], tmat[3][3]; - - /* initialise new matrix */ - Mat4One(mat); - - /* make rotation + scaling part */ - QuatToMat3(quat, rmat); - SizeToMat3(size, smat); - Mat3MulMat3(tmat, rmat, smat); - - /* copy rot/scale part to output matrix*/ - Mat4CpyMat3(mat, tmat); - - /* copy location to matrix */ - mat[3][0] = loc[0]; - mat[3][1] = loc[1]; - mat[3][2] = loc[2]; -} - -/********************************************************/ - -/* Tangents */ - -/* For normal map tangents we need to detect uv boundaries, and only average - * tangents in case the uvs are connected. Alternative would be to store 1 - * tangent per face rather than 4 per face vertex, but that's not compatible - * with games */ - - -/* from BKE_mesh.h */ -#define STD_UV_CONNECT_LIMIT 0.0001f - -void sum_or_add_vertex_tangent(void *arena, VertexTangent **vtang, float *tang, float *uv) -{ - VertexTangent *vt; - - /* find a tangent with connected uvs */ - for(vt= *vtang; vt; vt=vt->next) { - if(fabs(uv[0]-vt->uv[0]) < STD_UV_CONNECT_LIMIT && fabs(uv[1]-vt->uv[1]) < STD_UV_CONNECT_LIMIT) { - VecAddf(vt->tang, vt->tang, tang); - return; - } - } - - /* if not found, append a new one */ - vt= BLI_memarena_alloc((MemArena *)arena, sizeof(VertexTangent)); - VecCopyf(vt->tang, tang); - vt->uv[0]= uv[0]; - vt->uv[1]= uv[1]; - - if(*vtang) - vt->next= *vtang; - *vtang= vt; -} - -float *find_vertex_tangent(VertexTangent *vtang, float *uv) -{ - VertexTangent *vt; - static float nulltang[3] = {0.0f, 0.0f, 0.0f}; - - for(vt= vtang; vt; vt=vt->next) - if(fabs(uv[0]-vt->uv[0]) < STD_UV_CONNECT_LIMIT && fabs(uv[1]-vt->uv[1]) < STD_UV_CONNECT_LIMIT) - return vt->tang; - - return nulltang; /* shouldn't happen, except for nan or so */ -} - -void tangent_from_uv(float *uv1, float *uv2, float *uv3, float *co1, float *co2, float *co3, float *n, float *tang) -{ - float tangv[3], ct[3], e1[3], e2[3], s1, t1, s2, t2, det; - - s1= uv2[0] - uv1[0]; - s2= uv3[0] - uv1[0]; - t1= uv2[1] - uv1[1]; - t2= uv3[1] - uv1[1]; - det= 1.0f / (s1 * t2 - s2 * t1); - - /* normals in render are inversed... */ - VecSubf(e1, co1, co2); - VecSubf(e2, co1, co3); - tang[0] = (t2*e1[0] - t1*e2[0])*det; - tang[1] = (t2*e1[1] - t1*e2[1])*det; - tang[2] = (t2*e1[2] - t1*e2[2])*det; - tangv[0] = (s1*e2[0] - s2*e1[0])*det; - tangv[1] = (s1*e2[1] - s2*e1[1])*det; - tangv[2] = (s1*e2[2] - s2*e1[2])*det; - Crossf(ct, tang, tangv); - - /* check flip */ - if ((ct[0]*n[0] + ct[1]*n[1] + ct[2]*n[2]) < 0.0f) - VecNegf(tang); -} - -/* used for zoom values*/ -float power_of_2(float val) { - return (float)pow(2, ceil(log(val) / log(2))); -} diff --git a/source/blender/blenlib/intern/freetypefont.c b/source/blender/blenlib/intern/freetypefont.c index cb5632df569..f2727f6f259 100644 --- a/source/blender/blenlib/intern/freetypefont.c +++ b/source/blender/blenlib/intern/freetypefont.c @@ -45,7 +45,7 @@ #include "BLI_vfontdata.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" //XXX #include "BIF_toolbox.h" @@ -256,11 +256,11 @@ static void freetypechar_to_vchar(FT_Face face, FT_ULong charcode, VFontData *vf // VecLenf, see if there's a distance between the three points // VecLenf again, to check the angle between the handles // finally, check if one of them is a vector handle - if((DistVL2Dfl(bezt->vec[0],bezt->vec[1],bezt->vec[2]) < 0.001) && - (VecLenf(bezt->vec[0], bezt->vec[1]) > 0.0001) && - (VecLenf(bezt->vec[1], bezt->vec[2]) > 0.0001) && - (VecLenf(bezt->vec[0], bezt->vec[2]) > 0.0002) && - (VecLenf(bezt->vec[0], bezt->vec[2]) > MAX2(VecLenf(bezt->vec[0], bezt->vec[1]), VecLenf(bezt->vec[1], bezt->vec[2]))) && + if((dist_to_line_v2(bezt->vec[0],bezt->vec[1],bezt->vec[2]) < 0.001) && + (len_v3v3(bezt->vec[0], bezt->vec[1]) > 0.0001) && + (len_v3v3(bezt->vec[1], bezt->vec[2]) > 0.0001) && + (len_v3v3(bezt->vec[0], bezt->vec[2]) > 0.0002) && + (len_v3v3(bezt->vec[0], bezt->vec[2]) > MAX2(len_v3v3(bezt->vec[0], bezt->vec[1]), len_v3v3(bezt->vec[1], bezt->vec[2]))) && bezt->h1 != HD_VECT && bezt->h2 != HD_VECT) { bezt->h1= bezt->h2= HD_ALIGN; diff --git a/source/blender/blenlib/intern/graph.c b/source/blender/blenlib/intern/graph.c index 49a3cad53f1..fd6bb1a2014 100644 --- a/source/blender/blenlib/intern/graph.c +++ b/source/blender/blenlib/intern/graph.c @@ -30,7 +30,7 @@ #include "BLI_graph.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BKE_utildefines.h" @@ -267,7 +267,7 @@ void BLI_removeDoubleNodes(BGraph *graph, float limit) { for(node_replaced = graph->nodes.first; node_replaced; node_replaced = node_replaced->next) { - if (node_replaced != node_src && VecLenf(node_replaced->p, node_src->p) <= limit) + if (node_replaced != node_src && len_v3v3(node_replaced->p, node_src->p) <= limit) { BLI_replaceNode(graph, node_src, node_replaced); } @@ -283,7 +283,7 @@ BNode * BLI_FindNodeByPosition(BGraph *graph, float *p, float limit) for(node = graph->nodes.first; node; node = node->next) { - float distance = VecLenf(p, node->p); + float distance = len_v3v3(p, node->p); if (distance <= limit && (closest_node == NULL || distance < min_distance)) { closest_node = node; @@ -526,10 +526,10 @@ void BLI_mirrorAlongAxis(float v[3], float center[3], float axis[3]) { float dv[3], pv[3]; - VecSubf(dv, v, center); - Projf(pv, dv, axis); - VecMulf(pv, -2); - VecAddf(v, v, pv); + sub_v3_v3v3(dv, v, center); + project_v3_v3v3(pv, dv, axis); + mul_v3_fl(pv, -2); + add_v3_v3v3(v, v, pv); } static void testRadialSymmetry(BGraph *graph, BNode* root_node, RadialArc* ring, int total, float axis[3], float limit, int group) @@ -546,7 +546,7 @@ static void testRadialSymmetry(BGraph *graph, BNode* root_node, RadialArc* ring, for (j = i + 1; j < total; j++) { - float angle = Inpf(ring[i].n, ring[j].n); + float angle = dot_v3v3(ring[i].n, ring[j].n); /* map negative values to 1..2 */ if (angle < 0) @@ -579,8 +579,8 @@ static void testRadialSymmetry(BGraph *graph, BNode* root_node, RadialArc* ring, float p[3]; int j = (i + 1) % total; /* next arc in the circular list */ - VecAddf(tangent, ring[i].n, ring[j].n); - Crossf(normal, tangent, axis); + add_v3_v3v3(tangent, ring[i].n, ring[j].n); + cross_v3_v3v3(normal, tangent, axis); node1 = BLI_otherNode(ring[i].arc, root_node); node2 = BLI_otherNode(ring[j].arc, root_node); @@ -589,7 +589,7 @@ static void testRadialSymmetry(BGraph *graph, BNode* root_node, RadialArc* ring, BLI_mirrorAlongAxis(p, root_node->p, normal); /* check if it's within limit before continuing */ - if (VecLenf(node1->p, p) > limit) + if (len_v3v3(node1->p, p) > limit) { symmetric = 0; } @@ -658,11 +658,11 @@ static void handleRadialSymmetry(BGraph *graph, BNode *root_node, int depth, flo unit->arc = connectedArc; /* project the node to node vector on the symmetry plane */ - VecSubf(unit->n, otherNode->p, root_node->p); - Projf(vec, unit->n, axis); - VecSubf(unit->n, unit->n, vec); + sub_v3_v3v3(unit->n, otherNode->p, root_node->p); + project_v3_v3v3(vec, unit->n, axis); + sub_v3_v3v3(unit->n, unit->n, vec); - Normalize(unit->n); + normalize_v3(unit->n); unit++; } @@ -780,9 +780,9 @@ static void flagAxialSymmetry(BNode *root_node, BNode *end_node, BArc *arc, int arc->symmetry_group = group; - VecSubf(vec, end_node->p, root_node->p); + sub_v3_v3v3(vec, end_node->p, root_node->p); - if (Inpf(vec, root_node->symmetry_axis) < 0) + if (dot_v3v3(vec, root_node->symmetry_axis) < 0) { arc->symmetry_flag |= SYM_SIDE_NEGATIVE; } @@ -796,26 +796,26 @@ static void testAxialSymmetry(BGraph *graph, BNode* root_node, BNode* node1, BNo { float nor[3], vec[3], p[3]; - VecSubf(p, node1->p, root_node->p); - Crossf(nor, p, axis); + sub_v3_v3v3(p, node1->p, root_node->p); + cross_v3_v3v3(nor, p, axis); - VecSubf(p, root_node->p, node2->p); - Crossf(vec, p, axis); - VecAddf(vec, vec, nor); + sub_v3_v3v3(p, root_node->p, node2->p); + cross_v3_v3v3(vec, p, axis); + add_v3_v3v3(vec, vec, nor); - Crossf(nor, vec, axis); + cross_v3_v3v3(nor, vec, axis); if (abs(nor[0]) > abs(nor[1]) && abs(nor[0]) > abs(nor[2]) && nor[0] < 0) { - VecNegf(nor); + negate_v3(nor); } else if (abs(nor[1]) > abs(nor[0]) && abs(nor[1]) > abs(nor[2]) && nor[1] < 0) { - VecNegf(nor); + negate_v3(nor); } else if (abs(nor[2]) > abs(nor[1]) && abs(nor[2]) > abs(nor[0]) && nor[2] < 0) { - VecNegf(nor); + negate_v3(nor); } /* mirror node2 along axis */ @@ -823,7 +823,7 @@ static void testAxialSymmetry(BGraph *graph, BNode* root_node, BNode* node1, BNo BLI_mirrorAlongAxis(p, root_node->p, nor); /* check if it's within limit before continuing */ - if (VecLenf(node1->p, p) <= limit) + if (len_v3v3(node1->p, p) <= limit) { /* mark node as symmetric physically */ VECCOPY(root_node->symmetry_axis, nor); @@ -905,12 +905,12 @@ static void markdownSecondarySymmetry(BGraph *graph, BNode *node, int depth, int /* If arc is on the axis */ else if (connectedArc->symmetry_level == level) { - VecAddf(axis, axis, connectedArc->head->p); - VecSubf(axis, axis, connectedArc->tail->p); + add_v3_v3v3(axis, axis, connectedArc->head->p); + sub_v3_v3v3(axis, axis, connectedArc->tail->p); } } - Normalize(axis); + normalize_v3(axis); /* Split between axial and radial symmetry */ if (count == 2) diff --git a/source/blender/blenlib/intern/jitter.c b/source/blender/blenlib/intern/jitter.c index fd658765802..e7933ee98a2 100644 --- a/source/blender/blenlib/intern/jitter.c +++ b/source/blender/blenlib/intern/jitter.c @@ -34,7 +34,7 @@ #include <string.h> #include "MEM_guardedalloc.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_rand.h" #include "BLI_jitter.h" diff --git a/source/blender/blenlib/intern/math_base.c b/source/blender/blenlib/intern/math_base.c new file mode 100644 index 00000000000..f3fe09c088f --- /dev/null +++ b/source/blender/blenlib/intern/math_base.c @@ -0,0 +1,111 @@ +/** + * $Id$ + * + * ***** BEGIN GPL 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * The Original Code is: some of this file. + * + * ***** END GPL LICENSE BLOCK ***** + * */ + +#include <float.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "BLI_math.h" + +/* A few small defines. Keep'em local! */ +#define SMALL_NUMBER 1.e-8 + +float sqrt3f(float f) +{ + if(f==0.0) return 0; + if(f<0) return (float)(-exp(log(-f)/3)); + else return (float)(exp(log(f)/3)); +} + +double sqrt3d(double d) +{ + if(d==0.0) return 0; + if(d<0) return -exp(log(-d)/3); + else return exp(log(d)/3); +} + +float saacos(float fac) +{ + if(fac<= -1.0f) return (float)M_PI; + else if(fac>=1.0f) return 0.0; + else return (float)acos(fac); +} + +float saasin(float fac) +{ + if(fac<= -1.0f) return (float)-M_PI/2.0f; + else if(fac>=1.0f) return (float)M_PI/2.0f; + else return (float)asin(fac); +} + +float sasqrt(float fac) +{ + if(fac<=0.0) return 0.0; + return (float)sqrt(fac); +} + +float saacosf(float fac) +{ + if(fac<= -1.0f) return (float)M_PI; + else if(fac>=1.0f) return 0.0f; + else return (float)acosf(fac); +} + +float saasinf(float fac) +{ + if(fac<= -1.0f) return (float)-M_PI/2.0f; + else if(fac>=1.0f) return (float)M_PI/2.0f; + else return (float)asinf(fac); +} + +float sasqrtf(float fac) +{ + if(fac<=0.0) return 0.0; + return (float)sqrtf(fac); +} + +float interpf(float target, float origin, float fac) +{ + return (fac*target) + (1.0f-fac)*origin; +} + +/* useful to calculate an even width shell, by taking the angle between 2 planes. + * The return value is a scale on the offset. + * no angle between planes is 1.0, as the angle between the 2 planes approches 180d + * the distance gets very high, 180d would be inf, but this case isn't valid */ +float shell_angle_to_dist(const float angle) +{ + return (angle < SMALL_NUMBER) ? 1.0f : fabsf(1.0f / cosf(angle * (M_PI/180.0f))); +} + +/* used for zoom values*/ +float power_of_2(float val) +{ + return (float)pow(2, ceil(log(val) / log(2))); +} + diff --git a/source/blender/blenlib/intern/math_color.c b/source/blender/blenlib/intern/math_color.c new file mode 100644 index 00000000000..7ae380a1dde --- /dev/null +++ b/source/blender/blenlib/intern/math_color.c @@ -0,0 +1,313 @@ +/** + * $Id$ + * + * ***** BEGIN GPL 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + + * The Original Code is: some of this file. + * + * ***** END GPL LICENSE BLOCK ***** + * */ + +#include <float.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "BLI_math.h" + +void hsv_to_rgb(float h, float s, float v, float *r, float *g, float *b) +{ + int i; + float f, p, q, t; + + h *= 360.0f; + + if(s==0.0f) { + *r = v; + *g = v; + *b = v; + } + else { + if(h== 360.0f) h = 0.0f; + + h /= 60.0f; + i = (int)floor(h); + f = h - i; + p = v*(1.0f-s); + q = v*(1.0f-(s*f)); + t = v*(1.0f-(s*(1.0f-f))); + + switch (i) { + case 0 : + *r = v; + *g = t; + *b = p; + break; + case 1 : + *r = q; + *g = v; + *b = p; + break; + case 2 : + *r = p; + *g = v; + *b = t; + break; + case 3 : + *r = p; + *g = q; + *b = v; + break; + case 4 : + *r = t; + *g = p; + *b = v; + break; + case 5 : + *r = v; + *g = p; + *b = q; + break; + } + } +} + +void rgb_to_yuv(float r, float g, float b, float *ly, float *lu, float *lv) +{ + float y, u, v; + y= 0.299f*r + 0.587f*g + 0.114f*b; + u=-0.147f*r - 0.289f*g + 0.436f*b; + v= 0.615f*r - 0.515f*g - 0.100f*b; + + *ly=y; + *lu=u; + *lv=v; +} + +void yuv_to_rgb(float y, float u, float v, float *lr, float *lg, float *lb) +{ + float r, g, b; + r=y+1.140f*v; + g=y-0.394f*u - 0.581f*v; + b=y+2.032f*u; + + *lr=r; + *lg=g; + *lb=b; +} + +void rgb_to_ycc(float r, float g, float b, float *ly, float *lcb, float *lcr) +{ + float sr,sg, sb; + float y, cr, cb; + + sr=255.0f*r; + sg=255.0f*g; + sb=255.0f*b; + + + y=(0.257f*sr)+(0.504f*sg)+(0.098f*sb)+16.0f; + cb=(-0.148f*sr)-(0.291f*sg)+(0.439f*sb)+128.0f; + cr=(0.439f*sr)-(0.368f*sg)-(0.071f*sb)+128.0f; + + *ly=y; + *lcb=cb; + *lcr=cr; +} + +void ycc_to_rgb(float y, float cb, float cr, float *lr, float *lg, float *lb) +{ + float r,g,b; + + r=1.164f*(y-16.0f)+1.596f*(cr-128.0f); + g=1.164f*(y-16.0f)-0.813f*(cr-128.0f)-0.392f*(cb-128.0f); + b=1.164f*(y-16.0f)+2.017f*(cb-128.0f); + + *lr=r/255.0f; + *lg=g/255.0f; + *lb=b/255.0f; +} + +void hex_to_rgb(char *hexcol, float *r, float *g, float *b) +{ + unsigned int ri, gi, bi; + + if (hexcol[0] == '#') hexcol++; + + if (sscanf(hexcol, "%02x%02x%02x", &ri, &gi, &bi)) { + *r = ri / 255.0f; + *g = gi / 255.0f; + *b = bi / 255.0f; + } +} + +void rgb_to_hsv(float r, float g, float b, float *lh, float *ls, float *lv) +{ + float h, s, v; + float cmax, cmin, cdelta; + float rc, gc, bc; + + cmax = r; + cmin = r; + cmax = (g>cmax ? g:cmax); + cmin = (g<cmin ? g:cmin); + cmax = (b>cmax ? b:cmax); + cmin = (b<cmin ? b:cmin); + + v = cmax; /* value */ + if (cmax != 0.0f) + s = (cmax - cmin)/cmax; + else { + s = 0.0f; + h = 0.0f; + } + if (s == 0.0f) + h = -1.0f; + else { + cdelta = cmax-cmin; + rc = (cmax-r)/cdelta; + gc = (cmax-g)/cdelta; + bc = (cmax-b)/cdelta; + if (r==cmax) + h = bc-gc; + else + if (g==cmax) + h = 2.0f+rc-bc; + else + h = 4.0f+gc-rc; + h = h*60.0f; + if (h < 0.0f) + h += 360.0f; + } + + *ls = s; + *lh = h / 360.0f; + if(*lh < 0.0f) *lh= 0.0f; + *lv = v; +} + +/*http://brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html */ + +void xyz_to_rgb(float xc, float yc, float zc, float *r, float *g, float *b, int colorspace) +{ + switch (colorspace) { + case BLI_CS_SMPTE: + *r = (3.50570f * xc) + (-1.73964f * yc) + (-0.544011f * zc); + *g = (-1.06906f * xc) + (1.97781f * yc) + (0.0351720f * zc); + *b = (0.0563117f * xc) + (-0.196994f * yc) + (1.05005f * zc); + break; + case BLI_CS_REC709: + *r = (3.240476f * xc) + (-1.537150f * yc) + (-0.498535f * zc); + *g = (-0.969256f * xc) + (1.875992f * yc) + (0.041556f * zc); + *b = (0.055648f * xc) + (-0.204043f * yc) + (1.057311f * zc); + break; + case BLI_CS_CIE: + *r = (2.28783848734076f * xc) + (-0.833367677835217f * yc) + (-0.454470795871421f * zc); + *g = (-0.511651380743862f * xc) + (1.42275837632178f * yc) + (0.0888930017552939f * zc); + *b = (0.00572040983140966f * xc) + (-0.0159068485104036f * yc) + (1.0101864083734f * zc); + break; + } +} + +/* we define a 'cpack' here as a (3 byte color code) number that can be expressed like 0xFFAA66 or so. + for that reason it is sensitive for endianness... with this function it works correctly +*/ + +unsigned int hsv_to_cpack(float h, float s, float v) +{ + short r, g, b; + float rf, gf, bf; + unsigned int col; + + hsv_to_rgb(h, s, v, &rf, &gf, &bf); + + r= (short)(rf*255.0f); + g= (short)(gf*255.0f); + b= (short)(bf*255.0f); + + col= ( r + (g*256) + (b*256*256) ); + return col; +} + + +unsigned int rgb_to_cpack(float r, float g, float b) +{ + int ir, ig, ib; + + ir= (int)floor(255.0*r); + if(ir<0) ir= 0; else if(ir>255) ir= 255; + ig= (int)floor(255.0*g); + if(ig<0) ig= 0; else if(ig>255) ig= 255; + ib= (int)floor(255.0*b); + if(ib<0) ib= 0; else if(ib>255) ib= 255; + + return (ir+ (ig*256) + (ib*256*256)); +} + +void cpack_to_rgb(unsigned int col, float *r, float *g, float *b) +{ + + *r= (float)((col)&0xFF); + *r /= 255.0f; + + *g= (float)(((col)>>8)&0xFF); + *g /= 255.0f; + + *b= (float)(((col)>>16)&0xFF); + *b /= 255.0f; +} + +void minmax_rgb(short c[]) +{ + if(c[0]>255) c[0]=255; + else if(c[0]<0) c[0]=0; + if(c[1]>255) c[1]=255; + else if(c[1]<0) c[1]=0; + if(c[2]>255) c[2]=255; + else if(c[2]<0) c[2]=0; +} + +/*If the requested RGB shade contains a negative weight for + one of the primaries, it lies outside the colour gamut + accessible from the given triple of primaries. Desaturate + it by adding white, equal quantities of R, G, and B, enough + to make RGB all positive. The function returns 1 if the + components were modified, zero otherwise.*/ +int constrain_rgb(float *r, float *g, float *b) +{ + float w; + + /* Amount of white needed is w = - min(0, *r, *g, *b) */ + + w = (0 < *r) ? 0 : *r; + w = (w < *g) ? w : *g; + w = (w < *b) ? w : *b; + w = -w; + + /* Add just enough white to make r, g, b all positive. */ + + if (w > 0) { + *r += w; *g += w; *b += w; + return 1; /* Color modified to fit RGB gamut */ + } + + return 0; /* Color within RGB gamut */ +} + diff --git a/source/blender/blenlib/intern/math_geom.c b/source/blender/blenlib/intern/math_geom.c new file mode 100644 index 00000000000..fe4bdb8994d --- /dev/null +++ b/source/blender/blenlib/intern/math_geom.c @@ -0,0 +1,1597 @@ +/** + * $Id$ + * + * ***** BEGIN GPL 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + + * The Original Code is: some of this file. + * + * ***** END GPL LICENSE BLOCK ***** + * */ + +#include <float.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "BLI_math.h" +#include "BLI_memarena.h" + +/********************************** Polygons *********************************/ + +void cent_tri_v3(float *cent, float *v1, float *v2, float *v3) +{ + cent[0]= 0.33333f*(v1[0]+v2[0]+v3[0]); + cent[1]= 0.33333f*(v1[1]+v2[1]+v3[1]); + cent[2]= 0.33333f*(v1[2]+v2[2]+v3[2]); +} + +void cent_quad_v3(float *cent, float *v1, float *v2, float *v3, float *v4) +{ + cent[0]= 0.25f*(v1[0]+v2[0]+v3[0]+v4[0]); + cent[1]= 0.25f*(v1[1]+v2[1]+v3[1]+v4[1]); + cent[2]= 0.25f*(v1[2]+v2[2]+v3[2]+v4[2]); +} + +float normal_tri_v3(float *n, float *v1, float *v2, float *v3) +{ + float n1[3],n2[3]; + + n1[0]= v1[0]-v2[0]; + n2[0]= v2[0]-v3[0]; + n1[1]= v1[1]-v2[1]; + n2[1]= v2[1]-v3[1]; + n1[2]= v1[2]-v2[2]; + n2[2]= v2[2]-v3[2]; + n[0]= n1[1]*n2[2]-n1[2]*n2[1]; + n[1]= n1[2]*n2[0]-n1[0]*n2[2]; + n[2]= n1[0]*n2[1]-n1[1]*n2[0]; + return normalize_v3(n); +} + +float normal_quad_v3(float *n, float *v1, float *v2, float *v3, float *v4) +{ + /* real cross! */ + float n1[3],n2[3]; + + n1[0]= v1[0]-v3[0]; + n1[1]= v1[1]-v3[1]; + n1[2]= v1[2]-v3[2]; + + n2[0]= v2[0]-v4[0]; + n2[1]= v2[1]-v4[1]; + n2[2]= v2[2]-v4[2]; + + n[0]= n1[1]*n2[2]-n1[2]*n2[1]; + n[1]= n1[2]*n2[0]-n1[0]*n2[2]; + n[2]= n1[0]*n2[1]-n1[1]*n2[0]; + + return normalize_v3(n); +} + +float area_tri_v2(float *v1, float *v2, float *v3) +{ + return (float)(0.5*fabs((v1[0]-v2[0])*(v2[1]-v3[1]) + (v1[1]-v2[1])*(v3[0]-v2[0]))); +} + + +float area_quad_v3(float *v1, float *v2, float *v3, float *v4) /* only convex Quadrilaterals */ +{ + float len, vec1[3], vec2[3], n[3]; + + sub_v3_v3v3(vec1, v2, v1); + sub_v3_v3v3(vec2, v4, v1); + cross_v3_v3v3(n, vec1, vec2); + len= normalize_v3(n); + + sub_v3_v3v3(vec1, v4, v3); + sub_v3_v3v3(vec2, v2, v3); + cross_v3_v3v3(n, vec1, vec2); + len+= normalize_v3(n); + + return (len/2.0f); +} + +float area_tri_v3(float *v1, float *v2, float *v3) /* Triangles */ +{ + float len, vec1[3], vec2[3], n[3]; + + sub_v3_v3v3(vec1, v3, v2); + sub_v3_v3v3(vec2, v1, v2); + cross_v3_v3v3(n, vec1, vec2); + len= normalize_v3(n); + + return (len/2.0f); +} + +#define MAX2(x,y) ((x)>(y) ? (x) : (y)) +#define MAX3(x,y,z) MAX2(MAX2((x),(y)) , (z)) + + +float area_poly_v3(int nr, float verts[][3], float *normal) +{ + float x, y, z, area, max; + float *cur, *prev; + int a, px=0, py=1; + + /* first: find dominant axis: 0==X, 1==Y, 2==Z */ + x= (float)fabs(normal[0]); + y= (float)fabs(normal[1]); + z= (float)fabs(normal[2]); + max = MAX3(x, y, z); + if(max==y) py=2; + else if(max==x) { + px=1; + py= 2; + } + + /* The Trapezium Area Rule */ + prev= verts[nr-1]; + cur= verts[0]; + area= 0; + for(a=0; a<nr; a++) { + area+= (cur[px]-prev[px])*(cur[py]+prev[py]); + prev= verts[a]; + cur= verts[a+1]; + } + + return (float)fabs(0.5*area/max); +} + +/********************************* Distance **********************************/ + +/* distance v1 to line v2-v3 */ +/* using Hesse formula, NO LINE PIECE! */ +float dist_to_line_v2(float *v1, float *v2, float *v3) +{ + float a[2],deler; + + a[0]= v2[1]-v3[1]; + a[1]= v3[0]-v2[0]; + deler= (float)sqrt(a[0]*a[0]+a[1]*a[1]); + if(deler== 0.0f) return 0; + + return (float)(fabs((v1[0]-v2[0])*a[0]+(v1[1]-v2[1])*a[1])/deler); + +} + +/* distance v1 to line-piece v2-v3 */ +float dist_to_line_segment_v2(float *v1, float *v2, float *v3) +{ + float labda, rc[2], pt[2], len; + + rc[0]= v3[0]-v2[0]; + rc[1]= v3[1]-v2[1]; + len= rc[0]*rc[0]+ rc[1]*rc[1]; + if(len==0.0) { + rc[0]= v1[0]-v2[0]; + rc[1]= v1[1]-v2[1]; + return (float)(sqrt(rc[0]*rc[0]+ rc[1]*rc[1])); + } + + labda= (rc[0]*(v1[0]-v2[0]) + rc[1]*(v1[1]-v2[1]))/len; + if(labda<=0.0) { + pt[0]= v2[0]; + pt[1]= v2[1]; + } + else if(labda>=1.0) { + pt[0]= v3[0]; + pt[1]= v3[1]; + } + else { + pt[0]= labda*rc[0]+v2[0]; + pt[1]= labda*rc[1]+v2[1]; + } + + rc[0]= pt[0]-v1[0]; + rc[1]= pt[1]-v1[1]; + return (float)sqrt(rc[0]*rc[0]+ rc[1]*rc[1]); +} + +/* point closest to v1 on line v2-v3 in 3D */ +void closest_to_line_segment_v3(float *closest, float v1[3], float v2[3], float v3[3]) +{ + float lambda, cp[3]; + + lambda= closest_to_line_v3(cp,v1, v2, v3); + + if(lambda <= 0.0f) + copy_v3_v3(closest, v2); + else if(lambda >= 1.0f) + copy_v3_v3(closest, v3); + else + copy_v3_v3(closest, cp); +} + +/* distance v1 to line-piece v2-v3 in 3D */ +float dist_to_line_segment_v3(float *v1, float *v2, float *v3) +{ + float closest[3]; + + closest_to_line_segment_v3(closest, v1, v2, v3); + + return len_v3v3(closest, v1); +} + +/******************************* Intersection ********************************/ + +/* intersect Line-Line, shorts */ +int isect_line_line_v2_short(short *v1, short *v2, short *v3, short *v4) +{ + /* return: + -1: colliniar + 0: no intersection of segments + 1: exact intersection of segments + 2: cross-intersection of segments + */ + float div, labda, mu; + + div= (float)((v2[0]-v1[0])*(v4[1]-v3[1])-(v2[1]-v1[1])*(v4[0]-v3[0])); + if(div==0.0f) return -1; + + labda= ((float)(v1[1]-v3[1])*(v4[0]-v3[0])-(v1[0]-v3[0])*(v4[1]-v3[1]))/div; + + mu= ((float)(v1[1]-v3[1])*(v2[0]-v1[0])-(v1[0]-v3[0])*(v2[1]-v1[1]))/div; + + if(labda>=0.0f && labda<=1.0f && mu>=0.0f && mu<=1.0f) { + if(labda==0.0f || labda==1.0f || mu==0.0f || mu==1.0f) return 1; + return 2; + } + return 0; +} + +/* intersect Line-Line, floats */ +int isect_line_line_v2(float *v1, float *v2, float *v3, float *v4) +{ + /* return: + -1: colliniar +0: no intersection of segments +1: exact intersection of segments +2: cross-intersection of segments + */ + float div, labda, mu; + + div= (v2[0]-v1[0])*(v4[1]-v3[1])-(v2[1]-v1[1])*(v4[0]-v3[0]); + if(div==0.0) return -1; + + labda= ((float)(v1[1]-v3[1])*(v4[0]-v3[0])-(v1[0]-v3[0])*(v4[1]-v3[1]))/div; + + mu= ((float)(v1[1]-v3[1])*(v2[0]-v1[0])-(v1[0]-v3[0])*(v2[1]-v1[1]))/div; + + if(labda>=0.0 && labda<=1.0 && mu>=0.0 && mu<=1.0) { + if(labda==0.0 || labda==1.0 || mu==0.0 || mu==1.0) return 1; + return 2; + } + return 0; +} + +/* +-1: colliniar + 1: intersection + +*/ +static short IsectLLPt2Df(float x0,float y0,float x1,float y1, + float x2,float y2,float x3,float y3, float *xi,float *yi) + +{ + /* + this function computes the intersection of the sent lines + and returns the intersection point, note that the function assumes + the lines intersect. the function can handle vertical as well + as horizontal lines. note the function isn't very clever, it simply + applies the math, but we don't need speed since this is a + pre-processing step + */ + float c1,c2, // constants of linear equations + det_inv, // the inverse of the determinant of the coefficient + m1,m2; // the slopes of each line + /* + compute slopes, note the cludge for infinity, however, this will + be close enough + */ + if (fabs(x1-x0) > 0.000001) + m1 = (y1-y0) / (x1-x0); + else + return -1; /*m1 = (float) 1e+10;*/ // close enough to infinity + + if (fabs(x3-x2) > 0.000001) + m2 = (y3-y2) / (x3-x2); + else + return -1; /*m2 = (float) 1e+10;*/ // close enough to infinity + + if (fabs(m1-m2) < 0.000001) + return -1; /* paralelle lines */ + +// compute constants + + c1 = (y0-m1*x0); + c2 = (y2-m2*x2); + +// compute the inverse of the determinate + + det_inv = 1.0f / (-m1 + m2); + +// use Kramers rule to compute xi and yi + + *xi= ((-c2 + c1) *det_inv); + *yi= ((m2*c1 - m1*c2) *det_inv); + + return 1; +} // end Intersect_Lines + +#define SIDE_OF_LINE(pa,pb,pp) ((pa[0]-pp[0])*(pb[1]-pp[1]))-((pb[0]-pp[0])*(pa[1]-pp[1])) +/* point in tri */ +// XXX was called IsectPT2Df +int isect_point_tri_v2(float pt[2], float v1[2], float v2[2], float v3[2]) +{ + if (SIDE_OF_LINE(v1,v2,pt)>=0.0) { + if (SIDE_OF_LINE(v2,v3,pt)>=0.0) { + if (SIDE_OF_LINE(v3,v1,pt)>=0.0) { + return 1; + } + } + } else { + if (! (SIDE_OF_LINE(v2,v3,pt)>=0.0)) { + if (! (SIDE_OF_LINE(v3,v1,pt)>=0.0)) { + return -1; + } + } + } + + return 0; +} +/* point in quad - only convex quads */ +int isect_point_quad_v2(float pt[2], float v1[2], float v2[2], float v3[2], float v4[2]) +{ + if (SIDE_OF_LINE(v1,v2,pt)>=0.0) { + if (SIDE_OF_LINE(v2,v3,pt)>=0.0) { + if (SIDE_OF_LINE(v3,v4,pt)>=0.0) { + if (SIDE_OF_LINE(v4,v1,pt)>=0.0) { + return 1; + } + } + } + } else { + if (! (SIDE_OF_LINE(v2,v3,pt)>=0.0)) { + if (! (SIDE_OF_LINE(v3,v4,pt)>=0.0)) { + if (! (SIDE_OF_LINE(v4,v1,pt)>=0.0)) { + return -1; + } + } + } + } + + return 0; +} + +/* moved from effect.c + test if the line starting at p1 ending at p2 intersects the triangle v0..v2 + return non zero if it does +*/ +int isect_line_tri_v3(float p1[3], float p2[3], float v0[3], float v1[3], float v2[3], float *lambda, float *uv) +{ + + float p[3], s[3], d[3], e1[3], e2[3], q[3]; + float a, f, u, v; + + sub_v3_v3v3(e1, v1, v0); + sub_v3_v3v3(e2, v2, v0); + sub_v3_v3v3(d, p2, p1); + + cross_v3_v3v3(p, d, e2); + a = dot_v3v3(e1, p); + if ((a > -0.000001) && (a < 0.000001)) return 0; + f = 1.0f/a; + + sub_v3_v3v3(s, p1, v0); + + cross_v3_v3v3(q, s, e1); + *lambda = f * dot_v3v3(e2, q); + if ((*lambda < 0.0)||(*lambda > 1.0)) return 0; + + u = f * dot_v3v3(s, p); + if ((u < 0.0)||(u > 1.0)) return 0; + + v = f * dot_v3v3(d, q); + if ((v < 0.0)||((u + v) > 1.0)) return 0; + + if(uv) { + uv[0]= u; + uv[1]= v; + } + + return 1; +} + +/* moved from effect.c + test if the ray starting at p1 going in d direction intersects the triangle v0..v2 + return non zero if it does +*/ +int isect_ray_tri_v3(float p1[3], float d[3], float v0[3], float v1[3], float v2[3], float *lambda, float *uv) +{ + float p[3], s[3], e1[3], e2[3], q[3]; + float a, f, u, v; + + sub_v3_v3v3(e1, v1, v0); + sub_v3_v3v3(e2, v2, v0); + + cross_v3_v3v3(p, d, e2); + a = dot_v3v3(e1, p); + if ((a > -0.000001) && (a < 0.000001)) return 0; + f = 1.0f/a; + + sub_v3_v3v3(s, p1, v0); + + cross_v3_v3v3(q, s, e1); + *lambda = f * dot_v3v3(e2, q); + if ((*lambda < 0.0)) return 0; + + u = f * dot_v3v3(s, p); + if ((u < 0.0)||(u > 1.0)) return 0; + + v = f * dot_v3v3(d, q); + if ((v < 0.0)||((u + v) > 1.0)) return 0; + + if(uv) { + uv[0]= u; + uv[1]= v; + } + + return 1; +} + +int isect_ray_tri_threshold_v3(float p1[3], float d[3], float v0[3], float v1[3], float v2[3], float *lambda, float *uv, float threshold) +{ + float p[3], s[3], e1[3], e2[3], q[3]; + float a, f, u, v; + float du = 0, dv = 0; + + sub_v3_v3v3(e1, v1, v0); + sub_v3_v3v3(e2, v2, v0); + + cross_v3_v3v3(p, d, e2); + a = dot_v3v3(e1, p); + if ((a > -0.000001) && (a < 0.000001)) return 0; + f = 1.0f/a; + + sub_v3_v3v3(s, p1, v0); + + cross_v3_v3v3(q, s, e1); + *lambda = f * dot_v3v3(e2, q); + if ((*lambda < 0.0)) return 0; + + u = f * dot_v3v3(s, p); + v = f * dot_v3v3(d, q); + + if (u < 0) du = u; + if (u > 1) du = u - 1; + if (v < 0) dv = v; + if (v > 1) dv = v - 1; + if (u > 0 && v > 0 && u + v > 1) + { + float t = u + v - 1; + du = u - t/2; + dv = v - t/2; + } + + mul_v3_fl(e1, du); + mul_v3_fl(e2, dv); + + if (dot_v3v3(e1, e1) + dot_v3v3(e2, e2) > threshold * threshold) + { + return 0; + } + + if(uv) { + uv[0]= u; + uv[1]= v; + } + + return 1; +} + + +/* Adapted from the paper by Kasper Fauerby */ +/* "Improved Collision detection and Response" */ +static int getLowestRoot(float a, float b, float c, float maxR, float* root) +{ + // Check if a solution exists + float determinant = b*b - 4.0f*a*c; + + // If determinant is negative it means no solutions. + if (determinant >= 0.0f) + { + // calculate the two roots: (if determinant == 0 then + // x1==x2 but let’s disregard that slight optimization) + float sqrtD = (float)sqrt(determinant); + float r1 = (-b - sqrtD) / (2.0f*a); + float r2 = (-b + sqrtD) / (2.0f*a); + + // Sort so x1 <= x2 + if (r1 > r2) + SWAP(float, r1, r2); + + // Get lowest root: + if (r1 > 0.0f && r1 < maxR) + { + *root = r1; + return 1; + } + + // It is possible that we want x2 - this can happen + // if x1 < 0 + if (r2 > 0.0f && r2 < maxR) + { + *root = r2; + return 1; + } + } + // No (valid) solutions + return 0; +} + +int isect_sweeping_sphere_tri_v3(float p1[3], float p2[3], float radius, float v0[3], float v1[3], float v2[3], float *lambda, float *ipoint) +{ + float e1[3], e2[3], e3[3], point[3], vel[3], /*dist[3],*/ nor[3], temp[3], bv[3]; + float a, b, c, d, e, x, y, z, radius2=radius*radius; + float elen2,edotv,edotbv,nordotv,vel2; + float newLambda; + int found_by_sweep=0; + + sub_v3_v3v3(e1,v1,v0); + sub_v3_v3v3(e2,v2,v0); + sub_v3_v3v3(vel,p2,p1); + +/*---test plane of tri---*/ + cross_v3_v3v3(nor,e1,e2); + normalize_v3(nor); + + /* flip normal */ + if(dot_v3v3(nor,vel)>0.0f) negate_v3(nor); + + a=dot_v3v3(p1,nor)-dot_v3v3(v0,nor); + nordotv=dot_v3v3(nor,vel); + + if (fabs(nordotv) < 0.000001) + { + if(fabs(a)>=radius) + { + return 0; + } + } + else + { + float t0=(-a+radius)/nordotv; + float t1=(-a-radius)/nordotv; + + if(t0>t1) + SWAP(float, t0, t1); + + if(t0>1.0f || t1<0.0f) return 0; + + /* clamp to [0,1] */ + CLAMP(t0, 0.0f, 1.0f); + CLAMP(t1, 0.0f, 1.0f); + + /*---test inside of tri---*/ + /* plane intersection point */ + + point[0] = p1[0] + vel[0]*t0 - nor[0]*radius; + point[1] = p1[1] + vel[1]*t0 - nor[1]*radius; + point[2] = p1[2] + vel[2]*t0 - nor[2]*radius; + + + /* is the point in the tri? */ + a=dot_v3v3(e1,e1); + b=dot_v3v3(e1,e2); + c=dot_v3v3(e2,e2); + + sub_v3_v3v3(temp,point,v0); + d=dot_v3v3(temp,e1); + e=dot_v3v3(temp,e2); + + x=d*c-e*b; + y=e*a-d*b; + z=x+y-(a*c-b*b); + + + if(z <= 0.0f && (x >= 0.0f && y >= 0.0f)) + { + //(((unsigned int)z)& ~(((unsigned int)x)|((unsigned int)y))) & 0x80000000){ + *lambda=t0; + copy_v3_v3(ipoint,point); + return 1; + } + } + + + *lambda=1.0f; + +/*---test points---*/ + a=vel2=dot_v3v3(vel,vel); + + /*v0*/ + sub_v3_v3v3(temp,p1,v0); + b=2.0f*dot_v3v3(vel,temp); + c=dot_v3v3(temp,temp)-radius2; + + if(getLowestRoot(a, b, c, *lambda, lambda)) + { + copy_v3_v3(ipoint,v0); + found_by_sweep=1; + } + + /*v1*/ + sub_v3_v3v3(temp,p1,v1); + b=2.0f*dot_v3v3(vel,temp); + c=dot_v3v3(temp,temp)-radius2; + + if(getLowestRoot(a, b, c, *lambda, lambda)) + { + copy_v3_v3(ipoint,v1); + found_by_sweep=1; + } + + /*v2*/ + sub_v3_v3v3(temp,p1,v2); + b=2.0f*dot_v3v3(vel,temp); + c=dot_v3v3(temp,temp)-radius2; + + if(getLowestRoot(a, b, c, *lambda, lambda)) + { + copy_v3_v3(ipoint,v2); + found_by_sweep=1; + } + +/*---test edges---*/ + sub_v3_v3v3(e3,v2,v1); //wasnt yet calculated + + + /*e1*/ + sub_v3_v3v3(bv,v0,p1); + + elen2 = dot_v3v3(e1,e1); + edotv = dot_v3v3(e1,vel); + edotbv = dot_v3v3(e1,bv); + + a=elen2*(-dot_v3v3(vel,vel))+edotv*edotv; + b=2.0f*(elen2*dot_v3v3(vel,bv)-edotv*edotbv); + c=elen2*(radius2-dot_v3v3(bv,bv))+edotbv*edotbv; + + if(getLowestRoot(a, b, c, *lambda, &newLambda)) + { + e=(edotv*newLambda-edotbv)/elen2; + + if(e >= 0.0f && e <= 1.0f) + { + *lambda = newLambda; + copy_v3_v3(ipoint,e1); + mul_v3_fl(ipoint,e); + add_v3_v3v3(ipoint,ipoint,v0); + found_by_sweep=1; + } + } + + /*e2*/ + /*bv is same*/ + elen2 = dot_v3v3(e2,e2); + edotv = dot_v3v3(e2,vel); + edotbv = dot_v3v3(e2,bv); + + a=elen2*(-dot_v3v3(vel,vel))+edotv*edotv; + b=2.0f*(elen2*dot_v3v3(vel,bv)-edotv*edotbv); + c=elen2*(radius2-dot_v3v3(bv,bv))+edotbv*edotbv; + + if(getLowestRoot(a, b, c, *lambda, &newLambda)) + { + e=(edotv*newLambda-edotbv)/elen2; + + if(e >= 0.0f && e <= 1.0f) + { + *lambda = newLambda; + copy_v3_v3(ipoint,e2); + mul_v3_fl(ipoint,e); + add_v3_v3v3(ipoint,ipoint,v0); + found_by_sweep=1; + } + } + + /*e3*/ + sub_v3_v3v3(bv,v0,p1); + elen2 = dot_v3v3(e1,e1); + edotv = dot_v3v3(e1,vel); + edotbv = dot_v3v3(e1,bv); + + sub_v3_v3v3(bv,v1,p1); + elen2 = dot_v3v3(e3,e3); + edotv = dot_v3v3(e3,vel); + edotbv = dot_v3v3(e3,bv); + + a=elen2*(-dot_v3v3(vel,vel))+edotv*edotv; + b=2.0f*(elen2*dot_v3v3(vel,bv)-edotv*edotbv); + c=elen2*(radius2-dot_v3v3(bv,bv))+edotbv*edotbv; + + if(getLowestRoot(a, b, c, *lambda, &newLambda)) + { + e=(edotv*newLambda-edotbv)/elen2; + + if(e >= 0.0f && e <= 1.0f) + { + *lambda = newLambda; + copy_v3_v3(ipoint,e3); + mul_v3_fl(ipoint,e); + add_v3_v3v3(ipoint,ipoint,v1); + found_by_sweep=1; + } + } + + + return found_by_sweep; +} +int isect_axial_line_tri_v3(int axis, float p1[3], float p2[3], float v0[3], float v1[3], float v2[3], float *lambda) +{ + float p[3], e1[3], e2[3]; + float u, v, f; + int a0=axis, a1=(axis+1)%3, a2=(axis+2)%3; + + //return isect_line_tri_v3(p1,p2,v0,v1,v2,lambda); + + ///* first a simple bounding box test */ + //if(MIN3(v0[a1],v1[a1],v2[a1]) > p1[a1]) return 0; + //if(MIN3(v0[a2],v1[a2],v2[a2]) > p1[a2]) return 0; + //if(MAX3(v0[a1],v1[a1],v2[a1]) < p1[a1]) return 0; + //if(MAX3(v0[a2],v1[a2],v2[a2]) < p1[a2]) return 0; + + ///* then a full intersection test */ + + sub_v3_v3v3(e1,v1,v0); + sub_v3_v3v3(e2,v2,v0); + sub_v3_v3v3(p,v0,p1); + + f= (e2[a1]*e1[a2]-e2[a2]*e1[a1]); + if ((f > -0.000001) && (f < 0.000001)) return 0; + + v= (p[a2]*e1[a1]-p[a1]*e1[a2])/f; + if ((v < 0.0)||(v > 1.0)) return 0; + + f= e1[a1]; + if((f > -0.000001) && (f < 0.000001)){ + f= e1[a2]; + if((f > -0.000001) && (f < 0.000001)) return 0; + u= (-p[a2]-v*e2[a2])/f; + } + else + u= (-p[a1]-v*e2[a1])/f; + + if ((u < 0.0)||((u + v) > 1.0)) return 0; + + *lambda = (p[a0]+u*e1[a0]+v*e2[a0])/(p2[a0]-p1[a0]); + + if ((*lambda < 0.0)||(*lambda > 1.0)) return 0; + + return 1; +} + +/* Returns the number of point of interests + * 0 - lines are colinear + * 1 - lines are coplanar, i1 is set to intersection + * 2 - i1 and i2 are the nearest points on line 1 (v1, v2) and line 2 (v3, v4) respectively + * */ +int isect_line_line_v3(float v1[3], float v2[3], float v3[3], float v4[3], float i1[3], float i2[3]) +{ + float a[3], b[3], c[3], ab[3], cb[3], dir1[3], dir2[3]; + float d; + + sub_v3_v3v3(c, v3, v1); + sub_v3_v3v3(a, v2, v1); + sub_v3_v3v3(b, v4, v3); + + copy_v3_v3(dir1, a); + normalize_v3(dir1); + copy_v3_v3(dir2, b); + normalize_v3(dir2); + d = dot_v3v3(dir1, dir2); + if (d == 1.0f || d == -1.0f) { + /* colinear */ + return 0; + } + + cross_v3_v3v3(ab, a, b); + d = dot_v3v3(c, ab); + + /* test if the two lines are coplanar */ + if (d > -0.000001f && d < 0.000001f) { + cross_v3_v3v3(cb, c, b); + + mul_v3_fl(a, dot_v3v3(cb, ab) / dot_v3v3(ab, ab)); + add_v3_v3v3(i1, v1, a); + copy_v3_v3(i2, i1); + + return 1; /* one intersection only */ + } + /* if not */ + else { + float n[3], t[3]; + float v3t[3], v4t[3]; + sub_v3_v3v3(t, v1, v3); + + /* offset between both plane where the lines lies */ + cross_v3_v3v3(n, a, b); + project_v3_v3v3(t, t, n); + + /* for the first line, offset the second line until it is coplanar */ + add_v3_v3v3(v3t, v3, t); + add_v3_v3v3(v4t, v4, t); + + sub_v3_v3v3(c, v3t, v1); + sub_v3_v3v3(a, v2, v1); + sub_v3_v3v3(b, v4t, v3t); + + cross_v3_v3v3(ab, a, b); + cross_v3_v3v3(cb, c, b); + + mul_v3_fl(a, dot_v3v3(cb, ab) / dot_v3v3(ab, ab)); + add_v3_v3v3(i1, v1, a); + + /* for the second line, just substract the offset from the first intersection point */ + sub_v3_v3v3(i2, i1, t); + + return 2; /* two nearest points */ + } +} + +/* Intersection point strictly between the two lines + * 0 when no intersection is found + * */ +int isect_line_line_strict_v3(float v1[3], float v2[3], float v3[3], float v4[3], float vi[3], float *lambda) +{ + float a[3], b[3], c[3], ab[3], cb[3], ca[3], dir1[3], dir2[3]; + float d; + float d1; + + sub_v3_v3v3(c, v3, v1); + sub_v3_v3v3(a, v2, v1); + sub_v3_v3v3(b, v4, v3); + + copy_v3_v3(dir1, a); + normalize_v3(dir1); + copy_v3_v3(dir2, b); + normalize_v3(dir2); + d = dot_v3v3(dir1, dir2); + if (d == 1.0f || d == -1.0f || d == 0) { + /* colinear or one vector is zero-length*/ + return 0; + } + + d1 = d; + + cross_v3_v3v3(ab, a, b); + d = dot_v3v3(c, ab); + + /* test if the two lines are coplanar */ + if (d > -0.000001f && d < 0.000001f) { + float f1, f2; + cross_v3_v3v3(cb, c, b); + cross_v3_v3v3(ca, c, a); + + f1 = dot_v3v3(cb, ab) / dot_v3v3(ab, ab); + f2 = dot_v3v3(ca, ab) / dot_v3v3(ab, ab); + + if (f1 >= 0 && f1 <= 1 && + f2 >= 0 && f2 <= 1) + { + mul_v3_fl(a, f1); + add_v3_v3v3(vi, v1, a); + + if (lambda != NULL) + { + *lambda = f1; + } + + return 1; /* intersection found */ + } + else + { + return 0; + } + } + else + { + return 0; + } +} + +int isect_aabb_aabb_v3(float min1[3], float max1[3], float min2[3], float max2[3]) +{ + return (min1[0]<max2[0] && min1[1]<max2[1] && min1[2]<max2[2] && + min2[0]<max1[0] && min2[1]<max1[1] && min2[2]<max1[2]); +} + +/* find closest point to p on line through l1,l2 and return lambda, + * where (0 <= lambda <= 1) when cp is in the line segement l1,l2 + */ +float closest_to_line_v3(float cp[3],float p[3], float l1[3], float l2[3]) +{ + float h[3],u[3],lambda; + sub_v3_v3v3(u, l2, l1); + sub_v3_v3v3(h, p, l1); + lambda =dot_v3v3(u,h)/dot_v3v3(u,u); + cp[0] = l1[0] + u[0] * lambda; + cp[1] = l1[1] + u[1] * lambda; + cp[2] = l1[2] + u[2] * lambda; + return lambda; +} + +#if 0 +/* little sister we only need to know lambda */ +static float lambda_cp_line(float p[3], float l1[3], float l2[3]) +{ + float h[3],u[3]; + sub_v3_v3v3(u, l2, l1); + sub_v3_v3v3(h, p, l1); + return(dot_v3v3(u,h)/dot_v3v3(u,u)); +} +#endif + +/* Similar to LineIntersectsTriangleUV, except it operates on a quad and in 2d, assumes point is in quad */ +void isect_point_quad_uv_v2(float v0[2], float v1[2], float v2[2], float v3[2], float pt[2], float *uv) +{ + float x0,y0, x1,y1, wtot, v2d[2], w1, w2; + + /* used for paralelle lines */ + float pt3d[3], l1[3], l2[3], pt_on_line[3]; + + /* compute 2 edges of the quad intersection point */ + if (IsectLLPt2Df(v0[0],v0[1],v1[0],v1[1], v2[0],v2[1],v3[0],v3[1], &x0,&y0) == 1) { + /* the intersection point between the quad-edge intersection and the point in the quad we want the uv's for */ + /* should never be paralle !! */ + /*printf("\tnot paralelle 1\n");*/ + IsectLLPt2Df(pt[0],pt[1],x0,y0, v0[0],v0[1],v3[0],v3[1], &x1,&y1); + + /* Get the weights from the new intersection point, to each edge */ + v2d[0] = x1-v0[0]; + v2d[1] = y1-v0[1]; + w1 = len_v2(v2d); + + v2d[0] = x1-v3[0]; /* some but for the other vert */ + v2d[1] = y1-v3[1]; + w2 = len_v2(v2d); + wtot = w1+w2; + /*w1 = w1/wtot;*/ + /*w2 = w2/wtot;*/ + uv[0] = w1/wtot; + } else { + /* lines are paralelle, lambda_cp_line_ex is 3d grrr */ + /*printf("\tparalelle1\n");*/ + pt3d[0] = pt[0]; + pt3d[1] = pt[1]; + pt3d[2] = l1[2] = l2[2] = 0.0f; + + l1[0] = v0[0]; l1[1] = v0[1]; + l2[0] = v1[0]; l2[1] = v1[1]; + closest_to_line_v3(pt_on_line,pt3d, l1, l2); + v2d[0] = pt[0]-pt_on_line[0]; /* same, for the other vert */ + v2d[1] = pt[1]-pt_on_line[1]; + w1 = len_v2(v2d); + + l1[0] = v2[0]; l1[1] = v2[1]; + l2[0] = v3[0]; l2[1] = v3[1]; + closest_to_line_v3(pt_on_line,pt3d, l1, l2); + v2d[0] = pt[0]-pt_on_line[0]; /* same, for the other vert */ + v2d[1] = pt[1]-pt_on_line[1]; + w2 = len_v2(v2d); + wtot = w1+w2; + uv[0] = w1/wtot; + } + + /* Same as above to calc the uv[1] value, alternate calculation */ + + if (IsectLLPt2Df(v0[0],v0[1],v3[0],v3[1], v1[0],v1[1],v2[0],v2[1], &x0,&y0) == 1) { /* was v0,v1 v2,v3 now v0,v3 v1,v2*/ + /* never paralle if above was not */ + /*printf("\tnot paralelle2\n");*/ + IsectLLPt2Df(pt[0],pt[1],x0,y0, v0[0],v0[1],v1[0],v1[1], &x1,&y1);/* was v0,v3 now v0,v1*/ + + v2d[0] = x1-v0[0]; + v2d[1] = y1-v0[1]; + w1 = len_v2(v2d); + + v2d[0] = x1-v1[0]; + v2d[1] = y1-v1[1]; + w2 = len_v2(v2d); + wtot = w1+w2; + uv[1] = w1/wtot; + } else { + /* lines are paralelle, lambda_cp_line_ex is 3d grrr */ + /*printf("\tparalelle2\n");*/ + pt3d[0] = pt[0]; + pt3d[1] = pt[1]; + pt3d[2] = l1[2] = l2[2] = 0.0f; + + + l1[0] = v0[0]; l1[1] = v0[1]; + l2[0] = v3[0]; l2[1] = v3[1]; + closest_to_line_v3(pt_on_line,pt3d, l1, l2); + v2d[0] = pt[0]-pt_on_line[0]; /* some but for the other vert */ + v2d[1] = pt[1]-pt_on_line[1]; + w1 = len_v2(v2d); + + l1[0] = v1[0]; l1[1] = v1[1]; + l2[0] = v2[0]; l2[1] = v2[1]; + closest_to_line_v3(pt_on_line,pt3d, l1, l2); + v2d[0] = pt[0]-pt_on_line[0]; /* some but for the other vert */ + v2d[1] = pt[1]-pt_on_line[1]; + w2 = len_v2(v2d); + wtot = w1+w2; + uv[1] = w1/wtot; + } + /* may need to flip UV's here */ +} + +/* same as above but does tri's and quads, tri's are a bit of a hack */ +void isect_point_face_uv_v2(int isquad, float v0[2], float v1[2], float v2[2], float v3[2], float pt[2], float *uv) +{ + if (isquad) { + isect_point_quad_uv_v2(v0, v1, v2, v3, pt, uv); + } + else { + /* not for quads, use for our abuse of LineIntersectsTriangleUV */ + float p1_3d[3], p2_3d[3], v0_3d[3], v1_3d[3], v2_3d[3], lambda; + + p1_3d[0] = p2_3d[0] = uv[0]; + p1_3d[1] = p2_3d[1] = uv[1]; + p1_3d[2] = 1.0f; + p2_3d[2] = -1.0f; + v0_3d[2] = v1_3d[2] = v2_3d[2] = 0.0; + + /* generate a new fuv, (this is possibly a non optimal solution, + * since we only need 2d calculation but use 3d func's) + * + * this method makes an imaginary triangle in 2d space using the UV's from the derived mesh face + * Then find new uv coords using the fuv and this face with LineIntersectsTriangleUV. + * This means the new values will be correct in relation to the derived meshes face. + */ + copy_v2_v2(v0_3d, v0); + copy_v2_v2(v1_3d, v1); + copy_v2_v2(v2_3d, v2); + + /* Doing this in 3D is not nice */ + isect_line_tri_v3(p1_3d, p2_3d, v0_3d, v1_3d, v2_3d, &lambda, uv); + } +} + +#if 0 // XXX this version used to be used in isect_point_tri_v2_int() and was called IsPointInTri2D +int isect_point_tri_v2(float pt[2], float v1[2], float v2[2], float v3[2]) +{ + float inp1, inp2, inp3; + + inp1= (v2[0]-v1[0])*(v1[1]-pt[1]) + (v1[1]-v2[1])*(v1[0]-pt[0]); + inp2= (v3[0]-v2[0])*(v2[1]-pt[1]) + (v2[1]-v3[1])*(v2[0]-pt[0]); + inp3= (v1[0]-v3[0])*(v3[1]-pt[1]) + (v3[1]-v1[1])*(v3[0]-pt[0]); + + if(inp1<=0.0f && inp2<=0.0f && inp3<=0.0f) return 1; + if(inp1>=0.0f && inp2>=0.0f && inp3>=0.0f) return 1; + + return 0; +} +#endif + +#if 0 +int isect_point_tri_v2(float v0[2], float v1[2], float v2[2], float pt[2]) +{ + /* not for quads, use for our abuse of LineIntersectsTriangleUV */ + float p1_3d[3], p2_3d[3], v0_3d[3], v1_3d[3], v2_3d[3]; + /* not used */ + float lambda, uv[3]; + + p1_3d[0] = p2_3d[0] = uv[0]= pt[0]; + p1_3d[1] = p2_3d[1] = uv[1]= uv[2]= pt[1]; + p1_3d[2] = 1.0f; + p2_3d[2] = -1.0f; + v0_3d[2] = v1_3d[2] = v2_3d[2] = 0.0; + + /* generate a new fuv, (this is possibly a non optimal solution, + * since we only need 2d calculation but use 3d func's) + * + * this method makes an imaginary triangle in 2d space using the UV's from the derived mesh face + * Then find new uv coords using the fuv and this face with LineIntersectsTriangleUV. + * This means the new values will be correct in relation to the derived meshes face. + */ + copy_v2_v2(v0_3d, v0); + copy_v2_v2(v1_3d, v1); + copy_v2_v2(v2_3d, v2); + + /* Doing this in 3D is not nice */ + return isect_line_tri_v3(p1_3d, p2_3d, v0_3d, v1_3d, v2_3d, &lambda, uv); +} +#endif + +/* + + x1,y2 + | \ + | \ .(a,b) + | \ + x1,y1-- x2,y1 + +*/ +int isect_point_tri_v2_int(int x1, int y1, int x2, int y2, int a, int b) +{ + float v1[2], v2[2], v3[2], p[2]; + + v1[0]= (float)x1; + v1[1]= (float)y1; + + v2[0]= (float)x1; + v2[1]= (float)y2; + + v3[0]= (float)x2; + v3[1]= (float)y1; + + p[0]= (float)a; + p[1]= (float)b; + + return isect_point_tri_v2(p, v1, v2, v3); +} + +static int point_in_slice(float p[3], float v1[3], float l1[3], float l2[3]) +{ +/* +what is a slice ? +some maths: +a line including l1,l2 and a point not on the line +define a subset of R3 delimeted by planes parallel to the line and orthogonal +to the (point --> line) distance vector,one plane on the line one on the point, +the room inside usually is rather small compared to R3 though still infinte +useful for restricting (speeding up) searches +e.g. all points of triangular prism are within the intersection of 3 'slices' +onother trivial case : cube +but see a 'spat' which is a deformed cube with paired parallel planes needs only 3 slices too +*/ + float h,rp[3],cp[3],q[3]; + + closest_to_line_v3(cp,v1,l1,l2); + sub_v3_v3v3(q,cp,v1); + + sub_v3_v3v3(rp,p,v1); + h=dot_v3v3(q,rp)/dot_v3v3(q,q); + if (h < 0.0f || h > 1.0f) return 0; + return 1; +} + +#if 0 +/*adult sister defining the slice planes by the origin and the normal +NOTE |normal| may not be 1 but defining the thickness of the slice*/ +static int point_in_slice_as(float p[3],float origin[3],float normal[3]) +{ + float h,rp[3]; + sub_v3_v3v3(rp,p,origin); + h=dot_v3v3(normal,rp)/dot_v3v3(normal,normal); + if (h < 0.0f || h > 1.0f) return 0; + return 1; +} + +/*mama (knowing the squared lenght of the normal)*/ +static int point_in_slice_m(float p[3],float origin[3],float normal[3],float lns) +{ + float h,rp[3]; + sub_v3_v3v3(rp,p,origin); + h=dot_v3v3(normal,rp)/lns; + if (h < 0.0f || h > 1.0f) return 0; + return 1; +} +#endif + +int isect_point_tri_prism_v3(float p[3], float v1[3], float v2[3], float v3[3]) +{ + if(!point_in_slice(p,v1,v2,v3)) return 0; + if(!point_in_slice(p,v2,v3,v1)) return 0; + if(!point_in_slice(p,v3,v1,v2)) return 0; + return 1; +} + +/****************************** Interpolation ********************************/ + +static float tri_signed_area(float *v1, float *v2, float *v3, int i, int j) +{ + return 0.5f*((v1[i]-v2[i])*(v2[j]-v3[j]) + (v1[j]-v2[j])*(v3[i]-v2[i])); +} + +static int barycentric_weights(float *v1, float *v2, float *v3, float *co, float *n, float *w) +{ + float xn, yn, zn, a1, a2, a3, asum; + short i, j; + + /* find best projection of face XY, XZ or YZ: barycentric weights of + the 2d projected coords are the same and faster to compute */ + xn= (float)fabs(n[0]); + yn= (float)fabs(n[1]); + zn= (float)fabs(n[2]); + if(zn>=xn && zn>=yn) {i= 0; j= 1;} + else if(yn>=xn && yn>=zn) {i= 0; j= 2;} + else {i= 1; j= 2;} + + a1= tri_signed_area(v2, v3, co, i, j); + a2= tri_signed_area(v3, v1, co, i, j); + a3= tri_signed_area(v1, v2, co, i, j); + + asum= a1 + a2 + a3; + + if (fabs(asum) < FLT_EPSILON) { + /* zero area triangle */ + w[0]= w[1]= w[2]= 1.0f/3.0f; + return 1; + } + + asum= 1.0f/asum; + w[0]= a1*asum; + w[1]= a2*asum; + w[2]= a3*asum; + + return 0; +} + +void interp_weights_face_v3(float *w,float *v1, float *v2, float *v3, float *v4, float *co) +{ + float w2[3]; + + w[0]= w[1]= w[2]= w[3]= 0.0f; + + /* first check for exact match */ + if(equals_v3v3(co, v1)) + w[0]= 1.0f; + else if(equals_v3v3(co, v2)) + w[1]= 1.0f; + else if(equals_v3v3(co, v3)) + w[2]= 1.0f; + else if(v4 && equals_v3v3(co, v4)) + w[3]= 1.0f; + else { + /* otherwise compute barycentric interpolation weights */ + float n1[3], n2[3], n[3]; + int degenerate; + + sub_v3_v3v3(n1, v1, v3); + if (v4) { + sub_v3_v3v3(n2, v2, v4); + } + else { + sub_v3_v3v3(n2, v2, v3); + } + cross_v3_v3v3(n, n1, n2); + + /* OpenGL seems to split this way, so we do too */ + if (v4) { + degenerate= barycentric_weights(v1, v2, v4, co, n, w); + SWAP(float, w[2], w[3]); + + if(degenerate || (w[0] < 0.0f)) { + /* if w[1] is negative, co is on the other side of the v1-v3 edge, + so we interpolate using the other triangle */ + degenerate= barycentric_weights(v2, v3, v4, co, n, w2); + + if(!degenerate) { + w[0]= 0.0f; + w[1]= w2[0]; + w[2]= w2[1]; + w[3]= w2[2]; + } + } + } + else + barycentric_weights(v1, v2, v3, co, n, w); + } +} + +/* Mean value weights - smooth interpolation weights for polygons with + * more than 3 vertices */ +static float mean_value_half_tan(float *v1, float *v2, float *v3) +{ + float d2[3], d3[3], cross[3], area, dot, len; + + sub_v3_v3v3(d2, v2, v1); + sub_v3_v3v3(d3, v3, v1); + cross_v3_v3v3(cross, d2, d3); + + area= len_v3(cross); + dot= dot_v3v3(d2, d3); + len= len_v3(d2)*len_v3(d3); + + if(area == 0.0f) + return 0.0f; + else + return (len - dot)/area; +} + +void interp_weights_poly_v3(float *w,float v[][3], int n, float *co) +{ + float totweight, t1, t2, len, *vmid, *vprev, *vnext; + int i; + + totweight= 0.0f; + + for(i=0; i<n; i++) { + vmid= v[i]; + vprev= (i == 0)? v[n-1]: v[i-1]; + vnext= (i == n-1)? v[0]: v[i+1]; + + t1= mean_value_half_tan(co, vprev, vmid); + t2= mean_value_half_tan(co, vmid, vnext); + + len= len_v3v3(co, vmid); + w[i]= (t1+t2)/len; + totweight += w[i]; + } + + if(totweight != 0.0f) + for(i=0; i<n; i++) + w[i] /= totweight; +} + +/* (x1,v1)(t1=0)------(x2,v2)(t2=1), 0<t<1 --> (x,v)(t) */ +void interp_cubic_v3(float *x, float *v,float *x1, float *v1, float *x2, float *v2, float t) +{ + float a[3],b[3]; + float t2= t*t; + float t3= t2*t; + + /* cubic interpolation */ + a[0]= v1[0] + v2[0] + 2*(x1[0] - x2[0]); + a[1]= v1[1] + v2[1] + 2*(x1[1] - x2[1]); + a[2]= v1[2] + v2[2] + 2*(x1[2] - x2[2]); + + b[0]= -2*v1[0] - v2[0] - 3*(x1[0] - x2[0]); + b[1]= -2*v1[1] - v2[1] - 3*(x1[1] - x2[1]); + b[2]= -2*v1[2] - v2[2] - 3*(x1[2] - x2[2]); + + x[0]= a[0]*t3 + b[0]*t2 + v1[0]*t + x1[0]; + x[1]= a[1]*t3 + b[1]*t2 + v1[1]*t + x1[1]; + x[2]= a[2]*t3 + b[2]*t2 + v1[2]*t + x1[2]; + + v[0]= 3*a[0]*t2 + 2*b[0]*t + v1[0]; + v[1]= 3*a[1]*t2 + 2*b[1]*t + v1[1]; + v[2]= 3*a[2]*t2 + 2*b[2]*t + v1[2]; +} + +/***************************** View & Projection *****************************/ + +void orthographic_m4(float matrix[][4],float left, float right, float bottom, float top, float nearClip, float farClip) +{ + float Xdelta, Ydelta, Zdelta; + + Xdelta = right - left; + Ydelta = top - bottom; + Zdelta = farClip - nearClip; + if (Xdelta == 0.0 || Ydelta == 0.0 || Zdelta == 0.0) { + return; + } + unit_m4(matrix); + matrix[0][0] = 2.0f/Xdelta; + matrix[3][0] = -(right + left)/Xdelta; + matrix[1][1] = 2.0f/Ydelta; + matrix[3][1] = -(top + bottom)/Ydelta; + matrix[2][2] = -2.0f/Zdelta; /* note: negate Z */ + matrix[3][2] = -(farClip + nearClip)/Zdelta; +} + +void perspective_m4(float mat[][4],float left, float right, float bottom, float top, float nearClip, float farClip) +{ + float Xdelta, Ydelta, Zdelta; + + Xdelta = right - left; + Ydelta = top - bottom; + Zdelta = farClip - nearClip; + + if (Xdelta == 0.0 || Ydelta == 0.0 || Zdelta == 0.0) { + return; + } + mat[0][0] = nearClip * 2.0f/Xdelta; + mat[1][1] = nearClip * 2.0f/Ydelta; + mat[2][0] = (right + left)/Xdelta; /* note: negate Z */ + mat[2][1] = (top + bottom)/Ydelta; + mat[2][2] = -(farClip + nearClip)/Zdelta; + mat[2][3] = -1.0f; + mat[3][2] = (-2.0f * nearClip * farClip)/Zdelta; + mat[0][1] = mat[0][2] = mat[0][3] = + mat[1][0] = mat[1][2] = mat[1][3] = + mat[3][0] = mat[3][1] = mat[3][3] = 0.0; + +} + +static void i_multmatrix(float icand[][4], float Vm[][4]) +{ + int row, col; + float temp[4][4]; + + for(row=0 ; row<4 ; row++) + for(col=0 ; col<4 ; col++) + temp[row][col] = icand[row][0] * Vm[0][col] + + icand[row][1] * Vm[1][col] + + icand[row][2] * Vm[2][col] + + icand[row][3] * Vm[3][col]; + copy_m4_m4(Vm, temp); +} + + +void polarview_m4(float Vm[][4],float dist, float azimuth, float incidence, float twist) +{ + + unit_m4(Vm); + + translate_m4(Vm,0.0, 0.0, -dist); + rotate_m4(Vm,'z',-twist); + rotate_m4(Vm,'x',-incidence); + rotate_m4(Vm,'z',-azimuth); +} + +void lookat_m4(float mat[][4],float vx, float vy, float vz, float px, float py, float pz, float twist) +{ + float sine, cosine, hyp, hyp1, dx, dy, dz; + float mat1[4][4]; + + unit_m4(mat); + unit_m4(mat1); + + rotate_m4(mat,'z',-twist); + + dx = px - vx; + dy = py - vy; + dz = pz - vz; + hyp = dx * dx + dz * dz; /* hyp squared */ + hyp1 = (float)sqrt(dy*dy + hyp); + hyp = (float)sqrt(hyp); /* the real hyp */ + + if (hyp1 != 0.0) { /* rotate X */ + sine = -dy / hyp1; + cosine = hyp /hyp1; + } else { + sine = 0; + cosine = 1.0f; + } + mat1[1][1] = cosine; + mat1[1][2] = sine; + mat1[2][1] = -sine; + mat1[2][2] = cosine; + + i_multmatrix(mat1, mat); + + mat1[1][1] = mat1[2][2] = 1.0f; /* be careful here to reinit */ + mat1[1][2] = mat1[2][1] = 0.0; /* those modified by the last */ + + /* paragraph */ + if (hyp != 0.0f) { /* rotate Y */ + sine = dx / hyp; + cosine = -dz / hyp; + } else { + sine = 0; + cosine = 1.0f; + } + mat1[0][0] = cosine; + mat1[0][2] = -sine; + mat1[2][0] = sine; + mat1[2][2] = cosine; + + i_multmatrix(mat1, mat); + translate_m4(mat,-vx,-vy,-vz); /* translate viewpoint to origin */ +} + +/********************************** Mapping **********************************/ + +void map_to_tube(float *u, float *v,float x, float y, float z) +{ + float len; + + *v = (z + 1.0f) / 2.0f; + + len= (float)sqrt(x*x+y*y); + if(len > 0.0f) + *u = (float)((1.0 - (atan2(x/len,y/len) / M_PI)) / 2.0); + else + *v = *u = 0.0f; /* to avoid un-initialized variables */ +} + +void map_to_sphere(float *u, float *v,float x, float y, float z) +{ + float len; + + len= (float)sqrt(x*x+y*y+z*z); + if(len > 0.0f) { + if(x==0.0f && y==0.0f) *u= 0.0f; /* othwise domain error */ + else *u = (float)((1.0 - (float)atan2(x,y) / M_PI) / 2.0); + + z/=len; + *v = 1.0f - (float)saacos(z)/(float)M_PI; + } else { + *v = *u = 0.0f; /* to avoid un-initialized variables */ + } +} + +/********************************************************/ + +/* Tangents */ + +/* For normal map tangents we need to detect uv boundaries, and only average + * tangents in case the uvs are connected. Alternative would be to store 1 + * tangent per face rather than 4 per face vertex, but that's not compatible + * with games */ + + +/* from BKE_mesh.h */ +#define STD_UV_CONNECT_LIMIT 0.0001f + +void sum_or_add_vertex_tangent(void *arena, VertexTangent **vtang, float *tang, float *uv) +{ + VertexTangent *vt; + + /* find a tangent with connected uvs */ + for(vt= *vtang; vt; vt=vt->next) { + if(fabs(uv[0]-vt->uv[0]) < STD_UV_CONNECT_LIMIT && fabs(uv[1]-vt->uv[1]) < STD_UV_CONNECT_LIMIT) { + add_v3_v3v3(vt->tang, vt->tang, tang); + return; + } + } + + /* if not found, append a new one */ + vt= BLI_memarena_alloc((MemArena *)arena, sizeof(VertexTangent)); + copy_v3_v3(vt->tang, tang); + vt->uv[0]= uv[0]; + vt->uv[1]= uv[1]; + + if(*vtang) + vt->next= *vtang; + *vtang= vt; +} + +float *find_vertex_tangent(VertexTangent *vtang, float *uv) +{ + VertexTangent *vt; + static float nulltang[3] = {0.0f, 0.0f, 0.0f}; + + for(vt= vtang; vt; vt=vt->next) + if(fabs(uv[0]-vt->uv[0]) < STD_UV_CONNECT_LIMIT && fabs(uv[1]-vt->uv[1]) < STD_UV_CONNECT_LIMIT) + return vt->tang; + + return nulltang; /* shouldn't happen, except for nan or so */ +} + +void tangent_from_uv(float *uv1, float *uv2, float *uv3, float *co1, float *co2, float *co3, float *n, float *tang) +{ + float tangv[3], ct[3], e1[3], e2[3], s1, t1, s2, t2, det; + + s1= uv2[0] - uv1[0]; + s2= uv3[0] - uv1[0]; + t1= uv2[1] - uv1[1]; + t2= uv3[1] - uv1[1]; + det= 1.0f / (s1 * t2 - s2 * t1); + + /* normals in render are inversed... */ + sub_v3_v3v3(e1, co1, co2); + sub_v3_v3v3(e2, co1, co3); + tang[0] = (t2*e1[0] - t1*e2[0])*det; + tang[1] = (t2*e1[1] - t1*e2[1])*det; + tang[2] = (t2*e1[2] - t1*e2[2])*det; + tangv[0] = (s1*e2[0] - s2*e1[0])*det; + tangv[1] = (s1*e2[1] - s2*e1[1])*det; + tangv[2] = (s1*e2[2] - s2*e1[2])*det; + cross_v3_v3v3(ct, tang, tangv); + + /* check flip */ + if ((ct[0]*n[0] + ct[1]*n[1] + ct[2]*n[2]) < 0.0f) + negate_v3(tang); +} + diff --git a/source/blender/blenlib/intern/math_matrix.c b/source/blender/blenlib/intern/math_matrix.c new file mode 100644 index 00000000000..edab1cc2440 --- /dev/null +++ b/source/blender/blenlib/intern/math_matrix.c @@ -0,0 +1,1127 @@ +/* + * $Id$ + * + * ***** BEGIN GPL 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * The Original Code is: some of this file. + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#include <float.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "BLI_math.h" + +/********************************* Init **************************************/ + +void zero_m3(float m[3][3]) +{ + memset(m, 0, 3*3*sizeof(float)); +} + +void zero_m4(float m[4][4]) +{ + memset(m, 0, 4*4*sizeof(float)); +} + +void unit_m3(float m[][3]) +{ + m[0][0]= m[1][1]= m[2][2]= 1.0; + m[0][1]= m[0][2]= 0.0; + m[1][0]= m[1][2]= 0.0; + m[2][0]= m[2][1]= 0.0; +} + +void unit_m4(float m[][4]) +{ + m[0][0]= m[1][1]= m[2][2]= m[3][3]= 1.0; + m[0][1]= m[0][2]= m[0][3]= 0.0; + m[1][0]= m[1][2]= m[1][3]= 0.0; + m[2][0]= m[2][1]= m[2][3]= 0.0; + m[3][0]= m[3][1]= m[3][2]= 0.0; +} + +void copy_m3_m3(float m1[][3], float m2[][3]) +{ + /* destination comes first: */ + memcpy(&m1[0], &m2[0], 9*sizeof(float)); +} + +void copy_m4_m4(float m1[][4], float m2[][4]) +{ + memcpy(m1, m2, 4*4*sizeof(float)); +} + +void copy_m3_m4(float m1[][3], float m2[][4]) +{ + m1[0][0]= m2[0][0]; + m1[0][1]= m2[0][1]; + m1[0][2]= m2[0][2]; + + m1[1][0]= m2[1][0]; + m1[1][1]= m2[1][1]; + m1[1][2]= m2[1][2]; + + m1[2][0]= m2[2][0]; + m1[2][1]= m2[2][1]; + m1[2][2]= m2[2][2]; +} + +void copy_m4_m3(float m1[][4], float m2[][3]) /* no clear */ +{ + m1[0][0]= m2[0][0]; + m1[0][1]= m2[0][1]; + m1[0][2]= m2[0][2]; + + m1[1][0]= m2[1][0]; + m1[1][1]= m2[1][1]; + m1[1][2]= m2[1][2]; + + m1[2][0]= m2[2][0]; + m1[2][1]= m2[2][1]; + m1[2][2]= m2[2][2]; + + /* Reevan's Bugfix */ + m1[0][3]=0.0F; + m1[1][3]=0.0F; + m1[2][3]=0.0F; + + m1[3][0]=0.0F; + m1[3][1]=0.0F; + m1[3][2]=0.0F; + m1[3][3]=1.0F; + +} + +void swap_m4m4(float m1[][4], float m2[][4]) +{ + float t; + int i, j; + + for(i = 0; i < 4; i++) { + for (j = 0; j < 4; j++) { + t = m1[i][j]; + m1[i][j] = m2[i][j]; + m2[i][j] = t; + } + } +} + +/******************************** Arithmetic *********************************/ + +void mul_m4_m4m4(float m1[][4], float m2[][4], float m3[][4]) +{ + /* matrix product: m1[j][k] = m2[j][i].m3[i][k] */ + + m1[0][0] = m2[0][0]*m3[0][0] + m2[0][1]*m3[1][0] + m2[0][2]*m3[2][0] + m2[0][3]*m3[3][0]; + m1[0][1] = m2[0][0]*m3[0][1] + m2[0][1]*m3[1][1] + m2[0][2]*m3[2][1] + m2[0][3]*m3[3][1]; + m1[0][2] = m2[0][0]*m3[0][2] + m2[0][1]*m3[1][2] + m2[0][2]*m3[2][2] + m2[0][3]*m3[3][2]; + m1[0][3] = m2[0][0]*m3[0][3] + m2[0][1]*m3[1][3] + m2[0][2]*m3[2][3] + m2[0][3]*m3[3][3]; + + m1[1][0] = m2[1][0]*m3[0][0] + m2[1][1]*m3[1][0] + m2[1][2]*m3[2][0] + m2[1][3]*m3[3][0]; + m1[1][1] = m2[1][0]*m3[0][1] + m2[1][1]*m3[1][1] + m2[1][2]*m3[2][1] + m2[1][3]*m3[3][1]; + m1[1][2] = m2[1][0]*m3[0][2] + m2[1][1]*m3[1][2] + m2[1][2]*m3[2][2] + m2[1][3]*m3[3][2]; + m1[1][3] = m2[1][0]*m3[0][3] + m2[1][1]*m3[1][3] + m2[1][2]*m3[2][3] + m2[1][3]*m3[3][3]; + + m1[2][0] = m2[2][0]*m3[0][0] + m2[2][1]*m3[1][0] + m2[2][2]*m3[2][0] + m2[2][3]*m3[3][0]; + m1[2][1] = m2[2][0]*m3[0][1] + m2[2][1]*m3[1][1] + m2[2][2]*m3[2][1] + m2[2][3]*m3[3][1]; + m1[2][2] = m2[2][0]*m3[0][2] + m2[2][1]*m3[1][2] + m2[2][2]*m3[2][2] + m2[2][3]*m3[3][2]; + m1[2][3] = m2[2][0]*m3[0][3] + m2[2][1]*m3[1][3] + m2[2][2]*m3[2][3] + m2[2][3]*m3[3][3]; + + m1[3][0] = m2[3][0]*m3[0][0] + m2[3][1]*m3[1][0] + m2[3][2]*m3[2][0] + m2[3][3]*m3[3][0]; + m1[3][1] = m2[3][0]*m3[0][1] + m2[3][1]*m3[1][1] + m2[3][2]*m3[2][1] + m2[3][3]*m3[3][1]; + m1[3][2] = m2[3][0]*m3[0][2] + m2[3][1]*m3[1][2] + m2[3][2]*m3[2][2] + m2[3][3]*m3[3][2]; + m1[3][3] = m2[3][0]*m3[0][3] + m2[3][1]*m3[1][3] + m2[3][2]*m3[2][3] + m2[3][3]*m3[3][3]; + +} + +void mul_m3_m3m3(float m1[][3], float m3[][3], float m2[][3]) +{ + /* m1[i][j] = m2[i][k]*m3[k][j], args are flipped! */ + m1[0][0]= m2[0][0]*m3[0][0] + m2[0][1]*m3[1][0] + m2[0][2]*m3[2][0]; + m1[0][1]= m2[0][0]*m3[0][1] + m2[0][1]*m3[1][1] + m2[0][2]*m3[2][1]; + m1[0][2]= m2[0][0]*m3[0][2] + m2[0][1]*m3[1][2] + m2[0][2]*m3[2][2]; + + m1[1][0]= m2[1][0]*m3[0][0] + m2[1][1]*m3[1][0] + m2[1][2]*m3[2][0]; + m1[1][1]= m2[1][0]*m3[0][1] + m2[1][1]*m3[1][1] + m2[1][2]*m3[2][1]; + m1[1][2]= m2[1][0]*m3[0][2] + m2[1][1]*m3[1][2] + m2[1][2]*m3[2][2]; + + m1[2][0]= m2[2][0]*m3[0][0] + m2[2][1]*m3[1][0] + m2[2][2]*m3[2][0]; + m1[2][1]= m2[2][0]*m3[0][1] + m2[2][1]*m3[1][1] + m2[2][2]*m3[2][1]; + m1[2][2]= m2[2][0]*m3[0][2] + m2[2][1]*m3[1][2] + m2[2][2]*m3[2][2]; +} + +void mul_m4_m4m3(float (*m1)[4], float (*m3)[4], float (*m2)[3]) +{ + m1[0][0]= m2[0][0]*m3[0][0] + m2[0][1]*m3[1][0] + m2[0][2]*m3[2][0]; + m1[0][1]= m2[0][0]*m3[0][1] + m2[0][1]*m3[1][1] + m2[0][2]*m3[2][1]; + m1[0][2]= m2[0][0]*m3[0][2] + m2[0][1]*m3[1][2] + m2[0][2]*m3[2][2]; + m1[1][0]= m2[1][0]*m3[0][0] + m2[1][1]*m3[1][0] + m2[1][2]*m3[2][0]; + m1[1][1]= m2[1][0]*m3[0][1] + m2[1][1]*m3[1][1] + m2[1][2]*m3[2][1]; + m1[1][2]= m2[1][0]*m3[0][2] + m2[1][1]*m3[1][2] + m2[1][2]*m3[2][2]; + m1[2][0]= m2[2][0]*m3[0][0] + m2[2][1]*m3[1][0] + m2[2][2]*m3[2][0]; + m1[2][1]= m2[2][0]*m3[0][1] + m2[2][1]*m3[1][1] + m2[2][2]*m3[2][1]; + m1[2][2]= m2[2][0]*m3[0][2] + m2[2][1]*m3[1][2] + m2[2][2]*m3[2][2]; +} + +/* m1 = m2 * m3, ignore the elements on the 4th row/column of m3*/ +void mul_m3_m3m4(float m1[][3], float m2[][3], float m3[][4]) +{ + /* m1[i][j] = m2[i][k] * m3[k][j] */ + m1[0][0] = m2[0][0] * m3[0][0] + m2[0][1] * m3[1][0] +m2[0][2] * m3[2][0]; + m1[0][1] = m2[0][0] * m3[0][1] + m2[0][1] * m3[1][1] +m2[0][2] * m3[2][1]; + m1[0][2] = m2[0][0] * m3[0][2] + m2[0][1] * m3[1][2] +m2[0][2] * m3[2][2]; + + m1[1][0] = m2[1][0] * m3[0][0] + m2[1][1] * m3[1][0] +m2[1][2] * m3[2][0]; + m1[1][1] = m2[1][0] * m3[0][1] + m2[1][1] * m3[1][1] +m2[1][2] * m3[2][1]; + m1[1][2] = m2[1][0] * m3[0][2] + m2[1][1] * m3[1][2] +m2[1][2] * m3[2][2]; + + m1[2][0] = m2[2][0] * m3[0][0] + m2[2][1] * m3[1][0] +m2[2][2] * m3[2][0]; + m1[2][1] = m2[2][0] * m3[0][1] + m2[2][1] * m3[1][1] +m2[2][2] * m3[2][1]; + m1[2][2] = m2[2][0] * m3[0][2] + m2[2][1] * m3[1][2] +m2[2][2] * m3[2][2]; +} + +void mul_m4_m3m4(float (*m1)[4], float (*m3)[3], float (*m2)[4]) +{ + m1[0][0]= m2[0][0]*m3[0][0] + m2[0][1]*m3[1][0] + m2[0][2]*m3[2][0]; + m1[0][1]= m2[0][0]*m3[0][1] + m2[0][1]*m3[1][1] + m2[0][2]*m3[2][1]; + m1[0][2]= m2[0][0]*m3[0][2] + m2[0][1]*m3[1][2] + m2[0][2]*m3[2][2]; + m1[1][0]= m2[1][0]*m3[0][0] + m2[1][1]*m3[1][0] + m2[1][2]*m3[2][0]; + m1[1][1]= m2[1][0]*m3[0][1] + m2[1][1]*m3[1][1] + m2[1][2]*m3[2][1]; + m1[1][2]= m2[1][0]*m3[0][2] + m2[1][1]*m3[1][2] + m2[1][2]*m3[2][2]; + m1[2][0]= m2[2][0]*m3[0][0] + m2[2][1]*m3[1][0] + m2[2][2]*m3[2][0]; + m1[2][1]= m2[2][0]*m3[0][1] + m2[2][1]*m3[1][1] + m2[2][2]*m3[2][1]; + m1[2][2]= m2[2][0]*m3[0][2] + m2[2][1]*m3[1][2] + m2[2][2]*m3[2][2]; +} + +void mul_serie_m3(float answ[][3], + float m1[][3], float m2[][3], float m3[][3], + float m4[][3], float m5[][3], float m6[][3], + float m7[][3], float m8[][3]) +{ + float temp[3][3]; + + if(m1==0 || m2==0) return; + + mul_m3_m3m3(answ, m2, m1); + if(m3) { + mul_m3_m3m3(temp, m3, answ); + if(m4) { + mul_m3_m3m3(answ, m4, temp); + if(m5) { + mul_m3_m3m3(temp, m5, answ); + if(m6) { + mul_m3_m3m3(answ, m6, temp); + if(m7) { + mul_m3_m3m3(temp, m7, answ); + if(m8) { + mul_m3_m3m3(answ, m8, temp); + } + else copy_m3_m3(answ, temp); + } + } + else copy_m3_m3(answ, temp); + } + } + else copy_m3_m3(answ, temp); + } +} + +void mul_serie_m4(float answ[][4], float m1[][4], + float m2[][4], float m3[][4], float m4[][4], + float m5[][4], float m6[][4], float m7[][4], + float m8[][4]) +{ + float temp[4][4]; + + if(m1==0 || m2==0) return; + + mul_m4_m4m4(answ, m2, m1); + if(m3) { + mul_m4_m4m4(temp, m3, answ); + if(m4) { + mul_m4_m4m4(answ, m4, temp); + if(m5) { + mul_m4_m4m4(temp, m5, answ); + if(m6) { + mul_m4_m4m4(answ, m6, temp); + if(m7) { + mul_m4_m4m4(temp, m7, answ); + if(m8) { + mul_m4_m4m4(answ, m8, temp); + } + else copy_m4_m4(answ, temp); + } + } + else copy_m4_m4(answ, temp); + } + } + else copy_m4_m4(answ, temp); + } +} + +void mul_m4_v3(float mat[][4], float *vec) +{ + float x,y; + + x=vec[0]; + y=vec[1]; + vec[0]=x*mat[0][0] + y*mat[1][0] + mat[2][0]*vec[2] + mat[3][0]; + vec[1]=x*mat[0][1] + y*mat[1][1] + mat[2][1]*vec[2] + mat[3][1]; + vec[2]=x*mat[0][2] + y*mat[1][2] + mat[2][2]*vec[2] + mat[3][2]; +} + +void mul_v3_m4v3(float *in, float mat[][4], float *vec) +{ + float x,y; + + x=vec[0]; + y=vec[1]; + in[0]= x*mat[0][0] + y*mat[1][0] + mat[2][0]*vec[2] + mat[3][0]; + in[1]= x*mat[0][1] + y*mat[1][1] + mat[2][1]*vec[2] + mat[3][1]; + in[2]= x*mat[0][2] + y*mat[1][2] + mat[2][2]*vec[2] + mat[3][2]; +} + +void mul_mat3_m4_v3(float mat[][4], float *vec) +{ + float x,y; + + x= vec[0]; + y= vec[1]; + vec[0]= x*mat[0][0] + y*mat[1][0] + mat[2][0]*vec[2]; + vec[1]= x*mat[0][1] + y*mat[1][1] + mat[2][1]*vec[2]; + vec[2]= x*mat[0][2] + y*mat[1][2] + mat[2][2]*vec[2]; +} + +void mul_project_m4_v4(float mat[][4], float *vec) +{ + float w; + + w = vec[0]*mat[0][3] + vec[1]*mat[1][3] + vec[2]*mat[2][3] + mat[3][3]; + mul_m4_v3(mat, vec); + + vec[0] /= w; + vec[1] /= w; + vec[2] /= w; +} + +void mul_m4_v4(float mat[][4], float *vec) +{ + float x,y,z; + + x=vec[0]; + y=vec[1]; + z= vec[2]; + vec[0]=x*mat[0][0] + y*mat[1][0] + z*mat[2][0] + mat[3][0]*vec[3]; + vec[1]=x*mat[0][1] + y*mat[1][1] + z*mat[2][1] + mat[3][1]*vec[3]; + vec[2]=x*mat[0][2] + y*mat[1][2] + z*mat[2][2] + mat[3][2]*vec[3]; + vec[3]=x*mat[0][3] + y*mat[1][3] + z*mat[2][3] + mat[3][3]*vec[3]; +} + +void mul_m3_v3(float mat[][3], float *vec) +{ + float x,y; + + x=vec[0]; + y=vec[1]; + vec[0]= x*mat[0][0] + y*mat[1][0] + mat[2][0]*vec[2]; + vec[1]= x*mat[0][1] + y*mat[1][1] + mat[2][1]*vec[2]; + vec[2]= x*mat[0][2] + y*mat[1][2] + mat[2][2]*vec[2]; +} + +void mul_transposed_m3_v3(float mat[][3], float *vec) +{ + float x,y; + + x=vec[0]; + y=vec[1]; + vec[0]= x*mat[0][0] + y*mat[0][1] + mat[0][2]*vec[2]; + vec[1]= x*mat[1][0] + y*mat[1][1] + mat[1][2]*vec[2]; + vec[2]= x*mat[2][0] + y*mat[2][1] + mat[2][2]*vec[2]; +} + +void mul_m3_fl(float m[3][3], float f) +{ + int i, j; + + for(i=0;i<3;i++) + for(j=0;j<3;j++) + m[i][j] *= f; +} + +void mul_m4_fl(float m[4][4], float f) +{ + int i, j; + + for(i=0;i<4;i++) + for(j=0;j<4;j++) + m[i][j] *= f; +} + +void mul_mat3_m4_fl(float m[4][4], float f) +{ + int i, j; + + for(i=0; i<3; i++) + for(j=0; j<3; j++) + m[i][j] *= f; +} + +void mul_m3_v3_double(float mat[][3], double *vec) +{ + double x,y; + + x=vec[0]; + y=vec[1]; + vec[0]= x*mat[0][0] + y*mat[1][0] + mat[2][0]*vec[2]; + vec[1]= x*mat[0][1] + y*mat[1][1] + mat[2][1]*vec[2]; + vec[2]= x*mat[0][2] + y*mat[1][2] + mat[2][2]*vec[2]; +} + +void add_m3_m3m3(float m1[][3], float m2[][3], float m3[][3]) +{ + int i, j; + + for(i=0;i<3;i++) + for(j=0;j<3;j++) + m1[i][j]= m2[i][j] + m3[i][j]; +} + +void add_m4_m4m4(float m1[][4], float m2[][4], float m3[][4]) +{ + int i, j; + + for(i=0;i<4;i++) + for(j=0;j<4;j++) + m1[i][j]= m2[i][j] + m3[i][j]; +} + +int invert_m3(float m[3][3]) +{ + float tmp[3][3]; + int success; + + success= invert_m3_m3(tmp, m); + copy_m3_m3(m, tmp); + + return success; +} + +int invert_m3_m3(float m1[3][3], float m2[3][3]) +{ + float det; + int a, b, success; + + /* calc adjoint */ + adjoint_m3_m3(m1,m2); + + /* then determinant old matrix! */ + det= m2[0][0]* (m2[1][1]*m2[2][2] - m2[1][2]*m2[2][1]) + -m2[1][0]* (m2[0][1]*m2[2][2] - m2[0][2]*m2[2][1]) + +m2[2][0]* (m2[0][1]*m2[1][2] - m2[0][2]*m2[1][1]); + + success= (det != 0); + + if(det==0) det=1; + det= 1/det; + for(a=0;a<3;a++) { + for(b=0;b<3;b++) { + m1[a][b]*=det; + } + } + + return success; +} + +int invert_m4(float m[4][4]) +{ + float tmp[4][4]; + int success; + + success= invert_m4_m4(tmp, m); + copy_m4_m4(m, tmp); + + return success; +} + +/* + * invertmat - + * computes the inverse of mat and puts it in inverse. Returns + * TRUE on success (i.e. can always find a pivot) and FALSE on failure. + * Uses Gaussian Elimination with partial (maximal column) pivoting. + * + * Mark Segal - 1992 + */ + +int invert_m4_m4(float inverse[4][4], float mat[4][4]) +{ + int i, j, k; + double temp; + float tempmat[4][4]; + float max; + int maxj; + + /* Set inverse to identity */ + for (i=0; i<4; i++) + for (j=0; j<4; j++) + inverse[i][j] = 0; + for (i=0; i<4; i++) + inverse[i][i] = 1; + + /* Copy original matrix so we don't mess it up */ + for(i = 0; i < 4; i++) + for(j = 0; j <4; j++) + tempmat[i][j] = mat[i][j]; + + for(i = 0; i < 4; i++) { + /* Look for row with max pivot */ + max = fabs(tempmat[i][i]); + maxj = i; + for(j = i + 1; j < 4; j++) { + if(fabs(tempmat[j][i]) > max) { + max = fabs(tempmat[j][i]); + maxj = j; + } + } + /* Swap rows if necessary */ + if (maxj != i) { + for(k = 0; k < 4; k++) { + SWAP(float, tempmat[i][k], tempmat[maxj][k]); + SWAP(float, inverse[i][k], inverse[maxj][k]); + } + } + + temp = tempmat[i][i]; + if (temp == 0) + return 0; /* No non-zero pivot */ + for(k = 0; k < 4; k++) { + tempmat[i][k] = (float)(tempmat[i][k]/temp); + inverse[i][k] = (float)(inverse[i][k]/temp); + } + for(j = 0; j < 4; j++) { + if(j != i) { + temp = tempmat[j][i]; + for(k = 0; k < 4; k++) { + tempmat[j][k] -= (float)(tempmat[i][k]*temp); + inverse[j][k] -= (float)(inverse[i][k]*temp); + } + } + } + } + return 1; +} + +/****************************** Linear Algebra *******************************/ + +void transpose_m3(float mat[][3]) +{ + float t; + + t = mat[0][1] ; + mat[0][1] = mat[1][0] ; + mat[1][0] = t; + t = mat[0][2] ; + mat[0][2] = mat[2][0] ; + mat[2][0] = t; + t = mat[1][2] ; + mat[1][2] = mat[2][1] ; + mat[2][1] = t; +} + +void transpose_m4(float mat[][4]) +{ + float t; + + t = mat[0][1] ; + mat[0][1] = mat[1][0] ; + mat[1][0] = t; + t = mat[0][2] ; + mat[0][2] = mat[2][0] ; + mat[2][0] = t; + t = mat[0][3] ; + mat[0][3] = mat[3][0] ; + mat[3][0] = t; + + t = mat[1][2] ; + mat[1][2] = mat[2][1] ; + mat[2][1] = t; + t = mat[1][3] ; + mat[1][3] = mat[3][1] ; + mat[3][1] = t; + + t = mat[2][3] ; + mat[2][3] = mat[3][2] ; + mat[3][2] = t; +} + +void orthogonalize_m3(float mat[][3], int axis) +{ + float size[3]; + size[0] = len_v3(mat[0]); + size[1] = len_v3(mat[1]); + size[2] = len_v3(mat[2]); + normalize_v3(mat[axis]); + switch(axis) + { + case 0: + if (dot_v3v3(mat[0], mat[1]) < 1) { + cross_v3_v3v3(mat[2], mat[0], mat[1]); + normalize_v3(mat[2]); + cross_v3_v3v3(mat[1], mat[2], mat[0]); + } else if (dot_v3v3(mat[0], mat[2]) < 1) { + cross_v3_v3v3(mat[1], mat[2], mat[0]); + normalize_v3(mat[1]); + cross_v3_v3v3(mat[2], mat[0], mat[1]); + } else { + float vec[3] = {mat[0][1], mat[0][2], mat[0][0]}; + + cross_v3_v3v3(mat[2], mat[0], vec); + normalize_v3(mat[2]); + cross_v3_v3v3(mat[1], mat[2], mat[0]); + } + case 1: + if (dot_v3v3(mat[1], mat[0]) < 1) { + cross_v3_v3v3(mat[2], mat[0], mat[1]); + normalize_v3(mat[2]); + cross_v3_v3v3(mat[0], mat[1], mat[2]); + } else if (dot_v3v3(mat[0], mat[2]) < 1) { + cross_v3_v3v3(mat[0], mat[1], mat[2]); + normalize_v3(mat[0]); + cross_v3_v3v3(mat[2], mat[0], mat[1]); + } else { + float vec[3] = {mat[1][1], mat[1][2], mat[1][0]}; + + cross_v3_v3v3(mat[0], mat[1], vec); + normalize_v3(mat[0]); + cross_v3_v3v3(mat[2], mat[0], mat[1]); + } + case 2: + if (dot_v3v3(mat[2], mat[0]) < 1) { + cross_v3_v3v3(mat[1], mat[2], mat[0]); + normalize_v3(mat[1]); + cross_v3_v3v3(mat[0], mat[1], mat[2]); + } else if (dot_v3v3(mat[2], mat[1]) < 1) { + cross_v3_v3v3(mat[0], mat[1], mat[2]); + normalize_v3(mat[0]); + cross_v3_v3v3(mat[1], mat[2], mat[0]); + } else { + float vec[3] = {mat[2][1], mat[2][2], mat[2][0]}; + + cross_v3_v3v3(mat[0], vec, mat[2]); + normalize_v3(mat[0]); + cross_v3_v3v3(mat[1], mat[2], mat[0]); + } + } + mul_v3_fl(mat[0], size[0]); + mul_v3_fl(mat[1], size[1]); + mul_v3_fl(mat[2], size[2]); +} + +void orthogonalize_m4(float mat[][4], int axis) +{ + float size[3]; + size[0] = len_v3(mat[0]); + size[1] = len_v3(mat[1]); + size[2] = len_v3(mat[2]); + normalize_v3(mat[axis]); + switch(axis) + { + case 0: + if (dot_v3v3(mat[0], mat[1]) < 1) { + cross_v3_v3v3(mat[2], mat[0], mat[1]); + normalize_v3(mat[2]); + cross_v3_v3v3(mat[1], mat[2], mat[0]); + } else if (dot_v3v3(mat[0], mat[2]) < 1) { + cross_v3_v3v3(mat[1], mat[2], mat[0]); + normalize_v3(mat[1]); + cross_v3_v3v3(mat[2], mat[0], mat[1]); + } else { + float vec[3] = {mat[0][1], mat[0][2], mat[0][0]}; + + cross_v3_v3v3(mat[2], mat[0], vec); + normalize_v3(mat[2]); + cross_v3_v3v3(mat[1], mat[2], mat[0]); + } + case 1: + normalize_v3(mat[0]); + if (dot_v3v3(mat[1], mat[0]) < 1) { + cross_v3_v3v3(mat[2], mat[0], mat[1]); + normalize_v3(mat[2]); + cross_v3_v3v3(mat[0], mat[1], mat[2]); + } else if (dot_v3v3(mat[0], mat[2]) < 1) { + cross_v3_v3v3(mat[0], mat[1], mat[2]); + normalize_v3(mat[0]); + cross_v3_v3v3(mat[2], mat[0], mat[1]); + } else { + float vec[3] = {mat[1][1], mat[1][2], mat[1][0]}; + + cross_v3_v3v3(mat[0], mat[1], vec); + normalize_v3(mat[0]); + cross_v3_v3v3(mat[2], mat[0], mat[1]); + } + case 2: + if (dot_v3v3(mat[2], mat[0]) < 1) { + cross_v3_v3v3(mat[1], mat[2], mat[0]); + normalize_v3(mat[1]); + cross_v3_v3v3(mat[0], mat[1], mat[2]); + } else if (dot_v3v3(mat[2], mat[1]) < 1) { + cross_v3_v3v3(mat[0], mat[1], mat[2]); + normalize_v3(mat[0]); + cross_v3_v3v3(mat[1], mat[2], mat[0]); + } else { + float vec[3] = {mat[2][1], mat[2][2], mat[2][0]}; + + cross_v3_v3v3(mat[0], vec, mat[2]); + normalize_v3(mat[0]); + cross_v3_v3v3(mat[1], mat[2], mat[0]); + } + } + mul_v3_fl(mat[0], size[0]); + mul_v3_fl(mat[1], size[1]); + mul_v3_fl(mat[2], size[2]); +} + +int is_orthogonal_m3(float mat[][3]) +{ + if (fabs(dot_v3v3(mat[0], mat[1])) > 1.5 * FLT_EPSILON) + return 0; + + if (fabs(dot_v3v3(mat[1], mat[2])) > 1.5 * FLT_EPSILON) + return 0; + + if (fabs(dot_v3v3(mat[0], mat[2])) > 1.5 * FLT_EPSILON) + return 0; + + return 1; +} + +int is_orthogonal_m4(float mat[][4]) +{ + if (fabs(dot_v3v3(mat[0], mat[1])) > 1.5 * FLT_EPSILON) + return 0; + + if (fabs(dot_v3v3(mat[1], mat[2])) > 1.5 * FLT_EPSILON) + return 0; + + if (fabs(dot_v3v3(mat[0], mat[2])) > 1.5 * FLT_EPSILON) + return 0; + + return 1; +} + +void normalize_m3(float mat[][3]) +{ + normalize_v3(mat[0]); + normalize_v3(mat[1]); + normalize_v3(mat[2]); +} + +void normalize_m4(float mat[][4]) +{ + float len; + + len= normalize_v3(mat[0]); + if(len!=0.0) mat[0][3]/= len; + len= normalize_v3(mat[1]); + if(len!=0.0) mat[1][3]/= len; + len= normalize_v3(mat[2]); + if(len!=0.0) mat[2][3]/= len; +} + +void adjoint_m3_m3(float m1[][3], float m[][3]) +{ + m1[0][0]=m[1][1]*m[2][2]-m[1][2]*m[2][1]; + m1[0][1]= -m[0][1]*m[2][2]+m[0][2]*m[2][1]; + m1[0][2]=m[0][1]*m[1][2]-m[0][2]*m[1][1]; + + m1[1][0]= -m[1][0]*m[2][2]+m[1][2]*m[2][0]; + m1[1][1]=m[0][0]*m[2][2]-m[0][2]*m[2][0]; + m1[1][2]= -m[0][0]*m[1][2]+m[0][2]*m[1][0]; + + m1[2][0]=m[1][0]*m[2][1]-m[1][1]*m[2][0]; + m1[2][1]= -m[0][0]*m[2][1]+m[0][1]*m[2][0]; + m1[2][2]=m[0][0]*m[1][1]-m[0][1]*m[1][0]; +} + +void adjoint_m4_m4(float out[][4], float in[][4]) /* out = ADJ(in) */ +{ + float a1, a2, a3, a4, b1, b2, b3, b4; + float c1, c2, c3, c4, d1, d2, d3, d4; + + a1= in[0][0]; + b1= in[0][1]; + c1= in[0][2]; + d1= in[0][3]; + + a2= in[1][0]; + b2= in[1][1]; + c2= in[1][2]; + d2= in[1][3]; + + a3= in[2][0]; + b3= in[2][1]; + c3= in[2][2]; + d3= in[2][3]; + + a4= in[3][0]; + b4= in[3][1]; + c4= in[3][2]; + d4= in[3][3]; + + + out[0][0] = determinant_m3(b2, b3, b4, c2, c3, c4, d2, d3, d4); + out[1][0] = - determinant_m3(a2, a3, a4, c2, c3, c4, d2, d3, d4); + out[2][0] = determinant_m3(a2, a3, a4, b2, b3, b4, d2, d3, d4); + out[3][0] = - determinant_m3(a2, a3, a4, b2, b3, b4, c2, c3, c4); + + out[0][1] = - determinant_m3(b1, b3, b4, c1, c3, c4, d1, d3, d4); + out[1][1] = determinant_m3(a1, a3, a4, c1, c3, c4, d1, d3, d4); + out[2][1] = - determinant_m3(a1, a3, a4, b1, b3, b4, d1, d3, d4); + out[3][1] = determinant_m3(a1, a3, a4, b1, b3, b4, c1, c3, c4); + + out[0][2] = determinant_m3(b1, b2, b4, c1, c2, c4, d1, d2, d4); + out[1][2] = - determinant_m3(a1, a2, a4, c1, c2, c4, d1, d2, d4); + out[2][2] = determinant_m3(a1, a2, a4, b1, b2, b4, d1, d2, d4); + out[3][2] = - determinant_m3(a1, a2, a4, b1, b2, b4, c1, c2, c4); + + out[0][3] = - determinant_m3(b1, b2, b3, c1, c2, c3, d1, d2, d3); + out[1][3] = determinant_m3(a1, a2, a3, c1, c2, c3, d1, d2, d3); + out[2][3] = - determinant_m3(a1, a2, a3, b1, b2, b3, d1, d2, d3); + out[3][3] = determinant_m3(a1, a2, a3, b1, b2, b3, c1, c2, c3); +} + +float determinant_m2(float a,float b,float c,float d) +{ + + return a*d - b*c; +} + +float determinant_m3(float a1, float a2, float a3, + float b1, float b2, float b3, + float c1, float c2, float c3) +{ + float ans; + + ans = a1 * determinant_m2(b2, b3, c2, c3) + - b1 * determinant_m2(a2, a3, c2, c3) + + c1 * determinant_m2(a2, a3, b2, b3); + + return ans; +} + +float determinant_m4(float m[][4]) +{ + float ans; + float a1,a2,a3,a4,b1,b2,b3,b4,c1,c2,c3,c4,d1,d2,d3,d4; + + a1= m[0][0]; + b1= m[0][1]; + c1= m[0][2]; + d1= m[0][3]; + + a2= m[1][0]; + b2= m[1][1]; + c2= m[1][2]; + d2= m[1][3]; + + a3= m[2][0]; + b3= m[2][1]; + c3= m[2][2]; + d3= m[2][3]; + + a4= m[3][0]; + b4= m[3][1]; + c4= m[3][2]; + d4= m[3][3]; + + ans = a1 * determinant_m3(b2, b3, b4, c2, c3, c4, d2, d3, d4) + - b1 * determinant_m3(a2, a3, a4, c2, c3, c4, d2, d3, d4) + + c1 * determinant_m3(a2, a3, a4, b2, b3, b4, d2, d3, d4) + - d1 * determinant_m3(a2, a3, a4, b2, b3, b4, c2, c3, c4); + + return ans; +} + +/****************************** Transformations ******************************/ + +void size_to_mat3(float mat[][3], float *size) +{ + mat[0][0]= size[0]; + mat[0][1]= 0.0f; + mat[0][2]= 0.0f; + mat[1][1]= size[1]; + mat[1][0]= 0.0f; + mat[1][2]= 0.0f; + mat[2][2]= size[2]; + mat[2][1]= 0.0f; + mat[2][0]= 0.0f; +} + +void size_to_mat4(float mat[][4], float *size) +{ + float tmat[3][3]; + + size_to_mat3(tmat,size); + unit_m4(mat); + copy_m4_m3(mat, tmat); +} + +void mat3_to_size(float *size, float mat[][3]) +{ + size[0]= len_v3(mat[0]); + size[1]= len_v3(mat[1]); + size[2]= len_v3(mat[2]); +} + +void mat4_to_size(float *size, float mat[][4]) +{ + size[0]= len_v3(mat[0]); + size[1]= len_v3(mat[1]); + size[2]= len_v3(mat[2]); +} + +/* this gets the average scale of a matrix, only use when your scaling + * data that has no idea of scale axis, examples are bone-envelope-radius + * and curve radius */ +float mat3_to_scale(float mat[][3]) +{ + /* unit length vector */ + float unit_vec[3] = {0.577350269189626f, 0.577350269189626f, 0.577350269189626f}; + mul_m3_v3(mat, unit_vec); + return len_v3(unit_vec); +} + +float mat4_to_scale(float mat[][4]) +{ + float tmat[3][3]; + copy_m3_m4(tmat, mat); + return mat3_to_scale(tmat); +} + +void scale_m3_fl(float m[][3], float scale) +{ + m[0][0]= m[1][1]= m[2][2]= scale; + m[0][1]= m[0][2]= 0.0; + m[1][0]= m[1][2]= 0.0; + m[2][0]= m[2][1]= 0.0; +} + +void scale_m4_fl(float m[][4], float scale) +{ + m[0][0]= m[1][1]= m[2][2]= scale; + m[3][3]= 1.0; + m[0][1]= m[0][2]= m[0][3]= 0.0; + m[1][0]= m[1][2]= m[1][3]= 0.0; + m[2][0]= m[2][1]= m[2][3]= 0.0; + m[3][0]= m[3][1]= m[3][2]= 0.0; +} + +void translate_m4(float mat[][4],float Tx, float Ty, float Tz) +{ + mat[3][0] += (Tx*mat[0][0] + Ty*mat[1][0] + Tz*mat[2][0]); + mat[3][1] += (Tx*mat[0][1] + Ty*mat[1][1] + Tz*mat[2][1]); + mat[3][2] += (Tx*mat[0][2] + Ty*mat[1][2] + Tz*mat[2][2]); +} + +void rotate_m4(float mat[][4], char axis,float angle) +{ + int col; + float temp[4]; + float cosine, sine; + + for(col=0; col<4 ; col++) /* init temp to zero matrix */ + temp[col] = 0; + + angle = (float)(angle*(3.1415926535/180.0)); + cosine = (float)cos(angle); + sine = (float)sin(angle); + switch(axis){ + case 'x': + case 'X': + for(col=0 ; col<4 ; col++) + temp[col] = cosine*mat[1][col] + sine*mat[2][col]; + for(col=0 ; col<4 ; col++) { + mat[2][col] = - sine*mat[1][col] + cosine*mat[2][col]; + mat[1][col] = temp[col]; + } + break; + + case 'y': + case 'Y': + for(col=0 ; col<4 ; col++) + temp[col] = cosine*mat[0][col] - sine*mat[2][col]; + for(col=0 ; col<4 ; col++) { + mat[2][col] = sine*mat[0][col] + cosine*mat[2][col]; + mat[0][col] = temp[col]; + } + break; + + case 'z': + case 'Z': + for(col=0 ; col<4 ; col++) + temp[col] = cosine*mat[0][col] + sine*mat[1][col]; + for(col=0 ; col<4 ; col++) { + mat[1][col] = - sine*mat[0][col] + cosine*mat[1][col]; + mat[0][col] = temp[col]; + } + break; + } +} + +void blend_m3_m3m3(float out[][3], float dst[][3], float src[][3], float srcweight) +{ + float squat[4], dquat[4], fquat[4]; + float ssize[3], dsize[3], fsize[4]; + float rmat[3][3], smat[3][3]; + + mat3_to_quat(dquat,dst); + mat3_to_size(dsize,dst); + + mat3_to_quat(squat,src); + mat3_to_size(ssize,src); + + /* do blending */ + interp_qt_qtqt(fquat, dquat, squat, srcweight); + interp_v3_v3v3(fsize, dsize, ssize, srcweight); + + /* compose new matrix */ + quat_to_mat3(rmat,fquat); + size_to_mat3(smat,fsize); + mul_m3_m3m3(out, rmat, smat); +} + +void blend_m4_m4m4(float out[][4], float dst[][4], float src[][4], float srcweight) +{ + float squat[4], dquat[4], fquat[4]; + float ssize[3], dsize[3], fsize[4]; + float sloc[3], dloc[3], floc[3]; + + mat4_to_quat(dquat,dst); + mat4_to_size(dsize,dst); + copy_v3_v3(dloc, dst[3]); + + mat4_to_quat(squat,src); + mat4_to_size(ssize,src); + copy_v3_v3(sloc, src[3]); + + /* do blending */ + interp_v3_v3v3(floc, dloc, sloc, srcweight); + interp_qt_qtqt(fquat, dquat, squat, srcweight); + interp_v3_v3v3(fsize, dsize, ssize, srcweight); + + /* compose new matrix */ + loc_quat_size_to_mat4(out, floc, fquat, fsize); +} + +/* make a 4x4 matrix out of 3 transform components */ +/* matrices are made in the order: scale * rot * loc */ +// TODO: need to have a version that allows for rotation order... +void loc_eul_size_to_mat4(float mat[4][4], float loc[3], float eul[3], float size[3]) +{ + float rmat[3][3], smat[3][3], tmat[3][3]; + + /* initialise new matrix */ + unit_m4(mat); + + /* make rotation + scaling part */ + eul_to_mat3(rmat,eul); + size_to_mat3(smat,size); + mul_m3_m3m3(tmat, rmat, smat); + + /* copy rot/scale part to output matrix*/ + copy_m4_m3(mat, tmat); + + /* copy location to matrix */ + mat[3][0] = loc[0]; + mat[3][1] = loc[1]; + mat[3][2] = loc[2]; +} + +/* make a 4x4 matrix out of 3 transform components */ +/* matrices are made in the order: scale * rot * loc */ +void loc_eulO_size_to_mat4(float mat[4][4], float loc[3], float eul[3], float size[3], short rotOrder) +{ + float rmat[3][3], smat[3][3], tmat[3][3]; + + /* initialise new matrix */ + unit_m4(mat); + + /* make rotation + scaling part */ + eulO_to_mat3(rmat,eul, rotOrder); + size_to_mat3(smat,size); + mul_m3_m3m3(tmat, rmat, smat); + + /* copy rot/scale part to output matrix*/ + copy_m4_m3(mat, tmat); + + /* copy location to matrix */ + mat[3][0] = loc[0]; + mat[3][1] = loc[1]; + mat[3][2] = loc[2]; +} + + +/* make a 4x4 matrix out of 3 transform components */ +/* matrices are made in the order: scale * rot * loc */ +void loc_quat_size_to_mat4(float mat[4][4], float loc[3], float quat[4], float size[3]) +{ + float rmat[3][3], smat[3][3], tmat[3][3]; + + /* initialise new matrix */ + unit_m4(mat); + + /* make rotation + scaling part */ + quat_to_mat3(rmat,quat); + size_to_mat3(smat,size); + mul_m3_m3m3(tmat, rmat, smat); + + /* copy rot/scale part to output matrix*/ + copy_m4_m3(mat, tmat); + + /* copy location to matrix */ + mat[3][0] = loc[0]; + mat[3][1] = loc[1]; + mat[3][2] = loc[2]; +} + +/*********************************** Other ***********************************/ + +void print_m3(char *str, float m[][3]) +{ + printf("%s\n", str); + printf("%f %f %f\n",m[0][0],m[1][0],m[2][0]); + printf("%f %f %f\n",m[0][1],m[1][1],m[2][1]); + printf("%f %f %f\n",m[0][2],m[1][2],m[2][2]); + printf("\n"); +} + +void print_m4(char *str, float m[][4]) +{ + printf("%s\n", str); + printf("%f %f %f %f\n",m[0][0],m[1][0],m[2][0],m[3][0]); + printf("%f %f %f %f\n",m[0][1],m[1][1],m[2][1],m[3][1]); + printf("%f %f %f %f\n",m[0][2],m[1][2],m[2][2],m[3][2]); + printf("%f %f %f %f\n",m[0][3],m[1][3],m[2][3],m[3][3]); + printf("\n"); +} + diff --git a/source/blender/blenlib/intern/math_rotation.c b/source/blender/blenlib/intern/math_rotation.c new file mode 100644 index 00000000000..084db725409 --- /dev/null +++ b/source/blender/blenlib/intern/math_rotation.c @@ -0,0 +1,1502 @@ +/** + * $Id$ + * + * ***** BEGIN GPL 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + + * The Original Code is: some of this file. + * + * ***** END GPL LICENSE BLOCK ***** + * */ + +#include <float.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "BLI_math.h" + +/******************************** Quaternions ********************************/ + +void unit_qt(float *q) +{ + q[0]= 1.0f; + q[1]= q[2]= q[3]= 0.0f; +} + +void copy_qt_qt(float *q1, float *q2) +{ + q1[0]= q2[0]; + q1[1]= q2[1]; + q1[2]= q2[2]; + q1[3]= q2[3]; +} + +int is_zero_qt(float *q) +{ + return (q[0] == 0 && q[1] == 0 && q[2] == 0 && q[3] == 0); +} + +void mul_qt_qtqt(float *q, float *q1, float *q2) +{ + float t0,t1,t2; + + t0= q1[0]*q2[0]-q1[1]*q2[1]-q1[2]*q2[2]-q1[3]*q2[3]; + t1= q1[0]*q2[1]+q1[1]*q2[0]+q1[2]*q2[3]-q1[3]*q2[2]; + t2= q1[0]*q2[2]+q1[2]*q2[0]+q1[3]*q2[1]-q1[1]*q2[3]; + q[3]= q1[0]*q2[3]+q1[3]*q2[0]+q1[1]*q2[2]-q1[2]*q2[1]; + q[0]=t0; + q[1]=t1; + q[2]=t2; +} + +/* Assumes a unit quaternion */ +void mul_qt_v3(float *q, float *v) +{ + float t0, t1, t2; + + t0= -q[1]*v[0]-q[2]*v[1]-q[3]*v[2]; + t1= q[0]*v[0]+q[2]*v[2]-q[3]*v[1]; + t2= q[0]*v[1]+q[3]*v[0]-q[1]*v[2]; + v[2]= q[0]*v[2]+q[1]*v[1]-q[2]*v[0]; + v[0]=t1; + v[1]=t2; + + t1= t0*-q[1]+v[0]*q[0]-v[1]*q[3]+v[2]*q[2]; + t2= t0*-q[2]+v[1]*q[0]-v[2]*q[1]+v[0]*q[3]; + v[2]= t0*-q[3]+v[2]*q[0]-v[0]*q[2]+v[1]*q[1]; + v[0]=t1; + v[1]=t2; +} + +void conjugate_qt(float *q) +{ + q[1] = -q[1]; + q[2] = -q[2]; + q[3] = -q[3]; +} + +float dot_qtqt(float *q1, float *q2) +{ + return q1[0]*q2[0] + q1[1]*q2[1] + q1[2]*q2[2] + q1[3]*q2[3]; +} + +void invert_qt(float *q) +{ + float f = dot_qtqt(q, q); + + if (f == 0.0f) + return; + + conjugate_qt(q); + mul_qt_fl(q, 1.0f/f); +} + +/* simple mult */ +void mul_qt_fl(float *q, float f) +{ + q[0] *= f; + q[1] *= f; + q[2] *= f; + q[3] *= f; +} + +void sub_qt_qtqt(float *q, float *q1, float *q2) +{ + q2[0]= -q2[0]; + mul_qt_qtqt(q, q1, q2); + q2[0]= -q2[0]; +} + +/* angular mult factor */ +void mul_fac_qt_fl(float *q, float fac) +{ + float angle= fac*saacos(q[0]); /* quat[0]= cos(0.5*angle), but now the 0.5 and 2.0 rule out */ + + float co= (float)cos(angle); + float si= (float)sin(angle); + q[0]= co; + normalize_v3(q+1); + q[1]*= si; + q[2]*= si; + q[3]*= si; + +} + +void quat_to_mat3(float m[][3], float *q) +{ + double q0, q1, q2, q3, qda,qdb,qdc,qaa,qab,qac,qbb,qbc,qcc; + + q0= M_SQRT2 * q[0]; + q1= M_SQRT2 * q[1]; + q2= M_SQRT2 * q[2]; + q3= M_SQRT2 * q[3]; + + qda= q0*q1; + qdb= q0*q2; + qdc= q0*q3; + qaa= q1*q1; + qab= q1*q2; + qac= q1*q3; + qbb= q2*q2; + qbc= q2*q3; + qcc= q3*q3; + + m[0][0]= (float)(1.0-qbb-qcc); + m[0][1]= (float)(qdc+qab); + m[0][2]= (float)(-qdb+qac); + + m[1][0]= (float)(-qdc+qab); + m[1][1]= (float)(1.0-qaa-qcc); + m[1][2]= (float)(qda+qbc); + + m[2][0]= (float)(qdb+qac); + m[2][1]= (float)(-qda+qbc); + m[2][2]= (float)(1.0-qaa-qbb); +} + +void quat_to_mat4(float m[][4], float *q) +{ + double q0, q1, q2, q3, qda,qdb,qdc,qaa,qab,qac,qbb,qbc,qcc; + + q0= M_SQRT2 * q[0]; + q1= M_SQRT2 * q[1]; + q2= M_SQRT2 * q[2]; + q3= M_SQRT2 * q[3]; + + qda= q0*q1; + qdb= q0*q2; + qdc= q0*q3; + qaa= q1*q1; + qab= q1*q2; + qac= q1*q3; + qbb= q2*q2; + qbc= q2*q3; + qcc= q3*q3; + + m[0][0]= (float)(1.0-qbb-qcc); + m[0][1]= (float)(qdc+qab); + m[0][2]= (float)(-qdb+qac); + m[0][3]= 0.0f; + + m[1][0]= (float)(-qdc+qab); + m[1][1]= (float)(1.0-qaa-qcc); + m[1][2]= (float)(qda+qbc); + m[1][3]= 0.0f; + + m[2][0]= (float)(qdb+qac); + m[2][1]= (float)(-qda+qbc); + m[2][2]= (float)(1.0-qaa-qbb); + m[2][3]= 0.0f; + + m[3][0]= m[3][1]= m[3][2]= 0.0f; + m[3][3]= 1.0f; +} + +void mat3_to_quat(float *q, float wmat[][3]) +{ + double tr, s; + float mat[3][3]; + + /* work on a copy */ + copy_m3_m3(mat, wmat); + normalize_m3(mat); /* this is needed AND a NormalQuat in the end */ + + tr= 0.25*(1.0+mat[0][0]+mat[1][1]+mat[2][2]); + + if(tr>FLT_EPSILON) { + s= sqrt(tr); + q[0]= (float)s; + s= 1.0/(4.0*s); + q[1]= (float)((mat[1][2]-mat[2][1])*s); + q[2]= (float)((mat[2][0]-mat[0][2])*s); + q[3]= (float)((mat[0][1]-mat[1][0])*s); + } + else { + if(mat[0][0] > mat[1][1] && mat[0][0] > mat[2][2]) { + s= 2.0*sqrtf(1.0 + mat[0][0] - mat[1][1] - mat[2][2]); + q[1]= (float)(0.25*s); + + s= 1.0/s; + q[0]= (float)((mat[2][1] - mat[1][2])*s); + q[2]= (float)((mat[1][0] + mat[0][1])*s); + q[3]= (float)((mat[2][0] + mat[0][2])*s); + } + else if(mat[1][1] > mat[2][2]) { + s= 2.0*sqrtf(1.0 + mat[1][1] - mat[0][0] - mat[2][2]); + q[2]= (float)(0.25*s); + + s= 1.0/s; + q[0]= (float)((mat[2][0] - mat[0][2])*s); + q[1]= (float)((mat[1][0] + mat[0][1])*s); + q[3]= (float)((mat[2][1] + mat[1][2])*s); + } + else { + s= 2.0*sqrtf(1.0 + mat[2][2] - mat[0][0] - mat[1][1]); + q[3]= (float)(0.25*s); + + s= 1.0/s; + q[0]= (float)((mat[1][0] - mat[0][1])*s); + q[1]= (float)((mat[2][0] + mat[0][2])*s); + q[2]= (float)((mat[2][1] + mat[1][2])*s); + } + } + + normalize_qt(q); +} + +void mat4_to_quat(float *q, float m[][4]) +{ + float mat[3][3]; + + copy_m3_m4(mat, m); + mat3_to_quat(q,mat); +} + +void mat3_to_quat_is_ok(float q[4], float wmat[3][3]) +{ + float mat[3][3], matr[3][3], matn[3][3], q1[4], q2[4], angle, si, co, nor[3]; + + /* work on a copy */ + copy_m3_m3(mat, wmat); + normalize_m3(mat); + + /* rotate z-axis of matrix to z-axis */ + + nor[0] = mat[2][1]; /* cross product with (0,0,1) */ + nor[1] = -mat[2][0]; + nor[2] = 0.0; + normalize_v3(nor); + + co= mat[2][2]; + angle= 0.5f*saacos(co); + + co= (float)cos(angle); + si= (float)sin(angle); + q1[0]= co; + q1[1]= -nor[0]*si; /* negative here, but why? */ + q1[2]= -nor[1]*si; + q1[3]= -nor[2]*si; + + /* rotate back x-axis from mat, using inverse q1 */ + quat_to_mat3( matr,q1); + invert_m3_m3(matn, matr); + mul_m3_v3(matn, mat[0]); + + /* and align x-axes */ + angle= (float)(0.5*atan2(mat[0][1], mat[0][0])); + + co= (float)cos(angle); + si= (float)sin(angle); + q2[0]= co; + q2[1]= 0.0f; + q2[2]= 0.0f; + q2[3]= si; + + mul_qt_qtqt(q, q1, q2); +} + + +void normalize_qt(float *q) +{ + float len; + + len= (float)sqrt(dot_qtqt(q, q)); + if(len!=0.0) { + mul_qt_fl(q, 1.0f/len); + } + else { + q[1]= 1.0f; + q[0]= q[2]= q[3]= 0.0f; + } +} + +void rotation_between_vecs_to_quat(float *q, float v1[3], float v2[3]) +{ + float axis[3]; + float angle; + + cross_v3_v3v3(axis, v1, v2); + + angle = angle_normalized_v3v3(v1, v2); + + axis_angle_to_quat(q, axis, angle); +} + +void vec_to_quat(float *q,float *vec, short axis, short upflag) +{ + float q2[4], nor[3], *fp, mat[3][3], angle, si, co, x2, y2, z2, len1; + + /* first rotate to axis */ + if(axis>2) { + x2= vec[0] ; y2= vec[1] ; z2= vec[2]; + axis-= 3; + } + else { + x2= -vec[0] ; y2= -vec[1] ; z2= -vec[2]; + } + + q[0]=1.0; + q[1]=q[2]=q[3]= 0.0; + + len1= (float)sqrt(x2*x2+y2*y2+z2*z2); + if(len1 == 0.0) return; + + /* nasty! I need a good routine for this... + * problem is a rotation of an Y axis to the negative Y-axis for example. + */ + + if(axis==0) { /* x-axis */ + nor[0]= 0.0; + nor[1]= -z2; + nor[2]= y2; + + if(fabs(y2)+fabs(z2)<0.0001) + nor[1]= 1.0; + + co= x2; + } + else if(axis==1) { /* y-axis */ + nor[0]= z2; + nor[1]= 0.0; + nor[2]= -x2; + + if(fabs(x2)+fabs(z2)<0.0001) + nor[2]= 1.0; + + co= y2; + } + else { /* z-axis */ + nor[0]= -y2; + nor[1]= x2; + nor[2]= 0.0; + + if(fabs(x2)+fabs(y2)<0.0001) + nor[0]= 1.0; + + co= z2; + } + co/= len1; + + normalize_v3(nor); + + angle= 0.5f*saacos(co); + si= (float)sin(angle); + q[0]= (float)cos(angle); + q[1]= nor[0]*si; + q[2]= nor[1]*si; + q[3]= nor[2]*si; + + if(axis!=upflag) { + quat_to_mat3(mat,q); + + fp= mat[2]; + if(axis==0) { + if(upflag==1) angle= (float)(0.5*atan2(fp[2], fp[1])); + else angle= (float)(-0.5*atan2(fp[1], fp[2])); + } + else if(axis==1) { + if(upflag==0) angle= (float)(-0.5*atan2(fp[2], fp[0])); + else angle= (float)(0.5*atan2(fp[0], fp[2])); + } + else { + if(upflag==0) angle= (float)(0.5*atan2(-fp[1], -fp[0])); + else angle= (float)(-0.5*atan2(-fp[0], -fp[1])); + } + + co= (float)cos(angle); + si= (float)(sin(angle)/len1); + q2[0]= co; + q2[1]= x2*si; + q2[2]= y2*si; + q2[3]= z2*si; + + mul_qt_qtqt(q,q2,q); + } +} + +#if 0 +/* A & M Watt, Advanced animation and rendering techniques, 1992 ACM press */ +void QuatInterpolW(float *result, float *quat1, float *quat2, float t) +{ + float omega, cosom, sinom, sc1, sc2; + + cosom = quat1[0]*quat2[0] + quat1[1]*quat2[1] + quat1[2]*quat2[2] + quat1[3]*quat2[3] ; + + /* rotate around shortest angle */ + if ((1.0f + cosom) > 0.0001f) { + + if ((1.0f - cosom) > 0.0001f) { + omega = (float)acos(cosom); + sinom = (float)sin(omega); + sc1 = (float)sin((1.0 - t) * omega) / sinom; + sc2 = (float)sin(t * omega) / sinom; + } + else { + sc1 = 1.0f - t; + sc2 = t; + } + result[0] = sc1*quat1[0] + sc2*quat2[0]; + result[1] = sc1*quat1[1] + sc2*quat2[1]; + result[2] = sc1*quat1[2] + sc2*quat2[2]; + result[3] = sc1*quat1[3] + sc2*quat2[3]; + } + else { + result[0] = quat2[3]; + result[1] = -quat2[2]; + result[2] = quat2[1]; + result[3] = -quat2[0]; + + sc1 = (float)sin((1.0 - t)*M_PI_2); + sc2 = (float)sin(t*M_PI_2); + + result[0] = sc1*quat1[0] + sc2*result[0]; + result[1] = sc1*quat1[1] + sc2*result[1]; + result[2] = sc1*quat1[2] + sc2*result[2]; + result[3] = sc1*quat1[3] + sc2*result[3]; + } +} +#endif + +void interp_qt_qtqt(float *result, float *quat1, float *quat2, float t) +{ + float quat[4], omega, cosom, sinom, sc1, sc2; + + cosom = quat1[0]*quat2[0] + quat1[1]*quat2[1] + quat1[2]*quat2[2] + quat1[3]*quat2[3] ; + + /* rotate around shortest angle */ + if (cosom < 0.0f) { + cosom = -cosom; + quat[0]= -quat1[0]; + quat[1]= -quat1[1]; + quat[2]= -quat1[2]; + quat[3]= -quat1[3]; + } + else { + quat[0]= quat1[0]; + quat[1]= quat1[1]; + quat[2]= quat1[2]; + quat[3]= quat1[3]; + } + + if ((1.0f - cosom) > 0.0001f) { + omega = (float)acos(cosom); + sinom = (float)sin(omega); + sc1 = (float)sin((1 - t) * omega) / sinom; + sc2 = (float)sin(t * omega) / sinom; + } else { + sc1= 1.0f - t; + sc2= t; + } + + result[0] = sc1 * quat[0] + sc2 * quat2[0]; + result[1] = sc1 * quat[1] + sc2 * quat2[1]; + result[2] = sc1 * quat[2] + sc2 * quat2[2]; + result[3] = sc1 * quat[3] + sc2 * quat2[3]; +} + +void add_qt_qtqt(float *result, float *quat1, float *quat2, float t) +{ + result[0]= quat1[0] + t*quat2[0]; + result[1]= quat1[1] + t*quat2[1]; + result[2]= quat1[2] + t*quat2[2]; + result[3]= quat1[3] + t*quat2[3]; +} + +void tri_to_quat(float *quat, float *v1, float *v2, float *v3) +{ + /* imaginary x-axis, y-axis triangle is being rotated */ + float vec[3], q1[4], q2[4], n[3], si, co, angle, mat[3][3], imat[3][3]; + + /* move z-axis to face-normal */ + normal_tri_v3(vec,v1, v2, v3); + + n[0]= vec[1]; + n[1]= -vec[0]; + n[2]= 0.0f; + normalize_v3(n); + + if(n[0]==0.0f && n[1]==0.0f) n[0]= 1.0f; + + angle= -0.5f*(float)saacos(vec[2]); + co= (float)cos(angle); + si= (float)sin(angle); + q1[0]= co; + q1[1]= n[0]*si; + q1[2]= n[1]*si; + q1[3]= 0.0f; + + /* rotate back line v1-v2 */ + quat_to_mat3(mat,q1); + invert_m3_m3(imat, mat); + sub_v3_v3v3(vec, v2, v1); + mul_m3_v3(imat, vec); + + /* what angle has this line with x-axis? */ + vec[2]= 0.0f; + normalize_v3(vec); + + angle= (float)(0.5*atan2(vec[1], vec[0])); + co= (float)cos(angle); + si= (float)sin(angle); + q2[0]= co; + q2[1]= 0.0f; + q2[2]= 0.0f; + q2[3]= si; + + mul_qt_qtqt(quat, q1, q2); +} + +void print_qt(char *str, float q[4]) +{ + printf("%s: %.3f %.3f %.3f %.3f\n", str, q[0], q[1], q[2], q[3]); +} + +/******************************** Axis Angle *********************************/ + +/* Axis angle to Quaternions */ +void axis_angle_to_quat(float q[4], float axis[3], float angle) +{ + float nor[3]; + float si; + + copy_v3_v3(nor, axis); + normalize_v3(nor); + + angle /= 2; + si = (float)sin(angle); + q[0] = (float)cos(angle); + q[1] = nor[0] * si; + q[2] = nor[1] * si; + q[3] = nor[2] * si; +} + +/* Quaternions to Axis Angle */ +void quat_to_axis_angle(float axis[3], float *angle,float q[4]) +{ + float ha, si; + + /* calculate angle/2, and sin(angle/2) */ + ha= (float)acos(q[0]); + si= (float)sin(ha); + + /* from half-angle to angle */ + *angle= ha * 2; + + /* prevent division by zero for axis conversion */ + if (fabs(si) < 0.0005) + si= 1.0f; + + axis[0]= q[1] / si; + axis[1]= q[2] / si; + axis[2]= q[3] / si; +} + +/* Axis Angle to Euler Rotation */ +void axis_angle_to_eulO(float eul[3], short order,float axis[3], float angle) +{ + float q[4]; + + /* use quaternions as intermediate representation for now... */ + axis_angle_to_quat(q, axis, angle); + quat_to_eulO(eul, order,q); +} + +/* Euler Rotation to Axis Angle */ +void eulO_to_axis_angle(float axis[3], float *angle,float eul[3], short order) +{ + float q[4]; + + /* use quaternions as intermediate representation for now... */ + eulO_to_quat(q,eul, order); + quat_to_axis_angle(axis, angle,q); +} + +/* axis angle to 3x3 matrix - safer version (normalisation of axis performed) */ +void axis_angle_to_mat3(float mat[3][3],float axis[3], float angle) +{ + float nor[3], nsi[3], co, si, ico; + + /* normalise the axis first (to remove unwanted scaling) */ + copy_v3_v3(nor, axis); + normalize_v3(nor); + + /* now convert this to a 3x3 matrix */ + co= (float)cos(angle); + si= (float)sin(angle); + + ico= (1.0f - co); + nsi[0]= nor[0]*si; + nsi[1]= nor[1]*si; + nsi[2]= nor[2]*si; + + mat[0][0] = ((nor[0] * nor[0]) * ico) + co; + mat[0][1] = ((nor[0] * nor[1]) * ico) + nsi[2]; + mat[0][2] = ((nor[0] * nor[2]) * ico) - nsi[1]; + mat[1][0] = ((nor[0] * nor[1]) * ico) - nsi[2]; + mat[1][1] = ((nor[1] * nor[1]) * ico) + co; + mat[1][2] = ((nor[1] * nor[2]) * ico) + nsi[0]; + mat[2][0] = ((nor[0] * nor[2]) * ico) + nsi[1]; + mat[2][1] = ((nor[1] * nor[2]) * ico) - nsi[0]; + mat[2][2] = ((nor[2] * nor[2]) * ico) + co; +} + +/* axis angle to 4x4 matrix - safer version (normalisation of axis performed) */ +void axis_angle_to_mat4(float mat[4][4],float axis[3], float angle) +{ + float tmat[3][3]; + + axis_angle_to_mat3(tmat,axis, angle); + unit_m4(mat); + copy_m4_m3(mat, tmat); +} + +/* 3x3 matrix to axis angle (see Mat4ToVecRot too) */ +void mat3_to_axis_angle(float axis[3], float *angle,float mat[3][3]) +{ + float q[4]; + + /* use quaternions as intermediate representation */ + // TODO: it would be nicer to go straight there... + mat3_to_quat(q,mat); + quat_to_axis_angle(axis, angle,q); +} + +/* 4x4 matrix to axis angle (see Mat4ToVecRot too) */ +void mat4_to_axis_angle(float axis[3], float *angle,float mat[4][4]) +{ + float q[4]; + + /* use quaternions as intermediate representation */ + // TODO: it would be nicer to go straight there... + mat4_to_quat(q,mat); + quat_to_axis_angle(axis, angle,q); +} + +/****************************** Vector/Rotation ******************************/ +/* TODO: the following calls should probably be depreceated sometime */ + +/* 3x3 matrix to axis angle */ +void mat3_to_vec_rot(float axis[3], float *angle,float mat[3][3]) +{ + float q[4]; + + /* use quaternions as intermediate representation */ + // TODO: it would be nicer to go straight there... + mat3_to_quat(q,mat); + quat_to_axis_angle(axis, angle,q); +} + +/* 4x4 matrix to axis angle */ +void mat4_to_vec_rot(float axis[3], float *angle,float mat[4][4]) +{ + float q[4]; + + /* use quaternions as intermediate representation */ + // TODO: it would be nicer to go straight there... + mat4_to_quat(q,mat); + quat_to_axis_angle(axis, angle,q); +} + +/* axis angle to 3x3 matrix */ +void vec_rot_to_mat3(float mat[][3],float *vec, float phi) +{ + /* rotation of phi radials around vec */ + float vx, vx2, vy, vy2, vz, vz2, co, si; + + vx= vec[0]; + vy= vec[1]; + vz= vec[2]; + vx2= vx*vx; + vy2= vy*vy; + vz2= vz*vz; + co= (float)cos(phi); + si= (float)sin(phi); + + mat[0][0]= vx2+co*(1.0f-vx2); + mat[0][1]= vx*vy*(1.0f-co)+vz*si; + mat[0][2]= vz*vx*(1.0f-co)-vy*si; + mat[1][0]= vx*vy*(1.0f-co)-vz*si; + mat[1][1]= vy2+co*(1.0f-vy2); + mat[1][2]= vy*vz*(1.0f-co)+vx*si; + mat[2][0]= vz*vx*(1.0f-co)+vy*si; + mat[2][1]= vy*vz*(1.0f-co)-vx*si; + mat[2][2]= vz2+co*(1.0f-vz2); +} + +/* axis angle to 4x4 matrix */ +void vec_rot_to_mat4(float mat[][4],float *vec, float phi) +{ + float tmat[3][3]; + + vec_rot_to_mat3(tmat,vec, phi); + unit_m4(mat); + copy_m4_m3(mat, tmat); +} + +/* axis angle to quaternion */ +void vec_rot_to_quat(float *quat,float *vec, float phi) +{ + /* rotation of phi radials around vec */ + float si; + + quat[1]= vec[0]; + quat[2]= vec[1]; + quat[3]= vec[2]; + + if(normalize_v3(quat+1) == 0.0f) { + unit_qt(quat); + } + else { + quat[0]= (float)cos(phi/2.0); + si= (float)sin(phi/2.0); + quat[1] *= si; + quat[2] *= si; + quat[3] *= si; + } +} + +/******************************** XYZ Eulers *********************************/ + +/* XYZ order */ +void eul_to_mat3(float mat[][3], float *eul) +{ + double ci, cj, ch, si, sj, sh, cc, cs, sc, ss; + + ci = cos(eul[0]); + cj = cos(eul[1]); + ch = cos(eul[2]); + si = sin(eul[0]); + sj = sin(eul[1]); + sh = sin(eul[2]); + cc = ci*ch; + cs = ci*sh; + sc = si*ch; + ss = si*sh; + + mat[0][0] = (float)(cj*ch); + mat[1][0] = (float)(sj*sc-cs); + mat[2][0] = (float)(sj*cc+ss); + mat[0][1] = (float)(cj*sh); + mat[1][1] = (float)(sj*ss+cc); + mat[2][1] = (float)(sj*cs-sc); + mat[0][2] = (float)-sj; + mat[1][2] = (float)(cj*si); + mat[2][2] = (float)(cj*ci); + +} + +/* XYZ order */ +void eul_to_mat4(float mat[][4], float *eul) +{ + double ci, cj, ch, si, sj, sh, cc, cs, sc, ss; + + ci = cos(eul[0]); + cj = cos(eul[1]); + ch = cos(eul[2]); + si = sin(eul[0]); + sj = sin(eul[1]); + sh = sin(eul[2]); + cc = ci*ch; + cs = ci*sh; + sc = si*ch; + ss = si*sh; + + mat[0][0] = (float)(cj*ch); + mat[1][0] = (float)(sj*sc-cs); + mat[2][0] = (float)(sj*cc+ss); + mat[0][1] = (float)(cj*sh); + mat[1][1] = (float)(sj*ss+cc); + mat[2][1] = (float)(sj*cs-sc); + mat[0][2] = (float)-sj; + mat[1][2] = (float)(cj*si); + mat[2][2] = (float)(cj*ci); + + + mat[3][0]= mat[3][1]= mat[3][2]= mat[0][3]= mat[1][3]= mat[2][3]= 0.0f; + mat[3][3]= 1.0f; +} + +/* returns two euler calculation methods, so we can pick the best */ +/* XYZ order */ +static void mat3_to_eul2(float tmat[][3], float *eul1, float *eul2) +{ + float cy, quat[4], mat[3][3]; + + mat3_to_quat(quat,tmat); + quat_to_mat3(mat,quat); + copy_m3_m3(mat, tmat); + normalize_m3(mat); + + cy = (float)sqrt(mat[0][0]*mat[0][0] + mat[0][1]*mat[0][1]); + + if (cy > 16.0*FLT_EPSILON) { + + eul1[0] = (float)atan2(mat[1][2], mat[2][2]); + eul1[1] = (float)atan2(-mat[0][2], cy); + eul1[2] = (float)atan2(mat[0][1], mat[0][0]); + + eul2[0] = (float)atan2(-mat[1][2], -mat[2][2]); + eul2[1] = (float)atan2(-mat[0][2], -cy); + eul2[2] = (float)atan2(-mat[0][1], -mat[0][0]); + + } else { + eul1[0] = (float)atan2(-mat[2][1], mat[1][1]); + eul1[1] = (float)atan2(-mat[0][2], cy); + eul1[2] = 0.0f; + + copy_v3_v3(eul2, eul1); + } +} + +/* XYZ order */ +void mat3_to_eul(float *eul,float tmat[][3]) +{ + float eul1[3], eul2[3]; + + mat3_to_eul2(tmat, eul1, eul2); + + /* return best, which is just the one with lowest values it in */ + if(fabs(eul1[0])+fabs(eul1[1])+fabs(eul1[2]) > fabs(eul2[0])+fabs(eul2[1])+fabs(eul2[2])) { + copy_v3_v3(eul, eul2); + } + else { + copy_v3_v3(eul, eul1); + } +} + +/* XYZ order */ +void mat4_to_eul(float *eul,float tmat[][4]) +{ + float tempMat[3][3]; + + copy_m3_m4(tempMat, tmat); + normalize_m3(tempMat); + mat3_to_eul(eul,tempMat); +} + +/* XYZ order */ +void quat_to_eul(float *eul,float *quat) +{ + float mat[3][3]; + + quat_to_mat3(mat,quat); + mat3_to_eul(eul,mat); +} + +/* XYZ order */ +void eul_to_quat(float *quat,float *eul) +{ + float ti, tj, th, ci, cj, ch, si, sj, sh, cc, cs, sc, ss; + + ti = eul[0]*0.5f; tj = eul[1]*0.5f; th = eul[2]*0.5f; + ci = (float)cos(ti); cj = (float)cos(tj); ch = (float)cos(th); + si = (float)sin(ti); sj = (float)sin(tj); sh = (float)sin(th); + cc = ci*ch; cs = ci*sh; sc = si*ch; ss = si*sh; + + quat[0] = cj*cc + sj*ss; + quat[1] = cj*sc - sj*cs; + quat[2] = cj*ss + sj*cc; + quat[3] = cj*cs - sj*sc; +} + +/* XYZ order */ +void rotate_eul(float *beul, char axis, float ang) +{ + float eul[3], mat1[3][3], mat2[3][3], totmat[3][3]; + + eul[0]= eul[1]= eul[2]= 0.0f; + if(axis=='x') eul[0]= ang; + else if(axis=='y') eul[1]= ang; + else eul[2]= ang; + + eul_to_mat3(mat1,eul); + eul_to_mat3(mat2,beul); + + mul_m3_m3m3(totmat, mat2, mat1); + + mat3_to_eul(beul,totmat); + +} + +/* exported to transform.c */ +/* order independent! */ +void compatible_eul(float *eul, float *oldrot) +{ + float dx, dy, dz; + + /* correct differences of about 360 degrees first */ + dx= eul[0] - oldrot[0]; + dy= eul[1] - oldrot[1]; + dz= eul[2] - oldrot[2]; + + while(fabs(dx) > 5.1) { + if(dx > 0.0f) eul[0] -= 2.0f*(float)M_PI; else eul[0]+= 2.0f*(float)M_PI; + dx= eul[0] - oldrot[0]; + } + while(fabs(dy) > 5.1) { + if(dy > 0.0f) eul[1] -= 2.0f*(float)M_PI; else eul[1]+= 2.0f*(float)M_PI; + dy= eul[1] - oldrot[1]; + } + while(fabs(dz) > 5.1) { + if(dz > 0.0f) eul[2] -= 2.0f*(float)M_PI; else eul[2]+= 2.0f*(float)M_PI; + dz= eul[2] - oldrot[2]; + } + + /* is 1 of the axis rotations larger than 180 degrees and the other small? NO ELSE IF!! */ + if(fabs(dx) > 3.2 && fabs(dy)<1.6 && fabs(dz)<1.6) { + if(dx > 0.0) eul[0] -= 2.0f*(float)M_PI; else eul[0]+= 2.0f*(float)M_PI; + } + if(fabs(dy) > 3.2 && fabs(dz)<1.6 && fabs(dx)<1.6) { + if(dy > 0.0) eul[1] -= 2.0f*(float)M_PI; else eul[1]+= 2.0f*(float)M_PI; + } + if(fabs(dz) > 3.2 && fabs(dx)<1.6 && fabs(dy)<1.6) { + if(dz > 0.0) eul[2] -= 2.0f*(float)M_PI; else eul[2]+= 2.0f*(float)M_PI; + } + + /* the method below was there from ancient days... but why! probably because the code sucks :) + */ +#if 0 + /* calc again */ + dx= eul[0] - oldrot[0]; + dy= eul[1] - oldrot[1]; + dz= eul[2] - oldrot[2]; + + /* special case, tested for x-z */ + + if((fabs(dx) > 3.1 && fabs(dz) > 1.5) || (fabs(dx) > 1.5 && fabs(dz) > 3.1)) { + if(dx > 0.0) eul[0] -= M_PI; else eul[0]+= M_PI; + if(eul[1] > 0.0) eul[1]= M_PI - eul[1]; else eul[1]= -M_PI - eul[1]; + if(dz > 0.0) eul[2] -= M_PI; else eul[2]+= M_PI; + + } + else if((fabs(dx) > 3.1 && fabs(dy) > 1.5) || (fabs(dx) > 1.5 && fabs(dy) > 3.1)) { + if(dx > 0.0) eul[0] -= M_PI; else eul[0]+= M_PI; + if(dy > 0.0) eul[1] -= M_PI; else eul[1]+= M_PI; + if(eul[2] > 0.0) eul[2]= M_PI - eul[2]; else eul[2]= -M_PI - eul[2]; + } + else if((fabs(dy) > 3.1 && fabs(dz) > 1.5) || (fabs(dy) > 1.5 && fabs(dz) > 3.1)) { + if(eul[0] > 0.0) eul[0]= M_PI - eul[0]; else eul[0]= -M_PI - eul[0]; + if(dy > 0.0) eul[1] -= M_PI; else eul[1]+= M_PI; + if(dz > 0.0) eul[2] -= M_PI; else eul[2]+= M_PI; + } +#endif +} + +/* uses 2 methods to retrieve eulers, and picks the closest */ +/* XYZ order */ +void mat3_to_compatible_eul(float *eul, float *oldrot,float mat[][3]) +{ + float eul1[3], eul2[3]; + float d1, d2; + + mat3_to_eul2(mat, eul1, eul2); + + compatible_eul(eul1, oldrot); + compatible_eul(eul2, oldrot); + + d1= (float)fabs(eul1[0]-oldrot[0]) + (float)fabs(eul1[1]-oldrot[1]) + (float)fabs(eul1[2]-oldrot[2]); + d2= (float)fabs(eul2[0]-oldrot[0]) + (float)fabs(eul2[1]-oldrot[1]) + (float)fabs(eul2[2]-oldrot[2]); + + /* return best, which is just the one with lowest difference */ + if(d1 > d2) { + copy_v3_v3(eul, eul2); + } + else { + copy_v3_v3(eul, eul1); + } + +} + +/************************** Arbitrary Order Eulers ***************************/ + +/* Euler Rotation Order Code: + * was adapted from + ANSI C code from the article + "Euler Angle Conversion" + by Ken Shoemake, shoemake@graphics.cis.upenn.edu + in "Graphics Gems IV", Academic Press, 1994 + * for use in Blender + */ + +/* Type for rotation order info - see wiki for derivation details */ +typedef struct RotOrderInfo { + short axis[3]; + short parity; /* parity of axis permutation (even=0, odd=1) - 'n' in original code */ +} RotOrderInfo; + +/* Array of info for Rotation Order calculations + * WARNING: must be kept in same order as eEulerRotationOrders + */ +static RotOrderInfo rotOrders[]= { + /* i, j, k, n */ + {{0, 1, 2}, 0}, // XYZ + {{0, 2, 1}, 1}, // XZY + {{1, 0, 2}, 1}, // YXZ + {{1, 2, 0}, 0}, // YZX + {{2, 0, 1}, 0}, // ZXY + {{2, 1, 0}, 1} // ZYZ +}; + +/* Get relevant pointer to rotation order set from the array + * NOTE: since we start at 1 for the values, but arrays index from 0, + * there is -1 factor involved in this process... + */ +#define GET_ROTATIONORDER_INFO(order) (((order)>=1) ? &rotOrders[(order)-1] : &rotOrders[0]) + +/* Construct quaternion from Euler angles (in radians). */ +void eulO_to_quat(float q[4],float e[3], short order) +{ + RotOrderInfo *R= GET_ROTATIONORDER_INFO(order); + short i=R->axis[0], j=R->axis[1], k=R->axis[2]; + double ti, tj, th, ci, cj, ch, si, sj, sh, cc, cs, sc, ss; + double a[3]; + + ti = e[i]/2; tj = e[j]/2; th = e[k]/2; + + if (R->parity) e[j] = -e[j]; + + ci = cos(ti); cj = cos(tj); ch = cos(th); + si = sin(ti); sj = sin(tj); sh = sin(th); + + cc = ci*ch; cs = ci*sh; + sc = si*ch; ss = si*sh; + + a[i] = cj*sc - sj*cs; + a[j] = cj*ss + sj*cc; + a[k] = cj*cs - sj*sc; + + q[0] = cj*cc + sj*ss; + q[1] = a[0]; + q[2] = a[1]; + q[3] = a[2]; + + if (R->parity) q[j] = -q[j]; +} + +/* Convert quaternion to Euler angles (in radians). */ +void quat_to_eulO(float e[3], short order,float q[4]) +{ + float M[3][3]; + + quat_to_mat3(M,q); + mat3_to_eulO(e, order,M); +} + +/* Construct 3x3 matrix from Euler angles (in radians). */ +void eulO_to_mat3(float M[3][3],float e[3], short order) +{ + RotOrderInfo *R= GET_ROTATIONORDER_INFO(order); + short i=R->axis[0], j=R->axis[1], k=R->axis[2]; + double ti, tj, th, ci, cj, ch, si, sj, sh, cc, cs, sc, ss; + + if (R->parity) { + ti = -e[i]; tj = -e[j]; th = -e[k]; + } + else { + ti = e[i]; tj = e[j]; th = e[k]; + } + + ci = cos(ti); cj = cos(tj); ch = cos(th); + si = sin(ti); sj = sin(tj); sh = sin(th); + + cc = ci*ch; cs = ci*sh; + sc = si*ch; ss = si*sh; + + M[i][i] = cj*ch; M[j][i] = sj*sc-cs; M[k][i] = sj*cc+ss; + M[i][j] = cj*sh; M[j][j] = sj*ss+cc; M[k][j] = sj*cs-sc; + M[i][k] = -sj; M[j][k] = cj*si; M[k][k] = cj*ci; +} + +/* Construct 4x4 matrix from Euler angles (in radians). */ +void eulO_to_mat4(float M[4][4],float e[3], short order) +{ + float m[3][3]; + + /* for now, we'll just do this the slow way (i.e. copying matrices) */ + normalize_m3(m); + eulO_to_mat3(m,e, order); + copy_m4_m3(M, m); +} + +/* Convert 3x3 matrix to Euler angles (in radians). */ +void mat3_to_eulO(float e[3], short order,float M[3][3]) +{ + RotOrderInfo *R= GET_ROTATIONORDER_INFO(order); + short i=R->axis[0], j=R->axis[1], k=R->axis[2]; + double cy = sqrt(M[i][i]*M[i][i] + M[i][j]*M[i][j]); + + if (cy > 16*FLT_EPSILON) { + e[i] = atan2(M[j][k], M[k][k]); + e[j] = atan2(-M[i][k], cy); + e[k] = atan2(M[i][j], M[i][i]); + } + else { + e[i] = atan2(-M[k][j], M[j][j]); + e[j] = atan2(-M[i][k], cy); + e[k] = 0; + } + + if (R->parity) { + e[0] = -e[0]; + e[1] = -e[1]; + e[2] = -e[2]; + } +} + +/* Convert 4x4 matrix to Euler angles (in radians). */ +void mat4_to_eulO(float e[3], short order,float M[4][4]) +{ + float m[3][3]; + + /* for now, we'll just do this the slow way (i.e. copying matrices) */ + copy_m3_m4(m, M); + normalize_m3(m); + mat3_to_eulO(e, order,m); +} + +/* returns two euler calculation methods, so we can pick the best */ +static void mat3_to_eulo2(float M[3][3], float *e1, float *e2, short order) +{ + RotOrderInfo *R= GET_ROTATIONORDER_INFO(order); + short i=R->axis[0], j=R->axis[1], k=R->axis[2]; + float m[3][3]; + double cy; + + /* process the matrix first */ + copy_m3_m3(m, M); + normalize_m3(m); + + cy= sqrt(m[i][i]*m[i][i] + m[i][j]*m[i][j]); + + if (cy > 16*FLT_EPSILON) { + e1[i] = atan2(m[j][k], m[k][k]); + e1[j] = atan2(-m[i][k], cy); + e1[k] = atan2(m[i][j], m[i][i]); + + e2[i] = atan2(-m[j][k], -m[k][k]); + e2[j] = atan2(-m[i][k], -cy); + e2[k] = atan2(-m[i][j], -m[i][i]); + } + else { + e1[i] = atan2(-m[k][j], m[j][j]); + e1[j] = atan2(-m[i][k], cy); + e1[k] = 0; + + copy_v3_v3(e2, e1); + } + + if (R->parity) { + e1[0] = -e1[0]; + e1[1] = -e1[1]; + e1[2] = -e1[2]; + + e2[0] = -e2[0]; + e2[1] = -e2[1]; + e2[2] = -e2[2]; + } +} + +/* uses 2 methods to retrieve eulers, and picks the closest */ +void mat3_to_compatible_eulO(float eul[3], float oldrot[3], short order,float mat[3][3]) +{ + float eul1[3], eul2[3]; + float d1, d2; + + mat3_to_eulo2(mat, eul1, eul2, order); + + compatible_eul(eul1, oldrot); + compatible_eul(eul2, oldrot); + + d1= (float)fabs(eul1[0]-oldrot[0]) + (float)fabs(eul1[1]-oldrot[1]) + (float)fabs(eul1[2]-oldrot[2]); + d2= (float)fabs(eul2[0]-oldrot[0]) + (float)fabs(eul2[1]-oldrot[1]) + (float)fabs(eul2[2]-oldrot[2]); + + /* return best, which is just the one with lowest difference */ + if (d1 > d2) + copy_v3_v3(eul, eul2); + else + copy_v3_v3(eul, eul1); +} + +/* rotate the given euler by the given angle on the specified axis */ +// NOTE: is this safe to do with different axis orders? +void rotate_eulO(float beul[3], short order, char axis, float ang) +{ + float eul[3], mat1[3][3], mat2[3][3], totmat[3][3]; + + eul[0]= eul[1]= eul[2]= 0.0f; + if (axis=='x') + eul[0]= ang; + else if (axis=='y') + eul[1]= ang; + else + eul[2]= ang; + + eulO_to_mat3(mat1,eul, order); + eulO_to_mat3(mat2,beul, order); + + mul_m3_m3m3(totmat, mat2, mat1); + + mat3_to_eulO(beul, order,totmat); +} + +/* the matrix is written to as 3 axis vectors */ +void eulO_to_gimbal_axis(float gmat[][3], float *eul, short order) +{ + RotOrderInfo *R= GET_ROTATIONORDER_INFO(order); + + float mat[3][3]; + float teul[3]; + + /* first axis is local */ + eulO_to_mat3(mat,eul, order); + copy_v3_v3(gmat[R->axis[0]], mat[R->axis[0]]); + + /* second axis is local minus first rotation */ + copy_v3_v3(teul, eul); + teul[R->axis[0]] = 0; + eulO_to_mat3(mat,teul, order); + copy_v3_v3(gmat[R->axis[1]], mat[R->axis[1]]); + + + /* Last axis is global */ + gmat[R->axis[2]][0] = 0; + gmat[R->axis[2]][1] = 0; + gmat[R->axis[2]][2] = 0; + gmat[R->axis[2]][R->axis[2]] = 1; +} + +/******************************* Dual Quaternions ****************************/ + +/* + Conversion routines between (regular quaternion, translation) and + dual quaternion. + + Version 1.0.0, February 7th, 2007 + + Copyright (C) 2006-2007 University of Dublin, Trinity College, All Rights + Reserved + + This software is provided 'as-is', without any express or implied + warranty. In no event will the author(s) be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Author: Ladislav Kavan, kavanl@cs.tcd.ie + + Changes for Blender: + - renaming, style changes and optimizations + - added support for scaling +*/ + +void mat4_to_dquat(DualQuat *dq,float basemat[][4], float mat[][4]) +{ + float *t, *q, dscale[3], scale[3], basequat[4]; + float baseRS[4][4], baseinv[4][4], baseR[4][4], baseRinv[4][4]; + float R[4][4], S[4][4]; + + /* split scaling and rotation, there is probably a faster way to do + this, it's done like this now to correctly get negative scaling */ + mul_m4_m4m4(baseRS, basemat, mat); + mat4_to_size(scale,baseRS); + + copy_v3_v3(dscale, scale); + dscale[0] -= 1.0f; dscale[1] -= 1.0f; dscale[2] -= 1.0f; + + if((determinant_m4(mat) < 0.0f) || len_v3(dscale) > 1e-4) { + /* extract R and S */ + mat4_to_quat(basequat,baseRS); + quat_to_mat4(baseR,basequat); + copy_v3_v3(baseR[3], baseRS[3]); + + invert_m4_m4(baseinv, basemat); + mul_m4_m4m4(R, baseinv, baseR); + + invert_m4_m4(baseRinv, baseR); + mul_m4_m4m4(S, baseRS, baseRinv); + + /* set scaling part */ + mul_serie_m4(dq->scale, basemat, S, baseinv, 0, 0, 0, 0, 0); + dq->scale_weight= 1.0f; + } + else { + /* matrix does not contain scaling */ + copy_m4_m4(R, mat); + dq->scale_weight= 0.0f; + } + + /* non-dual part */ + mat4_to_quat(dq->quat,R); + + /* dual part */ + t= R[3]; + q= dq->quat; + dq->trans[0]= -0.5f*(t[0]*q[1] + t[1]*q[2] + t[2]*q[3]); + dq->trans[1]= 0.5f*(t[0]*q[0] + t[1]*q[3] - t[2]*q[2]); + dq->trans[2]= 0.5f*(-t[0]*q[3] + t[1]*q[0] + t[2]*q[1]); + dq->trans[3]= 0.5f*(t[0]*q[2] - t[1]*q[1] + t[2]*q[0]); +} + +void dquat_to_mat4(float mat[][4],DualQuat *dq) +{ + float len, *t, q0[4]; + + /* regular quaternion */ + copy_qt_qt(q0, dq->quat); + + /* normalize */ + len= (float)sqrt(dot_qtqt(q0, q0)); + if(len != 0.0f) + mul_qt_fl(q0, 1.0f/len); + + /* rotation */ + quat_to_mat4(mat,q0); + + /* translation */ + t= dq->trans; + mat[3][0]= 2.0f*(-t[0]*q0[1] + t[1]*q0[0] - t[2]*q0[3] + t[3]*q0[2]); + mat[3][1]= 2.0f*(-t[0]*q0[2] + t[1]*q0[3] + t[2]*q0[0] - t[3]*q0[1]); + mat[3][2]= 2.0f*(-t[0]*q0[3] - t[1]*q0[2] + t[2]*q0[1] + t[3]*q0[0]); + + /* note: this does not handle scaling */ +} + +void add_weighted_dq_dq(DualQuat *dqsum, DualQuat *dq, float weight) +{ + int flipped= 0; + + /* make sure we interpolate quats in the right direction */ + if (dot_qtqt(dq->quat, dqsum->quat) < 0) { + flipped= 1; + weight= -weight; + } + + /* interpolate rotation and translation */ + dqsum->quat[0] += weight*dq->quat[0]; + dqsum->quat[1] += weight*dq->quat[1]; + dqsum->quat[2] += weight*dq->quat[2]; + dqsum->quat[3] += weight*dq->quat[3]; + + dqsum->trans[0] += weight*dq->trans[0]; + dqsum->trans[1] += weight*dq->trans[1]; + dqsum->trans[2] += weight*dq->trans[2]; + dqsum->trans[3] += weight*dq->trans[3]; + + /* interpolate scale - but only if needed */ + if (dq->scale_weight) { + float wmat[4][4]; + + if(flipped) /* we don't want negative weights for scaling */ + weight= -weight; + + copy_m4_m4(wmat, dq->scale); + mul_m4_fl(wmat, weight); + add_m4_m4m4(dqsum->scale, dqsum->scale, wmat); + dqsum->scale_weight += weight; + } +} + +void normalize_dq(DualQuat *dq, float totweight) +{ + float scale= 1.0f/totweight; + + mul_qt_fl(dq->quat, scale); + mul_qt_fl(dq->trans, scale); + + if(dq->scale_weight) { + float addweight= totweight - dq->scale_weight; + + if(addweight) { + dq->scale[0][0] += addweight; + dq->scale[1][1] += addweight; + dq->scale[2][2] += addweight; + dq->scale[3][3] += addweight; + } + + mul_m4_fl(dq->scale, scale); + dq->scale_weight= 1.0f; + } +} + +void mul_v3m3_dq(float *co, float mat[][3],DualQuat *dq) +{ + float M[3][3], t[3], scalemat[3][3], len2; + float w= dq->quat[0], x= dq->quat[1], y= dq->quat[2], z= dq->quat[3]; + float t0= dq->trans[0], t1= dq->trans[1], t2= dq->trans[2], t3= dq->trans[3]; + + /* rotation matrix */ + M[0][0]= w*w + x*x - y*y - z*z; + M[1][0]= 2*(x*y - w*z); + M[2][0]= 2*(x*z + w*y); + + M[0][1]= 2*(x*y + w*z); + M[1][1]= w*w + y*y - x*x - z*z; + M[2][1]= 2*(y*z - w*x); + + M[0][2]= 2*(x*z - w*y); + M[1][2]= 2*(y*z + w*x); + M[2][2]= w*w + z*z - x*x - y*y; + + len2= dot_qtqt(dq->quat, dq->quat); + if(len2 > 0.0f) + len2= 1.0f/len2; + + /* translation */ + t[0]= 2*(-t0*x + w*t1 - t2*z + y*t3); + t[1]= 2*(-t0*y + t1*z - x*t3 + w*t2); + t[2]= 2*(-t0*z + x*t2 + w*t3 - t1*y); + + /* apply scaling */ + if(dq->scale_weight) + mul_m4_v3(dq->scale, co); + + /* apply rotation and translation */ + mul_m3_v3(M, co); + co[0]= (co[0] + t[0])*len2; + co[1]= (co[1] + t[1])*len2; + co[2]= (co[2] + t[2])*len2; + + /* compute crazyspace correction mat */ + if(mat) { + if(dq->scale_weight) { + copy_m3_m4(scalemat, dq->scale); + mul_m3_m3m3(mat, M, scalemat); + } + else + copy_m3_m3(mat, M); + mul_m3_fl(mat, len2); + } +} + +void copy_dq_dq(DualQuat *dq1, DualQuat *dq2) +{ + memcpy(dq1, dq2, sizeof(DualQuat)); +} + diff --git a/source/blender/blenlib/intern/math_vector.c b/source/blender/blenlib/intern/math_vector.c new file mode 100644 index 00000000000..8d36c3ac524 --- /dev/null +++ b/source/blender/blenlib/intern/math_vector.c @@ -0,0 +1,310 @@ +/** + * $Id$ + * + * ***** BEGIN GPL 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + + * The Original Code is: some of this file. + * + * ***** END GPL LICENSE BLOCK ***** + * */ + +#include <float.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "BLI_math.h" + +//******************************* Interpolation *******************************/ + +void interp_v2_v2v2(float *target, float *a, float *b, float t) +{ + float s = 1.0f-t; + + target[0]= s*a[0] + t*b[0]; + target[1]= s*a[1] + t*b[1]; +} + +/* weight 3 2D vectors, + * 'w' must be unit length but is not a vector, just 3 weights */ +void interp_v2_v2v2v2(float p[2], float v1[2], float v2[2], float v3[2], float w[3]) +{ + p[0] = v1[0]*w[0] + v2[0]*w[1] + v3[0]*w[2]; + p[1] = v1[1]*w[0] + v2[1]*w[1] + v3[1]*w[2]; +} + +void interp_v3_v3v3(float *target, float *a, float *b, float t) +{ + float s = 1.0f-t; + + target[0]= s*a[0] + t*b[0]; + target[1]= s*a[1] + t*b[1]; + target[2]= s*a[2] + t*b[2]; +} + +/* weight 3 vectors, + * 'w' must be unit length but is not a vector, just 3 weights */ +void interp_v3_v3v3v3(float p[3], float v1[3], float v2[3], float v3[3], float w[3]) +{ + p[0] = v1[0]*w[0] + v2[0]*w[1] + v3[0]*w[2]; + p[1] = v1[1]*w[0] + v2[1]*w[1] + v3[1]*w[2]; + p[2] = v1[2]*w[0] + v2[2]*w[1] + v3[2]*w[2]; +} + +void mid_v3_v3v3(float *v, float *v1, float *v2) +{ + v[0]= 0.5f*(v1[0] + v2[0]); + v[1]= 0.5f*(v1[1] + v2[1]); + v[2]= 0.5f*(v1[2] + v2[2]); +} + +/********************************* Comparison ********************************/ + +int is_zero_v3(float *v) +{ + return (v[0] == 0 && v[1] == 0 && v[2] == 0); +} + +int equals_v3v3(float *v1, float *v2) +{ + return ((v1[0]==v2[0]) && (v1[1]==v2[1]) && (v1[2]==v2[2])); +} + +int compare_v3v3(float *v1, float *v2, float limit) +{ + if(fabs(v1[0]-v2[0])<limit) + if(fabs(v1[1]-v2[1])<limit) + if(fabs(v1[2]-v2[2])<limit) + return 1; + + return 0; +} + +int compare_len_v3v3(float *v1, float *v2, float limit) +{ + float x,y,z; + + x=v1[0]-v2[0]; + y=v1[1]-v2[1]; + z=v1[2]-v2[2]; + + return ((x*x + y*y + z*z) < (limit*limit)); +} + +int compare_v4v4(float *v1, float *v2, float limit) +{ + if(fabs(v1[0]-v2[0])<limit) + if(fabs(v1[1]-v2[1])<limit) + if(fabs(v1[2]-v2[2])<limit) + if(fabs(v1[3]-v2[3])<limit) + return 1; + + return 0; +} + +/********************************** Angles ***********************************/ + +/* Return the angle in radians between vecs 1-2 and 2-3 in radians + If v1 is a shoulder, v2 is the elbow and v3 is the hand, + this would return the angle at the elbow */ +float angle_v3v3v3(float *v1, float *v2, float *v3) +{ + float vec1[3], vec2[3]; + + sub_v3_v3v3(vec1, v2, v1); + sub_v3_v3v3(vec2, v2, v3); + normalize_v3(vec1); + normalize_v3(vec2); + + return angle_normalized_v3v3(vec1, vec2); +} + +float angle_v2v2v2(float *v1, float *v2, float *v3) +{ + float vec1[2], vec2[2]; + + vec1[0] = v2[0]-v1[0]; + vec1[1] = v2[1]-v1[1]; + + vec2[0] = v2[0]-v3[0]; + vec2[1] = v2[1]-v3[1]; + + normalize_v2(vec1); + normalize_v2(vec2); + + return angle_normalized_v2v2(vec1, vec2); +} + +/* Return the shortest angle in radians between the 2 vectors */ +float angle_v2v2(float *v1, float *v2) +{ + float vec1[3], vec2[3]; + + copy_v3_v3(vec1, v1); + copy_v3_v3(vec2, v2); + normalize_v3(vec1); + normalize_v3(vec2); + + return angle_normalized_v3v3(vec1, vec2); +} + +float angle_normalized_v3v3(float *v1, float *v2) +{ + /* this is the same as acos(dot_v3v3(v1, v2)), but more accurate */ + if (dot_v3v3(v1, v2) < 0.0f) { + float vec[3]; + + vec[0]= -v2[0]; + vec[1]= -v2[1]; + vec[2]= -v2[2]; + + return (float)M_PI - 2.0f*(float)saasin(len_v3v3(vec, v1)/2.0f); + } + else + return 2.0f*(float)saasin(len_v3v3(v2, v1)/2.0f); +} + +float angle_normalized_v2v2(float *v1, float *v2) +{ + /* this is the same as acos(dot_v3v3(v1, v2)), but more accurate */ + if (dot_v2v2(v1, v2) < 0.0f) { + float vec[2]; + + vec[0]= -v2[0]; + vec[1]= -v2[1]; + + return (float)M_PI - 2.0f*saasin(len_v2v2(vec, v1)/2.0f); + } + else + return 2.0f*(float)saasin(len_v2v2(v2, v1)/2.0f); +} + +/********************************* Geometry **********************************/ + +/* Project v1 on v2 */ +void project_v3_v3v3(float *c, float *v1, float *v2) +{ + float mul; + mul = dot_v3v3(v1, v2) / dot_v3v3(v2, v2); + + c[0] = mul * v2[0]; + c[1] = mul * v2[1]; + c[2] = mul * v2[2]; +} + +/* Returns a vector bisecting the angle at v2 formed by v1, v2 and v3 */ +void bisect_v3_v3v3v3(float *out, float *v1, float *v2, float *v3) +{ + float d_12[3], d_23[3]; + sub_v3_v3v3(d_12, v2, v1); + sub_v3_v3v3(d_23, v3, v2); + normalize_v3(d_12); + normalize_v3(d_23); + add_v3_v3v3(out, d_12, d_23); + normalize_v3(out); +} + +/* Returns a reflection vector from a vector and a normal vector +reflect = vec - ((2 * DotVecs(vec, mirror)) * mirror) +*/ +void reflect_v3_v3v3(float *out, float *v1, float *v2) +{ + float vec[3], normal[3]; + float reflect[3] = {0.0f, 0.0f, 0.0f}; + float dot2; + + copy_v3_v3(vec, v1); + copy_v3_v3(normal, v2); + + normalize_v3(normal); + + dot2 = 2 * dot_v3v3(vec, normal); + + reflect[0] = vec[0] - (dot2 * normal[0]); + reflect[1] = vec[1] - (dot2 * normal[1]); + reflect[2] = vec[2] - (dot2 * normal[2]); + + copy_v3_v3(out, reflect); +} + +void ortho_basis_v3v3_v3(float *v1, float *v2, float *v) +{ + const float f = (float)sqrt(v[0]*v[0] + v[1]*v[1]); + + if (f < 1e-35f) { + // degenerate case + v1[0] = (v[2] < 0.0f) ? -1.0f : 1.0f; + v1[1] = v1[2] = v2[0] = v2[2] = 0.0f; + v2[1] = 1.0f; + } + else { + const float d= 1.0f/f; + + v1[0] = v[1]*d; + v1[1] = -v[0]*d; + v1[2] = 0.0f; + v2[0] = -v[2]*v1[1]; + v2[1] = v[2]*v1[0]; + v2[2] = v[0]*v1[1] - v[1]*v1[0]; + } +} + +/*********************************** Other ***********************************/ + +void print_v2(char *str, float v[2]) +{ + printf("%s: %.3f %.3f\n", str, v[0], v[1]); +} + +void print_v3(char *str, float v[3]) +{ + printf("%s: %.3f %.3f %.3f\n", str, v[0], v[1], v[2]); +} + +void print_v4(char *str, float v[4]) +{ + printf("%s: %.3f %.3f %.3f %.3f\n", str, v[0], v[1], v[2], v[3]); +} + +void normal_short_to_float_v3(float *out, short *in) +{ + out[0] = in[0]*(1.0f/32767.0f); + out[1] = in[1]*(1.0f/32767.0f); + out[2] = in[2]*(1.0f/32767.0f); +} + +void normal_float_to_short_v3(short *out, float *in) +{ + out[0] = (short)(in[0]*32767.0f); + out[1] = (short)(in[1]*32767.0f); + out[2] = (short)(in[2]*32767.0f); +} + +void minmax_v3_v3v3(float *min, float *max, float *vec) +{ + if(min[0]>vec[0]) min[0]= vec[0]; + if(min[1]>vec[1]) min[1]= vec[1]; + if(min[2]>vec[2]) min[2]= vec[2]; + + if(max[0]<vec[0]) max[0]= vec[0]; + if(max[1]<vec[1]) max[1]= vec[1]; + if(max[2]<vec[2]) max[2]= vec[2]; +} + diff --git a/source/blender/blenlib/intern/math_vector_inline.c b/source/blender/blenlib/intern/math_vector_inline.c new file mode 100644 index 00000000000..6830f44ae1b --- /dev/null +++ b/source/blender/blenlib/intern/math_vector_inline.c @@ -0,0 +1,258 @@ +/** + * $Id$ + * + * ***** BEGIN GPL 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + + * The Original Code is: some of this file. + * + * ***** END GPL LICENSE BLOCK ***** + * */ + +#include "BLI_math.h" + +#ifndef BLI_MATH_VECTOR_INLINE +#define BLI_MATH_VECTOR_INLINE + +/********************************** Init *************************************/ + +MINLINE void zero_v2(float r[2]) +{ + r[0]= 0.0f; + r[1]= 0.0f; +} + +MINLINE void zero_v3(float r[3]) +{ + r[0]= 0.0f; + r[1]= 0.0f; + r[2]= 0.0f; +} + +MINLINE void copy_v2_v2(float r[2], float a[2]) +{ + r[0]= a[0]; + r[1]= a[1]; +} + +MINLINE void copy_v3_v3(float r[3], float a[3]) +{ + r[0]= a[0]; + r[1]= a[1]; + r[2]= a[2]; +} + +/********************************* Arithmetic ********************************/ + +MINLINE void add_v2_v2(float *r, float *a) +{ + r[0] += a[0]; + r[1] += a[1]; +} + +MINLINE void add_v2_v2v2(float *r, float *a, float *b) +{ + r[0]= a[0] + b[0]; + r[1]= a[1] + b[1]; +} + +MINLINE void add_v3_v3(float *r, float *a) +{ + r[0] += a[0]; + r[1] += a[1]; + r[1] += a[1]; +} + +MINLINE void add_v3_v3v3(float *r, float *a, float *b) +{ + r[0]= a[0] + b[0]; + r[1]= a[1] + b[1]; + r[2]= a[2] + b[2]; +} + +MINLINE void sub_v2_v2(float *r, float *a) +{ + r[0] -= a[0]; + r[1] -= a[1]; +} + +MINLINE void sub_v2_v2v2(float *r, float *a, float *b) +{ + r[0]= a[0] - b[0]; + r[1]= a[1] - b[1]; +} + +MINLINE void sub_v3_v3(float *r, float *a) +{ + r[0] -= a[0]; + r[1] -= a[1]; + r[1] -= a[1]; +} + +MINLINE void sub_v3_v3v3(float *r, float *a, float *b) +{ + r[0]= a[0] - b[0]; + r[1]= a[1] - b[1]; + r[2]= a[2] - b[2]; +} + +MINLINE void mul_v2_fl(float *v1, float f) +{ + v1[0]*= f; + v1[1]*= f; +} + +MINLINE void mul_v3_fl(float r[3], float f) +{ + r[0] *= f; + r[1] *= f; + r[2] *= f; +} + +MINLINE void mul_v3_v3fl(float r[3], float a[3], float f) +{ + r[0]= a[0]*f; + r[1]= a[1]*f; + r[2]= a[2]*f; +} + +MINLINE void mul_v3_v3(float r[3], float a[3]) +{ + r[0] *= a[0]; + r[1] *= a[1]; + r[2] *= a[2]; +} + +MINLINE void mul_v3_v3v3(float *v, float *v1, float *v2) +{ + v[0] = v1[0] * v2[0]; + v[1] = v1[1] * v2[1]; + v[2] = v1[2] * v2[2]; +} + +MINLINE void negate_v3(float r[3]) +{ + r[0]= -r[0]; + r[1]= -r[1]; + r[2]= -r[2]; +} + +MINLINE void negate_v3_v3(float r[3], float a[3]) +{ + r[0]= -a[0]; + r[1]= -a[1]; + r[2]= -a[2]; +} + +MINLINE float dot_v2v2(float *a, float *b) +{ + return a[0]*b[0] + a[1]*b[1]; +} + +MINLINE float dot_v3v3(float a[3], float b[3]) +{ + return a[0]*b[0] + a[1]*b[1] + a[2]*b[2]; +} + +MINLINE float cross_v2v2(float a[2], float b[2]) +{ + return a[0]*b[1] - a[1]*b[0]; +} + +MINLINE void cross_v3_v3v3(float r[3], float a[3], float b[3]) +{ + r[0]= a[1]*b[2] - a[2]*b[1]; + r[1]= a[2]*b[0] - a[0]*b[2]; + r[2]= a[0]*b[1] - a[1]*b[0]; +} + +MINLINE void star_m3_v3(float mat[][3], float *vec) +{ + mat[0][0]= mat[1][1]= mat[2][2]= 0.0; + mat[0][1]= -vec[2]; + mat[0][2]= vec[1]; + mat[1][0]= vec[2]; + mat[1][2]= -vec[0]; + mat[2][0]= -vec[1]; + mat[2][1]= vec[0]; +} + +/*********************************** Length **********************************/ + +MINLINE float len_v2(float *v) +{ + return (float)sqrt(v[0]*v[0] + v[1]*v[1]); +} + +MINLINE float len_v2v2(float *v1, float *v2) +{ + float x, y; + + x = v1[0]-v2[0]; + y = v1[1]-v2[1]; + return (float)sqrt(x*x+y*y); +} + +MINLINE float len_v3(float a[3]) +{ + return sqrtf(dot_v3v3(a, a)); +} + +MINLINE float len_v3v3(float a[3], float b[3]) +{ + float d[3]; + + sub_v3_v3v3(d, b, a); + return len_v3(d); +} + +MINLINE float normalize_v2(float n[2]) +{ + float d= dot_v2v2(n, n); + + if(d > 1.0e-35f) { + d= sqrtf(d); + mul_v2_fl(n, 1.0f/d); + } else { + zero_v2(n); + d= 0.0f; + } + return d; +} + +MINLINE float normalize_v3(float n[3]) +{ + float d= dot_v3v3(n, n); + + /* a larger value causes normalize errors in a + scaled down models with camera xtreme close */ + if(d > 1.0e-35f) { + d= sqrtf(d); + mul_v3_fl(n, 1.0f/d); + } + else { + zero_v3(n); + d= 0.0f; + } + + return d; +} + +#endif /* BLI_MATH_VECTOR_INLINE */ + diff --git a/source/blender/blenlib/intern/pbvh.c b/source/blender/blenlib/intern/pbvh.c index 4cf278d219e..c2f0705d8c2 100644 --- a/source/blender/blenlib/intern/pbvh.c +++ b/source/blender/blenlib/intern/pbvh.c @@ -28,7 +28,7 @@ #include "DNA_meshdata_types.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_ghash.h" #include "BLI_pbvh.h" @@ -698,11 +698,11 @@ static void pbvh_update_normals(PBVH *bvh, PBVHNode **nodes, int sides= (f->v4)? 4: 3; if(f->v4) - CalcNormFloat4(bvh->verts[f->v1].co, bvh->verts[f->v2].co, - bvh->verts[f->v3].co, bvh->verts[f->v4].co, fn); + normal_quad_v3(fn, bvh->verts[f->v1].co, bvh->verts[f->v2].co, + bvh->verts[f->v3].co, bvh->verts[f->v4].co); else - CalcNormFloat(bvh->verts[f->v1].co, bvh->verts[f->v2].co, - bvh->verts[f->v3].co, fn); + normal_tri_v3(fn, bvh->verts[f->v1].co, bvh->verts[f->v2].co, + bvh->verts[f->v3].co); for(j = 0; j < sides; ++j) { int v= fv[j]; @@ -720,7 +720,7 @@ static void pbvh_update_normals(PBVH *bvh, PBVHNode **nodes, } if(face_nors) - VECCOPY(face_nors[faces[i]], fn); + copy_v3_v3(face_nors[faces[i]], fn); } } } @@ -742,8 +742,8 @@ static void pbvh_update_normals(PBVH *bvh, PBVHNode **nodes, if(mvert->flag & ME_VERT_PBVH_UPDATE) { float no[3]; - VECCOPY(no, vnor[v]); - Normalize(no); + copy_v3_v3(no, vnor[v]); + normalize_v3(no); mvert->no[0] = (short)(no[0]*32767.0f); mvert->no[1] = (short)(no[1]*32767.0f); @@ -873,8 +873,8 @@ void BLI_pbvh_redraw_BB(PBVH *bvh, float bb_min[3], float bb_max[3]) pbvh_iter_end(&iter); - VecCopyf(bb_min, bb.bmin); - VecCopyf(bb_max, bb.bmax); + copy_v3_v3(bb_min, bb.bmin); + copy_v3_v3(bb_max, bb.bmax); } /***************************** Node Access ***********************************/ @@ -905,14 +905,14 @@ void *BLI_pbvh_node_get_draw_buffers(PBVHNode *node) void BLI_pbvh_node_get_BB(PBVHNode *node, float bb_min[3], float bb_max[3]) { - VecCopyf(bb_min, node->vb.bmin); - VecCopyf(bb_max, node->vb.bmax); + copy_v3_v3(bb_min, node->vb.bmin); + copy_v3_v3(bb_max, node->vb.bmax); } void BLI_pbvh_node_get_original_BB(PBVHNode *node, float bb_min[3], float bb_max[3]) { - VecCopyf(bb_min, node->orig_vb.bmin); - VecCopyf(bb_max, node->orig_vb.bmax); + copy_v3_v3(bb_min, node->orig_vb.bmin); + copy_v3_v3(bb_max, node->orig_vb.bmax); } /********************************* Raycast ***********************************/ @@ -937,8 +937,8 @@ static int ray_aabb_intersect(PBVHNode *node, void *data_v) else BLI_pbvh_node_get_BB(node, bb_min, bb_max); - VecCopyf(bbox[0], bb_min); - VecCopyf(bbox[1], bb_max); + copy_v3_v3(bbox[0], bb_min); + copy_v3_v3(bbox[1], bb_max); tmin = (bbox[ray->sign[0]][0] - ray->start[0]) * ray->inv_dir[0]; tmax = (bbox[1-ray->sign[0]][0] - ray->start[0]) * ray->inv_dir[0]; @@ -976,7 +976,7 @@ void BLI_pbvh_raycast(PBVH *bvh, BLI_pbvh_HitCallback cb, void *data, { RaycastData rcd; - VecCopyf(rcd.start, ray_start); + copy_v3_v3(rcd.start, ray_start); rcd.inv_dir[0] = 1.0f / ray_normal[0]; rcd.inv_dir[1] = 1.0f / ray_normal[1]; rcd.inv_dir[2] = 1.0f / ray_normal[2]; diff --git a/source/blender/blenlib/intern/scanfill.c b/source/blender/blenlib/intern/scanfill.c index bd9ed85efa2..e54382c9392 100644 --- a/source/blender/blenlib/intern/scanfill.c +++ b/source/blender/blenlib/intern/scanfill.c @@ -40,7 +40,7 @@ #include "DNA_listBase.h" #include "DNA_mesh_types.h" #include "BLI_editVert.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_scanfill.h" #include "BLI_callbacks.h" @@ -432,13 +432,13 @@ static void testvertexnearedge(void) eed= filledgebase.first; while(eed) { if(eve!=eed->v1 && eve!=eed->v2 && eve->xs==eed->f1) { - if(FloatCompare(eve->co,eed->v1->co, COMPLIMIT)) { + if(compare_v3v3(eve->co,eed->v1->co, COMPLIMIT)) { ed1->v2= eed->v1; eed->v1->h++; eve->h= 0; break; } - else if(FloatCompare(eve->co,eed->v2->co, COMPLIMIT)) { + else if(compare_v3v3(eve->co,eed->v2->co, COMPLIMIT)) { ed1->v2= eed->v2; eed->v2->h++; eve->h= 0; @@ -450,7 +450,7 @@ static void testvertexnearedge(void) vec2[0]= eed->v2->co[cox]; vec2[1]= eed->v2->co[coy]; if(boundinsideEV(eed,eve)) { - dist= DistVL2Dfl(vec1,vec2,vec3); + dist= dist_to_line_v2(vec1,vec2,vec3); if(dist<COMPLIMIT) { /* new edge */ ed1= BLI_addfilledge(eed->v1, eve); @@ -819,12 +819,12 @@ int BLI_edgefill(int mode, int mat_nr) eve= fillvertbase.first; while(eve) { if(v2) { - if( FloatCompare(v2, eve->co, COMPLIMIT)==0) { - len= CalcNormFloat(v1, v2, eve->co, norm); + if( compare_v3v3(v2, eve->co, COMPLIMIT)==0) { + len= normal_tri_v3( norm,v1, v2, eve->co); if(len != 0.0) break; } } - else if(FloatCompare(v1, eve->co, COMPLIMIT)==0) { + else if(compare_v3v3(v1, eve->co, COMPLIMIT)==0) { v2= eve->co; } eve= eve->next; diff --git a/source/blender/blenlib/intern/util.c b/source/blender/blenlib/intern/util.c index e2acbf21624..39afced92bc 100644 --- a/source/blender/blenlib/intern/util.c +++ b/source/blender/blenlib/intern/util.c @@ -1403,7 +1403,14 @@ void BLI_where_am_i(char *fullname, const char *name) return; } #endif - + +#ifdef _WIN32 + if(GetModuleFileName(0, fullname, FILE_MAXDIR+FILE_MAXFILE)) { + GetShortPathName(fullname, fullname, FILE_MAXDIR+FILE_MAXFILE); + return; + } +#endif + /* unix and non linux */ if (name && fullname && strlen(name)) { strcpy(fullname, name); diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 00f7cbd9eeb..1fa9090ba45 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -102,7 +102,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_storage_types.h" // for relname flags #include "BKE_animsys.h" @@ -1983,6 +1983,8 @@ static void lib_link_ntree(FileData *fd, ID *id, bNodeTree *ntree) if(ntree->adt) lib_link_animdata(fd, &ntree->id, ntree->adt); + ntree->gpd= newlibadr_us(fd, id->lib, ntree->gpd); + for(node= ntree->nodes.first; node; node= node->next) node->id= newlibadr_us(fd, id->lib, node->id); } @@ -2333,7 +2335,7 @@ static void lib_link_pose(FileData *fd, Object *ob, bPose *pose) rebuild= 1; else if(ob->id.lib==NULL && arm->id.lib) { /* local pose selection copied to armature, bit hackish */ - pchan->bone->flag &= ~(BONE_SELECTED|BONE_ACTIVE); + pchan->bone->flag &= ~BONE_SELECTED; pchan->bone->flag |= pchan->selectflag; } } @@ -2367,6 +2369,8 @@ static void direct_link_bones(FileData *fd, Bone* bone) bone->prop= newdataadr(fd, bone->prop); if(bone->prop) IDP_DirectLinkProperty(bone->prop, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd); + + bone->flag &= ~BONE_DRAW_ACTIVE; link_list(fd, &bone->childbase); @@ -2388,6 +2392,9 @@ static void direct_link_armature(FileData *fd, bArmature *arm) direct_link_bones(fd, bone); bone=bone->next; } + + arm->act_bone= newdataadr(fd, arm->act_bone); + arm->act_edbone= NULL; } /* ************ READ CAMERA ***************** */ @@ -8459,7 +8466,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) } /* correctly initialise constinv matrix */ - Mat4One(ob->constinv); + unit_m4(ob->constinv); if (ob->type == OB_ARMATURE) { if (ob->pose) { @@ -8489,7 +8496,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) } /* correctly initialise constinv matrix */ - Mat4One(pchan->constinv); + unit_m4(pchan->constinv); } } } @@ -9152,15 +9159,6 @@ static void do_versions(FileData *fd, Library *lib, Main *main) } } - if (main->versionfile < 247 || (main->versionfile == 247 && main->subversionfile < 4)){ - Scene *sce= main->scene.first; - while(sce) { - if(sce->frame_step==0) - sce->frame_step= 1; - sce= sce->id.next; - } - } - if (main->versionfile < 247 || (main->versionfile == 247 && main->subversionfile < 5)) { Lamp *la= main->lamp.first; for(; la; la= la->id.next) { @@ -9522,7 +9520,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) /* and composit trees */ for(sce= main->scene.first; sce; sce= sce->id.next) { if(sce->nodetree && strlen(sce->nodetree->id.name)==0) - strcpy(sce->nodetree->id.name, "NTComposit Nodetree"); + strcpy(sce->nodetree->id.name, "NTCompositing Nodetree"); /* move to cameras */ if(sce->r.mode & R_PANORAMA) { @@ -9903,7 +9901,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) /* Add default gravity to scenes */ for(sce= main->scene.first; sce; sce= sce->id.next) { if((sce->physics_settings.flag & PHYS_GLOBAL_GRAVITY) == 0 - && VecLength(sce->physics_settings.gravity) == 0.0f) { + && len_v3(sce->physics_settings.gravity) == 0.0f) { sce->physics_settings.gravity[0] = sce->physics_settings.gravity[1] = 0.0f; sce->physics_settings.gravity[2] = -9.81f; @@ -10031,6 +10029,28 @@ static void do_versions(FileData *fd, Library *lib, Main *main) /* put 2.50 compatibility code here until next subversion bump */ { + { + Scene *sce= main->scene.first; + while(sce) { + if(sce->r.frame_step==0) + sce->r.frame_step= 1; + sce= sce->id.next; + } + } + { + /* ensure all nodes have unique names */ + bNodeTree *ntree= main->nodetree.first; + while(ntree) { + bNode *node=ntree->nodes.first; + + while(node) { + nodeUniqueName(ntree, node); + node= node->next; + } + + ntree= ntree->id.next; + } + } } /* WATCH IT!!!: pointers from libdata have not been converted yet here! */ @@ -10465,6 +10485,9 @@ static void expand_nodetree(FileData *fd, Main *mainvar, bNodeTree *ntree) if(ntree->adt) expand_animdata(fd, mainvar, ntree->adt); + + if(ntree->gpd) + expand_doit(fd, mainvar, ntree->gpd); for(node= ntree->nodes.first; node; node= node->next) if(node->id && node->type!=CMP_NODE_R_LAYERS) diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c index 8ec12496e59..b2147221f9f 100644 --- a/source/blender/blenloader/intern/writefile.c +++ b/source/blender/blenloader/intern/writefile.c @@ -1114,7 +1114,7 @@ static void write_pose(WriteData *wd, bPose *pose) /* prevent crashes with autosave, when a bone duplicated in editmode has not yet been assigned to its posechannel */ if (chan->bone) - chan->selectflag= chan->bone->flag & (BONE_SELECTED|BONE_ACTIVE); /* gets restored on read, for library armatures */ + chan->selectflag= chan->bone->flag & BONE_SELECTED; /* gets restored on read, for library armatures */ writestruct(wd, DATA, "bPoseChannel", 1, chan); } diff --git a/source/blender/collada/CMakeLists.txt b/source/blender/collada/CMakeLists.txt index f510e7ee9ad..a0a4fb78b9b 100644 --- a/source/blender/collada/CMakeLists.txt +++ b/source/blender/collada/CMakeLists.txt @@ -53,10 +53,10 @@ SET(INC ../makesrna ../editors/include ../../../intern/guardedalloc - ${OPENCOLLADA}/COLLADAStreamWriter/include - ${OPENCOLLADA}/COLLADABaseUtils/include - ${OPENCOLLADA}/COLLADAFramework/include - ${OPENCOLLADA}/COLLADASaxFrameworkLoader/include + ${OPENCOLLADA_INC}/COLLADAStreamWriter/include + ${OPENCOLLADA_INC}/COLLADABaseUtils/include + ${OPENCOLLADA_INC}/COLLADAFramework/include + ${OPENCOLLADA_INC}/COLLADASaxFrameworkLoader/include ) ENDIF(APPLE) diff --git a/source/blender/collada/DocumentExporter.cpp b/source/blender/collada/DocumentExporter.cpp index b10a95e6418..fac7b2c882a 100644 --- a/source/blender/collada/DocumentExporter.cpp +++ b/source/blender/collada/DocumentExporter.cpp @@ -37,7 +37,7 @@ extern "C" #include "BKE_image.h" #include "BKE_utildefines.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_string.h" #include "BLI_listbase.h" @@ -87,7 +87,7 @@ extern "C" // This function assumes that quat is normalized. // The following document was used as reference: // http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm -void QuatToAxisAngle(float *q, float *axis, float *angle) +void quat_to_axis_angle( float *axis, float *angle,float *q) { // quat to axis angle *angle = 2 * acos(q[0]); @@ -124,6 +124,60 @@ char *CustomData_get_active_layer_name(const CustomData *data, int type) return data->layers[layer_index].name; } +/** +Translation map. +Used to translate every COLLADA id to a valid id, no matter what "wrong" letters may be +included. Look at the IDREF XSD declaration for more. +Follows strictly the COLLADA XSD declaration which explicitly allows non-english chars, +like special chars (e.g. micro sign), umlauts and so on. +The COLLADA spec also allows additional chars for member access ('.'), these +must obviously be removed too, otherwise they would be heavily misinterpreted. +*/ +const unsigned char translate_map[256] = { + 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 45, 95, 95, + 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 95, 95, 95, 95, 95, 95, + 95, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 95, 95, 95, 95, 95, + 95, 97, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 183, + 95, 95, 95, 95, 95, 95, 95, 95, + 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212, 213, 214, 95, + 216, 217, 218, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 95, + 248, 249, 250, 251, 252, 253, 254, 255}; + +/** Look at documentation of translate_map */ +static std::string translate_id(const std::string &id) +{ + std::string id_translated = id; + for (int i=0; i < id_translated.size(); i++) + { + id_translated[i] = translate_map[id_translated[i]]; + } + return id_translated; +} + static std::string id_name(void *id) { return ((ID*)id)->name + 2; @@ -131,28 +185,17 @@ static std::string id_name(void *id) static std::string get_geometry_id(Object *ob) { - return id_name(ob) + "-mesh"; + return translate_id(id_name(ob)) + "-mesh"; } static std::string get_light_id(Object *ob) { - return id_name(ob) + "-light"; + return translate_id(id_name(ob)) + "-light"; } static std::string get_camera_id(Object *ob) { - return id_name(ob) + "-camera"; -} - -static void replace_chars(char *str, char chars[], char with) -{ - char *ch, *p; - - for (ch = chars; *ch; ch++) { - while ((p = strchr(str, *ch))) { - *p = with; - } - } + return translate_id(id_name(ob)) + "-camera"; } /* @@ -236,10 +279,11 @@ public: if (!ma) continue; - if (find(mMat.begin(), mMat.end(), id_name(ma)) == mMat.end()) { + std::string translated_id = translate_id(id_name(ma)); + if (find(mMat.begin(), mMat.end(), translated_id) == mMat.end()) { (*this->f)(ma, ob); - mMat.push_back(id_name(ma)); + mMat.push_back(translated_id); } } } @@ -384,8 +428,9 @@ public: polylist.setCount(faces_in_polylist); // sets material name - if (has_material) - polylist.setMaterial(id_name(ma)); + if (has_material) { + polylist.setMaterial(translate_id(id_name(ma))); + } COLLADASW::InputList &til = polylist.getInputList(); @@ -621,11 +666,11 @@ protected: if (parent_mat) { float invpar[4][4]; - Mat4Invert(invpar, parent_mat); - Mat4MulMat4(local, mat, invpar); + invert_m4_m4(invpar, parent_mat); + mul_m4_m4m4(local, mat, invpar); } else { - Mat4CpyMat4(local, mat); + copy_m4_m4(local, mat); } TransformBase::decompose(local, loc, rot, size); @@ -636,9 +681,9 @@ protected: float axis[3]; float angle; double angle_deg; - EulToQuat(rot, quat); - NormalQuat(quat); - QuatToAxisAngle(quat, axis, &angle); + eul_to_quat( quat,rot); + normalize_qt(quat); + quat_to_axis_angle( axis, &angle,quat); angle_deg = angle * 180.0f / M_PI; node.addRotate(axis[0], axis[1], axis[2], angle_deg); */ @@ -664,6 +709,7 @@ protected: if (ma) { std::string matid(id_name(ma)); + matid = translate_id(matid); COLLADASW::InstanceMaterial im(matid, COLLADASW::URI(COLLADABU::Utils::EMPTY_STRING, matid)); // create <bind_vertex_input> for each uv layer @@ -807,18 +853,14 @@ private: std::string get_joint_id(Bone *bone, Object *ob_arm) { - return id_name(ob_arm) + "_" + bone->name; + return translate_id(id_name(ob_arm) + "_" + bone->name); } std::string get_joint_sid(Bone *bone) { char name[100]; BLI_strncpy(name, bone->name, sizeof(name)); - - // these chars have special meaning in SID - replace_chars(name, ".()", '_'); - - return name; + return translate_id(name); } // parent_mat is armature-space @@ -859,12 +901,12 @@ private: bPoseChannel *parchan = get_pose_channel(ob_arm->pose, bone->parent->name); float invpar[4][4]; - Mat4Invert(invpar, parchan->pose_mat); - Mat4MulMat4(mat, pchan->pose_mat, invpar); + invert_m4_m4(invpar, parchan->pose_mat); + mul_m4_m4m4(mat, pchan->pose_mat, invpar); } else { // get world-space from armature-space - Mat4MulMat4(mat, pchan->pose_mat, ob_arm->obmat); + mul_m4_m4m4(mat, pchan->pose_mat, ob_arm->obmat); } TransformWriter::add_node_transform(node, mat, NULL); @@ -872,7 +914,7 @@ private: std::string get_controller_id(Object *ob_arm) { - return id_name(ob_arm) + SKIN_CONTROLLER_ID_SUFFIX; + return translate_id(id_name(ob_arm)) + SKIN_CONTROLLER_ID_SUFFIX; } // ob should be of type OB_MESH @@ -1017,9 +1059,9 @@ private: float inv_bind_mat[4][4]; // make world-space matrix, pose_mat is armature-space - Mat4MulMat4(world, pchan->pose_mat, ob_arm->obmat); + mul_m4_m4m4(world, pchan->pose_mat, ob_arm->obmat); - Mat4Invert(mat, world); + invert_m4_m4(mat, world); converter.mat4_to_dae(inv_bind_mat, mat); source.appendValues(inv_bind_mat); @@ -1144,7 +1186,8 @@ public: void exportScene(Scene *sce) { // <library_visual_scenes> <visual_scene> - openVisualScene(id_name(sce)); + std::string id_naming = id_name(sce); + openVisualScene(translate_id(id_naming), id_naming); // write <node>s //forEachMeshObjectInScene(sce, *this); @@ -1187,7 +1230,7 @@ public: void writeNodes(Object *ob, Scene *sce) { COLLADASW::Node node(mSW); - node.setNodeId(id_name(ob)); + node.setNodeId(translate_id(id_name(ob))); node.setType(COLLADASW::Node::NODE); node.start(); @@ -1198,9 +1241,9 @@ public: if (ob->type == OB_MESH && is_skinned_mesh) // for skinned mesh we write obmat in <bind_shape_matrix> - Mat4One(mat); + unit_m4(mat); else - Mat4CpyMat4(mat, ob->obmat); + copy_m4_m4(mat, ob->obmat); TransformWriter::add_node_transform(node, mat, ob->parent ? ob->parent->obmat : NULL); @@ -1296,6 +1339,7 @@ public: Image *image = mtex->tex->ima; std::string name(id_name(image)); + name = translate_id(name); char rel[FILE_MAX]; char abs[FILE_MAX]; char src[FILE_MAX]; @@ -1350,7 +1394,7 @@ public: std::vector<int> tex_indices; createTextureIndices(ma, tex_indices); - openEffect(id_name(ma) + "-effect"); + openEffect(translate_id(id_name(ma)) + "-effect"); COLLADASW::EffectProfile ep(mSW); ep.setProfileType(COLLADASW::EffectProfile::COMMON); @@ -1425,6 +1469,7 @@ public: Image *ima = t->tex->ima; std::string key(id_name(ima)); + key = translate_id(key); // create only one <sampler>/<surface> pair for each unique image if (im_samp_map.find(key) == im_samp_map.end()) { @@ -1466,6 +1511,7 @@ public: // we assume map input is always TEXCO_UV std::string key(id_name(ima)); + key = translate_id(key); int i = im_samp_map[key]; COLLADASW::Sampler *sampler = (COLLADASW::Sampler*)samp_surf[i][0]; //COLLADASW::Surface *surface = (COLLADASW::Surface*)samp_surf[i][1]; @@ -1508,7 +1554,7 @@ public: /*COLLADASW::Surface *surface*/) { - COLLADASW::Texture texture(id_name(ima)); + COLLADASW::Texture texture(translate_id(id_name(ima))); texture.setTexcoord(uv_layer_name); //texture.setSurface(*surface); texture.setSampler(*sampler); @@ -1557,9 +1603,9 @@ public: { std::string name(id_name(ma)); - openMaterial(name); + openMaterial(translate_id(name), name); - std::string efid = name + "-effect"; + std::string efid = translate_id(name) + "-effect"; addInstanceEffect(COLLADASW::URI(COLLADABU::Utils::EMPTY_STRING, efid)); closeMaterial(); @@ -1851,16 +1897,21 @@ public: const char *axis_names[] = {"X", "Y", "Z"}; const char *axis_name = NULL; char c_anim_id[100]; // careful! + char c_anim_name[100]; // careful! if (fcu->array_index < 3) axis_name = axis_names[fcu->array_index]; - BLI_snprintf(c_anim_id, sizeof(c_anim_id), "%s.%s.%s", (char*)ob_name.c_str(), fcu->rna_path, axis_names[fcu->array_index]); + BLI_snprintf(c_anim_id, sizeof(c_anim_id), "%s.%s.%s", (char*)translate_id(ob_name).c_str(), + fcu->rna_path, axis_names[fcu->array_index]); std::string anim_id(c_anim_id); + BLI_snprintf(c_anim_name, sizeof(c_anim_name), "%s.%s.%s", + (char*)ob_name.c_str(), fcu->rna_path, axis_names[fcu->array_index]); + std::string anim_name = c_anim_name; // check rna_path is one of: rotation, scale, location - openAnimation(anim_id); + openAnimation(anim_id, anim_name); // create input source std::string input_id = create_source(Sampler::INPUT, fcu, anim_id, axis_name); @@ -1882,7 +1933,8 @@ public: addSampler(sampler); - std::string target = ob_name + "/" + get_transform_sid(fcu->rna_path, axis_name); + std::string target = translate_id(ob_name) + + "/" + get_transform_sid(fcu->rna_path, axis_name); addChannel(COLLADABU::URI(empty, sampler_id), target); closeAnimation(); @@ -1893,18 +1945,23 @@ public: const char *axis_names[] = {"X", "Y", "Z"}; const char *axis_name = NULL; char c_anim_id[100]; // careful! + char c_anim_name[100]; // careful! if (fcu->array_index < 3) axis_name = axis_names[fcu->array_index]; std::string transform_sid = get_transform_sid(fcu->rna_path, axis_name); - BLI_snprintf(c_anim_id, sizeof(c_anim_id), "%s.%s.%s", (char*)ob_name.c_str(), (char*)bone_name.c_str(), (char*)transform_sid.c_str()); + BLI_snprintf(c_anim_id, sizeof(c_anim_id), "%s.%s.%s", (char*)translate_id(ob_name).c_str(), + (char*)translate_id(bone_name).c_str(), (char*)transform_sid.c_str()); std::string anim_id(c_anim_id); + BLI_snprintf(c_anim_name, sizeof(c_anim_name), "%s.%s.%s", + (char*)ob_name.c_str(), (char*)bone_name.c_str(), (char*)transform_sid.c_str()); + std::string anim_name(c_anim_name); // check rna_path is one of: rotation, scale, location - openAnimation(anim_id); + openAnimation(anim_id, anim_name); // create input source std::string input_id = create_source(Sampler::INPUT, fcu, anim_id, axis_name); @@ -1926,7 +1983,7 @@ public: addSampler(sampler); - std::string target = ob_name + "_" + bone_name + "/" + transform_sid; + std::string target = translate_id(ob_name + "_" + bone_name) + "/" + transform_sid; addChannel(COLLADABU::URI(empty, sampler_id), target); closeAnimation(); @@ -1991,7 +2048,7 @@ public: float eul[3]; - QuatToEul(quat, eul); + quat_to_eul( eul,quat); for (int k = 0; k < 3; k++) create_bezt(eulcu[k], frame, eul[k]); @@ -2122,7 +2179,7 @@ void DocumentExporter::exportCurrentScene(Scene *sce, const char* filename) se.exportScene(sce); // <scene> - std::string scene_name(id_name(sce)); + std::string scene_name(translate_id(id_name(sce))); COLLADASW::Scene scene(&sw, COLLADASW::URI(COLLADABU::Utils::EMPTY_STRING, scene_name)); scene.add(); diff --git a/source/blender/collada/DocumentImporter.cpp b/source/blender/collada/DocumentImporter.cpp index 0aa69d11949..aae1738381f 100644 --- a/source/blender/collada/DocumentImporter.cpp +++ b/source/blender/collada/DocumentImporter.cpp @@ -50,7 +50,7 @@ extern "C" #include "BKE_depsgraph.h" #include "BLI_util.h" #include "BKE_displist.h" -#include "BLI_arithb.h" +#include "BLI_math.h" } #include "BKE_armature.h" #include "BKE_mesh.h" @@ -62,7 +62,7 @@ extern "C" #include "BKE_utildefines.h" #include "BKE_action.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_listbase.h" #include "BLI_string.h" @@ -186,7 +186,7 @@ public: float cur[4][4]; float copy[4][4]; - Mat4One(mat); + unit_m4(mat); for (int i = 0; i < node->getTransformations().getCount(); i++) { @@ -199,7 +199,7 @@ public: COLLADAFW::Translate *tra = (COLLADAFW::Translate*)tm; COLLADABU::Math::Vector3& t = tra->getTranslation(); - Mat4One(cur); + unit_m4(cur); cur[3][0] = (float)t[0]; cur[3][1] = (float)t[1]; cur[3][2] = (float)t[2]; @@ -214,16 +214,16 @@ public: float quat[4]; float rot_copy[3][3]; float mat[3][3]; - AxisAngleToQuat(quat, axis, angle); + axis_angle_to_quat(quat, axis, angle); - QuatToMat4(quat, cur); + quat_to_mat4( cur,quat); } break; case COLLADAFW::Transformation::SCALE: { COLLADABU::Math::Vector3& s = ((COLLADAFW::Scale*)tm)->getScale(); float size[3] = {(float)s[0], (float)s[1], (float)s[2]}; - SizeToMat4(size, cur); + size_to_mat4( cur,size); } break; case COLLADAFW::Transformation::MATRIX: @@ -237,8 +237,8 @@ public: break; } - Mat4CpyMat4(copy, mat); - Mat4MulMat4(mat, cur, copy); + copy_m4_m4(copy, mat); + mul_m4_m4m4(mat, cur, copy); if (animation_map) { // AnimationList that drives this Transformation @@ -346,7 +346,7 @@ private: ob_arm(skin.ob_arm), controller_uid(skin.controller_uid) { - Mat4CpyMat4(bind_shape_matrix, (float (*)[4])skin.bind_shape_matrix); + copy_m4_m4(bind_shape_matrix, (float (*)[4])skin.bind_shape_matrix); transfer_uint_array_data_const(skin.joints_per_vertex, joints_per_vertex); transfer_uint_array_data_const(skin.weight_indices, weight_indices); @@ -438,7 +438,7 @@ private: std::vector<JointData>::iterator it; for (it = joint_data.begin(); it != joint_data.end(); it++) { if ((*it).joint_uid == uid) { - Mat4CpyMat4(inv_bind_mat, (*it).inv_bind_mat); + copy_m4_m4(inv_bind_mat, (*it).inv_bind_mat); return true; } } @@ -491,8 +491,8 @@ private: // we need armature matrix here... where do we get it from I wonder... // root node/joint? or node with <instance_controller>? float parmat[4][4]; - Mat4One(parmat); - Mat4Invert(ob->parentinv, parmat); + unit_m4(parmat); + invert_m4_m4(ob->parentinv, parmat); // create all vertex groups std::vector<JointData>::iterator it; @@ -574,7 +574,7 @@ private: if (skin.get_joint_inv_bind_matrix(joint_inv_bind_mat, node)) { // get original world-space matrix - Mat4Invert(mat, joint_inv_bind_mat); + invert_m4_m4(mat, joint_inv_bind_mat); } // create a bone even if there's no joint data for it (i.e. it has no influence) else { @@ -585,9 +585,9 @@ private: // get world-space if (parent) - Mat4MulMat4(mat, obmat, parent_mat); + mul_m4_m4m4(mat, obmat, parent_mat); else - Mat4CpyMat4(mat, obmat); + copy_m4_m4(mat, obmat); } // TODO rename from Node "name" attrs later @@ -597,21 +597,21 @@ private: if (parent) bone->parent = parent; // set head - VecCopyf(bone->head, mat[3]); + copy_v3_v3(bone->head, mat[3]); // set tail, don't set it to head because 0-length bones are not allowed float vec[3] = {0.0f, 0.5f, 0.0f}; - VecAddf(bone->tail, bone->head, vec); + add_v3_v3v3(bone->tail, bone->head, vec); // set parent tail if (parent && totchild == 1) { - VecCopyf(parent->tail, bone->head); + copy_v3_v3(parent->tail, bone->head); // XXX increase this to prevent "very" small bones? const float epsilon = 0.000001f; // derive leaf bone length - float length = VecLenf(parent->head, parent->tail); + float length = len_v3v3(parent->head, parent->tail); if ((length < leaf_bone_length || totbone == 0) && length > epsilon) { leaf_bone_length = length; } @@ -625,20 +625,20 @@ private: #if 0 // and which row in mat is bone direction float vec[3]; - VecSubf(vec, parent->tail, parent->head); + sub_v3_v3v3(vec, parent->tail, parent->head); #ifdef COLLADA_DEBUG - printvecf("tail - head", vec); - printmatrix4("matrix", parent_mat); + print_v3("tail - head", vec); + print_m4("matrix", parent_mat); #endif for (int i = 0; i < 3; i++) { #ifdef COLLADA_DEBUG char *axis_names[] = {"X", "Y", "Z"}; - printf("%s-axis length is %f\n", axis_names[i], VecLength(parent_mat[i])); + printf("%s-axis length is %f\n", axis_names[i], len_v3(parent_mat[i])); #endif - float angle = VecAngle2(vec, parent_mat[i]); + float angle = angle_v2v2(vec, parent_mat[i]); if (angle < min_angle) { #ifdef COLLADA_DEBUG - printvecf("picking", parent_mat[i]); + print_v3("picking", parent_mat[i]); printf("^ %s axis of %s's matrix\n", axis_names[i], get_dae_name(node)); #endif bone_direction_row = i; @@ -665,7 +665,7 @@ private: LeafBone leaf; leaf.bone = bone; - Mat4CpyMat4(leaf.mat, mat); + copy_m4_m4(leaf.mat, mat); BLI_strncpy(leaf.name, bone->name, sizeof(leaf.name)); leaf_bones.push_back(leaf); @@ -682,10 +682,10 @@ private: // pointing up float vec[3] = {0.0f, 0.0f, 1.0f}; - VecMulf(vec, leaf_bone_length); + mul_v3_fl(vec, leaf_bone_length); - VecCopyf(leaf.bone->tail, leaf.bone->head); - VecAddf(leaf.bone->tail, leaf.bone->head, vec); + copy_v3_v3(leaf.bone->tail, leaf.bone->head); + add_v3_v3v3(leaf.bone->tail, leaf.bone->head, vec); } } @@ -2200,7 +2200,7 @@ public: float quat[4]; - EulToQuat(eul, quat); + eul_to_quat( quat,eul); for (int k = 0; k < 4; k++) create_bezt(quatcu[k], frame, quat[k]); diff --git a/source/blender/collada/SConscript b/source/blender/collada/SConscript index 7bf2870d6c5..6a1c71c9c86 100644 --- a/source/blender/collada/SConscript +++ b/source/blender/collada/SConscript @@ -4,7 +4,10 @@ Import ('env') sources = env.Glob('*.cpp') # relative paths to include dirs, space-separated, string -incs = '../blenlib ../blenkernel ../windowmanager ../makesdna ../makesrna ../editors/include ../../../intern/guardedalloc [OPENCOLLADA]/COLLADAStreamWriter/include [OPENCOLLADA]/COLLADABaseUtils/include [OPENCOLLADA]/COLLADAFramework/include [OPENCOLLADA]/COLLADASaxFrameworkLoader/include '.replace('[OPENCOLLADA]', env['BF_OPENCOLLADA_INC']) +if env['OURPLATFORM']=='darwin': + incs = '../blenlib ../blenkernel ../windowmanager ../makesdna ../makesrna ../editors/include ../../../intern/guardedalloc [OPENCOLLADA]/COLLADAStreamWriter [OPENCOLLADA]/COLLADABaseUtils [OPENCOLLADA]/COLLADAFramework [OPENCOLLADA]/COLLADASaxFrameworkLoader '.replace('[OPENCOLLADA]', env['BF_OPENCOLLADA_INC']) +else: + incs = '../blenlib ../blenkernel ../windowmanager ../makesdna ../makesrna ../editors/include ../../../intern/guardedalloc [OPENCOLLADA]/COLLADAStreamWriter/include [OPENCOLLADA]/COLLADABaseUtils/include [OPENCOLLADA]/COLLADAFramework/include [OPENCOLLADA]/COLLADASaxFrameworkLoader/include '.replace('[OPENCOLLADA]', env['BF_OPENCOLLADA_INC']) env.BlenderLib ('bf_collada', sources, Split(incs), [], libtype='core', priority=200 ) diff --git a/source/blender/collada/collada_internal.h b/source/blender/collada/collada_internal.h index c0d74505f72..32c3e7af874 100644 --- a/source/blender/collada/collada_internal.h +++ b/source/blender/collada/collada_internal.h @@ -39,8 +39,8 @@ public: void mat4_to_dae(float out[][4], float in[][4]) { - Mat4CpyMat4(out, in); - Mat4Transp(out); + copy_m4_m4(out, in); + transpose_m4(out); } void mat4_to_dae_double(double out[][4], float in[][4]) @@ -60,9 +60,9 @@ class TransformBase public: void decompose(float mat[][4], float *loc, float *rot, float *size) { - Mat4ToSize(mat, size); - Mat4ToEul(mat, rot); - VecCopyf(loc, mat[3]); + mat4_to_size( size,mat); + mat4_to_eul( rot,mat); + copy_v3_v3(loc, mat[3]); } }; diff --git a/source/blender/editors/animation/anim_channels_defines.c b/source/blender/editors/animation/anim_channels_defines.c index efbdd505bcb..865e89c927a 100644 --- a/source/blender/editors/animation/anim_channels_defines.c +++ b/source/blender/editors/animation/anim_channels_defines.c @@ -37,7 +37,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "DNA_listBase.h" #include "DNA_anim_types.h" @@ -55,6 +55,7 @@ #include "DNA_lamp_types.h" #include "DNA_material_types.h" #include "DNA_meta_types.h" +#include "DNA_node_types.h" #include "DNA_userdef_types.h" #include "DNA_gpencil_types.h" #include "DNA_windowmanager_types.h" @@ -1735,6 +1736,79 @@ static bAnimChannelType ACF_DSARM= acf_dsarm_setting_ptr /* pointer for setting */ }; +/* NodeTree Expander ------------------------------------------- */ + +// TODO: just get this from RNA? +static int acf_dsntree_icon(bAnimListElem *ale) +{ + return ICON_NODETREE; +} + +/* get the appropriate flag(s) for the setting when it is valid */ +static int acf_dsntree_setting_flag(int setting, short *neg) +{ + /* clear extra return data first */ + *neg= 0; + + switch (setting) { + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return NTREE_DS_EXPAND; + + case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ + return ADT_NLA_EVAL_OFF; + + case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ + *neg= 1; + return ADT_CURVES_NOT_VISIBLE; + + case ACHANNEL_SETTING_SELECT: /* selected */ + return ADT_UI_SELECTED; + + default: /* unsupported */ + return 0; + } +} + +/* get pointer to the setting */ +static void *acf_dsntree_setting_ptr(bAnimListElem *ale, int setting, short *type) +{ + bNodeTree *ntree= (bNodeTree *)ale->data; + + /* clear extra return data first */ + *type= 0; + + switch (setting) { + case ACHANNEL_SETTING_EXPAND: /* expanded */ + GET_ACF_FLAG_PTR(ntree->flag); + + case ACHANNEL_SETTING_SELECT: /* selected */ + case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */ + case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ + if (ntree->adt) + GET_ACF_FLAG_PTR(ntree->adt->flag) + else + return NULL; + + default: /* unsupported */ + return NULL; + } +} + +/* metaball expander type define */ +static bAnimChannelType ACF_DSNTREE= +{ +acf_generic_dataexpand_backdrop,/* backdrop */ +acf_generic_indention_1, /* indent level */ +acf_generic_basic_offset, /* offset */ + +acf_generic_idblock_name, /* name */ +acf_dsntree_icon, /* icon */ + +acf_generic_dataexpand_setting_valid, /* has setting */ +acf_dsntree_setting_flag, /* flag for setting */ +acf_dsntree_setting_ptr /* pointer for setting */ +}; + /* ShapeKey Entry ------------------------------------------- */ @@ -1867,7 +1941,7 @@ static void dummy_olddraw_gpencil () strcpy(treetype, "Material"); sprintf(name, "Nodes:%s", treetype); - special= ICON_NODE; + special= ICON_NODETREE; } break; case SPACE_SEQ: @@ -1982,6 +2056,7 @@ void ANIM_init_channel_typeinfo_data (void) animchannelTypeInfo[type++]= &ACF_DSCUR; /* Curve Channel */ animchannelTypeInfo[type++]= &ACF_DSSKEY; /* ShapeKey Channel */ animchannelTypeInfo[type++]= &ACF_DSWOR; /* World Channel */ + animchannelTypeInfo[type++]= &ACF_DSNTREE; /* NodeTree Channel */ animchannelTypeInfo[type++]= &ACF_DSPART; /* Particle Channel */ animchannelTypeInfo[type++]= &ACF_DSMBALL; /* MetaBall Channel */ animchannelTypeInfo[type++]= &ACF_DSARM; /* Armature Channel */ @@ -2200,6 +2275,9 @@ void ANIM_channel_draw (bAnimContext *ac, bAnimListElem *ale, float yminc, float UI_icon_draw(offset, ymid, acf->icon(ale)); offset += ICON_WIDTH; } + + /* turn off blending, since not needed anymore... */ + glDisable(GL_BLEND); /* step 4) draw special toggles ................................. * - in Graph Editor, checkboxes for visibility in curves area diff --git a/source/blender/editors/animation/anim_channels_edit.c b/source/blender/editors/animation/anim_channels_edit.c index 01945a9733e..57a0f469458 100644 --- a/source/blender/editors/animation/anim_channels_edit.c +++ b/source/blender/editors/animation/anim_channels_edit.c @@ -37,7 +37,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "DNA_listBase.h" #include "DNA_anim_types.h" @@ -1293,7 +1293,7 @@ static int animchannels_borderselect_exec(bContext *C, wmOperator *op) bAnimContext ac; rcti rect; short selectmode=0; - int event; + int gesture_mode; /* get editor data */ if (ANIM_animdata_get_context(C, &ac) == 0) @@ -1305,8 +1305,8 @@ static int animchannels_borderselect_exec(bContext *C, wmOperator *op) rect.xmax= RNA_int_get(op->ptr, "xmax"); rect.ymax= RNA_int_get(op->ptr, "ymax"); - event= RNA_int_get(op->ptr, "event_type"); - if (event == LEFTMOUSE) // FIXME... hardcoded + gesture_mode= RNA_int_get(op->ptr, "gesture_mode"); + if (gesture_mode == GESTURE_MODAL_SELECT) selectmode = ACHANNEL_SETFLAG_ADD; else selectmode = ACHANNEL_SETFLAG_CLEAR; @@ -1338,11 +1338,7 @@ void ANIM_OT_channels_select_border(wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; /* rna */ - RNA_def_int(ot->srna, "event_type", 0, INT_MIN, INT_MAX, "Event Type", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "xmin", 0, INT_MIN, INT_MAX, "X Min", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "xmax", 0, INT_MIN, INT_MAX, "X Max", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "ymin", 0, INT_MIN, INT_MAX, "Y Min", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "ymax", 0, INT_MIN, INT_MAX, "Y Max", "", INT_MIN, INT_MAX); + WM_operator_properties_gesture_border(ot, FALSE); } /* ******************** Mouse-Click Operator *********************** */ diff --git a/source/blender/editors/animation/anim_draw.c b/source/blender/editors/animation/anim_draw.c index aa581a7d15a..45512ae82fe 100644 --- a/source/blender/editors/animation/anim_draw.c +++ b/source/blender/editors/animation/anim_draw.c @@ -343,6 +343,7 @@ short ANIM_headerUI_standard_buttons (const bContext *C, bDopeSheet *ads, uiBloc uiBlockBeginAlign(block); uiDefIconButBitI(block, TOGN, ADS_FILTER_NOSCE, B_REDR, ICON_SCENE_DATA, (short)(xco+=XIC),yco,XIC,YIC, &(ads->filterflag), 0, 0, 0, 0, "Display Scene Animation"); uiDefIconButBitI(block, TOGN, ADS_FILTER_NOWOR, B_REDR, ICON_WORLD_DATA, (short)(xco+=XIC),yco,XIC,YIC, &(ads->filterflag), 0, 0, 0, 0, "Display World Animation"); + uiDefIconButBitI(block, TOGN, ADS_FILTER_NONTREE, B_REDR, ICON_NODETREE, (short)(xco+=XIC),yco,XIC,YIC, &(ads->filterflag), 0, 0, 0, 0, "Display Node Tree Animation"); if (mainptr && mainptr->key.first) uiDefIconButBitI(block, TOGN, ADS_FILTER_NOSHAPEKEYS, B_REDR, ICON_SHAPEKEY_DATA, (short)(xco+=XIC),yco,XIC,YIC, &(ads->filterflag), 0, 0, 0, 0, "Display ShapeKeys"); if (mainptr && mainptr->mat.first) diff --git a/source/blender/editors/animation/anim_filter.c b/source/blender/editors/animation/anim_filter.c index 8c4f10fb222..eab5404f106 100644 --- a/source/blender/editors/animation/anim_filter.c +++ b/source/blender/editors/animation/anim_filter.c @@ -64,6 +64,7 @@ #include "DNA_material_types.h" #include "DNA_mesh_types.h" #include "DNA_meta_types.h" +#include "DNA_node_types.h" #include "DNA_object_types.h" #include "DNA_particle_types.h" #include "DNA_space_types.h" @@ -599,6 +600,19 @@ bAnimListElem *make_new_animlistelem (void *data, short datatype, void *owner, s ale->adt= BKE_animdata_from_id(data); } break; + case ANIMTYPE_DSARM: + { + bArmature *arm= (bArmature *)data; + AnimData *adt= arm->adt; + + ale->flag= FILTER_ARM_OBJD(arm); + + ale->key_data= (adt) ? adt->action : NULL; + ale->datatype= ALE_ACT; + + ale->adt= BKE_animdata_from_id(data); + } + break; case ANIMTYPE_DSSKEY: { Key *key= (Key *)data; @@ -625,6 +639,19 @@ bAnimListElem *make_new_animlistelem (void *data, short datatype, void *owner, s ale->adt= BKE_animdata_from_id(data); } break; + case ANIMTYPE_DSNTREE: + { + bNodeTree *ntree= (bNodeTree *)data; + AnimData *adt= ntree->adt; + + ale->flag= FILTER_NTREE_SCED(ntree); + + ale->key_data= (adt) ? adt->action : NULL; + ale->datatype= ALE_ACT; + + ale->adt= BKE_animdata_from_id(data); + } + break; case ANIMTYPE_DSPART: { ParticleSettings *part= (ParticleSettings*)ale->data; @@ -1485,6 +1512,7 @@ static int animdata_filter_dopesheet_ob (ListBase *anim_data, bDopeSheet *ads, B static int animdata_filter_dopesheet_scene (ListBase *anim_data, bDopeSheet *ads, Scene *sce, int filter_mode) { World *wo= sce->world; + bNodeTree *ntree= sce->nodetree; AnimData *adt= NULL; bAnimListElem *ale; int items = 0; @@ -1590,6 +1618,50 @@ static int animdata_filter_dopesheet_scene (ListBase *anim_data, bDopeSheet *ads } ) } + /* nodetree */ + if ((ntree && ntree->adt) && !(ads->filterflag & ADS_FILTER_NONTREE)) { + /* Action, Drivers, or NLA for Nodetree */ + adt= ntree->adt; + ANIMDATA_FILTER_CASES(ntree, + { /* AnimData blocks - do nothing... */ }, + { /* nla */ + /* add NLA tracks */ + items += animdata_filter_nla(anim_data, ads, adt, filter_mode, ntree, ANIMTYPE_DSNTREE, (ID *)ntree); + }, + { /* drivers */ + /* include nodetree-expand widget? */ + if ((filter_mode & ANIMFILTER_CHANNELS) && !(filter_mode & ANIMFILTER_CURVESONLY)) { + ale= make_new_animlistelem(ntree, ANIMTYPE_DSNTREE, sce, ANIMTYPE_SCENE, (ID *)ntree); + if (ale) { + BLI_addtail(anim_data, ale); + items++; + } + } + + /* add F-Curve channels (drivers are F-Curves) */ + if (FILTER_NTREE_SCED(ntree)/*EXPANDED_DRVD(adt)*/ || !(filter_mode & ANIMFILTER_CHANNELS)) { + // XXX owner info is messed up now... + items += animdata_filter_fcurves(anim_data, ads, adt->drivers.first, NULL, ntree, ANIMTYPE_DSNTREE, filter_mode, (ID *)ntree); + } + }, + { /* action */ + /* include nodetree-expand widget? */ + if ((filter_mode & ANIMFILTER_CHANNELS) && !(filter_mode & ANIMFILTER_CURVESONLY)) { + ale= make_new_animlistelem(ntree, ANIMTYPE_DSNTREE, sce, ANIMTYPE_SCENE, (ID *)sce); + if (ale) { + BLI_addtail(anim_data, ale); + items++; + } + } + + /* add channels */ + if (FILTER_NTREE_SCED(ntree) || (filter_mode & ANIMFILTER_CURVESONLY)) { + items += animdata_filter_action(anim_data, ads, adt->action, filter_mode, ntree, ANIMTYPE_DSNTREE, (ID *)ntree); + } + } + ) + } + // TODO: scene compositing nodes (these aren't standard node-trees) @@ -1616,7 +1688,7 @@ static int animdata_filter_dopesheet (ListBase *anim_data, bAnimContext *ac, bDo /* scene-linked animation */ // TODO: sequencer, composite nodes - are we to include those here too? { - short sceOk= 0, worOk= 0; + short sceOk= 0, worOk= 0, nodeOk=0; /* check filtering-flags if ok */ ANIMDATA_FILTER_CASES(sce, @@ -1643,17 +1715,30 @@ static int animdata_filter_dopesheet (ListBase *anim_data, bAnimContext *ac, bDo worOk= !(ads->filterflag & ADS_FILTER_NOWOR);, worOk= !(ads->filterflag & ADS_FILTER_NOWOR);) } + if (sce->nodetree) { + ANIMDATA_FILTER_CASES(sce->nodetree, + { + /* for the special AnimData blocks only case, we only need to add + * the block if it is valid... then other cases just get skipped (hence ok=0) + */ + ANIMDATA_ADD_ANIMDATA(sce->nodetree); + nodeOk=0; + }, + nodeOk= !(ads->filterflag & ADS_FILTER_NONTREE);, + nodeOk= !(ads->filterflag & ADS_FILTER_NONTREE);, + nodeOk= !(ads->filterflag & ADS_FILTER_NONTREE);) + } /* if only F-Curves with visible flags set can be shown, check that * datablocks haven't been set to invisible */ if (filter_mode & ANIMFILTER_CURVEVISIBLE) { if ((sce->adt) && (sce->adt->flag & ADT_CURVES_NOT_VISIBLE)) - sceOk= worOk= 0; + sceOk= worOk= nodeOk= 0; } /* check if not all bad (i.e. so there is something to show) */ - if ( !(!sceOk && !worOk) ) { + if ( !(!sceOk && !worOk && !nodeOk) ) { /* add scene data to the list of filtered channels */ items += animdata_filter_dopesheet_scene(anim_data, ads, sce, filter_mode); } diff --git a/source/blender/editors/animation/anim_ipo_utils.c b/source/blender/editors/animation/anim_ipo_utils.c index 088fddd2e7e..98b6d0e7097 100644 --- a/source/blender/editors/animation/anim_ipo_utils.c +++ b/source/blender/editors/animation/anim_ipo_utils.c @@ -40,7 +40,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "DNA_anim_types.h" #include "DNA_key_types.h" @@ -61,53 +61,24 @@ /* ----------------------- Getter functions ----------------------- */ -/* gets the appropriate icon for the given blocktype */ -// XXX some of these will be depreceated? -int geticon_anim_blocktype(short blocktype) -{ - switch (blocktype) { - case ID_OB: - return ICON_OBJECT_DATA; - case ID_PO: - return ICON_POSE_HLT; - case ID_KE: - return ICON_SHAPEKEY_DATA; - case ID_MA: - return ICON_MATERIAL; - case ID_WO: - return ICON_WORLD; - case ID_CU: - return ICON_CURVE_DATA; - case ID_CA: - return ICON_CAMERA; - case ID_LA: - return ICON_LAMP; - case ID_TE: - return ICON_TEXTURE; - case ID_CO: - return ICON_CONSTRAINT; - case ID_FLUIDSIM: - return ICON_WORLD; // uggh - default: - return 0; // what about blank icon? - } -} - -/* Write into "name" buffer, the name of the property (retrieved using RNA from the curve's settings) +/* Write into "name" buffer, the name of the property (retrieved using RNA from the curve's settings), + * and return the icon used for the struct that this property refers to * WARNING: name buffer we're writing to cannot exceed 256 chars (check anim_channels_defines.c for details) */ -void getname_anim_fcurve(char *name, ID *id, FCurve *fcu) +int getname_anim_fcurve(char *name, ID *id, FCurve *fcu) { + int icon = 0; + /* sanity checks */ if (name == NULL) - return; + return icon; else if ELEM3(NULL, id, fcu, fcu->rna_path) { if (fcu == NULL) sprintf(name, "<invalid>"); else if (fcu->rna_path == NULL) sprintf(name, "<no path>"); else /* id == NULL */ - BLI_snprintf(name, 128, "%s[%d]", fcu->rna_path, fcu->array_index); + BLI_snprintf(name, 256, "%s[%d]", fcu->rna_path, fcu->array_index); } else { PointerRNA id_ptr, ptr; @@ -182,17 +153,30 @@ void getname_anim_fcurve(char *name, ID *id, FCurve *fcu) /* putting this all together into the buffer */ // XXX we need to check for invalid names... - BLI_snprintf(name, 128, "%s%s (%s)", arrayname, propname, structname); + BLI_snprintf(name, 256, "%s%s (%s)", arrayname, propname, structname); /* free temp name if nameprop is set */ if (free_structname) MEM_freeN(structname); + + + /* Icon for this property's owner: + * use the struct's icon if it is set + */ + icon= RNA_struct_ui_icon(ptr.type); } else { /* invalid path */ - BLI_snprintf(name, 128, "\"%s[%d]\"", fcu->rna_path, fcu->array_index); + BLI_snprintf(name, 256, "\"%s[%d]\"", fcu->rna_path, fcu->array_index); + + /* icon for this should be the icon for the base ID */ + // TODO: or should we just use the error icon? + icon= RNA_struct_ui_icon(id_ptr.type); } } + + /* return the icon that the active data had */ + return icon; } /* ------------------------------- Color Codes for F-Curve Channels ---------------------------- */ diff --git a/source/blender/editors/animation/anim_markers.c b/source/blender/editors/animation/anim_markers.c index 54d569c10dd..463518a32ff 100644 --- a/source/blender/editors/animation/anim_markers.c +++ b/source/blender/editors/animation/anim_markers.c @@ -814,7 +814,7 @@ static int ed_marker_border_select_exec(bContext *C, wmOperator *op) ListBase *markers= context_get_markers(C); TimeMarker *marker; float xminf, xmaxf, yminf, ymaxf; - int event_type= RNA_int_get(op->ptr, "event_type"); + int gesture_mode= RNA_int_get(op->ptr, "gesture_mode"); int xmin= RNA_int_get(op->ptr, "xmin"); int xmax= RNA_int_get(op->ptr, "xmax"); int ymin= RNA_int_get(op->ptr, "ymin"); @@ -833,13 +833,12 @@ static int ed_marker_border_select_exec(bContext *C, wmOperator *op) /* XXX marker context */ for(marker= markers->first; marker; marker= marker->next) { if ((marker->frame > xminf) && (marker->frame <= xmaxf)) { - /* XXX weak... */ - switch (event_type) { - case LEFTMOUSE: + switch (gesture_mode) { + case GESTURE_MODAL_SELECT: if ((marker->flag & SELECT) == 0) marker->flag |= SELECT; break; - case RIGHTMOUSE: + case GESTURE_MODAL_DESELECT: if (marker->flag & SELECT) marker->flag &= ~SELECT; break; @@ -870,11 +869,7 @@ static void MARKER_OT_select_border(wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; /* rna */ - RNA_def_int(ot->srna, "event_type", 0, INT_MIN, INT_MAX, "Event Type", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "xmin", 0, INT_MIN, INT_MAX, "X Min", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "xmax", 0, INT_MIN, INT_MAX, "X Max", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "ymin", 0, INT_MIN, INT_MAX, "Y Min", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "ymax", 0, INT_MIN, INT_MAX, "Y Max", "", INT_MIN, INT_MAX); + WM_operator_properties_gesture_border(ot, FALSE); } /* *********************** (de)select all ***************** */ diff --git a/source/blender/editors/animation/drivers.c b/source/blender/editors/animation/drivers.c index 5442598a261..ac2eec6fd21 100644 --- a/source/blender/editors/animation/drivers.c +++ b/source/blender/editors/animation/drivers.c @@ -36,7 +36,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_dynstr.h" #include "DNA_anim_types.h" @@ -148,6 +148,7 @@ short ANIM_add_driver (ID *id, const char rna_path[], int array_index, short fla PropertyRNA *prop; FCurve *fcu; int array_index_max = array_index+1; + int done = 0; /* validate pointer first - exit if failure */ RNA_id_pointer_create(id, &id_ptr); @@ -156,17 +157,17 @@ short ANIM_add_driver (ID *id, const char rna_path[], int array_index, short fla return 0; } - if(array_index==-1) { /* Key All */ + /* key entire array convenience method */ + if (array_index == -1) { array_index= 0; array_index_max= RNA_property_array_length(&ptr, prop) + 1; } - + /* will only loop once unless the array index was -1 */ - for( ; array_index < array_index_max; array_index++) { - + for (; array_index < array_index_max; array_index++) { /* create F-Curve with Driver */ fcu= verify_driver_fcurve(id, rna_path, array_index, 1); - + if (fcu && fcu->driver) { fcu->driver->type= type; @@ -181,27 +182,30 @@ short ANIM_add_driver (ID *id, const char rna_path[], int array_index, short fla if (proptype == PROP_BOOLEAN) { if (!array) val= RNA_property_boolean_get(&ptr, prop); else val= RNA_property_boolean_get_index(&ptr, prop, array_index); - + BLI_strncpy(expression, (val)? "True": "False", maxlen); } else if (proptype == PROP_INT) { if (!array) val= RNA_property_int_get(&ptr, prop); else val= RNA_property_int_get_index(&ptr, prop, array_index); - + BLI_snprintf(expression, maxlen, "%d", val); } else if (proptype == PROP_FLOAT) { if (!array) fval= RNA_property_float_get(&ptr, prop); else fval= RNA_property_float_get_index(&ptr, prop, array_index); - + BLI_snprintf(expression, maxlen, "%.3f", fval); } } } + + /* set the done status */ + done += (fcu != NULL); } /* done */ - return (fcu != NULL); + return done; } /* Main Driver Management API calls: @@ -367,7 +371,7 @@ static int add_driver_button_exec (bContext *C, wmOperator *op) PropertyRNA *prop= NULL; char *path; short success= 0; - int index, length, all= RNA_boolean_get(op->ptr, "all"); + int index, all= RNA_boolean_get(op->ptr, "all"); /* try to create driver using property retrieved from UI */ memset(&ptr, 0, sizeof(PointerRNA)); diff --git a/source/blender/editors/animation/fmodifier_ui.c b/source/blender/editors/animation/fmodifier_ui.c index 65c73355ad7..872722607ce 100644 --- a/source/blender/editors/animation/fmodifier_ui.c +++ b/source/blender/editors/animation/fmodifier_ui.c @@ -47,7 +47,7 @@ #include "MEM_guardedalloc.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_editVert.h" #include "BLI_rand.h" diff --git a/source/blender/editors/animation/keyframes_draw.c b/source/blender/editors/animation/keyframes_draw.c index 019ece64132..fb02a88ea2b 100644 --- a/source/blender/editors/animation/keyframes_draw.c +++ b/source/blender/editors/animation/keyframes_draw.c @@ -41,7 +41,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_dlrbTree.h" #include "DNA_listBase.h" @@ -58,6 +58,7 @@ #include "DNA_lamp_types.h" #include "DNA_material_types.h" #include "DNA_meta_types.h" +#include "DNA_node_types.h" #include "DNA_particle_types.h" #include "DNA_userdef_types.h" #include "DNA_gpencil_types.h" @@ -688,6 +689,15 @@ void scene_to_keylist(bDopeSheet *ads, Scene *sce, DLRBT_Tree *keys, DLRBT_Tree if (adt->action) action_to_keylist(adt, adt->action, keys, blocks); } + + /* nodetree animdata */ + if ((sce->nodetree) && (sce->nodetree->adt) && !(filterflag & ADS_FILTER_NONTREE)) { + adt= sce->nodetree->adt; + + // TODO: when we adapt NLA system, this needs to be the NLA-scaled version + if (adt->action) + action_to_keylist(adt, adt->action, keys, blocks); + } } } diff --git a/source/blender/editors/animation/keyframes_edit.c b/source/blender/editors/animation/keyframes_edit.c index 7a167cb6c0c..23daa4a9034 100644 --- a/source/blender/editors/animation/keyframes_edit.c +++ b/source/blender/editors/animation/keyframes_edit.c @@ -32,7 +32,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "DNA_anim_types.h" #include "DNA_action_types.h" @@ -44,6 +44,7 @@ #include "DNA_material_types.h" #include "DNA_object_types.h" #include "DNA_meta_types.h" +#include "DNA_node_types.h" #include "DNA_particle_types.h" #include "DNA_space_types.h" #include "DNA_scene_types.h" @@ -304,6 +305,7 @@ static short ob_keys_bezier_loop(BeztEditData *bed, Object *ob, BeztEditFunc bez static short scene_keys_bezier_loop(BeztEditData *bed, Scene *sce, BeztEditFunc bezt_ok, BeztEditFunc bezt_cb, FcuEditFunc fcu_cb, int filterflag) { World *wo= (sce) ? sce->world : NULL; + bNodeTree *ntree= (sce) ? sce->nodetree : NULL; /* sanity check */ if (sce == NULL) @@ -321,6 +323,13 @@ static short scene_keys_bezier_loop(BeztEditData *bed, Scene *sce, BeztEditFunc return 1; } + /* NodeTree */ + if (ntree && ntree->adt) { + if (adt_keys_bezier_loop(bed, ntree->adt, bezt_ok, bezt_cb, fcu_cb, filterflag)) + return 1; + } + + return 0; } diff --git a/source/blender/editors/animation/keyframes_general.c b/source/blender/editors/animation/keyframes_general.c index 3ad6ddf2c6f..9d3fc7a0fc4 100644 --- a/source/blender/editors/animation/keyframes_general.c +++ b/source/blender/editors/animation/keyframes_general.c @@ -33,7 +33,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "DNA_anim_types.h" #include "DNA_action_types.h" diff --git a/source/blender/editors/animation/keyframing.c b/source/blender/editors/animation/keyframing.c index 13ff8c84b7a..17a7dd91ed8 100644 --- a/source/blender/editors/animation/keyframing.c +++ b/source/blender/editors/animation/keyframing.c @@ -36,7 +36,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_dynstr.h" #include "DNA_anim_types.h" @@ -617,7 +617,7 @@ static float visualkey_get_value (PointerRNA *ptr, PropertyRNA *prop, int array_ else if (strstr(identifier, "rotation")) { float eul[3]; - Mat4ToEul(ob->obmat, eul); + mat4_to_eul( eul,ob->obmat); return eul[array_index]; } } @@ -632,7 +632,7 @@ static float visualkey_get_value (PointerRNA *ptr, PropertyRNA *prop, int array_ * be safe. Therefore, the active object is passed here, and in many cases, this * will be what owns the pose-channel that is getting this anyway. */ - Mat4CpyMat4(tmat, pchan->pose_mat); + copy_m4_m4(tmat, pchan->pose_mat); constraint_mat_convertspace(ob, pchan, tmat, CONSTRAINT_SPACE_POSE, CONSTRAINT_SPACE_LOCAL); /* Loc, Rot/Quat keyframes are supported... */ @@ -647,14 +647,14 @@ static float visualkey_get_value (PointerRNA *ptr, PropertyRNA *prop, int array_ float eul[3]; /* euler-rotation test before standard rotation, as standard rotation does quats */ - Mat4ToEulO(tmat, eul, pchan->rotmode); + mat4_to_eulO( eul, pchan->rotmode,tmat); return eul[array_index]; } else if (strstr(identifier, "rotation_quaternion")) { float trimat[3][3], quat[4]; - Mat3CpyMat4(trimat, tmat); - Mat3ToQuat_is_ok(trimat, quat); + copy_m3_m4(trimat, tmat); + mat3_to_quat_is_ok( quat,trimat); return quat[array_index]; } @@ -832,20 +832,21 @@ short insert_keyframe (ID *id, bAction *act, const char group[], const char rna_ //} } #endif - - if(array_index==-1) { /* Key All */ + + /* key entire array convenience method */ + if (array_index == -1) { array_index= 0; array_index_max= RNA_property_array_length(&ptr, prop) + 1; } - + /* will only loop once unless the array index was -1 */ - for( ; array_index < array_index_max; array_index++) { + for (; array_index < array_index_max; array_index++) { fcu= verify_fcurve(act, group, rna_path, array_index, 1); - + /* insert keyframe */ - ret |= insert_keyframe_direct(ptr, prop, fcu, cfra, flag); + ret += insert_keyframe_direct(ptr, prop, fcu, cfra, flag); } - + return ret; } diff --git a/source/blender/editors/animation/keyingsets.c b/source/blender/editors/animation/keyingsets.c index 0f4f29d0091..520247b77c1 100644 --- a/source/blender/editors/animation/keyingsets.c +++ b/source/blender/editors/animation/keyingsets.c @@ -36,7 +36,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_dynstr.h" #include "DNA_anim_types.h" diff --git a/source/blender/editors/armature/armature_intern.h b/source/blender/editors/armature/armature_intern.h index d31a3bda332..012610bfd25 100644 --- a/source/blender/editors/armature/armature_intern.h +++ b/source/blender/editors/armature/armature_intern.h @@ -136,7 +136,7 @@ struct bArmature; struct EditBone; struct ListBase; -void make_boneList(struct ListBase *edbo, struct ListBase *bones, struct EditBone *parent); +EditBone *make_boneList(struct ListBase *edbo, struct ListBase *bones, struct EditBone *parent, struct Bone *actBone); struct EditBone *addEditBone(struct bArmature *arm, char *name); void BIF_sk_selectStroke(struct bContext *C, short mval[2], short extend); diff --git a/source/blender/editors/armature/armature_ops.c b/source/blender/editors/armature/armature_ops.c index 159effe0960..560a1458dfd 100644 --- a/source/blender/editors/armature/armature_ops.c +++ b/source/blender/editors/armature/armature_ops.c @@ -39,7 +39,7 @@ #include "DNA_view3d_types.h" #include "DNA_windowmanager_types.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BKE_context.h" @@ -232,7 +232,7 @@ void ED_keymap_armature(wmKeyConfig *keyconf) WM_keymap_add_item(keymap, "ARMATURE_OT_delete", XKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "ARMATURE_OT_delete", DELKEY, KM_PRESS, 0, 0); - WM_keymap_add_item(keymap, "ARMATURE_OT_duplicate", DKEY, KM_PRESS, KM_SHIFT, 0); + WM_keymap_add_item(keymap, "ARMATURE_OT_duplicate_move", DKEY, KM_PRESS, KM_SHIFT, 0); WM_keymap_add_item(keymap, "ARMATURE_OT_extrude_move", EKEY, KM_PRESS, 0, 0); kmi= WM_keymap_add_item(keymap, "ARMATURE_OT_extrude_move", EKEY, KM_PRESS, KM_SHIFT, 0); // RNA_boolean_set(kmi->ptr, "forked", 1); // XXX this doesn't work ok for macros it seems... diff --git a/source/blender/editors/armature/editarmature.c b/source/blender/editors/armature/editarmature.c index c5b01f1cab0..f89caa7b2c1 100644 --- a/source/blender/editors/armature/editarmature.c +++ b/source/blender/editors/armature/editarmature.c @@ -51,7 +51,7 @@ #include "DNA_curve_types.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_editVert.h" #include "BLI_ghash.h" @@ -129,10 +129,30 @@ void ED_armature_sync_selection(ListBase *edbo) } } +void ED_armature_validate_active(struct bArmature *arm) +{ + EditBone *ebone= arm->act_edbone; + + if(ebone) { + if(ebone->flag & BONE_HIDDEN_A || (ebone->flag & BONE_SELECTED)==0) + arm->act_edbone= NULL; + } +} + +void free_edit_bone(bArmature *arm, EditBone *bone) +{ + if(arm->act_edbone==bone) + arm->act_edbone= NULL; + + BLI_freelinkN(arm->edbo, bone); +} + /* converts Bones to EditBone list, used for tools as well */ -void make_boneList(ListBase *edbo, ListBase *bones, EditBone *parent) +EditBone *make_boneList(ListBase *edbo, ListBase *bones, EditBone *parent, Bone *actBone) { EditBone *eBone; + EditBone *eBoneAct= NULL; + EditBone *eBoneTest= NULL; Bone *curBone; float delta[3]; float premat[3][3]; @@ -165,13 +185,13 @@ void make_boneList(ListBase *edbo, ListBase *bones, EditBone *parent) eBone->roll= 0.0f; /* roll fixing */ - VecSubf(delta, eBone->tail, eBone->head); + sub_v3_v3v3(delta, eBone->tail, eBone->head); vec_roll_to_mat3(delta, 0.0f, postmat); - Mat3CpyMat4(premat, curBone->arm_mat); + copy_m3_m4(premat, curBone->arm_mat); - Mat3Inv(imat, postmat); - Mat3MulMat3(difmat, imat, premat); + invert_m3_m3(imat, postmat); + mul_m3_m3m3(difmat, imat, premat); eBone->roll = (float)atan2(difmat[2][0], difmat[2][2]); @@ -194,9 +214,17 @@ void make_boneList(ListBase *edbo, ListBase *bones, EditBone *parent) BLI_addtail(edbo, eBone); /* Add children if necessary */ - if (curBone->childbase.first) - make_boneList(edbo, &curBone->childbase, eBone); + if (curBone->childbase.first) { + eBoneTest= make_boneList(edbo, &curBone->childbase, eBone, actBone); + if(eBoneTest) + eBoneAct= eBoneTest; + } + + if(curBone==actBone) + eBoneAct= eBone; } + + return eBoneAct; } /* nasty stuff for converting roll in editbones into bones */ @@ -222,19 +250,19 @@ static void fix_bonelist_roll (ListBase *bonelist, ListBase *editbonelist) if (ebone) { /* Get the ebone premat */ - VecSubf(delta, ebone->tail, ebone->head); + sub_v3_v3v3(delta, ebone->tail, ebone->head); vec_roll_to_mat3(delta, ebone->roll, premat); /* Get the bone postmat */ - Mat3CpyMat4(postmat, curBone->arm_mat); + copy_m3_m4(postmat, curBone->arm_mat); - Mat3Inv(imat, premat); - Mat3MulMat3(difmat, imat, postmat); + invert_m3_m3(imat, premat); + mul_m3_m3m3(difmat, imat, postmat); #if 0 printf ("Bone %s\n", curBone->name); - printmatrix4("premat", premat); - printmatrix4("postmat", postmat); - printmatrix4("difmat", difmat); + print_m4("premat", premat); + print_m4("postmat", postmat); + print_m4("difmat", difmat); printf ("Roll = %f\n", (-atan2(difmat[2][0], difmat[2][2]) * (180.0/M_PI))); #endif curBone->roll = (float)-atan2(difmat[2][0], difmat[2][2]); @@ -259,7 +287,7 @@ void ED_armature_from_edit(Object *obedit) /* remove zero sized bones, this gives instable restposes */ for (eBone=arm->edbo->first; eBone; eBone= neBone) { - float len= VecLenf(eBone->head, eBone->tail); + float len= len_v3v3(eBone->head, eBone->tail); neBone= eBone->next; if (len <= 0.000001f) { /* FLT_EPSILON is too large? */ EditBone *fBone; @@ -270,7 +298,7 @@ void ED_armature_from_edit(Object *obedit) fBone->parent= eBone->parent; } printf("Warning: removed zero sized bone: %s\n", eBone->name); - BLI_freelinkN(arm->edbo, eBone); + free_edit_bone(arm, eBone); } } @@ -283,8 +311,12 @@ void ED_armature_from_edit(Object *obedit) memcpy(newBone->head, eBone->head, sizeof(float)*3); memcpy(newBone->tail, eBone->tail, sizeof(float)*3); newBone->flag= eBone->flag; - if (eBone->flag & BONE_ACTIVE) + + if (eBone == arm->act_edbone) { newBone->flag |= BONE_SELECTED; /* important, editbones can be active with only 1 point selected */ + arm->act_edbone= NULL; + arm->act_bone= newBone; + } newBone->roll = 0.0f; newBone->weight = eBone->weight; @@ -318,22 +350,22 @@ void ED_armature_from_edit(Object *obedit) float delta[3]; /* Get the parent's matrix (rotation only) */ - VecSubf(delta, eBone->parent->tail, eBone->parent->head); + sub_v3_v3v3(delta, eBone->parent->tail, eBone->parent->head); vec_roll_to_mat3(delta, eBone->parent->roll, M_parentRest); /* Get this bone's matrix (rotation only) */ - VecSubf(delta, eBone->tail, eBone->head); + sub_v3_v3v3(delta, eBone->tail, eBone->head); vec_roll_to_mat3(delta, eBone->roll, M_boneRest); /* Invert the parent matrix */ - Mat3Inv(iM_parentRest, M_parentRest); + invert_m3_m3(iM_parentRest, M_parentRest); /* Get the new head and tail */ - VecSubf(newBone->head, eBone->head, eBone->parent->tail); - VecSubf(newBone->tail, eBone->tail, eBone->parent->tail); + sub_v3_v3v3(newBone->head, eBone->head, eBone->parent->tail); + sub_v3_v3v3(newBone->tail, eBone->tail, eBone->parent->tail); - Mat3MulVecfl(iM_parentRest, newBone->head); - Mat3MulVecfl(iM_parentRest, newBone->tail); + mul_m3_v3(iM_parentRest, newBone->head); + mul_m3_v3(iM_parentRest, newBone->tail); } } /* ...otherwise add this bone to the armature's bonebase */ @@ -358,15 +390,15 @@ void ED_armature_apply_transform(Object *ob, float mat[4][4]) { EditBone *ebone; bArmature *arm= ob->data; - float scale = Mat4ToScalef(mat); /* store the scale of the matrix here to use on envelopes */ + float scale = mat4_to_scale(mat); /* store the scale of the matrix here to use on envelopes */ /* Put the armature into editmode */ ED_armature_to_edit(ob); /* Do the rotations */ for (ebone = arm->edbo->first; ebone; ebone=ebone->next){ - Mat4MulVecfl(mat, ebone->head); - Mat4MulVecfl(mat, ebone->tail); + mul_m4_v3(mat, ebone->head); + mul_m4_v3(mat, ebone->tail); ebone->rad_head *= scale; ebone->rad_tail *= scale; @@ -397,8 +429,8 @@ void docenter_armature (Scene *scene, View3D *v3d, Object *ob, int centermode) if (centermode == 2) { float *fp= give_cursor(scene, v3d); VECCOPY(cent, fp); - Mat4Invert(ob->imat, ob->obmat); - Mat4MulVecfl(ob->imat, cent); + invert_m4_m4(ob->imat, ob->obmat); + mul_m4_v3(ob->imat, cent); } else { INIT_MINMAX(min, max); @@ -415,8 +447,8 @@ void docenter_armature (Scene *scene, View3D *v3d, Object *ob, int centermode) /* Do the adjustments */ for (ebone= arm->edbo->first; ebone; ebone=ebone->next) { - VecSubf(ebone->head, ebone->head, cent); - VecSubf(ebone->tail, ebone->tail, cent); + sub_v3_v3v3(ebone->head, ebone->head, cent); + sub_v3_v3v3(ebone->tail, ebone->tail, cent); } /* Turn the list into an armature */ @@ -424,9 +456,9 @@ void docenter_armature (Scene *scene, View3D *v3d, Object *ob, int centermode) /* Adjust object location for new centerpoint */ if(centermode && obedit==NULL) { - Mat3CpyMat4(omat, ob->obmat); + copy_m3_m4(omat, ob->obmat); - Mat3MulVecfl(omat, cent); + mul_m3_v3(omat, cent); ob->loc[0] += cent[0]; ob->loc[1] += cent[1]; ob->loc[2] += cent[2]; @@ -492,7 +524,7 @@ static void applyarmature_fix_boneparents (Scene *scene, Object *armob) ED_object_apply_obmat(ob); what_does_parent(scene, ob, &workob); - Mat4Invert(ob->parentinv, workob.obmat); + invert_m4_m4(ob->parentinv, workob.obmat); } } } @@ -540,16 +572,16 @@ static int apply_armature_pose2bones_exec (bContext *C, wmOperator *op) float delta[3], eul[3]; /* obtain new auto y-rotation */ - VecSubf(delta, curbone->tail, curbone->head); + sub_v3_v3v3(delta, curbone->tail, curbone->head); vec_roll_to_mat3(delta, 0.0f, premat); - Mat3Inv(imat, premat); + invert_m3_m3(imat, premat); /* get pchan 'visual' matrix */ - Mat3CpyMat4(pmat, pchan->pose_mat); + copy_m3_m4(pmat, pchan->pose_mat); /* remove auto from visual and get euler rotation */ - Mat3MulMat3(tmat, imat, pmat); - Mat3ToEul(tmat, eul); + mul_m3_m3m3(tmat, imat, pmat); + mat3_to_eul( eul,tmat); /* just use this euler-y as new roll value */ curbone->roll= eul[1]; @@ -737,8 +769,8 @@ int join_armature_exec(bContext *C, wmOperator *op) //BASACT->flag &= ~OB_MODE_POSE; /* Find the difference matrix */ - Mat4Invert(oimat, ob->obmat); - Mat4MulMat4(mat, base->object->obmat, oimat); + invert_m4_m4(oimat, ob->obmat); + mul_m4_m4m4(mat, base->object->obmat, oimat); /* Copy bones and posechannels from the object to the edit armature */ for (pchan=opose->chanbase.first; pchan; pchan=pchann) { @@ -758,23 +790,23 @@ int join_armature_exec(bContext *C, wmOperator *op) float delta[3]; /* Get the premat */ - VecSubf(delta, curbone->tail, curbone->head); + sub_v3_v3v3(delta, curbone->tail, curbone->head); vec_roll_to_mat3(delta, curbone->roll, temp); - Mat4One(premat); /* Mat4MulMat34 only sets 3x3 part */ - Mat4MulMat34(premat, temp, mat); + unit_m4(premat); /* Mat4MulMat34 only sets 3x3 part */ + mul_m4_m3m4(premat, temp, mat); - Mat4MulVecfl(mat, curbone->head); - Mat4MulVecfl(mat, curbone->tail); + mul_m4_v3(mat, curbone->head); + mul_m4_v3(mat, curbone->tail); /* Get the postmat */ - VecSubf(delta, curbone->tail, curbone->head); + sub_v3_v3v3(delta, curbone->tail, curbone->head); vec_roll_to_mat3(delta, curbone->roll, temp); - Mat4CpyMat3(postmat, temp); + copy_m4_m3(postmat, temp); /* Find the roll */ - Mat4Invert(imat, premat); - Mat4MulMat4(difmat, postmat, imat); + invert_m4_m4(imat, premat); + mul_m4_m4m4(difmat, postmat, imat); curbone->roll -= (float)atan2(difmat[2][0], difmat[2][2]); } @@ -997,7 +1029,7 @@ static void separate_armature_bones (Scene *scene, Object *ob, short sel) free_constraints(&pchan->constraints); /* get rid of unneeded bone */ - BLI_freelinkN(arm->edbo, curbone); + free_edit_bone(arm, curbone); BLI_freelinkN(&ob->pose->chanbase, pchan); } } @@ -1633,19 +1665,20 @@ static EditBone *get_nearest_editbonepoint (ViewContext *vc, short mval[2], List return NULL; } -static void delete_bone(ListBase *edbo, EditBone* exBone) +/* warning, wont clear the active bone */ +static void delete_bone(bArmature *arm, EditBone* exBone) { EditBone *curBone; /* Find any bones that refer to this bone */ - for (curBone=edbo->first;curBone;curBone=curBone->next) { + for (curBone=arm->edbo->first; curBone; curBone=curBone->next) { if (curBone->parent==exBone) { curBone->parent=exBone->parent; curBone->flag &= ~BONE_CONNECTED; } } - - BLI_freelinkN(edbo, exBone); + + free_edit_bone(arm, exBone); } /* context: editmode armature */ @@ -1742,8 +1775,10 @@ static int armature_delete_selected_exec(bContext *C, wmOperator *op) for (curBone=arm->edbo->first;curBone;curBone=next) { next=curBone->next; if (arm->layer & curBone->layer) { - if (curBone->flag & BONE_SELECTED) - delete_bone(arm->edbo, curBone); + if (curBone->flag & BONE_SELECTED) { + if(curBone==arm->act_edbone) arm->act_edbone= NULL; + delete_bone(arm, curBone); + } } } @@ -1795,30 +1830,33 @@ void ED_armature_deselectall(Object *obedit, int toggle, int doundo) } else sel= toggle; - /* Set the flags */ - for (eBone=arm->edbo->first;eBone;eBone=eBone->next) { - if (sel==3) { - /* invert selection of bone */ - if ((arm->layer & eBone->layer) && (eBone->flag & BONE_HIDDEN_A)==0) { - eBone->flag ^= (BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL); - eBone->flag &= ~BONE_ACTIVE; + if(sel==2) { + arm->act_edbone= NULL; + } else { + /* Set the flags */ + for (eBone=arm->edbo->first;eBone;eBone=eBone->next) { + if (sel==3) { + /* invert selection of bone */ + if ((arm->layer & eBone->layer) && (eBone->flag & BONE_HIDDEN_A)==0) { + eBone->flag ^= (BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL); + if(arm->act_edbone==eBone) + arm->act_edbone= NULL; + } } - } - else if (sel==1) { - /* select bone */ - if(arm->layer & eBone->layer && (eBone->flag & BONE_HIDDEN_A)==0) { - eBone->flag |= (BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL); - if(eBone->parent) - eBone->parent->flag |= (BONE_TIPSEL); + else if (sel==1) { + /* select bone */ + if(arm->layer & eBone->layer && (eBone->flag & BONE_HIDDEN_A)==0) { + eBone->flag |= (BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL); + if(eBone->parent) + eBone->parent->flag |= (BONE_TIPSEL); + } + } + else { + /* deselect bone */ + eBone->flag &= ~(BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL); + if(arm->act_edbone==eBone) + arm->act_edbone= NULL; } - } - else if (sel==2) { - /* clear active flag */ - eBone->flag &= ~(BONE_ACTIVE); - } - else { - /* deselect bone */ - eBone->flag &= ~(BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL | BONE_ACTIVE); } } @@ -1836,7 +1874,7 @@ void mouse_armature(bContext *C, short mval[2], int extend) Object *obedit= CTX_data_edit_object(C); bArmature *arm= obedit->data; ViewContext vc; - EditBone *nearBone = NULL, *ebone; + EditBone *nearBone = NULL; int selmask; view3d_set_viewcontext(C, &vc); @@ -1898,8 +1936,7 @@ void mouse_armature(bContext *C, short mval[2], int extend) if(nearBone) { /* then now check for active status */ - for (ebone=arm->edbo->first;ebone;ebone=ebone->next) ebone->flag &= ~BONE_ACTIVE; - if(nearBone->flag & BONE_SELECTED) nearBone->flag |= BONE_ACTIVE; + if(nearBone->flag & BONE_SELECTED) arm->act_edbone= nearBone; } WM_event_add_notifier(C, NC_OBJECT|ND_BONE_SELECT, vc.obedit); @@ -1945,7 +1982,8 @@ void ED_armature_to_edit(Object *ob) ED_armature_edit_free(ob); arm->edbo= MEM_callocN(sizeof(ListBase), "edbo armature"); - make_boneList(arm->edbo, &arm->bonebase,NULL); + arm->act_edbone= make_boneList(arm->edbo, &arm->bonebase, NULL, arm->act_bone); + arm->act_bone= NULL; // BIF_freeTemplates(); /* force template update when entering editmode */ } @@ -1959,16 +1997,16 @@ float ED_rollBoneToVector(EditBone *bone, float new_up_axis[3]) float mat[3][3], nor[3], up_axis[3], vec[3]; float roll; - VecSubf(nor, bone->tail, bone->head); + sub_v3_v3v3(nor, bone->tail, bone->head); vec_roll_to_mat3(nor, 0, mat); VECCOPY(up_axis, mat[2]); - roll = NormalizedVecAngle2(new_up_axis, up_axis); + roll = angle_normalized_v3v3(new_up_axis, up_axis); - Crossf(vec, up_axis, new_up_axis); + cross_v3_v3v3(vec, up_axis, new_up_axis); - if (Inpf(vec, nor) < 0) + if (dot_v3v3(vec, nor) < 0) { roll = -roll; } @@ -1985,21 +2023,21 @@ void auto_align_ebone_zaxisup(Scene *scene, View3D *v3d, EditBone *ebone) float targetmat[3][3], imat[3][3], diffmat[3][3]; /* Find the current bone matrix */ - VecSubf(delta, ebone->tail, ebone->head); + sub_v3_v3v3(delta, ebone->tail, ebone->head); vec_roll_to_mat3(delta, 0.0f, curmat); /* Make new matrix based on y axis & z-up */ VECCOPY(yaxis, curmat[1]); - Mat3One(targetmat); + unit_m3(targetmat); VECCOPY(targetmat[0], xaxis); VECCOPY(targetmat[1], yaxis); VECCOPY(targetmat[2], zaxis); - Mat3Ortho(targetmat); + normalize_m3(targetmat); /* Find the difference between the two matrices */ - Mat3Inv(imat, targetmat); - Mat3MulMat3(diffmat, imat, curmat); + invert_m3_m3(imat, targetmat); + mul_m3_m3m3(diffmat, imat, curmat); // old-method... let's see if using mat3_to_vec_roll is more accurate //ebone->roll = atan2(diffmat[2][0], diffmat[2][2]); @@ -2017,28 +2055,28 @@ void auto_align_ebone_tocursor(Scene *scene, View3D *v3d, EditBone *ebone) float vec[3]; /* find the current bone matrix as a 4x4 matrix (in Armature Space) */ - VecSubf(delta, ebone->tail, ebone->head); + sub_v3_v3v3(delta, ebone->tail, ebone->head); vec_roll_to_mat3(delta, ebone->roll, curmat); - Mat4CpyMat3(mat, curmat); + copy_m4_m3(mat, curmat); VECCOPY(mat[3], ebone->head); /* multiply bone-matrix by object matrix (so that bone-matrix is in WorldSpace) */ - Mat4MulMat4(tmat, mat, obedit->obmat); - Mat4Invert(imat, tmat); + mul_m4_m4m4(tmat, mat, obedit->obmat); + invert_m4_m4(imat, tmat); /* find position of cursor relative to bone */ - VecMat4MulVecfl(vec, imat, cursor); + mul_v3_m4v3(vec, imat, cursor); /* check that cursor is in usable position */ if ((IS_EQ(vec[0], 0)==0) && (IS_EQ(vec[2], 0)==0)) { /* Compute a rotation matrix around y */ rot[1] = (float)atan2(vec[0], vec[2]); rot[0] = rot[2] = 0.0f; - EulToMat4(rot, rmat); + eul_to_mat4( rmat,rot); /* Multiply the bone matrix by rotation matrix. This should be new bone-matrix */ - Mat4MulMat4(tmat, rmat, mat); - Mat3CpyMat4(curmat, tmat); + mul_m4_m4m4(tmat, rmat, mat); + copy_m3_m4(curmat, tmat); /* Now convert from new bone-matrix, back to a roll value (in radians) */ mat3_to_vec_roll(curmat, delta, &ebone->roll); @@ -2103,68 +2141,84 @@ void ARMATURE_OT_calculate_roll(wmOperatorType *ot) /* **************** undo for armatures ************** */ -static void undoBones_to_editBones(void *lbuv, void *lbev) +typedef struct UndoArmature { + EditBone *act_edbone; + ListBase lb; +} UndoArmature; + +static void undoBones_to_editBones(void *uarmv, void *armv) { - ListBase *lbu= lbuv; - ListBase *edbo= lbev; + UndoArmature *uarm= uarmv; + bArmature *arm= armv; EditBone *ebo, *newebo; - BLI_freelistN(edbo); + BLI_freelistN(arm->edbo); /* copy */ - for(ebo= lbu->first; ebo; ebo= ebo->next) { + for(ebo= uarm->lb.first; ebo; ebo= ebo->next) { newebo= MEM_dupallocN(ebo); ebo->temp= newebo; - BLI_addtail(edbo, newebo); + BLI_addtail(arm->edbo, newebo); } + /* active bone */ + if(uarm->act_edbone) { + ebo= uarm->act_edbone; + arm->act_edbone= ebo->temp; + } + /* set pointers */ - for(newebo= edbo->first; newebo; newebo= newebo->next) { + for(newebo= arm->edbo->first; newebo; newebo= newebo->next) { if(newebo->parent) newebo->parent= newebo->parent->temp; } /* be sure they dont hang ever */ - for(newebo= edbo->first; newebo; newebo= newebo->next) { + for(newebo= arm->edbo->first; newebo; newebo= newebo->next) { newebo->temp= NULL; } } -static void *editBones_to_undoBones(void *lbev) +static void *editBones_to_undoBones(void *armv) { - ListBase *edbo= lbev; - ListBase *lb; + bArmature *arm= armv; + UndoArmature *uarm; EditBone *ebo, *newebo; - lb= MEM_callocN(sizeof(ListBase), "listbase undo"); + uarm= MEM_callocN(sizeof(UndoArmature), "listbase undo"); /* copy */ - for(ebo= edbo->first; ebo; ebo= ebo->next) { + for(ebo= arm->edbo->first; ebo; ebo= ebo->next) { newebo= MEM_dupallocN(ebo); ebo->temp= newebo; - BLI_addtail(lb, newebo); + BLI_addtail(&uarm->lb, newebo); } + /* active bone */ + if(arm->act_edbone) { + ebo= arm->act_edbone; + uarm->act_edbone= ebo->temp; + } + /* set pointers */ - for(newebo= lb->first; newebo; newebo= newebo->next) { + for(newebo= uarm->lb.first; newebo; newebo= newebo->next) { if(newebo->parent) newebo->parent= newebo->parent->temp; } - return lb; + return uarm; } -static void free_undoBones(void *lbv) +static void free_undoBones(void *uarmv) { - ListBase *lb= lbv; + UndoArmature *uarm= uarmv; - BLI_freelistN(lb); - MEM_freeN(lb); + BLI_freelistN(&uarm->lb); + MEM_freeN(uarm); } static void *get_armature_edit(bContext *C) { Object *obedit= CTX_data_edit_object(C); if(obedit && obedit->type==OB_ARMATURE) { - bArmature *arm= obedit->data; - return arm->edbo; + return obedit->data; } return NULL; } @@ -2224,16 +2278,16 @@ void add_primitive_bone(Scene *scene, View3D *v3d, RegionView3D *rv3d) VECCOPY(curs, give_cursor(scene, v3d)); /* Get inverse point for head and orientation for tail */ - Mat4Invert(obedit->imat, obedit->obmat); - Mat4MulVecfl(obedit->imat, curs); + invert_m4_m4(obedit->imat, obedit->obmat); + mul_m4_v3(obedit->imat, curs); if (rv3d && (U.flag & USER_ADD_VIEWALIGNED)) - Mat3CpyMat4(obmat, rv3d->viewmat); - else Mat3One(obmat); + copy_m3_m4(obmat, rv3d->viewmat); + else unit_m3(obmat); - Mat3CpyMat4(viewmat, obedit->obmat); - Mat3MulMat3(totmat, obmat, viewmat); - Mat3Inv(imat, totmat); + copy_m3_m4(viewmat, obedit->obmat); + mul_m3_m3m3(totmat, obmat, viewmat); + invert_m3_m3(imat, totmat); ED_armature_deselectall(obedit, 0, 0); @@ -2243,9 +2297,9 @@ void add_primitive_bone(Scene *scene, View3D *v3d, RegionView3D *rv3d) VECCOPY(bone->head, curs); if (rv3d && (U.flag & USER_ADD_VIEWALIGNED)) - VecAddf(bone->tail, bone->head, imat[1]); // bone with unit length 1 + add_v3_v3v3(bone->tail, bone->head, imat[1]); // bone with unit length 1 else - VecAddf(bone->tail, bone->head, imat[2]); // bone with unit length 1, pointing up Z + add_v3_v3v3(bone->tail, bone->head, imat[2]); // bone with unit length 1, pointing up Z } @@ -2270,7 +2324,7 @@ static int armature_click_extrude_exec(bContext *C, wmOperator *op) /* find the active or selected bone */ for (ebone = arm->edbo->first; ebone; ebone=ebone->next) { if (EBONE_VISIBLE(arm, ebone)) { - if (ebone->flag & (BONE_ACTIVE|BONE_TIPSEL)) + if (ebone->flag & BONE_TIPSEL || arm->act_edbone == ebone) break; } } @@ -2278,7 +2332,7 @@ static int armature_click_extrude_exec(bContext *C, wmOperator *op) if (ebone==NULL) { for (ebone = arm->edbo->first; ebone; ebone=ebone->next) { if (EBONE_VISIBLE(arm, ebone)) { - if (ebone->flag & (BONE_ACTIVE|BONE_ROOTSEL)) + if (ebone->flag & BONE_ROOTSEL || arm->act_edbone == ebone) break; } } @@ -2305,7 +2359,7 @@ static int armature_click_extrude_exec(bContext *C, wmOperator *op) } newbone= add_editbone(obedit, ebone->name); - newbone->flag |= BONE_ACTIVE; + arm->act_edbone= newbone; if (to_root) { VECCOPY(newbone->head, ebone->head); @@ -2321,16 +2375,16 @@ static int armature_click_extrude_exec(bContext *C, wmOperator *op) curs= give_cursor(scene, v3d); VECCOPY(newbone->tail, curs); - VecSubf(newbone->tail, newbone->tail, obedit->obmat[3]); + sub_v3_v3v3(newbone->tail, newbone->tail, obedit->obmat[3]); if (a==1) newbone->tail[0]= -newbone->tail[0]; - Mat3CpyMat4(mat, obedit->obmat); - Mat3Inv(imat, mat); - Mat3MulVecfl(imat, newbone->tail); + copy_m3_m4(mat, obedit->obmat); + invert_m3_m3(imat, mat); + mul_m3_v3(imat, newbone->tail); - newbone->length= VecLenf(newbone->head, newbone->tail); + newbone->length= len_v3v3(newbone->head, newbone->tail); newbone->rad_tail= newbone->length*0.05f; newbone->dist= newbone->length*0.25f; @@ -2375,7 +2429,7 @@ static int armature_click_extrude_invoke(bContext *C, wmOperator *op, wmEvent *e if(mval[0]!=IS_CLIPPED) { window_to_3d_delta(ar, dvec, mval[0]-mx, mval[1]-my); - VecSubf(fp, fp, dvec); + sub_v3_v3v3(fp, fp, dvec); } else { @@ -2635,7 +2689,7 @@ static int armature_duplicate_selected_exec(bContext *C, wmOperator *op) BLI_addtail(arm->edbo, eBone); if (!firstDup) firstDup=eBone; - + /* Lets duplicate the list of constraints that the * current bone has. */ @@ -2719,12 +2773,21 @@ static int armature_duplicate_selected_exec(bContext *C, wmOperator *op) } } + /* correct the active bone */ + if(arm->act_edbone) { + eBone= arm->act_edbone; + if(eBone->temp) + arm->act_edbone= eBone->temp; + } + /* Deselect the old bones and select the new ones */ for (curBone=arm->edbo->first; curBone && curBone!=firstDup; curBone=curBone->next) { if (EBONE_VISIBLE(arm, curBone)) - curBone->flag &= ~(BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL | BONE_ACTIVE); + curBone->flag &= ~(BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL); } + ED_armature_validate_active(arm); + WM_event_add_notifier(C, NC_OBJECT|ND_BONE_SELECT, obedit); return OPERATOR_FINISHED; @@ -2822,7 +2885,7 @@ static void fill_add_joint (EditBone *ebo, short eb_tail, ListBase *points) } for (ebp= points->first; ebp; ebp= ebp->next) { - if (VecEqual(ebp->vec, vec)) { + if (equals_v3v3(ebp->vec, vec)) { if (eb_tail) { if ((ebp->head_owner) && (ebp->head_owner->parent == ebo)) { /* so this bone's tail owner is this bone */ @@ -2906,8 +2969,8 @@ static int armature_fill_bones_exec (bContext *C, wmOperator *op) fp= give_cursor(scene, v3d); VECCOPY (curs, fp); - Mat4Invert(obedit->imat, obedit->obmat); - Mat4MulVecfl(obedit->imat, curs); + invert_m4_m4(obedit->imat, obedit->obmat); + mul_m4_v3(obedit->imat, curs); /* Create a bone */ newbone= add_points_bone(obedit, ebp->vec, curs); @@ -2942,14 +3005,14 @@ static int armature_fill_bones_exec (bContext *C, wmOperator *op) /* get cursor location */ VECCOPY(curs, fp); - Mat4Invert(obedit->imat, obedit->obmat); - Mat4MulVecfl(obedit->imat, curs); + invert_m4_m4(obedit->imat, obedit->obmat); + mul_m4_v3(obedit->imat, curs); /* get distances */ - VecSubf(vecA, ebp->vec, curs); - VecSubf(vecB, ebp2->vec, curs); - distA= VecLength(vecA); - distB= VecLength(vecB); + sub_v3_v3v3(vecA, ebp->vec, curs); + sub_v3_v3v3(vecB, ebp2->vec, curs); + distA= len_v3(vecA); + distB= len_v3(vecB); /* compare distances - closer one therefore acts as direction for bone to go */ headtail= (distA < distB) ? 2 : 1; @@ -3046,13 +3109,13 @@ static void bones_merge(Object *obedit, EditBone *start, EditBone *end, EditBone * - tail = head/tail of end (default tail) * - parent = parent of start */ - if ((start->flag & BONE_TIPSEL) && !(start->flag & (BONE_SELECTED|BONE_ACTIVE))) { + if ((start->flag & BONE_TIPSEL) && ((start->flag & BONE_SELECTED) || start==arm->act_edbone)==0) { VECCOPY(head, start->tail); } else { VECCOPY(head, start->head); } - if ((end->flag & BONE_ROOTSEL) && !(end->flag & (BONE_SELECTED|BONE_ACTIVE))) { + if ((end->flag & BONE_ROOTSEL) && ((end->flag & BONE_SELECTED) || end==arm->act_edbone)==0) { VECCOPY(tail, end->head); } else { @@ -3090,7 +3153,7 @@ static void bones_merge(Object *obedit, EditBone *start, EditBone *end, EditBone /* step 3: delete all bones between and including start and end */ for (ebo= end; ebo; ebo= ebone) { ebone= (ebo == start) ? (NULL) : (ebo->parent); - BLI_freelinkN(arm->edbo, ebo); + free_edit_bone(arm, ebo); } } @@ -3130,7 +3193,7 @@ static int armature_merge_exec (bContext *C, wmOperator *op) /* check if visible + selected */ if ( EBONE_VISIBLE(arm, ebo) && ((ebo->flag & BONE_CONNECTED) || (ebo->parent==NULL)) && - (ebo->flag & (BONE_SELECTED|BONE_ACTIVE)) ) + ((ebo->flag & BONE_SELECTED) || (ebo==arm->act_edbone)) ) { /* set either end or start (end gets priority, unless it is already set) */ if (bend == NULL) { @@ -3205,17 +3268,20 @@ void hide_selected_armature_bones(Scene *scene) for (ebone = arm->edbo->first; ebone; ebone=ebone->next) { if (EBONE_VISIBLE(arm, ebone)) { - if (ebone->flag & (BONE_SELECTED)) { - ebone->flag &= ~(BONE_TIPSEL|BONE_SELECTED|BONE_ROOTSEL|BONE_ACTIVE); + if (ebone->flag & BONE_SELECTED) { + ebone->flag &= ~(BONE_TIPSEL|BONE_SELECTED|BONE_ROOTSEL); ebone->flag |= BONE_HIDDEN_A; } } } + ED_armature_validate_active(arm); ED_armature_sync_selection(arm->edbo); BIF_undo_push("Hide Bones"); } -void hide_unselected_armature_bones(Scene *scene) + +#if 0 // remove this? +static void hide_unselected_armature_bones(Scene *scene) { Object *obedit= scene->obedit; // XXX get from context bArmature *arm= obedit->data; @@ -3226,15 +3292,18 @@ void hide_unselected_armature_bones(Scene *scene) if (EBONE_VISIBLE(arm, ebone)) { if (ebone->flag & (BONE_TIPSEL|BONE_SELECTED|BONE_ROOTSEL)); else { - ebone->flag &= ~BONE_ACTIVE; ebone->flag |= BONE_HIDDEN_A; } } } + + ED_armature_validate_active(arm); ED_armature_sync_selection(arm->edbo); BIF_undo_push("Hide Unselected Bones"); } +#endif +#if 0 // remove this? void show_all_armature_bones(Scene *scene) { Object *obedit= scene->obedit; // XXX get from context @@ -3249,9 +3318,11 @@ void show_all_armature_bones(Scene *scene) } } } + ED_armature_validate_active(arm); ED_armature_sync_selection(arm->edbo); BIF_undo_push("Reveal Bones"); } +#endif /* previously extrude_armature */ /* context; editmode armature */ @@ -3301,7 +3372,7 @@ static int armature_extrude_exec(bContext *C, wmOperator *op) forked= 0; // we extrude 2 different bones if (flipbone->flag & (BONE_TIPSEL|BONE_ROOTSEL|BONE_SELECTED)) /* don't want this bone to be selected... */ - flipbone->flag &= ~(BONE_TIPSEL|BONE_SELECTED|BONE_ROOTSEL|BONE_ACTIVE); + flipbone->flag &= ~(BONE_TIPSEL|BONE_SELECTED|BONE_ROOTSEL); } if ((flipbone==NULL) && (forked)) flipbone= ebone; @@ -3373,14 +3444,17 @@ static int armature_extrude_exec(bContext *C, wmOperator *op) } /* Deselect the old bone */ - ebone->flag &= ~(BONE_TIPSEL|BONE_SELECTED|BONE_ROOTSEL|BONE_ACTIVE); + ebone->flag &= ~(BONE_TIPSEL|BONE_SELECTED|BONE_ROOTSEL); } } /* if only one bone, make this one active */ - if (totbone==1 && first) first->flag |= BONE_ACTIVE; + if (totbone==1 && first) arm->act_edbone= first; if (totbone==0) return OPERATOR_CANCELLED; + if(arm->act_edbone && (((EditBone *)arm->act_edbone)->flag & BONE_SELECTED)==0) + arm->act_edbone= NULL; + /* Transform the endpoints */ ED_armature_sync_selection(arm->edbo); @@ -3420,16 +3494,16 @@ static int armature_bone_primitive_add_exec(bContext *C, wmOperator *op) VECCOPY(curs, give_cursor(CTX_data_scene(C),CTX_wm_view3d(C))); /* Get inverse point for head and orientation for tail */ - Mat4Invert(obedit->imat, obedit->obmat); - Mat4MulVecfl(obedit->imat, curs); + invert_m4_m4(obedit->imat, obedit->obmat); + mul_m4_v3(obedit->imat, curs); if (rv3d && (U.flag & USER_ADD_VIEWALIGNED)) - Mat3CpyMat4(obmat, rv3d->viewmat); - else Mat3One(obmat); + copy_m3_m4(obmat, rv3d->viewmat); + else unit_m3(obmat); - Mat3CpyMat4(viewmat, obedit->obmat); - Mat3MulMat3(totmat, obmat, viewmat); - Mat3Inv(imat, totmat); + copy_m3_m4(viewmat, obedit->obmat); + mul_m3_m3m3(totmat, obmat, viewmat); + invert_m3_m3(imat, totmat); ED_armature_deselectall(obedit, 0, 0); @@ -3439,9 +3513,9 @@ static int armature_bone_primitive_add_exec(bContext *C, wmOperator *op) VECCOPY(bone->head, curs); if(rv3d && (U.flag & USER_ADD_VIEWALIGNED)) - VecAddf(bone->tail, bone->head, imat[1]); // bone with unit length 1 + add_v3_v3v3(bone->tail, bone->head, imat[1]); // bone with unit length 1 else - VecAddf(bone->tail, bone->head, imat[2]); // bone with unit length 1, pointing up Z + add_v3_v3v3(bone->tail, bone->head, imat[2]); // bone with unit length 1, pointing up Z /* note, notifier might evolve */ WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, obedit); @@ -3674,7 +3748,7 @@ static int armature_switch_direction_exec(bContext *C, wmOperator *op) * - connected flag is only set if points are coincidental */ ebo->parent= child; - if ((child) && VecEqual(ebo->head, child->tail)) + if ((child) && equals_v3v3(ebo->head, child->tail)) ebo->flag |= BONE_CONNECTED; else ebo->flag &= ~BONE_CONNECTED; @@ -3760,12 +3834,12 @@ static void bone_connect_to_new_parent(ListBase *edbo, EditBone *selbone, EditBo if (mode == ARM_PAR_CONNECT) { /* Connected: Child bones will be moved to the parent tip */ selbone->flag |= BONE_CONNECTED; - VecSubf(offset, actbone->tail, selbone->head); + sub_v3_v3v3(offset, actbone->tail, selbone->head); VECCOPY(selbone->head, actbone->tail); selbone->rad_head= actbone->rad_tail; - VecAddf(selbone->tail, selbone->tail, offset); + add_v3_v3v3(selbone->tail, selbone->tail, offset); /* offset for all its children */ for (ebone = edbo->first; ebone; ebone=ebone->next) { @@ -3773,8 +3847,8 @@ static void bone_connect_to_new_parent(ListBase *edbo, EditBone *selbone, EditBo for (par= ebone->parent; par; par= par->parent) { if (par==selbone) { - VecAddf(ebone->head, ebone->head, offset); - VecAddf(ebone->tail, ebone->tail, offset); + add_v3_v3v3(ebone->head, ebone->head, offset); + add_v3_v3v3(ebone->tail, ebone->tail, offset); break; } } @@ -3965,7 +4039,6 @@ static int armature_select_inverse_exec(bContext *C, wmOperator *op) if ((ebone->flag & BONE_UNSELECTABLE) == 0) { /* select bone */ ebone->flag ^= (BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL); - ebone->flag &= ~BONE_ACTIVE; } } CTX_DATA_END; @@ -4009,7 +4082,7 @@ static int armature_de_select_all_exec(bContext *C, wmOperator *op) } else { /* deselect bone */ - ebone->flag &= ~(BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL | BONE_ACTIVE); + ebone->flag &= ~(BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL); } } } @@ -4053,17 +4126,17 @@ static int armature_select_hierarchy_exec(bContext *C, wmOperator *op) for (curbone= arm->edbo->first; curbone; curbone= curbone->next) { /* only work on bone if it is visible and its selection can change */ if (EBONE_VISIBLE(arm, curbone) && (curbone->flag & BONE_UNSELECTABLE)==0) { - if (curbone->flag & (BONE_ACTIVE)) { + if (curbone == arm->act_edbone) { if (direction == BONE_SELECT_PARENT) { if (curbone->parent == NULL) continue; else pabone = curbone->parent; if (EBONE_VISIBLE(arm, pabone)) { - pabone->flag |= (BONE_ACTIVE|BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL); + pabone->flag |= (BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL); + arm->act_edbone= pabone; if (pabone->parent) pabone->parent->flag |= BONE_TIPSEL; if (!add_to_sel) curbone->flag &= ~(BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL); - curbone->flag &= ~BONE_ACTIVE; break; } @@ -4073,13 +4146,13 @@ static int armature_select_hierarchy_exec(bContext *C, wmOperator *op) if (chbone == NULL) continue; if (EBONE_VISIBLE(arm, chbone) && (chbone->flag & BONE_UNSELECTABLE)==0) { - chbone->flag |= (BONE_ACTIVE|BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL); + chbone->flag |= (BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL); + arm->act_edbone= chbone; if (!add_to_sel) { curbone->flag &= ~(BONE_SELECTED|BONE_ROOTSEL); if (curbone->parent) curbone->parent->flag &= ~BONE_TIPSEL; } - curbone->flag &= ~BONE_ACTIVE; break; } } @@ -4126,13 +4199,13 @@ static void fix_connected_bone(EditBone *ebone) { float diff[3]; - if (!(ebone->parent) || !(ebone->flag & BONE_CONNECTED) || VecEqual(ebone->parent->tail, ebone->head)) + if (!(ebone->parent) || !(ebone->flag & BONE_CONNECTED) || equals_v3v3(ebone->parent->tail, ebone->head)) return; /* if the parent has moved we translate child's head and tail accordingly*/ - VecSubf(diff, ebone->parent->tail, ebone->head); - VecAddf(ebone->head, ebone->head, diff); - VecAddf(ebone->tail, ebone->tail, diff); + sub_v3_v3v3(diff, ebone->parent->tail, ebone->head); + add_v3_v3v3(ebone->head, ebone->head, diff); + add_v3_v3v3(ebone->tail, ebone->tail, diff); return; } @@ -4154,14 +4227,14 @@ static void bone_align_to_bone(ListBase *edbo, EditBone *selbone, EditBone *actb { float selboneaxis[3], actboneaxis[3], length; - VecSubf(actboneaxis, actbone->tail, actbone->head); - Normalize(actboneaxis); + sub_v3_v3v3(actboneaxis, actbone->tail, actbone->head); + normalize_v3(actboneaxis); - VecSubf(selboneaxis, selbone->tail, selbone->head); - length = VecLength(selboneaxis); + sub_v3_v3v3(selboneaxis, selbone->tail, selbone->head); + length = len_v3(selboneaxis); - VecMulf(actboneaxis, length); - VecAddf(selbone->tail, selbone->head, actboneaxis); + mul_v3_fl(actboneaxis, length); + add_v3_v3v3(selbone->tail, selbone->head, actboneaxis); selbone->roll = actbone->roll; /* if the bone being aligned has connected descendants they must be moved @@ -4256,14 +4329,6 @@ void ARMATURE_OT_align(wmOperatorType *ot) /* ***************** Pose tools ********************* */ -/* helper for function below */ -static int clear_active_flag(Object *ob, Bone *bone, void *data) -{ - bone->flag &= ~BONE_ACTIVE; - return 0; -} - - // XXX bone_looper is only to be used when we want to access settings (i.e. editability/visibility/selected) that context doesn't offer static int bone_looper(Object *ob, Bone *bone, void *data, int (*bone_func)(Object *, Bone *, void *)) @@ -4310,7 +4375,8 @@ int ED_do_pose_selectbuffer(Scene *scene, Base *base, unsigned int *buffer, shor /* since we do unified select, we don't shift+select a bone if the armature object was not active yet */ if (!(extend) || (base != scene->basact)) { ED_pose_deselectall(ob, 0, 0); - nearBone->flag |= (BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL|BONE_ACTIVE); + nearBone->flag |= (BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL); + arm->act_bone= nearBone; // XXX old cruft! use notifiers instead //select_actionchannel_by_name(ob->action, nearBone->name, 1); @@ -4318,21 +4384,19 @@ int ED_do_pose_selectbuffer(Scene *scene, Base *base, unsigned int *buffer, shor else { if (nearBone->flag & BONE_SELECTED) { /* if not active, we make it active */ - if((nearBone->flag & BONE_ACTIVE)==0) { - bone_looper(ob, arm->bonebase.first, NULL, clear_active_flag); - nearBone->flag |= BONE_ACTIVE; + if(nearBone != arm->act_bone) { + arm->act_bone= nearBone; } else { - nearBone->flag &= ~(BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL|BONE_ACTIVE); + nearBone->flag &= ~(BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL); // XXX old cruft! use notifiers instead //select_actionchannel_by_name(ob->action, nearBone->name, 0); } } else { - bone_looper(ob, arm->bonebase.first, NULL, clear_active_flag); - - nearBone->flag |= (BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL|BONE_ACTIVE); + nearBone->flag |= (BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL); + arm->act_bone= nearBone; // XXX old cruft! use notifiers instead //select_actionchannel_by_name(ob->action, nearBone->name, 1); @@ -4341,7 +4405,7 @@ int ED_do_pose_selectbuffer(Scene *scene, Base *base, unsigned int *buffer, shor /* in weightpaint we select the associated vertex group too */ if (OBACT && OBACT->mode & OB_MODE_WEIGHT_PAINT) { - if (nearBone->flag & BONE_ACTIVE) { + if (nearBone == arm->act_bone) { ED_vgroup_select_by_name(OBACT, nearBone->name); DAG_id_flush_update(&OBACT->id, OB_RECALC_DATA); } @@ -4387,16 +4451,17 @@ void ED_pose_deselectall (Object *ob, int test, int doundo) if ((pchan->bone->layer & arm->layer) && !(pchan->bone->flag & (BONE_HIDDEN_P|BONE_UNSELECTABLE))) { if (test==3) { pchan->bone->flag ^= (BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL); - pchan->bone->flag &= ~BONE_ACTIVE; } else { - if (selectmode==0) pchan->bone->flag &= ~(BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL|BONE_ACTIVE); + if (selectmode==0) pchan->bone->flag &= ~(BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL); else if (selectmode==1) pchan->bone->flag |= BONE_SELECTED; - else pchan->bone->flag &= ~BONE_ACTIVE; } } } + if(arm->act_bone && (arm->act_bone->flag & BONE_SELECTED)==0) + arm->act_bone= NULL; + //countall(); // XXX need an equivalent to this... if (doundo) { @@ -4655,10 +4720,10 @@ void add_verts_to_dgroups(Scene *scene, Object *ob, Object *par, int heat, int m /* compute root and tip */ if (bbone) { VECCOPY(root[j], bbone[segments].mat[3]); - Mat4MulVecfl(bone->arm_mat, root[j]); + mul_m4_v3(bone->arm_mat, root[j]); if ((segments+1) < bone->segments) { VECCOPY(tip[j], bbone[segments+1].mat[3]) - Mat4MulVecfl(bone->arm_mat, tip[j]); + mul_m4_v3(bone->arm_mat, tip[j]); } else VECCOPY(tip[j], bone->arm_tail) @@ -4668,8 +4733,8 @@ void add_verts_to_dgroups(Scene *scene, Object *ob, Object *par, int heat, int m VECCOPY(tip[j], bone->arm_tail); } - Mat4MulVecfl(par->obmat, root[j]); - Mat4MulVecfl(par->obmat, tip[j]); + mul_m4_v3(par->obmat, root[j]); + mul_m4_v3(par->obmat, tip[j]); /* set selected */ if (wpmode) { @@ -4723,7 +4788,7 @@ void add_verts_to_dgroups(Scene *scene, Object *ob, Object *par, int heat, int m for (i=0; i < mesh->totvert; i++) { if (!vertsfilled) VECCOPY(verts[i], mesh->mvert[i].co) - Mat4MulVecfl(ob->obmat, verts[i]); + mul_m4_v3(ob->obmat, verts[i]); } /* compute the weights based on gathered vertices and bones */ @@ -4733,7 +4798,7 @@ void add_verts_to_dgroups(Scene *scene, Object *ob, Object *par, int heat, int m } else { envelope_bone_weighting(ob, mesh, verts, numbones, bonelist, dgrouplist, - dgroupflip, root, tip, selected, Mat4ToScalef(par->obmat)); + dgroupflip, root, tip, selected, mat4_to_scale(par->obmat)); } /* free the memory allocated */ @@ -4904,10 +4969,10 @@ static int pose_clear_rot_exec(bContext *C, wmOperator *op) if (pchan->rotmode == ROT_MODE_QUAT) { QUATCOPY(quat1, pchan->quat); - QuatToEul(pchan->quat, oldeul); + quat_to_eul( oldeul,pchan->quat); } else if (pchan->rotmode == ROT_MODE_AXISANGLE) { - AxisAngleToEulO(pchan->rotAxis, pchan->rotAngle, oldeul, EULER_ORDER_DEFAULT); + axis_angle_to_eulO( oldeul, EULER_ORDER_DEFAULT,pchan->rotAxis, pchan->rotAngle); } else { VECCOPY(oldeul, pchan->eul); @@ -4923,14 +4988,14 @@ static int pose_clear_rot_exec(bContext *C, wmOperator *op) eul[2]= oldeul[2]; if (pchan->rotmode == ROT_MODE_QUAT) { - EulToQuat(eul, pchan->quat); + eul_to_quat( pchan->quat,eul); /* quaternions flip w sign to accumulate rotations correctly */ if ((quat1[0]<0.0f && pchan->quat[0]>0.0f) || (quat1[0]>0.0f && pchan->quat[0]<0.0f)) { - QuatMulf(pchan->quat, -1.0f); + mul_qt_fl(pchan->quat, -1.0f); } } else if (pchan->rotmode == ROT_MODE_AXISANGLE) { - EulOToAxisAngle(eul, EULER_ORDER_DEFAULT, pchan->rotAxis, &pchan->rotAngle); + eulO_to_axis_angle( pchan->rotAxis, &pchan->rotAngle,eul, EULER_ORDER_DEFAULT); } else { VECCOPY(pchan->eul, eul); @@ -4990,7 +5055,6 @@ static int pose_select_inverse_exec(bContext *C, wmOperator *op) CTX_DATA_BEGIN(C, bPoseChannel *, pchan, visible_pchans) { if ((pchan->bone->flag & BONE_UNSELECTABLE) == 0) { pchan->bone->flag ^= (BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL); - pchan->bone->flag &= ~BONE_ACTIVE; } } CTX_DATA_END; @@ -5026,12 +5090,13 @@ static int pose_de_select_all_exec(bContext *C, wmOperator *op) /* Set the flags */ CTX_DATA_BEGIN(C, bPoseChannel *, pchan, visible_pchans) { /* select pchan only if selectable, but deselect works always */ - if (sel==0) - pchan->bone->flag &= ~(BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL|BONE_ACTIVE); + if (sel==0) { + pchan->bone->flag &= ~(BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL); + } else if ((pchan->bone->flag & BONE_UNSELECTABLE)==0) pchan->bone->flag |= BONE_SELECTED; } - CTX_DATA_END; + CTX_DATA_END; WM_event_add_notifier(C, NC_OBJECT|ND_BONE_SELECT, NULL); @@ -5062,11 +5127,11 @@ static int pose_select_parent_exec(bContext *C, wmOperator *op) /* Determine if there is an active bone */ pchan=CTX_data_active_pchan(C); if (pchan) { + bArmature *arm= ob->data; parent=pchan->parent; if ((parent) && !(parent->bone->flag & (BONE_HIDDEN_P|BONE_UNSELECTABLE))) { parent->bone->flag |= BONE_SELECTED; - parent->bone->flag |= BONE_ACTIVE; - pchan->bone->flag &= ~BONE_ACTIVE; + arm->act_bone= parent->bone; } else { return OPERATOR_CANCELLED; @@ -5105,7 +5170,8 @@ static int hide_selected_pose_bone(Object *ob, Bone *bone, void *ptr) if (arm->layer & bone->layer) { if (bone->flag & BONE_SELECTED) { bone->flag |= BONE_HIDDEN_P; - bone->flag &= ~(BONE_SELECTED|BONE_ACTIVE); + if(arm->act_bone==bone) + arm->act_bone= NULL; } } return 0; @@ -5117,9 +5183,10 @@ static int hide_unselected_pose_bone(Object *ob, Bone *bone, void *ptr) if (arm->layer & bone->layer) { // hrm... typo here? - if (~bone->flag & BONE_SELECTED) { + if ((bone->flag & BONE_SELECTED)==0) { bone->flag |= BONE_HIDDEN_P; - bone->flag &= ~BONE_ACTIVE; + if(arm->act_bone==bone) + arm->act_bone= NULL; } } return 0; @@ -5551,13 +5618,13 @@ EditBone * subdivideByAngle(Scene *scene, Object *obedit, ReebArc *arc, ReebNode current = iter->p; - VecSubf(vec1, previous, parent->head); - VecSubf(vec2, current, previous); + sub_v3_v3v3(vec1, previous, parent->head); + sub_v3_v3v3(vec2, current, previous); - len1 = Normalize(vec1); - len2 = Normalize(vec2); + len1 = normalize_v3(vec1); + len2 = normalize_v3(vec2); - if (len1 > 0.0f && len2 > 0.0f && Inpf(vec1, vec2) < angleLimit) + if (len1 > 0.0f && len2 > 0.0f && dot_v3v3(vec1, vec2) < angleLimit) { VECCOPY(parent->tail, previous); @@ -5576,7 +5643,8 @@ EditBone * subdivideByAngle(Scene *scene, Object *obedit, ReebArc *arc, ReebNode * */ if (parent == root) { - delete_bone(arm->edbo, parent); + if(parent==arm->act_edbone) arm->act_edbone= NULL; + delete_bone(arm, parent); parent = NULL; } @@ -5617,18 +5685,18 @@ float arcLengthRatio(ReebArc *arc) float embedLength = 0.0f; int i; - arcLength = VecLenf(arc->head->p, arc->tail->p); + arcLength = len_v3v3(arc->head->p, arc->tail->p); if (arc->bcount > 0) { /* Add the embedding */ for ( i = 1; i < arc->bcount; i++) { - embedLength += VecLenf(arc->buckets[i - 1].p, arc->buckets[i].p); + embedLength += len_v3v3(arc->buckets[i - 1].p, arc->buckets[i].p); } /* Add head and tail -> embedding vectors */ - embedLength += VecLenf(arc->head->p, arc->buckets[0].p); - embedLength += VecLenf(arc->tail->p, arc->buckets[arc->bcount - 1].p); + embedLength += len_v3v3(arc->head->p, arc->buckets[0].p); + embedLength += len_v3v3(arc->tail->p, arc->buckets[arc->bcount - 1].p); } else { @@ -5688,8 +5756,8 @@ void generateSkeletonFromReebGraph(Scene *scene, ReebGraph *rg) /* Copy orientation from source */ VECCOPY(dst->loc, src->obmat[3]); - Mat4ToEul(src->obmat, dst->rot); - Mat4ToSize(src->obmat, dst->size); + mat4_to_eul( dst->rot,src->obmat); + mat4_to_size( dst->size,src->obmat); where_is_object(scene, obedit); diff --git a/source/blender/editors/armature/editarmature_generate.c b/source/blender/editors/armature/editarmature_generate.c index d327ed34839..124528811c7 100644 --- a/source/blender/editors/armature/editarmature_generate.c +++ b/source/blender/editors/armature/editarmature_generate.c @@ -39,7 +39,7 @@ #include "DNA_armature_types.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_graph.h" #include "BKE_utildefines.h" @@ -52,18 +52,18 @@ void setBoneRollFromNormal(EditBone *bone, float *no, float invmat[][4], float tmat[][3]) { - if (no != NULL && !VecIsNull(no)) + if (no != NULL && !is_zero_v3(no)) { float tangent[3], vec[3], normal[3]; VECCOPY(normal, no); - Mat3MulVecfl(tmat, normal); + mul_m3_v3(tmat, normal); - VecSubf(tangent, bone->tail, bone->head); - Projf(vec, tangent, normal); - VecSubf(normal, normal, vec); + sub_v3_v3v3(tangent, bone->tail, bone->head); + project_v3_v3v3(vec, tangent, normal); + sub_v3_v3v3(normal, normal, vec); - Normalize(normal); + normalize_v3(normal); bone->roll = ED_rollBoneToVector(bone, normal); } @@ -86,11 +86,11 @@ float calcArcCorrelation(BArcIterator *iter, int start, int end, float v0[3], fl float v[3]; IT_peek(iter, i); - VecSubf(v, iter->p, v0); - avg_t += Inpf(v, n); + sub_v3_v3v3(v, iter->p, v0); + avg_t += dot_v3v3(v, n); } - avg_t /= Inpf(n, n); + avg_t /= dot_v3v3(n, n); avg_t += 1.0f; /* adding start (0) and end (1) values */ avg_t /= len; @@ -101,14 +101,14 @@ float calcArcCorrelation(BArcIterator *iter, int start, int end, float v0[3], fl float dt; IT_peek(iter, i); - VecSubf(v, iter->p, v0); - Projf(d, v, n); - VecSubf(v, v, d); + sub_v3_v3v3(v, iter->p, v0); + project_v3_v3v3(d, v, n); + sub_v3_v3v3(v, v, d); - dt = VecLength(d) - avg_t; + dt = len_v3(d) - avg_t; s_t += dt * dt; - s_xyz += Inpf(v, v); + s_xyz += dot_v3v3(v, v); } /* adding start(0) and end(1) values to s_t */ @@ -143,7 +143,7 @@ int nextFixedSubdivision(ToolSettings *toolsettings, BArcIterator *iter, int sta IT_peek(iter, i); v2 = iter->p; - stroke_length += VecLenf(v1, v2); + stroke_length += len_v3v3(v1, v2); v1 = v2; } @@ -165,7 +165,7 @@ int nextFixedSubdivision(ToolSettings *toolsettings, BArcIterator *iter, int sta IT_peek(iter, i); v2 = iter->p; - current_length += VecLenf(v1, v2); + current_length += len_v3v3(v1, v2); if (current_length >= length_threshold) { @@ -194,7 +194,7 @@ int nextAdaptativeSubdivision(ToolSettings *toolsettings, BArcIterator *iter, in { /* Calculate normal */ IT_peek(iter, i); - VecSubf(n, iter->p, head); + sub_v3_v3v3(n, iter->p, head); if (calcArcCorrelation(iter, start, i, start_p, n) < correlation_threshold) { @@ -226,7 +226,7 @@ int nextLengthSubdivision(ToolSettings *toolsettings, BArcIterator *iter, int st vec1 = iter->p; /* If lengthLimit hits the current segment */ - if (VecLenf(vec1, head) > lengthLimit) + if (len_v3v3(vec1, head) > lengthLimit) { if (same == 0) { @@ -234,13 +234,13 @@ int nextLengthSubdivision(ToolSettings *toolsettings, BArcIterator *iter, int st float a, b, c, f; /* Solve quadratic distance equation */ - VecSubf(dv, vec1, vec0); - a = Inpf(dv, dv); + sub_v3_v3v3(dv, vec1, vec0); + a = dot_v3v3(dv, dv); - VecSubf(off, vec0, head); - b = 2 * Inpf(dv, off); + sub_v3_v3v3(off, vec0, head); + b = 2 * dot_v3v3(dv, off); - c = Inpf(off, off) - (lengthLimit * lengthLimit); + c = dot_v3v3(off, off) - (lengthLimit * lengthLimit); f = (-b + (float)sqrt(b * b - 4 * a * c)) / (2 * a); @@ -249,8 +249,8 @@ int nextLengthSubdivision(ToolSettings *toolsettings, BArcIterator *iter, int st if (isnan(f) == 0 && f < 1.0f) { VECCOPY(p, dv); - VecMulf(p, f); - VecAddf(p, p, vec0); + mul_v3_fl(p, f); + add_v3_v3v3(p, p, vec0); } else { @@ -261,12 +261,12 @@ int nextLengthSubdivision(ToolSettings *toolsettings, BArcIterator *iter, int st { float dv[3]; - VecSubf(dv, vec1, vec0); - Normalize(dv); + sub_v3_v3v3(dv, vec1, vec0); + normalize_v3(dv); VECCOPY(p, dv); - VecMulf(p, lengthLimit); - VecAddf(p, p, head); + mul_v3_fl(p, lengthLimit); + add_v3_v3v3(p, p, head); } return i - 1; /* restart at lower bound */ @@ -321,8 +321,8 @@ EditBone * subdivideArcBy(ToolSettings *toolsettings, bArmature *arm, ListBase * } /* going to next bone, fix parent */ - Mat4MulVecfl(invmat, parent->tail); - Mat4MulVecfl(invmat, parent->head); + mul_m4_v3(invmat, parent->tail); + mul_m4_v3(invmat, parent->head); setBoneRollFromNormal(parent, normal, invmat, tmat); parent = child; // new child is next parent @@ -342,8 +342,8 @@ EditBone * subdivideArcBy(ToolSettings *toolsettings, bArmature *arm, ListBase * } /* fix last bone */ - Mat4MulVecfl(invmat, parent->tail); - Mat4MulVecfl(invmat, parent->head); + mul_m4_v3(invmat, parent->tail); + mul_m4_v3(invmat, parent->head); setBoneRollFromNormal(parent, iter->no, invmat, tmat); lastBone = parent; diff --git a/source/blender/editors/armature/editarmature_retarget.c b/source/blender/editors/armature/editarmature_retarget.c index 4d65059c4c6..946b7398773 100644 --- a/source/blender/editors/armature/editarmature_retarget.c +++ b/source/blender/editors/armature/editarmature_retarget.c @@ -48,7 +48,7 @@ #include "DNA_view3d_types.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_editVert.h" #include "BLI_ghash.h" #include "BLI_graph.h" @@ -162,7 +162,7 @@ void getEditBoneRollUpAxis(EditBone *bone, float roll, float up_axis[3]) { float mat[3][3], nor[3]; - VecSubf(nor, bone->tail, bone->head); + sub_v3_v3v3(nor, bone->tail, bone->head); vec_roll_to_mat3(nor, roll, mat); VECCOPY(up_axis, mat[2]); @@ -173,35 +173,35 @@ float rollBoneByQuatAligned(EditBone *bone, float old_up_axis[3], float qrot[4], float nor[3], new_up_axis[3], x_axis[3], z_axis[3]; VECCOPY(new_up_axis, old_up_axis); - QuatMulVecf(qrot, new_up_axis); + mul_qt_v3(qrot, new_up_axis); - VecSubf(nor, bone->tail, bone->head); + sub_v3_v3v3(nor, bone->tail, bone->head); - Crossf(x_axis, nor, aligned_axis); - Crossf(z_axis, x_axis, nor); + cross_v3_v3v3(x_axis, nor, aligned_axis); + cross_v3_v3v3(z_axis, x_axis, nor); - Normalize(new_up_axis); - Normalize(x_axis); - Normalize(z_axis); + normalize_v3(new_up_axis); + normalize_v3(x_axis); + normalize_v3(z_axis); - if (Inpf(new_up_axis, x_axis) < 0) + if (dot_v3v3(new_up_axis, x_axis) < 0) { - VecMulf(x_axis, -1); + mul_v3_fl(x_axis, -1); } - if (Inpf(new_up_axis, z_axis) < 0) + if (dot_v3v3(new_up_axis, z_axis) < 0) { - VecMulf(z_axis, -1); + mul_v3_fl(z_axis, -1); } - if (NormalizedVecAngle2(x_axis, new_up_axis) < NormalizedVecAngle2(z_axis, new_up_axis)) + if (angle_normalized_v3v3(x_axis, new_up_axis) < angle_normalized_v3v3(z_axis, new_up_axis)) { - RotationBetweenVectorsToQuat(qroll, new_up_axis, x_axis); /* set roll rotation quat */ + rotation_between_vecs_to_quat(qroll, new_up_axis, x_axis); /* set roll rotation quat */ return ED_rollBoneToVector(bone, x_axis); } else { - RotationBetweenVectorsToQuat(qroll, new_up_axis, z_axis); /* set roll rotation quat */ + rotation_between_vecs_to_quat(qroll, new_up_axis, z_axis); /* set roll rotation quat */ return ED_rollBoneToVector(bone, z_axis); } } @@ -220,11 +220,11 @@ float rollBoneByQuatJoint(RigEdge *edge, RigEdge *previous, float qrot[4], float if (previous->bone) { - VecSubf(vec_first, previous->bone->tail, previous->bone->head); + sub_v3_v3v3(vec_first, previous->bone->tail, previous->bone->head); } else if (previous->prev->bone) { - VecSubf(vec_first, edge->bone->head, previous->prev->bone->tail); + sub_v3_v3v3(vec_first, edge->bone->head, previous->prev->bone->tail); } else { @@ -232,25 +232,25 @@ float rollBoneByQuatJoint(RigEdge *edge, RigEdge *previous, float qrot[4], float return rollBoneByQuatAligned(edge->bone, edge->up_axis, qrot, qroll, up_axis); } - VecSubf(vec_second, edge->bone->tail, edge->bone->head); + sub_v3_v3v3(vec_second, edge->bone->tail, edge->bone->head); - Normalize(vec_first); - Normalize(vec_second); + normalize_v3(vec_first); + normalize_v3(vec_second); - Crossf(normal, vec_first, vec_second); - Normalize(normal); + cross_v3_v3v3(normal, vec_first, vec_second); + normalize_v3(normal); - AxisAngleToQuat(qroll, vec_second, edge->up_angle); + axis_angle_to_quat(qroll, vec_second, edge->up_angle); - QuatMulVecf(qroll, normal); + mul_qt_v3(qroll, normal); VECCOPY(new_up_axis, edge->up_axis); - QuatMulVecf(qrot, new_up_axis); + mul_qt_v3(qrot, new_up_axis); - Normalize(new_up_axis); + normalize_v3(new_up_axis); /* real qroll between normal and up_axis */ - RotationBetweenVectorsToQuat(qroll, new_up_axis, normal); + rotation_between_vecs_to_quat(qroll, new_up_axis, normal); return ED_rollBoneToVector(edge->bone, normal); } @@ -261,9 +261,9 @@ float rollBoneByQuat(EditBone *bone, float old_up_axis[3], float qrot[4]) float new_up_axis[3]; VECCOPY(new_up_axis, old_up_axis); - QuatMulVecf(qrot, new_up_axis); + mul_qt_v3(qrot, new_up_axis); - Normalize(new_up_axis); + normalize_v3(new_up_axis); return ED_rollBoneToVector(bone, new_up_axis); } @@ -431,7 +431,7 @@ static void RIG_appendEdgeToArc(RigArc *arc, RigEdge *edge) RIG_calculateEdgeAngles(last_edge, edge); } - edge->length = VecLenf(edge->head, edge->tail); + edge->length = len_v3v3(edge->head, edge->tail); arc->length += edge->length; @@ -509,7 +509,7 @@ static RigControl *cloneControl(RigGraph *rg, RigGraph *src_rg, RigControl *src_ renameTemplateBone(name, src_ctrl->bone->name, rg->editbones, side_string, num_string); ctrl->bone = duplicateEditBoneObjects(src_ctrl->bone, name, rg->editbones, src_rg->ob, rg->ob); - ctrl->bone->flag &= ~(BONE_TIPSEL|BONE_SELECTED|BONE_ROOTSEL|BONE_ACTIVE); + ctrl->bone->flag &= ~(BONE_TIPSEL|BONE_SELECTED|BONE_ROOTSEL); BLI_ghash_insert(ptr_hash, src_ctrl->bone, ctrl->bone); ctrl->link = src_ctrl->link; @@ -554,7 +554,7 @@ static RigArc *cloneArc(RigGraph *rg, RigGraph *src_rg, RigArc *src_arc, GHash * char name[32]; renameTemplateBone(name, src_edge->bone->name, rg->editbones, side_string, num_string); edge->bone = duplicateEditBoneObjects(src_edge->bone, name, rg->editbones, src_rg->ob, rg->ob); - edge->bone->flag &= ~(BONE_TIPSEL|BONE_SELECTED|BONE_ROOTSEL|BONE_ACTIVE); + edge->bone->flag &= ~(BONE_TIPSEL|BONE_SELECTED|BONE_ROOTSEL); BLI_ghash_insert(ptr_hash, src_edge->bone, edge->bone); } @@ -675,22 +675,22 @@ static void RIG_calculateEdgeAngles(RigEdge *edge_first, RigEdge *edge_second) { float vec_first[3], vec_second[3]; - VecSubf(vec_first, edge_first->tail, edge_first->head); - VecSubf(vec_second, edge_second->tail, edge_second->head); + sub_v3_v3v3(vec_first, edge_first->tail, edge_first->head); + sub_v3_v3v3(vec_second, edge_second->tail, edge_second->head); - Normalize(vec_first); - Normalize(vec_second); + normalize_v3(vec_first); + normalize_v3(vec_second); - edge_first->angle = NormalizedVecAngle2(vec_first, vec_second); + edge_first->angle = angle_normalized_v3v3(vec_first, vec_second); if (edge_second->bone != NULL) { float normal[3]; - Crossf(normal, vec_first, vec_second); - Normalize(normal); + cross_v3_v3v3(normal, vec_first, vec_second); + normalize_v3(normal); - edge_second->up_angle = NormalizedVecAngle2(normal, edge_second->up_axis); + edge_second->up_angle = angle_normalized_v3v3(normal, edge_second->up_axis); } } @@ -715,27 +715,27 @@ static int RIG_parentControl(RigControl *ctrl, EditBone *link) float offset[3]; int flag = 0; - VecSubf(offset, ctrl->bone->head, link->head); + sub_v3_v3v3(offset, ctrl->bone->head, link->head); /* if root matches, check for direction too */ - if (Inpf(offset, offset) < 0.0001) + if (dot_v3v3(offset, offset) < 0.0001) { float vbone[3], vparent[3]; flag |= RIG_CTRL_FIT_ROOT; - VecSubf(vbone, ctrl->bone->tail, ctrl->bone->head); - VecSubf(vparent, link->tail, link->head); + sub_v3_v3v3(vbone, ctrl->bone->tail, ctrl->bone->head); + sub_v3_v3v3(vparent, link->tail, link->head); /* test for opposite direction */ - if (Inpf(vbone, vparent) > 0) + if (dot_v3v3(vbone, vparent) > 0) { float nor[3]; float len; - Crossf(nor, vbone, vparent); + cross_v3_v3v3(nor, vbone, vparent); - len = Inpf(nor, nor); + len = dot_v3v3(nor, nor); if (len < 0.0001) { flag |= RIG_CTRL_FIT_BONE; @@ -869,8 +869,8 @@ static void RIG_reconnectControlBones(RigGraph *rg) { int fit = 0; - fit = VecLenf(ctrl->bone->head, edge->bone->head) < 0.0001; - fit = fit || VecLenf(ctrl->bone->tail, edge->bone->tail) < 0.0001; + fit = len_v3v3(ctrl->bone->head, edge->bone->head) < 0.0001; + fit = fit || len_v3v3(ctrl->bone->tail, edge->bone->tail) < 0.0001; if (fit) { @@ -1026,13 +1026,13 @@ static void RIG_reconnectControlBones(RigGraph *rg) /* don't link with parent */ if (bone->parent != ctrl->bone) { - if (VecLenf(ctrl->bone->tail, bone->head) < 0.01) + if (len_v3v3(ctrl->bone->tail, bone->head) < 0.01) { ctrl->tail_mode = TL_HEAD; ctrl->link_tail = bone; break; } - else if (VecLenf(ctrl->bone->tail, bone->tail) < 0.01) + else if (len_v3v3(ctrl->bone->tail, bone->tail) < 0.01) { ctrl->tail_mode = TL_TAIL; ctrl->link_tail = bone; @@ -1132,7 +1132,7 @@ static void RIG_removeUneededOffsets(RigGraph *rg) if (first_edge->bone == NULL) { - if (first_edge->bone == NULL && VecLenf(first_edge->tail, arc->head->p) <= 0.001) + if (first_edge->bone == NULL && len_v3v3(first_edge->tail, arc->head->p) <= 0.001) { BLI_remlink(&arc->edges, first_edge); MEM_freeN(first_edge); @@ -1262,7 +1262,7 @@ static void RIG_removeUneededOffsets(RigGraph *rg) if (last_edge->bone == NULL) { - if (VecLenf(last_edge->head, arc->tail->p) <= 0.001) + if (len_v3v3(last_edge->head, arc->tail->p) <= 0.001) { BLI_remlink(&arc->edges, last_edge); MEM_freeN(last_edge); @@ -1438,7 +1438,7 @@ void RIG_printNode(RigNode *node, char name[]) else if (node->symmetry_flag & SYM_RADIAL) printf("Symmetry RADIAL\n"); - printvecf("symmetry axis", node->symmetry_axis); + print_v3("symmetry axis", node->symmetry_axis); } } @@ -1464,7 +1464,7 @@ void RIG_printCtrl(RigControl *ctrl, char *indent) printf("%sLink: %s\n", indent, ctrl->link ? ctrl->link->name : "!NONE!"); sprintf(text, "%soffset", indent); - printvecf(text, ctrl->offset); + print_v3(text, ctrl->offset); printf("%sFlag: %i\n", indent, ctrl->flag); } @@ -1555,7 +1555,7 @@ RigGraph *RIG_graphFromArmature(const bContext *C, Object *ob, bArmature *arm) else { rg->editbones = MEM_callocN(sizeof(ListBase), "EditBones"); - make_boneList(rg->editbones, &arm->bonebase, NULL); + make_boneList(rg->editbones, &arm->bonebase, NULL, NULL); rg->flag |= RIG_FREE_BONELIST; } @@ -1607,7 +1607,7 @@ RigGraph *armatureSelectedToGraph(bContext *C, Object *ob, bArmature *arm) else { rg->editbones = MEM_callocN(sizeof(ListBase), "EditBones"); - make_boneList(rg->editbones, &arm->bonebase, NULL); + make_boneList(rg->editbones, &arm->bonebase, NULL, NULL); rg->flag |= RIG_FREE_BONELIST; } @@ -1761,15 +1761,15 @@ static void finalizeControl(RigGraph *rigg, RigControl *ctrl, float resize) tail_vec = ctrl->link_tail->head; } - VecSubf(v1, ctrl->bone->tail, ctrl->bone->head); - VecSubf(v2, tail_vec, ctrl->bone->head); + sub_v3_v3v3(v1, ctrl->bone->tail, ctrl->bone->head); + sub_v3_v3v3(v2, tail_vec, ctrl->bone->head); VECCOPY(ctrl->bone->tail, tail_vec); - RotationBetweenVectorsToQuat(qtail, v1, v2); - QuatMul(ctrl->qrot, qtail, ctrl->qrot); + rotation_between_vecs_to_quat(qtail, v1, v2); + mul_qt_qtqt(ctrl->qrot, qtail, ctrl->qrot); - resize = VecLength(v2) / VecLenf(ctrl->head, ctrl->tail); + resize = len_v3(v2) / len_v3v3(ctrl->head, ctrl->tail); } ctrl->bone->roll = rollBoneByQuat(ctrl->bone, ctrl->up_axis, ctrl->qrot); @@ -1801,10 +1801,10 @@ static void repositionControl(RigGraph *rigg, RigControl *ctrl, float head[3], f float parent_offset[3], tail_offset[3]; VECCOPY(parent_offset, ctrl->offset); - VecMulf(parent_offset, resize); - QuatMulVecf(qrot, parent_offset); + mul_v3_fl(parent_offset, resize); + mul_qt_v3(qrot, parent_offset); - VecAddf(ctrl->bone->head, head, parent_offset); + add_v3_v3v3(ctrl->bone->head, head, parent_offset); ctrl->flag |= RIG_CTRL_HEAD_DONE; @@ -1812,11 +1812,11 @@ static void repositionControl(RigGraph *rigg, RigControl *ctrl, float head[3], f if (ctrl->tail_mode == TL_NONE) { - VecSubf(tail_offset, ctrl->tail, ctrl->head); - VecMulf(tail_offset, resize); - QuatMulVecf(qrot, tail_offset); + sub_v3_v3v3(tail_offset, ctrl->tail, ctrl->head); + mul_v3_fl(tail_offset, resize); + mul_qt_v3(qrot, tail_offset); - VecAddf(ctrl->bone->tail, ctrl->bone->head, tail_offset); + add_v3_v3v3(ctrl->bone->tail, ctrl->bone->head, tail_offset); ctrl->flag |= RIG_CTRL_TAIL_DONE; } @@ -1835,20 +1835,20 @@ static void repositionBone(bContext *C, RigGraph *rigg, RigEdge *edge, float vec bone = edge->bone; - VecSubf(v1, edge->tail, edge->head); - VecSubf(v2, vec1, vec0); + sub_v3_v3v3(v1, edge->tail, edge->head); + sub_v3_v3v3(v2, vec1, vec0); - l1 = Normalize(v1); - l2 = Normalize(v2); + l1 = normalize_v3(v1); + l2 = normalize_v3(v2); resize = l2 / l1; - RotationBetweenVectorsToQuat(qrot, v1, v2); + rotation_between_vecs_to_quat(qrot, v1, v2); VECCOPY(bone->head, vec0); VECCOPY(bone->tail, vec1); - if (!VecIsNull(up_axis)) + if (!is_zero_v3(up_axis)) { float qroll[4]; @@ -1862,10 +1862,10 @@ static void repositionBone(bContext *C, RigGraph *rigg, RigEdge *edge, float vec } else { - QuatOne(qroll); + unit_qt(qroll); } - QuatMul(qrot, qroll, qrot); + mul_qt_qtqt(qrot, qroll, qrot); } else { @@ -1979,9 +1979,9 @@ static float costDistance(BArcIterator *iter, float *vec0, float *vec1, int i0, if (distance_weight > 0) { - VecSubf(v1, vec0, vec1); + sub_v3_v3v3(v1, vec0, vec1); - v1_inpf = Inpf(v1, v1); + v1_inpf = dot_v3v3(v1, v1); if (v1_inpf > 0) { @@ -1992,11 +1992,11 @@ static float costDistance(BArcIterator *iter, float *vec0, float *vec1, int i0, bucket = IT_peek(iter, j); - VecSubf(v2, bucket->p, vec1); + sub_v3_v3v3(v2, bucket->p, vec1); - Crossf(c, v1, v2); + cross_v3_v3v3(c, v1, v2); - dist = Inpf(c, c) / v1_inpf; + dist = dot_v3v3(c, c) / v1_inpf; max_dist = dist > max_dist ? dist : max_dist; } @@ -2020,9 +2020,9 @@ static float costAngle(float original_angle, float vec_first[3], float vec_secon { float current_angle; - if (!VecIsNull(vec_first) && !VecIsNull(vec_second)) + if (!is_zero_v3(vec_first) && !is_zero_v3(vec_second)) { - current_angle = saacos(Inpf(vec_first, vec_second)); + current_angle = saacos(dot_v3v3(vec_first, vec_second)); return angle_weight * fabs(current_angle - original_angle); } @@ -2056,8 +2056,8 @@ static float calcCostLengthDistance(BArcIterator *iter, float **vec_cache, RigEd float vec[3]; float length; - VecSubf(vec, vec2, vec1); - length = Normalize(vec); + sub_v3_v3v3(vec, vec2, vec1); + length = normalize_v3(vec); return costLength(edge->length, length) + costDistance(iter, vec1, vec2, i1, i2); } @@ -2069,15 +2069,15 @@ static float calcCostAngleLengthDistance(BArcIterator *iter, float **vec_cache, float length2; float new_cost = 0; - VecSubf(vec_second, vec2, vec1); - length2 = Normalize(vec_second); + sub_v3_v3v3(vec_second, vec2, vec1); + length2 = normalize_v3(vec_second); /* Angle cost */ if (edge->prev) { - VecSubf(vec_first, vec1, vec0); - Normalize(vec_first); + sub_v3_v3v3(vec_first, vec1, vec0); + normalize_v3(vec_first); new_cost += costAngle(edge->prev->angle, vec_first, vec_second, angle_weight); } @@ -2352,13 +2352,13 @@ static void retargetArctoArcLength(bContext *C, RigGraph *rigg, RigArc *iarc, Ri { vec1 = bucket->p; - embedding_length += VecLenf(vec0, vec1); + embedding_length += len_v3v3(vec0, vec1); vec0 = vec1; bucket = IT_next(iter); } - embedding_length += VecLenf(node_end->p, vec1); + embedding_length += len_v3v3(node_end->p, vec1); /* fit bones */ initArcIterator(iter, earc, node_start); @@ -2377,7 +2377,7 @@ static void retargetArctoArcLength(bContext *C, RigGraph *rigg, RigArc *iarc, Ri while (bucket && new_bone_length > length) { - length += VecLenf(previous_vec, vec1); + length += len_v3v3(previous_vec, vec1); bucket = IT_next(iter); previous_vec = vec1; vec1 = bucket->p; @@ -2947,6 +2947,8 @@ void BIF_retargetArc(bContext *C, ReebArc *earc, RigGraph *template_rigg) } RIG_freeRigGraph((BGraph*)rigg); + ED_armature_validate_active(armedit); + // XXX // allqueue(REDRAWVIEW3D, 0); } diff --git a/source/blender/editors/armature/editarmature_sketch.c b/source/blender/editors/armature/editarmature_sketch.c index b3dd8f35137..7bb2fa9009d 100644 --- a/source/blender/editors/armature/editarmature_sketch.c +++ b/source/blender/editors/armature/editarmature_sketch.c @@ -39,7 +39,7 @@ #include "RNA_access.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_graph.h" #include "BLI_ghash.h" @@ -416,10 +416,10 @@ ReebNode *sk_pointToNode(SK_Point *pt, float imat[][4], float tmat[][3]) node = MEM_callocN(sizeof(ReebNode), "reeb node"); VECCOPY(node->p, pt->p); - Mat4MulVecfl(imat, node->p); + mul_m4_v3(imat, node->p); VECCOPY(node->no, pt->no); - Mat3MulVecfl(tmat, node->no); + mul_m3_v3(tmat, node->no); return node; } @@ -439,10 +439,10 @@ ReebArc *sk_strokeToArc(SK_Stroke *stk, float imat[][4], float tmat[][3]) for (i = 0; i < arc->bcount; i++) { VECCOPY(arc->buckets[i].p, stk->points[i + 1].p); - Mat4MulVecfl(imat, arc->buckets[i].p); + mul_m4_v3(imat, arc->buckets[i].p); VECCOPY(arc->buckets[i].no, stk->points[i + 1].no); - Mat3MulVecfl(tmat, arc->buckets[i].no); + mul_m3_v3(tmat, arc->buckets[i].no); } return arc; @@ -457,10 +457,10 @@ void sk_retargetStroke(bContext *C, SK_Stroke *stk) ReebArc *arc; RigGraph *rg; - Mat4Invert(imat, obedit->obmat); + invert_m4_m4(imat, obedit->obmat); - Mat3CpyMat4(tmat, obedit->obmat); - Mat3Transp(tmat); + copy_m3_m4(tmat, obedit->obmat); + transpose_m3(tmat); arc = sk_strokeToArc(stk, imat, tmat); @@ -505,16 +505,16 @@ void sk_drawEdge(GLUquadric *quad, SK_Point *pt0, SK_Point *pt1, float size) float vec1[3], vec2[3] = {0, 0, 1}, axis[3]; float angle, length; - VecSubf(vec1, pt1->p, pt0->p); - length = Normalize(vec1); - Crossf(axis, vec2, vec1); + sub_v3_v3v3(vec1, pt1->p, pt0->p); + length = normalize_v3(vec1); + cross_v3_v3v3(axis, vec2, vec1); - if (VecIsNull(axis)) + if (is_zero_v3(axis)) { axis[1] = 1; } - angle = NormalizedVecAngle2(vec2, vec1); + angle = angle_normalized_v3v3(vec2, vec1); glRotatef(angle * 180 / M_PI + 180, axis[0], axis[1], axis[2]); @@ -528,14 +528,14 @@ void sk_drawNormal(GLUquadric *quad, SK_Point *pt, float size, float height) glPushMatrix(); - Crossf(axis, vec2, pt->no); + cross_v3_v3v3(axis, vec2, pt->no); - if (VecIsNull(axis)) + if (is_zero_v3(axis)) { axis[1] = 1; } - angle = NormalizedVecAngle2(vec2, pt->no); + angle = angle_normalized_v3v3(vec2, pt->no); glRotatef(angle * 180 / M_PI, axis[0], axis[1], axis[2]); @@ -576,8 +576,8 @@ void sk_drawStroke(SK_Stroke *stk, int id, float color[3], int start, int end) float d_rgb[3] = {1, 1, 1}; VECCOPY(rgb, color); - VecSubf(d_rgb, d_rgb, rgb); - VecMulf(d_rgb, 1.0f / (float)stk->nb_points); + sub_v3_v3v3(d_rgb, d_rgb, rgb); + mul_v3_fl(d_rgb, 1.0f / (float)stk->nb_points); for (i = 0; i < stk->nb_points; i++) { @@ -614,7 +614,7 @@ void sk_drawStroke(SK_Stroke *stk, int id, float color[3], int start, int end) glPopMatrix(); - VecAddf(rgb, rgb, d_rgb); + add_v3_v3v3(rgb, rgb, d_rgb); } } @@ -756,7 +756,7 @@ SK_Point *sk_snapPointArmature(bContext *C, Object *ob, ListBase *ebones, short if ((bone->flag & BONE_CONNECTED) == 0) { VECCOPY(vec, bone->head); - Mat4MulVecfl(ob->obmat, vec); + mul_m4_v3(ob->obmat, vec); project_short_noclip(ar, vec, pval); pdist = ABS(pval[0] - mval[0]) + ABS(pval[1] - mval[1]); @@ -772,7 +772,7 @@ SK_Point *sk_snapPointArmature(bContext *C, Object *ob, ListBase *ebones, short VECCOPY(vec, bone->tail); - Mat4MulVecfl(ob->obmat, vec); + mul_m4_v3(ob->obmat, vec); project_short_noclip(ar, vec, pval); pdist = ABS(pval[0] - mval[0]) + ABS(pval[1] - mval[1]); @@ -977,13 +977,13 @@ float sk_distanceDepth(bContext *C, float p1[3], float p2[3]) float vec[3]; float distance; - VecSubf(vec, p1, p2); + sub_v3_v3v3(vec, p1, p2); - Projf(vec, vec, rv3d->viewinv[2]); + project_v3_v3v3(vec, vec, rv3d->viewinv[2]); - distance = VecLength(vec); + distance = len_v3(vec); - if (Inpf(rv3d->viewinv[2], vec) > 0) + if (dot_v3v3(rv3d->viewinv[2], vec) > 0) { distance *= -1; } @@ -1000,19 +1000,19 @@ void sk_interpolateDepth(bContext *C, SK_Stroke *stk, int start, int end, float float progress = 0; int i; - progress = VecLenf(stk->points[start].p, stk->points[start - 1].p); + progress = len_v3v3(stk->points[start].p, stk->points[start - 1].p); for (i = start; i <= end; i++) { float ray_start[3], ray_normal[3]; - float delta = VecLenf(stk->points[i].p, stk->points[i + 1].p); + float delta = len_v3v3(stk->points[i].p, stk->points[i + 1].p); float pval[2]; project_float(ar, stk->points[i].p, pval); viewray(ar, v3d, pval, ray_start, ray_normal); - VecMulf(ray_normal, distance * progress / length); - VecAddf(stk->points[i].p, stk->points[i].p, ray_normal); + mul_v3_fl(ray_normal, distance * progress / length); + add_v3_v3v3(stk->points[i].p, stk->points[i].p, ray_normal); progress += delta ; } @@ -1037,7 +1037,7 @@ void sk_projectDrawPoint(bContext *C, float vec[3], SK_Stroke *stk, SK_DrawData /* method taken from editview.c - mouse_cursor() */ project_short_noclip(ar, fp, cval); window_to_3d_delta(ar, dvec, cval[0] - dd->mval[0], cval[1] - dd->mval[1]); - VecSubf(vec, fp, dvec); + sub_v3_v3v3(vec, fp, dvec); } int sk_getStrokeDrawPoint(bContext *C, SK_Point *pt, SK_Sketch *sketch, SK_Stroke *stk, SK_DrawData *dd) @@ -1132,9 +1132,9 @@ int sk_getStrokeSnapPoint(bContext *C, SK_Point *pt, SK_Sketch *sketch, SK_Strok { p2->flag = 1; - VecAddf(vec, p1->p, p2->p); - VecMulf(vec, 0.5f); - new_size = VecLenf(p1->p, p2->p); + add_v3_v3v3(vec, p1->p, p2->p); + mul_v3_fl(vec, 0.5f); + new_size = len_v3v3(p1->p, p2->p); } else { @@ -1149,7 +1149,7 @@ int sk_getStrokeSnapPoint(bContext *C, SK_Point *pt, SK_Sketch *sketch, SK_Strok break; } - new_dist = VecLenf(last_p, vec); + new_dist = len_v3v3(last_p, vec); if (new_dist < dist) { @@ -1248,7 +1248,7 @@ int sk_addStrokeSnapPoint(bContext *C, SK_Sketch *sketch, SK_Stroke *stk, SK_Dra length = 0; for (i = stk->nb_points - 2; i > 0; i--) { - length += VecLenf(stk->points[i].p, stk->points[i + 1].p); + length += len_v3v3(stk->points[i].p, stk->points[i + 1].p); total++; if (stk->points[i].mode == PT_SNAP || stk->points[i].type == PT_EXACT) { @@ -1494,10 +1494,10 @@ void sk_convertStroke(bContext *C, SK_Stroke *stk) head = NULL; - Mat4Invert(invmat, obedit->obmat); + invert_m4_m4(invmat, obedit->obmat); - Mat3CpyMat4(tmat, obedit->obmat); - Mat3Transp(tmat); + copy_m3_m4(tmat, obedit->obmat); + transpose_m3(tmat); for (i = 0; i < stk->nb_points; i++) { @@ -1543,8 +1543,8 @@ void sk_convertStroke(bContext *C, SK_Stroke *stk) VECCOPY(bone->head, head->p); VECCOPY(bone->tail, pt->p); - Mat4MulVecfl(invmat, bone->head); - Mat4MulVecfl(invmat, bone->tail); + mul_m4_v3(invmat, bone->head); + mul_m4_v3(invmat, bone->tail); setBoneRollFromNormal(bone, head->no, invmat, tmat); } @@ -1624,7 +1624,7 @@ int sk_getSelfIntersections(bContext *C, ListBase *list, SK_Stroke *gesture) project_float(ar, gesture->points[g_i].p, g_p1); project_float(ar, gesture->points[g_i + 1].p, g_p2); - if (LineIntersectLineStrict(s_p1, s_p2, g_p1, g_p2, vi, &lambda)) + if (isect_line_line_strict_v3(s_p1, s_p2, g_p1, g_p2, vi, &lambda)) { SK_Intersection *isect = MEM_callocN(sizeof(SK_Intersection), "Intersection"); @@ -1633,9 +1633,9 @@ int sk_getSelfIntersections(bContext *C, ListBase *list, SK_Stroke *gesture) isect->after = s_i + 1; isect->stroke = gesture; - VecSubf(isect->p, gesture->points[s_i + 1].p, gesture->points[s_i].p); - VecMulf(isect->p, lambda); - VecAddf(isect->p, isect->p, gesture->points[s_i].p); + sub_v3_v3v3(isect->p, gesture->points[s_i + 1].p, gesture->points[s_i].p); + mul_v3_fl(isect->p, lambda); + add_v3_v3v3(isect->p, isect->p, gesture->points[s_i].p); BLI_addtail(list, isect); @@ -1711,7 +1711,7 @@ int sk_getIntersections(bContext *C, ListBase *list, SK_Sketch *sketch, SK_Strok project_float(ar, gesture->points[g_i].p, g_p1); project_float(ar, gesture->points[g_i + 1].p, g_p2); - if (LineIntersectLineStrict(s_p1, s_p2, g_p1, g_p2, vi, &lambda)) + if (isect_line_line_strict_v3(s_p1, s_p2, g_p1, g_p2, vi, &lambda)) { SK_Intersection *isect = MEM_callocN(sizeof(SK_Intersection), "Intersection"); float ray_start[3], ray_end[3]; @@ -1727,7 +1727,7 @@ int sk_getIntersections(bContext *C, ListBase *list, SK_Sketch *sketch, SK_Strok mval[1] = vi[1]; viewline(ar, v3d, mval, ray_start, ray_end); - LineIntersectLine( stk->points[s_i].p, + isect_line_line_v3( stk->points[s_i].p, stk->points[s_i + 1].p, ray_start, ray_end, @@ -1768,7 +1768,7 @@ int sk_getSegments(SK_Stroke *segments, SK_Stroke *gesture) float n[3]; /* Calculate normal */ - VecSubf(n, gesture->points[i].p, vec); + sub_v3_v3v3(n, gesture->points[i].p, vec); if (calcArcCorrelation(iter, j, i, vec, n) < CORRELATION_THRESHOLD) { @@ -1818,10 +1818,10 @@ int sk_detectTrimGesture(bContext *C, SK_Gesture *gest, SK_Sketch *sketch) float s1[3], s2[3]; float angle; - VecSubf(s1, gest->segments->points[1].p, gest->segments->points[0].p); - VecSubf(s2, gest->segments->points[2].p, gest->segments->points[1].p); + sub_v3_v3v3(s1, gest->segments->points[1].p, gest->segments->points[0].p); + sub_v3_v3v3(s2, gest->segments->points[2].p, gest->segments->points[1].p); - angle = RAD2DEG(VecAngle2(s1, s2)); + angle = RAD2DEG(angle_v2v2(s1, s2)); if (angle > 60 && angle < 120) { @@ -1837,7 +1837,7 @@ void sk_applyTrimGesture(bContext *C, SK_Gesture *gest, SK_Sketch *sketch) SK_Intersection *isect; float trim_dir[3]; - VecSubf(trim_dir, gest->segments->points[2].p, gest->segments->points[1].p); + sub_v3_v3v3(trim_dir, gest->segments->points[2].p, gest->segments->points[1].p); for (isect = gest->intersections.first; isect; isect = isect->next) { @@ -1849,10 +1849,10 @@ void sk_applyTrimGesture(bContext *C, SK_Gesture *gest, SK_Sketch *sketch) VECCOPY(pt.p, isect->p); VECCOPY(pt.no, isect->stroke->points[isect->before].no); - VecSubf(stroke_dir, isect->stroke->points[isect->after].p, isect->stroke->points[isect->before].p); + sub_v3_v3v3(stroke_dir, isect->stroke->points[isect->after].p, isect->stroke->points[isect->before].p); /* same direction, trim end */ - if (Inpf(stroke_dir, trim_dir) > 0) + if (dot_v3v3(stroke_dir, trim_dir) > 0) { sk_replaceStrokePoint(isect->stroke, &pt, isect->after); sk_trimStroke(isect->stroke, 0, isect->after); @@ -1936,10 +1936,10 @@ int sk_detectDeleteGesture(bContext *C, SK_Gesture *gest, SK_Sketch *sketch) float s1[3], s2[3]; float angle; - VecSubf(s1, gest->segments->points[1].p, gest->segments->points[0].p); - VecSubf(s2, gest->segments->points[2].p, gest->segments->points[1].p); + sub_v3_v3v3(s1, gest->segments->points[1].p, gest->segments->points[0].p); + sub_v3_v3v3(s2, gest->segments->points[2].p, gest->segments->points[1].p); - angle = RAD2DEG(VecAngle2(s1, s2)); + angle = RAD2DEG(angle_v2v2(s1, s2)); if (angle > 120) { @@ -2062,16 +2062,16 @@ int sk_detectReverseGesture(bContext *C, SK_Gesture *gest, SK_Sketch *sketch) if (isect->gesture_index < isect->next->gesture_index) { - VecSubf(start_v, isect->p, gest->stk->points[0].p); - VecSubf(end_v, sk_lastStrokePoint(gest->stk)->p, isect->next->p); + sub_v3_v3v3(start_v, isect->p, gest->stk->points[0].p); + sub_v3_v3v3(end_v, sk_lastStrokePoint(gest->stk)->p, isect->next->p); } else { - VecSubf(start_v, isect->next->p, gest->stk->points[0].p); - VecSubf(end_v, sk_lastStrokePoint(gest->stk)->p, isect->p); + sub_v3_v3v3(start_v, isect->next->p, gest->stk->points[0].p); + sub_v3_v3v3(end_v, sk_lastStrokePoint(gest->stk)->p, isect->p); } - angle = RAD2DEG(VecAngle2(start_v, end_v)); + angle = RAD2DEG(angle_v2v2(start_v, end_v)); if (angle > 120) { diff --git a/source/blender/editors/armature/meshlaplacian.c b/source/blender/editors/armature/meshlaplacian.c index 82843a49851..b9019410348 100644 --- a/source/blender/editors/armature/meshlaplacian.c +++ b/source/blender/editors/armature/meshlaplacian.c @@ -40,7 +40,7 @@ #include "DNA_modifier_types.h" #include "DNA_scene_types.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_edgehash.h" #include "BLI_memarena.h" @@ -69,7 +69,7 @@ static void waitcursor(int val) {} static void progress_bar() {} static void start_progress_bar() {} static void end_progress_bar() {} -static void error() {} +static void error(char *str) { printf("error: %s\n", str); } /* ************* XXX *************** */ @@ -151,16 +151,16 @@ static float cotan_weight(float *v1, float *v2, float *v3) { float a[3], b[3], c[3], clen; - VecSubf(a, v2, v1); - VecSubf(b, v3, v1); - Crossf(c, a, b); + sub_v3_v3v3(a, v2, v1); + sub_v3_v3v3(b, v3, v1); + cross_v3_v3v3(c, a, b); - clen = VecLength(c); + clen = len_v3(c); if (clen == 0.0f) return 0.0f; - return Inpf(a, b)/clen; + return dot_v3v3(a, b)/clen; } static void laplacian_triangle_area(LaplacianSystem *sys, int i1, int i2, int i3) @@ -177,21 +177,21 @@ static void laplacian_triangle_area(LaplacianSystem *sys, int i1, int i2, int i3 t2= cotan_weight(v2, v3, v1); t3= cotan_weight(v3, v1, v2); - if(RAD2DEG(VecAngle3(v2, v1, v3)) > 90) obtuse= 1; - else if(RAD2DEG(VecAngle3(v1, v2, v3)) > 90) obtuse= 2; - else if(RAD2DEG(VecAngle3(v1, v3, v2)) > 90) obtuse= 3; + if(RAD2DEG(angle_v3v3v3(v2, v1, v3)) > 90) obtuse= 1; + else if(RAD2DEG(angle_v3v3v3(v1, v2, v3)) > 90) obtuse= 2; + else if(RAD2DEG(angle_v3v3v3(v1, v3, v2)) > 90) obtuse= 3; if (obtuse > 0) { - area= AreaT3Dfl(v1, v2, v3); + area= area_tri_v3(v1, v2, v3); varea[i1] += (obtuse == 1)? area: area*0.5; varea[i2] += (obtuse == 2)? area: area*0.5; varea[i3] += (obtuse == 3)? area: area*0.5; } else { - len1= VecLenf(v2, v3); - len2= VecLenf(v1, v3); - len3= VecLenf(v1, v2); + len1= len_v3v3(v2, v3); + len2= len_v3v3(v1, v3); + len3= len_v3v3(v1, v2); t1 *= len1*len1; t2 *= len2*len2; @@ -446,7 +446,7 @@ static int heat_ray_bone_visible(LaplacianSystem *sys, int vertex, int bone) VECCOPY(isec.start, sys->heat.verts[vertex]); - PclosestVL3Dfl(end, isec.start, sys->heat.root[bone], sys->heat.tip[bone]); + closest_to_line_segment_v3(end, isec.start, sys->heat.root[bone], sys->heat.tip[bone]); VECSUB(isec.vec, end, isec.start); isec.labda = 1.0f - 1e-5; @@ -462,11 +462,11 @@ static float heat_bone_distance(LaplacianSystem *sys, int vertex, int bone) float closest[3], d[3], dist, cosine; /* compute euclidian distance */ - PclosestVL3Dfl(closest, sys->heat.verts[vertex], + closest_to_line_segment_v3(closest, sys->heat.verts[vertex], sys->heat.root[bone], sys->heat.tip[bone]); - VecSubf(d, sys->heat.verts[vertex], closest); - dist= Normalize(d); + sub_v3_v3v3(d, sys->heat.verts[vertex], closest); + dist= normalize_v3(d); /* if the vertex normal does not point along the bone, increase distance */ cosine= INPR(d, sys->heat.vnors[vertex]); @@ -536,15 +536,15 @@ void heat_calc_vnormals(LaplacianSystem *sys) v2= (*face)[1]; v3= (*face)[2]; - CalcNormFloat(sys->verts[v1], sys->verts[v2], sys->verts[v3], fnor); + normal_tri_v3( fnor,sys->verts[v1], sys->verts[v2], sys->verts[v3]); - VecAddf(sys->heat.vnors[v1], sys->heat.vnors[v1], fnor); - VecAddf(sys->heat.vnors[v2], sys->heat.vnors[v2], fnor); - VecAddf(sys->heat.vnors[v3], sys->heat.vnors[v3], fnor); + add_v3_v3v3(sys->heat.vnors[v1], sys->heat.vnors[v1], fnor); + add_v3_v3v3(sys->heat.vnors[v2], sys->heat.vnors[v2], fnor); + add_v3_v3v3(sys->heat.vnors[v3], sys->heat.vnors[v3], fnor); } for(a=0; a<sys->totvert; a++) - Normalize(sys->heat.vnors[a]); + normalize_v3(sys->heat.vnors[a]); } static void heat_laplacian_create(LaplacianSystem *sys) @@ -746,8 +746,8 @@ static void rigid_add_half_edge_to_R(LaplacianSystem *sys, EditVert *v1, EditVer float e[3], e_[3]; int i; - VecSubf(e, sys->rigid.origco[v1->tmp.l], sys->rigid.origco[v2->tmp.l]); - VecSubf(e_, v1->co, v2->co); + sub_v3_v3v3(e, sys->rigid.origco[v1->tmp.l], sys->rigid.origco[v2->tmp.l]); + sub_v3_v3v3(e_, v1->co, v2->co); /* formula (5) */ for (i=0; i<3; i++) { @@ -767,9 +767,9 @@ static void rigid_orthogonalize_R(float R[][3]) { HMatrix M, Q, S; - Mat4CpyMat3(M, R); + copy_m4_m3(M, R); polar_decomp(M, Q, S); - Mat3CpyMat4(R, Q); + copy_m3_m4(R, Q); } static void rigid_add_half_edge_to_rhs(LaplacianSystem *sys, EditVert *v1, EditVert *v2, float w) @@ -780,15 +780,15 @@ static void rigid_add_half_edge_to_rhs(LaplacianSystem *sys, EditVert *v1, EditV if (sys->vpinned[v1->tmp.l]) return; - Mat3AddMat3(Rsum, sys->rigid.R[v1->tmp.l], sys->rigid.R[v2->tmp.l]); - Mat3Transp(Rsum); + add_m3_m3m3(Rsum, sys->rigid.R[v1->tmp.l], sys->rigid.R[v2->tmp.l]); + transpose_m3(Rsum); - VecSubf(rhs, sys->rigid.origco[v1->tmp.l], sys->rigid.origco[v2->tmp.l]); - Mat3MulVecfl(Rsum, rhs); - VecMulf(rhs, 0.5f); - VecMulf(rhs, w); + sub_v3_v3v3(rhs, sys->rigid.origco[v1->tmp.l], sys->rigid.origco[v2->tmp.l]); + mul_m3_v3(Rsum, rhs); + mul_v3_fl(rhs, 0.5f); + mul_v3_fl(rhs, w); - VecAddf(sys->rigid.rhs[v1->tmp.l], sys->rigid.rhs[v1->tmp.l], rhs); + add_v3_v3v3(sys->rigid.rhs[v1->tmp.l], sys->rigid.rhs[v1->tmp.l], rhs); } static void rigid_add_edge_to_rhs(LaplacianSystem *sys, EditVert *v1, EditVert *v2, float w) @@ -916,7 +916,7 @@ void rigid_deform_begin(EditMesh *em) sys->rigid.origco = MEM_callocN(sizeof(float)*3*totvert, "RigidDeformCo"); for(a=0, eve=em->verts.first; eve; eve=eve->next, a++) - VecCopyf(sys->rigid.origco[a], eve->co); + copy_v3_v3(sys->rigid.origco[a], eve->co); sys->areaweights= 0; sys->storeweights= 1; @@ -940,7 +940,7 @@ void rigid_deform_end(int cancel) if(cancel) for(a=0, eve=em->verts.first; eve; eve=eve->next, a++) if(!eve->pinned) - VecCopyf(eve->co, sys->rigid.origco[a]); + copy_v3_v3(eve->co, sys->rigid.origco[a]); if(sys->rigid.R) MEM_freeN(sys->rigid.R); if(sys->rigid.rhs) MEM_freeN(sys->rigid.rhs); @@ -1034,7 +1034,7 @@ static int meshdeform_tri_intersect(float orig[3], float end[3], float vert0[3], VECSUB(edge2, vert2, vert0); /* begin calculating determinant - also used to calculate U parameter */ - Crossf(pvec, dir, edge2); + cross_v3_v3v3(pvec, dir, edge2); /* if determinant is near zero, ray lies in plane of triangle */ det = INPR(edge1, pvec); @@ -1052,7 +1052,7 @@ static int meshdeform_tri_intersect(float orig[3], float end[3], float vert0[3], return 0; /* prepare to test V parameter */ - Crossf(qvec, tvec, edge1); + cross_v3_v3v3(qvec, tvec, edge1); /* calculate V parameter and test bounds */ v = INPR(dir, qvec) * inv_det; @@ -1158,20 +1158,20 @@ static int meshdeform_intersect(MeshDeformBind *mdb, Isect *isec) hit = meshdeform_tri_intersect(isec->start, end, face[0], face[1], face[2], co, uvw); if(hit) { - CalcNormFloat(face[0], face[1], face[2], nor); + normal_tri_v3( nor,face[0], face[1], face[2]); } else { hit= meshdeform_tri_intersect(isec->start, end, face[0], face[2], face[3], co, uvw); - CalcNormFloat(face[0], face[2], face[3], nor); + normal_tri_v3( nor,face[0], face[2], face[3]); } } else { hit= meshdeform_tri_intersect(isec->start, end, face[0], face[1], face[2], co, uvw); - CalcNormFloat(face[0], face[1], face[2], nor); + normal_tri_v3( nor,face[0], face[1], face[2]); } if(hit) { - len= VecLenf(isec->start, co)/VecLenf(isec->start, end); + len= len_v3v3(isec->start, co)/len_v3v3(isec->start, end); if(len < isec->labda) { isec->labda= len; isec->hit.face = mface; @@ -1219,7 +1219,7 @@ static MDefBoundIsect *meshdeform_ray_tree_intersect(MeshDeformBind *mdb, float isect->co[1]= co1[1] + isec.vec[1]*len; isect->co[2]= co1[2] + isec.vec[2]*len; - isect->len= VecLenf(co1, isect->co); + isect->len= len_v3v3(co1, isect->co); if(isect->len < MESHDEFORM_LEN_THRESHOLD) isect->len= MESHDEFORM_LEN_THRESHOLD; @@ -1237,7 +1237,7 @@ static MDefBoundIsect *meshdeform_ray_tree_intersect(MeshDeformBind *mdb, float VECCOPY(vert[1], cagecos[mface->v2]); VECCOPY(vert[2], cagecos[mface->v3]); if(mface->v4) VECCOPY(vert[3], cagecos[mface->v4]); - MeanValueWeights(vert, isect->nvert, isect->co, isect->uvw); + interp_weights_poly_v3( isect->uvw,vert, isect->nvert, isect->co); return isect; } @@ -1260,7 +1260,7 @@ static int meshdeform_inside_cage(MeshDeformBind *mdb, float *co) VECCOPY(start, co); VECSUB(dir, outside, start); - Normalize(dir); + normalize_v3(dir); isect = meshdeform_ray_tree_intersect(mdb, start, outside); if(isect && !isect->facing) @@ -1650,7 +1650,7 @@ static void meshdeform_matrix_solve(MeshDeformBind *mdb) for(b=0; b<mdb->totvert; b++) { if(mdb->inside[b]) { VECCOPY(vec, mdb->vertexcos[b]); - Mat4MulVecfl(mdb->cagemat, vec); + mul_m4_v3(mdb->cagemat, vec); gridvec[0]= (vec[0] - mdb->min[0] - mdb->halfwidth[0])/mdb->width[0]; gridvec[1]= (vec[1] - mdb->min[1] - mdb->halfwidth[1])/mdb->width[1]; gridvec[2]= (vec[2] - mdb->min[2] - mdb->halfwidth[2])/mdb->width[2]; @@ -1698,7 +1698,7 @@ static void meshdeform_matrix_solve(MeshDeformBind *mdb) nlDeleteContext(context); } -void harmonic_coordinates_bind(Scene *scene, MeshDeformModifierData *mmd, float (*vertexcos)[3], int totvert, float cagemat[][4]) +void harmonic_coordinates_bind(Scene *scene, MeshDeformModifierData *mmd, float *vertexcos, int totvert, float cagemat[][4]) { MeshDeformBind mdb; MDefBindInfluence *inf; @@ -1714,13 +1714,13 @@ void harmonic_coordinates_bind(Scene *scene, MeshDeformModifierData *mmd, float memset(&mdb, 0, sizeof(MeshDeformBind)); /* get mesh and cage mesh */ - mdb.vertexcos= vertexcos; + mdb.vertexcos= (float(*)[3])vertexcos; mdb.totvert= totvert; mdb.cagedm= mesh_create_derived_no_deform(scene, mmd->object, NULL, CD_MASK_BAREMESH); mdb.totcagevert= mdb.cagedm->getNumVerts(mdb.cagedm); mdb.cagecos= MEM_callocN(sizeof(*mdb.cagecos)*mdb.totcagevert, "MeshDeformBindCos"); - Mat4CpyMat4(mdb.cagemat, cagemat); + copy_m4_m4(mdb.cagemat, cagemat); mvert= mdb.cagedm->getVertArray(mdb.cagedm); for(a=0; a<mdb.totcagevert; a++) @@ -1781,7 +1781,7 @@ void harmonic_coordinates_bind(Scene *scene, MeshDeformModifierData *mmd, float totinside= 0; for(a=0; a<mdb.totvert; a++) { VECCOPY(vec, mdb.vertexcos[a]); - Mat4MulVecfl(mdb.cagemat, vec); + mul_m4_v3(mdb.cagemat, vec); mdb.inside[a]= meshdeform_inside_cage(&mdb, vec); if(mdb.inside[a]) totinside++; @@ -1821,7 +1821,7 @@ void harmonic_coordinates_bind(Scene *scene, MeshDeformModifierData *mmd, float mmd->bindcos= (float*)mdb.cagecos; mmd->totvert= mdb.totvert; mmd->totcagevert= mdb.totcagevert; - Mat4CpyMat4(mmd->bindmat, mmd->object->obmat); + copy_m4_m4(mmd->bindmat, mmd->object->obmat); if(mmd->flag & MOD_MDEF_DYNAMIC_BIND) { mmd->totinfluence= 0; @@ -1868,7 +1868,7 @@ void harmonic_coordinates_bind(Scene *scene, MeshDeformModifierData *mmd, float /* transform bindcos to world space */ for(a=0; a<mdb.totcagevert; a++) - Mat4MulVecfl(mmd->object->obmat, mmd->bindcos+a*3); + mul_m4_v3(mmd->object->obmat, mmd->bindcos+a*3); /* free */ mdb.cagedm->release(mdb.cagedm); diff --git a/source/blender/editors/armature/meshlaplacian.h b/source/blender/editors/armature/meshlaplacian.h index 00c0aefaec7..1ee01561cd4 100644 --- a/source/blender/editors/armature/meshlaplacian.h +++ b/source/blender/editors/armature/meshlaplacian.h @@ -79,7 +79,7 @@ void rigid_deform_end(int cancel); /* Harmonic Coordinates */ void harmonic_coordinates_bind(struct Scene *scene, struct MeshDeformModifierData *mmd, - float (*vertexcos)[3], int totvert, float cagemat[][4]); + float *vertexcos, int totvert, float cagemat[][4]); #endif diff --git a/source/blender/editors/armature/poseSlide.c b/source/blender/editors/armature/poseSlide.c index 1e0df79d0e6..e5d334e4d06 100644 --- a/source/blender/editors/armature/poseSlide.c +++ b/source/blender/editors/armature/poseSlide.c @@ -34,7 +34,7 @@ #include "MEM_guardedalloc.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_dynstr.h" #include "BLI_dlrbTree.h" @@ -461,7 +461,7 @@ static void pose_slide_apply_quat (tPoseSlideOp *pso, tPChanFCurveLink *pfl) /* perform blending */ if (pso->mode == POSESLIDE_BREAKDOWN) { /* just perform the interpol between quat_prev and quat_next using pso->percentage as a guide */ - QuatInterpol(pchan->quat, quat_prev, quat_next, pso->percentage); + interp_qt_qtqt(pchan->quat, quat_prev, quat_next, pso->percentage); } else { float quat_interp[4], quat_orig[4]; @@ -470,16 +470,16 @@ static void pose_slide_apply_quat (tPoseSlideOp *pso, tPChanFCurveLink *pfl) /* perform this blending several times until a satisfactory result is reached */ while (iters-- > 0) { /* calculate the interpolation between the endpoints */ - QuatInterpol(quat_interp, quat_prev, quat_next, (cframe-pso->prevFrame) / (pso->nextFrame-pso->prevFrame) ); + interp_qt_qtqt(quat_interp, quat_prev, quat_next, (cframe-pso->prevFrame) / (pso->nextFrame-pso->prevFrame) ); /* make a copy of the original rotation */ QUATCOPY(quat_orig, pchan->quat); /* tricky interpolations - mode-dependent blending between original and new */ if (pso->mode == POSESLIDE_RELAX) // xxx this was the original code, so should work fine - QuatInterpol(pchan->quat, quat_orig, quat_interp, 1.0f/6.0f); + interp_qt_qtqt(pchan->quat, quat_orig, quat_interp, 1.0f/6.0f); else // I'm just guessing here... - QuatInterpol(pchan->quat, quat_orig, quat_interp, 6.0f/5.0f); + interp_qt_qtqt(pchan->quat, quat_orig, quat_interp, 6.0f/5.0f); } } } diff --git a/source/blender/editors/armature/poselib.c b/source/blender/editors/armature/poselib.c index f67c94eebc3..0837e9cb48a 100644 --- a/source/blender/editors/armature/poselib.c +++ b/source/blender/editors/armature/poselib.c @@ -34,7 +34,7 @@ #include "MEM_guardedalloc.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_dynstr.h" #include "BLI_dlrbTree.h" @@ -382,7 +382,7 @@ static int poselib_add_exec (bContext *C, wmOperator *op) for (pchan= pose->chanbase.first; pchan; pchan= pchan->next) { /* check if available */ if ((pchan->bone) && (arm->layer & pchan->bone->layer)) { - if (pchan->bone->flag & (BONE_SELECTED|BONE_ACTIVE)) { + if (pchan->bone->flag & BONE_SELECTED || pchan->bone==arm->act_bone) { /* init cks for this PoseChannel, then use the relative KeyingSets to keyframe it */ cks.pchan= pchan; @@ -762,7 +762,7 @@ static void poselib_apply_pose (tPoseLib_PreviewData *pld) } else if (pchan->bone) { /* only ok if bone is visible and selected */ - if ( (pchan->bone->flag & (BONE_SELECTED|BONE_ACTIVE)) && + if ( (pchan->bone->flag & BONE_SELECTED || pchan->bone == arm->act_bone) && (pchan->bone->flag & BONE_HIDDEN_P)==0 && (pchan->bone->layer & arm->layer) ) ok = 1; diff --git a/source/blender/editors/armature/poseobject.c b/source/blender/editors/armature/poseobject.c index 696fa65b33a..18750d96f86 100644 --- a/source/blender/editors/armature/poseobject.c +++ b/source/blender/editors/armature/poseobject.c @@ -33,7 +33,7 @@ #include "MEM_guardedalloc.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_dynstr.h" @@ -158,12 +158,12 @@ static short pose_has_protected_selected(Object *ob, short only_selected, short if (ob->proxy) { bPoseChannel *pchan; bArmature *arm= ob->data; - + for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { if (pchan->bone && (pchan->bone->layer & arm->layer)) { if (pchan->bone->layer & arm->layer_protected) { - if (only_selected && (pchan->bone->flag & BONE_ACTIVE)); - else if (pchan->bone->flag & (BONE_ACTIVE|BONE_SELECTED)) + if (only_selected && (pchan->bone == arm->act_bone)); + else if (pchan->bone->flag & BONE_SELECTED || pchan->bone == arm->act_bone) break; } } @@ -279,7 +279,7 @@ void ED_pose_recalculate_paths(bContext *C, Scene *scene, Object *ob) VECCOPY(fp, pchan->pose_tail); } - Mat4MulVecfl(ob->obmat, fp); + mul_m4_v3(ob->obmat, fp); } } } @@ -405,7 +405,7 @@ static int pose_calculate_paths_exec (bContext *C, wmOperator *op) VECCOPY(fp, pchan->pose_tail); } - Mat4MulVecfl(ob->obmat, fp); + mul_m4_v3(ob->obmat, fp); } } } @@ -531,7 +531,7 @@ void pose_select_constraint_target(Scene *scene) for(pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { if (arm->layer & pchan->bone->layer) { - if (pchan->bone->flag & (BONE_ACTIVE|BONE_SELECTED)) { + if (pchan->bone->flag & BONE_SELECTED || pchan->bone == arm->act_bone) { for (con= pchan->constraints.first; con; con= con->next) { bConstraintTypeInfo *cti= constraint_get_typeinfo(con); ListBase targets = {NULL, NULL}; @@ -570,7 +570,7 @@ static int pose_select_constraint_target_exec(bContext *C, wmOperator *op) for(pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { if (arm->layer & pchan->bone->layer) { - if (pchan->bone->flag & (BONE_ACTIVE|BONE_SELECTED)) { + if (pchan->bone->flag & BONE_SELECTED || pchan->bone == arm->act_bone) { for (con= pchan->constraints.first; con; con= con->next) { bConstraintTypeInfo *cti= constraint_get_typeinfo(con); ListBase targets = {NULL, NULL}; @@ -635,7 +635,7 @@ static int pose_select_hierarchy_exec(bContext *C, wmOperator *op) curbone= pchan->bone; if ((arm->layer & curbone->layer) && (curbone->flag & BONE_UNSELECTABLE)==0) { - if (curbone->flag & (BONE_ACTIVE)) { + if (curbone == arm->act_bone) { if (direction == BONE_SELECT_PARENT) { if (pchan->parent == NULL) continue; @@ -644,8 +644,8 @@ static int pose_select_hierarchy_exec(bContext *C, wmOperator *op) if ((arm->layer & pabone->layer) && !(pabone->flag & BONE_HIDDEN_P)) { if (!add_to_sel) curbone->flag &= ~BONE_SELECTED; - curbone->flag &= ~BONE_ACTIVE; - pabone->flag |= (BONE_ACTIVE|BONE_SELECTED); + pabone->flag |= BONE_SELECTED; + arm->act_bone= pabone; found= 1; break; @@ -658,8 +658,8 @@ static int pose_select_hierarchy_exec(bContext *C, wmOperator *op) if ((arm->layer & chbone->layer) && !(chbone->flag & BONE_HIDDEN_P)) { if (!add_to_sel) curbone->flag &= ~BONE_SELECTED; - curbone->flag &= ~BONE_ACTIVE; - chbone->flag |= (BONE_ACTIVE|BONE_SELECTED); + chbone->flag |= BONE_SELECTED; + arm->act_bone= chbone; found= 1; break; @@ -717,11 +717,7 @@ void pose_copy_menu(Scene *scene) if (ELEM(NULL, ob, ob->pose)) return; if ((ob==obedit) || (ob->mode & OB_MODE_POSE)==0) return; - /* find active */ - for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { - if (pchan->bone->flag & BONE_ACTIVE) - break; - } + pchan= get_active_posechannel(ob); if (pchan==NULL) return; pchanact= pchan; @@ -818,13 +814,13 @@ void pose_copy_menu(Scene *scene) float tmp_quat[4]; /* need to convert to quat first (in temp var)... */ - Mat4ToQuat(delta_mat, tmp_quat); - QuatToAxisAngle(tmp_quat, pchan->rotAxis, &pchan->rotAngle); + mat4_to_quat( tmp_quat,delta_mat); + quat_to_axis_angle( pchan->rotAxis, &pchan->rotAngle,tmp_quat); } else if (pchan->rotmode == ROT_MODE_QUAT) - Mat4ToQuat(delta_mat, pchan->quat); + mat4_to_quat( pchan->quat,delta_mat); else - Mat4ToEulO(delta_mat, pchan->eul, pchan->rotmode); + mat4_to_eulO( pchan->eul, pchan->rotmode,delta_mat); } break; case 11: /* Visual Size */ @@ -832,7 +828,7 @@ void pose_copy_menu(Scene *scene) float delta_mat[4][4], size[4]; armature_mat_pose_to_bone(pchan, pchanact->pose_mat, delta_mat); - Mat4ToSize(delta_mat, size); + mat4_to_size( size,delta_mat); VECCOPY(pchan->size, size); } } @@ -1024,23 +1020,23 @@ static int pose_paste_exec (bContext *C, wmOperator *op) else if (pchan->rotmode > 0) { /* quat/axis-angle to euler */ if (chan->rotmode == ROT_MODE_AXISANGLE) - AxisAngleToEulO(chan->rotAxis, chan->rotAngle, pchan->eul, pchan->rotmode); + axis_angle_to_eulO( pchan->eul, pchan->rotmode,chan->rotAxis, chan->rotAngle); else - QuatToEulO(chan->quat, pchan->eul, pchan->rotmode); + quat_to_eulO( pchan->eul, pchan->rotmode,chan->quat); } else if (pchan->rotmode == ROT_MODE_AXISANGLE) { /* quat/euler to axis angle */ if (chan->rotmode > 0) - EulOToAxisAngle(chan->eul, chan->rotmode, pchan->rotAxis, &pchan->rotAngle); + eulO_to_axis_angle( pchan->rotAxis, &pchan->rotAngle,chan->eul, chan->rotmode); else - QuatToAxisAngle(chan->quat, pchan->rotAxis, &pchan->rotAngle); + quat_to_axis_angle( pchan->rotAxis, &pchan->rotAngle,chan->quat); } else { /* euler/axis-angle to quat */ if (chan->rotmode > 0) - EulOToQuat(chan->eul, chan->rotmode, pchan->quat); + eulO_to_quat( pchan->quat,chan->eul, chan->rotmode); else - AxisAngleToQuat(pchan->quat, chan->rotAxis, pchan->rotAngle); + axis_angle_to_quat(pchan->quat, chan->rotAxis, pchan->rotAngle); } /* paste flipped pose? */ @@ -1055,10 +1051,10 @@ static int pose_paste_exec (bContext *C, wmOperator *op) else if (pchan->rotmode == ROT_MODE_AXISANGLE) { float eul[3]; - AxisAngleToEulO(pchan->rotAxis, pchan->rotAngle, eul, EULER_ORDER_DEFAULT); + axis_angle_to_eulO( eul, EULER_ORDER_DEFAULT,pchan->rotAxis, pchan->rotAngle); eul[1]*= -1; eul[2]*= -1; - EulOToAxisAngle(eul, EULER_ORDER_DEFAULT, pchan->rotAxis, &pchan->rotAngle); + eulO_to_axis_angle( pchan->rotAxis, &pchan->rotAngle,eul, EULER_ORDER_DEFAULT); // experimental method (uncomment to test): #if 0 @@ -1070,10 +1066,10 @@ static int pose_paste_exec (bContext *C, wmOperator *op) else { float eul[3]; - QuatToEul(pchan->quat, eul); + quat_to_eul( eul,pchan->quat); eul[1]*= -1; eul[2]*= -1; - EulToQuat(eul, pchan->quat); + eul_to_quat( pchan->quat,eul); } } @@ -1397,7 +1393,7 @@ static int pose_group_unassign_exec (bContext *C, wmOperator *op) /* ensure that PoseChannel is on visible layer and is not hidden in PoseMode */ // NOTE: sync this view3d_context() in space_view3d.c if ((pchan->bone) && (arm->layer & pchan->bone->layer) && !(pchan->bone->flag & BONE_HIDDEN_P)) { - if (pchan->bone->flag & (BONE_SELECTED|BONE_ACTIVE)) { + if (pchan->bone->flag & BONE_SELECTED || pchan->bone == arm->act_bone) { if (pchan->agrp_index) { pchan->agrp_index= 0; done= 1; @@ -1444,7 +1440,7 @@ static short pose_select_same_group (Object *ob) /* loop in loop... bad and slow! */ for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { if (arm->layer & pchan->bone->layer) { - if (pchan->bone->flag & (BONE_ACTIVE|BONE_SELECTED)) { + if (pchan->bone->flag & BONE_SELECTED || pchan->bone == arm->act_bone) { /* only if group matches (and is not selected or current bone) */ for (chan= ob->pose->chanbase.first; chan; chan= chan->next) { @@ -1476,7 +1472,7 @@ static short pose_select_same_layer (Object *ob) /* figure out what bones are selected */ for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { if (arm->layer & pchan->bone->layer) { - if (pchan->bone->flag & (BONE_ACTIVE|BONE_SELECTED)) { + if (pchan->bone->flag & BONE_SELECTED || pchan->bone == arm->act_bone) { layers |= pchan->bone->layer; } } @@ -1637,25 +1633,21 @@ void pose_activate_flipped_bone(Scene *scene) ob= modifiers_isDeformedByArmature(ob); } if(ob && (ob->mode & OB_MODE_POSE)) { - bPoseChannel *pchan, *pchanf; + bPoseChannel *pchanf; - for(pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { - if(arm->layer & pchan->bone->layer) { - if(pchan->bone->flag & BONE_ACTIVE) - break; - } - } - if(pchan) { + if(arm->act_bone) { char name[32]; - BLI_strncpy(name, pchan->name, 32); + BLI_strncpy(name, arm->act_bone->name, 32); bone_flip_name(name, 1); // 0 = do not strip off number extensions pchanf= get_pose_channel(ob->pose, name); - if(pchanf && pchanf!=pchan) { - pchan->bone->flag &= ~(BONE_SELECTED|BONE_ACTIVE); - pchanf->bone->flag |= (BONE_SELECTED|BONE_ACTIVE); - + if(pchanf && pchanf->bone != arm->act_bone) { + arm->act_bone->flag &= ~BONE_SELECTED; + pchanf->bone->flag |= BONE_SELECTED; + + arm->act_bone= pchanf->bone; + /* in weightpaint we select the associated vertex group too */ if(ob->mode & OB_MODE_WEIGHT_PAINT) { ED_vgroup_select_by_name(OBACT, name); diff --git a/source/blender/editors/armature/reeb.c b/source/blender/editors/armature/reeb.c index 132d9edf8d0..05b0dc267ff 100644 --- a/source/blender/editors/armature/reeb.c +++ b/source/blender/editors/armature/reeb.c @@ -45,7 +45,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_editVert.h" #include "BLI_edgehash.h" #include "BLI_ghash.h" @@ -498,12 +498,12 @@ void repositionNodes(ReebGraph *rg) float p[3]; VECCOPY(p, ((ReebArc*)arc)->buckets[0].p); - VecMulf(p, 1.0f / arc->head->degree); - VecAddf(arc->head->p, arc->head->p, p); + mul_v3_fl(p, 1.0f / arc->head->degree); + add_v3_v3v3(arc->head->p, arc->head->p, p); VECCOPY(p, ((ReebArc*)arc)->buckets[((ReebArc*)arc)->bcount - 1].p); - VecMulf(p, 1.0f / arc->tail->degree); - VecAddf(arc->tail->p, arc->tail->p, p); + mul_v3_fl(p, 1.0f / arc->tail->degree); + add_v3_v3v3(arc->tail->p, arc->tail->p, p); } } } @@ -634,15 +634,15 @@ void verifyMultiResolutionLinks(ReebGraph *rg, int level) void addVertToBucket(EmbedBucket *b, float co[3]) { b->nv++; - VecLerpf(b->p, b->p, co, 1.0f / b->nv); + interp_v3_v3v3(b->p, b->p, co, 1.0f / b->nv); } void removeVertFromBucket(EmbedBucket *b, float co[3]) { - VecMulf(b->p, (float)b->nv); - VecSubf(b->p, b->p, co); + mul_v3_fl(b->p, (float)b->nv); + sub_v3_v3v3(b->p, b->p, co); b->nv--; - VecMulf(b->p, 1.0f / (float)b->nv); + mul_v3_fl(b->p, 1.0f / (float)b->nv); } void mergeBuckets(EmbedBucket *bDst, EmbedBucket *bSrc) @@ -650,7 +650,7 @@ void mergeBuckets(EmbedBucket *bDst, EmbedBucket *bSrc) if (bDst->nv > 0 && bSrc->nv > 0) { bDst->nv += bSrc->nv; - VecLerpf(bDst->p, bDst->p, bSrc->p, (float)bSrc->nv / (float)(bDst->nv)); + interp_v3_v3v3(bDst->p, bDst->p, bSrc->p, (float)bSrc->nv / (float)(bDst->nv)); } else if (bSrc->nv > 0) { @@ -797,7 +797,7 @@ static void interpolateBuckets(ReebArc *arc, float *start_p, float *end_p, int s { EmbedBucket *empty = arc->buckets + j; empty->nv = 1; - VecLerpf(empty->p, start_p, end_p, (float)(j - start_index + 1) / total); + interp_v3_v3v3(empty->p, start_p, end_p, (float)(j - start_index + 1) / total); } } @@ -873,20 +873,20 @@ static void ExtendArcBuckets(ReebArc *arc) previous = iter->p, IT_next(iter) ) { - average_length += VecLenf(previous, iter->p); + average_length += len_v3v3(previous, iter->p); } average_length /= (arc->bcount - 1); first_bucket = arc->buckets; last_bucket = arc->buckets + (arc->bcount - 1); - length = VecLenf(first_bucket->p, arc->head->p); + length = len_v3v3(first_bucket->p, arc->head->p); if (length > 2 * average_length) { padding_head = (int)floor(length / average_length); } - length = VecLenf(last_bucket->p, arc->tail->p); + length = len_v3v3(last_bucket->p, arc->tail->p); if (length > 2 * average_length) { padding_tail = (int)floor(length / average_length); @@ -945,12 +945,12 @@ void calculateArcLength(ReebArc *arc) { vec1 = iter->p; - arc->length += VecLenf(vec0, vec1); + arc->length += len_v3v3(vec0, vec1); vec0 = vec1; } - arc->length += VecLenf(arc->tail->p, vec1); + arc->length += len_v3v3(arc->tail->p, vec1); } void calculateGraphLength(ReebGraph *rg) @@ -982,8 +982,8 @@ void REEB_RadialSymmetry(BNode* root_node, RadialArc* ring, int count) float normal[3]; int j = i + 1; - VecAddf(tangent, ring[i].n, ring[j].n); - Crossf(normal, tangent, axis); + add_v3_v3v3(tangent, ring[i].n, ring[j].n); + cross_v3_v3v3(normal, tangent, axis); node1 = (ReebNode*)BLI_otherNode(ring[i].arc, root_node); node2 = (ReebNode*)BLI_otherNode(ring[j].arc, root_node); @@ -993,7 +993,7 @@ void REEB_RadialSymmetry(BNode* root_node, RadialArc* ring, int count) /* mirror first node and mix with the second */ BLI_mirrorAlongAxis(node1->p, root_node->p, normal); - VecLerpf(node2->p, node2->p, node1->p, 1.0f / (j + 1)); + interp_v3_v3v3(node2->p, node2->p, node1->p, 1.0f / (j + 1)); /* Merge buckets * there shouldn't be any null arcs here, but just to be safe @@ -1030,7 +1030,7 @@ void REEB_RadialSymmetry(BNode* root_node, RadialArc* ring, int count) /* mirror on axis */ BLI_mirrorAlongAxis(bucket1->p, root_node->p, normal); /* add bucket2 in bucket1 */ - VecLerpf(bucket2->p, bucket2->p, bucket1->p, (float)bucket1->nv / (float)(bucket2->nv)); + interp_v3_v3v3(bucket2->p, bucket2->p, bucket1->p, (float)bucket1->nv / (float)(bucket2->nv)); } } } @@ -1044,8 +1044,8 @@ void REEB_RadialSymmetry(BNode* root_node, RadialArc* ring, int count) float normal[3]; int j = i - 1; - VecAddf(tangent, ring[i].n, ring[j].n); - Crossf(normal, tangent, axis); + add_v3_v3v3(tangent, ring[i].n, ring[j].n); + cross_v3_v3v3(normal, tangent, axis); node1 = (ReebNode*)BLI_otherNode(ring[i].arc, root_node); node2 = (ReebNode*)BLI_otherNode(ring[j].arc, root_node); @@ -1111,8 +1111,8 @@ void REEB_AxialSymmetry(BNode* root_node, BNode* node1, BNode* node2, struct BAr BLI_mirrorAlongAxis(p, root_node->p, nor); /* average with node1 */ - VecAddf(node1->p, node1->p, p); - VecMulf(node1->p, 0.5f); + add_v3_v3v3(node1->p, node1->p, p); + mul_v3_fl(node1->p, 0.5f); /* mirror back on node2 */ VECCOPY(node2->p, node1->p); @@ -1153,7 +1153,7 @@ void REEB_AxialSymmetry(BNode* root_node, BNode* node1, BNode* node2, struct BAr /* mirror on axis */ BLI_mirrorAlongAxis(bucket2->p, root_node->p, nor); /* add bucket2 in bucket1 */ - VecLerpf(bucket1->p, bucket1->p, bucket2->p, (float)bucket2->nv / (float)(bucket1->nv)); + interp_v3_v3v3(bucket1->p, bucket1->p, bucket2->p, (float)bucket2->nv / (float)(bucket1->nv)); /* copy and mirror back to bucket2 */ bucket2->nv = bucket1->nv; @@ -1200,8 +1200,8 @@ void postprocessGraph(ReebGraph *rg, char mode) for(index = 1; index < bcount - 1; index++) { - VecLerpf(buckets[index].p, buckets[index].p, buckets[index - 1].p, fac1 / (fac1 + fac2)); - VecLerpf(buckets[index].p, buckets[index].p, buckets[index + 1].p, fac3 / (fac1 + fac2 + fac3)); + interp_v3_v3v3(buckets[index].p, buckets[index].p, buckets[index - 1].p, fac1 / (fac1 + fac2)); + interp_v3_v3v3(buckets[index].p, buckets[index].p, buckets[index + 1].p, fac3 / (fac1 + fac2 + fac3)); } } } @@ -1339,7 +1339,7 @@ int joinSubgraphsEnds(ReebGraph *rg, float threshold, int nb_subgraphs) { if (end_node->subgraph_index != subgraph) { - float distance = VecLenf(start_node->p, end_node->p); + float distance = len_v3v3(start_node->p, end_node->p); if (distance < threshold && distance < min_distance) { @@ -1597,7 +1597,7 @@ void filterNullReebGraph(ReebGraph *rg) blend = (float)newNode->degree / (float)(newNode->degree + removedNode->degree); // blending factors - VecLerpf(newNode->p, removedNode->p, newNode->p, blend); + interp_v3_v3v3(newNode->p, removedNode->p, newNode->p, blend); filterArc(rg, newNode, removedNode, arc, 0); @@ -1808,16 +1808,16 @@ int filterSmartReebGraph(ReebGraph *rg, float threshold) VECCOPY(midpoint, vec1); - distance = VecLenf(midpoint, efa->cent); + distance = len_v3v3(midpoint, efa->cent); if (min_distance == -1 || distance < min_distance) { min_distance = distance; - VecSubf(tangent, vec1, vec0); - Normalize(tangent); + sub_v3_v3v3(tangent, vec1, vec0); + normalize_v3(tangent); - angle = Inpf(tangent, efa->n); + angle = dot_v3v3(tangent, efa->n); } previous = bucket; @@ -1829,7 +1829,7 @@ int filterSmartReebGraph(ReebGraph *rg, float threshold) efa->tmp.fp = saacos(fabs(angle)); #endif #else - VecAddf(avg_vec, avg_vec, efa->n); + add_v3_v3v3(avg_vec, avg_vec, efa->n); #endif } @@ -1837,8 +1837,8 @@ int filterSmartReebGraph(ReebGraph *rg, float threshold) #if 0 avg_angle /= total; #else - VecMulf(avg_vec, 1.0 / total); - avg_angle = Inpf(avg_vec, avg_vec); + mul_v3_fl(avg_vec, 1.0 / total); + avg_angle = dot_v3v3(avg_vec, avg_vec); #endif arc->angle = avg_angle; @@ -2064,8 +2064,8 @@ void REEB_exportGraph(ReebGraph *rg, int count) fprintf(f, "b nv:%i %f %f %f\n", arc->buckets[i].nv, arc->buckets[i].p[0], arc->buckets[i].p[1], arc->buckets[i].p[2]); } - VecAddf(p, arc->tail->p, arc->head->p); - VecMulf(p, 0.5f); + add_v3_v3v3(p, arc->tail->p, arc->head->p); + mul_v3_fl(p, 0.5f); fprintf(f, "angle %0.3f %0.3f %0.3f %0.3f %i\n", p[0], p[1], p[2], arc->angle, BLI_ghash_size(arc->faces)); exportNode(f, "v2", arc->tail); @@ -2501,7 +2501,7 @@ ReebEdge * createArc(ReebGraph *rg, ReebNode *node1, ReebNode *node2) float co[3]; float f = (arc->buckets[i].val - offset) / len; - VecLerpf(co, v1->p, v2->p, f); + interp_v3_v3v3(co, v1->p, v2->p, f); addVertToBucket(&(arc->buckets[i]), co); } #endif @@ -2690,16 +2690,16 @@ static float cotan_weight(float *v1, float *v2, float *v3) { float a[3], b[3], c[3], clen; - VecSubf(a, v2, v1); - VecSubf(b, v3, v1); - Crossf(c, a, b); + sub_v3_v3v3(a, v2, v1); + sub_v3_v3v3(b, v3, v1); + cross_v3_v3v3(c, a, b); - clen = VecLength(c); + clen = len_v3(c); if (clen == 0.0f) return 0.0f; - return Inpf(a, b)/clen; + return dot_v3v3(a, b)/clen; } void addTriangle(EditVert *v1, EditVert *v2, EditVert *v3, int e1, int e2, int e3) @@ -3077,7 +3077,7 @@ int weightFromDistance(EditMesh *em, EdgeIndex *indexed_edges) { if (eed->v1->h == 0 && eed->v2->h == 0) { - eed->tmp.fp = VecLenf(eed->v1->co, eed->v2->co); + eed->tmp.fp = len_v3v3(eed->v1->co, eed->v2->co); } } @@ -3112,7 +3112,7 @@ int weightFromDistance(EditMesh *em, EdgeIndex *indexed_edges) /* vertex is already processed and distance is smaller than current minimum */ if (closest_eve->f1 == 1) { - float distance = VecLenf(closest_eve->co, eve->co); + float distance = len_v3v3(closest_eve->co, eve->co); if (distance < min_distance) { min_distance = distance; @@ -3688,7 +3688,7 @@ void REEB_draw() if (G.scene->toolsettings->skgen_options & SKGEN_DISP_INDEX) { - VecLerpf(vec, arc->head->p, arc->tail->p, 0.5f); + interp_v3_v3v3(vec, arc->head->p, arc->tail->p, 0.5f); s += sprintf(s, "%i (%i-%i-%i) ", i, arc->symmetry_level, arc->symmetry_flag, arc->symmetry_group); if (G.scene->toolsettings->skgen_options & SKGEN_DISP_WEIGHT) diff --git a/source/blender/editors/curve/curve_ops.c b/source/blender/editors/curve/curve_ops.c index 929e3514990..4c5bcb71499 100644 --- a/source/blender/editors/curve/curve_ops.c +++ b/source/blender/editors/curve/curve_ops.c @@ -40,7 +40,7 @@ #include "DNA_view3d_types.h" #include "DNA_windowmanager_types.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BKE_context.h" diff --git a/source/blender/editors/curve/editcurve.c b/source/blender/editors/curve/editcurve.c index a58439051e9..7801168dd83 100644 --- a/source/blender/editors/curve/editcurve.c +++ b/source/blender/editors/curve/editcurve.c @@ -39,7 +39,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_dynstr.h" #include "BLI_rand.h" @@ -525,7 +525,7 @@ static void rotateflagNurb(ListBase *editnurb, short flag, float *cent, float ro bp->vec[0]-=cent[0]; bp->vec[1]-=cent[1]; bp->vec[2]-=cent[2]; - Mat3MulVecfl(rotmat, bp->vec); + mul_m3_v3(rotmat, bp->vec); bp->vec[0]+=cent[0]; bp->vec[1]+=cent[1]; bp->vec[2]+=cent[2]; @@ -549,9 +549,9 @@ static void translateflagNurb(ListBase *editnurb, short flag, float *vec) a= nu->pntsu; bezt= nu->bezt; while(a--) { - if(bezt->f1 & flag) VecAddf(bezt->vec[0], bezt->vec[0], vec); - if(bezt->f2 & flag) VecAddf(bezt->vec[1], bezt->vec[1], vec); - if(bezt->f3 & flag) VecAddf(bezt->vec[2], bezt->vec[2], vec); + if(bezt->f1 & flag) add_v3_v3v3(bezt->vec[0], bezt->vec[0], vec); + if(bezt->f2 & flag) add_v3_v3v3(bezt->vec[1], bezt->vec[1], vec); + if(bezt->f3 & flag) add_v3_v3v3(bezt->vec[2], bezt->vec[2], vec); bezt++; } } @@ -559,7 +559,7 @@ static void translateflagNurb(ListBase *editnurb, short flag, float *vec) a= nu->pntsu*nu->pntsv; bp= nu->bp; while(a--) { - if(bp->f1 & flag) VecAddf(bp->vec, bp->vec, vec); + if(bp->f1 & flag) add_v3_v3v3(bp->vec, bp->vec, vec); bp++; } } @@ -1868,18 +1868,18 @@ static int subdivide_exec(bContext *C, wmOperator *op) memcpy(beztn, bezt, sizeof(BezTriple)); /* midpoint subdividing */ - VecMidf(vec, prevbezt->vec[1], prevbezt->vec[2]); - VecMidf(vec+3, prevbezt->vec[2], bezt->vec[0]); - VecMidf(vec+6, bezt->vec[0], bezt->vec[1]); + mid_v3_v3v3(vec, prevbezt->vec[1], prevbezt->vec[2]); + mid_v3_v3v3(vec+3, prevbezt->vec[2], bezt->vec[0]); + mid_v3_v3v3(vec+6, bezt->vec[0], bezt->vec[1]); - VecMidf(vec+9, vec, vec+3); - VecMidf(vec+12, vec+3, vec+6); + mid_v3_v3v3(vec+9, vec, vec+3); + mid_v3_v3v3(vec+12, vec+3, vec+6); /* change handle of prev beztn */ VECCOPY((beztn-1)->vec[2], vec); /* new point */ VECCOPY(beztn->vec[0], vec+9); - VecMidf(beztn->vec[1], vec+9, vec+12); + mid_v3_v3v3(beztn->vec[1], vec+9, vec+12); VECCOPY(beztn->vec[2], vec+12); /* handle of next bezt */ if(a==0 && (nu->flagu & CU_CYCLIC)) {VECCOPY(beztnew->vec[0], vec+6);} @@ -2662,10 +2662,10 @@ static void make_selection_list_nurb(ListBase *editnurb) bp= nu->bp; a= nu->pntsu; while(a--) { - VecAddf(nus->vec, nus->vec, bp->vec); + add_v3_v3v3(nus->vec, nus->vec, bp->vec); bp++; } - VecMulf(nus->vec, 1.0/(float)nu->pntsu); + mul_v3_fl(nus->vec, 1.0/(float)nu->pntsu); } @@ -2684,13 +2684,13 @@ static void make_selection_list_nurb(ListBase *editnurb) nustest= nbase.first; while(nustest) { - dist= VecLenf(nustest->vec, ((NurbSort *)nsortbase.first)->vec); + dist= len_v3v3(nustest->vec, ((NurbSort *)nsortbase.first)->vec); if(dist<headdist) { headdist= dist; headdo= nustest; } - dist= VecLenf(nustest->vec, ((NurbSort *)nsortbase.last)->vec); + dist= len_v3v3(nustest->vec, ((NurbSort *)nsortbase.last)->vec); if(dist<taildist) { taildist= dist; @@ -2774,7 +2774,7 @@ static void merge_2_nurb(wmOperator *op, ListBase *editnurb, Nurb *nu1, Nurb *nu len1= 0.0; for(v=0; v<nu1->pntsv; v++, bp1+=nu1->pntsu, bp2+=nu2->pntsu) { - len1+= VecLenf(bp1->vec, bp2->vec); + len1+= len_v3v3(bp1->vec, bp2->vec); } bp1= nu1->bp + nu1->pntsu-1; @@ -2782,7 +2782,7 @@ static void merge_2_nurb(wmOperator *op, ListBase *editnurb, Nurb *nu1, Nurb *nu len2= 0.0; for(v=0; v<nu1->pntsv; v++, bp1+=nu1->pntsu, bp2-=nu2->pntsu) { - len2+= VecLenf(bp1->vec, bp2->vec); + len2+= len_v3v3(bp1->vec, bp2->vec); } /* merge */ @@ -3136,13 +3136,13 @@ static int spin_nurb(bContext *C, Scene *scene, Object *obedit, float *dvec, sho float persmat[3][3], persinv[3][3]; short a,ok, changed= 0; - if(mode != 2 && rv3d) Mat3CpyMat4(persmat, rv3d->viewmat); - else Mat3One(persmat); - Mat3Inv(persinv, persmat); + if(mode != 2 && rv3d) copy_m3_m4(persmat, rv3d->viewmat); + else unit_m3(persmat); + invert_m3_m3(persinv, persmat); /* imat and center and size */ - Mat3CpyMat4(bmat, obedit->obmat); - Mat3Inv(imat, bmat); + copy_m3_m4(bmat, obedit->obmat); + invert_m3_m3(imat, bmat); if(v3d) { curs= give_cursor(scene, v3d); @@ -3151,8 +3151,8 @@ static int spin_nurb(bContext *C, Scene *scene, Object *obedit, float *dvec, sho else cent[0]= cent[1]= cent[2]= 0.0f; - VecSubf(cent, cent, obedit->obmat[3]); - Mat3MulVecfl(imat,cent); + sub_v3_v3v3(cent, cent, obedit->obmat[3]); + mul_m3_v3(imat,cent); if(dvec || mode==2 || !rv3d) { n[0]=n[1]= 0.0; @@ -3161,7 +3161,7 @@ static int spin_nurb(bContext *C, Scene *scene, Object *obedit, float *dvec, sho n[0]= rv3d->viewinv[2][0]; n[1]= rv3d->viewinv[2][1]; n[2]= rv3d->viewinv[2][2]; - Normalize(n); + normalize_v3(n); } phi= M_PI/8.0; @@ -3170,27 +3170,27 @@ static int spin_nurb(bContext *C, Scene *scene, Object *obedit, float *dvec, sho q[1]= n[0]*si; q[2]= n[1]*si; q[3]= n[2]*si; - QuatToMat3(q, cmat); - Mat3MulMat3(tmat, cmat, bmat); - Mat3MulMat3(rotmat, imat, tmat); + quat_to_mat3( cmat,q); + mul_m3_m3m3(tmat, cmat, bmat); + mul_m3_m3m3(rotmat, imat, tmat); - Mat3One(scalemat1); + unit_m3(scalemat1); scalemat1[0][0]= sqrt(2.0); scalemat1[1][1]= sqrt(2.0); - Mat3MulMat3(tmat,persmat,bmat); - Mat3MulMat3(cmat,scalemat1,tmat); - Mat3MulMat3(tmat,persinv,cmat); - Mat3MulMat3(scalemat1,imat,tmat); + mul_m3_m3m3(tmat,persmat,bmat); + mul_m3_m3m3(cmat,scalemat1,tmat); + mul_m3_m3m3(tmat,persinv,cmat); + mul_m3_m3m3(scalemat1,imat,tmat); - Mat3One(scalemat2); + unit_m3(scalemat2); scalemat2[0][0]/= sqrt(2.0); scalemat2[1][1]/= sqrt(2.0); - Mat3MulMat3(tmat,persmat,bmat); - Mat3MulMat3(cmat,scalemat2,tmat); - Mat3MulMat3(tmat,persinv,cmat); - Mat3MulMat3(scalemat2,imat,tmat); + mul_m3_m3m3(tmat,persmat,bmat); + mul_m3_m3m3(cmat,scalemat2,tmat); + mul_m3_m3m3(tmat,persinv,cmat); + mul_m3_m3m3(scalemat2,imat,tmat); ok= 1; @@ -3216,7 +3216,7 @@ static int spin_nurb(bContext *C, Scene *scene, Object *obedit, float *dvec, sho } } if(dvec) { - Mat3MulVecfl(bmat,dvec); + mul_m3_v3(bmat,dvec); translateflagNurb(editnurb, 1,dvec); } } @@ -3275,8 +3275,8 @@ static int addvert_Nurb(bContext *C, short mode, float location[3]) BPoint *bp, *newbp = NULL; float mat[3][3],imat[3][3], temp[3]; - Mat3CpyMat4(mat, obedit->obmat); - Mat3Inv(imat,mat); + copy_m3_m4(mat, obedit->obmat); + invert_m3_m3(imat,mat); findselectedNurbvert(editnurb, &nu, &bezt, &bp); if(bezt==0 && bp==0) return OPERATOR_CANCELLED; @@ -3322,11 +3322,11 @@ static int addvert_Nurb(bContext *C, short mode, float location[3]) } else { VECCOPY(newbezt->vec[1], location); - VecSubf(newbezt->vec[1],newbezt->vec[1], obedit->obmat[3]); - Mat3MulVecfl(imat,newbezt->vec[1]); - VecSubf(temp, newbezt->vec[1],temp); - VecAddf(newbezt->vec[0], bezt->vec[0],temp); - VecAddf(newbezt->vec[2], bezt->vec[2],temp); + sub_v3_v3v3(newbezt->vec[1],newbezt->vec[1], obedit->obmat[3]); + mul_m3_v3(imat,newbezt->vec[1]); + sub_v3_v3v3(temp, newbezt->vec[1],temp); + add_v3_v3v3(newbezt->vec[0], bezt->vec[0],temp); + add_v3_v3v3(newbezt->vec[2], bezt->vec[2],temp); calchandlesNurb(nu); } } @@ -3368,8 +3368,8 @@ static int addvert_Nurb(bContext *C, short mode, float location[3]) } else { VECCOPY(newbp->vec, location); - VecSubf(newbp->vec, newbp->vec, obedit->obmat[3]); - Mat3MulVecfl(imat,newbp->vec); + sub_v3_v3v3(newbp->vec, newbp->vec, obedit->obmat[3]); + mul_m3_v3(imat,newbp->vec); newbp->vec[3]= 1.0; } } @@ -4633,7 +4633,7 @@ int join_curve_exec(bContext *C, wmOperator *op) tempbase.first= tempbase.last= 0; /* trasnform all selected curves inverse in obact */ - Mat4Invert(imat, ob->obmat); + invert_m4_m4(imat, ob->obmat); CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) { if(base->object->type==ob->type) { @@ -4643,7 +4643,7 @@ int join_curve_exec(bContext *C, wmOperator *op) if(cu->nurb.first) { /* watch it: switch order here really goes wrong */ - Mat4MulMat4(cmat, base->object->obmat, imat); + mul_m4_m4m4(cmat, base->object->obmat, imat); nu= cu->nurb.first; while(nu) { @@ -4653,16 +4653,16 @@ int join_curve_exec(bContext *C, wmOperator *op) if( (bezt= newnu->bezt) ) { a= newnu->pntsu; while(a--) { - Mat4MulVecfl(cmat, bezt->vec[0]); - Mat4MulVecfl(cmat, bezt->vec[1]); - Mat4MulVecfl(cmat, bezt->vec[2]); + mul_m4_v3(cmat, bezt->vec[0]); + mul_m4_v3(cmat, bezt->vec[1]); + mul_m4_v3(cmat, bezt->vec[2]); bezt++; } } if( (bp= newnu->bp) ) { a= newnu->pntsu*nu->pntsv; while(a--) { - Mat4MulVecfl(cmat, bp->vec); + mul_m4_v3(cmat, bp->vec); bp++; } } @@ -4716,7 +4716,7 @@ Nurb *add_nurbs_primitive(bContext *C, int type, int newname) /* imat and center and size */ if(obedit) { - Mat3CpyMat4(mat, obedit->obmat); + copy_m3_m4(mat, obedit->obmat); if(v3d) { curs= give_cursor(scene, v3d); VECCOPY(cent, curs); @@ -4730,16 +4730,16 @@ Nurb *add_nurbs_primitive(bContext *C, int type, int newname) if(rv3d) { if (!newname && (U.flag & USER_ADD_VIEWALIGNED)) - Mat3CpyMat4(imat, rv3d->viewmat); + copy_m3_m4(imat, rv3d->viewmat); else - Mat3One(imat); + unit_m3(imat); - Mat3MulVecfl(imat, cent); - Mat3MulMat3(cmat, imat, mat); - Mat3Inv(imat, cmat); + mul_m3_v3(imat, cent); + mul_m3_m3m3(cmat, imat, mat); + invert_m3_m3(imat, cmat); } else - Mat3One(imat); + unit_m3(imat); setflagsNurb(editnurb, 0); } @@ -4779,7 +4779,7 @@ Nurb *add_nurbs_primitive(bContext *C, int type, int newname) bezt->vec[0][1]+= -0.5*grid; bezt->vec[2][0]+= -0.5*grid; bezt->vec[2][1]+= 0.5*grid; - for(a=0;a<3;a++) Mat3MulVecfl(imat, bezt->vec[a]); + for(a=0;a<3;a++) mul_m3_v3(imat, bezt->vec[a]); bezt++; bezt->h1= bezt->h2= HD_ALIGN; @@ -4790,7 +4790,7 @@ Nurb *add_nurbs_primitive(bContext *C, int type, int newname) VECCOPY(bezt->vec[a], cent); } bezt->vec[1][0]+= grid; - for(a=0;a<3;a++) Mat3MulVecfl(imat, bezt->vec[a]); + for(a=0;a<3;a++) mul_m3_v3(imat, bezt->vec[a]); calchandlesNurb(nu); } @@ -4821,7 +4821,7 @@ Nurb *add_nurbs_primitive(bContext *C, int type, int newname) bp->vec[0]+= 1.5*grid; bp= nu->bp; - for(a=0;a<4;a++, bp++) Mat3MulVecfl(imat,bp->vec); + for(a=0;a<4;a++, bp++) mul_m3_v3(imat,bp->vec); if(cutype==CU_NURBS) { nu->knotsu= 0; /* makeknots allocates */ @@ -4856,7 +4856,7 @@ Nurb *add_nurbs_primitive(bContext *C, int type, int newname) bp->vec[0]+= 2.0*grid; bp= nu->bp; - for(a=0;a<5;a++, bp++) Mat3MulVecfl(imat,bp->vec); + for(a=0;a<5;a++, bp++) mul_m3_v3(imat,bp->vec); if(cutype==CU_NURBS) { nu->knotsu= 0; /* makeknots allocates */ @@ -4883,7 +4883,7 @@ Nurb *add_nurbs_primitive(bContext *C, int type, int newname) bezt->h1= bezt->h2= HD_AUTO; bezt->f1= bezt->f2= bezt->f3= SELECT; bezt->vec[1][0]+= -grid; - for(a=0;a<3;a++) Mat3MulVecfl(imat,bezt->vec[a]); + for(a=0;a<3;a++) mul_m3_v3(imat,bezt->vec[a]); bezt->radius = bezt->weight = 1.0; bezt++; @@ -4893,7 +4893,7 @@ Nurb *add_nurbs_primitive(bContext *C, int type, int newname) bezt->h1= bezt->h2= HD_AUTO; bezt->f1= bezt->f2= bezt->f3= SELECT; bezt->vec[1][1]+= grid; - for(a=0;a<3;a++) Mat3MulVecfl(imat,bezt->vec[a]); + for(a=0;a<3;a++) mul_m3_v3(imat,bezt->vec[a]); bezt->radius = bezt->weight = 1.0; bezt++; @@ -4903,7 +4903,7 @@ Nurb *add_nurbs_primitive(bContext *C, int type, int newname) bezt->h1= bezt->h2= HD_AUTO; bezt->f1= bezt->f2= bezt->f3= SELECT; bezt->vec[1][0]+= grid; - for(a=0;a<3;a++) Mat3MulVecfl(imat,bezt->vec[a]); + for(a=0;a<3;a++) mul_m3_v3(imat,bezt->vec[a]); bezt->radius = bezt->weight = 1.0; bezt++; @@ -4913,7 +4913,7 @@ Nurb *add_nurbs_primitive(bContext *C, int type, int newname) bezt->h1= bezt->h2= HD_AUTO; bezt->f1= bezt->f2= bezt->f3= SELECT; bezt->vec[1][1]+= -grid; - for(a=0;a<3;a++) Mat3MulVecfl(imat,bezt->vec[a]); + for(a=0;a<3;a++) mul_m3_v3(imat,bezt->vec[a]); bezt->radius = bezt->weight = 1.0; calchandlesNurb(nu); @@ -4940,7 +4940,7 @@ Nurb *add_nurbs_primitive(bContext *C, int type, int newname) } if(a & 1) bp->vec[3]= 0.25*sqrt(2.0); else bp->vec[3]= 1.0; - Mat3MulVecfl(imat,bp->vec); + mul_m3_v3(imat,bp->vec); bp->radius = bp->weight = 1.0; bp++; @@ -4977,7 +4977,7 @@ Nurb *add_nurbs_primitive(bContext *C, int type, int newname) if(a==1 || a==2) if(b==1 || b==2) { bp->vec[2]+= grid; } - Mat3MulVecfl(imat,bp->vec); + mul_m3_v3(imat,bp->vec); bp->vec[3]= 1.0; bp++; } @@ -5000,7 +5000,7 @@ Nurb *add_nurbs_primitive(bContext *C, int type, int newname) BLI_addtail(editnurb, nu); /* temporal for extrude and translate */ vec[0]=vec[1]= 0.0; vec[2]= -grid; - Mat3MulVecfl(imat, vec); + mul_m3_v3(imat, vec); translateflagNurb(editnurb, 1, vec); extrudeflagNurb(editnurb, 1); vec[0]= -2*vec[0]; @@ -5042,7 +5042,7 @@ Nurb *add_nurbs_primitive(bContext *C, int type, int newname) bp->vec[2]+= nurbcircle[a][1]*grid; if(a & 1) bp->vec[3]= 0.5*sqrt(2.0); else bp->vec[3]= 1.0; - Mat3MulVecfl(imat,bp->vec); + mul_m3_v3(imat,bp->vec); bp++; } nu->flagu= 4; diff --git a/source/blender/editors/curve/editfont.c b/source/blender/editors/curve/editfont.c index 6ebc9c8a1c9..b6b0289e871 100644 --- a/source/blender/editors/curve/editfont.c +++ b/source/blender/editors/curve/editfont.c @@ -39,7 +39,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "DNA_curve_types.h" #include "DNA_object_types.h" @@ -541,7 +541,7 @@ void ED_text_to_object(bContext *C, Text *text, int split_lines) offset[2] = 0; if(rv3d) - Mat4Mul3Vecfl(rv3d->viewinv, offset); + mul_mat3_m4_v3(rv3d->viewinv, offset); txt_add_object(C, line, 1, offset); diff --git a/source/blender/editors/datafiles/B.blend.c b/source/blender/editors/datafiles/B.blend.c index 039221d1cc4..e6b06d4e2ae 100644 --- a/source/blender/editors/datafiles/B.blend.c +++ b/source/blender/editors/datafiles/B.blend.c @@ -1,886 +1,518 @@ -/* DataToC output of file </Users/William/blender25/blender/release/datafiles/B_blend> */ +/* DataToC output of file <B_blend> */ -int datatoc_B_blend_size= 469420; +int datatoc_B_blend_size= 353324; char datatoc_B_blend[]= { 66, 76, 69, 78, 68, 69, 82, 45,118, 50, 53, 48, - 82, 69, 78, 68, 32, 0, 0, 0,224,237,191, 95,255,127, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, + 82, 69, 78, 68, 32, 0, 0, 0,176,166, 6,240,255,127, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, 83, 99,101,110,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 76, 79, 66, 24, 1, 0, 0, -224,236,191, 95,255,127, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 32, 32, 32, 55, 7, 0, 0, 0,250, 0, 0, 0, 1, 0, 0, 1, - 64,154,143, 22, 1, 0, 0, 0, 48,186,129, 3, 1, 0, 0, 0, 0, 16, 0, 0,128, 32, 4, 0, 60,109,101,109,111,114,121, 50, - 62, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0,224,237,191, 95,255,127, 0, 0, 84,198,157, 3, 1, 0, 0, 0, -112,237,191, 95,255,127, 0, 0, 66,237, 91, 0, 1, 0, 0, 0, 80,237,191, 95,255,127, 0, 0,208, 76,159, 3, 32, 0, 0, 0, -224,237,191, 95,255,127, 0, 0, 32, 4,255, 24, 1, 0, 0, 0,144,237,191, 95,255,127, 0, 0, 48,198,157, 3, 1, 0, 0, 0, -192,237,191, 95,255,127, 0, 0,185,239, 91, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,237,191, 95,255,127, 0, 0, - 32, 0, 0, 0, 82, 69, 78, 68, 32, 4,255, 24, 1, 0, 0, 0, 82, 69, 78, 68, 32, 0, 0, 0,224,237,191, 95,255,127, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0,232,237,191, 95,255,127, 0, 0, 16,238,191, 95,255,127, 0, 0,197,246, 91, 0, 1, 0, 0, 0, - 80, 21,142, 22, 1, 0, 0, 0, 32, 4,255, 24, 1, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, 83, 99,101,110,101, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 87, 77, 0, 0, 8, 1, 0, 0,112, 24,142, 22, 1, 0, 0, 0, 96, 1, 0, 0, 1, 0, 0, 0, +208,167, 6,240,255,127, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 32, 32, 32, 55, 7, 0, 0, 0,250, 0, 0, 0, 1, 0, 0, 1, + 64, 46,187, 2, 0, 0, 0, 0, 64, 85,192, 2, 0, 0, 0, 0, 0, 16, 0, 0,128, 32, 4, 0, 60,109,101,109,111,114,121, 50, + 62, 0,255,255, 0, 0, 0, 0, 89,122,128,253,230,127, 0, 0,232, 10,194, 2, 0, 0, 0, 0, 32,170,156, 0,231,127, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1,129,128,253,230,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, +144, 58,130, 2, 0, 0, 0, 0,144,171, 6,240,255,127, 0, 0, 96,169, 6,240,255,127, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, +192,192,102, 0,231,127, 0, 0,136, 9,170, 1,231,127, 0, 0, 40, 0, 0, 0, 48, 0, 0, 0,190,102, 7, 0, 0, 0, 0, 0, +144,168, 6,240,255,127, 0, 0, 64,201, 60, 1, 0, 0, 0, 0,144,171, 6,240,255,127, 0, 0, 96,169, 6,240,255,127, 0, 0, + 0, 16, 0, 0, 0, 0, 0, 0,128,153,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 71,139, 1,231,127, 0, 0, + 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +192,192,102, 0,231,127, 0, 0, 87, 77, 0, 0, 8, 1, 0, 0,160,156,185, 2, 0, 0, 0, 0, 97, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 77, 87,105,110, 77, 97,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,192, 25,142, 22, 1, 0, 0, 0,192, 25,142, 22, 1, 0, 0, 0,192, 25,142, 22, 1, 0, 0, 0, -192, 25,142, 22, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,240,157,185, 2, 0, 0, 0, 0,240,157,185, 2, 0, 0, 0, 0,240,157,185, 2, 0, 0, 0, 0, +240,157,185, 2, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,180,135, 22, 1, 0, 0, 0, 0,180,135, 22, 1, 0, 0, 0, - 0,180,135, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 68, 2, 1, 0, 0, 0, 0,140, 68, 2, 1, 0, 0, 0, - 0,140, 68, 2, 1, 0, 0, 0, 68, 65, 84, 65,224, 0, 0, 0,192, 25,142, 22, 1, 0, 0, 0, 97, 1, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,186,135, 22, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 64,154,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,115, 99,114,101,101,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 49, 4, 0, 0, 0, 0, 1, 0,238, 3, - 0, 0, 1, 0, 0, 0, 0, 0,240,148,136, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 16, 19, 56, 25, 1, 0, 0, 0,112,150, 33, 3, 1, 0, 0, 0,112,150, 33, 3, 1, 0, 0, 0, -112,161, 37, 3, 1, 0, 0, 0, 48,208, 36, 3, 1, 0, 0, 0,144, 79, 37, 3, 1, 0, 0, 0,144, 79, 37, 3, 1, 0, 0, 0, - 48,157,251, 24, 1, 0, 0, 0, 32,192, 20, 26, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 78, 0, 0,208, 0, 0, 0,224, 26,142, 22, 1, 0, 0, 0,190, 0, 0, 0, 1, 0, 0, 0,224,236,142, 22, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,176,192, 2, 0, 0, 0, 0,112,176,192, 2, 0, 0, 0, 0, +112,176,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,177,192, 2, 0, 0, 0, 0, 96,177,192, 2, 0, 0, 0, 0, + 96,177,192, 2, 0, 0, 0, 0, 68, 65, 84, 65,224, 0, 0, 0,240,157,185, 2, 0, 0, 0, 0, 98, 1, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,177,192, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 64, 46,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,115, 99,114,101,101,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 30, 0,118, 7, 97, 4, 0, 0, 0, 0, 1, 0,238, 3, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 45,200, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,160,163,229, 2, 0, 0, 0, 0,224,142,131, 3, 0, 0, 0, 0,224,142,131, 3, 0, 0, 0, 0, + 80, 46,200, 2, 0, 0, 0, 0,208, 47,200, 2, 0, 0, 0, 0, 80, 49,200, 2, 0, 0, 0, 0, 80, 49,200, 2, 0, 0, 0, 0, +240, 50,200, 2, 0, 0, 0, 0,128,117,200, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 83, 78, 0, 0,208, 0, 0, 0, 16,159,185, 2, 0, 0, 0, 0,190, 0, 0, 0, 1, 0, 0, 0,208,121,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 65,110,105,109, 97,116, 105,111,110, 0, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -240, 27,142, 22, 1, 0, 0, 0, 80, 34,142, 22, 1, 0, 0, 0,176, 34,142, 22, 1, 0, 0, 0, 48, 45,142, 22, 1, 0, 0, 0, -144, 45,142, 22, 1, 0, 0, 0,176,218,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48,186,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,155,180, 21, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,240, 27,142, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, - 80, 28,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0, 80, 28,142, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,176, 28,142, 22, 1, 0, 0, 0, -240, 27,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, -176, 28,142, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 16, 29,142, 22, 1, 0, 0, 0, 80, 28,142, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 49, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 16, 29,142, 22, 1, 0, 0, 0, -191, 0, 0, 0, 1, 0, 0, 0,112, 29,142, 22, 1, 0, 0, 0,176, 28,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,112, 29,142, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, -208, 29,142, 22, 1, 0, 0, 0, 16, 29,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 4, 1, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0,208, 29,142, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 48, 30,142, 22, 1, 0, 0, 0, -112, 29,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, - 48, 30,142, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,144, 30,142, 22, 1, 0, 0, 0,208, 29,142, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48, 6, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,144, 30,142, 22, 1, 0, 0, 0, -191, 0, 0, 0, 1, 0, 0, 0,240, 30,142, 22, 1, 0, 0, 0, 48, 30,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48, 6, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,240, 30,142, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, - 80, 31,142, 22, 1, 0, 0, 0,144, 30,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 6,192, 1, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0, 80, 31,142, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,176, 31,142, 22, 1, 0, 0, 0, -240, 30,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7,192, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, -176, 31,142, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 16, 32,142, 22, 1, 0, 0, 0, 80, 31,142, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,116, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 16, 32,142, 22, 1, 0, 0, 0, -191, 0, 0, 0, 1, 0, 0, 0,112, 32,142, 22, 1, 0, 0, 0,176, 31,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48, 6,116, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,112, 32,142, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, -208, 32,142, 22, 1, 0, 0, 0, 16, 32,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,156, 2,116, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0,208, 32,142, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 48, 33,142, 22, 1, 0, 0, 0, -112, 32,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,156, 2, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, - 48, 33,142, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,144, 33,142, 22, 1, 0, 0, 0,208, 32,142, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,144, 33,142, 22, 1, 0, 0, 0, -191, 0, 0, 0, 1, 0, 0, 0,240, 33,142, 22, 1, 0, 0, 0, 48, 33,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -156, 2, 52, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,240, 33,142, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, - 80, 34,142, 22, 1, 0, 0, 0,144, 33,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 6, 52, 3, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0, 80, 34,142, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -240, 33,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 52, 3, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -176, 34,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 16, 35,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80, 28,142, 22, 1, 0, 0, 0,176, 28,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 16, 35,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,112, 35,142, 22, 1, 0, 0, 0,176, 34,142, 22, 1, 0, 0, 0, - 80, 28,142, 22, 1, 0, 0, 0,112, 29,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -112, 35,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,208, 35,142, 22, 1, 0, 0, 0, 16, 35,142, 22, 1, 0, 0, 0, -176, 28,142, 22, 1, 0, 0, 0,208, 29,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -208, 35,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 48, 36,142, 22, 1, 0, 0, 0,112, 35,142, 22, 1, 0, 0, 0, -112, 29,142, 22, 1, 0, 0, 0,208, 29,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 48, 36,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,144, 36,142, 22, 1, 0, 0, 0,208, 35,142, 22, 1, 0, 0, 0, -240, 27,142, 22, 1, 0, 0, 0, 48, 30,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -144, 36,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,240, 36,142, 22, 1, 0, 0, 0, 48, 36,142, 22, 1, 0, 0, 0, - 16, 29,142, 22, 1, 0, 0, 0, 48, 30,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -240, 36,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 80, 37,142, 22, 1, 0, 0, 0,144, 36,142, 22, 1, 0, 0, 0, -208, 29,142, 22, 1, 0, 0, 0,144, 30,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 80, 37,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,176, 37,142, 22, 1, 0, 0, 0,240, 36,142, 22, 1, 0, 0, 0, - 48, 30,142, 22, 1, 0, 0, 0,240, 30,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -176, 37,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 16, 38,142, 22, 1, 0, 0, 0, 80, 37,142, 22, 1, 0, 0, 0, - 16, 29,142, 22, 1, 0, 0, 0, 80, 31,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 16, 38,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,112, 38,142, 22, 1, 0, 0, 0,176, 37,142, 22, 1, 0, 0, 0, -240, 30,142, 22, 1, 0, 0, 0, 80, 31,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -112, 38,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,208, 38,142, 22, 1, 0, 0, 0, 16, 38,142, 22, 1, 0, 0, 0, -240, 27,142, 22, 1, 0, 0, 0,176, 31,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -208, 38,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 48, 39,142, 22, 1, 0, 0, 0,112, 38,142, 22, 1, 0, 0, 0, -144, 30,142, 22, 1, 0, 0, 0, 16, 32,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 48, 39,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,144, 39,142, 22, 1, 0, 0, 0,208, 38,142, 22, 1, 0, 0, 0, - 48, 30,142, 22, 1, 0, 0, 0, 16, 32,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -144, 39,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,240, 39,142, 22, 1, 0, 0, 0, 48, 39,142, 22, 1, 0, 0, 0, -176, 31,142, 22, 1, 0, 0, 0, 16, 32,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -240, 39,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 80, 40,142, 22, 1, 0, 0, 0,144, 39,142, 22, 1, 0, 0, 0, -176, 31,142, 22, 1, 0, 0, 0,112, 32,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 80, 40,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,176, 40,142, 22, 1, 0, 0, 0,240, 39,142, 22, 1, 0, 0, 0, - 16, 32,142, 22, 1, 0, 0, 0,112, 32,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -176, 40,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 16, 41,142, 22, 1, 0, 0, 0, 80, 40,142, 22, 1, 0, 0, 0, -112, 29,142, 22, 1, 0, 0, 0,208, 32,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 16, 41,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,112, 41,142, 22, 1, 0, 0, 0,176, 40,142, 22, 1, 0, 0, 0, -144, 30,142, 22, 1, 0, 0, 0,208, 32,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -112, 41,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,208, 41,142, 22, 1, 0, 0, 0, 16, 41,142, 22, 1, 0, 0, 0, -112, 32,142, 22, 1, 0, 0, 0,208, 32,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -208, 41,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 48, 42,142, 22, 1, 0, 0, 0,112, 41,142, 22, 1, 0, 0, 0, -176, 31,142, 22, 1, 0, 0, 0, 48, 33,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 48, 42,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,144, 42,142, 22, 1, 0, 0, 0,208, 41,142, 22, 1, 0, 0, 0, -112, 32,142, 22, 1, 0, 0, 0,144, 33,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -144, 42,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,240, 42,142, 22, 1, 0, 0, 0, 48, 42,142, 22, 1, 0, 0, 0, - 48, 33,142, 22, 1, 0, 0, 0,144, 33,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -240, 42,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 80, 43,142, 22, 1, 0, 0, 0,144, 42,142, 22, 1, 0, 0, 0, -240, 30,142, 22, 1, 0, 0, 0,240, 33,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 80, 43,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,176, 43,142, 22, 1, 0, 0, 0,240, 42,142, 22, 1, 0, 0, 0, -144, 30,142, 22, 1, 0, 0, 0,240, 33,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -176, 43,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 16, 44,142, 22, 1, 0, 0, 0, 80, 43,142, 22, 1, 0, 0, 0, -208, 29,142, 22, 1, 0, 0, 0, 80, 34,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 16, 44,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,112, 44,142, 22, 1, 0, 0, 0,176, 43,142, 22, 1, 0, 0, 0, - 80, 31,142, 22, 1, 0, 0, 0, 80, 34,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -112, 44,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,208, 44,142, 22, 1, 0, 0, 0, 16, 44,142, 22, 1, 0, 0, 0, -240, 33,142, 22, 1, 0, 0, 0, 80, 34,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -208, 44,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 48, 45,142, 22, 1, 0, 0, 0,112, 44,142, 22, 1, 0, 0, 0, -112, 29,142, 22, 1, 0, 0, 0, 48, 33,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 48, 45,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 44,142, 22, 1, 0, 0, 0, -208, 32,142, 22, 1, 0, 0, 0,144, 33,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, -144, 45,142, 22, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 48, 49,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, 29,142, 22, 1, 0, 0, 0, 80, 28,142, 22, 1, 0, 0, 0,176, 28,142, 22, 1, 0, 0, 0,208, 29,142, 22, 1, 0, 0, 0, + 32,160,185, 2, 0, 0, 0, 0,128,166,185, 2, 0, 0, 0, 0,224,166,185, 2, 0, 0, 0, 0, 32,179,185, 2, 0, 0, 0, 0, +144,179,185, 2, 0, 0, 0, 0, 16,103,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 64, 85,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 32,160,185, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, +128,160,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0,128,160,185, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,224,160,185, 2, 0, 0, 0, 0, + 32,160,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, +224,160,185, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 64,161,185, 2, 0, 0, 0, 0,128,160,185, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 49, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 64,161,185, 2, 0, 0, 0, 0, +191, 0, 0, 0, 1, 0, 0, 0,160,161,185, 2, 0, 0, 0, 0,224,160,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +128, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,160,161,185, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, + 0,162,185, 2, 0, 0, 0, 0, 64,161,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 4, 1, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0, 0,162,185, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 96,162,185, 2, 0, 0, 0, 0, +160,161,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, + 96,162,185, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,192,162,185, 2, 0, 0, 0, 0, 0,162,185, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 48, 6, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,192,162,185, 2, 0, 0, 0, 0, +191, 0, 0, 0, 1, 0, 0, 0, 32,163,185, 2, 0, 0, 0, 0, 96,162,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 6, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 32,163,185, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, +128,163,185, 2, 0, 0, 0, 0,192,162,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 6,192, 1, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0,128,163,185, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,224,163,185, 2, 0, 0, 0, 0, + 32,163,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7,192, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, +224,163,185, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 64,164,185, 2, 0, 0, 0, 0,128,163,185, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,116, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 64,164,185, 2, 0, 0, 0, 0, +191, 0, 0, 0, 1, 0, 0, 0,160,164,185, 2, 0, 0, 0, 0,224,163,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 6,116, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,160,164,185, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, + 0,165,185, 2, 0, 0, 0, 0, 64,164,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,156, 2,116, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0, 0,165,185, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 96,165,185, 2, 0, 0, 0, 0, +160,164,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,156, 2, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, + 96,165,185, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,192,165,185, 2, 0, 0, 0, 0, 0,165,185, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,192,165,185, 2, 0, 0, 0, 0, +191, 0, 0, 0, 1, 0, 0, 0, 32,166,185, 2, 0, 0, 0, 0, 96,165,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +156, 2, 52, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 32,166,185, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, +128,166,185, 2, 0, 0, 0, 0,192,165,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 6, 52, 3, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0,128,166,185, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 32,166,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 52, 3, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +224,166,185, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 80,167,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +128,160,185, 2, 0, 0, 0, 0,224,160,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 80,167,185, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,192,167,185, 2, 0, 0, 0, 0,224,166,185, 2, 0, 0, 0, 0, +128,160,185, 2, 0, 0, 0, 0,160,161,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +192,167,185, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 48,168,185, 2, 0, 0, 0, 0, 80,167,185, 2, 0, 0, 0, 0, +224,160,185, 2, 0, 0, 0, 0, 0,162,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 48,168,185, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,160,168,185, 2, 0, 0, 0, 0,192,167,185, 2, 0, 0, 0, 0, +160,161,185, 2, 0, 0, 0, 0, 0,162,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +160,168,185, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 16,169,185, 2, 0, 0, 0, 0, 48,168,185, 2, 0, 0, 0, 0, + 32,160,185, 2, 0, 0, 0, 0, 96,162,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 16,169,185, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,128,169,185, 2, 0, 0, 0, 0,160,168,185, 2, 0, 0, 0, 0, + 64,161,185, 2, 0, 0, 0, 0, 96,162,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +128,169,185, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,240,169,185, 2, 0, 0, 0, 0, 16,169,185, 2, 0, 0, 0, 0, + 0,162,185, 2, 0, 0, 0, 0,192,162,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +240,169,185, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 96,170,185, 2, 0, 0, 0, 0,128,169,185, 2, 0, 0, 0, 0, + 96,162,185, 2, 0, 0, 0, 0, 32,163,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 96,170,185, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,208,170,185, 2, 0, 0, 0, 0,240,169,185, 2, 0, 0, 0, 0, + 64,161,185, 2, 0, 0, 0, 0,128,163,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +208,170,185, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 64,171,185, 2, 0, 0, 0, 0, 96,170,185, 2, 0, 0, 0, 0, + 32,163,185, 2, 0, 0, 0, 0,128,163,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 64,171,185, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,176,171,185, 2, 0, 0, 0, 0,208,170,185, 2, 0, 0, 0, 0, + 32,160,185, 2, 0, 0, 0, 0,224,163,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +176,171,185, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 32,172,185, 2, 0, 0, 0, 0, 64,171,185, 2, 0, 0, 0, 0, +192,162,185, 2, 0, 0, 0, 0, 64,164,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 32,172,185, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,144,172,185, 2, 0, 0, 0, 0,176,171,185, 2, 0, 0, 0, 0, + 96,162,185, 2, 0, 0, 0, 0, 64,164,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +144,172,185, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0,173,185, 2, 0, 0, 0, 0, 32,172,185, 2, 0, 0, 0, 0, +224,163,185, 2, 0, 0, 0, 0, 64,164,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 0,173,185, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,112,173,185, 2, 0, 0, 0, 0,144,172,185, 2, 0, 0, 0, 0, +224,163,185, 2, 0, 0, 0, 0,160,164,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +112,173,185, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,224,173,185, 2, 0, 0, 0, 0, 0,173,185, 2, 0, 0, 0, 0, + 64,164,185, 2, 0, 0, 0, 0,160,164,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +224,173,185, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 80,174,185, 2, 0, 0, 0, 0,112,173,185, 2, 0, 0, 0, 0, +160,161,185, 2, 0, 0, 0, 0, 0,165,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 80,174,185, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,192,174,185, 2, 0, 0, 0, 0,224,173,185, 2, 0, 0, 0, 0, +192,162,185, 2, 0, 0, 0, 0, 0,165,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +192,174,185, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 48,175,185, 2, 0, 0, 0, 0, 80,174,185, 2, 0, 0, 0, 0, +160,164,185, 2, 0, 0, 0, 0, 0,165,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 48,175,185, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,160,175,185, 2, 0, 0, 0, 0,192,174,185, 2, 0, 0, 0, 0, +224,163,185, 2, 0, 0, 0, 0, 96,165,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +160,175,185, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 16,176,185, 2, 0, 0, 0, 0, 48,175,185, 2, 0, 0, 0, 0, +160,164,185, 2, 0, 0, 0, 0,192,165,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 16,176,185, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,128,176,185, 2, 0, 0, 0, 0,160,175,185, 2, 0, 0, 0, 0, + 96,165,185, 2, 0, 0, 0, 0,192,165,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +128,176,185, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,240,176,185, 2, 0, 0, 0, 0, 16,176,185, 2, 0, 0, 0, 0, + 32,163,185, 2, 0, 0, 0, 0, 32,166,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +240,176,185, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 96,177,185, 2, 0, 0, 0, 0,128,176,185, 2, 0, 0, 0, 0, +192,162,185, 2, 0, 0, 0, 0, 32,166,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 96,177,185, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,208,177,185, 2, 0, 0, 0, 0,240,176,185, 2, 0, 0, 0, 0, + 0,162,185, 2, 0, 0, 0, 0,128,166,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +208,177,185, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 64,178,185, 2, 0, 0, 0, 0, 96,177,185, 2, 0, 0, 0, 0, +128,163,185, 2, 0, 0, 0, 0,128,166,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 64,178,185, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,176,178,185, 2, 0, 0, 0, 0,208,177,185, 2, 0, 0, 0, 0, + 32,166,185, 2, 0, 0, 0, 0,128,166,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +176,178,185, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 32,179,185, 2, 0, 0, 0, 0, 64,178,185, 2, 0, 0, 0, 0, +160,161,185, 2, 0, 0, 0, 0, 96,165,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 32,179,185, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,178,185, 2, 0, 0, 0, 0, + 0,165,185, 2, 0, 0, 0, 0,192,165,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, +144,179,185, 2, 0, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 80,183,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +160,161,185, 2, 0, 0, 0, 0,128,160,185, 2, 0, 0, 0, 0,224,160,185, 2, 0, 0, 0, 0, 0,162,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 23, 4, 0, 0, 49, 4, 0, 0, 7, 7,129, 7, 27, 0, 1, 0, - 0, 0, 0, 0, 7, 0, 0, 0,240, 35, 15, 3, 1, 0, 0, 0, 96,236,142, 22, 1, 0, 0, 0, 96,236,142, 22, 1, 0, 0, 0, -112, 46,142, 22, 1, 0, 0, 0,208, 47,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208, 82, 40, 3, 1, 0, 0, 0, 16,225,253, 24, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,112, 46,142, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,208, 47,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,161, 68, + 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,121,186, 2, 0, 0, 0, 0, 64,121,186, 2, 0, 0, 0, 0, +112,180,185, 2, 0, 0, 0, 0,224,181,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,112,180,185, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,224,181,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,161, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 32,240, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,129, 7, 26, 0,129, 7, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 23, 4, 0, 0, 48, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 7, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0,176, 37, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,208, 47,142, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112, 46,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0,240,109, 69, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,224,181,185, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,180,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192, 0, 0, 0, 0,112, 7, 0, 0,129, 7, 0, 0, 18, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 18, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,129, 7, 3, 0,112, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 4, 0, 0, 49, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0,208, 36, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 48, 49,142, 22, 1, 0, 0, 0, -194, 0, 0, 0, 1, 0, 0, 0, 80, 97,142, 22, 1, 0, 0, 0,144, 45,142, 22, 1, 0, 0, 0, 48, 30,142, 22, 1, 0, 0, 0, -240, 30,142, 22, 1, 0, 0, 0, 80, 31,142, 22, 1, 0, 0, 0, 16, 29,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 80,183,185, 2, 0, 0, 0, 0, +194, 0, 0, 0, 1, 0, 0, 0, 48,233,185, 2, 0, 0, 0, 0,144,179,185, 2, 0, 0, 0, 0, 96,162,185, 2, 0, 0, 0, 0, + 32,163,185, 2, 0, 0, 0, 0,128,163,185, 2, 0, 0, 0, 0, 64,161,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 6, 0, 0,128, 7, 0, 0, 0, 0, 0, 0,191, 1, 0, 0, 4, 4, 80, 1,192, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 96, 32, 15, 3, 1, 0, 0, 0,192, 88,142, 22, 1, 0, 0, 0,240, 95,142, 22, 1, 0, 0, 0, 16, 50,142, 22, 1, 0, 0, 0, -112, 51,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,224,253, 24, 1, 0, 0, 0, - 48,224,253, 24, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 16, 50,142, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -112, 51,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 67, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 0, 0, 0,112,224,185, 2, 0, 0, 0, 0,208,231,185, 2, 0, 0, 0, 0, 48,184,185, 2, 0, 0, 0, 0, +160,185,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 48,184,185, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +160,185,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,168, 67, 0, 0, 0, 0, 0, 0,248, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 80, 1, 31, 0, 80, 1, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 6, 0, 0,128, 7, 0, 0,161, 1, 0, 0,191, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1, 31, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 35, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,112, 51,142, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 16, 50,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0,128,159, 67, 0,128,199,195, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,160,185,185, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 48,184,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,159, 67, 0,128,199,195, 0, 0, 0, 0, 0, 0, 0, 0, 1,128,159, 67, 1,128,199,195, 0, 0, 0, 0, 63, 1, 0, 0, 80, 1, 0, 0, 18, 0, 0, 0,160, 1, 0, 0, 0, 0, 0, 0, 62, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 62, 1, 0, 0, 18, 0, 0, 0,160, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, - 18, 0, 0, 4, 6, 0, 80, 1,161, 1, 63, 1,143, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,183,250, 24, 1, 0, 0, 0, - 2, 0, 0, 0, 1, 0, 0, 0, 49, 6, 0, 0,128, 7, 0, 0, 0, 0, 0, 0,160, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 18, 0, 0, 4, 6, 0, 80, 1,161, 1, 63, 1,143, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 49, 6, 0, 0,128, 7, 0, 0, 0, 0, 0, 0,160, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,161, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 64, 33, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 52,142, 22, 1, 0, 0, 0, - 48, 87,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,208, 52,142, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 96, 54,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 34, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 67,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,220,255, 63, 1, 36, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 96, 54,142, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,240, 55,142, 22, 1, 0, 0, 0,208, 52,142, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,114,101,110,100,101,114, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,114,101,110,100,101,114, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255, 76, 1, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,240, 55,142, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -128, 57,142, 22, 1, 0, 0, 0, 96, 54,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 76, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,111,255, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -128, 57,142, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 16, 59,142, 22, 1, 0, 0, 0,240, 55,142, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,100,105,109,101,110,115,105, -111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,100,105,109,101,110,115,105, -111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,165,254, 76, 1,178, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 16, 59,142, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -160, 60,142, 22, 1, 0, 0, 0,128, 57,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 65,110,116,105, 45, 65,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 83,254, 76, 1, 58, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -160, 60,142, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 48, 62,142, 22, 1, 0, 0, 0, 16, 59,142, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,115,104, 97,100,105,110,103, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,115,104, 97,100,105,110,103, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,213,253, 76, 1,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 48, 62,142, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -192, 63,142, 22, 1, 0, 0, 0,160, 60,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 79,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 84,253, 76, 1,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -192, 63,142, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 80, 65,142, 22, 1, 0, 0, 0, 48, 62,142, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,112,101,114,102,111,114,109, - 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,112,101,114,102,111,114,109, - 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,253, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 80, 65,142, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -224, 66,142, 22, 1, 0, 0, 0,192, 63,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80,111,115,116, 32, 80,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 36,253, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -224, 66,142, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,112, 68,142, 22, 1, 0, 0, 0, 80, 65,142, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,253, 76, 1, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,112, 68,142, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 0, 70,142, 22, 1, 0, 0, 0,224, 66,142, 22, 1, 0, 0, 0,144, 47,141, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95,117,110,105,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95,117,110,105,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 85,110,105,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 50,255, 63, 1, 61, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 0, 70,142, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,144, 71,142, 22, 1, 0, 0, 0,112, 68,142, 22, 1, 0, 0, 0, -192, 56,141, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,107,101,121,105,110,103, 95, -115,101,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,107,101,121,105,110,103, 95, -115,101,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75,101,121,105,110,103, 32, 83,101,116,115, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,213,254, 63, 1, 69, 0, 0, 0, 0, 0, 0, 0, 6, 0, - 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,144, 71,142, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 32, 73,142, 22, 1, 0, 0, 0, 0, 70,142, 22, 1, 0, 0, 0, 16,109,141, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95,112,104,121,115,105, 99,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95,112,104,121,115,105, 99,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 71,114, 97,118,105,116,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,153,254, 63, 1, 36, 0, 20, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0,112,224,185, 2, 0, 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0, +208,231,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 32, 73,142, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,176, 74,142, 22, 1, 0, 0, 0,144, 71,142, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255,114, 1, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, + 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,176,225,185, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 32,227,185, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,138, 67, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, + 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 1, + 26, 0, 20, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 89, 6, 0, 0,108, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 20, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,176, 74,142, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 64, 76,142, 22, 1, 0, 0, 0, 32, 73,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0, 32,227,185, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +176,225,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 76, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,111,255,114, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 64, 76,142, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,208, 77,142, 22, 1, 0, 0, 0,176, 74,142, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115, -105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115, -105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, + 89, 6, 0, 0,108, 7, 0, 0, 26, 0, 0, 0, 80, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 20, 1, 55, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,165,254,114, 1,178, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,228,185, 2, 0, 0, 0, 0, + 68, 65, 84, 65,248, 2, 0, 0,144,228,185, 2, 0, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0,103,212,136, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0,128, 63,103,212,136, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65,237,122,111, 62, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,128, 63,103,212,136, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 32,222, 58, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,208, 77,142, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 96, 79,142, 22, 1, 0, 0, 0, 64, 76,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 65,110,116,105, 45, 65,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 83,254,114, 1, 58, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,208,231,185, 2, 0, 0, 0, 0, +157, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,224,185, 2, 0, 0, 0, 0,176,225,185, 2, 0, 0, 0, 0, + 32,227,185, 2, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, +176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 96, 79,142, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,240, 80,142, 22, 1, 0, 0, 0,208, 77,142, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,213,253,114, 1,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 48,233,185, 2, 0, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, +128,245,185, 2, 0, 0, 0, 0, 80,183,185, 2, 0, 0, 0, 0, 32,160,185, 2, 0, 0, 0, 0,224,163,185, 2, 0, 0, 0, 0, + 64,164,185, 2, 0, 0, 0, 0, 96,162,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 6, 0, 0, + 0, 0, 0, 0,115, 0, 0, 0, 15, 15, 48, 6,116, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +240,236,185, 2, 0, 0, 0, 0, 32,244,185, 2, 0, 0, 0, 0, 16,234,185, 2, 0, 0, 0, 0,128,235,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0, 16,234,185, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,128,235,185, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,198, 68, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, + 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 48, 6, + 26, 0, 48, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 47, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,240, 80,142, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -128, 82,142, 22, 1, 0, 0, 0, 96, 79,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,128,235,185, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16,234,185, 2, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, + 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 6, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 47, 6, 0, 0, 18, 0, 0, 0, 89, 0, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, + 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0, 48, 6, + 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 47, 6, 0, 0, 26, 0, 0, 0,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 6, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 79,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 84,253,114, 1,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,200, 0, 0, 0,240,236,185, 2, 0, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0, 32,244,185, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -128, 82,142, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 16, 84,142, 22, 1, 0, 0, 0,240, 80,142, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114, -109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114, -109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,253,114, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0, 0,238,185, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,112,239,185, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,203, 68, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, + 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 88, 6, + 26, 0, 88, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 87, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 88, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 16, 84,142, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -160, 85,142, 22, 1, 0, 0, 0,128, 82,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,112,239,185, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,238,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80,111,115,116, 32, 80,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 36,253,114, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -160, 85,142, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 48, 87,142, 22, 1, 0, 0, 0, 16, 84,142, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, + 0, 0, 0, 0, 87, 6, 0, 0, 26, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 88, 6, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,240,185, 2, 0, 0, 0, 0, + 68, 65, 84, 65,248, 2, 0, 0,224,240,185, 2, 0, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,213,108, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0,128, 63, 0, 0,140, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,213,108, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65,161, 14,106, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 91,138, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,128, 63, 0, 0,140, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,213,108, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52,149,147, 58, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,253,114, 1, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 48, 87,142, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,160, 85,142, 22, 1, 0, 0, 0,240, 28,141, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95,115, 99,101,110,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95,115, 99,101,110,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 99,101,110,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, 32,244,185, 2, 0, 0, 0, 0, +157, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,236,185, 2, 0, 0, 0, 0, 0,238,185, 2, 0, 0, 0, 0, +112,239,185, 2, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, +176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,135,255, 63, 1, 61, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,128,245,185, 2, 0, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, +176, 7,186, 2, 0, 0, 0, 0, 48,233,185, 2, 0, 0, 0, 0, 32,163,185, 2, 0, 0, 0, 0, 32,166,185, 2, 0, 0, 0, 0, +128,166,185, 2, 0, 0, 0, 0,128,163,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 6, 0, 0,128, 7, 0, 0, +193, 1, 0, 0, 51, 3, 0, 0, 3, 3, 80, 1,115, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 64,249,185, 2, 0, 0, 0, 0, 80, 6,186, 2, 0, 0, 0, 0, 96,246,185, 2, 0, 0, 0, 0,208,247,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0, -192, 88,142, 22, 1, 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0,240, 95,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0, 96,246,185, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,208,247,185, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,163, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,168, 67, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 66, 67, 0, 0,200, 65, + 0, 0, 66, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 80, 1, + 26, 0, 80, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 49, 6, 0, 0,128, 7, 0, 0, 26, 3, 0, 0, 51, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 80, 1, 26, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,208,247,185, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 96,246,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,131, 67, 0, 0,228,194, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,159, 67, + 0,128,163,195, 0, 0, 0, 0, 63, 1, 0, 0, 80, 1, 0, 0, 18, 0, 0, 0, 88, 1, 0, 0, 0, 0, 0, 0, 62, 1, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 62, 1, 0, 0, 18, 0, 0, 0, 88, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 18, 0, 0, 0, 2, 0, 3, 3, 0, 0, 0, 4, 6, 0, 80, 1, + 89, 1, 63, 1, 71, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 49, 6, 0, 0,128, 7, 0, 0,193, 1, 0, 0, 25, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 80, 1, 89, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0, 64,249,185, 2, 0, 0, 0, 0,166, 0, 0, 0, 1, 0, 0, 0,240,254,185, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 48, 43,252, 24, 1, 0, 0, 0, -255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0, 90,142, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 96, 91,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,138, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 1, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 1, 26, 0, 20, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 96, 91,142, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,250,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 68, 65, 84, 65, 16, 0, 0, 0,176,250,185, 2, 0, 0, 0, 0,218, 0, 0, 0, 1, 0, 0, 0, 13, 0, 0, 0, 13, 0, 0, 0, + 0,251,185, 2, 0, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0, 0,251,185, 2, 0, 0, 0, 0,217, 0, 0, 0, 13, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 64, 85,192, 2, 0, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0, 64, 85,192, 2, 0, 0, 0, 0, + 20, 0, 0, 0, 1, 0, 1, 0, 64, 85,192, 2, 0, 0, 0, 0, 21, 0, 1, 0, 1, 0, 1, 0, 64, 85,192, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 1, 0,160,100,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,144,113,192, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 1, 0,176,163,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,240,123,192, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 1, 0, 80,145,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 16,119,192, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 1, 0, 16, 96,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,176,108,192, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 1, 0, 48, 95,192, 2, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 16,252,185, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,128,253,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 67, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 55, 0, 0, 67, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194, 0, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,195, 0, 26, 0,195, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 4, 0, 0,247, 4, 0, 0, 69, 2, 0, 0, 94, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195, 0, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, 26, 0, 0, 0, 80, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 55, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,128,253,185, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,252,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,150, 67, + 0,192,116,196, 0, 0, 0, 0, 0, 0, 0, 0,205, 85,150, 67,223,204, 35,196, 26, 85,207,195, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194, 0, 0, 0, + 0, 0, 0, 0,155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, + 0, 0, 0, 0, 1, 0, 3, 0, 2, 0, 0, 4, 6, 0,195, 0,156, 0,195, 0,156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 4, 0, 0,247, 4, 0, 0, 95, 2, 0, 0,250, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195, 0,156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,192, 92,142, 22, 1, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0,192, 92,142, 22, 1, 0, 0, 0, -156, 0, 0, 0, 1, 0, 0, 0,103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128, -226,215,163,188, 0, 0, 0,128, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32,193, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32, 65, 0, 0,128, 63,103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, -184,175, 31, 65, 0, 0, 32, 65,237,122,111, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,161, 14,106, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, - 98,127,249, 67,129,255, 71, 66, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32,193, 0, 0,128, 63,103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, -184,175, 31, 65, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,100, 32,222, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0,240,254,185, 2, 0, 0, 0, 0, +162, 0, 0, 0, 1, 0, 0, 0, 80, 6,186, 2, 0, 0, 0, 0, 64,249,185, 2, 0, 0, 0, 0, 16,252,185, 2, 0, 0, 0, 0, +128,253,185, 2, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 1, 0, 0,240, 95,142, 22, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192, 88,142, 22, 1, 0, 0, 0, 0, 90,142, 22, 1, 0, 0, 0, 96, 91,142, 22, 1, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,194,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 48, 0,186, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +160, 1,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 0,138, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, + 4, 0, 12, 4, 10, 0, 20, 1, 26, 0, 20, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, -159, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, - 80, 97,142, 22, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 64,109,142, 22, 1, 0, 0, 0, 48, 49,142, 22, 1, 0, 0, 0, -240, 27,142, 22, 1, 0, 0, 0,176, 31,142, 22, 1, 0, 0, 0, 16, 32,142, 22, 1, 0, 0, 0, 48, 30,142, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 6, 0, 0, 0, 0, 0, 0,115, 0, 0, 0, 15, 15, 48, 6,116, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0,240, 2, 15, 3, 1, 0, 0, 0,240,100,142, 22, 1, 0, 0, 0,224,107,142, 22, 1, 0, 0, 0, - 48, 98,142, 22, 1, 0, 0, 0,144, 99,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 96,200,252, 24, 1, 0, 0, 0, 80,199,254, 24, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 48, 98,142, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,144, 99,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,198, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 6, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 48, 6, 26, 0, 48, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,176, 4, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,144, 99,142, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 98,142, 22, 1, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, - 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 6, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 47, 6, 0, 0, - 18, 0, 0, 0, 89, 0, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, - 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0, 48, 6, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 6, 0, 0, 26, 0, 0, 0,115, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 6, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,208, 3, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0,240,100,142, 22, 1, 0, 0, 0, -172, 0, 0, 0, 1, 0, 0, 0,224,107,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,160, 1,186, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 48, 0,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,240,101,142, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 80,103,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,203, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 6, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 88, 6, 26, 0, 88, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, 26, 0, 0, 0, 80, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 55, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80,103,142, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,101,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16, 3,186, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, 16, 3,186, 2, 0, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, +103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0,128, 63, +103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65, +237,122,111, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,128, 63, +103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +100, 32,222, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 6, 0, 0, 26, 0, 0, 0, 55, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 6, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,176,104,142, 22, 1, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0,176,104,142, 22, 1, 0, 0, 0, -156, 0, 0, 0, 1, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,213,108, 66, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128, -226,215,163,188, 0, 0, 0,128, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32,193, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32, 65, 0, 0,128, 63, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,213,108, 66, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, -184,175, 31, 65, 0, 0, 32, 65,161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 91,138, 60, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, - 98,127,249, 67,129,255, 71, 66, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32,193, 0, 0,128, 63, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,213,108, 66, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, -184,175, 31, 65, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, + 80, 6,186, 2, 0, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,254,185, 2, 0, 0, 0, 0, + 48, 0,186, 2, 0, 0, 0, 0,160, 1,186, 2, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 52,149,147, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 1, 0, 0,224,107,142, 22, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -240,100,142, 22, 1, 0, 0, 0,240,101,142, 22, 1, 0, 0, 0, 80,103,142, 22, 1, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,194,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, -159, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, - 64,109,142, 22, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,240,126,142, 22, 1, 0, 0, 0, 80, 97,142, 22, 1, 0, 0, 0, -240, 30,142, 22, 1, 0, 0, 0,240, 33,142, 22, 1, 0, 0, 0, 80, 34,142, 22, 1, 0, 0, 0, 80, 31,142, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 49, 6, 0, 0,128, 7, 0, 0,193, 1, 0, 0, 51, 3, 0, 0, 3, 3, 80, 1,115, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 15, 3, 1, 0, 0, 0,224,112,142, 22, 1, 0, 0, 0,144,125,142, 22, 1, 0, 0, 0, - 32,110,142, 22, 1, 0, 0, 0,128,111,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192, 1,252, 24, 1, 0, 0, 0, 48, 91,251, 24, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 32,110,142, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,128,111,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,163, 67, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,168, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 1, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 66, 67, 0, 0,200, 65, 0, 0, 66, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 80, 1, 26, 0, 80, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 6, 0, 0,128, 7, 0, 0, 26, 3, 0, 0, 51, 3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1, 26, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 16, 2, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,128,111,142, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,110,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0,128,131, 67, - 0, 0,228,194, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,159, 67, 0,128,163,195, 0, 0, 0, 0, 63, 1, 0, 0, 80, 1, 0, 0, - 18, 0, 0, 0, 88, 1, 0, 0, 0, 0, 0, 0, 62, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 62, 1, 0, 0, - 18, 0, 0, 0, 88, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 18, 0, 0, 0, 2, 0, 3, 3, 0, 0, 0, 4, 6, 0, 80, 1, 89, 1, 63, 1, 71, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 6, 0, 0,128, 7, 0, 0,193, 1, 0, 0, 25, 3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1, 89, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48, 1, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,224,112,142, 22, 1, 0, 0, 0, -166, 0, 0, 0, 1, 0, 0, 0, 96,118,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,131, 16, 26, 1, 0, 0, 0, - 96,131, 16, 26, 1, 0, 0, 0, 64,114,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65, 16, 0, 0, 0, 64,114,142, 22, 1, 0, 0, 0, -218, 0, 0, 0, 1, 0, 0, 0, 13, 0, 0, 0, 13, 0, 0, 0,144,114,142, 22, 1, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0, -144,114,142, 22, 1, 0, 0, 0,217, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 48,186,129, 3, 1, 0, 0, 0, - 19, 0, 0, 0, 1, 0, 1, 0, 48,186,129, 3, 1, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0, 48,186,129, 3, 1, 0, 0, 0, - 21, 0, 1, 0, 1, 0, 1, 0, 48,186,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,128,242, 39, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0, 48,200,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,112,253, 39, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0, 96,246, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,112,251, 39, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0, 48,206,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48,238, 39, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0, 48,194,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 96,237, 39, 3, 1, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,160,115,142, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0,117,142, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 55, 0, 0, 67, 67, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, - 0,128,137, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,195, 0, - 26, 0,195, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 53, 4, 0, 0,247, 4, 0, 0, 69, 2, 0, 0, 94, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -195, 0, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 0,117,142, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -160,115,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,150, 67, 0,192,116,196, 0, 0, 0, 0, 0, 0, 0, 0,205, 85,150, 67, -223,204, 35,196, 26, 85,207,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 0,155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, 0, 1, 0, 3, 0, 2, 0, 0, 4, 6, 0,195, 0, -156, 0,195, 0,156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 53, 4, 0, 0,247, 4, 0, 0, 95, 2, 0, 0,250, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -195, 0,156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 1, 0, 0, 96,118,142, 22, 1, 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0,144,125,142, 22, 1, 0, 0, 0, -224,112,142, 22, 1, 0, 0, 0,160,115,142, 22, 1, 0, 0, 0, 0,117,142, 22, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, 7, 0,176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, + 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,176, 7,186, 2, 0, 0, 0, 0, +194, 0, 0, 0, 1, 0, 0, 0,240, 38,186, 2, 0, 0, 0, 0,128,245,185, 2, 0, 0, 0, 0,160,164,185, 2, 0, 0, 0, 0, + 0,165,185, 2, 0, 0, 0, 0,192,162,185, 2, 0, 0, 0, 0, 64,164,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +157, 2, 0, 0, 47, 6, 0, 0,117, 0, 0, 0, 21, 4, 0, 0, 1, 1,147, 3,161, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,160, 33,186, 2, 0, 0, 0, 0,224, 37,186, 2, 0, 0, 0, 0,144, 8,186, 2, 0, 0, 0, 0, +240, 28,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,144, 8,186, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 10,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 68, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0,192,100, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,146, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, + 4, 0, 12, 4, 10, 0,147, 3, 26, 0,147, 3, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,157, 2, 0, 0, 47, 6, 0, 0,117, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,147, 3, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0, 10,186, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +176, 14,186, 2, 0, 0, 0, 0,144, 8,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, + 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, + 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,157, 2, 0, 0,157, 2, 0, 0,143, 0, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,135, 3, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -160,119,142, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0,121,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,138, 67, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 1, 26, 0, 20, 1, 26, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 26, 0, 0, 0, 1, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 0,121,142, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,119,142, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, - 26, 0, 0, 0, 80, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 55, 4, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,122,142, 22, 1, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, - 96,122,142, 22, 1, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0,103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, - 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0,128, 63,103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, - 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65,237,122,111, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, - 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,128, 63,103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, - 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 32,222, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,144,125,142, 22, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 96,118,142, 22, 1, 0, 0, 0,160,119,142, 22, 1, 0, 0, 0, 0,121,142, 22, 1, 0, 0, 0, - 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,194,129, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, - 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,160, 0, 0, 0,240,126,142, 22, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 16,157,142, 22, 1, 0, 0, 0, - 64,109,142, 22, 1, 0, 0, 0,112, 32,142, 22, 1, 0, 0, 0,208, 32,142, 22, 1, 0, 0, 0,144, 30,142, 22, 1, 0, 0, 0, - 16, 32,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,157, 2, 0, 0, 47, 6, 0, 0,117, 0, 0, 0, 21, 4, 0, 0, - 1, 1,147, 3,161, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 5, 15, 3, 1, 0, 0, 0,240,151,142, 22, 1, 0, 0, 0, - 16,156,142, 22, 1, 0, 0, 0,208,127,142, 22, 1, 0, 0, 0, 96,147,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,176,206,253, 24, 1, 0, 0, 0, 96, 76, 40, 3, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -208,127,142, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 48,129,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 91, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,192,100, 68, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,146, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,147, 3, 26, 0,147, 3, 26, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,157, 2, 0, 0, 47, 6, 0, 0, -117, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,147, 3, 26, 0, 0, 0, 1, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176, 13, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 48,129,142, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,176,133,142, 22, 1, 0, 0, 0,208,127,142, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0, -143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,157, 2, 0, 0,157, 2, 0, 0, -143, 0, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,135, 3, 0, 0, 5, 0, - 3, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 16, 10, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,144,130,142, 22, 1, 0, 0, 0, 32,132,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -144,130,142, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 32,132,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108, 95,115, -104,101,108,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108, 95,115, -104,101,108,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,111,111,108, 32, 83,104,101,108,102, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,196,255,143, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 32,132,142, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,144,130,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,111, 98,106,101, 99,116,109,111,100,101, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,111, 98,106,101, 99,116,109,111,100,101, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 79, 98,106,101, 99,116, 32, 84,111,111,108,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,223,253,143, 0,205, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -176,133,142, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,160,136,142, 22, 1, 0, 0, 0, 48,129,142, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0, -143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,157, 2, 0, 0, 47, 6, 0, 0, -143, 0, 0, 0,143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, - 34, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,224, 11, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 16,135,142, 22, 1, 0, 0, 0, 16,135,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 16,135,142, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,108, 97,115,116, 95,111, -112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,108, 97,115,116, 95,111, -112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78,101,119, 32, 83, 99,114,101,101,110, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,255,144, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176, 14,186, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +192, 17,186, 2, 0, 0, 0, 0, 0, 10,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, + 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, + 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, + 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,157, 2, 0, 0, 47, 6, 0, 0,143, 0, 0, 0,143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,160,136,142, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 96,147,142, 22, 1, 0, 0, 0,176,133,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,192, 97,196, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,192, 17,186, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +240, 28,186, 2, 0, 0, 0, 0,176, 14,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,192, 97,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,192, 97,196, 0, 0,136,195,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,136, 2, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,136, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0,137, 2,163, 0,119, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 6, 0, 0, 47, 6, 0, 0,143, 0, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 80, 7, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,138,142, 22, 1, 0, 0, 0, -208,145,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 0,138,142, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -144,139,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,111, 98,106,101, 99,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,111, 98,106,101, 99,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 84,114, 97,110,115,102,111,114,109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128,254,163, 0,104, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -144,139,142, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 32,141,142, 22, 1, 0, 0, 0, 0,138,142, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,103,112,101,110, 99,105, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,103,112,101,110, 99,105, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71,114,101, 97,115,101, 32, 80,101,110, 99,105,108, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195,252,163, 0, 58, 0, 0, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 32,141,142, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -176,142,142, 22, 1, 0, 0, 0,144,139,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100,118,105,101,119, 95,112,114,111,112,101,114,116,105,101,115, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100,118,105,101,119, 95,112,114,111,112,101,114,116,105,101,115, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 86,105,101,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 45,253,163, 0, 59, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -176,142,142, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 64,144,142, 22, 1, 0, 0, 0, 32,141,142, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100,118,105,101,119, - 95,100,105,115,112,108, 97,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100,118,105,101,119, - 95,100,105,115,112,108, 97,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,115,112,108, 97,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18,252,163, 0, 3, 1, 0, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 64,144,142, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -208,145,142, 22, 1, 0, 0, 0,176,142,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 98, 97, 99,107,103,114,111,117,110,100, 95,105,109, 97,103,101, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 98, 97, 99,107,103,114,111,117,110,100, 95,105,109, 97,103,101, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66, 97, 99,107,103,114,111,117,110,100, 32, 73,109, 97,103,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,229,252,163, 0, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -208,145,142, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,144,142, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,114, 97,110,115,102, -111,114,109, 95,111,114,105,101,110,116, 97,116,105,111,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,114, 97,110,115,102, -111,114,109, 95,111,114,105,101,110,116, 97,116,105,111,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,114, 97,110,115,102,111,114,109, 32, 79,114,105,101,110,116, - 97,116,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205,252,163, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 96,147,142, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,160,136,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,240, 28,186, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,192, 17,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,157, 2, 0, 0, 47, 6, 0, 0,143, 0, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,147, 3,135, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, 6, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192,148,142, 22, 1, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0,192,148,142, 22, 1, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 96, 30,186, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, 96, 30,186, 2, 0, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,220,141, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0, @@ -905,17 +537,17 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, -240,151,142, 22, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, 16,156,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +160, 33,186, 2, 0, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0,224, 37,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0, 7, 0, 48,194,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, 7, 0,176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0,255,255, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80,153,142, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,176,154,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0, 35,186, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,112, 36,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, @@ -924,8 +556,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176,154,142, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,153,142, 22, 1, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,112, 36,186, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35,186, 2, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, @@ -934,71 +566,71 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0, 16,156,142, 22, 1, 0, 0, 0, -172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,151,142, 22, 1, 0, 0, 0, 80,153,142, 22, 1, 0, 0, 0, -176,154,142, 22, 1, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0,224, 37,186, 2, 0, 0, 0, 0, +172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 33,186, 2, 0, 0, 0, 0, 0, 35,186, 2, 0, 0, 0, 0, +112, 36,186, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 16,157,142, 22, 1, 0, 0, 0, -194, 0, 0, 0, 1, 0, 0, 0, 48,185,142, 22, 1, 0, 0, 0,240,126,142, 22, 1, 0, 0, 0,176, 31,142, 22, 1, 0, 0, 0, - 48, 33,142, 22, 1, 0, 0, 0,144, 33,142, 22, 1, 0, 0, 0,112, 32,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,240, 38,186, 2, 0, 0, 0, 0, +194, 0, 0, 0, 1, 0, 0, 0, 48, 68,186, 2, 0, 0, 0, 0,176, 7,186, 2, 0, 0, 0, 0,224,163,185, 2, 0, 0, 0, 0, + 96,165,185, 2, 0, 0, 0, 0,192,165,185, 2, 0, 0, 0, 0,160,164,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,155, 2, 0, 0,117, 0, 0, 0, 51, 2, 0, 0, 2, 2,156, 2,191, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -144, 14, 15, 3, 1, 0, 0, 0,112,163,142, 22, 1, 0, 0, 0, 48,184,142, 22, 1, 0, 0, 0,240,157,142, 22, 1, 0, 0, 0, - 16,162,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,174,250, 24, 1, 0, 0, 0, - 80,135,251, 24, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,240,157,142, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 80,159,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 78, 68, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 0, 0, 0,144, 45,186, 2, 0, 0, 0, 0, 32, 67,186, 2, 0, 0, 0, 0,208, 39,186, 2, 0, 0, 0, 0, + 32, 44,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,208, 39,186, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 64, 41,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 78, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 39, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,155, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,103, 68, 0, 0,200, 65, 0,192,103, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,156, 2, 26, 0,156, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,155, 2, 0, 0,117, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,156, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80, 16, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80,159,142, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -176,160,142, 22, 1, 0, 0, 0,240,157,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 67, 0, 0,112,193, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 64, 41,186, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +176, 42,186, 2, 0, 0, 0, 0,208, 39,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 67, 0, 0,112,193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 67, 0,128,201,195, 0, 0, 0, 0,200, 0, 0, 0,217, 0, 0, 0, 18, 0, 0, 0,164, 1, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 18, 0, 0, 0,164, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 10, 0, 0, 0, 2, 0, 3, 3, 0, 0, 0, 4, 6, 0,217, 0,165, 1,200, 0,147, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 0, 0, 0,143, 0, 0, 0, 51, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,217, 0,165, 1, 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48, 17, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176,160,142, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 16,162,142, 22, 1, 0, 0, 0, 80,159,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176, 42,186, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 32, 44,186, 2, 0, 0, 0, 0, 64, 41,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,155, 2, 0, 0,155, 2, 0, 0,143, 0, 0, 0, 51, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 16, 18, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 16,162,142, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,176,160,142, 22, 1, 0, 0, 0, 0, 0, 16,193, 0, 0,130, 67, 0, 0,160,192, 0, 0,160, 64, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 32, 44,186, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,176, 42,186, 2, 0, 0, 0, 0, 0, 0, 16,193, 0, 0,130, 67, 0, 0,160,192, 0, 0,160, 64, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 16,193, 0, 0, 32, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,164, 1, 0, 0, 18, 0, 0, 0,194, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,194, 1, 0, 0, 18, 0, 0, 0,164, 1, 0, 0, 111, 18,131, 58,111, 18,131, 58, 0,124,146, 72, 0, 80, 67, 71, 0, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0,195, 1,165, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,217, 0, 0, 0,155, 2, 0, 0,143, 0, 0, 0, 51, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195, 1,165, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, 15, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,112,163,142, 22, 1, 0, 0, 0,161, 0, 0, 0, 1, 0, 0, 0, - 32,169,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,144, 45,186, 2, 0, 0, 0, 0,161, 0, 0, 0, 1, 0, 0, 0, +128, 51,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,164,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 46,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, -160,164,142, 22, 1, 0, 0, 0, 20, 1, 0, 0, 1, 0, 0, 0, 48,186,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0,165,142, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 96,166,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,202, 67, +208, 46,186, 2, 0, 0, 0, 0, 20, 1, 0, 0, 1, 0, 0, 0, 64, 85,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 48, 47,186, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,160, 48,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,202, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,104, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 41, 68, 0, 0,200, 65, 0,192, 41, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, @@ -1007,8 +639,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 3, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 96,166,142, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,192,167,142, 22, 1, 0, 0, 0, 0,165,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,160, 48,186, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 16, 50,186, 2, 0, 0, 0, 0, 48, 47,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 67, 0,128,100,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 67, 0,128,100,196, 0, 0, 0, 0,172, 0, 0, 0,189, 0, 0, 0, 18, 0, 0, 0,163, 3, 0, 0, 0, 0, 0, 0,171, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,171, 0, 0, 0, 18, 0, 0, 0,163, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, @@ -1017,8 +649,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,192,167,142, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,166,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 16, 50,186, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 48,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 67, 0, 0,168,191, 0, 0, 20, 64, 0, 0,169,191, 0,128, 20, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 3, 0, 0, 0, 0, 0, 0,164, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1027,14 +659,14 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 3,164, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,168, 0, 0, 0, 32,169,142, 22, 1, 0, 0, 0, -167, 0, 0, 0, 1, 0, 0, 0, 16,180,142, 22, 1, 0, 0, 0,112,163,142, 22, 1, 0, 0, 0, 0,165,142, 22, 1, 0, 0, 0, -192,167,142, 22, 1, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,168, 0, 0, 0,128, 51,186, 2, 0, 0, 0, 0, +167, 0, 0, 0, 1, 0, 0, 0,224, 62,186, 2, 0, 0, 0, 0,144, 45,186, 2, 0, 0, 0, 0, 48, 47,186, 2, 0, 0, 0, 0, + 16, 50,186, 2, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0,170,142, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 96,171,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,112, 52,186, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,224, 53,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 42, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, @@ -1043,8 +675,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 96,171,142, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,192,172,142, 22, 1, 0, 0, 0, 0,170,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,224, 53,186, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 80, 55,186, 2, 0, 0, 0, 0,112, 52,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, @@ -1053,8 +685,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,164, 3, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,192,172,142, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 32,174,142, 22, 1, 0, 0, 0, 96,171,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80, 55,186, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,192, 56,186, 2, 0, 0, 0, 0,224, 53,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, @@ -1063,8 +695,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 32,174,142, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,128,175,142, 22, 1, 0, 0, 0,192,172,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,192, 56,186, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 48, 58,186, 2, 0, 0, 0, 0, 80, 55,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128,142,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 0, 26,196, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, @@ -1073,8 +705,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,128,175,142, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,174,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 48, 58,186, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 56,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1083,7 +715,7 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 2,164, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,224,176,142, 22, 1, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0,224,176,142, 22, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,160, 59,186, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0,160, 59,186, 2, 0, 0, 0, 0, 156, 0, 0, 0, 1, 0, 0, 0,226,225,191, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128, 226,215,163,188, 0, 0, 0,128, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, @@ -1108,17 +740,17 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 1, 0, 0, 16,180,142, 22, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, 48,184,142, 22, 1, 0, 0, 0, - 32,169,142, 22, 1, 0, 0, 0, 0,170,142, 22, 1, 0, 0, 0,128,175,142, 22, 1, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, + 68, 65, 84, 65, 32, 1, 0, 0,224, 62,186, 2, 0, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, 32, 67,186, 2, 0, 0, 0, 0, +128, 51,186, 2, 0, 0, 0, 0,112, 52,186, 2, 0, 0, 0, 0, 48, 58,186, 2, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,194,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -112,181,142, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,208,182,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 64, 64,186, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,176, 65,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, @@ -1128,7 +760,7 @@ char datatoc_B_blend[]= { 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -208,182,142, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,181,142, 22, 1, 0, 0, 0, +176, 65,186, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64,186, 2, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66, @@ -1138,59 +770,59 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0, - 48,184,142, 22, 1, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,180,142, 22, 1, 0, 0, 0, -112,181,142, 22, 1, 0, 0, 0,208,182,142, 22, 1, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 32, 67,186, 2, 0, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 62,186, 2, 0, 0, 0, 0, + 64, 64,186, 2, 0, 0, 0, 0,176, 65,186, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, - 48,185,142, 22, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,176,218,142, 22, 1, 0, 0, 0, 16,157,142, 22, 1, 0, 0, 0, - 48, 33,142, 22, 1, 0, 0, 0,112, 29,142, 22, 1, 0, 0, 0,208, 32,142, 22, 1, 0, 0, 0,144, 33,142, 22, 1, 0, 0, 0, + 48, 68,186, 2, 0, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 16,103,186, 2, 0, 0, 0, 0,240, 38,186, 2, 0, 0, 0, 0, + 96,165,185, 2, 0, 0, 0, 0,160,161,185, 2, 0, 0, 0, 0, 0,165,185, 2, 0, 0, 0, 0,192,165,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,155, 2, 0, 0, 53, 2, 0, 0, 21, 4, 0, 0, 12, 12,156, 2,225, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48, 50, 15, 3, 1, 0, 0, 0, 48,190,142, 22, 1, 0, 0, 0,176,217,142, 22, 1, 0, 0, 0, - 16,186,142, 22, 1, 0, 0, 0,208,188,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192,135,251, 24, 1, 0, 0, 0,144, 0,252, 24, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 16,186,142, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,112,187,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 68, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 73,186, 2, 0, 0, 0, 0, 0,102,186, 2, 0, 0, 0, 0, + 16, 69,186, 2, 0, 0, 0, 0,240, 71,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 16, 69,186, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,128, 70,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 39, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,155, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,103, 68, 0, 0,200, 65, 0,192,103, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,156, 2, 26, 0,156, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,155, 2, 0, 0, 53, 2, 0, 0, 78, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,156, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,240, 51, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,112,187,142, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,208,188,142, 22, 1, 0, 0, 0, 16,186,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,128, 70,186, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,240, 71,186, 2, 0, 0, 0, 0, 16, 69,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 67, 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 67, 0,192,244,195, 0, 0, 82,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 18, 0, 0, 0,198, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 8, 0, 0, 0, 2, 0, 3, 3, 0, 0, 2, 4, 6, 0,200, 0,199, 1,200, 0,181, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 79, 2, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 0,199, 1, 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,208, 52, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,208,188,142, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,187,142, 22, 1, 0, 0, 0, 0, 0, 32,193, 0, 0,104, 68, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,240, 71,186, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 70,186, 2, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,104, 68, 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,104, 68, 0,192,244,195, 0, 0, 82,194,195, 1, 0, 0,212, 1, 0, 0, 18, 0, 0, 0,198, 1, 0, 0, 0, 0, 0, 0,194, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,194, 1, 0, 0, 18, 0, 0, 0,198, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,124,146, 72, 0, 64, 28, 70, 10,215, 35, 60, 0, 0, 72, 66, 74, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 4, 4, 0,212, 1,199, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 0, 0, 0,155, 2, 0, 0, 79, 2, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,212, 1,199, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 16, 51, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 1, 0, 0, 48,190,142, 22, 1, 0, 0, 0, - 21, 1, 0, 0, 1, 0, 0, 0,240,196,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 1, 0, 0, 96, 73,186, 2, 0, 0, 0, 0, + 21, 1, 0, 0, 1, 0, 0, 0,112, 80,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48,186,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,112,191,142, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,208,192,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 78, 68, + 64, 85,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176, 74,186, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 32, 76,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 78, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,104, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,103, 68, 0, 0,200, 65, 0,192,103, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, @@ -1199,8 +831,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 3, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,208,192,142, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 48,194,142, 22, 1, 0, 0, 0,112,191,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 32, 76,186, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,144, 77,186, 2, 0, 0, 0, 0,176, 74,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 67, 0, 0,112,193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 67, 0, 0,219,195, 0, 0, 0, 0,200, 0, 0, 0,217, 0, 0, 0, 18, 0, 0, 0,199, 1, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 18, 0, 0, 0,199, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, @@ -1209,8 +841,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,217, 0,200, 1, 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 48,194,142, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,144,195,142, 22, 1, 0, 0, 0,208,192,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,144, 77,186, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 79,186, 2, 0, 0, 0, 0, 32, 76,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1219,8 +851,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,144,195,142, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,194,142, 22, 1, 0, 0, 0, 0, 0, 16,193, 0, 0,130, 67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0, 79,186, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 77,186, 2, 0, 0, 0, 0, 0, 0, 16,193, 0, 0,130, 67, 0, 0,160,192, 0, 0,160, 64, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 16,193, 0, 0, 32, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,199, 1, 0, 0, 18, 0, 0, 0,198, 2, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,198, 2, 0, 0, 18, 0, 0, 0,199, 1, 0, 0,111, 18,131, 58,111, 18,131, 58, 0,124,146, 72, 0, 80, 67, 71, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1229,18 +861,18 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,199, 2,200, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,240,196,142, 22, 1, 0, 0, 0, -161, 0, 0, 0, 1, 0, 0, 0,160,202,142, 22, 1, 0, 0, 0, 48,190,142, 22, 1, 0, 0, 0,112,191,142, 22, 1, 0, 0, 0, -144,195,142, 22, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,112, 80,186, 2, 0, 0, 0, 0, +161, 0, 0, 0, 1, 0, 0, 0, 96, 86,186, 2, 0, 0, 0, 0, 96, 73,186, 2, 0, 0, 0, 0,176, 74,186, 2, 0, 0, 0, 0, + 0, 79,186, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,198,142, 22, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176, 81,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0, 32,198,142, 22, 1, 0, 0, 0, 20, 1, 0, 0, 1, 0, 0, 0, 48,186,129, 3, 1, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0,176, 81,186, 2, 0, 0, 0, 0, 20, 1, 0, 0, 1, 0, 0, 0, 64, 85,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -128,198,142, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,224,199,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16, 82,186, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,128, 83,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,202, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,104, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 41, 68, 0, 0,200, 65, 0,192, 41, 68, 0, 0,200, 65, @@ -1250,7 +882,7 @@ char datatoc_B_blend[]= { 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -224,199,142, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 64,201,142, 22, 1, 0, 0, 0,128,198,142, 22, 1, 0, 0, 0, +128, 83,186, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,240, 84,186, 2, 0, 0, 0, 0, 16, 82,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 67, 0,128,100,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 67, 0,128,100,196, 0, 0, 0, 0, 172, 0, 0, 0,189, 0, 0, 0, 18, 0, 0, 0,163, 3, 0, 0, 0, 0, 0, 0,171, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,171, 0, 0, 0, 18, 0, 0, 0,163, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1260,7 +892,7 @@ char datatoc_B_blend[]= { 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 64,201,142, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,199,142, 22, 1, 0, 0, 0, +240, 84,186, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 83,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 67, 0, 0,168,191, 0, 0, 20, 64, 0, 0,169,191, 0,128, 20, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 3, 0, 0, 0, 0, 0, 0,164, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1270,13 +902,13 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,168, 0, 0, 0, -160,202,142, 22, 1, 0, 0, 0,167, 0, 0, 0, 1, 0, 0, 0,144,213,142, 22, 1, 0, 0, 0,240,196,142, 22, 1, 0, 0, 0, -128,198,142, 22, 1, 0, 0, 0, 64,201,142, 22, 1, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 96, 86,186, 2, 0, 0, 0, 0,167, 0, 0, 0, 1, 0, 0, 0,192, 97,186, 2, 0, 0, 0, 0,112, 80,186, 2, 0, 0, 0, 0, + 16, 82,186, 2, 0, 0, 0, 0,240, 84,186, 2, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -128,203,142, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,224,204,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 80, 87,186, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,192, 88,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 42, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, @@ -1286,7 +918,7 @@ char datatoc_B_blend[]= { 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -224,204,142, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 64,206,142, 22, 1, 0, 0, 0,128,203,142, 22, 1, 0, 0, 0, +192, 88,186, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 48, 90,186, 2, 0, 0, 0, 0, 80, 87,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0, 143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1296,7 +928,7 @@ char datatoc_B_blend[]= { 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 64,206,142, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,160,207,142, 22, 1, 0, 0, 0,224,204,142, 22, 1, 0, 0, 0, + 48, 90,186, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,160, 91,186, 2, 0, 0, 0, 0,192, 88,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1306,7 +938,7 @@ char datatoc_B_blend[]= { 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -160,207,142, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0,209,142, 22, 1, 0, 0, 0, 64,206,142, 22, 1, 0, 0, 0, +160, 91,186, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 16, 93,186, 2, 0, 0, 0, 0, 48, 90,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128,142,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 0, 26,196, 0, 0, 0, 0, 163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1316,7 +948,7 @@ char datatoc_B_blend[]= { 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 0,209,142, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,207,142, 22, 1, 0, 0, 0, + 16, 93,186, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 91,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1325,8 +957,8 @@ char datatoc_B_blend[]= { 111, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 2,164, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,210,142, 22, 1, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, - 96,210,142, 22, 1, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0,226,225,191, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 94,186, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, +128, 94,186, 2, 0, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0,226,225,191, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, @@ -1350,17 +982,17 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,144,213,142, 22, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, -176,217,142, 22, 1, 0, 0, 0,160,202,142, 22, 1, 0, 0, 0,128,203,142, 22, 1, 0, 0, 0, 0,209,142, 22, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,192, 97,186, 2, 0, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, + 0,102,186, 2, 0, 0, 0, 0, 96, 86,186, 2, 0, 0, 0, 0, 80, 87,186, 2, 0, 0, 0, 0, 16, 93,186, 2, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,194,129, 3, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,240,214,142, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 80,216,142, 22, 1, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0, 32, 99,186, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,144,100,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, @@ -1370,8 +1002,8 @@ char datatoc_B_blend[]= { 152, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 80,216,142, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -240,214,142, 22, 1, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, + 68, 65, 84, 65, 40, 1, 0, 0,144,100,186, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 32, 99,186, 2, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0,152, 4, @@ -1380,40 +1012,40 @@ char datatoc_B_blend[]= { 152, 4,122, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,200, 0, 0, 0,176,217,142, 22, 1, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -144,213,142, 22, 1, 0, 0, 0,240,214,142, 22, 1, 0, 0, 0, 80,216,142, 22, 1, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,200, 0, 0, 0, 0,102,186, 2, 0, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +192, 97,186, 2, 0, 0, 0, 0, 32, 99,186, 2, 0, 0, 0, 0,144,100,186, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, - 68, 65, 84, 65,160, 0, 0, 0,176,218,142, 22, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48,185,142, 22, 1, 0, 0, 0,240, 33,142, 22, 1, 0, 0, 0,144, 30,142, 22, 1, 0, 0, 0,208, 29,142, 22, 1, 0, 0, 0, - 80, 34,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 6, 0, 0,128, 7, 0, 0, 53, 3, 0, 0, 21, 4, 0, 0, - 1, 1, 80, 1,225, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 5, 15, 3, 1, 0, 0, 0,128,225,142, 22, 1, 0, 0, 0, - 32,235,142, 22, 1, 0, 0, 0,144,219,142, 22, 1, 0, 0, 0,240,220,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 40, 3, 1, 0, 0, 0,176,238, 36, 3, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -144,219,142, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,240,220,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,160, 0, 0, 0, 16,103,186, 2, 0, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 68,186, 2, 0, 0, 0, 0, 32,166,185, 2, 0, 0, 0, 0,192,162,185, 2, 0, 0, 0, 0, 0,162,185, 2, 0, 0, 0, 0, +128,166,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 6, 0, 0,128, 7, 0, 0, 53, 3, 0, 0, 21, 4, 0, 0, + 1, 1, 80, 1,225, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,110,186, 2, 0, 0, 0, 0, + 0,120,186, 2, 0, 0, 0, 0,240,103,186, 2, 0, 0, 0, 0, 96,105,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, +240,103,186, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 96,105,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,194, 67, 0, 0, 0, 64, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,131, 1, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,132, 1, 24, 0,132, 1, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 6, 0, 0,128, 7, 0, 0, 53, 3, 0, 0, 53, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, - 2, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,176, 13, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -240,220,142, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,219,142, 22, 1, 0, 0, 0, + 96,105,186, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,103,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 6, 0, 0,128, 7, 0, 0, 53, 3, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,225, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112, 6, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,222,142, 22, 1, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, - 80,222,142, 22, 1, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, 24,255, 13, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,106,186, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, +208,106,186, 2, 0, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, 24,255, 13, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 12, 84, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,154, 65,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128, 72, 1, 77,190, 0, 0, 0,128,221,149, 47, 63, 86,126,162,190, 8,165, 39, 63, 0, 0, 0, 0, 51, 70, 58, 63,225,251,159, 62,149, 84, 28,191, 0, 0, 0, 0,192, 56, 49,188, 55, 53,101, 63, 52,247,227, 62, 0, 0, 0, 0, @@ -1437,17 +1069,17 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 7, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,128,225,142, 22, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, -160,229,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 7, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, 16,110,186, 2, 0, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, + 80,114,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,194,129, 3, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,224,226,142, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 64,228,142, 22, 1, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,112,111,186, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,224,112,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,163, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,194, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,131, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 66, 67, 0, 0,200, 65, @@ -1457,8 +1089,8 @@ char datatoc_B_blend[]= { 132, 1, 26, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 64,228,142, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -224,226,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0,128,131, 67, 0, 0,228,194, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,185, 67, + 68, 65, 84, 65, 40, 1, 0, 0,224,112,186, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +112,111,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,131, 67, 0, 0,228,194, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,185, 67, 0, 0, 62,195, 0, 0, 0, 0,115, 1, 0, 0,132, 1, 0, 0, 18, 0, 0, 0,207, 0, 0, 0, 0, 0, 0, 0,114, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,114, 1, 0, 0, 18, 0, 0, 0,207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 18, 0, 0, 0, 2, 0, 3, 3, 0, 0, 0, 4, 6, 0,132, 1, @@ -1467,26 +1099,26 @@ char datatoc_B_blend[]= { 132, 1,208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,160,229,142, 22, 1, 0, 0, 0,166, 0, 0, 0, 1, 0, 0, 0, 32,235,142, 22, 1, 0, 0, 0, -128,225,142, 22, 1, 0, 0, 0,224,226,142, 22, 1, 0, 0, 0, 64,228,142, 22, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0, 80,114,186, 2, 0, 0, 0, 0,166, 0, 0, 0, 1, 0, 0, 0, 0,120,186, 2, 0, 0, 0, 0, + 16,110,186, 2, 0, 0, 0, 0,112,111,186, 2, 0, 0, 0, 0,224,112,186, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,231,142, 22, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,115,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 68, 65, 84, 65, 16, 0, 0, 0, 0,231,142, 22, 1, 0, 0, 0,218, 0, 0, 0, 1, 0, 0, 0, 13, 0, 0, 0, 13, 0, 0, 0, - 80,231,142, 22, 1, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0, 80,231,142, 22, 1, 0, 0, 0,217, 0, 0, 0, 13, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 48,186,129, 3, 1, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0, 48,186,129, 3, 1, 0, 0, 0, - 20, 0, 0, 0, 1, 0, 1, 0, 48,186,129, 3, 1, 0, 0, 0, 21, 0, 1, 0, 1, 0, 1, 0, 48,186,129, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0,128,242, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48,200,129, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0,112,253, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 96,246, 39, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0,112,251, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48,206,129, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0, 48,238, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48,194,129, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0, 96,237, 39, 3, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 96,232,142, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,192,233,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 67, + 68, 65, 84, 65, 16, 0, 0, 0,192,115,186, 2, 0, 0, 0, 0,218, 0, 0, 0, 1, 0, 0, 0, 13, 0, 0, 0, 13, 0, 0, 0, + 16,116,186, 2, 0, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0, 16,116,186, 2, 0, 0, 0, 0,217, 0, 0, 0, 13, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 64, 85,192, 2, 0, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0, 64, 85,192, 2, 0, 0, 0, 0, + 20, 0, 0, 0, 1, 0, 1, 0, 64, 85,192, 2, 0, 0, 0, 0, 21, 0, 1, 0, 1, 0, 1, 0, 64, 85,192, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 1, 0,160,100,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,144,113,192, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 1, 0,176,163,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,240,123,192, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 1, 0, 80,145,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 16,119,192, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 1, 0, 16, 96,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,176,108,192, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 1, 0, 48, 95,192, 2, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 32,117,186, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,144,118,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 55, 0, 0, 67, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, @@ -1495,8 +1127,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195, 0, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,192,233,142, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,232,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,150, 67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,144,118,186, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,117,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,150, 67, 0,192,116,196, 0, 0, 0, 0, 0, 0, 0, 0,205, 85,150, 67,223,204, 35,196, 26, 85,207,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 0,155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, @@ -1505,151 +1137,151 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195, 0,156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0, 32,235,142, 22, 1, 0, 0, 0, -162, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,229,142, 22, 1, 0, 0, 0, 96,232,142, 22, 1, 0, 0, 0, -192,233,142, 22, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0, 0,120,186, 2, 0, 0, 0, 0, +162, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,114,186, 2, 0, 0, 0, 0, 32,117,186, 2, 0, 0, 0, 0, +144,118,186, 2, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0,208, 0, 0, 0,224,236,142, 22, 1, 0, 0, 0,190, 0, 0, 0, 1, 0, 0, 0, - 64,154,143, 22, 1, 0, 0, 0,224, 26,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0,208, 0, 0, 0,208,121,186, 2, 0, 0, 0, 0,190, 0, 0, 0, 1, 0, 0, 0, + 64, 46,187, 2, 0, 0, 0, 0, 16,159,185, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 67,111,109,112,111,115,105,116,105,110,103, 0,103, 46, 48, 48, 49, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,240,237,142, 22, 1, 0, 0, 0,208,242,142, 22, 1, 0, 0, 0, 48,243,142, 22, 1, 0, 0, 0, - 16,251,142, 22, 1, 0, 0, 0,112,251,142, 22, 1, 0, 0, 0, 64,123,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48,186,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,155,180, 21, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,240,237,142, 22, 1, 0, 0, 0, -191, 0, 0, 0, 1, 0, 0, 0, 80,238,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 80,238,142, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, -176,238,142, 22, 1, 0, 0, 0,240,237,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 4, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0,176,238,142, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 16,239,142, 22, 1, 0, 0, 0, - 80,238,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 49, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, - 16,239,142, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,112,239,142, 22, 1, 0, 0, 0,176,238,142, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,112,239,142, 22, 1, 0, 0, 0, -191, 0, 0, 0, 1, 0, 0, 0,208,239,142, 22, 1, 0, 0, 0, 16,239,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,208,239,142, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, - 48,240,142, 22, 1, 0, 0, 0,112,239,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 22, 4, 1, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0, 48,240,142, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,144,240,142, 22, 1, 0, 0, 0, -208,239,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 6, 88, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, -144,240,142, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,240,240,142, 22, 1, 0, 0, 0, 48,240,142, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 88, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,240,240,142, 22, 1, 0, 0, 0, -191, 0, 0, 0, 1, 0, 0, 0, 80,241,142, 22, 1, 0, 0, 0,144,240,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 28, 6, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 80,241,142, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, -176,241,142, 22, 1, 0, 0, 0,240,240,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,148, 1, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0,176,241,142, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 16,242,142, 22, 1, 0, 0, 0, - 80,241,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 6,148, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, - 16,242,142, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,112,242,142, 22, 1, 0, 0, 0,176,241,142, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,148, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,112,242,142, 22, 1, 0, 0, 0, -191, 0, 0, 0, 1, 0, 0, 0,208,242,142, 22, 1, 0, 0, 0, 16,242,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,208,242,142, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,112,242,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 6, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 48,243,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,144,243,142, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 80,238,142, 22, 1, 0, 0, 0,176,238,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,144,243,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,240,243,142, 22, 1, 0, 0, 0, - 48,243,142, 22, 1, 0, 0, 0, 80,238,142, 22, 1, 0, 0, 0,112,239,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,240,243,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 80,244,142, 22, 1, 0, 0, 0, -144,243,142, 22, 1, 0, 0, 0,176,238,142, 22, 1, 0, 0, 0,208,239,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 80,244,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,176,244,142, 22, 1, 0, 0, 0, -240,243,142, 22, 1, 0, 0, 0,112,239,142, 22, 1, 0, 0, 0,208,239,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,176,244,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 16,245,142, 22, 1, 0, 0, 0, - 80,244,142, 22, 1, 0, 0, 0, 16,239,142, 22, 1, 0, 0, 0,144,240,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 16,245,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,112,245,142, 22, 1, 0, 0, 0, -176,244,142, 22, 1, 0, 0, 0, 48,240,142, 22, 1, 0, 0, 0,144,240,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,112,245,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,208,245,142, 22, 1, 0, 0, 0, - 16,245,142, 22, 1, 0, 0, 0,208,239,142, 22, 1, 0, 0, 0,240,240,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,208,245,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 48,246,142, 22, 1, 0, 0, 0, -112,245,142, 22, 1, 0, 0, 0,112,239,142, 22, 1, 0, 0, 0,240,240,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 48,246,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,144,246,142, 22, 1, 0, 0, 0, -208,245,142, 22, 1, 0, 0, 0, 48,240,142, 22, 1, 0, 0, 0,240,240,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,144,246,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,240,246,142, 22, 1, 0, 0, 0, - 48,246,142, 22, 1, 0, 0, 0,208,239,142, 22, 1, 0, 0, 0,144,240,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,240,246,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 80,247,142, 22, 1, 0, 0, 0, -144,246,142, 22, 1, 0, 0, 0,112,239,142, 22, 1, 0, 0, 0, 80,241,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 80,247,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,176,247,142, 22, 1, 0, 0, 0, -240,246,142, 22, 1, 0, 0, 0,240,240,142, 22, 1, 0, 0, 0,176,241,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,176,247,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 16,248,142, 22, 1, 0, 0, 0, - 80,247,142, 22, 1, 0, 0, 0, 80,241,142, 22, 1, 0, 0, 0,176,241,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 16,248,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,112,248,142, 22, 1, 0, 0, 0, -176,247,142, 22, 1, 0, 0, 0, 80,241,142, 22, 1, 0, 0, 0, 16,242,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,112,248,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,208,248,142, 22, 1, 0, 0, 0, - 16,248,142, 22, 1, 0, 0, 0,176,241,142, 22, 1, 0, 0, 0, 16,242,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,208,248,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 48,249,142, 22, 1, 0, 0, 0, -112,248,142, 22, 1, 0, 0, 0,240,237,142, 22, 1, 0, 0, 0,112,242,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 48,249,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,144,249,142, 22, 1, 0, 0, 0, -208,248,142, 22, 1, 0, 0, 0,112,242,142, 22, 1, 0, 0, 0,208,242,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,144,249,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,240,249,142, 22, 1, 0, 0, 0, - 48,249,142, 22, 1, 0, 0, 0, 16,239,142, 22, 1, 0, 0, 0,208,242,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,240,249,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 80,250,142, 22, 1, 0, 0, 0, -144,249,142, 22, 1, 0, 0, 0, 48,240,142, 22, 1, 0, 0, 0,208,242,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 80,250,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,176,250,142, 22, 1, 0, 0, 0, -240,249,142, 22, 1, 0, 0, 0, 16,242,142, 22, 1, 0, 0, 0,112,242,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,176,250,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 16,251,142, 22, 1, 0, 0, 0, - 80,250,142, 22, 1, 0, 0, 0,176,241,142, 22, 1, 0, 0, 0,208,242,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 16,251,142, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176,250,142, 22, 1, 0, 0, 0,240,237,142, 22, 1, 0, 0, 0, 80,241,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,160, 0, 0, 0,112,251,142, 22, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 16,255,142, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,112,239,142, 22, 1, 0, 0, 0, 80,238,142, 22, 1, 0, 0, 0,176,238,142, 22, 1, 0, 0, 0, -208,239,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 23, 4, 0, 0, 49, 4, 0, 0, - 7, 7,129, 7, 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0,240, 35, 15, 3, 1, 0, 0, 0,192,153,143, 22, 1, 0, 0, 0, -192,153,143, 22, 1, 0, 0, 0, 80,252,142, 22, 1, 0, 0, 0,176,253,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 32, 63, 17, 26, 1, 0, 0, 0, 48, 19,142, 22, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 80,252,142, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,176,253,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,224,122,186, 2, 0, 0, 0, 0,192,127,186, 2, 0, 0, 0, 0, 32,128,186, 2, 0, 0, 0, 0, + 80,137,186, 2, 0, 0, 0, 0,192,137,186, 2, 0, 0, 0, 0, 16, 14,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 64, 85,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,224,122,186, 2, 0, 0, 0, 0, +191, 0, 0, 0, 1, 0, 0, 0, 64,123,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 64,123,186, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, +160,123,186, 2, 0, 0, 0, 0,224,122,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 4, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0,160,123,186, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 0,124,186, 2, 0, 0, 0, 0, + 64,123,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 49, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, + 0,124,186, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 96,124,186, 2, 0, 0, 0, 0,160,123,186, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 96,124,186, 2, 0, 0, 0, 0, +191, 0, 0, 0, 1, 0, 0, 0,192,124,186, 2, 0, 0, 0, 0, 0,124,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,192,124,186, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, + 32,125,186, 2, 0, 0, 0, 0, 96,124,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 22, 4, 1, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0, 32,125,186, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,128,125,186, 2, 0, 0, 0, 0, +192,124,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 6, 88, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, +128,125,186, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,224,125,186, 2, 0, 0, 0, 0, 32,125,186, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 88, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,224,125,186, 2, 0, 0, 0, 0, +191, 0, 0, 0, 1, 0, 0, 0, 64,126,186, 2, 0, 0, 0, 0,128,125,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 28, 6, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 64,126,186, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, +160,126,186, 2, 0, 0, 0, 0,224,125,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,148, 1, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0,160,126,186, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 0,127,186, 2, 0, 0, 0, 0, + 64,126,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 6,148, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, + 0,127,186, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 96,127,186, 2, 0, 0, 0, 0,160,126,186, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,148, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 96,127,186, 2, 0, 0, 0, 0, +191, 0, 0, 0, 1, 0, 0, 0,192,127,186, 2, 0, 0, 0, 0, 0,127,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,192,127,186, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 96,127,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 6, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 32,128,186, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,144,128,186, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 64,123,186, 2, 0, 0, 0, 0,160,123,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,144,128,186, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0,129,186, 2, 0, 0, 0, 0, + 32,128,186, 2, 0, 0, 0, 0, 64,123,186, 2, 0, 0, 0, 0, 96,124,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 0,129,186, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,112,129,186, 2, 0, 0, 0, 0, +144,128,186, 2, 0, 0, 0, 0,160,123,186, 2, 0, 0, 0, 0,192,124,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,112,129,186, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,224,129,186, 2, 0, 0, 0, 0, + 0,129,186, 2, 0, 0, 0, 0, 96,124,186, 2, 0, 0, 0, 0,192,124,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,224,129,186, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 80,130,186, 2, 0, 0, 0, 0, +112,129,186, 2, 0, 0, 0, 0, 0,124,186, 2, 0, 0, 0, 0,128,125,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 80,130,186, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,192,130,186, 2, 0, 0, 0, 0, +224,129,186, 2, 0, 0, 0, 0, 32,125,186, 2, 0, 0, 0, 0,128,125,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,192,130,186, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 48,131,186, 2, 0, 0, 0, 0, + 80,130,186, 2, 0, 0, 0, 0,192,124,186, 2, 0, 0, 0, 0,224,125,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 48,131,186, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,160,131,186, 2, 0, 0, 0, 0, +192,130,186, 2, 0, 0, 0, 0, 96,124,186, 2, 0, 0, 0, 0,224,125,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,160,131,186, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 16,132,186, 2, 0, 0, 0, 0, + 48,131,186, 2, 0, 0, 0, 0, 32,125,186, 2, 0, 0, 0, 0,224,125,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 16,132,186, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,128,132,186, 2, 0, 0, 0, 0, +160,131,186, 2, 0, 0, 0, 0,192,124,186, 2, 0, 0, 0, 0,128,125,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,128,132,186, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,240,132,186, 2, 0, 0, 0, 0, + 16,132,186, 2, 0, 0, 0, 0, 96,124,186, 2, 0, 0, 0, 0, 64,126,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,240,132,186, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 96,133,186, 2, 0, 0, 0, 0, +128,132,186, 2, 0, 0, 0, 0,224,125,186, 2, 0, 0, 0, 0,160,126,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 96,133,186, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,208,133,186, 2, 0, 0, 0, 0, +240,132,186, 2, 0, 0, 0, 0, 64,126,186, 2, 0, 0, 0, 0,160,126,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,208,133,186, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 64,134,186, 2, 0, 0, 0, 0, + 96,133,186, 2, 0, 0, 0, 0, 64,126,186, 2, 0, 0, 0, 0, 0,127,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 64,134,186, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,176,134,186, 2, 0, 0, 0, 0, +208,133,186, 2, 0, 0, 0, 0,160,126,186, 2, 0, 0, 0, 0, 0,127,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,176,134,186, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 32,135,186, 2, 0, 0, 0, 0, + 64,134,186, 2, 0, 0, 0, 0,224,122,186, 2, 0, 0, 0, 0, 96,127,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 32,135,186, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,144,135,186, 2, 0, 0, 0, 0, +176,134,186, 2, 0, 0, 0, 0, 96,127,186, 2, 0, 0, 0, 0,192,127,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,144,135,186, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0,136,186, 2, 0, 0, 0, 0, + 32,135,186, 2, 0, 0, 0, 0, 0,124,186, 2, 0, 0, 0, 0,192,127,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 0,136,186, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,112,136,186, 2, 0, 0, 0, 0, +144,135,186, 2, 0, 0, 0, 0, 32,125,186, 2, 0, 0, 0, 0,192,127,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,112,136,186, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,224,136,186, 2, 0, 0, 0, 0, + 0,136,186, 2, 0, 0, 0, 0, 0,127,186, 2, 0, 0, 0, 0, 96,127,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,224,136,186, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 80,137,186, 2, 0, 0, 0, 0, +112,136,186, 2, 0, 0, 0, 0,160,126,186, 2, 0, 0, 0, 0,192,127,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 80,137,186, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +224,136,186, 2, 0, 0, 0, 0,224,122,186, 2, 0, 0, 0, 0, 64,126,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,160, 0, 0, 0,192,137,186, 2, 0, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,128,141,186, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 96,124,186, 2, 0, 0, 0, 0, 64,123,186, 2, 0, 0, 0, 0,160,123,186, 2, 0, 0, 0, 0, +192,124,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 23, 4, 0, 0, 49, 4, 0, 0, + 7, 7,129, 7, 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176, 45,187, 2, 0, 0, 0, 0, +176, 45,187, 2, 0, 0, 0, 0,160,138,186, 2, 0, 0, 0, 0, 16,140,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, +160,138,186, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 16,140,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,161, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 32,240, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,129, 7, 26, 0,129, 7, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 23, 4, 0, 0, 48, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 7, 26, 0, 0, 0, 1, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,176, 37, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -176,253,142, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,252,142, 22, 1, 0, 0, 0, + 16,140,186, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,138,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192, 0, 0, 0, 0, 112, 7, 0, 0,129, 7, 0, 0, 18, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 18, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,129, 7, 3, 0,112, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 4, 0, 0, 49, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,208, 36, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, - 16,255,142, 22, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 0, 11,143, 22, 1, 0, 0, 0,112,251,142, 22, 1, 0, 0, 0, -208,242,142, 22, 1, 0, 0, 0, 48,240,142, 22, 1, 0, 0, 0,144,240,142, 22, 1, 0, 0, 0, 16,239,142, 22, 1, 0, 0, 0, +128,141,186, 2, 0, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,208,153,186, 2, 0, 0, 0, 0,192,137,186, 2, 0, 0, 0, 0, +192,127,186, 2, 0, 0, 0, 0, 32,125,186, 2, 0, 0, 0, 0,128,125,186, 2, 0, 0, 0, 0, 0,124,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 6, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 15, 15,100, 1, 88, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0,240, 2, 15, 3, 1, 0, 0, 0,176, 2,143, 22, 1, 0, 0, 0,160, 9,143, 22, 1, 0, 0, 0, -240,255,142, 22, 1, 0, 0, 0, 80, 1,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80,229,146, 22, 1, 0, 0, 0, 96, 86,154, 22, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,240,255,142, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 80, 1,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,145,186, 2, 0, 0, 0, 0,112,152,186, 2, 0, 0, 0, 0, + 96,142,186, 2, 0, 0, 0, 0,208,143,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 96,142,186, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,208,143,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,178, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,100, 1, 26, 0,100, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 6, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,176, 4, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80, 1,143, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,255,142, 22, 1, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,208,143,186, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,142,186, 2, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66, 50, 51, 74,193,154,209,131, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 99, 1, 0, 0, 18, 0, 0, 0, 61, 0, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0,100, 1, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 6, 0, 0,128, 7, 0, 0, 26, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 1, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,208, 3, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0,176, 2,143, 22, 1, 0, 0, 0, -172, 0, 0, 0, 1, 0, 0, 0,160, 9,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0, 64,145,186, 2, 0, 0, 0, 0, +172, 0, 0, 0, 1, 0, 0, 0,112,152,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176, 3,143, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 16, 5,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80,146,186, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,192,147,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,203, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, @@ -1658,8 +1290,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 16, 5,143, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176, 3,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,192,147,186, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,146,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1668,7 +1300,7 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 6, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,112, 6,143, 22, 1, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0,112, 6,143, 22, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 48,149,186, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, 48,149,186, 2, 0, 0, 0, 0, 156, 0, 0, 0, 1, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,213,108, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128, 226,215,163,188, 0, 0, 0,128, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, @@ -1693,305 +1325,52 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 1, 0, 0,160, 9,143, 22, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176, 2,143, 22, 1, 0, 0, 0,176, 3,143, 22, 1, 0, 0, 0, 16, 5,143, 22, 1, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, + 68, 65, 84, 65, 32, 1, 0, 0,112,152,186, 2, 0, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 64,145,186, 2, 0, 0, 0, 0, 80,146,186, 2, 0, 0, 0, 0,192,147,186, 2, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,194,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, 159, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, - 0, 11,143, 22, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,224, 62,143, 22, 1, 0, 0, 0, 16,255,142, 22, 1, 0, 0, 0, - 48,240,142, 22, 1, 0, 0, 0,240,240,142, 22, 1, 0, 0, 0,208,239,142, 22, 1, 0, 0, 0,144,240,142, 22, 1, 0, 0, 0, +208,153,186, 2, 0, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,144,207,186, 2, 0, 0, 0, 0,128,141,186, 2, 0, 0, 0, 0, + 32,125,186, 2, 0, 0, 0, 0,224,125,186, 2, 0, 0, 0, 0,192,124,186, 2, 0, 0, 0, 0,128,125,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 6, 0, 0,128, 7, 0, 0, 89, 0, 0, 0, 21, 4, 0, 0, 4, 4,100, 1,189, 3, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 96, 32, 15, 3, 1, 0, 0, 0, 0, 49,143, 22, 1, 0, 0, 0,128, 61,143, 22, 1, 0, 0, 0, -224, 11,143, 22, 1, 0, 0, 0, 64, 13,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48, 81,154, 22, 1, 0, 0, 0, 48, 39,141, 22, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,224, 11,143, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 64, 13,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,193,186, 2, 0, 0, 0, 0, 48,206,186, 2, 0, 0, 0, 0, +176,154,186, 2, 0, 0, 0, 0, 32,156,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176,154,186, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 32,156,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,178, 67, 0, 0, 0, 0, 0, 0,248, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,100, 1, 31, 0,100, 1, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 6, 0, 0,128, 7, 0, 0,247, 3, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 1, 31, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 16, 35, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 64, 13,143, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 11,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,169, 67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 32,156,186, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,154,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,169, 67, 0, 0,137,196, 0, 0, 0, 0, 0, 0, 0, 0,255,127,169, 67,255,255, 98,196, 0, 0, 0, 0, 83, 1, 0, 0,100, 1, 0, 0, 18, 0, 0, 0,157, 3, 0, 0, 0, 0, 0, 0, 82, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 82, 1, 0, 0, 18, 0, 0, 0,157, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,100, 1,158, 3, 83, 1,140, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48,118, 16, 26, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 29, 6, 0, 0,128, 7, 0, 0, 89, 0, 0, 0,246, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 6, 0, 0,128, 7, 0, 0, 89, 0, 0, 0,246, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 1,158, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 64, 33, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -160, 14,143, 22, 1, 0, 0, 0,112, 47,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,160, 14,143, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0, 48, 16,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 34, 15, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 67,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220,255, 82, 1, 36, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0, 48, 16,143, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,192, 17,143, 22, 1, 0, 0, 0, -160, 14,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, - 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, - 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255, 76, 1, 61, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,192, 17,143, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0, 80, 19,143, 22, 1, 0, 0, 0, 48, 16,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111,255, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0, 80, 19,143, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,224, 20,143, 22, 1, 0, 0, 0, -192, 17,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, - 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, - 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,109,101,110,115,105,111, -110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,165,254, 76, 1,178, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,224, 20,143, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0,112, 22,143, 22, 1, 0, 0, 0, 80, 19,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 65,110,116,105, 45, 65,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,254, 76, 1, 58, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0,112, 22,143, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 24,143, 22, 1, 0, 0, 0, -224, 20,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, - 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, - 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,105,110,103, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,213,253, 76, 1,102, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 0, 24,143, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0,144, 25,143, 22, 1, 0, 0, 0,112, 22,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 79,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,253, 76, 1,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0,144, 25,143, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 32, 27,143, 22, 1, 0, 0, 0, - 0, 24,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, - 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, - 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,101,114,102,111,114,109, 97, -110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,253, 76, 1, 0, 0, - 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 32, 27,143, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0,176, 28,143, 22, 1, 0, 0, 0,144, 25,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 80,111,115,116, 32, 80,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36,253, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0,176, 28,143, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 64, 30,143, 22, 1, 0, 0, 0, - 32, 27,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, - 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, - 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,112, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,253, 76, 1, 0, 0, - 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 64, 30,143, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0,208, 31,143, 22, 1, 0, 0, 0,176, 28,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,117,110,105,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,117,110,105,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 85,110,105,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,244,252, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0,208, 31,143, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 96, 33,143, 22, 1, 0, 0, 0, - 64, 30,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, - 95,107,101,121,105,110,103, 95,115,101,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, - 95,107,101,121,105,110,103, 95,115,101,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75,101,121,105,110,103, 32, 83, -101,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220,252, 76, 1, 0, 0, - 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 96, 33,143, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0,240, 34,143, 22, 1, 0, 0, 0,208, 31,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,112,104,121,115,105, 99,115, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,112,104,121,115,105, 99,115, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 71,114, 97,118,105,116,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,252, 76, 1, 36, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0,240, 34,143, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,128, 36,143, 22, 1, 0, 0, 0, - 96, 33,143, 22, 1, 0, 0, 0, 64, 47,243, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255, 82, 1, 61, 0, - 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,128, 36,143, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0, 16, 38,143, 22, 1, 0, 0, 0,240, 34,143, 22, 1, 0, 0, 0,192, 34,243, 24, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127,253, 82, 1,240, 1, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0, 16, 38,143, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,160, 39,143, 22, 1, 0, 0, 0, -128, 36,143, 22, 1, 0, 0, 0,128,241,242, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,109,101,110,115,105,111, -110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,181,252, 82, 1,178, 0, - 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,160, 39,143, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0, 48, 41,143, 22, 1, 0, 0, 0, 16, 38,143, 22, 1, 0, 0, 0,112,108,242, 24, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 65,110,116,105, 45, 65,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,226,251, 82, 1, 58, 0, 20, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, 5, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0, 48, 41,143, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,192, 42,143, 22, 1, 0, 0, 0, -160, 39,143, 22, 1, 0, 0, 0,160, 93,243, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,105,110,103, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,158,251, 82, 1,102, 0, - 0, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,192, 42,143, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0, 80, 44,143, 22, 1, 0, 0, 0, 48, 41,143, 22, 1, 0, 0, 0,128, 98,243, 24, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 79,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52,252, 82, 1,105, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0, 80, 44,143, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,224, 45,143, 22, 1, 0, 0, 0, -192, 42,143, 22, 1, 0, 0, 0, 64,105,243, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,101,114,102,111,114,109, 97, -110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,236,251, 82, 1, 0, 0, - 0, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,224, 45,143, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0,112, 47,143, 22, 1, 0, 0, 0, 80, 44,143, 22, 1, 0, 0, 0, 32,107,243, 24, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 80,111,115,116, 32, 80,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,212,251, 82, 1, 0, 0, 0, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, 8, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0,112, 47,143, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -224, 45,143, 22, 1, 0, 0, 0,128,109,243, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,112, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,188,251, 82, 1, 0, 0, - 20, 0, 0, 0, 4, 0, 7, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0, 0, 49,143, 22, 1, 0, 0, 0, -162, 0, 0, 0, 1, 0, 0, 0, 96, 54,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0, 80,193,186, 2, 0, 0, 0, 0, +162, 0, 0, 0, 1, 0, 0, 0,224,198,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0,139, 17, 26, 1, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 64, 50,143, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -160, 51,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, 0, 0,216, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,144,194,186, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0,196,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0,242, 67, 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,227, 1, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0,128,241, 67, 0, 0,208, 65, 0,128,241, 67, 0, 0,208, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, @@ -2000,8 +1379,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0,228, 1, 27, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,160, 51,143, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 53,143, 22, 1, 0, 0, 0, 64, 50,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0,196,186, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +112,197,186, 2, 0, 0, 0, 0,144,194,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2010,8 +1389,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0, 53,143, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,160, 51,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,112,197,186, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,196,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,123, 1, 0, 0, 18, 0, 0, 0,227, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,227, 1, 0, 0, 18, 0, 0, 0,123, 1, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 0,124,146, 72, 0, 0, 0, 66, 10,215, 35, 60, 0, 0,200, 66,105, 0, 0, 0, 0, 0, 0, 0, @@ -2020,16 +1399,16 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0,228, 1,124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0, 96, 54,143, 22, 1, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, -128, 61,143, 22, 1, 0, 0, 0, 0, 49,143, 22, 1, 0, 0, 0, 64, 50,143, 22, 1, 0, 0, 0, 0, 53,143, 22, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0,224,198,186, 2, 0, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, + 48,206,186, 2, 0, 0, 0, 0, 80,193,186, 2, 0, 0, 0, 0,144,194,186, 2, 0, 0, 0, 0,112,197,186, 2, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,144, 55,143, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,240, 56,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, + 0, 0, 0, 0, 0, 0,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 16,200,186, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,128,201,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,138, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, @@ -2038,8 +1417,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,240, 56,143, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 55,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,128,201,186, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,200,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2048,7 +1427,7 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 55, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 80, 58,143, 22, 1, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, 80, 58,143, 22, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,240,202,186, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0,240,202,186, 2, 0, 0, 0, 0, 156, 0, 0, 0, 1, 0, 0, 0,103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128, 226,215,163,188, 0, 0, 0,128, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, @@ -2073,141 +1452,72 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 1, 0, 0,128, 61,143, 22, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 96, 54,143, 22, 1, 0, 0, 0,144, 55,143, 22, 1, 0, 0, 0,240, 56,143, 22, 1, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, + 68, 65, 84, 65, 32, 1, 0, 0, 48,206,186, 2, 0, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +224,198,186, 2, 0, 0, 0, 0, 16,200,186, 2, 0, 0, 0, 0,128,201,186, 2, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,194,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, 159, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, -224, 62,143, 22, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,192, 97,143, 22, 1, 0, 0, 0, 0, 11,143, 22, 1, 0, 0, 0, -112,242,142, 22, 1, 0, 0, 0, 16,242,142, 22, 1, 0, 0, 0,176,241,142, 22, 1, 0, 0, 0,208,242,142, 22, 1, 0, 0, 0, +144,207,186, 2, 0, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,176,243,186, 2, 0, 0, 0, 0,208,153,186, 2, 0, 0, 0, 0, + 96,127,186, 2, 0, 0, 0, 0, 0,127,186, 2, 0, 0, 0, 0,160,126,186, 2, 0, 0, 0, 0,192,127,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 27, 6, 0, 0, 0, 0, 0, 0,147, 1, 0, 0, 1, 1, 27, 3,148, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0,144, 5, 15, 3, 1, 0, 0, 0, 48, 83,143, 22, 1, 0, 0, 0,192, 96,143, 22, 1, 0, 0, 0, -192, 63,143, 22, 1, 0, 0, 0,160, 78,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -224, 29,141, 22, 1, 0, 0, 0,208,228,152, 22, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,192, 63,143, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 32, 65,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,228,186, 2, 0, 0, 0, 0,160,242,186, 2, 0, 0, 0, 0, +112,208,186, 2, 0, 0, 0, 0,240,223,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,112,208,186, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,224,209,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,192, 70, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 27, 3, 26, 0, 27, 3, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 27, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 3, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,176, 13, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 32, 65,143, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,128, 66,143, 22, 1, 0, 0, 0,192, 63,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,224,209,186, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 80,211,186, 2, 0, 0, 0, 0,112,208,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 1, 3, 0, 0, 26, 0, 0, 0,147, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,122, 1, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 16, 10, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,128, 66,143, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,224, 67,143, 22, 1, 0, 0, 0, 32, 65,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80,211,186, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,192,212,186, 2, 0, 0, 0, 0,224,209,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 27, 6, 0, 0, 26, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0,224, 11, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,224, 67,143, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,160, 78,143, 22, 1, 0, 0, 0,128, 66,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,192,212,186, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,240,223,186, 2, 0, 0, 0, 0, 80,211,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 0,124,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 0,124,195, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0, 13, 1, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0, 13, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0, 14, 1,163, 0,252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 6, 0, 0, 27, 6, 0, 0, 26, 0, 0, 0,147, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 80, 7, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 64, 69,143, 22, 1, 0, 0, 0, 16, 77,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 64, 69,143, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0,208, 70,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,111, 98,106,101, 99,116, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,111, 98,106,101, 99,116, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 84,114, 97,110,115,102,111,114,109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,254,163, 0,104, 1, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0,208, 70,143, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 96, 72,143, 22, 1, 0, 0, 0, - 64, 69,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, - 84, 95,103,112,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, - 84, 95,103,112,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71,114,101, 97,115,101, 32, 80, -101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78,255,163, 0, 58, 0, - 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 96, 72,143, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0,240, 73,143, 22, 1, 0, 0, 0,208, 70,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100,118,105,101,119, 95,112,114,111,112,101,114,116, -105,101,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100,118,105,101,119, 95,112,114,111,112,101,114,116, -105,101,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 86,105,101,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,149,254,163, 0, 59, 1, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0,240, 73,143, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,128, 75,143, 22, 1, 0, 0, 0, - 96, 72,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, - 84, 95, 51,100,118,105,101,119, 95,100,105,115,112,108, 97,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, - 84, 95, 51,100,118,105,101,119, 95,100,105,115,112,108, 97,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,115,112,108, 97,121, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,255,163, 0, 0, 0, - 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,128, 75,143, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0, 16, 77,143, 22, 1, 0, 0, 0,240, 73,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 98, 97, 99,107,103,114,111,117,110,100, 95,105,109, 97, -103,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 98, 97, 99,107,103,114,111,117,110,100, 95,105,109, 97, -103,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 66, 97, 99,107,103,114,111,117,110,100, 32, 73,109, 97,103,101, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,255,163, 0, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0, 16, 77,143, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128, 75,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, - 84, 95,116,114, 97,110,115,102,111,114,109, 95,111,114,105,101,110,116, 97,116,105,111,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, - 84, 95,116,114, 97,110,115,102,111,114,109, 95,111,114,105,101,110,116, 97,116,105,111,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,114, 97,110,115,102,111,114, -109, 32, 79,114,105,101,110,116, 97,116,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,255,163, 0, 0, 0, - 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,160, 78,143, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 67,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,240,223,186, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,212,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 27, 6, 0, 0, 26, 0, 0, 0,147, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 3,122, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,112, 6, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,143, 22, 1, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, 0, 80,143, 22, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 96,225,186, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, 96,225,186, 2, 0, 0, 0, 0, 156, 0, 0, 0, 1, 0, 0, 0, 37,101,230, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,210, 71,114, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,154, 65,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128, 72, 1, 77,190, 0, 0, 0,128,221,149, 47, 63, 86,126,162,190, 8,165, 39, 63, 0, 0, 0, 0, 51, 70, 58, 63,225,251,159, 62, @@ -2232,17 +1542,17 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190, 1, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 1, 0, 0, 48, 83,143, 22, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, 80, 87,143, 22, 1, 0, 0, 0, + 68, 65, 84, 65, 32, 1, 0, 0,160,228,186, 2, 0, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0,224,232,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,194,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -144, 84,143, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,240, 85,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,230,186, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,112,231,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,192, 59, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,238, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,189, 68, 0, 0,200, 65, 0,224,189, 68, 0, 0,200, 65, @@ -2252,7 +1562,7 @@ char datatoc_B_blend[]= { 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -240, 85,143, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 84,143, 22, 1, 0, 0, 0, +112,231,186, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230,186, 2, 0, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, 0, 0, 32,193, 0, 0, 0, 68, 40, 57, 61,194,146,211, 11, 68,174,122,214, 66, 82, 97,202, 67, 222, 2, 0, 0,239, 2, 0, 0, 18, 0, 0, 0,121, 1, 0, 0, 0, 0, 0, 0,221, 2, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,221, 2, 0, 0, 18, 0, 0, 0,121, 1, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,250, 70, 0, 0,250, 70, @@ -2262,17 +1572,17 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, - 80, 87,143, 22, 1, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0,208, 92,143, 22, 1, 0, 0, 0, 48, 83,143, 22, 1, 0, 0, 0, -144, 84,143, 22, 1, 0, 0, 0,240, 85,143, 22, 1, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +224,232,186, 2, 0, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0,144,238,186, 2, 0, 0, 0, 0,160,228,186, 2, 0, 0, 0, 0, + 0,230,186, 2, 0, 0, 0, 0,112,231,186, 2, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48,186,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,242,199, 78, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 64, 85,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,242,199, 78, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176, 88,143, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 16, 90,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 64,234,186, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,176,235,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0,224,189, 68, 0, 0,208, 65, 0,224,189, 68, 0, 0,208, 65, 0, 0,128, 63, 0, 0,128, 63, @@ -2281,8 +1591,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 27, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 16, 90,143, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,112, 91,143, 22, 1, 0, 0, 0,176, 88,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176,235,186, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 32,237,186, 2, 0, 0, 0, 0, 64,234,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2291,8 +1601,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,112, 91,143, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 90,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 32,237,186, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,235,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 0,124,146, 72, 0, 0, 0, 66, 10,215, 35, 60, 0, 0,200, 66, @@ -2301,16 +1611,16 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,163, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0,208, 92,143, 22, 1, 0, 0, 0, -163, 0, 0, 0, 1, 0, 0, 0,192, 96,143, 22, 1, 0, 0, 0, 80, 87,143, 22, 1, 0, 0, 0,176, 88,143, 22, 1, 0, 0, 0, -112, 91,143, 22, 1, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0,144,238,186, 2, 0, 0, 0, 0, +163, 0, 0, 0, 1, 0, 0, 0,160,242,186, 2, 0, 0, 0, 0,224,232,186, 2, 0, 0, 0, 0, 64,234,186, 2, 0, 0, 0, 0, + 32,237,186, 2, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 0, 94,143, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 96, 95,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +192,239,186, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 48,241,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, @@ -2320,7 +1630,7 @@ char datatoc_B_blend[]= { 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 96, 95,143, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94,143, 22, 1, 0, 0, 0, + 48,241,186, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,239,186, 2, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66, @@ -2330,50 +1640,50 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0, -192, 96,143, 22, 1, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 92,143, 22, 1, 0, 0, 0, - 0, 94,143, 22, 1, 0, 0, 0, 96, 95,143, 22, 1, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +160,242,186, 2, 0, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,238,186, 2, 0, 0, 0, 0, +192,239,186, 2, 0, 0, 0, 0, 48,241,186, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, -192, 97,143, 22, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 64,123,143, 22, 1, 0, 0, 0,224, 62,143, 22, 1, 0, 0, 0, - 80,241,142, 22, 1, 0, 0, 0,112,239,142, 22, 1, 0, 0, 0,240,240,142, 22, 1, 0, 0, 0,176,241,142, 22, 1, 0, 0, 0, +176,243,186, 2, 0, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 16, 14,187, 2, 0, 0, 0, 0,144,207,186, 2, 0, 0, 0, 0, + 64,126,186, 2, 0, 0, 0, 0, 96,124,186, 2, 0, 0, 0, 0,224,125,186, 2, 0, 0, 0, 0,160,126,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 6, 0, 0,149, 1, 0, 0, 21, 4, 0, 0, 16, 16, 28, 6,129, 2, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 15, 3, 1, 0, 0, 0, 96,101,143, 22, 1, 0, 0, 0, 64,122,143, 22, 1, 0, 0, 0, -160, 98,143, 22, 1, 0, 0, 0, 0,100,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -240,179,137, 22, 1, 0, 0, 0, 96,214, 18, 26, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,160, 98,143, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0,100,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 68, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,247,186, 2, 0, 0, 0, 0, 0, 13,187, 2, 0, 0, 0, 0, +144,244,186, 2, 0, 0, 0, 0, 0,246,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,144,244,186, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0,246,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128,195, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,189, 68, 0, 0,200, 65, 0,224,189, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 28, 6, 26, 0, 28, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 6, 0, 0,149, 1, 0, 0,174, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,192, 30, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0,100,143, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 98,143, 22, 1, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0,246,186, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,244,186, 2, 0, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, 0, 0, 32,193, 0, 0, 0, 68, 80, 64,199,195, 40,160, 99, 68,192, 3, 91, 64,248, 73,254, 67, 11, 6, 0, 0, 28, 6, 0, 0, 18, 0, 0, 0,102, 2, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 18, 0, 0, 0,102, 2, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,250, 70, 0, 0,250, 70,205,204, 76, 62, 72,225,154, 63, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 28, 6,103, 2, 11, 6, 85, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 6, 0, 0,175, 1, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 6,103, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,224, 29, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, 96,101,143, 22, 1, 0, 0, 0, -173, 0, 0, 0, 1, 0, 0, 0,224,106,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,112,247,186, 2, 0, 0, 0, 0, +173, 0, 0, 0, 1, 0, 0, 0, 32,253,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,186,129, 3, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 85,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,253, 66, 86, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,192,102,143, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 32,104,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, 0, 0,216, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,208,248,186, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 64,250,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0,224,189, 68, 0, 0,208, 65, 0,224,189, 68, 0, 0,208, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, @@ -2382,8 +1692,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 27, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 32,104,143, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -128,105,143, 22, 1, 0, 0, 0,192,102,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 64,250,186, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +176,251,186, 2, 0, 0, 0, 0,208,248,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2392,8 +1702,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,128,105,143, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 32,104,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176,251,186, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 64,250,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 0,124,146, 72, 0, 0, 0, 66, 10,215, 35, 60, 0, 0,200, 66,105, 0, 0, 0, 0, 0, 0, 0, @@ -2402,16 +1712,16 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0,240, 5,163, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0,224,106,143, 22, 1, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, - 32,118,143, 22, 1, 0, 0, 0, 96,101,143, 22, 1, 0, 0, 0,192,102,143, 22, 1, 0, 0, 0,128,105,143, 22, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0, 32,253,186, 2, 0, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, +192, 8,187, 2, 0, 0, 0, 0,112,247,186, 2, 0, 0, 0, 0,208,248,186, 2, 0, 0, 0, 0,176,251,186, 2, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 16,108,143, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,112,109,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, + 0, 0, 0, 0, 0, 0,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80,254,186, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,192,255,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,157, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,231, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, @@ -2420,8 +1730,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,112,109,143, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,208,110,143, 22, 1, 0, 0, 0, 16,108,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,192,255,186, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 48, 1,187, 2, 0, 0, 0, 0, 80,254,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, @@ -2430,8 +1740,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 24, 2, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,208,110,143, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 48,112,143, 22, 1, 0, 0, 0,112,109,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 48, 1,187, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,160, 2,187, 2, 0, 0, 0, 0,192,255,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, @@ -2440,8 +1750,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 48,112,143, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,144,113,143, 22, 1, 0, 0, 0,208,110,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,160, 2,187, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 16, 4,187, 2, 0, 0, 0, 0, 48, 1,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128,142,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 0, 26,196, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, @@ -2450,8 +1760,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,144,113,143, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,112,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 16, 4,187, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 2,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2460,7 +1770,7 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 4, 24, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,240,114,143, 22, 1, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0,240,114,143, 22, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,128, 5,187, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0,128, 5,187, 2, 0, 0, 0, 0, 156, 0, 0, 0, 1, 0, 0, 0, 1, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,165, 7, 36, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128, 226,215,163,188, 0, 0, 0,128, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, @@ -2485,17 +1795,17 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 1, 0, 0, 32,118,143, 22, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, 64,122,143, 22, 1, 0, 0, 0, -224,106,143, 22, 1, 0, 0, 0, 16,108,143, 22, 1, 0, 0, 0,144,113,143, 22, 1, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, + 68, 65, 84, 65, 32, 1, 0, 0,192, 8,187, 2, 0, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, 0, 13,187, 2, 0, 0, 0, 0, + 32,253,186, 2, 0, 0, 0, 0, 80,254,186, 2, 0, 0, 0, 0, 16, 4,187, 2, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,194,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -128,119,143, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,224,120,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 32, 10,187, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,144, 11,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, @@ -2505,7 +1815,7 @@ char datatoc_B_blend[]= { 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -224,120,143, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,119,143, 22, 1, 0, 0, 0, +144, 11,187, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 10,187, 2, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66, @@ -2515,56 +1825,56 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0, - 64,122,143, 22, 1, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,118,143, 22, 1, 0, 0, 0, -128,119,143, 22, 1, 0, 0, 0,224,120,143, 22, 1, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 13,187, 2, 0, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 8,187, 2, 0, 0, 0, 0, + 32, 10,187, 2, 0, 0, 0, 0,144, 11,187, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, - 64,123,143, 22, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 97,143, 22, 1, 0, 0, 0, -240,237,142, 22, 1, 0, 0, 0, 80,241,142, 22, 1, 0, 0, 0, 16,242,142, 22, 1, 0, 0, 0,112,242,142, 22, 1, 0, 0, 0, + 16, 14,187, 2, 0, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,243,186, 2, 0, 0, 0, 0, +224,122,186, 2, 0, 0, 0, 0, 64,126,186, 2, 0, 0, 0, 0, 0,127,186, 2, 0, 0, 0, 0, 96,127,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 2, 0, 0, 0, 0, 0, 0,147, 1, 0, 0, 6, 6, 0, 3,148, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0,176, 22, 15, 3, 1, 0, 0, 0, 64,128,143, 22, 1, 0, 0, 0,192,152,143, 22, 1, 0, 0, 0, - 32,124,143, 22, 1, 0, 0, 0,224,126,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176,244, 36, 3, 1, 0, 0, 0,144,205,253, 24, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 32,124,143, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,128,125,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,202, 67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 19,187, 2, 0, 0, 0, 0,160, 44,187, 2, 0, 0, 0, 0, +240, 14,187, 2, 0, 0, 0, 0,208, 17,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,240, 14,187, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 96, 16,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,202, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 64, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 63, 68, 0, 0,200, 65, 0,192, 63, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 0, 3, 26, 0, 0, 3, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 32, 28, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,128,125,143, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,224,126,143, 22, 1, 0, 0, 0, 32,124,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 96, 16,187, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,208, 17,187, 2, 0, 0, 0, 0,240, 14,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0,147, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 3, 0, 1, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0,112, 24, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,224,126,143, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,125,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,208, 17,187, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 16,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 67, 0, 0,128,191, 0, 0, 0, 64, 0, 0,116,190, 0,128,158, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0,122, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 2, 0, 0, 26, 0, 0, 0,147, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,122, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,144, 23, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,168, 0, 0, 0, 64,128,143, 22, 1, 0, 0, 0, -167, 0, 0, 0, 1, 0, 0, 0,224,131,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,168, 0, 0, 0, 64, 19,187, 2, 0, 0, 0, 0, +167, 0, 0, 0, 1, 0, 0, 0, 16, 23,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48,186,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 32,129,143, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,128,130,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 68, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 48, 20,187, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,160, 21,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 64, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,189, 68, 0, 0,200, 65, 0,224,189, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, @@ -2573,8 +1883,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,128,130,143, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,129,143, 22, 1, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,160, 21,187, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 20,187, 2, 0, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, 0, 0, 32,193, 0, 0, 0, 68,144, 82, 89,194, 41,149, 13, 68,176,122,214, 66, 82, 97,202, 67,239, 2, 0, 0, 0, 3, 0, 0, 18, 0, 0, 0,121, 1, 0, 0, 0, 0, 0, 0,238, 2, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,238, 2, 0, 0, 18, 0, 0, 0,121, 1, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,250, 70, 0, 0,250, 70,205,204, 76, 62, 72,225,154, 63, @@ -2583,18 +1893,18 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,122, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,224,131,143, 22, 1, 0, 0, 0, -173, 0, 0, 0, 1, 0, 0, 0, 96,137,143, 22, 1, 0, 0, 0, 64,128,143, 22, 1, 0, 0, 0, 32,129,143, 22, 1, 0, 0, 0, -128,130,143, 22, 1, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, 16, 23,187, 2, 0, 0, 0, 0, +173, 0, 0, 0, 1, 0, 0, 0,192, 28,187, 2, 0, 0, 0, 0, 64, 19,187, 2, 0, 0, 0, 0, 48, 20,187, 2, 0, 0, 0, 0, +160, 21,187, 2, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,186,129, 3, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 85,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,227, 78, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 64,133,143, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -160,134,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, 0, 0,216, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,112, 24,187, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +224, 25,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0,224,189, 68, 0, 0,208, 65, 0,224,189, 68, 0, 0,208, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, @@ -2603,8 +1913,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 27, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,160,134,143, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0,136,143, 22, 1, 0, 0, 0, 64,133,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,224, 25,187, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 80, 27,187, 2, 0, 0, 0, 0,112, 24,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2613,8 +1923,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0,136,143, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,160,134,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80, 27,187, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,224, 25,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 0,124,146, 72, 0, 0, 0, 66, 10,215, 35, 60, 0, 0,200, 66,105, 0, 0, 0, 0, 0, 0, 0, @@ -2623,16 +1933,16 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0,240, 5,163, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0, 96,137,143, 22, 1, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, -160,148,143, 22, 1, 0, 0, 0,224,131,143, 22, 1, 0, 0, 0, 64,133,143, 22, 1, 0, 0, 0, 0,136,143, 22, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0,192, 28,187, 2, 0, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, + 96, 40,187, 2, 0, 0, 0, 0, 16, 23,187, 2, 0, 0, 0, 0,112, 24,187, 2, 0, 0, 0, 0, 80, 27,187, 2, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,144,138,143, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,240,139,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, + 0, 0, 0, 0, 0, 0,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,240, 29,187, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 96, 31,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,157, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,231, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, @@ -2641,8 +1951,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,240,139,143, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 80,141,143, 22, 1, 0, 0, 0,144,138,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 96, 31,187, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,208, 32,187, 2, 0, 0, 0, 0,240, 29,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, @@ -2651,8 +1961,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 24, 2, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80,141,143, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,176,142,143, 22, 1, 0, 0, 0,240,139,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,208, 32,187, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 64, 34,187, 2, 0, 0, 0, 0, 96, 31,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, @@ -2661,8 +1971,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176,142,143, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 16,144,143, 22, 1, 0, 0, 0, 80,141,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 64, 34,187, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,176, 35,187, 2, 0, 0, 0, 0,208, 32,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128,142,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 0, 26,196, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, @@ -2671,8 +1981,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 16,144,143, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,142,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176, 35,187, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 34,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2681,7 +1991,7 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 4, 24, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,112,145,143, 22, 1, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0,112,145,143, 22, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 32, 37,187, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, 32, 37,187, 2, 0, 0, 0, 0, 156, 0, 0, 0, 1, 0, 0, 0, 1, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,165, 7, 36, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128, 226,215,163,188, 0, 0, 0,128, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, @@ -2706,17 +2016,17 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 1, 0, 0,160,148,143, 22, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0,192,152,143, 22, 1, 0, 0, 0, - 96,137,143, 22, 1, 0, 0, 0,144,138,143, 22, 1, 0, 0, 0, 16,144,143, 22, 1, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, + 68, 65, 84, 65, 32, 1, 0, 0, 96, 40,187, 2, 0, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0,160, 44,187, 2, 0, 0, 0, 0, +192, 28,187, 2, 0, 0, 0, 0,240, 29,187, 2, 0, 0, 0, 0,176, 35,187, 2, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,194,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 0,150,143, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 96,151,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +192, 41,187, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 48, 43,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, @@ -2726,7 +2036,7 @@ char datatoc_B_blend[]= { 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 96,151,143, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,150,143, 22, 1, 0, 0, 0, + 48, 43,187, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 41,187, 2, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66, @@ -2736,865 +2046,497 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0, -192,152,143, 22, 1, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,148,143, 22, 1, 0, 0, 0, - 0,150,143, 22, 1, 0, 0, 0, 96,151,143, 22, 1, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +160, 44,187, 2, 0, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 40,187, 2, 0, 0, 0, 0, +192, 41,187, 2, 0, 0, 0, 0, 48, 43,187, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 83, 78, 0, 0,208, 0, 0, 0, - 64,154,143, 22, 1, 0, 0, 0,190, 0, 0, 0, 1, 0, 0, 0, 48, 86,144, 22, 1, 0, 0, 0,224,236,142, 22, 1, 0, 0, 0, + 64, 46,187, 2, 0, 0, 0, 0,190, 0, 0, 0, 1, 0, 0, 0,160,175,187, 2, 0, 0, 0, 0,208,121,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 68,101,102, 97,117,108,116, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,155,143, 22, 1, 0, 0, 0, -112,159,143, 22, 1, 0, 0, 0,208,159,143, 22, 1, 0, 0, 0, 48,166,143, 22, 1, 0, 0, 0,144,166,143, 22, 1, 0, 0, 0, -144, 55,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,186,129, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 12, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,155,180, 21, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0, 80,155,143, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,176,155,143, 22, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 47,187, 2, 0, 0, 0, 0, +112, 51,187, 2, 0, 0, 0, 0,208, 51,187, 2, 0, 0, 0, 0, 64, 59,187, 2, 0, 0, 0, 0,176, 59,187, 2, 0, 0, 0, 0, +208,143,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 85,192, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 13, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,208, 80,113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0, 80, 47,187, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,176, 47,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, -176,155,143, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 16,156,143, 22, 1, 0, 0, 0, 80,155,143, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 16,156,143, 22, 1, 0, 0, 0, -191, 0, 0, 0, 1, 0, 0, 0,112,156,143, 22, 1, 0, 0, 0,176,155,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128, 7, 49, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,112,156,143, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, -208,156,143, 22, 1, 0, 0, 0, 16,156,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0,208,156,143, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 48,157,143, 22, 1, 0, 0, 0, -112,156,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, - 48,157,143, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,144,157,143, 22, 1, 0, 0, 0,208,156,143, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,144,157,143, 22, 1, 0, 0, 0, -191, 0, 0, 0, 1, 0, 0, 0,240,157,143, 22, 1, 0, 0, 0, 48,157,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8, 6, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,240,157,143, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, - 80,158,143, 22, 1, 0, 0, 0,144,157,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 6, 22, 4, 1, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0, 80,158,143, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,176,158,143, 22, 1, 0, 0, 0, -240,157,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 6, 52, 3, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, -176,158,143, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 16,159,143, 22, 1, 0, 0, 0, 80,158,143, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 52, 3, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 16,159,143, 22, 1, 0, 0, 0, -191, 0, 0, 0, 1, 0, 0, 0,112,159,143, 22, 1, 0, 0, 0,176,158,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 88, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,112,159,143, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 16,159,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 6, 88, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,208,159,143, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 48,160,143, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,176,155,143, 22, 1, 0, 0, 0, 16,156,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 48,160,143, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,144,160,143, 22, 1, 0, 0, 0, -208,159,143, 22, 1, 0, 0, 0,176,155,143, 22, 1, 0, 0, 0,208,156,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,144,160,143, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,240,160,143, 22, 1, 0, 0, 0, - 48,160,143, 22, 1, 0, 0, 0, 16,156,143, 22, 1, 0, 0, 0, 48,157,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,240,160,143, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 80,161,143, 22, 1, 0, 0, 0, -144,160,143, 22, 1, 0, 0, 0,208,156,143, 22, 1, 0, 0, 0, 48,157,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 80,161,143, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,176,161,143, 22, 1, 0, 0, 0, -240,160,143, 22, 1, 0, 0, 0, 80,155,143, 22, 1, 0, 0, 0,144,157,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,176,161,143, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 16,162,143, 22, 1, 0, 0, 0, - 80,161,143, 22, 1, 0, 0, 0,112,156,143, 22, 1, 0, 0, 0,144,157,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 16,162,143, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,112,162,143, 22, 1, 0, 0, 0, -176,161,143, 22, 1, 0, 0, 0,208,156,143, 22, 1, 0, 0, 0,240,157,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,112,162,143, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,208,162,143, 22, 1, 0, 0, 0, - 16,162,143, 22, 1, 0, 0, 0, 48,157,143, 22, 1, 0, 0, 0,240,157,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,208,162,143, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 48,163,143, 22, 1, 0, 0, 0, -112,162,143, 22, 1, 0, 0, 0,144,157,143, 22, 1, 0, 0, 0, 80,158,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 48,163,143, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,144,163,143, 22, 1, 0, 0, 0, -208,162,143, 22, 1, 0, 0, 0,240,157,143, 22, 1, 0, 0, 0, 80,158,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,144,163,143, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,240,163,143, 22, 1, 0, 0, 0, - 48,163,143, 22, 1, 0, 0, 0, 48,157,143, 22, 1, 0, 0, 0,176,158,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,240,163,143, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 80,164,143, 22, 1, 0, 0, 0, -144,163,143, 22, 1, 0, 0, 0,112,156,143, 22, 1, 0, 0, 0,176,158,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 80,164,143, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,176,164,143, 22, 1, 0, 0, 0, -240,163,143, 22, 1, 0, 0, 0, 80,158,143, 22, 1, 0, 0, 0,176,158,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,176,164,143, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 16,165,143, 22, 1, 0, 0, 0, - 80,164,143, 22, 1, 0, 0, 0, 80,155,143, 22, 1, 0, 0, 0, 16,159,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 16,165,143, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,112,165,143, 22, 1, 0, 0, 0, -176,164,143, 22, 1, 0, 0, 0,208,156,143, 22, 1, 0, 0, 0, 16,159,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,112,165,143, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,208,165,143, 22, 1, 0, 0, 0, - 16,165,143, 22, 1, 0, 0, 0,240,157,143, 22, 1, 0, 0, 0,112,159,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,208,165,143, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 48,166,143, 22, 1, 0, 0, 0, -112,165,143, 22, 1, 0, 0, 0,144,157,143, 22, 1, 0, 0, 0,112,159,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 48,166,143, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208,165,143, 22, 1, 0, 0, 0, 16,159,143, 22, 1, 0, 0, 0,112,159,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,160, 0, 0, 0,144,166,143, 22, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 48,170,143, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,208,156,143, 22, 1, 0, 0, 0,176,155,143, 22, 1, 0, 0, 0, 16,156,143, 22, 1, 0, 0, 0, - 48,157,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 23, 4, 0, 0, 49, 4, 0, 0, - 7, 7,129, 7, 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0,240, 35, 15, 3, 1, 0, 0, 0,176, 85,144, 22, 1, 0, 0, 0, -176, 85,144, 22, 1, 0, 0, 0,112,167,143, 22, 1, 0, 0, 0,208,168,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,192, 38, 55, 25, 1, 0, 0, 0,192,145,136, 22, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -112,167,143, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,208,168,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,128,161, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 32,240, 68, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,129, 7, 26, 0,129, 7, 26, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, - 23, 4, 0, 0, 48, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 7, 26, 0, 2, 0, 1, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176, 37, 15, 3, 1, 0, 0, 0, 96,151, 21, 26, 1, 0, 0, 0, - 96,151, 21, 26, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,171, 20, 26, 1, 0, 0, 0, - 48, 14, 21, 26, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -208,168,143, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,167,143, 22, 1, 0, 0, 0, +176, 47,187, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 16, 48,187, 2, 0, 0, 0, 0, 80, 47,187, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 16, 48,187, 2, 0, 0, 0, 0, +191, 0, 0, 0, 1, 0, 0, 0,112, 48,187, 2, 0, 0, 0, 0,176, 47,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +118, 7, 97, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,112, 48,187, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, +208, 48,187, 2, 0, 0, 0, 0, 16, 48,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0,208, 48,187, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 48, 49,187, 2, 0, 0, 0, 0, +112, 48,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, + 48, 49,187, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,144, 49,187, 2, 0, 0, 0, 0,208, 48,187, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 70, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,144, 49,187, 2, 0, 0, 0, 0, +191, 0, 0, 0, 1, 0, 0, 0,240, 49,187, 2, 0, 0, 0, 0, 48, 49,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 6, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,240, 49,187, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, + 80, 50,187, 2, 0, 0, 0, 0,144, 49,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 70, 4, 1, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0, 80, 50,187, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,176, 50,187, 2, 0, 0, 0, 0, +240, 49,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 92, 3, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, +176, 50,187, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 16, 51,187, 2, 0, 0, 0, 0, 80, 50,187, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 92, 3, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 16, 51,187, 2, 0, 0, 0, 0, +191, 0, 0, 0, 1, 0, 0, 0,112, 51,187, 2, 0, 0, 0, 0,176, 50,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 96, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,112, 51,187, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16, 51,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 96, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,208, 51,187, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 64, 52,187, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,176, 47,187, 2, 0, 0, 0, 0, 16, 48,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 64, 52,187, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,176, 52,187, 2, 0, 0, 0, 0, +208, 51,187, 2, 0, 0, 0, 0,176, 47,187, 2, 0, 0, 0, 0,208, 48,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,176, 52,187, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 32, 53,187, 2, 0, 0, 0, 0, + 64, 52,187, 2, 0, 0, 0, 0, 16, 48,187, 2, 0, 0, 0, 0, 48, 49,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 32, 53,187, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,144, 53,187, 2, 0, 0, 0, 0, +176, 52,187, 2, 0, 0, 0, 0,208, 48,187, 2, 0, 0, 0, 0, 48, 49,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,144, 53,187, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0, 54,187, 2, 0, 0, 0, 0, + 32, 53,187, 2, 0, 0, 0, 0, 80, 47,187, 2, 0, 0, 0, 0,144, 49,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 0, 54,187, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,112, 54,187, 2, 0, 0, 0, 0, +144, 53,187, 2, 0, 0, 0, 0,112, 48,187, 2, 0, 0, 0, 0,144, 49,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,112, 54,187, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,224, 54,187, 2, 0, 0, 0, 0, + 0, 54,187, 2, 0, 0, 0, 0,208, 48,187, 2, 0, 0, 0, 0,240, 49,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,224, 54,187, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 80, 55,187, 2, 0, 0, 0, 0, +112, 54,187, 2, 0, 0, 0, 0, 48, 49,187, 2, 0, 0, 0, 0,240, 49,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 80, 55,187, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,192, 55,187, 2, 0, 0, 0, 0, +224, 54,187, 2, 0, 0, 0, 0,144, 49,187, 2, 0, 0, 0, 0, 80, 50,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,192, 55,187, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 48, 56,187, 2, 0, 0, 0, 0, + 80, 55,187, 2, 0, 0, 0, 0,240, 49,187, 2, 0, 0, 0, 0, 80, 50,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 48, 56,187, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,160, 56,187, 2, 0, 0, 0, 0, +192, 55,187, 2, 0, 0, 0, 0, 48, 49,187, 2, 0, 0, 0, 0,176, 50,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,160, 56,187, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 16, 57,187, 2, 0, 0, 0, 0, + 48, 56,187, 2, 0, 0, 0, 0,112, 48,187, 2, 0, 0, 0, 0,176, 50,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 16, 57,187, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,128, 57,187, 2, 0, 0, 0, 0, +160, 56,187, 2, 0, 0, 0, 0, 80, 50,187, 2, 0, 0, 0, 0,176, 50,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,128, 57,187, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,240, 57,187, 2, 0, 0, 0, 0, + 16, 57,187, 2, 0, 0, 0, 0, 80, 47,187, 2, 0, 0, 0, 0, 16, 51,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,240, 57,187, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 96, 58,187, 2, 0, 0, 0, 0, +128, 57,187, 2, 0, 0, 0, 0,208, 48,187, 2, 0, 0, 0, 0, 16, 51,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 96, 58,187, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,208, 58,187, 2, 0, 0, 0, 0, +240, 57,187, 2, 0, 0, 0, 0,240, 49,187, 2, 0, 0, 0, 0,112, 51,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,208, 58,187, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 64, 59,187, 2, 0, 0, 0, 0, + 96, 58,187, 2, 0, 0, 0, 0,144, 49,187, 2, 0, 0, 0, 0,112, 51,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 64, 59,187, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +208, 58,187, 2, 0, 0, 0, 0, 16, 51,187, 2, 0, 0, 0, 0,112, 51,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,160, 0, 0, 0,176, 59,187, 2, 0, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,112, 63,187, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,208, 48,187, 2, 0, 0, 0, 0,176, 47,187, 2, 0, 0, 0, 0, 16, 48,187, 2, 0, 0, 0, 0, + 48, 49,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 0, 0, 71, 4, 0, 0, 97, 4, 0, 0, + 7, 7,119, 7, 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0,240,105,162, 2, 0, 0, 0, 0, 16,175,187, 2, 0, 0, 0, 0, + 16,175,187, 2, 0, 0, 0, 0,144, 60,187, 2, 0, 0, 0, 0, 0, 62,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 96,201,201, 2, 0, 0, 0, 0, 0, 56,230, 2, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, +144, 60,187, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 62,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,224,162, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,238, 68, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,118, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,119, 7, 26, 0,119, 7, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 0, 0, + 71, 4, 0, 0, 96, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,119, 7, 26, 0, 2, 0, 1, 0, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,107,162, 2, 0, 0, 0, 0,112,113,131, 3, 0, 0, 0, 0, +112,113,131, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 55,200, 2, 0, 0, 0, 0, +208, 56,200, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, + 0, 62,187, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 60,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192, 0, 0, 0, 0, 112, 7, 0, 0,129, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,129, 7, 2, 0,112, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 49, 4, 0, 0, 49, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,208, 36, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, - 48,170,143, 22, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,240, 25,144, 22, 1, 0, 0, 0,144,166,143, 22, 1, 0, 0, 0, -144,157,143, 22, 1, 0, 0, 0, 80,158,143, 22, 1, 0, 0, 0,176,158,143, 22, 1, 0, 0, 0,112,156,143, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 9, 6, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 51, 3, 0, 0, 4, 4,120, 1, 52, 3, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 96, 32, 15, 3, 1, 0, 0, 0, 96, 17,144, 22, 1, 0, 0, 0,144, 24,144, 22, 1, 0, 0, 0, - 16,171,143, 22, 1, 0, 0, 0,112,172,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112,187,155, 22, 1, 0, 0, 0, 48,198,155, 22, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 16,171,143, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,112,172,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 67, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,188, 67, 0, 0, 0, 0, 0, 0,248, 65, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,119, 1, 0, 0, + 97, 4, 0, 0, 97, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,224,106,162, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59,200, 2, 0, 0, 0, 0, + 64, 61,200, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, +112, 63,187, 2, 0, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 80,113,187, 2, 0, 0, 0, 0,176, 59,187, 2, 0, 0, 0, 0, +144, 49,187, 2, 0, 0, 0, 0, 80, 50,187, 2, 0, 0, 0, 0,176, 50,187, 2, 0, 0, 0, 0,112, 48,187, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 0, 0,118, 7, 0, 0, 0, 0, 0, 0, 91, 3, 0, 0, 4, 4,118, 1, 92, 3, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 64,102,162, 2, 0, 0, 0, 0,144,104,187, 2, 0, 0, 0, 0,240,111,187, 2, 0, 0, 0, 0, + 80, 64,187, 2, 0, 0, 0, 0,192, 65,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 80, 61,230, 2, 0, 0, 0, 0,240, 71,230, 2, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80, 64,187, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,192, 65,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 67, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,187, 67, 0, 0, 0, 0, 0, 0,248, 65, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,117, 1, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,120, 1, 31, 0,120, 1, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 6, 0, 0,128, 7, 0, 0, 21, 3, 0, 0, 51, 3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 1, 31, 0, 3, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 16, 35, 15, 3, 1, 0, 0, 0, 0,117, 22, 26, 1, 0, 0, 0, 0,117, 22, 26, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 23, 22, 26, 1, 0, 0, 0,192, 32, 16, 26, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,112,172,143, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,171,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,179, 67, - 0,128, 64,196, 0, 0, 0, 0, 0, 0, 0, 0,252,127,179, 67,252,191, 64,196, 0, 0, 0, 0,103, 1, 0, 0,120, 1, 0, 0, - 18, 0, 0, 0, 20, 3, 0, 0, 0, 0, 0, 0,102, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,102, 1, 0, 0, - 18, 0, 0, 0, 20, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, - 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,120, 1, 21, 3,103, 1, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 96,119, 13, 3, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 9, 6, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 20, 3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 1, 21, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 64, 33, 15, 3, 1, 0, 0, 0,160, 63, 23, 26, 1, 0, 0, 0,144, 62,252, 24, 1, 0, 0, 0, -208,173,143, 22, 1, 0, 0, 0,208, 15,144, 22, 1, 0, 0, 0,176,205, 20, 26, 1, 0, 0, 0,192, 60, 21, 26, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,208,173,143, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0, 96,175,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 34, 15, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 67,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220,255,102, 1, 36, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0, 96,175,143, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,240,176,143, 22, 1, 0, 0, 0, -208,173,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, - 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, - 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255, 76, 1, 61, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,240,176,143, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0,128,178,143, 22, 1, 0, 0, 0, 96,175,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111,255, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0,128,178,143, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 16,180,143, 22, 1, 0, 0, 0, -240,176,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, - 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, - 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,109,101,110,115,105,111, -110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,165,254, 76, 1,178, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 16,180,143, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0,160,181,143, 22, 1, 0, 0, 0,128,178,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 65,110,116,105, 45, 65,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,254, 76, 1, 58, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0,160,181,143, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 48,183,143, 22, 1, 0, 0, 0, - 16,180,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, - 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, - 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,105,110,103, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,213,253, 76, 1,102, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 48,183,143, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0,192,184,143, 22, 1, 0, 0, 0,160,181,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 79,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,253, 76, 1,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0,192,184,143, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 80,186,143, 22, 1, 0, 0, 0, - 48,183,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, - 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, - 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,101,114,102,111,114,109, 97, -110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,253, 76, 1, 0, 0, - 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 80,186,143, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0,224,187,143, 22, 1, 0, 0, 0,192,184,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 80,111,115,116, 32, 80,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36,253, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0,224,187,143, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,112,189,143, 22, 1, 0, 0, 0, - 80,186,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, - 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, - 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,112, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,253, 76, 1, 0, 0, - 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,112,189,143, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0, 0,191,143, 22, 1, 0, 0, 0,224,187,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,117,110,105,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,117,110,105,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 85,110,105,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,255,114, 1, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0, 0,191,143, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 48, 0,144, 22, 1, 0, 0, 0, -112,189,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, - 95,107,101,121,105,110,103, 95,115,101,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, - 95,107,101,121,105,110,103, 95,115,101,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75,101,121,105,110,103, 32, 83, -101,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,213,254,114, 1, 69, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 48, 0,144, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0,192, 1,144, 22, 1, 0, 0, 0, 0,191,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,112,104,121,115,105, 99,115, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,112,104,121,115,105, 99,115, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 71,114, 97,118,105,116,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,153,254,114, 1, 36, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0,192, 1,144, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 80, 3,144, 22, 1, 0, 0, 0, - 48, 0,144, 22, 1, 0, 0, 0, 64, 47,243, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, + 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,118, 1, 31, 0,118, 1, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 0, 0,118, 7, 0, 0, 61, 3, 0, 0, 91, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118, 1, 31, 0, 4, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16,105,162, 2, 0, 0, 0, 0, 64, 93,133, 3, 0, 0, 0, 0, 64, 93,133, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 64,200, 2, 0, 0, 0, 0, 48, 67,200, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,192, 65,187, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 64,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,178, 67, + 0,128, 74,196, 0, 0, 0, 0, 0, 0, 0, 0,252,127,178, 67,252,191, 74,196, 0, 0, 0, 0,101, 1, 0, 0,118, 1, 0, 0, + 18, 0, 0, 0, 60, 3, 0, 0, 0, 0, 0, 0,100, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,100, 1, 0, 0, + 18, 0, 0, 0, 60, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, + 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,118, 1, 61, 3,101, 1, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +128,131,131, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 6, 0, 0,118, 7, 0, 0, 0, 0, 0, 0, 60, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118, 1, 61, 3, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 48,103,162, 2, 0, 0, 0, 0, 0,211,133, 3, 0, 0, 0, 0, 32,183,132, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 69,200, 2, 0, 0, 0, 0, 96, 72,200, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0,144,104,187, 2, 0, 0, 0, 0, +162, 0, 0, 0, 1, 0, 0, 0,240,111,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255,102, 1, 61, 0, - 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 80, 3,144, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0,224, 4,144, 22, 1, 0, 0, 0,192, 1,144, 22, 1, 0, 0, 0,192, 34,243, 24, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 48, 92,133, 3, 0, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,208,105,187, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 64,107,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 0,138, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, + 4, 0, 12, 4, 10, 0, 20, 1, 26, 0, 20, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111,255,102, 1, 0, 0, 0, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 64,107,187, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,208,105,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0,224, 4,144, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,112, 6,144, 22, 1, 0, 0, 0, - 80, 3,144, 22, 1, 0, 0, 0,128,241,242, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,109,101,110,115,105,111, -110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,165,254,102, 1,178, 0, - 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,112, 6,144, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0, 0, 8,144, 22, 1, 0, 0, 0,224, 4,144, 22, 1, 0, 0, 0,112,108,242, 24, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, 26, 0, 0, 0, 80, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 55, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 65,110,116,105, 45, 65,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +176,108,187, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0,176,108,187, 2, 0, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, +103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0,128, 63, +103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65, +237,122,111, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,128, 63, +103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,254,102, 1, 58, 0, 20, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +100, 32,222, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0, 0, 8,144, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,144, 9,144, 22, 1, 0, 0, 0, -112, 6,144, 22, 1, 0, 0, 0,160, 93,243, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,213,253,102, 1,102, 0, - 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,144, 9,144, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0, 32, 11,144, 22, 1, 0, 0, 0, 0, 8,144, 22, 1, 0, 0, 0,128, 98,243, 24, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, +240,111,187, 2, 0, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,104,187, 2, 0, 0, 0, 0, +208,105,187, 2, 0, 0, 0, 0, 64,107,187, 2, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, 7, 0,176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, + 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 80,113,187, 2, 0, 0, 0, 0, +194, 0, 0, 0, 1, 0, 0, 0,160,125,187, 2, 0, 0, 0, 0,112, 63,187, 2, 0, 0, 0, 0, 80, 47,187, 2, 0, 0, 0, 0, + 16, 51,187, 2, 0, 0, 0, 0,112, 51,187, 2, 0, 0, 0, 0,144, 49,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,255, 5, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 15, 15, 0, 6, 96, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, +144, 72,162, 2, 0, 0, 0, 0, 16,117,187, 2, 0, 0, 0, 0, 64,124,187, 2, 0, 0, 0, 0, 48,114,187, 2, 0, 0, 0, 0, +160,115,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 77,230, 2, 0, 0, 0, 0, + 32, 88,230, 2, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 48,114,187, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +160,115,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 0,192, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, + 4, 0, 12, 4, 10, 0, 0, 6, 26, 0, 0, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 26, 0, 6, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 96, 74,162, 2, 0, 0, 0, 0, 80, 23,134, 3, 0, 0, 0, 0, 80, 23,134, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16, 76,200, 2, 0, 0, 0, 0,144, 77,200, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,160,115,187, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 48,114,187, 2, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66, +112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,255, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,255, 5, 0, 0, 18, 0, 0, 0, 69, 0, 0, 0, + 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, + 4, 0, 0, 4, 8, 0, 0, 6, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 5, 0, 0, 26, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 70, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +128, 73,162, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,192, 79,200, 2, 0, 0, 0, 0, 0, 85,200, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0, 16,117,187, 2, 0, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0, + 64,124,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 79,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,253,102, 1,105, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 32,118,187, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +144,119,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 0,203, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, + 4, 0, 12, 4, 10, 0, 88, 6, 26, 0, 88, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 88, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0, 32, 11,144, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,176, 12,144, 22, 1, 0, 0, 0, -144, 9,144, 22, 1, 0, 0, 0, 64,105,243, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,101,114,102,111,114,109, 97, -110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,253,102, 1, 0, 0, - 0, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,144,119,187, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 32,118,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,176, 12,144, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0, 64, 14,144, 22, 1, 0, 0, 0, 32, 11,144, 22, 1, 0, 0, 0, 32,107,243, 24, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 80,111,115,116, 32, 80,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36,253,102, 1, 0, 0, 0, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 6, 0, 0, 26, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 88, 6, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0, 64, 14,144, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,208, 15,144, 22, 1, 0, 0, 0, -176, 12,144, 22, 1, 0, 0, 0,128,109,243, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,253,102, 1, 0, 0, - 20, 0, 0, 0, 4, 0, 7, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,121,187, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, 0,121,187, 2, 0, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, + 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,213,108, 66, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0,128, 63, + 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,213,108, 66, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65, +161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 91,138, 60, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,128, 63, + 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,213,108, 66, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,208, 15,144, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 14,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,115, 99,101,110,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 52,149,147, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,115, 99,101,110,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 99,101,110,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255,114, 1, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, + 64,124,187, 2, 0, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,117,187, 2, 0, 0, 0, 0, + 32,118,187, 2, 0, 0, 0, 0,144,119,187, 2, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, 7, 0,176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 1, 0, 0, 96, 17,144, 22, 1, 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0,144, 24,144, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, + 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,160,125,187, 2, 0, 0, 0, 0, +194, 0, 0, 0, 1, 0, 0, 0,208,143,187, 2, 0, 0, 0, 0, 80,113,187, 2, 0, 0, 0, 0, 80, 50,187, 2, 0, 0, 0, 0, +240, 49,187, 2, 0, 0, 0, 0, 48, 49,187, 2, 0, 0, 0, 0,176, 50,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 6, 0, 0,118, 7, 0, 0, 93, 3, 0, 0, 69, 4, 0, 0, 3, 3,118, 1,233, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, +224, 69,162, 2, 0, 0, 0, 0, 96,129,187, 2, 0, 0, 0, 0,112,142,187, 2, 0, 0, 0, 0,128,126,187, 2, 0, 0, 0, 0, +240,127,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176, 93,230, 2, 0, 0, 0, 0, +208,104,230, 2, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,128,126,187, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +240,127,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,163, 67, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 0,187, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,117, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0, 0, 66, 67, 0, 0,200, 65, 0, 0, 66, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, + 4, 0, 12, 4, 10, 0,118, 1, 26, 0,118, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 0, 0,118, 7, 0, 0, 44, 4, 0, 0, 69, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,118, 1, 26, 0, 8, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +176, 71,162, 2, 0, 0, 0, 0,240,163,138, 3, 0, 0, 0, 0,240,163,138, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,176, 88,200, 2, 0, 0, 0, 0,112, 89,200, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,240,127,187, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,128,126,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,131, 67, 0, 0,228,194, 0, 0, 0, 0, + 0, 0, 0, 0, 0,128,178, 67, 0, 0, 61,195, 0, 0, 0, 0,101, 1, 0, 0,118, 1, 0, 0, 18, 0, 0, 0,206, 0, 0, 0, + 0, 0, 0, 0,100, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,100, 1, 0, 0, 18, 0, 0, 0,206, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 18, 0, 0, 0, 2, 0, 3, 3, + 0, 0, 0, 4, 6, 0,118, 1,207, 0,101, 1,189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 0, 0,118, 7, 0, 0, 93, 3, 0, 0, 43, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,118, 1,207, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +208, 70,162, 2, 0, 0, 0, 0, 0,173,138, 3, 0, 0, 0, 0, 0,173,138, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,160, 91,200, 2, 0, 0, 0, 0,224, 93,200, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 96,129,187, 2, 0, 0, 0, 0,166, 0, 0, 0, 1, 0, 0, 0, + 16,135,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,190,138, 3, 0, 0, 0, 0, 16,190,138, 3, 0, 0, 0, 0, +208,130,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, -176, 45, 37, 3, 1, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -160, 18,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 20,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,138, 67, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65, 16, 0, 0, 0,208,130,187, 2, 0, 0, 0, 0,218, 0, 0, 0, 1, 0, 0, 0, + 13, 0, 0, 0, 13, 0, 0, 0, 32,131,187, 2, 0, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0, 32,131,187, 2, 0, 0, 0, 0, +217, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 64, 85,192, 2, 0, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0, + 64, 85,192, 2, 0, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0, 64, 85,192, 2, 0, 0, 0, 0, 21, 0, 1, 0, 1, 0, 1, 0, + 64, 85,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,160,100,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, +144,113,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,176,163,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, +240,123,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 80,145,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, + 16,119,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 16, 96,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, +176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48, 95,192, 2, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, + 48,132,187, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,160,133,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,240, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 55, 0, 0, 67, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 1, 26, 0, 20, 1, 26, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 26, 0, 0, 0, 1, 0, + 0, 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,195, 0, 26, 0,195, 0, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 4, 0, 0,247, 4, 0, 0, + 69, 2, 0, 0, 94, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195, 0, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 0, 20,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 18,144, 22, 1, 0, 0, 0, +160,133,187, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,132,187, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,150, 67, 0,192,116,196, 0, 0, 0, 0, 0, 0, 0, 0,205, 85,150, 67,223,204, 35,196, 26, 85,207,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 0,155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, 0, 1, 0, 3, 0, 2, 0, 0, 4, 6, 0,195, 0,156, 0,195, 0,156, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 4, 0, 0,247, 4, 0, 0, + 95, 2, 0, 0,250, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195, 0,156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, - 26, 0, 0, 0, 80, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 55, 4, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 21,144, 22, 1, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, - 96, 21,144, 22, 1, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0,103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, - 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0,128, 63,103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, - 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65,237,122,111, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, - 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,128, 63,103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, - 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 32,222, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,144, 24,144, 22, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 96, 17,144, 22, 1, 0, 0, 0,160, 18,144, 22, 1, 0, 0, 0, 0, 20,144, 22, 1, 0, 0, 0, - 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,194,129, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, - 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,160, 0, 0, 0,240, 25,144, 22, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,224, 37,144, 22, 1, 0, 0, 0, - 48,170,143, 22, 1, 0, 0, 0, 80,155,143, 22, 1, 0, 0, 0, 16,159,143, 22, 1, 0, 0, 0,112,159,143, 22, 1, 0, 0, 0, -144,157,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 6, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, - 15, 15, 8, 6, 88, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 2, 15, 3, 1, 0, 0, 0,144, 29,144, 22, 1, 0, 0, 0, -128, 36,144, 22, 1, 0, 0, 0,208, 26,144, 22, 1, 0, 0, 0, 48, 28,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,176,179,155, 22, 1, 0, 0, 0, 96,240,149, 22, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -208, 26,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 48, 28,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,193, 68, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 8, 6, 26, 0, 8, 6, 26, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 6, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 6, 26, 0, 5, 0, 1, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176, 4, 15, 3, 1, 0, 0, 0,208,213,253, 24, 1, 0, 0, 0, -208,213,253, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 11, 21, 26, 1, 0, 0, 0, - 16,255, 19, 26, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 48, 28,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 26,144, 22, 1, 0, 0, 0, - 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 6, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 0, 0, 0, 0, 7, 6, 0, 0, 18, 0, 0, 0, 61, 0, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66, -205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0, 8, 6, 62, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 6, 0, 0, - 26, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 6, 62, 0, 6, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 3, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,255, 19, 26, 1, 0, 0, 0, - 32,119,136, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0, -144, 29,144, 22, 1, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0,128, 36,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0, + 16,135,187, 2, 0, 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0,112,142,187, 2, 0, 0, 0, 0, 96,129,187, 2, 0, 0, 0, 0, + 48,132,187, 2, 0, 0, 0, 0,160,133,187, 2, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -144, 30,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,240, 31,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,203, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 87, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 88, 6, 26, 0, 88, 6, 26, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 6, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 6, 26, 0, 0, 0, 1, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80,136,187, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,192,137,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,138, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 1, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 1, 26, 0, 20, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -240, 31,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 30,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,192,137,187, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,136,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 6, 0, 0, - 26, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 6, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, 26, 0, 0, 0, 80, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 55, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 33,144, 22, 1, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, - 80, 33,144, 22, 1, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 87,213,108, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, - 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0,128, 63, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 87,213,108, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, - 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65,161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,224, 91,138, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, - 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,128, 63, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 87,213,108, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, - 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 48,139,187, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, 48,139,187, 2, 0, 0, 0, 0, +156, 0, 0, 0, 1, 0, 0, 0,103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128, +226,215,163,188, 0, 0, 0,128, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52,149,147, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,128, 36,144, 22, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,144, 29,144, 22, 1, 0, 0, 0,144, 30,144, 22, 1, 0, 0, 0,240, 31,144, 22, 1, 0, 0, 0, - 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,194,129, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, - 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,160, 0, 0, 0,224, 37,144, 22, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,144, 55,144, 22, 1, 0, 0, 0, -240, 25,144, 22, 1, 0, 0, 0, 80,158,143, 22, 1, 0, 0, 0,240,157,143, 22, 1, 0, 0, 0, 48,157,143, 22, 1, 0, 0, 0, -176,158,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 6, 0, 0,128, 7, 0, 0, 53, 3, 0, 0, 21, 4, 0, 0, - 3, 3,120, 1,225, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 15, 3, 1, 0, 0, 0,128, 41,144, 22, 1, 0, 0, 0, - 48, 54,144, 22, 1, 0, 0, 0,192, 38,144, 22, 1, 0, 0, 0, 32, 40,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,144,166,155, 22, 1, 0, 0, 0, 80,177,155, 22, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -192, 38,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 32, 40,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,128,163, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,188, 67, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,119, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 66, 67, 0, 0,200, 65, 0, 0, 66, 67, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,120, 1, 26, 0,120, 1, 26, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 6, 0, 0,128, 7, 0, 0, -252, 3, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 1, 26, 0, 7, 0, 1, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 2, 15, 3, 1, 0, 0, 0, 0,172,251, 24, 1, 0, 0, 0, - 0,172,251, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,177, 20, 26, 1, 0, 0, 0, - 64,178, 20, 26, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 32, 40,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 38,144, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0,128,131, 67, 0, 0,228,194, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,179, 67, 0, 0, 53,195, 0, 0, 0, 0, -103, 1, 0, 0,120, 1, 0, 0, 18, 0, 0, 0,198, 0, 0, 0, 0, 0, 0, 0,102, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 0, 0, 0, 0,102, 1, 0, 0, 18, 0, 0, 0,198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 18, 0, 0, 0, 2, 0, 3, 3, 0, 0, 0, 4, 6, 0,120, 1,199, 0,103, 1,181, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 6, 0, 0,128, 7, 0, 0, - 53, 3, 0, 0,251, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 1,199, 0, 8, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 1, 15, 3, 1, 0, 0, 0,240,255,253, 24, 1, 0, 0, 0, -240,255,253, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 71, 20, 26, 1, 0, 0, 0, - 32, 78, 22, 26, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -128, 41,144, 22, 1, 0, 0, 0,166, 0, 0, 0, 1, 0, 0, 0, 0, 47,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 32, 64,255, 24, 1, 0, 0, 0, 32, 64,255, 24, 1, 0, 0, 0,224, 42,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65, 16, 0, 0, 0, -224, 42,144, 22, 1, 0, 0, 0,218, 0, 0, 0, 1, 0, 0, 0, 13, 0, 0, 0, 13, 0, 0, 0, 48, 43,144, 22, 1, 0, 0, 0, - 68, 65, 84, 65,208, 0, 0, 0, 48, 43,144, 22, 1, 0, 0, 0,217, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, - 48,186,129, 3, 1, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0, 48,186,129, 3, 1, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0, - 48,186,129, 3, 1, 0, 0, 0, 21, 0, 1, 0, 1, 0, 1, 0, 48,186,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, -128,242, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48,200,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, -112,253, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 96,246, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, -112,251, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48,206,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 48,238, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48,194,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 96,237, 39, 3, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 64, 44,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -160, 45,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 67, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 55, 0, 0, 67, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0,195, 0, 26, 0,195, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 53, 4, 0, 0,247, 4, 0, 0, 69, 2, 0, 0, 94, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,195, 0, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,160, 45,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 64, 44,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,150, 67, 0,192,116,196, 0, 0, 0, 0, - 0, 0, 0, 0,205, 85,150, 67,223,204, 35,196, 26, 85,207,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 0,155, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, 0, 1, 0, 3, 0, - 2, 0, 0, 4, 6, 0,195, 0,156, 0,195, 0,156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 53, 4, 0, 0,247, 4, 0, 0, 95, 2, 0, 0,250, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,195, 0,156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0, 0, 47,144, 22, 1, 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0, - 48, 54,144, 22, 1, 0, 0, 0,128, 41,144, 22, 1, 0, 0, 0, 64, 44,144, 22, 1, 0, 0, 0,160, 45,144, 22, 1, 0, 0, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 64, 48,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,160, 49,144, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,138, 67, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, - 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 1, - 26, 0, 20, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 89, 6, 0, 0,108, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 20, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,160, 49,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 64, 48,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 89, 6, 0, 0,108, 7, 0, 0, 26, 0, 0, 0, 80, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 20, 1, 55, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51,144, 22, 1, 0, 0, 0, - 68, 65, 84, 65,248, 2, 0, 0, 0, 51,144, 22, 1, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0,103,212,136, 64, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0,128, 63,103,212,136, 64, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65,237,122,111, 62, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,128, 63,103,212,136, 64, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 32,222, 58, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 32,193, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 32, 65, 0, 0,128, 63,103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, +184,175, 31, 65, 0, 0, 32, 65,237,122,111, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,161, 14,106, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, + 98,127,249, 67,129,255, 71, 66, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 32,193, 0, 0,128, 63,103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, +184,175, 31, 65, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,100, 32,222, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, 48, 54,144, 22, 1, 0, 0, 0, -157, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47,144, 22, 1, 0, 0, 0, 64, 48,144, 22, 1, 0, 0, 0, -160, 49,144, 22, 1, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, - 48,194,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 68, 65, 84, 65, 32, 1, 0, 0,112,142,187, 2, 0, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16,135,187, 2, 0, 0, 0, 0, 80,136,187, 2, 0, 0, 0, 0,192,137,187, 2, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,144, 55,144, 22, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,224, 37,144, 22, 1, 0, 0, 0, 16,159,143, 22, 1, 0, 0, 0,208,156,143, 22, 1, 0, 0, 0, -240,157,143, 22, 1, 0, 0, 0,112,159,143, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 6, 0, 0, - 89, 0, 0, 0, 21, 4, 0, 0, 1, 1, 8, 6,189, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 5, 15, 3, 1, 0, 0, 0, -144, 80,144, 22, 1, 0, 0, 0,176, 84,144, 22, 1, 0, 0, 0,112, 56,144, 22, 1, 0, 0, 0, 0, 76,144, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,134,155, 22, 1, 0, 0, 0,112,150,155, 22, 1, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,112, 56,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,208, 57,144, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,193, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, - 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 8, 6, - 26, 0, 8, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 6, 0, 0, 89, 0, 0, 0,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8, 6, 26, 0, 9, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176, 13, 15, 3, 1, 0, 0, 0, -176, 38,252, 24, 1, 0, 0, 0,176, 38,252, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80,106, 20, 26, 1, 0, 0, 0, 16,181, 63, 25, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,208, 57,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 80, 62,144, 22, 1, 0, 0, 0, -112, 56,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, - 0, 64, 70,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 42, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 42, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0, - 43, 3,143, 0, 25, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,159, 0, 0, 0,235, 0, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -160, 0, 43, 3, 10, 0, 5, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 10, 15, 3, 1, 0, 0, 0, -192, 62,112, 29, 1, 0, 0, 0, 96,220,112, 29, 1, 0, 0, 0, 48, 59,144, 22, 1, 0, 0, 0,192, 60,144, 22, 1, 0, 0, 0, -208,181, 63, 25, 1, 0, 0, 0, 80, 64, 17, 26, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0, 48, 59,144, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,192, 60,144, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,240, 10, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, - 84, 95,116,111,111,108, 95,115,104,101,108,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, - 84, 95,116,111,111,108, 95,115,104,101,108,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,111,111,108, 32, 83,104,101, -108,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,196,255,143, 0, 36, 0, - 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,192, 60,144, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 59,144, 22, 1, 0, 0, 0, 16,106,155, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,111, 98,106,101, 99,116,109,111, -100,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,111, 98,106,101, 99,116,109,111, -100,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 79, 98,106,101, 99,116, 32, 84,111,111,108,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,223,253,143, 0,205, 1, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 80, 62,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 64, 65,144, 22, 1, 0, 0, 0, -208, 57,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, - 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0, -120, 0,143, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,159, 0, 0, 0,115, 0, 0, 0,234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -160, 0,120, 0, 11, 0, 6, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 11, 15, 3, 1, 0, 0, 0, - 0, 62,255, 24, 1, 0, 0, 0, 0, 62,255, 24, 1, 0, 0, 0,176, 63,144, 22, 1, 0, 0, 0,176, 63,144, 22, 1, 0, 0, 0, - 16, 65, 17, 26, 1, 0, 0, 0, 96,191, 20, 26, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0,176, 63,144, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,192, 12, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, - 84, 95,108, 97,115,116, 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, - 84, 95,108, 97,115,116, 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,112,101,114, 97,116,111,114, - 0,110, 0,101,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,255,144, 0, 16, 0, - 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 64, 65,144, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 76,144, 22, 1, 0, 0, 0, 80, 62,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, +159, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, +208,143,187, 2, 0, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,125,187, 2, 0, 0, 0, 0, + 16, 51,187, 2, 0, 0, 0, 0,208, 48,187, 2, 0, 0, 0, 0,240, 49,187, 2, 0, 0, 0, 0,112, 51,187, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 5, 0, 0, 97, 0, 0, 0, 69, 4, 0, 0, 1, 1, 0, 6,229, 3, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 64, 75,162, 2, 0, 0, 0, 0,192,169,187, 2, 0, 0, 0, 0, 0,174,187, 2, 0, 0, 0, 0, +176,144,187, 2, 0, 0, 0, 0, 16,165,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 96,110,230, 2, 0, 0, 0, 0,128,190,230, 2, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176,144,187, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 32,146,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 89, 68, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,192, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 5, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 0, 6, 26, 0, 0, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 5, 0, 0, 97, 0, 0, 0,122, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 26, 0, 10, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,176, 83,162, 2, 0, 0, 0, 0,144,249,138, 3, 0, 0, 0, 0,144,249,138, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 99,200, 2, 0, 0, 0, 0, 16,102,200, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 32,146,187, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,208,150,187, 2, 0, 0, 0, 0,176,144,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, + 0, 64, 80,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 80,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, + 18, 0, 0, 0, 82, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, + 18, 0, 0, 0, 82, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, + 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0, 83, 3,143, 0, 65, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0,243, 0, 0, 0, 69, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0, 83, 3, 11, 0, 5, 0, 3, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,240, 79,162, 2, 0, 0, 0, 0, 0,159,139, 3, 0, 0, 0, 0,224,152,139, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,104,200, 2, 0, 0, 0, 0,128,106,200, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,208,150,187, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,224,153,187, 2, 0, 0, 0, 0, 32,146,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, + 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, + 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, + 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, + 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0,123, 0, 0, 0,242, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0,120, 0, 12, 0, 6, 0, 34, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,208, 81,162, 2, 0, 0, 0, 0,112, 20,140, 3, 0, 0, 0, 0,112, 20,140, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 31,200, 2, 0, 0, 0, 0,192,116,200, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,224,153,187, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 16,165,187, 2, 0, 0, 0, 0,208,150,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,192, 77,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,192, 34,196, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,156, 2, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,156, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0,157, 2,163, 0,139, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 6, 0, 0, 7, 6, 0, 0,115, 0, 0, 0, 21, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 5, 0, 0,255, 5, 0, 0,123, 0, 0, 0, 69, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 80, 7, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -160, 66,144, 22, 1, 0, 0, 0,112, 74,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,160, 66,144, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0, 48, 68,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,111, 98,106,101, 99,116, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,111, 98,106,101, 99,116, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 84,114, 97,110,115,102,111,114,109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,254,163, 0,104, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0, 48, 68,144, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,192, 69,144, 22, 1, 0, 0, 0, -160, 66,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, - 84, 95,103,112,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, - 84, 95,103,112,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71,114,101, 97,115,101, 32, 80, -101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,171,252,163, 0, 58, 0, - 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,192, 69,144, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0, 80, 71,144, 22, 1, 0, 0, 0, 48, 68,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100,118,105,101,119, 95,112,114,111,112,101,114,116, -105,101,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100,118,105,101,119, 95,112,114,111,112,101,114,116, -105,101,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 86,105,101,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45,253,163, 0, 59, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0, 80, 71,144, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,224, 72,144, 22, 1, 0, 0, 0, -192, 69,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, - 84, 95, 51,100,118,105,101,119, 95,100,105,115,112,108, 97,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, - 84, 95, 51,100,118,105,101,119, 95,100,105,115,112,108, 97,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,115,112,108, 97,121, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18,252,163, 0, 3, 1, - 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 16, 77,162, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 16,165,187, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,153,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,224, 72,144, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0,112, 74,144, 22, 1, 0, 0, 0, 80, 71,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 98, 97, 99,107,103,114,111,117,110,100, 95,105,109, 97, -103,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 98, 97, 99,107,103,114,111,117,110,100, 95,105,109, 97, -103,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 66, 97, 99,107,103,114,111,117,110,100, 32, 73,109, 97,103,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,253,252,163, 0, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0,112, 74,144, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -224, 72,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, - 84, 95,116,114, 97,110,115,102,111,114,109, 95,111,114,105,101,110,116, 97,116,105,111,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, - 84, 95,116,114, 97,110,115,102,111,114,109, 95,111,114,105,101,110,116, 97,116,105,111,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,114, 97,110,115,102,111,114, -109, 32, 79,114,105,101,110,116, 97,116,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205,252,163, 0, 0, 0, - 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0, 76,144, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0, 0, 0, 7, 6, 0, 0,115, 0, 0, 0, 21, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104, 5,163, 3, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,112, 6, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,193, 20, 26, 1, 0, 0, 0,240,161, 19, 26, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 96, 77,144, 22, 1, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, 96, 77,144, 22, 1, 0, 0, 0, -156, 0, 0, 0, 1, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,203, 30,208, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128, -226,215,163,188, 0, 0, 0,128, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0, 0, 0,255, 5, 0, 0,123, 0, 0, 0, 69, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 5,203, 3, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 48, 76,162, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176, 23,200, 2, 0, 0, 0, 0,144,138,200, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,128,166,187, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0,128,166,187, 2, 0, 0, 0, 0, +156, 0, 0, 0, 1, 0, 0, 0, 1, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,183,100,198, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, +225,215,163,188, 0, 0, 0, 0, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214,211,111,193, 0, 0,128, 63, 69,239,209, 62, 70,119,105, 63,176, 84, 89,188, 0, 0, 0, 0, 53,177,205,190,142, 74, 70, 62, 166, 33,101, 63, 0, 0, 0, 0,185,158, 81, 63, 35, 44,185,190, 43, 61,228, 62, 0, 0, 0, 0,164, 96, 68, 65,111,121,173,192, -248,209,213, 64, 0, 0,128, 63,178,157,229, 62,183, 56, 39,191,222,160, 81,191,184,158, 81,191,117, 90,127, 63,110, 52,161, 62, - 9, 46,185, 62, 35, 44,185, 62,145,180,109,188,231, 70,186, 63,129, 63,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, - 96,132,111, 65,214,211,111, 65, 62,239,191, 62,175,116, 85, 63, 48,205, 70,188, 0, 0,115,181,241, 1,125,190,149,231,243, 61, - 90,236, 12, 63, 0, 0,243, 52,215,104, 25,196,133,132,135, 67, 36, 9,167,195,136,252, 71,194, 3, 54, 25, 68,158, 87,135,195, -204,209,166, 67,151,254, 71, 66, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, +248,209,213, 64, 0, 0,128, 63,180,157,229, 62,250,103, 31,191,222,160, 81,191,184,158, 81,191,118, 90,127, 63,173,171,153, 62, + 9, 46,185, 62, 35, 44,185, 62,147,180,109,188, 43,146,177, 63,129, 63,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, + 96,132,111, 65,214,211,111, 65,217,236,191, 62, 54,117, 85, 63,208,246, 70,188, 0,128, 32,182, 36,180,132,190,211,219,255, 61, + 70,213, 19, 63, 0,128,101, 53,215,104, 25,196,135,132,135, 67, 37, 9,167,195,136,252, 71,194, 3, 54, 25, 68,160, 87,135,195, +205,209,166, 67,151,254, 71, 66, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -214,211,111,193, 0, 0,128, 63,178,157,229, 62,183, 56, 39,191,222,160, 81,191,184,158, 81,191,117, 90,127, 63,110, 52,161, 62, - 9, 46,185, 62, 35, 44,185, 62,145,180,109,188,231, 70,186, 63,129, 63,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, +214,211,111,193, 0, 0,128, 63,180,157,229, 62,250,103, 31,191,222,160, 81,191,184,158, 81,191,118, 90,127, 63,173,171,153, 62, + 9, 46,185, 62, 35, 44,185, 62,147,180,109,188, 43,146,177, 63,129, 63,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 96,132,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190,214,211,111, 65,214,211,111, 65, - 0, 0, 0, 0, 0, 0, 0, 0,219, 44,173, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,155, 46,174, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 1, 0, 0,144, 80,144, 22, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0,176, 84,144, 22, 1, 0, 0, 0, + 68, 65, 84, 65, 32, 1, 0, 0,192,169,187, 2, 0, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, 0,174,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,194,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -240, 81,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 80, 83,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 32,171,187, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,144,172,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, @@ -3604,7 +2546,7 @@ char datatoc_B_blend[]= { 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 80, 83,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 81,144, 22, 1, 0, 0, 0, +144,172,187, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,171,187, 2, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66, @@ -3614,693 +2556,279 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0, -176, 84,144, 22, 1, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 80,144, 22, 1, 0, 0, 0, -240, 81,144, 22, 1, 0, 0, 0, 80, 83,144, 22, 1, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,174,187, 2, 0, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,169,187, 2, 0, 0, 0, 0, + 32,171,187, 2, 0, 0, 0, 0,144,172,187, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 83, 78, 0, 0,208, 0, 0, 0, - 48, 86,144, 22, 1, 0, 0, 0,190, 0, 0, 0, 1, 0, 0, 0,208, 51,145, 22, 1, 0, 0, 0, 64,154,143, 22, 1, 0, 0, 0, +160,175,187, 2, 0, 0, 0, 0,190, 0, 0, 0, 1, 0, 0, 0, 0,150,188, 2, 0, 0, 0, 0, 64, 46,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 71, 97,109,101, 32, 76,111,103,105, 99, 0, 46, 48, 48, - 49, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 87,144, 22, 1, 0, 0, 0, - 32, 92,144, 22, 1, 0, 0, 0,128, 92,144, 22, 1, 0, 0, 0, 0,100,144, 22, 1, 0, 0, 0, 96,100,144, 22, 1, 0, 0, 0, - 80, 20,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,186,129, 3, 1, 0, 0, 0, + 49, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,176,187, 2, 0, 0, 0, 0, +144,181,187, 2, 0, 0, 0, 0,240,181,187, 2, 0, 0, 0, 0,176,190,187, 2, 0, 0, 0, 0, 32,191,187, 2, 0, 0, 0, 0, + 96,117,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 85,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,155,180, 21, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0, 64, 87,144, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,160, 87,144, 22, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0,176,176,187, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 16,177,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, -160, 87,144, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 0, 88,144, 22, 1, 0, 0, 0, 64, 87,144, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 0, 88,144, 22, 1, 0, 0, 0, -191, 0, 0, 0, 1, 0, 0, 0, 96, 88,144, 22, 1, 0, 0, 0,160, 87,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128, 7, 49, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 96, 88,144, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, -192, 88,144, 22, 1, 0, 0, 0, 0, 88,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0,192, 88,144, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 32, 89,144, 22, 1, 0, 0, 0, - 96, 88,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, - 32, 89,144, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,128, 89,144, 22, 1, 0, 0, 0,192, 88,144, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,128, 89,144, 22, 1, 0, 0, 0, -191, 0, 0, 0, 1, 0, 0, 0,224, 89,144, 22, 1, 0, 0, 0, 32, 89,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,148, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,224, 89,144, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, - 64, 90,144, 22, 1, 0, 0, 0,128, 89,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 6,148, 1, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0, 64, 90,144, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,160, 90,144, 22, 1, 0, 0, 0, -224, 89,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 6, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, -160, 90,144, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 0, 91,144, 22, 1, 0, 0, 0, 64, 90,144, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,128, 7,148, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 0, 91,144, 22, 1, 0, 0, 0, -191, 0, 0, 0, 1, 0, 0, 0, 96, 91,144, 22, 1, 0, 0, 0,160, 90,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 56, 5,148, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 96, 91,144, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, -192, 91,144, 22, 1, 0, 0, 0, 0, 91,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 5, 22, 4, 1, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0,192, 91,144, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 32, 92,144, 22, 1, 0, 0, 0, - 96, 91,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 1,148, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, - 32, 92,144, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 91,144, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 60, 1, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,128, 92,144, 22, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0,224, 92,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 87,144, 22, 1, 0, 0, 0, - 0, 88,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,224, 92,144, 22, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0, 64, 93,144, 22, 1, 0, 0, 0,128, 92,144, 22, 1, 0, 0, 0,160, 87,144, 22, 1, 0, 0, 0, -192, 88,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 64, 93,144, 22, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0,160, 93,144, 22, 1, 0, 0, 0,224, 92,144, 22, 1, 0, 0, 0, 0, 88,144, 22, 1, 0, 0, 0, - 32, 89,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,160, 93,144, 22, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0, 0, 94,144, 22, 1, 0, 0, 0, 64, 93,144, 22, 1, 0, 0, 0,192, 88,144, 22, 1, 0, 0, 0, - 32, 89,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 0, 94,144, 22, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0, 96, 94,144, 22, 1, 0, 0, 0,160, 93,144, 22, 1, 0, 0, 0,192, 88,144, 22, 1, 0, 0, 0, -128, 89,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 96, 94,144, 22, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0,192, 94,144, 22, 1, 0, 0, 0, 0, 94,144, 22, 1, 0, 0, 0,128, 89,144, 22, 1, 0, 0, 0, -224, 89,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,192, 94,144, 22, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0, 32, 95,144, 22, 1, 0, 0, 0, 96, 94,144, 22, 1, 0, 0, 0, 96, 88,144, 22, 1, 0, 0, 0, - 64, 90,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 32, 95,144, 22, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0,128, 95,144, 22, 1, 0, 0, 0,192, 94,144, 22, 1, 0, 0, 0,224, 89,144, 22, 1, 0, 0, 0, - 64, 90,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,128, 95,144, 22, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0,224, 95,144, 22, 1, 0, 0, 0, 32, 95,144, 22, 1, 0, 0, 0, 64, 87,144, 22, 1, 0, 0, 0, -128, 89,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,224, 95,144, 22, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0, 64, 96,144, 22, 1, 0, 0, 0,128, 95,144, 22, 1, 0, 0, 0, 64, 87,144, 22, 1, 0, 0, 0, - 64, 90,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 64, 96,144, 22, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0,160, 96,144, 22, 1, 0, 0, 0,224, 95,144, 22, 1, 0, 0, 0, 32, 89,144, 22, 1, 0, 0, 0, -160, 90,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,160, 96,144, 22, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0, 0, 97,144, 22, 1, 0, 0, 0, 64, 96,144, 22, 1, 0, 0, 0, 96, 88,144, 22, 1, 0, 0, 0, -160, 90,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 0, 97,144, 22, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0, 96, 97,144, 22, 1, 0, 0, 0,160, 96,144, 22, 1, 0, 0, 0,224, 89,144, 22, 1, 0, 0, 0, -160, 90,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 96, 97,144, 22, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0,192, 97,144, 22, 1, 0, 0, 0, 0, 97,144, 22, 1, 0, 0, 0, 0, 91,144, 22, 1, 0, 0, 0, - 96, 91,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,192, 97,144, 22, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0, 32, 98,144, 22, 1, 0, 0, 0, 96, 97,144, 22, 1, 0, 0, 0, 32, 89,144, 22, 1, 0, 0, 0, - 96, 91,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 32, 98,144, 22, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0,128, 98,144, 22, 1, 0, 0, 0,192, 97,144, 22, 1, 0, 0, 0,160, 90,144, 22, 1, 0, 0, 0, - 0, 91,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,128, 98,144, 22, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0,224, 98,144, 22, 1, 0, 0, 0, 32, 98,144, 22, 1, 0, 0, 0,128, 89,144, 22, 1, 0, 0, 0, -192, 91,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,224, 98,144, 22, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0, 64, 99,144, 22, 1, 0, 0, 0,128, 98,144, 22, 1, 0, 0, 0, 0, 91,144, 22, 1, 0, 0, 0, -192, 91,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 64, 99,144, 22, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0,160, 99,144, 22, 1, 0, 0, 0,224, 98,144, 22, 1, 0, 0, 0,192, 88,144, 22, 1, 0, 0, 0, - 32, 92,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,160, 99,144, 22, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0, 0,100,144, 22, 1, 0, 0, 0, 64, 99,144, 22, 1, 0, 0, 0, 96, 91,144, 22, 1, 0, 0, 0, - 32, 92,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 0,100,144, 22, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 99,144, 22, 1, 0, 0, 0,192, 91,144, 22, 1, 0, 0, 0, - 32, 92,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 96,100,144, 22, 1, 0, 0, 0, -194, 0, 0, 0, 1, 0, 0, 0, 0,104,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 88,144, 22, 1, 0, 0, 0, -160, 87,144, 22, 1, 0, 0, 0, 0, 88,144, 22, 1, 0, 0, 0, 32, 89,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16,177,187, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,112,177,187, 2, 0, 0, 0, 0,176,176,187, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,112,177,187, 2, 0, 0, 0, 0, +191, 0, 0, 0, 1, 0, 0, 0,208,177,187, 2, 0, 0, 0, 0, 16,177,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +128, 7, 49, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,208,177,187, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, + 48,178,187, 2, 0, 0, 0, 0,112,177,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0, 48,178,187, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,144,178,187, 2, 0, 0, 0, 0, +208,177,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, +144,178,187, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,240,178,187, 2, 0, 0, 0, 0, 48,178,187, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,240,178,187, 2, 0, 0, 0, 0, +191, 0, 0, 0, 1, 0, 0, 0, 80,179,187, 2, 0, 0, 0, 0,144,178,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,148, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 80,179,187, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, +176,179,187, 2, 0, 0, 0, 0,240,178,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 6,148, 1, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0,176,179,187, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 16,180,187, 2, 0, 0, 0, 0, + 80,179,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 6, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, + 16,180,187, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,112,180,187, 2, 0, 0, 0, 0,176,179,187, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,128, 7,148, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,112,180,187, 2, 0, 0, 0, 0, +191, 0, 0, 0, 1, 0, 0, 0,208,180,187, 2, 0, 0, 0, 0, 16,180,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 56, 5,148, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,208,180,187, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, + 48,181,187, 2, 0, 0, 0, 0,112,180,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 5, 22, 4, 1, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0, 48,181,187, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,144,181,187, 2, 0, 0, 0, 0, +208,180,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 1,148, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, +144,181,187, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,181,187, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 60, 1, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,240,181,187, 2, 0, 0, 0, 0, +192, 0, 0, 0, 1, 0, 0, 0, 96,182,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,177,187, 2, 0, 0, 0, 0, +112,177,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 96,182,187, 2, 0, 0, 0, 0, +192, 0, 0, 0, 1, 0, 0, 0,208,182,187, 2, 0, 0, 0, 0,240,181,187, 2, 0, 0, 0, 0, 16,177,187, 2, 0, 0, 0, 0, + 48,178,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,208,182,187, 2, 0, 0, 0, 0, +192, 0, 0, 0, 1, 0, 0, 0, 64,183,187, 2, 0, 0, 0, 0, 96,182,187, 2, 0, 0, 0, 0,112,177,187, 2, 0, 0, 0, 0, +144,178,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 64,183,187, 2, 0, 0, 0, 0, +192, 0, 0, 0, 1, 0, 0, 0,176,183,187, 2, 0, 0, 0, 0,208,182,187, 2, 0, 0, 0, 0, 48,178,187, 2, 0, 0, 0, 0, +144,178,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,176,183,187, 2, 0, 0, 0, 0, +192, 0, 0, 0, 1, 0, 0, 0, 32,184,187, 2, 0, 0, 0, 0, 64,183,187, 2, 0, 0, 0, 0, 48,178,187, 2, 0, 0, 0, 0, +240,178,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 32,184,187, 2, 0, 0, 0, 0, +192, 0, 0, 0, 1, 0, 0, 0,144,184,187, 2, 0, 0, 0, 0,176,183,187, 2, 0, 0, 0, 0,240,178,187, 2, 0, 0, 0, 0, + 80,179,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,144,184,187, 2, 0, 0, 0, 0, +192, 0, 0, 0, 1, 0, 0, 0, 0,185,187, 2, 0, 0, 0, 0, 32,184,187, 2, 0, 0, 0, 0,208,177,187, 2, 0, 0, 0, 0, +176,179,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 0,185,187, 2, 0, 0, 0, 0, +192, 0, 0, 0, 1, 0, 0, 0,112,185,187, 2, 0, 0, 0, 0,144,184,187, 2, 0, 0, 0, 0, 80,179,187, 2, 0, 0, 0, 0, +176,179,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,112,185,187, 2, 0, 0, 0, 0, +192, 0, 0, 0, 1, 0, 0, 0,224,185,187, 2, 0, 0, 0, 0, 0,185,187, 2, 0, 0, 0, 0,176,176,187, 2, 0, 0, 0, 0, +240,178,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,224,185,187, 2, 0, 0, 0, 0, +192, 0, 0, 0, 1, 0, 0, 0, 80,186,187, 2, 0, 0, 0, 0,112,185,187, 2, 0, 0, 0, 0,176,176,187, 2, 0, 0, 0, 0, +176,179,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 80,186,187, 2, 0, 0, 0, 0, +192, 0, 0, 0, 1, 0, 0, 0,192,186,187, 2, 0, 0, 0, 0,224,185,187, 2, 0, 0, 0, 0,144,178,187, 2, 0, 0, 0, 0, + 16,180,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,192,186,187, 2, 0, 0, 0, 0, +192, 0, 0, 0, 1, 0, 0, 0, 48,187,187, 2, 0, 0, 0, 0, 80,186,187, 2, 0, 0, 0, 0,208,177,187, 2, 0, 0, 0, 0, + 16,180,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 48,187,187, 2, 0, 0, 0, 0, +192, 0, 0, 0, 1, 0, 0, 0,160,187,187, 2, 0, 0, 0, 0,192,186,187, 2, 0, 0, 0, 0, 80,179,187, 2, 0, 0, 0, 0, + 16,180,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,160,187,187, 2, 0, 0, 0, 0, +192, 0, 0, 0, 1, 0, 0, 0, 16,188,187, 2, 0, 0, 0, 0, 48,187,187, 2, 0, 0, 0, 0,112,180,187, 2, 0, 0, 0, 0, +208,180,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 16,188,187, 2, 0, 0, 0, 0, +192, 0, 0, 0, 1, 0, 0, 0,128,188,187, 2, 0, 0, 0, 0,160,187,187, 2, 0, 0, 0, 0,144,178,187, 2, 0, 0, 0, 0, +208,180,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,128,188,187, 2, 0, 0, 0, 0, +192, 0, 0, 0, 1, 0, 0, 0,240,188,187, 2, 0, 0, 0, 0, 16,188,187, 2, 0, 0, 0, 0, 16,180,187, 2, 0, 0, 0, 0, +112,180,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,240,188,187, 2, 0, 0, 0, 0, +192, 0, 0, 0, 1, 0, 0, 0, 96,189,187, 2, 0, 0, 0, 0,128,188,187, 2, 0, 0, 0, 0,240,178,187, 2, 0, 0, 0, 0, + 48,181,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 96,189,187, 2, 0, 0, 0, 0, +192, 0, 0, 0, 1, 0, 0, 0,208,189,187, 2, 0, 0, 0, 0,240,188,187, 2, 0, 0, 0, 0,112,180,187, 2, 0, 0, 0, 0, + 48,181,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,208,189,187, 2, 0, 0, 0, 0, +192, 0, 0, 0, 1, 0, 0, 0, 64,190,187, 2, 0, 0, 0, 0, 96,189,187, 2, 0, 0, 0, 0, 48,178,187, 2, 0, 0, 0, 0, +144,181,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 64,190,187, 2, 0, 0, 0, 0, +192, 0, 0, 0, 1, 0, 0, 0,176,190,187, 2, 0, 0, 0, 0,208,189,187, 2, 0, 0, 0, 0,208,180,187, 2, 0, 0, 0, 0, +144,181,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,176,190,187, 2, 0, 0, 0, 0, +192, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,190,187, 2, 0, 0, 0, 0, 48,181,187, 2, 0, 0, 0, 0, +144,181,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 32,191,187, 2, 0, 0, 0, 0, +194, 0, 0, 0, 1, 0, 0, 0,224,194,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,178,187, 2, 0, 0, 0, 0, + 16,177,187, 2, 0, 0, 0, 0,112,177,187, 2, 0, 0, 0, 0,144,178,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 23, 4, 0, 0, 49, 4, 0, 0, 7, 7,129, 7, 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, -240, 35, 15, 3, 1, 0, 0, 0, 80, 51,145, 22, 1, 0, 0, 0, 80, 51,145, 22, 1, 0, 0, 0, 64,101,144, 22, 1, 0, 0, 0, -160,102,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,116, 16, 26, 1, 0, 0, 0, - 48, 91,147, 22, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 64,101,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -160,102,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,161, 68, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 0, 0, 0,112,149,188, 2, 0, 0, 0, 0,112,149,188, 2, 0, 0, 0, 0, 0,192,187, 2, 0, 0, 0, 0, +112,193,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0,192,187, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +112,193,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,161, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 32,240, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,129, 7, 26, 0,129, 7, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 23, 4, 0, 0, 48, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,129, 7, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, -176, 37, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,129, 7, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,160,102,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 64,101,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,112,193,187, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,192,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192, 0, 0, 0, 0,112, 7, 0, 0,129, 7, 0, 0, 18, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 18, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,129, 7, 3, 0,112, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 4, 0, 0, 49, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, -208, 36, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 0,104,144, 22, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, - 48,176,144, 22, 1, 0, 0, 0, 96,100,144, 22, 1, 0, 0, 0, 64, 90,144, 22, 1, 0, 0, 0,224, 89,144, 22, 1, 0, 0, 0, -160, 90,144, 22, 1, 0, 0, 0, 96, 88,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0,128, 7, 0, 0, - 0, 0, 0, 0,147, 1, 0, 0, 4, 4, 96, 1,148, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 32, 15, 3, 1, 0, 0, 0, - 80,162,144, 22, 1, 0, 0, 0,208,174,144, 22, 1, 0, 0, 0,224,104,144, 22, 1, 0, 0, 0, 64,106,144, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 97, 40, 3, 1, 0, 0, 0, 32, 60, 40, 3, 1, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,224,104,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 64,106,144, 22, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,224,194,187, 2, 0, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, +192, 13,188, 2, 0, 0, 0, 0, 32,191,187, 2, 0, 0, 0, 0,176,179,187, 2, 0, 0, 0, 0, 80,179,187, 2, 0, 0, 0, 0, + 16,180,187, 2, 0, 0, 0, 0,208,177,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0,128, 7, 0, 0, + 0, 0, 0, 0,147, 1, 0, 0, 4, 4, 96, 1,148, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +128,255,187, 2, 0, 0, 0, 0, 96, 12,188, 2, 0, 0, 0, 0,192,195,187, 2, 0, 0, 0, 0, 48,197,187, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,192,195,187, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 48,197,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,176, 67, 0, 0, 0, 0, 0, 0,248, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 96, 1, 31, 0, 96, 1, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0,128, 7, 0, 0,117, 1, 0, 0,147, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 96, 1, 31, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 35, 15, 3, 1, 0, 0, 0, + 96, 1, 31, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 64,106,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -224,104,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,167, 67, 0, 0,137,196, 0, 0, 0, 0, 0, 0, 0, 0,255,127,167, 67, + 68, 65, 84, 65, 40, 1, 0, 0, 48,197,187, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +192,195,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167, 67, 0, 0,137,196, 0, 0, 0, 0, 0, 0, 0, 0,255,127,167, 67, 254,127,177,195, 0, 0, 0, 0, 79, 1, 0, 0, 96, 1, 0, 0, 18, 0, 0, 0,116, 1, 0, 0, 0, 0, 0, 0, 78, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 78, 1, 0, 0, 18, 0, 0, 0,116, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0, 96, 1, -117, 1, 79, 1, 99, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,172,252, 24, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, +117, 1, 79, 1, 99, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0,128, 7, 0, 0, 0, 0, 0, 0,116, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 96, 1,117, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 33, 15, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,107,144, 22, 1, 0, 0, 0,192,160,144, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0,160,107,144, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 48,109,144, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 32, 34, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, - 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, - 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,111,110,116,101,120,116, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220,255, 78, 1, 36, 0, - 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 48,109,144, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0,192,110,144, 22, 1, 0, 0, 0,160,107,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255, 76, 1, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0,192,110,144, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 80,112,144, 22, 1, 0, 0, 0, - 48,109,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, - 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, - 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,121,101,114,115, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111,255, 76, 1, 0, 0, - 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 80,112,144, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0,224,113,144, 22, 1, 0, 0, 0,192,110,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,165,254, 76, 1,178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0,224,113,144, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,112,115,144, 22, 1, 0, 0, 0, - 80,112,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, - 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, - 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65,110,116,105, 45, 65,108,105, - 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,254, 76, 1, 58, 0, - 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,112,115,144, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0, 0,117,144, 22, 1, 0, 0, 0,224,113,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,213,253, 76, 1,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0, 0,117,144, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,144,118,144, 22, 1, 0, 0, 0, -112,115,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, - 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, - 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,117,116,112,117,116, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,253, 76, 1,105, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,144,118,144, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0, 32,120,144, 22, 1, 0, 0, 0, 0,117,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 80,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,253, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0, 32,120,144, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,176,121,144, 22, 1, 0, 0, 0, -144,118,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, - 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, - 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,111,115,116, 32, 80,114,111, - 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36,253, 76, 1, 0, 0, - 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,176,121,144, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0, 64,123,144, 22, 1, 0, 0, 0, 32,120,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,253, 76, 1, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0, 64,123,144, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,208,124,144, 22, 1, 0, 0, 0, -176,121,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, - 95,117,110,105,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, - 95,117,110,105,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85,110,105,116,115, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,255, 51, 1, 61, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,208,124,144, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0, 96,126,144, 22, 1, 0, 0, 0, 64,123,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,107,101,121,105,110,103, 95,115,101,116,115, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,107,101,121,105,110,103, 95,115,101,116,115, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 75,101,121,105,110,103, 32, 83,101,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,213,254, 51, 1, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0, 96,126,144, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,240,127,144, 22, 1, 0, 0, 0, -208,124,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, - 95,112,104,121,115,105, 99,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, - 95,112,104,121,115,105, 99,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71,114, 97,118,105,116,121, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,153,254, 51, 1, 36, 0, - 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,240,127,144, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0,128,129,144, 22, 1, 0, 0, 0, 96,126,144, 22, 1, 0, 0, 0, 64, 47,243, 24, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, + 96, 1,117, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255, 78, 1, 61, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 14, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0,128,129,144, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 16,131,144, 22, 1, 0, 0, 0, -240,127,144, 22, 1, 0, 0, 0,192, 34,243, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,121,101,114,115, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127,253, 78, 1,240, 1, - 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 16,131,144, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0,160,132,144, 22, 1, 0, 0, 0,128,129,144, 22, 1, 0, 0, 0,128,241,242, 24, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,181,252, 78, 1,178, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 16, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0,160,132,144, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 48,134,144, 22, 1, 0, 0, 0, - 16,131,144, 22, 1, 0, 0, 0,112,108,242, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65,110,116,105, 45, 65,108,105, - 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,226,251, 78, 1, 58, 0, - 20, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 48,134,144, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0,192,135,144, 22, 1, 0, 0, 0,160,132,144, 22, 1, 0, 0, 0,160, 93,243, 24, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,158,251, 78, 1,102, 0, 0, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, 19, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0,192,135,144, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 80,137,144, 22, 1, 0, 0, 0, - 48,134,144, 22, 1, 0, 0, 0,128, 98,243, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,117,116,112,117,116, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52,252, 78, 1,105, 0, - 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 80,137,144, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0,224,138,144, 22, 1, 0, 0, 0,192,135,144, 22, 1, 0, 0, 0, 64,105,243, 24, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 80,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,236,251, 78, 1, 0, 0, 0, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, 20, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0,224,138,144, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,112,140,144, 22, 1, 0, 0, 0, - 80,137,144, 22, 1, 0, 0, 0, 32,107,243, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,111,115,116, 32, 80,114,111, - 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,212,251, 78, 1, 0, 0, - 0, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,112,140,144, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0, 0,142,144, 22, 1, 0, 0, 0,224,138,144, 22, 1, 0, 0, 0,128,109,243, 24, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,188,251, 78, 1, 0, 0, 20, 0, 0, 0, 4, 0, 7, 0, 0, 0, 0, 0, 22, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0, 0,142,144, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,144,143,144, 22, 1, 0, 0, 0, -112,140,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,103, 97,109,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,103, 97,109,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 97,109,101, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,255, 51, 1, 36, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,144,143,144, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0, 32,145,144, 22, 1, 0, 0, 0, 0,142,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,103, 97,109,101, 95,112,108, 97,121,101,114, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,103, 97,109,101, 95,112,108, 97,121,101,114, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,110,100, 97,108,111,110,101, 32, 80,108, 97,121,101,114, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220,254, 51, 1,172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0, 32,145,144, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,176,146,144, 22, 1, 0, 0, 0, -144,143,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,103, 97,109,101, 95,115,116,101,114,101,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,103, 97,109,101, 95,115,116,101,114,101,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116,101,114,101,111, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,254, 51, 1, 36, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,176,146,144, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0, 64,148,144, 22, 1, 0, 0, 0, 32,145,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,103, 97,109,101, 95,115,104, 97,100,105,110,103, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,103, 97,109,101, 95,115,104, 97,100,105,110,103, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100,254, 51, 1, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0, 64,148,144, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,208,149,144, 22, 1, 0, 0, 0, -176,146,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,103, 97,109,101, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,103, 97,109,101, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,101,114,102,111,114,109, 97, -110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,253, 51, 1,124, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,208,149,144, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0, 96,151,144, 22, 1, 0, 0, 0, 64,148,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,103, 97,109,101, 95,115,111,117,110,100, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,103, 97,109,101, 95,115,111,117,110,100, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83,111,117,110,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98,253, 51, 1, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0, 96,151,144, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,240,152,144, 22, 1, 0, 0, 0, -208,149,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, - 95,115, 99,101,110,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, - 95,115, 99,101,110,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 99,101,110,101, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255, 51, 1, 61, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,240,152,144, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0,128,154,144, 22, 1, 0, 0, 0, 96,151,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 87, 79, 82, 76, 68, 95, 80, 84, 95, 99,111,110,116,101,120,116, 95,119,111,114,108,100, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 87, 79, 82, 76, 68, 95, 80, 84, 95, 99,111,110,116,101,120,116, 95,119,111,114,108,100, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,255, 51, 1, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0,128,154,144, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 16,156,144, 22, 1, 0, 0, 0, -240,152,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 79, 82, 76, 68, 95, 80, 84, - 95,112,114,101,118,105,101,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 79, 82, 76, 68, 95, 80, 84, - 95,112,114,101,118,105,101,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,114,101,118,105,101,119, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,255, 51, 1,136, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 16,156,144, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0,160,157,144, 22, 1, 0, 0, 0,128,154,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 87, 79, 82, 76, 68, 95, 80, 84, 95,119,111,114,108,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 87, 79, 82, 76, 68, 95, 80, 84, 95,119,111,114,108,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 87,111,114,108,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,175,254, 51, 1, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0,160,157,144, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 48,159,144, 22, 1, 0, 0, 0, - 16,156,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 79, 82, 76, 68, 95, 80, 84, - 95, 97,109, 98,105,101,110,116, 95,111, 99, 99,108,117,115,105,111,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 79, 82, 76, 68, 95, 80, 84, - 95, 97,109, 98,105,101,110,116, 95,111, 99, 99,108,117,115,105,111,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65,109, 98,105,101,110,116, 32, - 79, 99, 99,108,117,115,105,111,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,253, 51, 1,199, 0, - 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 48,159,144, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0,192,160,144, 22, 1, 0, 0, 0,160,157,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 87, 79, 82, 76, 68, 95, 80, 84, 95,109,105,115,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 87, 79, 82, 76, 68, 95, 80, 84, 95,109,105,115,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 77,105,115,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99,253, 51, 1, 85, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0,192,160,144, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48,159,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 79, 82, 76, 68, 95, 80, 84, - 95,115,116, 97,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 79, 82, 76, 68, 95, 80, 84, - 95,115,116, 97,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,114,115, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15,253, 51, 1, 60, 0, - 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0, 80,162,144, 22, 1, 0, 0, 0, -162, 0, 0, 0, 1, 0, 0, 0,176,167,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 0, 1, 0, 0,128,255,187, 2, 0, 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0, 16, 5,188, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0,208, 8,252, 24, 1, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,144,163,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -240,164,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, 0, 0,216, 65, - 0, 0, 0, 0, 0, 0,242, 67, 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,227, 1, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, - 0,128,241, 67, 0, 0,208, 65, 0,128,241, 67, 0, 0,208, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0,228, 1, 27, 0,228, 1, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,157, 5, 0, 0,128, 7, 0, 0, 85, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,228, 1, 27, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,240,164,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 80,166,144, 22, 1, 0, 0, 0,144,163,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, +192, 0,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 48, 2,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0,242, 67, 0, 0, 0, 0, 0, 0,216, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,227, 1, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0,128,241, 67, 0, 0,208, 65, 0,128,241, 67, 0, 0,208, 65, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,228, 1, 27, 0,228, 1, 27, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,157, 5, 0, 0,128, 7, 0, 0, + 85, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228, 1, 27, 0, 0, 0, 1, 0, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, + 48, 2,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,160, 3,188, 2, 0, 0, 0, 0,192, 0,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,128, 7, 0, 0,112, 0, 0, 0,235, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80,166,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,240,164,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, - 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,123, 1, 0, 0, - 18, 0, 0, 0,227, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,227, 1, 0, 0, 18, 0, 0, 0,123, 1, 0, 0, - 0, 0, 32, 65, 0, 0,128, 64, 0,124,146, 72, 0, 0, 0, 66, 10,215, 35, 60, 0, 0,200, 66,105, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 4, 8, 0,228, 1,124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,157, 5, 0, 0,128, 7, 0, 0,112, 0, 0, 0,235, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,228, 1,124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,128, 7, 0, 0, +112, 0, 0, 0,235, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, + 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, +160, 3,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 2,188, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, + 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,123, 1, 0, 0, 18, 0, 0, 0,227, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, + 18, 0, 0, 0,227, 1, 0, 0, 18, 0, 0, 0,123, 1, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 0,124,146, 72, 0, 0, 0, 66, + 10,215, 35, 60, 0, 0,200, 66,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 8, 0,228, 1,124, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,157, 5, 0, 0,128, 7, 0, 0, +112, 0, 0, 0,235, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228, 1,124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0,176,167,144, 22, 1, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, -208,174,144, 22, 1, 0, 0, 0, 80,162,144, 22, 1, 0, 0, 0,144,163,144, 22, 1, 0, 0, 0, 80,166,144, 22, 1, 0, 0, 0, - 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0, + 16, 5,188, 2, 0, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, 96, 12,188, 2, 0, 0, 0, 0,128,255,187, 2, 0, 0, 0, 0, +192, 0,188, 2, 0, 0, 0, 0,160, 3,188, 2, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,224,168,144, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 64,170,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,138, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 1, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 1, 26, 0, 20, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 64,170,144, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,168,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0, 64, 6,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,176, 7,188, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,138, 67, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, + 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 1, + 26, 0, 20, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 89, 6, 0, 0,108, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 20, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,176, 7,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 64, 6,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, 26, 0, 0, 0, 80, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 55, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,160,171,144, 22, 1, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0,160,171,144, 22, 1, 0, 0, 0, -156, 0, 0, 0, 1, 0, 0, 0,103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128, -226,215,163,188, 0, 0, 0,128, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32,193, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32, 65, 0, 0,128, 63,103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, -184,175, 31, 65, 0, 0, 32, 65,237,122,111, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,161, 14,106, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, - 98,127,249, 67,129,255, 71, 66, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32,193, 0, 0,128, 63,103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, -184,175, 31, 65, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 89, 6, 0, 0,108, 7, 0, 0, 26, 0, 0, 0, 80, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 20, 1, 55, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,100, 32,222, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 9,188, 2, 0, 0, 0, 0, + 68, 65, 84, 65,248, 2, 0, 0, 32, 9,188, 2, 0, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0,103,212,136, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0,128, 63,103,212,136, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65,237,122,111, 62, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,128, 63,103,212,136, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 32,222, 58, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 1, 0, 0,208,174,144, 22, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176,167,144, 22, 1, 0, 0, 0,224,168,144, 22, 1, 0, 0, 0, 64,170,144, 22, 1, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,194,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, -159, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, - 48,176,144, 22, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,224,212,144, 22, 1, 0, 0, 0, 0,104,144, 22, 1, 0, 0, 0, - 64, 87,144, 22, 1, 0, 0, 0,128, 89,144, 22, 1, 0, 0, 0,224, 89,144, 22, 1, 0, 0, 0, 64, 90,144, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0, 0, 0, 0, 0,147, 1, 0, 0, 17, 17, 32, 6,148, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 80, 73, 15, 3, 1, 0, 0, 0,192,182,144, 22, 1, 0, 0, 0,224,211,144, 22, 1, 0, 0, 0, - 16,177,144, 22, 1, 0, 0, 0, 96,181,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -144,195,112, 29, 1, 0, 0, 0,192,133,251, 24, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 16,177,144, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,112,178,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,150, 67, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,196, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 63, 68, 0, 0,200, 65, 0,192, 63, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 32, 6, 26, 0, 32, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,240, 75, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, 96, 12,188, 2, 0, 0, 0, 0, +157, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 5,188, 2, 0, 0, 0, 0, 64, 6,188, 2, 0, 0, 0, 0, +176, 7,188, 2, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, +176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,112,178,144, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 96,181,144, 22, 1, 0, 0, 0, 16,177,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 67, - 0, 0,180,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 67, 0, 0,180,195, 0, 0, 0, 0,203, 0, 0, 0,220, 0, 0, 0, - 18, 0, 0, 0,121, 1, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, - 18, 0, 0, 0,121, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, - 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,220, 0,122, 1,203, 0,104, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,219, 0, 0, 0, 26, 0, 0, 0,147, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220, 0,122, 1, 0, 0, 4, 0, 3, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 16, 75, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208,179,144, 22, 1, 0, 0, 0,208,179,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,208,179,144, 22, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 63,151, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 76, 79, 71, 73, 67, 95, 80, 84, 95,112,114,111,112,101,114,116,105,101,115, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 76, 79, 71, 73, 67, 95, 80, 84, 95,112,114,111,112,101,114,116,105,101,115, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,192, 13,188, 2, 0, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, +224, 51,188, 2, 0, 0, 0, 0,224,194,187, 2, 0, 0, 0, 0,176,176,187, 2, 0, 0, 0, 0,240,178,187, 2, 0, 0, 0, 0, + 80,179,187, 2, 0, 0, 0, 0,176,179,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0, + 0, 0, 0, 0,147, 1, 0, 0, 17, 17, 32, 6,148, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +144, 20,188, 2, 0, 0, 0, 0,208, 50,188, 2, 0, 0, 0, 0,160, 14,188, 2, 0, 0, 0, 0, 32, 19,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 80,114,111,112,101,114,116,105,101,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,160, 14,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 16, 16,188, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,150, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,196, 68, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 63, 68, 0, 0,200, 65, + 0,192, 63, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 32, 6, + 26, 0, 32, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 31, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 32, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,196,255,203, 0, 36, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0, 16, 16,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 32, 19,188, 2, 0, 0, 0, 0, +160, 14,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 67, 0, 0,180,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 67, + 0, 0,180,195, 0, 0, 0, 0,203, 0, 0, 0,220, 0, 0, 0, 18, 0, 0, 0,121, 1, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, 18, 0, 0, 0,121, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,220, 0, +122, 1,203, 0,104, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,219, 0, 0, 0, 26, 0, 0, 0,147, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +220, 0,122, 1, 0, 0, 4, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 96,181,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112,178,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 68, 0, 0, 0, 0, 0, 0,112, 67,228, 46, 44,195,220,133,181, 68, + 68, 65, 84, 65, 40, 1, 0, 0, 32, 19,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16, 16,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 68, 0, 0, 0, 0, 0, 0,112, 67,228, 46, 44,195,220,133,181, 68, 10, 89,199,194, 66,214,169, 67, 51, 5, 0, 0, 68, 5, 0, 0, 18, 0, 0, 0,121, 1, 0, 0, 0, 0, 0, 0, 50, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 50, 5, 0, 0, 18, 0, 0, 0,121, 1, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,250, 70, 0, 0,250, 70, 0, 0, 0, 63, 72,225,154, 63, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 68, 5, 122, 1, 51, 5,104, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 31, 6, 0, 0, 26, 0, 0, 0,147, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 5,122, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 74, 15, 3, 1, 0, 0, 0, + 68, 5,122, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 72, 0, 0, 0,192,182,144, 22, 1, 0, 0, 0,174, 0, 0, 0, 1, 0, 0, 0, 96,187,144, 22, 1, 0, 0, 0, + 68, 65, 84, 65, 72, 0, 0, 0,144, 20,188, 2, 0, 0, 0, 0,174, 0, 0, 0, 1, 0, 0, 0,112, 25,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 64,183,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,160,184,144, 22, 1, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0, 32, 21,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,144, 22,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,202, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 64, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 63, 68, 0, 0,200, 65, @@ -4310,8 +2838,8 @@ char datatoc_B_blend[]= { 0, 3, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,160,184,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0,186,144, 22, 1, 0, 0, 0, - 64,183,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,144, 22,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 24,188, 2, 0, 0, 0, 0, + 32, 21,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -4320,8 +2848,8 @@ char datatoc_B_blend[]= { 1, 0, 1, 0, 0, 0, 4, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 0,186,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -160,184,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 67, 0, 0,128,191, 0, 0, 0, 64, + 68, 65, 84, 65, 40, 1, 0, 0, 0, 24,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +144, 22,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 67, 0, 0,128,191, 0, 0, 0, 64, 0, 0,116,190, 0,128,158, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0,122, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -4330,13 +2858,13 @@ char datatoc_B_blend[]= { 0, 3,122, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,168, 0, 0, 0, 96,187,144, 22, 1, 0, 0, 0,167, 0, 0, 0, 1, 0, 0, 0, 0,191,144, 22, 1, 0, 0, 0, -192,182,144, 22, 1, 0, 0, 0, 64,183,144, 22, 1, 0, 0, 0, 0,186,144, 22, 1, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,168, 0, 0, 0,112, 25,188, 2, 0, 0, 0, 0,167, 0, 0, 0, 1, 0, 0, 0, 64, 29,188, 2, 0, 0, 0, 0, +144, 20,188, 2, 0, 0, 0, 0, 32, 21,188, 2, 0, 0, 0, 0, 0, 24,188, 2, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 64,188,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,160,189,144, 22, 1, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0, 96, 26,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,208, 27,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 64, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,189, 68, 0, 0,200, 65, @@ -4346,8 +2874,8 @@ char datatoc_B_blend[]= { 0, 3, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,160,189,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 64,188,144, 22, 1, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, 0, 0, 32,193, 0, 0, 0, 68,144, 82, 89,194, 41,149, 13, 68, + 68, 65, 84, 65, 40, 1, 0, 0,208, 27,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 96, 26,188, 2, 0, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, 0, 0, 32,193, 0, 0, 0, 68,144, 82, 89,194, 41,149, 13, 68, 176,122,214, 66, 82, 97,202, 67,239, 2, 0, 0, 0, 3, 0, 0, 18, 0, 0, 0,121, 1, 0, 0, 0, 0, 0, 0,238, 2, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,238, 2, 0, 0, 18, 0, 0, 0,121, 1, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,250, 70, 0, 0,250, 70,205,204, 76, 62, 72,225,154, 63, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 3, @@ -4356,17 +2884,17 @@ char datatoc_B_blend[]= { 0, 3,122, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 1, 0, 0, 0,191,144, 22, 1, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0,128,196,144, 22, 1, 0, 0, 0, - 96,187,144, 22, 1, 0, 0, 0, 64,188,144, 22, 1, 0, 0, 0,160,189,144, 22, 1, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 1, 0, 0, 64, 29,188, 2, 0, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0,240, 34,188, 2, 0, 0, 0, 0, +112, 25,188, 2, 0, 0, 0, 0, 96, 26,188, 2, 0, 0, 0, 0,208, 27,188, 2, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48,186,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,227, 78, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 64, 85,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,227, 78, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 96,192,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,192,193,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +160, 30,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 16, 32,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0,224,189, 68, 0, 0,208, 65, 0,224,189, 68, 0, 0,208, 65, @@ -4376,7 +2904,7 @@ char datatoc_B_blend[]= { 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -192,193,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 32,195,144, 22, 1, 0, 0, 0, 96,192,144, 22, 1, 0, 0, 0, + 16, 32,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,128, 33,188, 2, 0, 0, 0, 0,160, 30,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -4386,7 +2914,7 @@ char datatoc_B_blend[]= { 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 32,195,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,193,144, 22, 1, 0, 0, 0, +128, 33,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 32,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 0,124,146, 72, 0, 0, 0, 66, @@ -4396,15 +2924,15 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0, -128,196,144, 22, 1, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0,192,207,144, 22, 1, 0, 0, 0, 0,191,144, 22, 1, 0, 0, 0, - 96,192,144, 22, 1, 0, 0, 0, 32,195,144, 22, 1, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +240, 34,188, 2, 0, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0,144, 46,188, 2, 0, 0, 0, 0, 64, 29,188, 2, 0, 0, 0, 0, +160, 30,188, 2, 0, 0, 0, 0,128, 33,188, 2, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,176,197,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 16,199,144, 22, 1, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0, 32, 36,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,144, 37,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,157, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,231, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, @@ -4414,8 +2942,8 @@ char datatoc_B_blend[]= { 232, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 16,199,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,112,200,144, 22, 1, 0, 0, 0, -176,197,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, + 68, 65, 84, 65, 40, 1, 0, 0,144, 37,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 39,188, 2, 0, 0, 0, 0, + 32, 36,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, @@ -4424,8 +2952,8 @@ char datatoc_B_blend[]= { 1, 0, 24, 2, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,112,200,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,208,201,144, 22, 1, 0, 0, 0, - 16,199,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, + 68, 65, 84, 65, 40, 1, 0, 0, 0, 39,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,112, 40,188, 2, 0, 0, 0, 0, +144, 37,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0, @@ -4434,8 +2962,8 @@ char datatoc_B_blend[]= { 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,208,201,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 48,203,144, 22, 1, 0, 0, 0, -112,200,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128,142,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, + 68, 65, 84, 65, 40, 1, 0, 0,112, 40,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,224, 41,188, 2, 0, 0, 0, 0, + 0, 39,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128,142,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 0, 26,196, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0, @@ -4444,8 +2972,8 @@ char datatoc_B_blend[]= { 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 48,203,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208,201,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,224, 41,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +112, 40,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -4453,8 +2981,8 @@ char datatoc_B_blend[]= { 153, 2, 0, 0,128, 7, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 4, 24, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,204,144, 22, 1, 0, 0, 0, - 68, 65, 84, 65,248, 2, 0, 0,144,204,144, 22, 1, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, 1, 0,140, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 43,188, 2, 0, 0, 0, 0, + 68, 65, 84, 65,248, 2, 0, 0, 80, 43,188, 2, 0, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, 1, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,165, 7, 36, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 68,239,209, 62, 51,177,205,190, 184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, @@ -4478,18 +3006,18 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,192,207,144, 22, 1, 0, 0, 0, -157, 0, 0, 0, 1, 0, 0, 0,224,211,144, 22, 1, 0, 0, 0,128,196,144, 22, 1, 0, 0, 0,176,197,144, 22, 1, 0, 0, 0, - 48,203,144, 22, 1, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,144, 46,188, 2, 0, 0, 0, 0, +157, 0, 0, 0, 1, 0, 0, 0,208, 50,188, 2, 0, 0, 0, 0,240, 34,188, 2, 0, 0, 0, 0, 32, 36,188, 2, 0, 0, 0, 0, +224, 41,188, 2, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, - 48,194,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 32,209,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -128,210,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,240, 47,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 96, 49,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, @@ -4498,8 +3026,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0,152, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,128,210,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 32,209,144, 22, 1, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 96, 49,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,240, 47,188, 2, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66, 112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, @@ -4508,40 +3036,40 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0,224,211,144, 22, 1, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,192,207,144, 22, 1, 0, 0, 0, 32,209,144, 22, 1, 0, 0, 0,128,210,144, 22, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0,208, 50,188, 2, 0, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,144, 46,188, 2, 0, 0, 0, 0,240, 47,188, 2, 0, 0, 0, 0, 96, 49,188, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,224,212,144, 22, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, -112,241,144, 22, 1, 0, 0, 0, 48,176,144, 22, 1, 0, 0, 0, 0, 91,144, 22, 1, 0, 0, 0, 96, 91,144, 22, 1, 0, 0, 0, - 32, 89,144, 22, 1, 0, 0, 0,160, 90,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 5, 0, 0,128, 7, 0, 0, -149, 1, 0, 0, 21, 4, 0, 0, 9, 9, 72, 2,129, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 66, 15, 3, 1, 0, 0, 0, -128,216,144, 22, 1, 0, 0, 0, 16,240,144, 22, 1, 0, 0, 0,192,213,144, 22, 1, 0, 0, 0, 32,215,144, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,233, 36, 3, 1, 0, 0, 0,208,110,113, 29, 1, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,192,213,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 32,215,144, 22, 1, 0, 0, 0, + 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,224, 51,188, 2, 0, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, + 64, 81,188, 2, 0, 0, 0, 0,192, 13,188, 2, 0, 0, 0, 0,112,180,187, 2, 0, 0, 0, 0,208,180,187, 2, 0, 0, 0, 0, +144,178,187, 2, 0, 0, 0, 0, 16,180,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 5, 0, 0,128, 7, 0, 0, +149, 1, 0, 0, 21, 4, 0, 0, 9, 9, 72, 2,129, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +160, 55,188, 2, 0, 0, 0, 0,224, 79,188, 2, 0, 0, 0, 0,192, 52,188, 2, 0, 0, 0, 0, 48, 54,188, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,192, 52,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 48, 54,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,251, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 18, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,181, 67, 0, 0,200, 65, 0,128,181, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 72, 2, 26, 0, 72, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 5, 0, 0,128, 7, 0, 0,149, 1, 0, 0,174, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 72, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 68, 15, 3, 1, 0, 0, 0, + 72, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 32,215,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192,213,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0,128,181, 67, 0, 0, 0, 0, 0,128,218, 67, 0, 0, 0, 0,131,248, 1, 68, + 68, 65, 84, 65, 40, 1, 0, 0, 48, 54,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +192, 52,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,181, 67, 0, 0, 0, 0, 0,128,218, 67, 0, 0, 0, 0,131,248, 1, 68, 0, 0, 0, 0,176,222, 8, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 2, 0, 0, 0, 0, 0, 0,102, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,122, 68, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 4, 10, 0, 72, 2, 103, 2, 72, 2,103, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 5, 0, 0,128, 7, 0, 0,175, 1, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 72, 2,103, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 67, 15, 3, 1, 0, 0, 0, + 72, 2,103, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,144, 2, 0, 0,128,216,144, 22, 1, 0, 0, 0,169, 0, 0, 0, 1, 0, 0, 0, 16,222,144, 22, 1, 0, 0, 0, + 68, 65, 84, 65,144, 2, 0, 0,160, 55,188, 2, 0, 0, 0, 0,169, 0, 0, 0, 1, 0, 0, 0, 80, 61,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -4562,8 +3090,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80,219,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -176,220,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,163, 67, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,112, 58,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +224, 59,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,163, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,182, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,107, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,161, 67, 0, 0,200, 65, 0,128,161, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, @@ -4572,8 +3100,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0,108, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176,220,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 80,219,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0,128,131, 67, 0, 0,228,194, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,224, 59,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,112, 58,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,131, 67, 0, 0,228,194, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,173, 67, 0, 0,210,195, 0, 0, 0, 0, 91, 1, 0, 0,108, 1, 0, 0, 18, 0, 0, 0,181, 1, 0, 0, 0, 0, 0, 0, 90, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 90, 1, 0, 0, 18, 0, 0, 0,181, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 18, 0, 0, 0, 2, 0, 3, 3, @@ -4582,26 +3110,26 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0,108, 1,182, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 16,222,144, 22, 1, 0, 0, 0,166, 0, 0, 0, 1, 0, 0, 0, -144,227,144, 22, 1, 0, 0, 0,128,216,144, 22, 1, 0, 0, 0, 80,219,144, 22, 1, 0, 0, 0,176,220,144, 22, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80, 61,188, 2, 0, 0, 0, 0,166, 0, 0, 0, 1, 0, 0, 0, + 0, 67,188, 2, 0, 0, 0, 0,160, 55,188, 2, 0, 0, 0, 0,112, 58,188, 2, 0, 0, 0, 0,224, 59,188, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112,223,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +192, 62,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65, 16, 0, 0, 0,112,223,144, 22, 1, 0, 0, 0,218, 0, 0, 0, 1, 0, 0, 0, - 13, 0, 0, 0, 13, 0, 0, 0,192,223,144, 22, 1, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0,192,223,144, 22, 1, 0, 0, 0, -217, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 48,186,129, 3, 1, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0, - 48,186,129, 3, 1, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0, 48,186,129, 3, 1, 0, 0, 0, 21, 0, 1, 0, 1, 0, 1, 0, - 48,186,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,128,242, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 48,200,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,112,253, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 96,246, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,112,251, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 48,206,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48,238, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 48,194,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 96,237, 39, 3, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -208,224,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 48,226,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65, 16, 0, 0, 0,192, 62,188, 2, 0, 0, 0, 0,218, 0, 0, 0, 1, 0, 0, 0, + 13, 0, 0, 0, 13, 0, 0, 0, 16, 63,188, 2, 0, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0, 16, 63,188, 2, 0, 0, 0, 0, +217, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 64, 85,192, 2, 0, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0, + 64, 85,192, 2, 0, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0, 64, 85,192, 2, 0, 0, 0, 0, 21, 0, 1, 0, 1, 0, 1, 0, + 64, 85,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,160,100,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, +144,113,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,176,163,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, +240,123,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 80,145,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, + 16,119,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 16, 96,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, +176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48, 95,192, 2, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, + 32, 64,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,144, 65,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,162, 67, 0, 0, 0, 0, 0, 0,240, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, @@ -4611,7 +3139,7 @@ char datatoc_B_blend[]= { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 48,226,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,224,144, 22, 1, 0, 0, 0, +144, 65,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 64,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,153, 67, 0, 0,137,196, 0, 0, 0, 0, 0, 0, 0, 0,254,127,153, 67,253,127,198,195, 0, 0, 0, 0, 51, 1, 0, 0, 68, 1, 0, 0, 18, 0, 0, 0,158, 1, 0, 0, 0, 0, 0, 0, 50, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 50, 1, 0, 0, 18, 0, 0, 0,158, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -4621,16 +3149,16 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0, -144,227,144, 22, 1, 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0,240,232,144, 22, 1, 0, 0, 0, 16,222,144, 22, 1, 0, 0, 0, -208,224,144, 22, 1, 0, 0, 0, 48,226,144, 22, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 67,188, 2, 0, 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0,144, 72,188, 2, 0, 0, 0, 0, 80, 61,188, 2, 0, 0, 0, 0, + 32, 64,188, 2, 0, 0, 0, 0,144, 65,188, 2, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,208,228,144, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 48,230,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, +255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 64, 68,188, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,176, 69,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0,242, 67, 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,227, 1, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0,128,241, 67, 0, 0,208, 65, 0,128,241, 67, 0, 0,208, 65, 0, 0,128, 63, 0, 0,128, 63, @@ -4639,8 +3167,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228, 1, 27, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 48,230,144, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,144,231,144, 22, 1, 0, 0, 0,208,228,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176, 69,188, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 32, 71,188, 2, 0, 0, 0, 0, 64, 68,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -4649,8 +3177,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,144,231,144, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,230,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 32, 71,188, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176, 69,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,123, 1, 0, 0, 18, 0, 0, 0,227, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,227, 1, 0, 0, 18, 0, 0, 0,123, 1, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 0,124,146, 72, 0, 0, 0, 66, 10,215, 35, 60, 0, 0,200, 66, @@ -4659,16 +3187,16 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228, 1,124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0,240,232,144, 22, 1, 0, 0, 0, -163, 0, 0, 0, 1, 0, 0, 0, 16,240,144, 22, 1, 0, 0, 0,144,227,144, 22, 1, 0, 0, 0,208,228,144, 22, 1, 0, 0, 0, -144,231,144, 22, 1, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0,144, 72,188, 2, 0, 0, 0, 0, +163, 0, 0, 0, 1, 0, 0, 0,224, 79,188, 2, 0, 0, 0, 0, 0, 67,188, 2, 0, 0, 0, 0, 64, 68,188, 2, 0, 0, 0, 0, + 32, 71,188, 2, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 32,234,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,128,235,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +192, 73,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 48, 75,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,138, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, @@ -4678,7 +3206,7 @@ char datatoc_B_blend[]= { 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -128,235,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,234,144, 22, 1, 0, 0, 0, + 48, 75,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 73,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -4687,8 +3215,8 @@ char datatoc_B_blend[]= { 26, 0, 0, 0, 80, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 55, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,236,144, 22, 1, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, -224,236,144, 22, 1, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0,103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 76,188, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, +160, 76,188, 2, 0, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0,103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, @@ -4712,142 +3240,73 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, 16,240,144, 22, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,240,232,144, 22, 1, 0, 0, 0, 32,234,144, 22, 1, 0, 0, 0,128,235,144, 22, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,224, 79,188, 2, 0, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,144, 72,188, 2, 0, 0, 0, 0,192, 73,188, 2, 0, 0, 0, 0, 48, 75,188, 2, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,194,129, 3, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,160, 0, 0, 0,112,241,144, 22, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 80, 20,145, 22, 1, 0, 0, 0, -224,212,144, 22, 1, 0, 0, 0,192, 91,144, 22, 1, 0, 0, 0, 32, 92,144, 22, 1, 0, 0, 0, 96, 91,144, 22, 1, 0, 0, 0, - 0, 91,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 1, 0, 0, 55, 5, 0, 0,149, 1, 0, 0, 21, 4, 0, 0, - 1, 1,251, 3,129, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 5, 15, 3, 1, 0, 0, 0,192, 5,145, 22, 1, 0, 0, 0, - 80, 19,145, 22, 1, 0, 0, 0, 80,242,144, 22, 1, 0, 0, 0, 48, 1,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,160, 77,253, 24, 1, 0, 0, 0,160,199,252, 24, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 80,242,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,176,243,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,160, 0, 0, 0, 64, 81,188, 2, 0, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 96,117,188, 2, 0, 0, 0, 0, +224, 51,188, 2, 0, 0, 0, 0, 48,181,187, 2, 0, 0, 0, 0,144,181,187, 2, 0, 0, 0, 0,208,180,187, 2, 0, 0, 0, 0, +112,180,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 1, 0, 0, 55, 5, 0, 0,149, 1, 0, 0, 21, 4, 0, 0, + 1, 1,251, 3,129, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,102,188, 2, 0, 0, 0, 0, + 80,116,188, 2, 0, 0, 0, 0, 32, 82,188, 2, 0, 0, 0, 0,160, 97,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, + 32, 82,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,144, 83,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,192,126, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,250, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,251, 3, 26, 0,251, 3, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 1, 0, 0, 55, 5, 0, 0, 149, 1, 0, 0,174, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,251, 3, 26, 0, 0, 0, 1, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176, 13, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -176,243,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 16,245,144, 22, 1, 0, 0, 0, 80,242,144, 22, 1, 0, 0, 0, +144, 83,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 85,188, 2, 0, 0, 0, 0, 32, 82,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0, 143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 1, 0, 0, 61, 1, 0, 0, 175, 1, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,103, 2, 0, 0, 5, 0, - 3, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 16, 10, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 16,245,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,112,246,144, 22, 1, 0, 0, 0,176,243,144, 22, 1, 0, 0, 0, + 0, 85,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,112, 86,188, 2, 0, 0, 0, 0,144, 83,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 1, 0, 0, 55, 5, 0, 0, 175, 1, 0, 0,175, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, - 34, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,224, 11, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -112,246,144, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 48, 1,145, 22, 1, 0, 0, 0, 16,245,144, 22, 1, 0, 0, 0, +112, 86,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,160, 97,188, 2, 0, 0, 0, 0, 0, 85,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 0,254,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128,209,195, 0, 0, 0, 0, 163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,180, 1, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,180, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0,181, 1,163, 0,163, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 5, 0, 0, 55, 5, 0, 0, 175, 1, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, - 4, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 80, 7, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,208,247,144, 22, 1, 0, 0, 0,160,255,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -208,247,144, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 96,249,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,111, 98,106,101, 99,116, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,111, 98,106,101, 99,116, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,114, 97,110,115,102,111,114,109, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,254,163, 0,104, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 96,249,144, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -240,250,144, 22, 1, 0, 0, 0,208,247,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,103,112,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,103,112,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 71,114,101, 97,115,101, 32, 80,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,254,253,163, 0, 58, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -240,250,144, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,128,252,144, 22, 1, 0, 0, 0, 96,249,144, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100,118,105,101,119, - 95,112,114,111,112,101,114,116,105,101,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100,118,105,101,119, - 95,112,114,111,112,101,114,116,105,101,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86,105,101,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45,253,163, 0, 59, 1, 0, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,128,252,144, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 16,254,144, 22, 1, 0, 0, 0,240,250,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100,118,105,101,119, 95,100,105,115,112,108, 97,121, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100,118,105,101,119, 95,100,105,115,112,108, 97,121, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68,105,115,112,108, 97,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 80,254,163, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 16,254,144, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,160,255,144, 22, 1, 0, 0, 0,128,252,144, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 98, 97, 99,107,103,114, -111,117,110,100, 95,105,109, 97,103,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 98, 97, 99,107,103,114, -111,117,110,100, 95,105,109, 97,103,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 97, 99,107,103,114,111,117,110,100, 32, 73,109, 97,103,101, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,254,163, 0, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,160,255,144, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 16,254,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,114, 97,110,115,102,111,114,109, 95,111,114,105,101,110,116, 97,116,105,111,110, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,114, 97,110,115,102,111,114,109, 95,111,114,105,101,110,116, 97,116,105,111,110, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 84,114, 97,110,115,102,111,114,109, 32, 79,114,105,101,110,116, 97,116,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 8,254,163, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 48, 1,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,246,144, 22, 1, 0, 0, 0, +160, 97,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112, 86,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 1, 0, 0, 55, 5, 0, 0, 175, 1, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,251, 3,103, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112, 6, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 2,145, 22, 1, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, -144, 2,145, 22, 1, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0,190, 35, 30, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 99,188, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, + 16, 99,188, 2, 0, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0,190, 35, 30, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 2,131, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0,128,111, 18,131,187, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, @@ -4871,17 +3330,17 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190, - 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,192, 5,145, 22, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, -224, 9,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, 80,102,188, 2, 0, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, +144,106,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,194,129, 3, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 32, 7,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,128, 8,145, 22, 1, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,176,103,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 32,105,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,195, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,189, 68, 0, 0,200, 65, @@ -4891,8 +3350,8 @@ char datatoc_B_blend[]= { 24, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,128, 8,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 32, 7,145, 22, 1, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, 0, 0, 32,193, 0, 0, 0, 68, 56,205,190,195,156,102, 95, 68, + 68, 65, 84, 65, 40, 1, 0, 0, 32,105,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +176,103,188, 2, 0, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, 0, 0, 32,193, 0, 0, 0, 68, 56,205,190,195,156,102, 95, 68, 160,228,244, 64,110, 44,252, 67, 7, 6, 0, 0, 24, 6, 0, 0, 18, 0, 0, 0,106, 2, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 18, 0, 0, 0,106, 2, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,250, 70, 0, 0,250, 70,205,204, 76, 62, 72,225,154, 63, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 24, 6, @@ -4901,17 +3360,17 @@ char datatoc_B_blend[]= { 24, 6,107, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 1, 0, 0,224, 9,145, 22, 1, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 96, 15,145, 22, 1, 0, 0, 0, -192, 5,145, 22, 1, 0, 0, 0, 32, 7,145, 22, 1, 0, 0, 0,128, 8,145, 22, 1, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 1, 0, 0,144,106,188, 2, 0, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 64,112,188, 2, 0, 0, 0, 0, + 80,102,188, 2, 0, 0, 0, 0,176,103,188, 2, 0, 0, 0, 0, 32,105,188, 2, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48,186,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,193, 67, 81, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 64, 85,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,193, 67, 81, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 64, 11,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,160, 12,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +240,107,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 96,109,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0,224,189, 68, 0, 0,208, 65, 0,224,189, 68, 0, 0,208, 65, @@ -4921,7 +3380,7 @@ char datatoc_B_blend[]= { 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -160, 12,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 14,145, 22, 1, 0, 0, 0, 64, 11,145, 22, 1, 0, 0, 0, + 96,109,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,208,110,188, 2, 0, 0, 0, 0,240,107,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -4931,7 +3390,7 @@ char datatoc_B_blend[]= { 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 0, 14,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 12,145, 22, 1, 0, 0, 0, +208,110,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,109,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 0,124,146, 72, 0, 0, 0, 66, @@ -4941,15 +3400,15 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0, - 96, 15,145, 22, 1, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, 80, 19,145, 22, 1, 0, 0, 0,224, 9,145, 22, 1, 0, 0, 0, - 64, 11,145, 22, 1, 0, 0, 0, 0, 14,145, 22, 1, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 64,112,188, 2, 0, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, 80,116,188, 2, 0, 0, 0, 0,144,106,188, 2, 0, 0, 0, 0, +240,107,188, 2, 0, 0, 0, 0,208,110,188, 2, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,144, 16,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,240, 17,145, 22, 1, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,112,113,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,224,114,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, @@ -4959,8 +3418,8 @@ char datatoc_B_blend[]= { 152, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,240, 17,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -144, 16,145, 22, 1, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, + 68, 65, 84, 65, 40, 1, 0, 0,224,114,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +112,113,188, 2, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0,152, 4, @@ -4969,59 +3428,59 @@ char datatoc_B_blend[]= { 152, 4,122, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,200, 0, 0, 0, 80, 19,145, 22, 1, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 96, 15,145, 22, 1, 0, 0, 0,144, 16,145, 22, 1, 0, 0, 0,240, 17,145, 22, 1, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,200, 0, 0, 0, 80,116,188, 2, 0, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 64,112,188, 2, 0, 0, 0, 0,112,113,188, 2, 0, 0, 0, 0,224,114,188, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, - 68, 65, 84, 65,160, 0, 0, 0, 80, 20,145, 22, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112,241,144, 22, 1, 0, 0, 0,128, 89,144, 22, 1, 0, 0, 0,192, 88,144, 22, 1, 0, 0, 0, 32, 92,144, 22, 1, 0, 0, 0, -192, 91,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 1, 0, 0,149, 1, 0, 0, 21, 4, 0, 0, - 3, 3, 60, 1,129, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 15, 3, 1, 0, 0, 0,240, 23,145, 22, 1, 0, 0, 0, - 80, 50,145, 22, 1, 0, 0, 0, 48, 21,145, 22, 1, 0, 0, 0,144, 22,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,128, 94,112, 29, 1, 0, 0, 0,144,198,254, 24, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 48, 21,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,144, 22,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,160, 0, 0, 0, 96,117,188, 2, 0, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 64, 81,188, 2, 0, 0, 0, 0,240,178,187, 2, 0, 0, 0, 0, 48,178,187, 2, 0, 0, 0, 0,144,181,187, 2, 0, 0, 0, 0, + 48,181,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 1, 0, 0,149, 1, 0, 0, 21, 4, 0, 0, + 3, 3, 60, 1,129, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,121,188, 2, 0, 0, 0, 0, + 96,148,188, 2, 0, 0, 0, 0, 64,118,188, 2, 0, 0, 0, 0,176,119,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, + 64,118,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,176,119,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,163, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,158, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 83, 67, 0, 0,200, 65, 0, 0, 83, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 60, 1, 26, 0, 60, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 1, 0, 0, 149, 1, 0, 0,174, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 1, 26, 0, 0, 0, 1, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 2, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -144, 22,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 21,145, 22, 1, 0, 0, 0, +176,119,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,118,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,131, 67, 0, 0,228,194, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,149, 67, 0, 64, 21,196, 0, 0, 0, 0, 43, 1, 0, 0, 60, 1, 0, 0, 18, 0, 0, 0,102, 2, 0, 0, 0, 0, 0, 0, 42, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 42, 1, 0, 0, 18, 0, 0, 0,102, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 18, 0, 0, 0, 2, 0, 3, 3, 0, 0, 0, 4, 6, 0, 60, 1,103, 2, 43, 1, 85, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 1, 0, 0, 175, 1, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 1,103, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 1, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -240, 23,145, 22, 1, 0, 0, 0,166, 0, 0, 0, 1, 0, 0, 0,192, 36,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 32,121,188, 2, 0, 0, 0, 0,166, 0, 0, 0, 1, 0, 0, 0, 96,134,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112,221, 19, 26, 1, 0, 0, 0,112,221, 19, 26, 1, 0, 0, 0, 80, 25,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,122,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65, 16, 0, 0, 0, - 80, 25,145, 22, 1, 0, 0, 0,218, 0, 0, 0, 1, 0, 0, 0, 13, 0, 0, 0, 13, 0, 0, 0,160, 25,145, 22, 1, 0, 0, 0, - 68, 65, 84, 65,208, 0, 0, 0,160, 25,145, 22, 1, 0, 0, 0,217, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, - 48,186,129, 3, 1, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0, 48,186,129, 3, 1, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0, - 48,186,129, 3, 1, 0, 0, 0, 21, 0, 1, 0, 1, 0, 1, 0, 48,186,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, -128,242, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48,200,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, -112,253, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 96,246, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, -112,251, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48,206,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 48,238, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48,194,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 96,237, 39, 3, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176, 26,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 16, 28,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 68, 68, 0, 0, 0, 0, 0, 0,208, 65, +144,122,188, 2, 0, 0, 0, 0,218, 0, 0, 0, 1, 0, 0, 0, 13, 0, 0, 0, 13, 0, 0, 0,224,122,188, 2, 0, 0, 0, 0, + 68, 65, 84, 65,208, 0, 0, 0,224,122,188, 2, 0, 0, 0, 0,217, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 64, 85,192, 2, 0, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0, 64, 85,192, 2, 0, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0, + 64, 85,192, 2, 0, 0, 0, 0, 21, 0, 1, 0, 1, 0, 1, 0, 64, 85,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, +160,100,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,144,113,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, +176,163,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,240,123,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, + 80,145,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 16,119,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, + 16, 96,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, + 48, 95,192, 2, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,240,123,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 96,125,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 68, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 84, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,211, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, @@ -5030,8 +3489,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0,212, 0, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 16, 28,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -112, 29,145, 22, 1, 0, 0, 0,176, 26,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 96,125,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +208,126,188, 2, 0, 0, 0, 0,240,123,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, @@ -5040,8 +3499,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,182, 1, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,112, 29,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -208, 30,145, 22, 1, 0, 0, 0, 16, 28,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,208,126,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 64,128,188, 2, 0, 0, 0, 0, 96,125,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, @@ -5050,8 +3509,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,208, 30,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 48, 32,145, 22, 1, 0, 0, 0,112, 29,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128,142,196, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 64,128,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +176,129,188, 2, 0, 0, 0, 0,208,126,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128,142,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 0, 26,196, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, @@ -5060,8 +3519,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 48, 32,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,208, 30,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176,129,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 64,128,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5070,7 +3529,7 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0,212, 0,182, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -144, 33,145, 22, 1, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0,144, 33,145, 22, 1, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, + 32,131,188, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, 32,131,188, 2, 0, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, 121, 92,163, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190, 35, 30, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0,128,111, 18,131,187, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5095,17 +3554,17 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, -192, 36,145, 22, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0,224, 40,145, 22, 1, 0, 0, 0,240, 23,145, 22, 1, 0, 0, 0, -176, 26,145, 22, 1, 0, 0, 0, 48, 32,145, 22, 1, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 96,134,188, 2, 0, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0,160,138,188, 2, 0, 0, 0, 0, 32,121,188, 2, 0, 0, 0, 0, +240,123,188, 2, 0, 0, 0, 0,176,129,188, 2, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0, 7, 0, 48,194,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, 7, 0,176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 32, 38,145, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,128, 39,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 68, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,192,135,188, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 48,137,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,195, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,189, 68, 0, 0,200, 65, 0,224,189, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, @@ -5114,8 +3573,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,128, 39,145, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 38,145, 22, 1, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 48,137,188, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,135,188, 2, 0, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, 0, 0, 32,193, 0, 0, 0, 68, 56,205,190,195,156,102, 95, 68,160,228,244, 64,110, 44,252, 67, 7, 6, 0, 0, 24, 6, 0, 0, 18, 0, 0, 0,106, 2, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 18, 0, 0, 0,106, 2, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,250, 70, 0, 0,250, 70,205,204, 76, 62, 72,225,154, 63, @@ -5124,18 +3583,18 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 6,107, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,224, 40,145, 22, 1, 0, 0, 0, -173, 0, 0, 0, 1, 0, 0, 0, 96, 46,145, 22, 1, 0, 0, 0,192, 36,145, 22, 1, 0, 0, 0, 32, 38,145, 22, 1, 0, 0, 0, -128, 39,145, 22, 1, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,160,138,188, 2, 0, 0, 0, 0, +173, 0, 0, 0, 1, 0, 0, 0, 80,144,188, 2, 0, 0, 0, 0, 96,134,188, 2, 0, 0, 0, 0,192,135,188, 2, 0, 0, 0, 0, + 48,137,188, 2, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,186,129, 3, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 85,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,193, 67, 81, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 64, 42,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -160, 43,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, 0, 0,216, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0,140,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +112,141,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0,224,189, 68, 0, 0,208, 65, 0,224,189, 68, 0, 0,208, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, @@ -5144,8 +3603,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 27, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,160, 43,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 45,145, 22, 1, 0, 0, 0, 64, 42,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,112,141,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +224,142,188, 2, 0, 0, 0, 0, 0,140,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5154,8 +3613,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0, 45,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,160, 43,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,224,142,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,112,141,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 0,124,146, 72, 0, 0, 0, 66, 10,215, 35, 60, 0, 0,200, 66,105, 0, 0, 0, 0, 0, 0, 0, @@ -5164,16 +3623,16 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0,240, 5,163, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0, 96, 46,145, 22, 1, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, - 80, 50,145, 22, 1, 0, 0, 0,224, 40,145, 22, 1, 0, 0, 0, 64, 42,145, 22, 1, 0, 0, 0, 0, 45,145, 22, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0, 80,144,188, 2, 0, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, + 96,148,188, 2, 0, 0, 0, 0,160,138,188, 2, 0, 0, 0, 0, 0,140,188, 2, 0, 0, 0, 0,224,142,188, 2, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,144, 47,145, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,240, 48,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, + 0, 0, 0, 0, 0, 0,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,128,145,188, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,240,146,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, @@ -5182,8 +3641,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,240, 48,145, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 47,145, 22, 1, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,240,146,188, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,145,188, 2, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, @@ -5192,288 +3651,150 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0, 80, 50,145, 22, 1, 0, 0, 0, -172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 46,145, 22, 1, 0, 0, 0,144, 47,145, 22, 1, 0, 0, 0, -240, 48,145, 22, 1, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0, 96,148,188, 2, 0, 0, 0, 0, +172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,144,188, 2, 0, 0, 0, 0,128,145,188, 2, 0, 0, 0, 0, +240,146,188, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 83, 78, 0, 0,208, 0, 0, 0,208, 51,145, 22, 1, 0, 0, 0, -190, 0, 0, 0, 1, 0, 0, 0, 96,116,146, 22, 1, 0, 0, 0, 48, 86,144, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 83, 78, 0, 0,208, 0, 0, 0, 0,150,188, 2, 0, 0, 0, 0, +190, 0, 0, 0, 1, 0, 0, 0,176,226,189, 2, 0, 0, 0, 0,160,175,187, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 80,114,111,112,101,114,116,105,101,115, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 52,145, 22, 1, 0, 0, 0,128, 58,145, 22, 1, 0, 0, 0, -224, 58,145, 22, 1, 0, 0, 0, 0, 66,145, 22, 1, 0, 0, 0, 96, 66,145, 22, 1, 0, 0, 0, 0, 48,146, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,186,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,151,188, 2, 0, 0, 0, 0,176,156,188, 2, 0, 0, 0, 0, + 16,157,188, 2, 0, 0, 0, 0, 96,165,188, 2, 0, 0, 0, 0,208,165,188, 2, 0, 0, 0, 0,208,155,189, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 85,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -155,180, 21, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, -224, 52,145, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 64, 53,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 64, 53,145, 22, 1, 0, 0, 0, -191, 0, 0, 0, 1, 0, 0, 0,160, 53,145, 22, 1, 0, 0, 0,224, 52,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 49, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,160, 53,145, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, - 0, 54,145, 22, 1, 0, 0, 0, 64, 53,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 49, 4, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0, 0, 54,145, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 96, 54,145, 22, 1, 0, 0, 0, -160, 53,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, - 96, 54,145, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,192, 54,145, 22, 1, 0, 0, 0, 0, 54,145, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,192, 54,145, 22, 1, 0, 0, 0, -191, 0, 0, 0, 1, 0, 0, 0, 32, 55,145, 22, 1, 0, 0, 0, 96, 54,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128, 7, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 32, 55,145, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, -128, 55,145, 22, 1, 0, 0, 0,192, 54,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 6, 24, 4, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0,128, 55,145, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,224, 55,145, 22, 1, 0, 0, 0, - 32, 55,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 6, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, -224, 55,145, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 64, 56,145, 22, 1, 0, 0, 0,128, 55,145, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,104, 1, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 64, 56,145, 22, 1, 0, 0, 0, -191, 0, 0, 0, 1, 0, 0, 0,160, 56,145, 22, 1, 0, 0, 0,224, 55,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, 1, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,160, 56,145, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, - 0, 57,145, 22, 1, 0, 0, 0, 64, 56,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0, 0, 57,145, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 96, 57,145, 22, 1, 0, 0, 0, -160, 56,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 2, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, - 96, 57,145, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,192, 57,145, 22, 1, 0, 0, 0, 0, 57,145, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,136, 4, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,192, 57,145, 22, 1, 0, 0, 0, -191, 0, 0, 0, 1, 0, 0, 0, 32, 58,145, 22, 1, 0, 0, 0, 96, 57,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -136, 4, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 32, 58,145, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, -128, 58,145, 22, 1, 0, 0, 0,192, 57,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 6, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0,128, 58,145, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 32, 58,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 6, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -224, 58,145, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 64, 59,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 64, 53,145, 22, 1, 0, 0, 0,160, 53,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 64, 59,145, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,160, 59,145, 22, 1, 0, 0, 0,224, 58,145, 22, 1, 0, 0, 0, - 64, 53,145, 22, 1, 0, 0, 0, 96, 54,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -160, 59,145, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0, 60,145, 22, 1, 0, 0, 0, 64, 59,145, 22, 1, 0, 0, 0, -160, 53,145, 22, 1, 0, 0, 0,192, 54,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 0, 60,145, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 96, 60,145, 22, 1, 0, 0, 0,160, 59,145, 22, 1, 0, 0, 0, - 96, 54,145, 22, 1, 0, 0, 0,192, 54,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 96, 60,145, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,192, 60,145, 22, 1, 0, 0, 0, 0, 60,145, 22, 1, 0, 0, 0, -224, 52,145, 22, 1, 0, 0, 0, 96, 54,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -192, 60,145, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 32, 61,145, 22, 1, 0, 0, 0, 96, 60,145, 22, 1, 0, 0, 0, - 0, 54,145, 22, 1, 0, 0, 0,192, 54,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 32, 61,145, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,128, 61,145, 22, 1, 0, 0, 0,192, 60,145, 22, 1, 0, 0, 0, -224, 52,145, 22, 1, 0, 0, 0,224, 55,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -128, 61,145, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,224, 61,145, 22, 1, 0, 0, 0, 32, 61,145, 22, 1, 0, 0, 0, - 96, 54,145, 22, 1, 0, 0, 0, 64, 56,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -224, 61,145, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 64, 62,145, 22, 1, 0, 0, 0,128, 61,145, 22, 1, 0, 0, 0, -224, 55,145, 22, 1, 0, 0, 0, 64, 56,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 64, 62,145, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,160, 62,145, 22, 1, 0, 0, 0,224, 61,145, 22, 1, 0, 0, 0, -224, 55,145, 22, 1, 0, 0, 0,160, 56,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -160, 62,145, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0, 63,145, 22, 1, 0, 0, 0, 64, 62,145, 22, 1, 0, 0, 0, - 64, 56,145, 22, 1, 0, 0, 0, 0, 57,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 0, 63,145, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 96, 63,145, 22, 1, 0, 0, 0,160, 62,145, 22, 1, 0, 0, 0, -160, 56,145, 22, 1, 0, 0, 0, 0, 57,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 96, 63,145, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,192, 63,145, 22, 1, 0, 0, 0, 0, 63,145, 22, 1, 0, 0, 0, -160, 56,145, 22, 1, 0, 0, 0, 96, 57,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -192, 63,145, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 32, 64,145, 22, 1, 0, 0, 0, 96, 63,145, 22, 1, 0, 0, 0, - 0, 57,145, 22, 1, 0, 0, 0,192, 57,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 32, 64,145, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,128, 64,145, 22, 1, 0, 0, 0,192, 63,145, 22, 1, 0, 0, 0, - 96, 57,145, 22, 1, 0, 0, 0,192, 57,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -128, 64,145, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,224, 64,145, 22, 1, 0, 0, 0, 32, 64,145, 22, 1, 0, 0, 0, - 96, 57,145, 22, 1, 0, 0, 0, 32, 58,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -224, 64,145, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 64, 65,145, 22, 1, 0, 0, 0,128, 64,145, 22, 1, 0, 0, 0, -192, 57,145, 22, 1, 0, 0, 0,128, 58,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 64, 65,145, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,160, 65,145, 22, 1, 0, 0, 0,224, 64,145, 22, 1, 0, 0, 0, - 32, 58,145, 22, 1, 0, 0, 0,128, 58,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -160, 65,145, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0, 66,145, 22, 1, 0, 0, 0, 64, 65,145, 22, 1, 0, 0, 0, -192, 54,145, 22, 1, 0, 0, 0,128, 58,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 0, 66,145, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 65,145, 22, 1, 0, 0, 0, - 0, 54,145, 22, 1, 0, 0, 0, 32, 58,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, - 96, 66,145, 22, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 0, 70,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 96, 54,145, 22, 1, 0, 0, 0, 64, 53,145, 22, 1, 0, 0, 0,160, 53,145, 22, 1, 0, 0, 0,192, 54,145, 22, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, + 16,151,188, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,112,151,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,112,151,188, 2, 0, 0, 0, 0, +191, 0, 0, 0, 1, 0, 0, 0,208,151,188, 2, 0, 0, 0, 0, 16,151,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 49, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,208,151,188, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, + 48,152,188, 2, 0, 0, 0, 0,112,151,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 49, 4, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0, 48,152,188, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,144,152,188, 2, 0, 0, 0, 0, +208,151,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, +144,152,188, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,240,152,188, 2, 0, 0, 0, 0, 48,152,188, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,240,152,188, 2, 0, 0, 0, 0, +191, 0, 0, 0, 1, 0, 0, 0, 80,153,188, 2, 0, 0, 0, 0,144,152,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +128, 7, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 80,153,188, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, +176,153,188, 2, 0, 0, 0, 0,240,152,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 6, 24, 4, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0,176,153,188, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 16,154,188, 2, 0, 0, 0, 0, + 80,153,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 6, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, + 16,154,188, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,112,154,188, 2, 0, 0, 0, 0,176,153,188, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,104, 1, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,112,154,188, 2, 0, 0, 0, 0, +191, 0, 0, 0, 1, 0, 0, 0,208,154,188, 2, 0, 0, 0, 0, 16,154,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +104, 1, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,208,154,188, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, + 48,155,188, 2, 0, 0, 0, 0,112,154,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0, 48,155,188, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,144,155,188, 2, 0, 0, 0, 0, +208,154,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 2, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, +144,155,188, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,240,155,188, 2, 0, 0, 0, 0, 48,155,188, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,136, 4, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,240,155,188, 2, 0, 0, 0, 0, +191, 0, 0, 0, 1, 0, 0, 0, 80,156,188, 2, 0, 0, 0, 0,144,155,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +136, 4, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 80,156,188, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, +176,156,188, 2, 0, 0, 0, 0,240,155,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 6, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0,176,156,188, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 80,156,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 6, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 16,157,188, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,128,157,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +112,151,188, 2, 0, 0, 0, 0,208,151,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +128,157,188, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,240,157,188, 2, 0, 0, 0, 0, 16,157,188, 2, 0, 0, 0, 0, +112,151,188, 2, 0, 0, 0, 0,144,152,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +240,157,188, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 96,158,188, 2, 0, 0, 0, 0,128,157,188, 2, 0, 0, 0, 0, +208,151,188, 2, 0, 0, 0, 0,240,152,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 96,158,188, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,208,158,188, 2, 0, 0, 0, 0,240,157,188, 2, 0, 0, 0, 0, +144,152,188, 2, 0, 0, 0, 0,240,152,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +208,158,188, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 64,159,188, 2, 0, 0, 0, 0, 96,158,188, 2, 0, 0, 0, 0, + 16,151,188, 2, 0, 0, 0, 0,144,152,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 64,159,188, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,176,159,188, 2, 0, 0, 0, 0,208,158,188, 2, 0, 0, 0, 0, + 48,152,188, 2, 0, 0, 0, 0,240,152,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +176,159,188, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 32,160,188, 2, 0, 0, 0, 0, 64,159,188, 2, 0, 0, 0, 0, + 16,151,188, 2, 0, 0, 0, 0, 16,154,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 32,160,188, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,144,160,188, 2, 0, 0, 0, 0,176,159,188, 2, 0, 0, 0, 0, +144,152,188, 2, 0, 0, 0, 0,112,154,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +144,160,188, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0,161,188, 2, 0, 0, 0, 0, 32,160,188, 2, 0, 0, 0, 0, + 16,154,188, 2, 0, 0, 0, 0,112,154,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 0,161,188, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,112,161,188, 2, 0, 0, 0, 0,144,160,188, 2, 0, 0, 0, 0, + 16,154,188, 2, 0, 0, 0, 0,208,154,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +112,161,188, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,224,161,188, 2, 0, 0, 0, 0, 0,161,188, 2, 0, 0, 0, 0, +112,154,188, 2, 0, 0, 0, 0, 48,155,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +224,161,188, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 80,162,188, 2, 0, 0, 0, 0,112,161,188, 2, 0, 0, 0, 0, +208,154,188, 2, 0, 0, 0, 0, 48,155,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 80,162,188, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,192,162,188, 2, 0, 0, 0, 0,224,161,188, 2, 0, 0, 0, 0, +208,154,188, 2, 0, 0, 0, 0,144,155,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +192,162,188, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 48,163,188, 2, 0, 0, 0, 0, 80,162,188, 2, 0, 0, 0, 0, + 48,155,188, 2, 0, 0, 0, 0,240,155,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 48,163,188, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,160,163,188, 2, 0, 0, 0, 0,192,162,188, 2, 0, 0, 0, 0, +144,155,188, 2, 0, 0, 0, 0,240,155,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +160,163,188, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 16,164,188, 2, 0, 0, 0, 0, 48,163,188, 2, 0, 0, 0, 0, +144,155,188, 2, 0, 0, 0, 0, 80,156,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 16,164,188, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,128,164,188, 2, 0, 0, 0, 0,160,163,188, 2, 0, 0, 0, 0, +240,155,188, 2, 0, 0, 0, 0,176,156,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +128,164,188, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,240,164,188, 2, 0, 0, 0, 0, 16,164,188, 2, 0, 0, 0, 0, + 80,156,188, 2, 0, 0, 0, 0,176,156,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +240,164,188, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 96,165,188, 2, 0, 0, 0, 0,128,164,188, 2, 0, 0, 0, 0, +240,152,188, 2, 0, 0, 0, 0,176,156,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 96,165,188, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,164,188, 2, 0, 0, 0, 0, + 48,152,188, 2, 0, 0, 0, 0, 80,156,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, +208,165,188, 2, 0, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,144,169,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +144,152,188, 2, 0, 0, 0, 0,112,151,188, 2, 0, 0, 0, 0,208,151,188, 2, 0, 0, 0, 0,240,152,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 23, 4, 0, 0, 49, 4, 0, 0, 7, 7,129, 7, 27, 0, 1, 0, - 0, 0, 0, 0, 7, 0, 0, 0,240, 35, 15, 3, 1, 0, 0, 0,224,115,146, 22, 1, 0, 0, 0,224,115,146, 22, 1, 0, 0, 0, - 64, 67,145, 22, 1, 0, 0, 0,160, 68,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 64, 23, 17, 26, 1, 0, 0, 0,240, 18,154, 22, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 64, 67,145, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,160, 68,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,161, 68, + 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,226,189, 2, 0, 0, 0, 0, 32,226,189, 2, 0, 0, 0, 0, +176,166,188, 2, 0, 0, 0, 0, 32,168,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176,166,188, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 32,168,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,161, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 32,240, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,129, 7, 26, 0,129, 7, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 23, 4, 0, 0, 48, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 7, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0,176, 37, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,160, 68,145, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 67,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0,240,109, 69, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 32,168,188, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,166,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192, 0, 0, 0, 0,112, 7, 0, 0,129, 7, 0, 0, 18, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 18, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,129, 7, 7, 0,112, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 4, 0, 0, 49, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0,208, 36, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 0, 70,145, 22, 1, 0, 0, 0, -194, 0, 0, 0, 1, 0, 0, 0,208,123,145, 22, 1, 0, 0, 0, 96, 66,145, 22, 1, 0, 0, 0, 32, 58,145, 22, 1, 0, 0, 0, -128, 58,145, 22, 1, 0, 0, 0,192, 54,145, 22, 1, 0, 0, 0, 0, 54,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,144,169,188, 2, 0, 0, 0, 0, +194, 0, 0, 0, 1, 0, 0, 0, 64,225,188, 2, 0, 0, 0, 0,208,165,188, 2, 0, 0, 0, 0, 80,156,188, 2, 0, 0, 0, 0, +176,156,188, 2, 0, 0, 0, 0,240,152,188, 2, 0, 0, 0, 0, 48,152,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 6, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 21, 4, 0, 0, 4, 4,104, 1, 22, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 96, 32, 15, 3, 1, 0, 0, 0, 96, 92,145, 22, 1, 0, 0, 0,208,122,145, 22, 1, 0, 0, 0,224, 70,145, 22, 1, 0, 0, 0, - 64, 72,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,218,149, 22, 1, 0, 0, 0, -112,143,154, 22, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,224, 70,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 64, 72,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 67, 0, 0, 0, 0, 0, 0,240, 65, + 0, 0, 0, 0, 0, 0, 0, 0,208,192,188, 2, 0, 0, 0, 0, 48,224,188, 2, 0, 0, 0, 0,112,170,188, 2, 0, 0, 0, 0, +224,171,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,112,170,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +224,171,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 67, 0, 0, 0, 0, 0, 0,240, 65, 0, 0, 0, 0, 0, 0,180, 67, 0, 0, 0, 0, 0, 0,248, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,103, 1, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0,128,199, 67, 0, 0,232, 65, 0,128,199, 67, 0, 0,232, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,104, 1, 31, 0,104, 1, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 6, 0, 0,128, 7, 0, 0,247, 3, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104, 1, 31, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 35, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 64, 72,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,224, 70,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0,128,171, 67, 0, 64,121,196, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,224,171,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,112,170,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,171, 67, 0, 64,121,196, 0, 0, 0, 0, 0, 0, 0, 0, 3,128,171, 67, 5, 64,121,196, 0, 0, 0, 0, 87, 1, 0, 0,104, 1, 0, 0, 18, 0, 0, 0,246, 3, 0, 0, 0, 0, 0, 0, 86, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 86, 1, 0, 0, 18, 0, 0, 0,246, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, - 18, 0, 0, 4, 6, 0,104, 1,247, 3, 87, 1,229, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 54, 40, 3, 1, 0, 0, 0, - 7, 0, 0, 0, 6, 0, 0, 0, 25, 6, 0, 0,128, 7, 0, 0, 0, 0, 0, 0,246, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 18, 0, 0, 4, 6, 0,104, 1,247, 3, 87, 1,229, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 25, 6, 0, 0,128, 7, 0, 0, 0, 0, 0, 0,246, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104, 1,247, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 64, 33, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 73,145, 22, 1, 0, 0, 0, -208, 90,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,160, 73,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 48, 75,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 34, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 67,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,220,255, 87, 1, 36, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 48, 75,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,192, 76,145, 22, 1, 0, 0, 0,160, 73,145, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255, 66, 1, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,192, 76,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 80, 78,145, 22, 1, 0, 0, 0, 48, 75,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 76, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,111,255, 66, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 80, 78,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,224, 79,145, 22, 1, 0, 0, 0,192, 76,145, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115, -105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115, -105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,165,254, 66, 1,178, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,224, 79,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -112, 81,145, 22, 1, 0, 0, 0, 80, 78,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 65,110,116,105, 45, 65,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 83,254, 66, 1, 58, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -112, 81,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 83,145, 22, 1, 0, 0, 0,224, 79,145, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,213,253, 66, 1,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 0, 83,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -144, 84,145, 22, 1, 0, 0, 0,112, 81,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 79,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 84,253, 66, 1,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -144, 84,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 32, 86,145, 22, 1, 0, 0, 0, 0, 83,145, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114, -109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114, -109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,253, 66, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 32, 86,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -176, 87,145, 22, 1, 0, 0, 0,144, 84,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80,111,115,116, 32, 80,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 36,253, 66, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -176, 87,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 64, 89,145, 22, 1, 0, 0, 0, 32, 86,145, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,253, 66, 1, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 64, 89,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -208, 90,145, 22, 1, 0, 0, 0,176, 87,145, 22, 1, 0, 0, 0,240, 19,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95, 99,111,110,116,101,120,116, 95,116,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95, 99,111,110,116,101,120,116, 95,116,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 16,255, 87, 1,204, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -208, 90,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 89,145, 22, 1, 0, 0, 0, - 32,158,243, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,105,110,102,108,117, -101,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,105,110,102,108,117, -101,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73,110,102,108,117,101,110, 99,101, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,212,253, 87, 1, 36, 1, 0, 0, 0, 0, 0, 0, 7, 0, - 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0, 96, 92,145, 22, 1, 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0, - 96, 96,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0,208,192,188, 2, 0, 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0, +240,196,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 6, 0, 6, 0, 0, 0, - 2, 0, 1, 0, 0, 0, 0, 0, 0,159,251, 24, 1, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,160, 93,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 95,145, 22, 1, 0, 0, 0, + 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0, 16,194,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,128,195,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,251, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,200, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,143, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 0, 68, 0, 0,200, 65, @@ -5483,8 +3804,8 @@ char datatoc_B_blend[]= { 144, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 0, 95,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -160, 93,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 0, 68, 0, 0, 0, 0, 0,128, 26, 68, 56, 58, 14, 66, 61, 2,240, 67, + 68, 65, 84, 65, 40, 1, 0, 0,128,195,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16,194,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 0, 68, 0, 0, 0, 0, 0,128, 26, 68, 56, 58, 14, 66, 61, 2,240, 67, 0, 0, 0, 0, 55, 58,142, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,143, 1, 0, 0, 0, 0, 0, 0,255, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,122, 68, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 4, 10, 0,144, 1, @@ -5493,8 +3814,8 @@ char datatoc_B_blend[]= { 144, 1, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,144, 2, 0, 0, 96, 96,145, 22, 1, 0, 0, 0,169, 0, 0, 0, 1, 0, 0, 0, 64,109,145, 22, 1, 0, 0, 0, - 96, 92,145, 22, 1, 0, 0, 0,160, 93,145, 22, 1, 0, 0, 0, 0, 95,145, 22, 1, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,144, 2, 0, 0,240,196,188, 2, 0, 0, 0, 0,169, 0, 0, 0, 1, 0, 0, 0, 48,210,188, 2, 0, 0, 0, 0, +208,192,188, 2, 0, 0, 0, 0, 16,194,188, 2, 0, 0, 0, 0,128,195,188, 2, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5514,8 +3835,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 48, 99,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -144,100,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,192,199,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 48,201,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 1, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, @@ -5524,8 +3845,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 4, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,144,100,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -240,101,145, 22, 1, 0, 0, 0, 48, 99,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 48,201,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +160,202,188, 2, 0, 0, 0, 0,192,199,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, @@ -5534,8 +3855,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,107, 2, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,240,101,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 80,103,145, 22, 1, 0, 0, 0,144,100,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,160,202,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 16,204,188, 2, 0, 0, 0, 0, 48,201,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, @@ -5544,8 +3865,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80,103,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -176,104,145, 22, 1, 0, 0, 0,240,101,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128,142,196, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 16,204,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +128,205,188, 2, 0, 0, 0, 0,160,202,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128,142,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 0, 26,196, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, @@ -5554,8 +3875,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176,104,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 80,103,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,128,205,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16,204,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5564,7 +3885,7 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 4, 2,107, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16,106,145, 22, 1, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, 16,106,145, 22, 1, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, +240,206,188, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0,240,206,188, 2, 0, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, 28,242,167, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,139, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0, @@ -5589,17 +3910,17 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, - 64,109,145, 22, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, 96,113,145, 22, 1, 0, 0, 0, 96, 96,145, 22, 1, 0, 0, 0, - 48, 99,145, 22, 1, 0, 0, 0,176,104,145, 22, 1, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 48,210,188, 2, 0, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0,112,214,188, 2, 0, 0, 0, 0,240,196,188, 2, 0, 0, 0, 0, +192,199,188, 2, 0, 0, 0, 0,128,205,188, 2, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0, 7, 0, 48,194,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, 7, 0,176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,160,110,145, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0,112,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 68, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,144,211,188, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0,213,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,195, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,189, 68, 0, 0,200, 65, 0,224,189, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, @@ -5608,8 +3929,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0,112,145, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,110,145, 22, 1, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0,213,188, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,211,188, 2, 0, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, 0, 0, 32,193, 0, 0, 0, 68, 56,205,190,195,156,102, 95, 68,160,228,244, 64,110, 44,252, 67, 7, 6, 0, 0, 24, 6, 0, 0, 18, 0, 0, 0,106, 2, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 18, 0, 0, 0,106, 2, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,250, 70, 0, 0,250, 70,205,204, 76, 62, 72,225,154, 63, @@ -5618,18 +3939,18 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 6,107, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, 96,113,145, 22, 1, 0, 0, 0, -173, 0, 0, 0, 1, 0, 0, 0,224,118,145, 22, 1, 0, 0, 0, 64,109,145, 22, 1, 0, 0, 0,160,110,145, 22, 1, 0, 0, 0, - 0,112,145, 22, 1, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,112,214,188, 2, 0, 0, 0, 0, +173, 0, 0, 0, 1, 0, 0, 0, 32,220,188, 2, 0, 0, 0, 0, 48,210,188, 2, 0, 0, 0, 0,144,211,188, 2, 0, 0, 0, 0, + 0,213,188, 2, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,186,129, 3, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 85,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,193, 67, 81, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,192,114,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 32,116,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, 0, 0,216, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,208,215,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 64,217,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0,224,189, 68, 0, 0,208, 65, 0,224,189, 68, 0, 0,208, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, @@ -5638,8 +3959,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 27, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 32,116,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -128,117,145, 22, 1, 0, 0, 0,192,114,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 64,217,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +176,218,188, 2, 0, 0, 0, 0,208,215,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5648,8 +3969,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,128,117,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 32,116,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176,218,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 64,217,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 0,124,146, 72, 0, 0, 0, 66, 10,215, 35, 60, 0, 0,200, 66,105, 0, 0, 0, 0, 0, 0, 0, @@ -5658,16 +3979,16 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0,240, 5,163, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0,224,118,145, 22, 1, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, -208,122,145, 22, 1, 0, 0, 0, 96,113,145, 22, 1, 0, 0, 0,192,114,145, 22, 1, 0, 0, 0,128,117,145, 22, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0, 32,220,188, 2, 0, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, + 48,224,188, 2, 0, 0, 0, 0,112,214,188, 2, 0, 0, 0, 0,208,215,188, 2, 0, 0, 0, 0,176,218,188, 2, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 16,120,145, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,112,121,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, + 0, 0, 0, 0, 0, 0,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80,221,188, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,192,222,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, @@ -5676,8 +3997,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,112,121,145, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,120,145, 22, 1, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,192,222,188, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,221,188, 2, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, @@ -5686,164 +4007,49 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0,208,122,145, 22, 1, 0, 0, 0, -172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,118,145, 22, 1, 0, 0, 0, 16,120,145, 22, 1, 0, 0, 0, -112,121,145, 22, 1, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0, 48,224,188, 2, 0, 0, 0, 0, +172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,220,188, 2, 0, 0, 0, 0, 80,221,188, 2, 0, 0, 0, 0, +192,222,188, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,208,123,145, 22, 1, 0, 0, 0, -194, 0, 0, 0, 1, 0, 0, 0,128,174,145, 22, 1, 0, 0, 0, 0, 70,145, 22, 1, 0, 0, 0,224, 52,145, 22, 1, 0, 0, 0, - 96, 54,145, 22, 1, 0, 0, 0, 64, 56,145, 22, 1, 0, 0, 0,224, 55,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 64,225,188, 2, 0, 0, 0, 0, +194, 0, 0, 0, 1, 0, 0, 0,176, 21,189, 2, 0, 0, 0, 0,144,169,188, 2, 0, 0, 0, 0, 16,151,188, 2, 0, 0, 0, 0, +144,152,188, 2, 0, 0, 0, 0,112,154,188, 2, 0, 0, 0, 0, 16,154,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,103, 1, 0, 0, 0, 0, 0, 0, 21, 4, 0, 0, 4, 4,104, 1, 22, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 96, 32, 15, 3, 1, 0, 0, 0, 16,143,145, 22, 1, 0, 0, 0,128,173,145, 22, 1, 0, 0, 0,176,124,145, 22, 1, 0, 0, 0, - 16,126,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,240,141, 22, 1, 0, 0, 0, -192,215,141, 22, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176,124,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 16,126,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 67, 0, 0, 0, 0, 0, 0,240, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 64,245,188, 2, 0, 0, 0, 0,160, 20,189, 2, 0, 0, 0, 0, 32,226,188, 2, 0, 0, 0, 0, +144,227,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 32,226,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +144,227,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 67, 0, 0, 0, 0, 0, 0,240, 65, 0, 0, 0, 0, 0, 0,180, 67, 0, 0, 0, 0, 0, 0,248, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,103, 1, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0,128,199, 67, 0, 0,232, 65, 0,128,199, 67, 0, 0,232, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,104, 1, 31, 0,104, 1, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,103, 1, 0, 0,247, 3, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104, 1, 31, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 35, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 16,126,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,176,124,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,171, 67, 0, 0,121,196, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,144,227,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 32,226,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,171, 67, 0, 0,121,196, 0, 0, 0, 0, 0, 0, 0, 0,255,127,171, 67,255, 63,121,196, 0, 0, 0, 0, 87, 1, 0, 0,104, 1, 0, 0, 18, 0, 0, 0,246, 3, 0, 0, 0, 0, 0, 0, 86, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 86, 1, 0, 0, 18, 0, 0, 0,246, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, - 18, 0, 0, 4, 6, 0,104, 1,247, 3, 87, 1,229, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,183, 63, 25, 1, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,103, 1, 0, 0, 0, 0, 0, 0,246, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 18, 0, 0, 4, 6, 0,104, 1,247, 3, 87, 1,229, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,103, 1, 0, 0, 0, 0, 0, 0,246, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104, 1,247, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 64, 33, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,127,145, 22, 1, 0, 0, 0, -128,141,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,112,127,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 0,129,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 34, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 67,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,220,255, 86, 1, 36, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 0,129,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,144,130,145, 22, 1, 0, 0, 0,112,127,145, 22, 1, 0, 0, 0, - 64, 47,243, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255, 86, 1, 61, 0, 0, 0, 0, 0, 0, 0, 6, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,144,130,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 32,132,145, 22, 1, 0, 0, 0, 0,129,145, 22, 1, 0, 0, 0,192, 34,243, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 76, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,111,255, 86, 1, 0, 0, 0, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 32,132,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,176,133,145, 22, 1, 0, 0, 0,144,130,145, 22, 1, 0, 0, 0, -128,241,242, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115, -105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115, -105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,165,254, 86, 1,178, 0, 0, 0, 0, 0, 0, 0, 6, 0, - 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,176,133,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 64,135,145, 22, 1, 0, 0, 0, 32,132,145, 22, 1, 0, 0, 0,112,108,242, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 65,110,116,105, 45, 65,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 83,254, 86, 1, 58, 0, 20, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 64,135,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,208,136,145, 22, 1, 0, 0, 0,176,133,145, 22, 1, 0, 0, 0, -160, 93,243, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,213,253, 86, 1,102, 0, 0, 0, 0, 0, 0, 0, 6, 0, - 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,208,136,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 96,138,145, 22, 1, 0, 0, 0, 64,135,145, 22, 1, 0, 0, 0,128, 98,243, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 79,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 84,253, 86, 1,105, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 96,138,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,240,139,145, 22, 1, 0, 0, 0,208,136,145, 22, 1, 0, 0, 0, - 64,105,243, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114, -109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114, -109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,253, 86, 1, 0, 0, 0, 0, 0, 0, 4, 0, 6, 0, - 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,240,139,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -128,141,145, 22, 1, 0, 0, 0, 96,138,145, 22, 1, 0, 0, 0, 32,107,243, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80,111,115,116, 32, 80,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 36,253, 86, 1, 0, 0, 0, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -128,141,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,139,145, 22, 1, 0, 0, 0, -128,109,243, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,253, 86, 1, 0, 0, 20, 0, 0, 0, 4, 0, 7, 0, - 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0, 16,143,145, 22, 1, 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0, - 16,147,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0, 64,245,188, 2, 0, 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0, + 96,249,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 0, 0, 0, 0, 0, 0, 0,192, 68, 40, 3, 1, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 80,144,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,176,145,145, 22, 1, 0, 0, 0, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,128,246,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,240,247,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,251, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,200, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,143, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 0, 68, 0, 0,200, 65, @@ -5853,8 +4059,8 @@ char datatoc_B_blend[]= { 144, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,176,145,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80,144,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 0, 68, 0, 0, 0, 0, 0,128, 26, 68, 56, 58, 14, 66, 61, 2,240, 67, + 68, 65, 84, 65, 40, 1, 0, 0,240,247,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +128,246,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 0, 68, 0, 0, 0, 0, 0,128, 26, 68, 56, 58, 14, 66, 61, 2,240, 67, 0, 0, 0, 0, 55, 58,142, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,143, 1, 0, 0, 0, 0, 0, 0,255, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,122, 68, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 4, 10, 0,144, 1, @@ -5863,8 +4069,8 @@ char datatoc_B_blend[]= { 144, 1, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,144, 2, 0, 0, 16,147,145, 22, 1, 0, 0, 0,169, 0, 0, 0, 1, 0, 0, 0,240,159,145, 22, 1, 0, 0, 0, - 16,143,145, 22, 1, 0, 0, 0, 80,144,145, 22, 1, 0, 0, 0,176,145,145, 22, 1, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,144, 2, 0, 0, 96,249,188, 2, 0, 0, 0, 0,169, 0, 0, 0, 1, 0, 0, 0,160, 6,189, 2, 0, 0, 0, 0, + 64,245,188, 2, 0, 0, 0, 0,128,246,188, 2, 0, 0, 0, 0,240,247,188, 2, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5884,8 +4090,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,224,149,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 64,151,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 48,252,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +160,253,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 1, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, @@ -5894,8 +4100,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 4, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 64,151,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -160,152,145, 22, 1, 0, 0, 0,224,149,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,160,253,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 16,255,188, 2, 0, 0, 0, 0, 48,252,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, @@ -5904,8 +4110,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,107, 2, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,160,152,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0,154,145, 22, 1, 0, 0, 0, 64,151,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 16,255,188, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +128, 0,189, 2, 0, 0, 0, 0,160,253,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, @@ -5914,8 +4120,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0,154,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 96,155,145, 22, 1, 0, 0, 0,160,152,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128,142,196, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,128, 0,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +240, 1,189, 2, 0, 0, 0, 0, 16,255,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128,142,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 0, 26,196, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, @@ -5924,8 +4130,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 96,155,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0,154,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,240, 1,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,128, 0,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5934,7 +4140,7 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 4, 2,107, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192,156,145, 22, 1, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0,192,156,145, 22, 1, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, + 96, 3,189, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, 96, 3,189, 2, 0, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, 28,242,167, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,139, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0, @@ -5959,17 +4165,17 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, -240,159,145, 22, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, 16,164,145, 22, 1, 0, 0, 0, 16,147,145, 22, 1, 0, 0, 0, -224,149,145, 22, 1, 0, 0, 0, 96,155,145, 22, 1, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, +160, 6,189, 2, 0, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0,224, 10,189, 2, 0, 0, 0, 0, 96,249,188, 2, 0, 0, 0, 0, + 48,252,188, 2, 0, 0, 0, 0,240, 1,189, 2, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0, 7, 0, 48,194,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, 7, 0,176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80,161,145, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,176,162,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 68, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0, 8,189, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,112, 9,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,195, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,189, 68, 0, 0,200, 65, 0,224,189, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, @@ -5978,8 +4184,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176,162,145, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,161,145, 22, 1, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,112, 9,189, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,189, 2, 0, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, 0, 0, 32,193, 0, 0, 0, 68, 56,205,190,195,156,102, 95, 68,160,228,244, 64,110, 44,252, 67, 7, 6, 0, 0, 24, 6, 0, 0, 18, 0, 0, 0,106, 2, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 18, 0, 0, 0,106, 2, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,250, 70, 0, 0,250, 70,205,204, 76, 62, 72,225,154, 63, @@ -5988,18 +4194,18 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 6,107, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, 16,164,145, 22, 1, 0, 0, 0, -173, 0, 0, 0, 1, 0, 0, 0,144,169,145, 22, 1, 0, 0, 0,240,159,145, 22, 1, 0, 0, 0, 80,161,145, 22, 1, 0, 0, 0, -176,162,145, 22, 1, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,224, 10,189, 2, 0, 0, 0, 0, +173, 0, 0, 0, 1, 0, 0, 0,144, 16,189, 2, 0, 0, 0, 0,160, 6,189, 2, 0, 0, 0, 0, 0, 8,189, 2, 0, 0, 0, 0, +112, 9,189, 2, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,186,129, 3, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 85,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,193, 67, 81, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,112,165,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -208,166,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, 0, 0,216, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 64, 12,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +176, 13,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0,224,189, 68, 0, 0,208, 65, 0,224,189, 68, 0, 0,208, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, @@ -6008,8 +4214,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 27, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,208,166,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 48,168,145, 22, 1, 0, 0, 0,112,165,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176, 13,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 32, 15,189, 2, 0, 0, 0, 0, 64, 12,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6018,8 +4224,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 48,168,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,208,166,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 32, 15,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,176, 13,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 0,124,146, 72, 0, 0, 0, 66, 10,215, 35, 60, 0, 0,200, 66,105, 0, 0, 0, 0, 0, 0, 0, @@ -6028,16 +4234,16 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0,240, 5,163, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0,144,169,145, 22, 1, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, -128,173,145, 22, 1, 0, 0, 0, 16,164,145, 22, 1, 0, 0, 0,112,165,145, 22, 1, 0, 0, 0, 48,168,145, 22, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0,144, 16,189, 2, 0, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, +160, 20,189, 2, 0, 0, 0, 0,224, 10,189, 2, 0, 0, 0, 0, 64, 12,189, 2, 0, 0, 0, 0, 32, 15,189, 2, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,192,170,145, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 32,172,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, + 0, 0, 0, 0, 0, 0,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,192, 17,189, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 48, 19,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, @@ -6046,8 +4252,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 32,172,145, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,170,145, 22, 1, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 48, 19,189, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 17,189, 2, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, @@ -6056,279 +4262,49 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0,128,173,145, 22, 1, 0, 0, 0, -172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,169,145, 22, 1, 0, 0, 0,192,170,145, 22, 1, 0, 0, 0, - 32,172,145, 22, 1, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0,160, 20,189, 2, 0, 0, 0, 0, +172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 16,189, 2, 0, 0, 0, 0,192, 17,189, 2, 0, 0, 0, 0, + 48, 19,189, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,128,174,145, 22, 1, 0, 0, 0, -194, 0, 0, 0, 1, 0, 0, 0,208,240,145, 22, 1, 0, 0, 0,208,123,145, 22, 1, 0, 0, 0,224, 55,145, 22, 1, 0, 0, 0, - 64, 56,145, 22, 1, 0, 0, 0, 0, 57,145, 22, 1, 0, 0, 0,160, 56,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,176, 21,189, 2, 0, 0, 0, 0, +194, 0, 0, 0, 1, 0, 0, 0, 96, 90,189, 2, 0, 0, 0, 0, 64,225,188, 2, 0, 0, 0, 0, 16,154,188, 2, 0, 0, 0, 0, +112,154,188, 2, 0, 0, 0, 0, 48,155,188, 2, 0, 0, 0, 0,208,154,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 1, 0, 0,247, 2, 0, 0, 0, 0, 0, 0, 21, 4, 0, 0, 4, 4,143, 1, 22, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 96, 32, 15, 3, 1, 0, 0, 0, 96,209,145, 22, 1, 0, 0, 0,208,239,145, 22, 1, 0, 0, 0, 96,175,145, 22, 1, 0, 0, 0, -192,176,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,181,147, 22, 1, 0, 0, 0, -240, 65,148, 22, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 96,175,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -192,176,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 67, 0, 0, 0, 0, 0, 0,240, 65, + 0, 0, 0, 0, 0, 0, 0, 0,240, 57,189, 2, 0, 0, 0, 0, 80, 89,189, 2, 0, 0, 0, 0,144, 22,189, 2, 0, 0, 0, 0, + 0, 24,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,144, 22,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 24,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 67, 0, 0, 0, 0, 0, 0,240, 65, 0, 0, 0, 0, 0,128,199, 67, 0, 0, 0, 0, 0, 0,248, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 1, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0,128,199, 67, 0, 0,232, 65, 0,128,199, 67, 0, 0,232, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,143, 1, 31, 0,143, 1, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,105, 1, 0, 0,247, 2, 0, 0,247, 3, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,143, 1, 31, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 35, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,192,176,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 96,175,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0,128,190, 67, 0, 0,121,196, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0, 24,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,144, 22,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,190, 67, 0, 0,121,196, 0, 0, 0, 0, 0, 0, 0, 0,251,255,190, 67,250, 63,121,196, 0, 0, 0, 0,126, 1, 0, 0,143, 1, 0, 0, 18, 0, 0, 0,246, 3, 0, 0, 0, 0, 0, 0,125, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,125, 1, 0, 0, 18, 0, 0, 0,246, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, - 18, 0, 0, 4, 6, 0,143, 1,247, 3,126, 1,229, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 35, 16, 26, 1, 0, 0, 0, - 3, 0, 0, 0, 2, 0, 0, 0,105, 1, 0, 0,247, 2, 0, 0, 0, 0, 0, 0,246, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 18, 0, 0, 4, 6, 0,143, 1,247, 3,126, 1,229, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,105, 1, 0, 0,247, 2, 0, 0, 0, 0, 0, 0,246, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,143, 1,247, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 64, 33, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,178,145, 22, 1, 0, 0, 0, -208,207,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 32,178,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -176,179,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 34, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 67,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,220,255,125, 1, 36, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -176,179,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 64,181,145, 22, 1, 0, 0, 0, 32,178,145, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255, 86, 1, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 64,181,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -208,182,145, 22, 1, 0, 0, 0,176,179,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 76, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,111,255, 86, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -208,182,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 96,184,145, 22, 1, 0, 0, 0, 64,181,145, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115, -105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115, -105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,165,254, 86, 1,178, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 96,184,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -240,185,145, 22, 1, 0, 0, 0,208,182,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 65,110,116,105, 45, 65,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 83,254, 86, 1, 58, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -240,185,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,128,187,145, 22, 1, 0, 0, 0, 96,184,145, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,213,253, 86, 1,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,128,187,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 16,189,145, 22, 1, 0, 0, 0,240,185,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 79,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 84,253, 86, 1,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 16,189,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,160,190,145, 22, 1, 0, 0, 0,128,187,145, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114, -109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114, -109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,253, 86, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,160,190,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 48,192,145, 22, 1, 0, 0, 0, 16,189,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80,111,115,116, 32, 80,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 36,253, 86, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 48,192,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,192,193,145, 22, 1, 0, 0, 0,160,190,145, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,253, 86, 1, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,192,193,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 80,195,145, 22, 1, 0, 0, 0, 48,192,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95,115, 99,101,110,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95,115, 99,101,110,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 99,101,110,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,135,255, 86, 1, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 80,195,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,224,196,145, 22, 1, 0, 0, 0,192,193,145, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,117,110,105,116, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,117,110,105,116, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85,110,105,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,255, 86, 1, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,224,196,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -112,198,145, 22, 1, 0, 0, 0, 80,195,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95,107,101,121,105,110,103, 95,115,101,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95,107,101,121,105,110,103, 95,115,101,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 75,101,121,105,110,103, 32, 83,101,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,213,254, 86, 1, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -112,198,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0,200,145, 22, 1, 0, 0, 0,224,196,145, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,112,104,121,115,105, 99,115, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,112,104,121,115,105, 99,115, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71,114, 97,118,105,116,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,153,254, 86, 1, 36, 0, 20, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 0,200,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -144,201,145, 22, 1, 0, 0, 0,112,198,145, 22, 1, 0, 0, 0, 16,196,141, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 87, 79, 82, 76, 68, 95, 80, 84, 95, 99,111,110,116,101,120,116, 95,119,111,114,108,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 87, 79, 82, 76, 68, 95, 80, 84, 95, 99,111,110,116,101,120,116, 95,119,111,114,108,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,184,255,125, 1, 36, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -144,201,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 32,203,145, 22, 1, 0, 0, 0, 0,200,145, 22, 1, 0, 0, 0, -144,208,141, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 79, 82, 76, 68, 95, 80, 84, 95,112,114,101,118,105,101,119, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 79, 82, 76, 68, 95, 80, 84, 95,112,114,101,118,105,101,119, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,114,101,118,105,101,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,255,125, 1,136, 0, 0, 0, 0, 0, 0, 0, 6, 0, - 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 32,203,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -176,204,145, 22, 1, 0, 0, 0,144,201,145, 22, 1, 0, 0, 0, 16,221,141, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 87, 79, 82, 76, 68, 95, 80, 84, 95,119,111,114,108,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 87, 79, 82, 76, 68, 95, 80, 84, 95,119,111,114,108,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 87,111,114,108,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,175,254,125, 1, 81, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -176,204,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 64,206,145, 22, 1, 0, 0, 0, 32,203,145, 22, 1, 0, 0, 0, -144,233,141, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 79, 82, 76, 68, 95, 80, 84, 95, 97,109, 98,105,101,110,116, - 95,111, 99, 99,108,117,115,105,111,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 79, 82, 76, 68, 95, 80, 84, 95, 97,109, 98,105,101,110,116, - 95,111, 99, 99,108,117,115,105,111,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65,109, 98,105,101,110,116, 32, 79, 99, 99,108,117,115,105,111, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,253,125, 1,199, 0, 20, 0, 0, 0, 0, 0, 6, 0, - 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 64,206,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -208,207,145, 22, 1, 0, 0, 0,176,204,145, 22, 1, 0, 0, 0, 16,246,141, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 87, 79, 82, 76, 68, 95, 80, 84, 95,109,105,115,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 87, 79, 82, 76, 68, 95, 80, 84, 95,109,105,115,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 77,105,115,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 99,253,125, 1, 85, 0, 20, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -208,207,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,206,145, 22, 1, 0, 0, 0, - 0, 9,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 79, 82, 76, 68, 95, 80, 84, 95,115,116, 97,114,115, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 79, 82, 76, 68, 95, 80, 84, 95,115,116, 97,114,115, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15,253,125, 1, 60, 0, 20, 0, 0, 0, 0, 0, 7, 0, - 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0, 96,209,145, 22, 1, 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0, - 96,213,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0,240, 57,189, 2, 0, 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0, + 16, 62,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 2, 0, 0, 0, - 2, 0, 0, 0, 4, 0, 0, 0,240,137, 17, 26, 1, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,160,210,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0,212,145, 22, 1, 0, 0, 0, + 2, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0, 48, 59,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,160, 60,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,251, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,200, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,143, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 0, 68, 0, 0,200, 65, @@ -6338,8 +4314,8 @@ char datatoc_B_blend[]= { 144, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 0,212,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -160,210,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 0, 68, 0, 0, 0, 0, 0,128, 26, 68, 56, 58, 14, 66, 61, 2,240, 67, + 68, 65, 84, 65, 40, 1, 0, 0,160, 60,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 59,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 0, 68, 0, 0, 0, 0, 0,128, 26, 68, 56, 58, 14, 66, 61, 2,240, 67, 0, 0, 0, 0, 55, 58,142, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,143, 1, 0, 0, 0, 0, 0, 0,255, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,122, 68, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 4, 10, 0,144, 1, @@ -6348,8 +4324,8 @@ char datatoc_B_blend[]= { 144, 1, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,144, 2, 0, 0, 96,213,145, 22, 1, 0, 0, 0,169, 0, 0, 0, 1, 0, 0, 0, 64,226,145, 22, 1, 0, 0, 0, - 96,209,145, 22, 1, 0, 0, 0,160,210,145, 22, 1, 0, 0, 0, 0,212,145, 22, 1, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,144, 2, 0, 0, 16, 62,189, 2, 0, 0, 0, 0,169, 0, 0, 0, 1, 0, 0, 0, 80, 75,189, 2, 0, 0, 0, 0, +240, 57,189, 2, 0, 0, 0, 0, 48, 59,189, 2, 0, 0, 0, 0,160, 60,189, 2, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6369,8 +4345,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 48,216,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -144,217,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,224, 64,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 80, 66,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 1, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, @@ -6379,8 +4355,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 4, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,144,217,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -240,218,145, 22, 1, 0, 0, 0, 48,216,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80, 66,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +192, 67,189, 2, 0, 0, 0, 0,224, 64,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, @@ -6389,8 +4365,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,107, 2, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,240,218,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 80,220,145, 22, 1, 0, 0, 0,144,217,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,192, 67,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 48, 69,189, 2, 0, 0, 0, 0, 80, 66,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, @@ -6399,8 +4375,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80,220,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -176,221,145, 22, 1, 0, 0, 0,240,218,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128,142,196, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 48, 69,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +160, 70,189, 2, 0, 0, 0, 0,192, 67,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128,142,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 0, 26,196, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, @@ -6409,8 +4385,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176,221,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 80,220,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,160, 70,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 48, 69,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6419,7 +4395,7 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 4, 2,107, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16,223,145, 22, 1, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, 16,223,145, 22, 1, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, + 16, 72,189, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, 16, 72,189, 2, 0, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, 28,242,167, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,139, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0, @@ -6444,17 +4420,17 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, - 64,226,145, 22, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, 96,230,145, 22, 1, 0, 0, 0, 96,213,145, 22, 1, 0, 0, 0, - 48,216,145, 22, 1, 0, 0, 0,176,221,145, 22, 1, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 80, 75,189, 2, 0, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0,144, 79,189, 2, 0, 0, 0, 0, 16, 62,189, 2, 0, 0, 0, 0, +224, 64,189, 2, 0, 0, 0, 0,160, 70,189, 2, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0, 7, 0, 48,194,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, 7, 0,176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,160,227,145, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0,229,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 68, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176, 76,189, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 32, 78,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,195, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,189, 68, 0, 0,200, 65, 0,224,189, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, @@ -6463,8 +4439,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0,229,145, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,227,145, 22, 1, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 32, 78,189, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176, 76,189, 2, 0, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, 0, 0, 32,193, 0, 0, 0, 68, 56,205,190,195,156,102, 95, 68,160,228,244, 64,110, 44,252, 67, 7, 6, 0, 0, 24, 6, 0, 0, 18, 0, 0, 0,106, 2, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 18, 0, 0, 0,106, 2, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,250, 70, 0, 0,250, 70,205,204, 76, 62, 72,225,154, 63, @@ -6473,18 +4449,18 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 6,107, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, 96,230,145, 22, 1, 0, 0, 0, -173, 0, 0, 0, 1, 0, 0, 0,224,235,145, 22, 1, 0, 0, 0, 64,226,145, 22, 1, 0, 0, 0,160,227,145, 22, 1, 0, 0, 0, - 0,229,145, 22, 1, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,144, 79,189, 2, 0, 0, 0, 0, +173, 0, 0, 0, 1, 0, 0, 0, 64, 85,189, 2, 0, 0, 0, 0, 80, 75,189, 2, 0, 0, 0, 0,176, 76,189, 2, 0, 0, 0, 0, + 32, 78,189, 2, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,186,129, 3, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 85,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,193, 67, 81, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,192,231,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 32,233,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, 0, 0,216, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,240, 80,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 96, 82,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0,224,189, 68, 0, 0,208, 65, 0,224,189, 68, 0, 0,208, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, @@ -6493,8 +4469,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 27, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 32,233,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -128,234,145, 22, 1, 0, 0, 0,192,231,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 96, 82,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +208, 83,189, 2, 0, 0, 0, 0,240, 80,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6503,8 +4479,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,128,234,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 32,233,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,208, 83,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 96, 82,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 0,124,146, 72, 0, 0, 0, 66, 10,215, 35, 60, 0, 0,200, 66,105, 0, 0, 0, 0, 0, 0, 0, @@ -6513,16 +4489,16 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0,240, 5,163, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0,224,235,145, 22, 1, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, -208,239,145, 22, 1, 0, 0, 0, 96,230,145, 22, 1, 0, 0, 0,192,231,145, 22, 1, 0, 0, 0,128,234,145, 22, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0, 64, 85,189, 2, 0, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, + 80, 89,189, 2, 0, 0, 0, 0,144, 79,189, 2, 0, 0, 0, 0,240, 80,189, 2, 0, 0, 0, 0,208, 83,189, 2, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 16,237,145, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,112,238,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, + 0, 0, 0, 0, 0, 0,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,112, 86,189, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,224, 87,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, @@ -6531,8 +4507,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,112,238,145, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,237,145, 22, 1, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,224, 87,189, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112, 86,189, 2, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, @@ -6541,256 +4517,49 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0,208,239,145, 22, 1, 0, 0, 0, -172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,235,145, 22, 1, 0, 0, 0, 16,237,145, 22, 1, 0, 0, 0, -112,238,145, 22, 1, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0, 80, 89,189, 2, 0, 0, 0, 0, +172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 85,189, 2, 0, 0, 0, 0,112, 86,189, 2, 0, 0, 0, 0, +224, 87,189, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,208,240,145, 22, 1, 0, 0, 0, -194, 0, 0, 0, 1, 0, 0, 0, 0, 48,146, 22, 1, 0, 0, 0,128,174,145, 22, 1, 0, 0, 0,160, 56,145, 22, 1, 0, 0, 0, - 0, 57,145, 22, 1, 0, 0, 0,192, 57,145, 22, 1, 0, 0, 0, 96, 57,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 96, 90,189, 2, 0, 0, 0, 0, +194, 0, 0, 0, 1, 0, 0, 0,208,155,189, 2, 0, 0, 0, 0,176, 21,189, 2, 0, 0, 0, 0,208,154,188, 2, 0, 0, 0, 0, + 48,155,188, 2, 0, 0, 0, 0,240,155,188, 2, 0, 0, 0, 0,144,155,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 2, 0, 0,135, 4, 0, 0, 0, 0, 0, 0, 21, 4, 0, 0, 4, 4,143, 1, 22, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 96, 32, 15, 3, 1, 0, 0, 0,144, 16,146, 22, 1, 0, 0, 0, 0, 47,146, 22, 1, 0, 0, 0,176,241,145, 22, 1, 0, 0, 0, - 16,243,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,155,146, 22, 1, 0, 0, 0, -224,142,146, 22, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176,241,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 16,243,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 67, 0, 0, 0, 0, 0, 0,240, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 96,123,189, 2, 0, 0, 0, 0,192,154,189, 2, 0, 0, 0, 0, 64, 91,189, 2, 0, 0, 0, 0, +176, 92,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 64, 91,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +176, 92,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 67, 0, 0, 0, 0, 0, 0,240, 65, 0, 0, 0, 0, 0,128,199, 67, 0, 0, 0, 0, 0, 0,248, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 1, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0,128,199, 67, 0, 0,232, 65, 0,128,199, 67, 0, 0,232, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,143, 1, 31, 0,143, 1, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,249, 2, 0, 0,135, 4, 0, 0,247, 3, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,143, 1, 31, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 35, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 16,243,145, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,176,241,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 67, 0, 64,121,196, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176, 92,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 64, 91,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 67, 0, 64,121,196, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0,191, 67, 4, 64,121,196, 0, 0, 0, 0,126, 1, 0, 0,143, 1, 0, 0, 18, 0, 0, 0,246, 3, 0, 0, 0, 0, 0, 0,125, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,125, 1, 0, 0, 18, 0, 0, 0,246, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, - 18, 0, 0, 4, 6, 0,143, 1,247, 3,126, 1,229, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 66, 17, 26, 1, 0, 0, 0, - 4, 0, 0, 0, 3, 0, 0, 0,249, 2, 0, 0,135, 4, 0, 0, 0, 0, 0, 0,246, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 18, 0, 0, 4, 6, 0,143, 1,247, 3,126, 1,229, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,249, 2, 0, 0,135, 4, 0, 0, 0, 0, 0, 0,246, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,143, 1,247, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 64, 33, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,244,145, 22, 1, 0, 0, 0, - 0, 15,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,112,244,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 0,246,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 34, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 67,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,220,255,126, 1, 36, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 0,246,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,144,247,145, 22, 1, 0, 0, 0,112,244,145, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255,102, 1, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,144,247,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 32,249,145, 22, 1, 0, 0, 0, 0,246,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 76, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,111,255,102, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 32,249,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,176,250,145, 22, 1, 0, 0, 0,144,247,145, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115, -105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115, -105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,165,254,102, 1,178, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,176,250,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 64,252,145, 22, 1, 0, 0, 0, 32,249,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 65,110,116,105, 45, 65,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 83,254,102, 1, 58, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 64,252,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,208,253,145, 22, 1, 0, 0, 0,176,250,145, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,213,253,102, 1,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,208,253,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 96,255,145, 22, 1, 0, 0, 0, 64,252,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 79,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 84,253,102, 1,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 96,255,145, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,240, 0,146, 22, 1, 0, 0, 0,208,253,145, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114, -109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114, -109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,253,102, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,240, 0,146, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -128, 2,146, 22, 1, 0, 0, 0, 96,255,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80,111,115,116, 32, 80,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 36,253,102, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -128, 2,146, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 16, 4,146, 22, 1, 0, 0, 0,240, 0,146, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,253,102, 1, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 16, 4,146, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -160, 5,146, 22, 1, 0, 0, 0,128, 2,146, 22, 1, 0, 0, 0,224, 17,147, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 79, 66, 74, 69, 67, 84, 95, 80, 84, 95, 99,111,110,116,101,120,116, 95,111, 98,106,101, 99,116, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 79, 66, 74, 69, 67, 84, 95, 80, 84, 95, 99,111,110,116,101,120,116, 95,111, 98,106,101, 99,116, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,184,255,126, 1, 36, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -160, 5,146, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 48, 7,146, 22, 1, 0, 0, 0, 16, 4,146, 22, 1, 0, 0, 0, -128, 53,243, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 74, 69, 67, 84, 95, 80, 84, 95,116,114, 97,110,115,102, -111,114,109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 74, 69, 67, 84, 95, 80, 84, 95,116,114, 97,110,115,102, -111,114,109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,114, 97,110,115,102,111,114,109, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39,255,126, 1,121, 0, 0, 0, 0, 0, 0, 0, 6, 0, - 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 48, 7,146, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -192, 8,146, 22, 1, 0, 0, 0,160, 5,146, 22, 1, 0, 0, 0, 96, 58,243, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 79, 66, 74, 69, 67, 84, 95, 80, 84, 95,116,114, 97,110,115,102,111,114,109, 95,108,111, 99,107,115, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 79, 66, 74, 69, 67, 84, 95, 80, 84, 95,116,114, 97,110,115,102,111,114,109, 95,108,111, 99,107,115, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 84,114, 97,110,115,102,111,114,109, 32, 76,111, 99,107,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 15,255,126, 1, 0, 0, 0, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -192, 8,146, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 80, 10,146, 22, 1, 0, 0, 0, 48, 7,146, 22, 1, 0, 0, 0, - 64, 63,243, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 74, 69, 67, 84, 95, 80, 84, 95,114,101,108, 97,116,105, -111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 74, 69, 67, 84, 95, 80, 84, 95,114,101,108, 97,116,105, -111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,108, 97,116,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,149,254,126, 1, 98, 0, 0, 0, 0, 0, 0, 0, 6, 0, - 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 80, 10,146, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -224, 11,146, 22, 1, 0, 0, 0,192, 8,146, 22, 1, 0, 0, 0, 32, 68,243, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 79, 66, 74, 69, 67, 84, 95, 80, 84, 95,103,114,111,117,112,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 79, 66, 74, 69, 67, 84, 95, 80, 84, 95,103,114,111,117,112,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 71,114,111,117,112,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 89,254,126, 1, 36, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -224, 11,146, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,112, 13,146, 22, 1, 0, 0, 0, 80, 10,146, 22, 1, 0, 0, 0, - 0, 73,243, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 74, 69, 67, 84, 95, 80, 84, 95,100,105,115,112,108, 97, -121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 74, 69, 67, 84, 95, 80, 84, 95,100,105,115,112,108, 97, -121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,115,112,108, 97,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214,253,126, 1,107, 0, 0, 0, 0, 0, 0, 0, 6, 0, - 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,112, 13,146, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 0, 15,146, 22, 1, 0, 0, 0,224, 11,146, 22, 1, 0, 0, 0,224, 77,243, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 79, 66, 74, 69, 67, 84, 95, 80, 84, 95,100,117,112,108,105, 99, 97,116,105,111,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 79, 66, 74, 69, 67, 84, 95, 80, 84, 95,100,117,112,108,105, 99, 97,116,105,111,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68,117,112,108,105, 99, 97,116,105,111,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,154,253,126, 1, 36, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 0, 15,146, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112, 13,146, 22, 1, 0, 0, 0, -192, 82,243, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 74, 69, 67, 84, 95, 80, 84, 95, 97,110,105,109, 97,116, -105,111,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 74, 69, 67, 84, 95, 80, 84, 95, 97,110,105,109, 97,116, -105,111,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65,110,105,109, 97,116,105,111,110, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,252,126, 1,146, 0, 0, 0, 0, 0, 0, 0, 7, 0, - 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0,144, 16,146, 22, 1, 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0, -144, 20,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0, 96,123,189, 2, 0, 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0, +128,127,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 3, 0, 0, 0, - 2, 0, 1, 0, 0, 0, 0, 0,224, 84, 19, 26, 1, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,208, 17,146, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 48, 19,146, 22, 1, 0, 0, 0, + 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,160,124,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 16,126,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,251, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,200, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,143, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 0, 68, 0, 0,200, 65, @@ -6800,8 +4569,8 @@ char datatoc_B_blend[]= { 144, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 48, 19,146, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208, 17,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 0, 68, 0, 0, 0, 0, 0,128, 26, 68, 56, 58, 14, 66, 61, 2,240, 67, + 68, 65, 84, 65, 40, 1, 0, 0, 16,126,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +160,124,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 0, 68, 0, 0, 0, 0, 0,128, 26, 68, 56, 58, 14, 66, 61, 2,240, 67, 0, 0, 0, 0, 55, 58,142, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,143, 1, 0, 0, 0, 0, 0, 0,255, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,122, 68, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 4, 10, 0,144, 1, @@ -6810,8 +4579,8 @@ char datatoc_B_blend[]= { 144, 1, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,144, 2, 0, 0,144, 20,146, 22, 1, 0, 0, 0,169, 0, 0, 0, 1, 0, 0, 0,112, 33,146, 22, 1, 0, 0, 0, -144, 16,146, 22, 1, 0, 0, 0,208, 17,146, 22, 1, 0, 0, 0, 48, 19,146, 22, 1, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,144, 2, 0, 0,128,127,189, 2, 0, 0, 0, 0,169, 0, 0, 0, 1, 0, 0, 0,192,140,189, 2, 0, 0, 0, 0, + 96,123,189, 2, 0, 0, 0, 0,160,124,189, 2, 0, 0, 0, 0, 16,126,189, 2, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6831,8 +4600,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 96, 23,146, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -192, 24,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80,130,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +192,131,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 1, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, @@ -6841,8 +4610,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 4, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,192, 24,146, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 32, 26,146, 22, 1, 0, 0, 0, 96, 23,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,192,131,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 48,133,189, 2, 0, 0, 0, 0, 80,130,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, @@ -6851,8 +4620,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,107, 2, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 32, 26,146, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -128, 27,146, 22, 1, 0, 0, 0,192, 24,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 48,133,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +160,134,189, 2, 0, 0, 0, 0,192,131,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, @@ -6861,8 +4630,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,128, 27,146, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -224, 28,146, 22, 1, 0, 0, 0, 32, 26,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128,142,196, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,160,134,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 16,136,189, 2, 0, 0, 0, 0, 48,133,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128,142,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 0, 26,196, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, @@ -6871,8 +4640,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,224, 28,146, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,128, 27,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 16,136,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,160,134,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6881,7 +4650,7 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 4, 2,107, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 64, 30,146, 22, 1, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, 64, 30,146, 22, 1, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, +128,137,189, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0,128,137,189, 2, 0, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, 28,242,167, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,139, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0, @@ -6906,17 +4675,17 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, -112, 33,146, 22, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0,144, 37,146, 22, 1, 0, 0, 0,144, 20,146, 22, 1, 0, 0, 0, - 96, 23,146, 22, 1, 0, 0, 0,224, 28,146, 22, 1, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, +192,140,189, 2, 0, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, 0,145,189, 2, 0, 0, 0, 0,128,127,189, 2, 0, 0, 0, 0, + 80,130,189, 2, 0, 0, 0, 0, 16,136,189, 2, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0, 7, 0, 48,194,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, 7, 0,176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,208, 34,146, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 48, 36,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 68, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 32,142,189, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,144,143,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,195, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,189, 68, 0, 0,200, 65, 0,224,189, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, @@ -6925,8 +4694,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 48, 36,146, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 34,146, 22, 1, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,144,143,189, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,142,189, 2, 0, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, 0, 0, 32,193, 0, 0, 0, 68, 56,205,190,195,156,102, 95, 68,160,228,244, 64,110, 44,252, 67, 7, 6, 0, 0, 24, 6, 0, 0, 18, 0, 0, 0,106, 2, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 18, 0, 0, 0,106, 2, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,250, 70, 0, 0,250, 70,205,204, 76, 62, 72,225,154, 63, @@ -6935,18 +4704,18 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 6,107, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,144, 37,146, 22, 1, 0, 0, 0, -173, 0, 0, 0, 1, 0, 0, 0, 16, 43,146, 22, 1, 0, 0, 0,112, 33,146, 22, 1, 0, 0, 0,208, 34,146, 22, 1, 0, 0, 0, - 48, 36,146, 22, 1, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, 0,145,189, 2, 0, 0, 0, 0, +173, 0, 0, 0, 1, 0, 0, 0,176,150,189, 2, 0, 0, 0, 0,192,140,189, 2, 0, 0, 0, 0, 32,142,189, 2, 0, 0, 0, 0, +144,143,189, 2, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,186,129, 3, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 85,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,193, 67, 81, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,240, 38,146, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 80, 40,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, 0, 0,216, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 96,146,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +208,147,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0,224,189, 68, 0, 0,208, 65, 0,224,189, 68, 0, 0,208, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, @@ -6955,8 +4724,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 27, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80, 40,146, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -176, 41,146, 22, 1, 0, 0, 0,240, 38,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,208,147,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 64,149,189, 2, 0, 0, 0, 0, 96,146,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6965,8 +4734,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176, 41,146, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 80, 40,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 64,149,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,208,147,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 0,124,146, 72, 0, 0, 0, 66, 10,215, 35, 60, 0, 0,200, 66,105, 0, 0, 0, 0, 0, 0, 0, @@ -6975,16 +4744,16 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0,240, 5,163, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0, 16, 43,146, 22, 1, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, - 0, 47,146, 22, 1, 0, 0, 0,144, 37,146, 22, 1, 0, 0, 0,240, 38,146, 22, 1, 0, 0, 0,176, 41,146, 22, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0,176,150,189, 2, 0, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, +192,154,189, 2, 0, 0, 0, 0, 0,145,189, 2, 0, 0, 0, 0, 96,146,189, 2, 0, 0, 0, 0, 64,149,189, 2, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 64, 44,146, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,160, 45,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, + 0, 0, 0, 0, 0, 0,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,224,151,189, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 80,153,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, @@ -6993,8 +4762,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,160, 45,146, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 44,146, 22, 1, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80,153,189, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,151,189, 2, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, @@ -7003,1316 +4772,718 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0, 0, 47,146, 22, 1, 0, 0, 0, -172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 43,146, 22, 1, 0, 0, 0, 64, 44,146, 22, 1, 0, 0, 0, -160, 45,146, 22, 1, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0,192,154,189, 2, 0, 0, 0, 0, +172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,150,189, 2, 0, 0, 0, 0,224,151,189, 2, 0, 0, 0, 0, + 80,153,189, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 0, 48,146, 22, 1, 0, 0, 0, -194, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,240,145, 22, 1, 0, 0, 0, 96, 57,145, 22, 1, 0, 0, 0, -192, 57,145, 22, 1, 0, 0, 0,128, 58,145, 22, 1, 0, 0, 0, 32, 58,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,208,155,189, 2, 0, 0, 0, 0, +194, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 90,189, 2, 0, 0, 0, 0,144,155,188, 2, 0, 0, 0, 0, +240,155,188, 2, 0, 0, 0, 0,176,156,188, 2, 0, 0, 0, 0, 80,156,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 4, 0, 0, 23, 6, 0, 0, 0, 0, 0, 0, 21, 4, 0, 0, 4, 4,143, 1, 22, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 96, 32, 15, 3, 1, 0, 0, 0,112, 84,146, 22, 1, 0, 0, 0,224,114,146, 22, 1, 0, 0, 0,224, 48,146, 22, 1, 0, 0, 0, - 64, 50,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76,154, 22, 1, 0, 0, 0, -208, 54,141, 22, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,224, 48,146, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 64, 50,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 67, 0, 0, 0, 0, 0, 0,240, 65, + 0, 0, 0, 0, 0, 0, 0, 0,176,193,189, 2, 0, 0, 0, 0, 16,225,189, 2, 0, 0, 0, 0,176,156,189, 2, 0, 0, 0, 0, + 32,158,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176,156,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 32,158,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 67, 0, 0, 0, 0, 0, 0,240, 65, 0, 0, 0, 0, 0,128,199, 67, 0, 0, 0, 0, 0, 0,248, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 1, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0,128,199, 67, 0, 0,232, 65, 0,128,199, 67, 0, 0,232, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,143, 1, 31, 0,143, 1, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,137, 4, 0, 0, 23, 6, 0, 0,247, 3, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,143, 1, 31, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 35, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 64, 50,146, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,224, 48,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 67, 0, 64,121,196, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 32,158,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,176,156,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 67, 0, 64,121,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 67, 0, 64,121,196, 0, 0, 0, 0,126, 1, 0, 0,143, 1, 0, 0, 18, 0, 0, 0,246, 3, 0, 0, 0, 0, 0, 0,125, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,125, 1, 0, 0, 18, 0, 0, 0,246, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, - 18, 0, 0, 4, 6, 0,143, 1,247, 3,126, 1,229, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 65,154, 22, 1, 0, 0, 0, - 6, 0, 0, 0, 5, 0, 0, 0,137, 4, 0, 0, 23, 6, 0, 0, 0, 0, 0, 0,246, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 18, 0, 0, 4, 6, 0,143, 1,247, 3,126, 1,229, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,137, 4, 0, 0, 23, 6, 0, 0, 0, 0, 0, 0,246, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,143, 1,247, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 64, 33, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 51,146, 22, 1, 0, 0, 0, -224, 82,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,160, 51,146, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 48, 53,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 34, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 67,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,220,255,126, 1, 36, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 48, 53,146, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,192, 54,146, 22, 1, 0, 0, 0,160, 51,146, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255, 81, 1, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,192, 54,146, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 80, 56,146, 22, 1, 0, 0, 0, 48, 53,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 76, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0,176,193,189, 2, 0, 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0, +208,197,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,111,255, 81, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 80, 56,146, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,224, 57,146, 22, 1, 0, 0, 0,192, 54,146, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115, -105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115, -105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,165,254, 81, 1,178, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 5, 0, 5, 0, 0, 0, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,240,194,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 96,196,189, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,251, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,200, 67, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,143, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 0, 68, 0, 0,200, 65, + 0,192, 0, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,144, 1, + 26, 0,144, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,143, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +144, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,224, 57,146, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -112, 59,146, 22, 1, 0, 0, 0, 80, 56,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0, 96,196,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +240,194,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 0, 68, 0, 0, 0, 0, 0,128, 26, 68, 56, 58, 14, 66, 61, 2,240, 67, + 0, 0, 0, 0, 55, 58,142, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,143, 1, 0, 0, 0, 0, 0, 0,255, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,122, 68, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 4, 10, 0,144, 1, + 0, 4,144, 1, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,143, 1, 0, 0, 26, 0, 0, 0, 25, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +144, 1, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 65,110,116,105, 45, 65,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 83,254, 81, 1, 58, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,144, 2, 0, 0,208,197,189, 2, 0, 0, 0, 0,169, 0, 0, 0, 1, 0, 0, 0, 16,211,189, 2, 0, 0, 0, 0, +176,193,189, 2, 0, 0, 0, 0,240,194,189, 2, 0, 0, 0, 0, 96,196,189, 2, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -112, 59,146, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 61,146, 22, 1, 0, 0, 0,224, 57,146, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,213,253, 81, 1,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 0, 61,146, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -144, 62,146, 22, 1, 0, 0, 0,112, 59,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 79,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 84,253, 81, 1,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -144, 62,146, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 32, 64,146, 22, 1, 0, 0, 0, 0, 61,146, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114, -109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114, -109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,253, 81, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 32, 64,146, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -176, 65,146, 22, 1, 0, 0, 0,144, 62,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80,111,115,116, 32, 80,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 36,253, 81, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -176, 65,146, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 64, 67,146, 22, 1, 0, 0, 0, 32, 64,146, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,160,200,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 16,202,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 0, 1, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, + 4, 0, 12, 4, 10, 0, 4, 2, 26, 0, 4, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0, 0,149, 1, 0, 0,174, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 4, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 16,202,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +128,203,189, 2, 0, 0, 0, 0,160,200,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, + 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, + 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,175, 1, 0, 0, 25, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,107, 2, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,253, 81, 1, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,128,203,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +240,204,189, 2, 0, 0, 0, 0, 16,202,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, + 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, + 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, + 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0, 0,175, 1, 0, 0,175, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 64, 67,146, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -208, 68,146, 22, 1, 0, 0, 0,176, 65,146, 22, 1, 0, 0, 0, 96,212,242, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 77, 65, 84, 69, 82, 73, 65, 76, 95, 80, 84, 95, 99,111,110,116,101,120,116, 95,109, 97,116,101,114,105, 97,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 77, 65, 84, 69, 82, 73, 65, 76, 95, 80, 84, 95, 99,111,110,116,101,120,116, 95,109, 97,116,101,114,105, 97,108, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,240,204,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 96,206,189, 2, 0, 0, 0, 0,128,203,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128,142,196, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 35, 67, 0, 0, 26,196, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, + 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, + 18, 0, 0, 0, 6, 0,180, 0,122, 2,163, 0,104, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0, 0, 3, 2, 0, 0,175, 1, 0, 0, 25, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 96,206,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,240,204,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 94,255,126, 1,126, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -208, 68,146, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 96, 70,146, 22, 1, 0, 0, 0, 64, 67,146, 22, 1, 0, 0, 0, - 64,214,242, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 65, 84, 69, 82, 73, 65, 76, 95, 80, 84, 95,112,114,101,118, -105,101,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 65, 84, 69, 82, 73, 65, 76, 95, 80, 84, 95,112,114,101,118, -105,101,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,114,101,118,105,101,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190,254,126, 1,136, 0, 0, 0, 0, 0, 0, 0, 6, 0, - 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0, 0,175, 1, 0, 0, 25, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 4, 2,107, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 96, 70,146, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -240, 71,146, 22, 1, 0, 0, 0,208, 68,146, 22, 1, 0, 0, 0, 64,224,242, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 77, 65, 84, 69, 82, 73, 65, 76, 95, 80, 84, 95,100,105,102,102,117,115,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 77, 65, 84, 69, 82, 73, 65, 76, 95, 80, 84, 95,100,105,102,102,117,115,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +208,207,189, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0,208,207,189, 2, 0, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, + 28,242,167, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,139, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, + 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0, +162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63, + 69,239,209, 62, 70,119,105, 63,176, 84, 89,188, 0, 0, 0, 0, 53,177,205,190,142, 74, 70, 62,166, 33,101, 63, 0, 0, 0, 0, +185,158, 81, 63, 35, 44,185,190, 43, 61,228, 62, 0, 0, 0, 0,164, 96, 68, 65,111,121,173,192,248,209,213, 64, 0, 0,128, 63, +161,185, 9, 63,206,249,224,190,222,160, 81,191,184,158, 81,191,155, 41,153, 63,139,225, 88, 62, 9, 46,185, 62, 35, 44,185, 62, +191,147,142,188,204,156,122, 63,129, 63,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 96,132,111, 65,214,211,111, 65, +155,253,159, 62, 81,240, 49, 63,144,213, 37,188, 0, 0,240,181,195, 13,188,190,192, 73, 53, 62,101,126, 81, 63, 0, 64,164, 53, +215,104, 25,196,135,132,135, 67, 38, 9,167,195,136,252, 71,194, 3, 54, 25, 68,160, 87,135,195,206,209,166, 67,151,254, 71, 66, + 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0, +162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63, +161,185, 9, 63,206,249,224,190,222,160, 81,191,184,158, 81,191,155, 41,153, 63,139,225, 88, 62, 9, 46,185, 62, 35, 44,185, 62, +191,147,142,188,204,156,122, 63,129, 63,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 96,132,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68,105,102,102,117,115,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,103,254,126, 1, 63, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190,214,211,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, + 34,153, 65, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -240, 71,146, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,128, 73,146, 22, 1, 0, 0, 0, 96, 70,146, 22, 1, 0, 0, 0, - 32,226,242, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 65, 84, 69, 82, 73, 65, 76, 95, 80, 84, 95,115,112,101, 99, -117,108, 97,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 65, 84, 69, 82, 73, 65, 76, 95, 80, 84, 95,115,112,101, 99, -117,108, 97,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,112,101, 99,117,108, 97,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,252,253,126, 1, 83, 0, 0, 0, 0, 0, 0, 0, 6, 0, - 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,128, 73,146, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 16, 75,146, 22, 1, 0, 0, 0,240, 71,146, 22, 1, 0, 0, 0, 0,228,242, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 77, 65, 84, 69, 82, 73, 65, 76, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, + 16,211,189, 2, 0, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, 80,215,189, 2, 0, 0, 0, 0,208,197,189, 2, 0, 0, 0, 0, +160,200,189, 2, 0, 0, 0, 0, 96,206,189, 2, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, 7, 0,176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 77, 65, 84, 69, 82, 73, 65, 76, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, + 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,112,212,189, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,224,213,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 68, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,195, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 6, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0,224,189, 68, 0, 0,200, 65, 0,224,189, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 24, 6, 26, 0, 24, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 6, 0, 0,149, 1, 0, 0,174, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,148,253,126, 1, 80, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,224,213,189, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,212,189, 2, 0, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, + 0, 0, 32,193, 0, 0, 0, 68, 56,205,190,195,156,102, 95, 68,160,228,244, 64,110, 44,252, 67, 7, 6, 0, 0, 24, 6, 0, 0, + 18, 0, 0, 0,106, 2, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, + 18, 0, 0, 0,106, 2, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,250, 70, 0, 0,250, 70,205,204, 76, 62, 72,225,154, 63, + 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 24, 6,107, 2, 7, 6, 89, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 6, 0, 0,175, 1, 0, 0, 25, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 6,107, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 16, 75,146, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,160, 76,146, 22, 1, 0, 0, 0,128, 73,146, 22, 1, 0, 0, 0, -224,229,242, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 65, 84, 69, 82, 73, 65, 76, 95, 80, 84, 95,116,114, 97,110, -115,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 65, 84, 69, 82, 73, 65, 76, 95, 80, 84, 95,116,114, 97,110, -115,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,114, 97,110,115,112, 97,114,101,110, 99,121, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, 80,215,189, 2, 0, 0, 0, 0, +173, 0, 0, 0, 1, 0, 0, 0, 0,221,189, 2, 0, 0, 0, 0, 16,211,189, 2, 0, 0, 0, 0,112,212,189, 2, 0, 0, 0, 0, +224,213,189, 2, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,124,253,126, 1, 0, 0, 20, 0, 0, 0, 4, 0, 6, 0, - 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,160, 76,146, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 48, 78,146, 22, 1, 0, 0, 0, 16, 75,146, 22, 1, 0, 0, 0,144,201,242, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 77, 65, 84, 69, 82, 73, 65, 76, 95, 80, 84, 95,109,105,114,114,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 77, 65, 84, 69, 82, 73, 65, 76, 95, 80, 84, 95,109,105,114,114,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 85,192, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,193, 67, 81, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176,216,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 32,218,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, 0, 0,216, 65, + 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, + 0,224,189, 68, 0, 0,208, 65, 0,224,189, 68, 0, 0,208, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, + 4, 0, 12, 4, 10, 0,240, 5, 27, 0,240, 5, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 85, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 27, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 77,105,114,114,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,100,253,126, 1, 0, 0, 20, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 32,218,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +144,219,189, 2, 0, 0, 0, 0,176,216,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 48, 78,146, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,192, 79,146, 22, 1, 0, 0, 0,160, 76,146, 22, 1, 0, 0, 0, -160,193,242, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 65, 84, 69, 82, 73, 65, 76, 95, 80, 84, 95,115,115,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 65, 84, 69, 82, 73, 65, 76, 95, 80, 84, 95,115,115,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,117, 98,115,117,114,102, 97, 99,101, 32, 83, 99, 97,116,116, -101,114,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76,253,126, 1, 0, 0, 20, 0, 0, 0, 4, 0, 6, 0, - 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0,239, 5, 0, 0,112, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,192, 79,146, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 80, 81,146, 22, 1, 0, 0, 0, 48, 78,146, 22, 1, 0, 0, 0,112,227,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 77, 65, 84, 69, 82, 73, 65, 76, 95, 80, 84, 95,115,116,114, 97,110,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,144,219,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 32,218,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, + 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, + 18, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, + 0, 0, 32, 65, 0, 0,128, 64, 0,124,146, 72, 0, 0, 0, 66, 10,215, 35, 60, 0, 0,200, 66,105, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4, 8, 0,240, 5,163, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0,112, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,240, 5,163, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 77, 65, 84, 69, 82, 73, 65, 76, 95, 80, 84, 95,115,116,114, 97,110,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83,116,114, 97,110,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0, 0,221,189, 2, 0, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, + 16,225,189, 2, 0, 0, 0, 0, 80,215,189, 2, 0, 0, 0, 0,176,216,189, 2, 0, 0, 0, 0,144,219,189, 2, 0, 0, 0, 0, + 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 52,253,126, 1, 0, 0, 0, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 80, 81,146, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,224, 82,146, 22, 1, 0, 0, 0,192, 79,146, 22, 1, 0, 0, 0, -208,229,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 65, 84, 69, 82, 73, 65, 76, 95, 80, 84, 95,111,112,116,105, -111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 65, 84, 69, 82, 73, 65, 76, 95, 80, 84, 95,111,112,116,105, -111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,112,116,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76,252,126, 1,208, 0, 0, 0, 0, 0, 0, 0, 6, 0, - 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 48,222,189, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,160,223,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,152, 4, 26, 0,152, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0,101, 0, 0, 0,126, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,224, 82,146, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 80, 81,146, 22, 1, 0, 0, 0, 48,232,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 77, 65, 84, 69, 82, 73, 65, 76, 95, 80, 84, 95,115,104, 97,100,111,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,160,223,189, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,222,189, 2, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, + 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, + 18, 0, 0, 0,121, 2, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, + 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0,152, 4,122, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0,127, 0, 0, 0,248, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 77, 65, 84, 69, 82, 73, 65, 76, 95, 80, 84, 95,115,104, 97,100,111,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83,104, 97,100,111,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0, 16,225,189, 2, 0, 0, 0, 0, +172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,221,189, 2, 0, 0, 0, 0, 48,222,189, 2, 0, 0, 0, 0, +160,223,189, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 52,252,126, 1, 0, 0, 0, 0, 0, 0, 4, 0, 7, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0, -112, 84,146, 22, 1, 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0,112, 88,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 83, 78, 0, 0,208, 0, 0, 0,176,226,189, 2, 0, 0, 0, 0, +190, 0, 0, 0, 1, 0, 0, 0,128,112,190, 2, 0, 0, 0, 0, 0,150,188, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 81,117, 97,100, 32, 86,105,101,119, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,227,189, 2, 0, 0, 0, 0,224,231,189, 2, 0, 0, 0, 0, + 64,232,189, 2, 0, 0, 0, 0,176,239,189, 2, 0, 0, 0, 0, 32,240,189, 2, 0, 0, 0, 0,160, 66,190, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 85,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, +192,227,189, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 32,228,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 32,228,189, 2, 0, 0, 0, 0, +191, 0, 0, 0, 1, 0, 0, 0,128,228,189, 2, 0, 0, 0, 0,192,227,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 49, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,128,228,189, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, +224,228,189, 2, 0, 0, 0, 0, 32,228,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 49, 4, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0,224,228,189, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 64,229,189, 2, 0, 0, 0, 0, +128,228,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, + 64,229,189, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,160,229,189, 2, 0, 0, 0, 0,224,228,189, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,160,229,189, 2, 0, 0, 0, 0, +191, 0, 0, 0, 1, 0, 0, 0, 0,230,189, 2, 0, 0, 0, 0, 64,229,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +128, 7, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 0,230,189, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, + 96,230,189, 2, 0, 0, 0, 0,160,229,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0, 96,230,189, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,192,230,189, 2, 0, 0, 0, 0, + 0,230,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, +192,230,189, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 32,231,189, 2, 0, 0, 0, 0, 96,230,189, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 68, 3, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 32,231,189, 2, 0, 0, 0, 0, +191, 0, 0, 0, 1, 0, 0, 0,128,231,189, 2, 0, 0, 0, 0,192,230,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +128, 7, 68, 3, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,128,231,189, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, +224,231,189, 2, 0, 0, 0, 0, 32,231,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0,224,231,189, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +128,231,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 84, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 64,232,189, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,176,232,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 32,228,189, 2, 0, 0, 0, 0,128,228,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +176,232,189, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 32,233,189, 2, 0, 0, 0, 0, 64,232,189, 2, 0, 0, 0, 0, + 32,228,189, 2, 0, 0, 0, 0, 64,229,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 32,233,189, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,144,233,189, 2, 0, 0, 0, 0,176,232,189, 2, 0, 0, 0, 0, +128,228,189, 2, 0, 0, 0, 0,160,229,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +144,233,189, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0,234,189, 2, 0, 0, 0, 0, 32,233,189, 2, 0, 0, 0, 0, + 64,229,189, 2, 0, 0, 0, 0,160,229,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 0,234,189, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,112,234,189, 2, 0, 0, 0, 0,144,233,189, 2, 0, 0, 0, 0, +192,227,189, 2, 0, 0, 0, 0, 0,230,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +112,234,189, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,224,234,189, 2, 0, 0, 0, 0, 0,234,189, 2, 0, 0, 0, 0, +224,228,189, 2, 0, 0, 0, 0, 0,230,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +224,234,189, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 80,235,189, 2, 0, 0, 0, 0,112,234,189, 2, 0, 0, 0, 0, + 64,229,189, 2, 0, 0, 0, 0, 96,230,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 80,235,189, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,192,235,189, 2, 0, 0, 0, 0,224,234,189, 2, 0, 0, 0, 0, +160,229,189, 2, 0, 0, 0, 0, 96,230,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +192,235,189, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 48,236,189, 2, 0, 0, 0, 0, 80,235,189, 2, 0, 0, 0, 0, + 0,230,189, 2, 0, 0, 0, 0,192,230,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 48,236,189, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,160,236,189, 2, 0, 0, 0, 0,192,235,189, 2, 0, 0, 0, 0, + 96,230,189, 2, 0, 0, 0, 0,192,230,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +160,236,189, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 16,237,189, 2, 0, 0, 0, 0, 48,236,189, 2, 0, 0, 0, 0, +160,229,189, 2, 0, 0, 0, 0, 32,231,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 16,237,189, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,128,237,189, 2, 0, 0, 0, 0,160,236,189, 2, 0, 0, 0, 0, +224,228,189, 2, 0, 0, 0, 0, 32,231,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +128,237,189, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,240,237,189, 2, 0, 0, 0, 0, 16,237,189, 2, 0, 0, 0, 0, +192,230,189, 2, 0, 0, 0, 0, 32,231,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +240,237,189, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 96,238,189, 2, 0, 0, 0, 0,128,237,189, 2, 0, 0, 0, 0, +192,227,189, 2, 0, 0, 0, 0,128,231,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 96,238,189, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,208,238,189, 2, 0, 0, 0, 0,240,237,189, 2, 0, 0, 0, 0, + 64,229,189, 2, 0, 0, 0, 0,128,231,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +208,238,189, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 64,239,189, 2, 0, 0, 0, 0, 96,238,189, 2, 0, 0, 0, 0, + 96,230,189, 2, 0, 0, 0, 0,224,231,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 64,239,189, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,176,239,189, 2, 0, 0, 0, 0,208,238,189, 2, 0, 0, 0, 0, + 0,230,189, 2, 0, 0, 0, 0,224,231,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +176,239,189, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,239,189, 2, 0, 0, 0, 0, +128,231,189, 2, 0, 0, 0, 0,224,231,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, + 32,240,189, 2, 0, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,224,243,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 64,229,189, 2, 0, 0, 0, 0, 32,228,189, 2, 0, 0, 0, 0,128,228,189, 2, 0, 0, 0, 0,160,229,189, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 23, 4, 0, 0, 49, 4, 0, 0, 7, 7,129, 7, 27, 0, 1, 0, + 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,111,190, 2, 0, 0, 0, 0,240,111,190, 2, 0, 0, 0, 0, + 0,241,189, 2, 0, 0, 0, 0,112,242,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0,241,189, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,112,242,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,161, 68, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 32,240, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,129, 7, 26, 0,129, 7, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 23, 4, 0, 0, 48, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 7, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,112,242,189, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,109, 69, + 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192, 0, 0, 0, 0,112, 7, 0, 0,129, 7, 0, 0, + 18, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, + 18, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, + 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,129, 7, 3, 0,112, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 4, 0, 0, 49, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 5, 0, 5, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 96,213, 18, 26, 1, 0, 0, 0, -255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176, 85,146, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 16, 87,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,251, 67, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,200, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,143, 1, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 0, 68, 0, 0,200, 65, 0,192, 0, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,144, 1, 26, 0,144, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,143, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,224,243,189, 2, 0, 0, 0, 0, +194, 0, 0, 0, 1, 0, 0, 0, 32, 36,190, 2, 0, 0, 0, 0, 32,240,189, 2, 0, 0, 0, 0, 0,230,189, 2, 0, 0, 0, 0, +192,230,189, 2, 0, 0, 0, 0, 32,231,189, 2, 0, 0, 0, 0,224,228,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 6, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 67, 3, 0, 0, 4, 4,128, 1, 68, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 96, 27,190, 2, 0, 0, 0, 0,192, 34,190, 2, 0, 0, 0, 0,192,244,189, 2, 0, 0, 0, 0, + 48,246,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,192,244,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 48,246,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 67, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 0,192, 67, 0, 0, 0, 0, 0, 0,248, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127, 1, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, + 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, + 4, 0, 12, 4, 10, 0,128, 1, 31, 0,128, 1, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 0, 0,128, 7, 0, 0, 37, 3, 0, 0, 67, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,128, 1, 31, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 16, 87,146, 22, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176, 85,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 0, 68, - 0, 0, 0, 0, 0,128, 26, 68, 56, 58, 14, 66, 61, 2,240, 67, 0, 0, 0, 0, 55, 58,142, 68, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,143, 1, 0, 0, - 0, 0, 0, 0,255, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,122, 68, - 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 4, 10, 0,144, 1, 0, 4,144, 1, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,143, 1, 0, 0, 26, 0, 0, 0, 25, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 1, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 48,246,189, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,192,244,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,183, 67, 0,128, 68,196, 0, 0, 0, 0, + 0, 0, 0, 0,253,127,183, 67,253,191, 68,196, 0, 0, 0, 0,111, 1, 0, 0,128, 1, 0, 0, 18, 0, 0, 0, 36, 3, 0, 0, + 0, 0, 0, 0,110, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,110, 1, 0, 0, 18, 0, 0, 0, 36, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, + 18, 0, 0, 4, 6, 0,128, 1, 37, 3,111, 1, 19, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 36, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,128, 1, 37, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,144, 2, 0, 0,112, 88,146, 22, 1, 0, 0, 0, -169, 0, 0, 0, 1, 0, 0, 0, 80,101,146, 22, 1, 0, 0, 0,112, 84,146, 22, 1, 0, 0, 0,176, 85,146, 22, 1, 0, 0, 0, - 16, 87,146, 22, 1, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0, 96, 27,190, 2, 0, 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0, +192, 34,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 64, 91,146, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,160, 92,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 1, 68, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 4, 2, 26, 0, 4, 2, 26, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0, 0, -149, 1, 0, 0,174, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 2, 26, 0, 0, 0, 1, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -160, 92,146, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 94,146, 22, 1, 0, 0, 0, 64, 91,146, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0, -143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -175, 1, 0, 0, 25, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,107, 2, 0, 0, 5, 0, - 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 0, 94,146, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 96, 95,146, 22, 1, 0, 0, 0,160, 92,146, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0, -143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0, 0, -175, 1, 0, 0,175, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, - 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 96, 95,146, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,192, 96,146, 22, 1, 0, 0, 0, 0, 94,146, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 35, 67, 0,128,142,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 0, 26,196, 0, 0, 0, 0, -163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0,122, 2,163, 0,104, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0, 0, 3, 2, 0, 0, -175, 1, 0, 0, 25, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, - 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -192, 96,146, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 95,146, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0, 0, -175, 1, 0, 0, 25, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 2,107, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 98,146, 22, 1, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, - 32, 98,146, 22, 1, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, 28,242,167, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,255,255,139, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, - 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, - 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63, 69,239,209, 62, 70,119,105, 63,176, 84, 89,188, 0, 0, 0, 0, - 53,177,205,190,142, 74, 70, 62,166, 33,101, 63, 0, 0, 0, 0,185,158, 81, 63, 35, 44,185,190, 43, 61,228, 62, 0, 0, 0, 0, -164, 96, 68, 65,111,121,173,192,248,209,213, 64, 0, 0,128, 63,161,185, 9, 63,206,249,224,190,222,160, 81,191,184,158, 81,191, -155, 41,153, 63,139,225, 88, 62, 9, 46,185, 62, 35, 44,185, 62,191,147,142,188,204,156,122, 63,129, 63,228,190, 42, 61,228,190, - 0, 0, 0, 0, 0, 0, 0, 0, 96,132,111, 65,214,211,111, 65,155,253,159, 62, 81,240, 49, 63,144,213, 37,188, 0, 0,240,181, -195, 13,188,190,192, 73, 53, 62,101,126, 81, 63, 0, 64,164, 53,215,104, 25,196,135,132,135, 67, 38, 9,167,195,136,252, 71,194, - 3, 54, 25, 68,160, 87,135,195,206,209,166, 67,151,254, 71, 66, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, - 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63,161,185, 9, 63,206,249,224,190,222,160, 81,191,184,158, 81,191, -155, 41,153, 63,139,225, 88, 62, 9, 46,185, 62, 35, 44,185, 62,191,147,142,188,204,156,122, 63,129, 63,228,190, 42, 61,228,190, - 0, 0, 0, 0, 0, 0, 0, 0, 96,132,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190, -214,211,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, 34,153, 65, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, 80,101,146, 22, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, -112,105,146, 22, 1, 0, 0, 0,112, 88,146, 22, 1, 0, 0, 0, 64, 91,146, 22, 1, 0, 0, 0,192, 96,146, 22, 1, 0, 0, 0, - 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,194,129, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, - 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,176,102,146, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 16,104,146, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,195, 68, + 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,160, 28,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 16, 30,190, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,138, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,189, 68, 0, 0,200, 65, - 0,224,189, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 24, 6, - 26, 0, 24, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 23, 6, 0, 0,149, 1, 0, 0,174, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 24, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 16,104,146, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176,102,146, 22, 1, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, 0, 0, 32,193, 0, 0, 0, 68, 56,205,190,195,156,102, 95, 68, -160,228,244, 64,110, 44,252, 67, 7, 6, 0, 0, 24, 6, 0, 0, 18, 0, 0, 0,106, 2, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 18, 0, 0, 0,106, 2, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,250, 70, 0, 0,250, 70,205,204, 76, 62, 72,225,154, 63, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 24, 6, -107, 2, 7, 6, 89, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 23, 6, 0, 0,175, 1, 0, 0, 25, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 24, 6,107, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 1, 0, 0,112,105,146, 22, 1, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0,240,110,146, 22, 1, 0, 0, 0, - 80,101,146, 22, 1, 0, 0, 0,176,102,146, 22, 1, 0, 0, 0, 16,104,146, 22, 1, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, + 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 1, + 26, 0, 20, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 89, 6, 0, 0,108, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 20, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48,186,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,193, 67, 81, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -208,106,146, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 48,108,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, 0, 0,216, 65, + 68, 65, 84, 65, 40, 1, 0, 0, 16, 30,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +160, 28,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0,224,189, 68, 0, 0,208, 65, 0,224,189, 68, 0, 0,208, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,240, 5, 27, 0,240, 5, 27, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, - 85, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 27, 0, 0, 0, 1, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 48,108,146, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,144,109,146, 22, 1, 0, 0, 0,208,106,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 89, 6, 0, 0,108, 7, 0, 0, 26, 0, 0, 0, 80, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 20, 1, 55, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 31,190, 2, 0, 0, 0, 0, + 68, 65, 84, 65,248, 2, 0, 0,128, 31,190, 2, 0, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0,103,212,136, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0,128, 63,103,212,136, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65,237,122,111, 62, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,128, 63,103,212,136, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0,239, 5, 0, 0, -112, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, - 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 32,222, 58, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -144,109,146, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,108,146, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, - 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 18, 0, 0, 0,239, 5, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 0,124,146, 72, 0, 0, 0, 66, - 10,215, 35, 60, 0, 0,200, 66,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 8, 0,240, 5,163, 3, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, -112, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,163, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0, -240,110,146, 22, 1, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0,224,114,146, 22, 1, 0, 0, 0,112,105,146, 22, 1, 0, 0, 0, -208,106,146, 22, 1, 0, 0, 0,144,109,146, 22, 1, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,192, 34,190, 2, 0, 0, 0, 0, +157, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 27,190, 2, 0, 0, 0, 0,160, 28,190, 2, 0, 0, 0, 0, + 16, 30,190, 2, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, +176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 32, 36,190, 2, 0, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, +112, 48,190, 2, 0, 0, 0, 0,224,243,189, 2, 0, 0, 0, 0,192,227,189, 2, 0, 0, 0, 0,128,231,189, 2, 0, 0, 0, 0, +224,231,189, 2, 0, 0, 0, 0, 0,230,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 5, 0, 0, + 0, 0, 0, 0, 83, 0, 0, 0, 15, 15, 0, 6, 84, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +224, 39,190, 2, 0, 0, 0, 0, 16, 47,190, 2, 0, 0, 0, 0, 0, 37,190, 2, 0, 0, 0, 0,112, 38,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 32,112,146, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,128,113,146, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 68, + 68, 65, 84, 65, 40, 1, 0, 0, 0, 37,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,112, 38,190, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,192, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, - 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,152, 4, - 26, 0,152, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,151, 4, 0, 0,101, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, + 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 0, 6, + 26, 0, 0, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,255, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,128,113,146, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 32,112,146, 22, 1, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, - 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, - 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0,152, 4, -122, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,151, 4, 0, 0,127, 0, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, 4,122, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,112, 38,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 37,190, 2, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, + 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 5, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,255, 5, 0, 0, 18, 0, 0, 0, 57, 0, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, + 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0, 0, 6, + 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,255, 5, 0, 0, 26, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 6, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,200, 0, 0, 0,224,114,146, 22, 1, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -240,110,146, 22, 1, 0, 0, 0, 32,112,146, 22, 1, 0, 0, 0,128,113,146, 22, 1, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,200, 0, 0, 0,224, 39,190, 2, 0, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0, 16, 47,190, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, - 83, 78, 0, 0,208, 0, 0, 0, 96,116,146, 22, 1, 0, 0, 0,190, 0, 0, 0, 1, 0, 0, 0, 64, 24, 38, 3, 1, 0, 0, 0, -208, 51,145, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 81,117, 97,100, 32, 86, -105,101,119, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112,117,146, 22, 1, 0, 0, 0,144,121,146, 22, 1, 0, 0, 0,240,121,146, 22, 1, 0, 0, 0, 80,128,146, 22, 1, 0, 0, 0, -176,128,146, 22, 1, 0, 0, 0,240,235, 37, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48,186,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,155,180, 21, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,112,117,146, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, -208,117,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0,208,117,146, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 48,118,146, 22, 1, 0, 0, 0, -112,117,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, - 48,118,146, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,144,118,146, 22, 1, 0, 0, 0,208,117,146, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 49, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,144,118,146, 22, 1, 0, 0, 0, -191, 0, 0, 0, 1, 0, 0, 0,240,118,146, 22, 1, 0, 0, 0, 48,118,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,240,118,146, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, - 80,119,146, 22, 1, 0, 0, 0,144,118,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 4, 1, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0, 80,119,146, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,176,119,146, 22, 1, 0, 0, 0, -240,118,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, -176,119,146, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 16,120,146, 22, 1, 0, 0, 0, 80,119,146, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 16,120,146, 22, 1, 0, 0, 0, -191, 0, 0, 0, 1, 0, 0, 0,112,120,146, 22, 1, 0, 0, 0,176,119,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 6, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,112,120,146, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, -208,120,146, 22, 1, 0, 0, 0, 16,120,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 68, 3, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0,208,120,146, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 48,121,146, 22, 1, 0, 0, 0, -112,120,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 68, 3, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, - 48,121,146, 22, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,144,121,146, 22, 1, 0, 0, 0,208,120,146, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,144,121,146, 22, 1, 0, 0, 0, -191, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,121,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 6, 84, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,240,121,146, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, - 80,122,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,117,146, 22, 1, 0, 0, 0, 48,118,146, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 80,122,146, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, -176,122,146, 22, 1, 0, 0, 0,240,121,146, 22, 1, 0, 0, 0,208,117,146, 22, 1, 0, 0, 0,240,118,146, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,176,122,146, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, - 16,123,146, 22, 1, 0, 0, 0, 80,122,146, 22, 1, 0, 0, 0, 48,118,146, 22, 1, 0, 0, 0, 80,119,146, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 16,123,146, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, -112,123,146, 22, 1, 0, 0, 0,176,122,146, 22, 1, 0, 0, 0,240,118,146, 22, 1, 0, 0, 0, 80,119,146, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,112,123,146, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, -208,123,146, 22, 1, 0, 0, 0, 16,123,146, 22, 1, 0, 0, 0,112,117,146, 22, 1, 0, 0, 0,176,119,146, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,208,123,146, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, - 48,124,146, 22, 1, 0, 0, 0,112,123,146, 22, 1, 0, 0, 0,144,118,146, 22, 1, 0, 0, 0,176,119,146, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 48,124,146, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, -144,124,146, 22, 1, 0, 0, 0,208,123,146, 22, 1, 0, 0, 0,240,118,146, 22, 1, 0, 0, 0, 16,120,146, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,144,124,146, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, -240,124,146, 22, 1, 0, 0, 0, 48,124,146, 22, 1, 0, 0, 0, 80,119,146, 22, 1, 0, 0, 0, 16,120,146, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,240,124,146, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, - 80,125,146, 22, 1, 0, 0, 0,144,124,146, 22, 1, 0, 0, 0,176,119,146, 22, 1, 0, 0, 0,112,120,146, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 80,125,146, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, -176,125,146, 22, 1, 0, 0, 0,240,124,146, 22, 1, 0, 0, 0, 16,120,146, 22, 1, 0, 0, 0,112,120,146, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,176,125,146, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, - 16,126,146, 22, 1, 0, 0, 0, 80,125,146, 22, 1, 0, 0, 0, 80,119,146, 22, 1, 0, 0, 0,208,120,146, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 16,126,146, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, -112,126,146, 22, 1, 0, 0, 0,176,125,146, 22, 1, 0, 0, 0,144,118,146, 22, 1, 0, 0, 0,208,120,146, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,112,126,146, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, -208,126,146, 22, 1, 0, 0, 0, 16,126,146, 22, 1, 0, 0, 0,112,120,146, 22, 1, 0, 0, 0,208,120,146, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,208,126,146, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, - 48,127,146, 22, 1, 0, 0, 0,112,126,146, 22, 1, 0, 0, 0,112,117,146, 22, 1, 0, 0, 0, 48,121,146, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 48,127,146, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, -144,127,146, 22, 1, 0, 0, 0,208,126,146, 22, 1, 0, 0, 0,240,118,146, 22, 1, 0, 0, 0, 48,121,146, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,144,127,146, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, -240,127,146, 22, 1, 0, 0, 0, 48,127,146, 22, 1, 0, 0, 0, 16,120,146, 22, 1, 0, 0, 0,144,121,146, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,240,127,146, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, - 80,128,146, 22, 1, 0, 0, 0,144,127,146, 22, 1, 0, 0, 0,176,119,146, 22, 1, 0, 0, 0,144,121,146, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 80,128,146, 22, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,240,127,146, 22, 1, 0, 0, 0, 48,121,146, 22, 1, 0, 0, 0,144,121,146, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,176,128,146, 22, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, - 80,132,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,118,146, 22, 1, 0, 0, 0,208,117,146, 22, 1, 0, 0, 0, - 48,118,146, 22, 1, 0, 0, 0, 80,119,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, - 23, 4, 0, 0, 49, 4, 0, 0, 7, 7,129, 7, 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0,240, 35, 15, 3, 1, 0, 0, 0, -192, 23, 38, 3, 1, 0, 0, 0,192, 23, 38, 3, 1, 0, 0, 0,144,129,146, 22, 1, 0, 0, 0,240,130,146, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 79, 33, 3, 1, 0, 0, 0,224,135, 40, 3, 1, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,144,129,146, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,240,130,146, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,161, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 32,240, 68, + 68, 65, 84, 65, 40, 1, 0, 0,240, 40,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 96, 42,190, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,203, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, - 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,129, 7, - 26, 0,129, 7, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,128, 7, 0, 0, 23, 4, 0, 0, 48, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -129, 7, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,176, 37, 15, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,240,130,146, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -144,129,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69, - 0, 0, 0,192, 0, 0, 0, 0,112, 7, 0, 0,129, 7, 0, 0, 18, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 18, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,129, 7, - 3, 0,112, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 49, 4, 0, 0, 49, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,208, 36, 15, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,160, 0, 0, 0, 80,132,146, 22, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 80,206, 37, 3, 1, 0, 0, 0, -176,128,146, 22, 1, 0, 0, 0,176,119,146, 22, 1, 0, 0, 0,112,120,146, 22, 1, 0, 0, 0,208,120,146, 22, 1, 0, 0, 0, -144,118,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 67, 3, 0, 0, - 4, 4,128, 1, 68, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 32, 15, 3, 1, 0, 0, 0,192,197, 37, 3, 1, 0, 0, 0, -240,204, 37, 3, 1, 0, 0, 0, 48,133,146, 22, 1, 0, 0, 0,144,134,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 32, 86,112, 29, 1, 0, 0, 0,240, 76,253, 24, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 48,133,146, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,144,134,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,205, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,192, 67, 0, 0, 0, 0, 0, 0,248, 65, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,127, 1, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,128, 1, 31, 0,128, 1, 31, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 0, 0,128, 7, 0, 0, - 37, 3, 0, 0, 67, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 1, 31, 0, 0, 0, 1, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 35, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -144,134,146, 22, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,133,146, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0,183, 67, 0,128, 68,196, 0, 0, 0, 0, 0, 0, 0, 0,253,127,183, 67,253,191, 68,196, 0, 0, 0, 0, -111, 1, 0, 0,128, 1, 0, 0, 18, 0, 0, 0, 36, 3, 0, 0, 0, 0, 0, 0,110, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 0, 0, 0, 0,110, 1, 0, 0, 18, 0, 0, 0, 36, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,128, 1, 37, 3,111, 1, 19, 3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 96, 77,253, 24, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 6, 0, 0,128, 7, 0, 0, - 0, 0, 0, 0, 36, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 1, 37, 3, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 33, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,240,135,146, 22, 1, 0, 0, 0, 48,196, 37, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -240,135,146, 22, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,240,164, 37, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 32, 34, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101, -120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101, -120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220,255,110, 1, 36, 0, 0, 0, 0, 0, 0, 0, 38, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,240,164, 37, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -128,166, 37, 3, 1, 0, 0, 0,240,135,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,135,255, 76, 1, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -128,166, 37, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 16,168, 37, 3, 1, 0, 0, 0,240,164, 37, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,108, 97,121,101,114,115, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,108, 97,121,101,114,115, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111,255, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 16,168, 37, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -160,169, 37, 3, 1, 0, 0, 0,128,166, 37, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,165,254, 76, 1,178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -160,169, 37, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 48,171, 37, 3, 1, 0, 0, 0, 16,168, 37, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95, 97,110,116,105, 97,108,105, - 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95, 97,110,116,105, 97,108,105, - 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65,110,116,105, 45, 65,108,105, 97,115,105,110,103, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,254, 76, 1, 58, 0, 20, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 48,171, 37, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -192,172, 37, 3, 1, 0, 0, 0,160,169, 37, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,213,253, 76, 1,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -192,172, 37, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 80,174, 37, 3, 1, 0, 0, 0, 48,171, 37, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,111,117,116,112,117,116, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,111,117,116,112,117,116, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,253, 76, 1,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 80,174, 37, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -224,175, 37, 3, 1, 0, 0, 0,192,172, 37, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 60,253, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -224,175, 37, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,112,177, 37, 3, 1, 0, 0, 0, 80,174, 37, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,112,111,115,116, 95,112,114, -111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,112,111,115,116, 95,112,114, -111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,111,115,116, 32, 80,114,111, 99,101,115,115,105,110,103, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36,253, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,112,177, 37, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 0,179, 37, 3, 1, 0, 0, 0,224,175, 37, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 12,253, 76, 1, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 0,179, 37, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,144,180, 37, 3, 1, 0, 0, 0,112,177, 37, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,117,110,105,116, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,117,110,105,116, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85,110,105,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,244,252, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,144,180, 37, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 32,182, 37, 3, 1, 0, 0, 0, 0,179, 37, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95,107,101,121,105,110,103, 95,115,101,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95,107,101,121,105,110,103, 95,115,101,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 75,101,121,105,110,103, 32, 83,101,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,220,252, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 32,182, 37, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,176,183, 37, 3, 1, 0, 0, 0,144,180, 37, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,112,104,121,115,105, 99,115, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,112,104,121,115,105, 99,115, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71,114, 97,118,105,116,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,252, 76, 1, 36, 0, 20, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,176,183, 37, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 64,185, 37, 3, 1, 0, 0, 0, 32,182, 37, 3, 1, 0, 0, 0, 64, 47,243, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,135,255,110, 1, 61, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 64,185, 37, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,208,186, 37, 3, 1, 0, 0, 0,176,183, 37, 3, 1, 0, 0, 0, -192, 34,243, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, + 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 88, 6, + 26, 0, 88, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 87, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 88, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0, 96, 42,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +240, 40,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111,255,110, 1, 0, 0, 0, 0, 0, 0, 4, 0, 6, 0, - 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,208,186, 37, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 96,188, 37, 3, 1, 0, 0, 0, 64,185, 37, 3, 1, 0, 0, 0,128,241,242, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 87, 6, 0, 0, 26, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 88, 6, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 43,190, 2, 0, 0, 0, 0, + 68, 65, 84, 65,248, 2, 0, 0,208, 43,190, 2, 0, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,213,108, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0,128, 63, 0, 0,140, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,213,108, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65,161, 14,106, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 91,138, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,128, 63, 0, 0,140, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,213,108, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,165,254,110, 1,178, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52,149,147, 58, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 96,188, 37, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,240,189, 37, 3, 1, 0, 0, 0,208,186, 37, 3, 1, 0, 0, 0, -112,108,242, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108, -105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108, -105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65,110,116,105, 45, 65,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,254,110, 1, 58, 0, 20, 0, 0, 0, 0, 0, 6, 0, - 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,240,189, 37, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -128,191, 37, 3, 1, 0, 0, 0, 96,188, 37, 3, 1, 0, 0, 0,160, 93,243, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, 16, 47,190, 2, 0, 0, 0, 0, +157, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 39,190, 2, 0, 0, 0, 0,240, 40,190, 2, 0, 0, 0, 0, + 96, 42,190, 2, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, +176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,112, 48,190, 2, 0, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, +160, 66,190, 2, 0, 0, 0, 0, 32, 36,190, 2, 0, 0, 0, 0,192,230,189, 2, 0, 0, 0, 0, 96,230,189, 2, 0, 0, 0, 0, +160,229,189, 2, 0, 0, 0, 0, 32,231,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 0, 0,128, 7, 0, 0, + 69, 3, 0, 0, 21, 4, 0, 0, 3, 3,128, 1,209, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 52,190, 2, 0, 0, 0, 0, 64, 65,190, 2, 0, 0, 0, 0, 80, 49,190, 2, 0, 0, 0, 0,192, 50,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,213,253,110, 1,102, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0, 80, 49,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,192, 50,190, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,163, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,192, 67, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 66, 67, 0, 0,200, 65, + 0, 0, 66, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,128, 1, + 26, 0,128, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 6, 0, 0,128, 7, 0, 0,252, 3, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +128, 1, 26, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -128,191, 37, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 16,193, 37, 3, 1, 0, 0, 0,240,189, 37, 3, 1, 0, 0, 0, -128, 98,243, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, + 68, 65, 84, 65, 40, 1, 0, 0,192, 50,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 80, 49,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,131, 67, 0, 0,228,194, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,183, 67, + 0, 0, 37,195, 0, 0, 0, 0,111, 1, 0, 0,128, 1, 0, 0, 18, 0, 0, 0,182, 0, 0, 0, 0, 0, 0, 0,110, 1, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,110, 1, 0, 0, 18, 0, 0, 0,182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 18, 0, 0, 0, 2, 0, 3, 3, 0, 0, 0, 4, 6, 0,128, 1, +183, 0,111, 1,165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 6, 0, 0,128, 7, 0, 0, 69, 3, 0, 0,251, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +128, 1,183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0, 48, 52,190, 2, 0, 0, 0, 0,166, 0, 0, 0, 1, 0, 0, 0,224, 57,190, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,253,110, 1,105, 0, 0, 0, 0, 0, 0, 0, 6, 0, - 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 16,193, 37, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -160,194, 37, 3, 1, 0, 0, 0,128,191, 37, 3, 1, 0, 0, 0, 64,105,243, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 53,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 60,253,110, 1, 0, 0, 0, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 68, 65, 84, 65, 16, 0, 0, 0,160, 53,190, 2, 0, 0, 0, 0,218, 0, 0, 0, 1, 0, 0, 0, 13, 0, 0, 0, 13, 0, 0, 0, +240, 53,190, 2, 0, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0,240, 53,190, 2, 0, 0, 0, 0,217, 0, 0, 0, 13, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 64, 85,192, 2, 0, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0, 64, 85,192, 2, 0, 0, 0, 0, + 20, 0, 0, 0, 1, 0, 1, 0, 64, 85,192, 2, 0, 0, 0, 0, 21, 0, 1, 0, 1, 0, 1, 0, 64, 85,192, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 1, 0,160,100,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,144,113,192, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 1, 0,176,163,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,240,123,192, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 1, 0, 80,145,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 16,119,192, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 1, 0, 16, 96,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,176,108,192, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 1, 0, 48, 95,192, 2, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0, 55,190, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,112, 56,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 67, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 55, 0, 0, 67, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194, 0, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,195, 0, 26, 0,195, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 4, 0, 0,247, 4, 0, 0, 69, 2, 0, 0, 94, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195, 0, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -160,194, 37, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 48,196, 37, 3, 1, 0, 0, 0, 16,193, 37, 3, 1, 0, 0, 0, - 32,107,243, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112, -114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112, -114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,111,115,116, 32, 80,114,111, 99,101,115,115,105,110,103, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,112, 56,190, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,150, 67, + 0,192,116,196, 0, 0, 0, 0, 0, 0, 0, 0,205, 85,150, 67,223,204, 35,196, 26, 85,207,195, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194, 0, 0, 0, + 0, 0, 0, 0,155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, + 0, 0, 0, 0, 1, 0, 3, 0, 2, 0, 0, 4, 6, 0,195, 0,156, 0,195, 0,156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 4, 0, 0,247, 4, 0, 0, 95, 2, 0, 0,250, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195, 0,156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36,253,110, 1, 0, 0, 0, 0, 0, 0, 4, 0, 6, 0, - 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0,224, 57,190, 2, 0, 0, 0, 0, +162, 0, 0, 0, 1, 0, 0, 0, 64, 65,190, 2, 0, 0, 0, 0, 48, 52,190, 2, 0, 0, 0, 0, 0, 55,190, 2, 0, 0, 0, 0, +112, 56,190, 2, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 48,196, 37, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,160,194, 37, 3, 1, 0, 0, 0,128,109,243, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 12,253,110, 1, 0, 0, 20, 0, 0, 0, 4, 0, 7, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 32, 59,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +144, 60,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 0,138, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, + 4, 0, 12, 4, 10, 0, 20, 1, 26, 0, 20, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0, -192,197, 37, 3, 1, 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0,240,204, 37, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,144, 60,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 32, 59,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0,224,224,112, 29, 1, 0, 0, 0, -255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0,199, 37, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 96,200, 37, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,138, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 1, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 1, 26, 0, 20, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, 26, 0, 0, 0, 80, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 55, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 96,200, 37, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,199, 37, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 62,190, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, 0, 62,190, 2, 0, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, +103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0,128, 63, +103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65, +237,122,111, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,128, 63, +103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +100, 32,222, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, 26, 0, 0, 0, 80, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 55, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,192,201, 37, 3, 1, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0,192,201, 37, 3, 1, 0, 0, 0, -156, 0, 0, 0, 1, 0, 0, 0,103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128, -226,215,163,188, 0, 0, 0,128, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32,193, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32, 65, 0, 0,128, 63,103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, -184,175, 31, 65, 0, 0, 32, 65,237,122,111, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,161, 14,106, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, - 98,127,249, 67,129,255, 71, 66, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32,193, 0, 0,128, 63,103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, -184,175, 31, 65, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, + 64, 65,190, 2, 0, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 57,190, 2, 0, 0, 0, 0, + 32, 59,190, 2, 0, 0, 0, 0,144, 60,190, 2, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,100, 32,222, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 1, 0, 0,240,204, 37, 3, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192,197, 37, 3, 1, 0, 0, 0, 0,199, 37, 3, 1, 0, 0, 0, 96,200, 37, 3, 1, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,194,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, 7, 0,176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, -159, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, - 80,206, 37, 3, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 64,218, 37, 3, 1, 0, 0, 0, 80,132,146, 22, 1, 0, 0, 0, -112,117,146, 22, 1, 0, 0, 0, 48,121,146, 22, 1, 0, 0, 0,144,121,146, 22, 1, 0, 0, 0,176,119,146, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 5, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 15, 15, 0, 6, 84, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0,240, 2, 15, 3, 1, 0, 0, 0,240,209, 37, 3, 1, 0, 0, 0,224,216, 37, 3, 1, 0, 0, 0, - 48,207, 37, 3, 1, 0, 0, 0,144,208, 37, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, 48,251, 24, 1, 0, 0, 0,144, 12,251, 24, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 48,207, 37, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,144,208, 37, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,192, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 5, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 0, 6, 26, 0, 0, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, + 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,160, 66,190, 2, 0, 0, 0, 0, +194, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112, 48,190, 2, 0, 0, 0, 0,128,231,189, 2, 0, 0, 0, 0, + 64,229,189, 2, 0, 0, 0, 0, 96,230,189, 2, 0, 0, 0, 0,224,231,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,255, 5, 0, 0, 85, 0, 0, 0, 21, 4, 0, 0, 1, 1, 0, 6,193, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,160,106,190, 2, 0, 0, 0, 0,224,110,190, 2, 0, 0, 0, 0,128, 67,190, 2, 0, 0, 0, 0, +240,101,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,128, 67,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +240, 68,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 0,192, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,176, 4, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,144,208, 37, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,207, 37, 3, 1, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, - 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,255, 5, 0, 0, - 18, 0, 0, 0, 57, 0, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, - 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0, 0, 6, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 5, 0, 0, 26, 0, 0, 0, 83, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,208, 3, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0,240,209, 37, 3, 1, 0, 0, 0, -172, 0, 0, 0, 1, 0, 0, 0,224,216, 37, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,240,210, 37, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 80,212, 37, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,203, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 6, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 88, 6, 26, 0, 88, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80,212, 37, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,210, 37, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 6, 0, 0, 26, 0, 0, 0, 55, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 6, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,176,213, 37, 3, 1, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0,176,213, 37, 3, 1, 0, 0, 0, -156, 0, 0, 0, 1, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,213,108, 66, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128, -226,215,163,188, 0, 0, 0,128, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32,193, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32, 65, 0, 0,128, 63, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,213,108, 66, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, -184,175, 31, 65, 0, 0, 32, 65,161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 91,138, 60, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, - 98,127,249, 67,129,255, 71, 66, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32,193, 0, 0,128, 63, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,213,108, 66, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, -184,175, 31, 65, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 52,149,147, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 1, 0, 0,224,216, 37, 3, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -240,209, 37, 3, 1, 0, 0, 0,240,210, 37, 3, 1, 0, 0, 0, 80,212, 37, 3, 1, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,194,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, -159, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, - 64,218, 37, 3, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,240,235, 37, 3, 1, 0, 0, 0, 80,206, 37, 3, 1, 0, 0, 0, -112,120,146, 22, 1, 0, 0, 0, 16,120,146, 22, 1, 0, 0, 0, 80,119,146, 22, 1, 0, 0, 0,208,120,146, 22, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 0, 0,128, 7, 0, 0, 69, 3, 0, 0, 21, 4, 0, 0, 3, 3,128, 1,209, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 15, 3, 1, 0, 0, 0,224,221, 37, 3, 1, 0, 0, 0,144,234, 37, 3, 1, 0, 0, 0, - 32,219, 37, 3, 1, 0, 0, 0,128,220, 37, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -224,164,255, 24, 1, 0, 0, 0, 80,217,253, 24, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 32,219, 37, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,128,220, 37, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,163, 67, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,192, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127, 1, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 66, 67, 0, 0,200, 65, 0, 0, 66, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,128, 1, 26, 0,128, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 0, 0,128, 7, 0, 0,252, 3, 0, 0, 21, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 1, 26, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 16, 2, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,128,220, 37, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,219, 37, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0,128,131, 67, - 0, 0,228,194, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,183, 67, 0, 0, 37,195, 0, 0, 0, 0,111, 1, 0, 0,128, 1, 0, 0, - 18, 0, 0, 0,182, 0, 0, 0, 0, 0, 0, 0,110, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,110, 1, 0, 0, - 18, 0, 0, 0,182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 18, 0, 0, 0, 2, 0, 3, 3, 0, 0, 0, 4, 6, 0,128, 1,183, 0,111, 1,165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 0, 0,128, 7, 0, 0, 69, 3, 0, 0,251, 3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 1,183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48, 1, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,224,221, 37, 3, 1, 0, 0, 0, -166, 0, 0, 0, 1, 0, 0, 0, 96,227, 37, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,130,251, 24, 1, 0, 0, 0, -192,130,251, 24, 1, 0, 0, 0, 64,223, 37, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65, 16, 0, 0, 0, 64,223, 37, 3, 1, 0, 0, 0, -218, 0, 0, 0, 1, 0, 0, 0, 13, 0, 0, 0, 13, 0, 0, 0,144,223, 37, 3, 1, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0, -144,223, 37, 3, 1, 0, 0, 0,217, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 48,186,129, 3, 1, 0, 0, 0, - 19, 0, 0, 0, 1, 0, 1, 0, 48,186,129, 3, 1, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0, 48,186,129, 3, 1, 0, 0, 0, - 21, 0, 1, 0, 1, 0, 1, 0, 48,186,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,128,242, 39, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0, 48,200,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,112,253, 39, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0, 96,246, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,112,251, 39, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0, 48,206,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48,238, 39, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0, 48,194,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 96,237, 39, 3, 1, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,160,224, 37, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0,226, 37, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 55, 0, 0, 67, 67, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, - 0,128,137, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,195, 0, - 26, 0,195, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 53, 4, 0, 0,247, 4, 0, 0, 69, 2, 0, 0, 94, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -195, 0, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 0,226, 37, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -160,224, 37, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,150, 67, 0,192,116,196, 0, 0, 0, 0, 0, 0, 0, 0,205, 85,150, 67, -223,204, 35,196, 26, 85,207,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 0,155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, 0, 1, 0, 3, 0, 2, 0, 0, 4, 6, 0,195, 0, -156, 0,195, 0,156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 53, 4, 0, 0,247, 4, 0, 0, 95, 2, 0, 0,250, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -195, 0,156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 1, 0, 0, 96,227, 37, 3, 1, 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0,144,234, 37, 3, 1, 0, 0, 0, -224,221, 37, 3, 1, 0, 0, 0,160,224, 37, 3, 1, 0, 0, 0, 0,226, 37, 3, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -160,228, 37, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0,230, 37, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,138, 67, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 1, 26, 0, 20, 1, 26, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 26, 0, 0, 0, 1, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 0,230, 37, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,228, 37, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, - 26, 0, 0, 0, 80, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 55, 4, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,231, 37, 3, 1, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, - 96,231, 37, 3, 1, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0,103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, - 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0,128, 63,103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, - 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65,237,122,111, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, - 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,128, 63,103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, - 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 32,222, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,144,234, 37, 3, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 96,227, 37, 3, 1, 0, 0, 0,160,228, 37, 3, 1, 0, 0, 0, 0,230, 37, 3, 1, 0, 0, 0, - 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,194,129, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, - 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,160, 0, 0, 0,240,235, 37, 3, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 64,218, 37, 3, 1, 0, 0, 0, 48,121,146, 22, 1, 0, 0, 0,240,118,146, 22, 1, 0, 0, 0, 16,120,146, 22, 1, 0, 0, 0, -144,121,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 5, 0, 0, 85, 0, 0, 0, 21, 4, 0, 0, - 1, 1, 0, 6,193, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 5, 15, 3, 1, 0, 0, 0,160, 18, 38, 3, 1, 0, 0, 0, -192, 22, 38, 3, 1, 0, 0, 0,208,236, 37, 3, 1, 0, 0, 0, 16, 14, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 32, 44,255, 24, 1, 0, 0, 0, 96,216,252, 24, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -208,236, 37, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 48,238, 37, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,192, 68, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,255, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 0, 6, 26, 0, 0, 6, 26, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 5, 0, 0, - 85, 0, 0, 0,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 26, 0, 0, 0, 1, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176, 13, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 48,238, 37, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,176,242, 37, 3, 1, 0, 0, 0,208,236, 37, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 15, 67, 0,128, 71,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0,128, 71,196, 0, 0, 0, 0, -143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 47, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 47, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 48, 3,143, 0, 30, 3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, 0, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,167, 3, 0, 0, 5, 0, - 3, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 16, 10, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,144,239, 37, 3, 1, 0, 0, 0, 32,241, 37, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -144,239, 37, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 32,241, 37, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108, 95,115, -104,101,108,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108, 95,115, -104,101,108,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,111,111,108, 32, 83,104,101,108,102, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,196,255,143, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 32,241, 37, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,144,239, 37, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,111, 98,106,101, 99,116,109,111,100,101, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,111, 98,106,101, 99,116,109,111,100,101, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 79, 98,106,101, 99,116, 32, 84,111,111,108,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,223,253,143, 0,205, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, + 4, 0, 12, 4, 10, 0, 0, 6, 26, 0, 0, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 5, 0, 0, 85, 0, 0, 0,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -176,242, 37, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,160,245, 37, 3, 1, 0, 0, 0, 48,238, 37, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0, -143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 5, 0, 0, -111, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, - 34, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,224, 11, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 16,244, 37, 3, 1, 0, 0, 0, 16,244, 37, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 16,244, 37, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,108, 97,115,116, 95,111, -112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,108, 97,115,116, 95,111, -112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,101,108,101,116,101, 32, 83, 99,114,101,101,110, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,240, 68,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +160, 73,190, 2, 0, 0, 0, 0,128, 67,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0,128, 71,196, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 15, 67, 0,128, 71,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 47, 3, 0, 0, + 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 47, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, + 18, 0, 0, 0, 6, 0,160, 0, 48, 3,143, 0, 30, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111, 0, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,167, 3, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,255,144, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,160, 73,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +176, 76,190, 2, 0, 0, 0, 0,240, 68,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, + 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, + 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, + 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 5, 0, 0,111, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,160,245, 37, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 96, 0, 38, 3, 1, 0, 0, 0,176,242, 37, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,192, 77,196, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176, 76,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +224, 87,190, 2, 0, 0, 0, 0,160, 73,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,192, 77,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,192, 35,196, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,160, 2, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0,161, 2,163, 0,143, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 5, 0, 0,255, 5, 0, 0,111, 0, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 80, 7, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,247, 37, 3, 1, 0, 0, 0, -208,254, 37, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 0,247, 37, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -144,248, 37, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,111, 98,106,101, 99,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,111, 98,106,101, 99,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 84,114, 97,110,115,102,111,114,109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128,254,163, 0,104, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -144,248, 37, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 32,250, 37, 3, 1, 0, 0, 0, 0,247, 37, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,103,112,101,110, 99,105, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,103,112,101,110, 99,105, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71,114,101, 97,115,101, 32, 80,101,110, 99,105,108, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,171,252,163, 0, 58, 0, 0, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 32,250, 37, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -176,251, 37, 3, 1, 0, 0, 0,144,248, 37, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100,118,105,101,119, 95,112,114,111,112,101,114,116,105,101,115, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100,118,105,101,119, 95,112,114,111,112,101,114,116,105,101,115, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 86,105,101,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 45,253,163, 0, 59, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -176,251, 37, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 64,253, 37, 3, 1, 0, 0, 0, 32,250, 37, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100,118,105,101,119, - 95,100,105,115,112,108, 97,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100,118,105,101,119, - 95,100,105,115,112,108, 97,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,115,112,108, 97,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18,252,163, 0, 3, 1, 0, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 64,253, 37, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -208,254, 37, 3, 1, 0, 0, 0,176,251, 37, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 98, 97, 99,107,103,114,111,117,110,100, 95,105,109, 97,103,101, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 98, 97, 99,107,103,114,111,117,110,100, 95,105,109, 97,103,101, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66, 97, 99,107,103,114,111,117,110,100, 32, 73,109, 97,103,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,253,252,163, 0, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -208,254, 37, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,253, 37, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,114, 97,110,115,102, -111,114,109, 95,111,114,105,101,110,116, 97,116,105,111,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,114, 97,110,115,102, -111,114,109, 95,111,114,105,101,110,116, 97,116,105,111,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,114, 97,110,115,102,111,114,109, 32, 79,114,105,101,110,116, - 97,116,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205,252,163, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 96, 0, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -240, 4, 38, 3, 1, 0, 0, 0,160,245, 37, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,224, 87,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +144, 92,190, 2, 0, 0, 0, 0,176, 76,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 2, 0, 0,111, 0, 0, 0, 66, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,212, 1, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, 6, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192, 1, 38, 3, 1, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0,192, 1, 38, 3, 1, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 80, 89,190, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, 80, 89,190, 2, 0, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, 173,161,136, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 55,224, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0,128,111, 18,131,187, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0,128,174, 2, 19, 51,255,255,127,191, 0, 0, 0, 0, @@ -8337,17 +5508,17 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -240, 4, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,128, 9, 38, 3, 1, 0, 0, 0, 96, 0, 38, 3, 1, 0, 0, 0, +144, 92,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 64, 97,190, 2, 0, 0, 0, 0,224, 87,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 2, 0, 0, 67, 2, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,211, 1, 0, 0, 0, 0, - 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112, 6, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 6, 38, 3, 1, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, - 80, 6, 38, 3, 1, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0,173,161,136, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94,190, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, + 0, 94,190, 2, 0, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0,173,161,136, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45,178,224, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0,128,111, 18,131,187, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, @@ -8371,17 +5542,17 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,128, 9, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 16, 14, 38, 3, 1, 0, 0, 0,240, 4, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 64, 97,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +240,101,190, 2, 0, 0, 0, 0,144, 92,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0,255, 5, 0, 0,111, 0, 0, 0, 66, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,212, 1, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, 6, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -224, 10, 38, 3, 1, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0,224, 10, 38, 3, 1, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +176, 98,190, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0,176, 98,190, 2, 0, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, 173,161,136, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 55,224, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0,128,111, 18,131,187, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128,165, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128,165, 0, 0, 0, 0, 0, 0, 0, 0, @@ -8406,17 +5577,17 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 16, 14, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 9, 38, 3, 1, 0, 0, 0, +240,101,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 97,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0,255, 5, 0, 0, 67, 2, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,211, 1, 0, 0, 0, 0, - 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112, 6, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112, 15, 38, 3, 1, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, -112, 15, 38, 3, 1, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0,209,255,139, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,103,190, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, + 96,103,190, 2, 0, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0,209,255,139, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 59,230, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,154, 65,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128, 72, 1, 77,190, 0, 0, 0,128,221,149, 47, 63, 86,126,162,190, 8,165, 39, 63, 0, 0, 0, 0, 51, 70, 58, 63,225,251,159, 62,149, 84, 28,191, 0, 0, 0, 0,192, 56, 49,188, 55, 53,101, 63, 52,247,227, 62, 0, 0, 0, 0, @@ -8440,17 +5611,17 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,160, 18, 38, 3, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, -192, 22, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,160,106,190, 2, 0, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, +224,110,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,194,129, 3, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0,255,255, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 0, 20, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 96, 21, 38, 3, 1, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0, 0,108,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,112,109,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, @@ -8460,8 +5631,8 @@ char datatoc_B_blend[]= { 152, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 96, 21, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 20, 38, 3, 1, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, + 68, 65, 84, 65, 40, 1, 0, 0,112,109,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,108,190, 2, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0,152, 4, @@ -8470,784 +5641,770 @@ char datatoc_B_blend[]= { 152, 4,122, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,200, 0, 0, 0,192, 22, 38, 3, 1, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -160, 18, 38, 3, 1, 0, 0, 0, 0, 20, 38, 3, 1, 0, 0, 0, 96, 21, 38, 3, 1, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,200, 0, 0, 0,224,110,190, 2, 0, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +160,106,190, 2, 0, 0, 0, 0, 0,108,190, 2, 0, 0, 0, 0,112,109,190, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, - 83, 78, 0, 0,208, 0, 0, 0, 64, 24, 38, 3, 1, 0, 0, 0,190, 0, 0, 0, 1, 0, 0, 0,112,219, 38, 3, 1, 0, 0, 0, - 96,116,146, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 83, 99,114,105,112,116, + 83, 78, 0, 0,208, 0, 0, 0,128,112,190, 2, 0, 0, 0, 0,190, 0, 0, 0, 1, 0, 0, 0, 32, 59,191, 2, 0, 0, 0, 0, +176,226,189, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 83, 99,114,105,112,116, 105,110,103, 0,103, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80, 25, 38, 3, 1, 0, 0, 0, 48, 30, 38, 3, 1, 0, 0, 0,144, 30, 38, 3, 1, 0, 0, 0,112, 38, 38, 3, 1, 0, 0, 0, -208, 38, 38, 3, 1, 0, 0, 0,240,195, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48,186,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,155,180, 21, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 80, 25, 38, 3, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, -176, 25, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0,176, 25, 38, 3, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 16, 26, 38, 3, 1, 0, 0, 0, - 80, 25, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, - 16, 26, 38, 3, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,112, 26, 38, 3, 1, 0, 0, 0,176, 25, 38, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 49, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,112, 26, 38, 3, 1, 0, 0, 0, -191, 0, 0, 0, 1, 0, 0, 0,208, 26, 38, 3, 1, 0, 0, 0, 16, 26, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,208, 26, 38, 3, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, - 48, 27, 38, 3, 1, 0, 0, 0,112, 26, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 4, 1, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0, 48, 27, 38, 3, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,144, 27, 38, 3, 1, 0, 0, 0, -208, 26, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, -144, 27, 38, 3, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,240, 27, 38, 3, 1, 0, 0, 0, 48, 27, 38, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,240, 27, 38, 3, 1, 0, 0, 0, -191, 0, 0, 0, 1, 0, 0, 0, 80, 28, 38, 3, 1, 0, 0, 0,144, 27, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -240, 5, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 80, 28, 38, 3, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, -176, 28, 38, 3, 1, 0, 0, 0,240, 27, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 1, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0,176, 28, 38, 3, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 16, 29, 38, 3, 1, 0, 0, 0, - 80, 28, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,160, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, - 16, 29, 38, 3, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,112, 29, 38, 3, 1, 0, 0, 0,176, 28, 38, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,240, 2, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,112, 29, 38, 3, 1, 0, 0, 0, -191, 0, 0, 0, 1, 0, 0, 0,208, 29, 38, 3, 1, 0, 0, 0, 16, 29, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -240, 2,160, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,208, 29, 38, 3, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, - 48, 30, 38, 3, 1, 0, 0, 0,112, 29, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 4, 3, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0, 48, 30, 38, 3, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208, 29, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 4, 3, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -144, 30, 38, 3, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,240, 30, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176, 25, 38, 3, 1, 0, 0, 0, 16, 26, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -240, 30, 38, 3, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 80, 31, 38, 3, 1, 0, 0, 0,144, 30, 38, 3, 1, 0, 0, 0, -176, 25, 38, 3, 1, 0, 0, 0,208, 26, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 80, 31, 38, 3, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,176, 31, 38, 3, 1, 0, 0, 0,240, 30, 38, 3, 1, 0, 0, 0, - 16, 26, 38, 3, 1, 0, 0, 0, 48, 27, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -176, 31, 38, 3, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 16, 32, 38, 3, 1, 0, 0, 0, 80, 31, 38, 3, 1, 0, 0, 0, -208, 26, 38, 3, 1, 0, 0, 0, 48, 27, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 16, 32, 38, 3, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,112, 32, 38, 3, 1, 0, 0, 0,176, 31, 38, 3, 1, 0, 0, 0, - 48, 27, 38, 3, 1, 0, 0, 0,144, 27, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -112, 32, 38, 3, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,208, 32, 38, 3, 1, 0, 0, 0, 16, 32, 38, 3, 1, 0, 0, 0, -208, 26, 38, 3, 1, 0, 0, 0,144, 27, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -208, 32, 38, 3, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 48, 33, 38, 3, 1, 0, 0, 0,112, 32, 38, 3, 1, 0, 0, 0, -112, 26, 38, 3, 1, 0, 0, 0,240, 27, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 48, 33, 38, 3, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,144, 33, 38, 3, 1, 0, 0, 0,208, 32, 38, 3, 1, 0, 0, 0, - 80, 25, 38, 3, 1, 0, 0, 0, 80, 28, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -144, 33, 38, 3, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,240, 33, 38, 3, 1, 0, 0, 0, 48, 33, 38, 3, 1, 0, 0, 0, -208, 26, 38, 3, 1, 0, 0, 0, 80, 28, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -240, 33, 38, 3, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 80, 34, 38, 3, 1, 0, 0, 0,144, 33, 38, 3, 1, 0, 0, 0, -144, 27, 38, 3, 1, 0, 0, 0,176, 28, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 80, 34, 38, 3, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,176, 34, 38, 3, 1, 0, 0, 0,240, 33, 38, 3, 1, 0, 0, 0, -240, 27, 38, 3, 1, 0, 0, 0,176, 28, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -176, 34, 38, 3, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 16, 35, 38, 3, 1, 0, 0, 0, 80, 34, 38, 3, 1, 0, 0, 0, - 80, 28, 38, 3, 1, 0, 0, 0,176, 28, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 16, 35, 38, 3, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,112, 35, 38, 3, 1, 0, 0, 0,176, 34, 38, 3, 1, 0, 0, 0, - 80, 25, 38, 3, 1, 0, 0, 0, 16, 29, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -112, 35, 38, 3, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,208, 35, 38, 3, 1, 0, 0, 0, 16, 35, 38, 3, 1, 0, 0, 0, -240, 27, 38, 3, 1, 0, 0, 0, 16, 29, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -208, 35, 38, 3, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 48, 36, 38, 3, 1, 0, 0, 0,112, 35, 38, 3, 1, 0, 0, 0, - 80, 28, 38, 3, 1, 0, 0, 0,112, 29, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 48, 36, 38, 3, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,144, 36, 38, 3, 1, 0, 0, 0,208, 35, 38, 3, 1, 0, 0, 0, -176, 28, 38, 3, 1, 0, 0, 0,112, 29, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -144, 36, 38, 3, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,240, 36, 38, 3, 1, 0, 0, 0, 48, 36, 38, 3, 1, 0, 0, 0, - 16, 29, 38, 3, 1, 0, 0, 0,112, 29, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -240, 36, 38, 3, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 80, 37, 38, 3, 1, 0, 0, 0,144, 36, 38, 3, 1, 0, 0, 0, -240, 27, 38, 3, 1, 0, 0, 0,208, 29, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 80, 37, 38, 3, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,176, 37, 38, 3, 1, 0, 0, 0,240, 36, 38, 3, 1, 0, 0, 0, -144, 27, 38, 3, 1, 0, 0, 0,208, 29, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -176, 37, 38, 3, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 16, 38, 38, 3, 1, 0, 0, 0, 80, 37, 38, 3, 1, 0, 0, 0, - 48, 27, 38, 3, 1, 0, 0, 0, 48, 30, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 16, 38, 38, 3, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,112, 38, 38, 3, 1, 0, 0, 0,176, 37, 38, 3, 1, 0, 0, 0, -112, 26, 38, 3, 1, 0, 0, 0, 48, 30, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -112, 38, 38, 3, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 38, 38, 3, 1, 0, 0, 0, -208, 29, 38, 3, 1, 0, 0, 0, 48, 30, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, -208, 38, 38, 3, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,112, 42, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208, 26, 38, 3, 1, 0, 0, 0,176, 25, 38, 3, 1, 0, 0, 0, 16, 26, 38, 3, 1, 0, 0, 0, 48, 27, 38, 3, 1, 0, 0, 0, +144,113,190, 2, 0, 0, 0, 0,112,118,190, 2, 0, 0, 0, 0,208,118,190, 2, 0, 0, 0, 0, 0,128,190, 2, 0, 0, 0, 0, +112,128,190, 2, 0, 0, 0, 0,224, 34,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 64, 85,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,144,113,190, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, +240,113,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0,240,113,190, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 80,114,190, 2, 0, 0, 0, 0, +144,113,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, + 80,114,190, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,176,114,190, 2, 0, 0, 0, 0,240,113,190, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 49, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,176,114,190, 2, 0, 0, 0, 0, +191, 0, 0, 0, 1, 0, 0, 0, 16,115,190, 2, 0, 0, 0, 0, 80,114,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +128, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 16,115,190, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, +112,115,190, 2, 0, 0, 0, 0,176,114,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 4, 1, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0,112,115,190, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,208,115,190, 2, 0, 0, 0, 0, + 16,115,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, +208,115,190, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 48,116,190, 2, 0, 0, 0, 0,112,115,190, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 48,116,190, 2, 0, 0, 0, 0, +191, 0, 0, 0, 1, 0, 0, 0,144,116,190, 2, 0, 0, 0, 0,208,115,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +240, 5, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,144,116,190, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, +240,116,190, 2, 0, 0, 0, 0, 48,116,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 1, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0,240,116,190, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 80,117,190, 2, 0, 0, 0, 0, +144,116,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,160, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, + 80,117,190, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,176,117,190, 2, 0, 0, 0, 0,240,116,190, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,240, 2, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,176,117,190, 2, 0, 0, 0, 0, +191, 0, 0, 0, 1, 0, 0, 0, 16,118,190, 2, 0, 0, 0, 0, 80,117,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +240, 2,160, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 16,118,190, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, +112,118,190, 2, 0, 0, 0, 0,176,117,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 4, 3, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0,112,118,190, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16,118,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 4, 3, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +208,118,190, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 64,119,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +240,113,190, 2, 0, 0, 0, 0, 80,114,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 64,119,190, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,176,119,190, 2, 0, 0, 0, 0,208,118,190, 2, 0, 0, 0, 0, +240,113,190, 2, 0, 0, 0, 0, 16,115,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +176,119,190, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 32,120,190, 2, 0, 0, 0, 0, 64,119,190, 2, 0, 0, 0, 0, + 80,114,190, 2, 0, 0, 0, 0,112,115,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 32,120,190, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,144,120,190, 2, 0, 0, 0, 0,176,119,190, 2, 0, 0, 0, 0, + 16,115,190, 2, 0, 0, 0, 0,112,115,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +144,120,190, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0,121,190, 2, 0, 0, 0, 0, 32,120,190, 2, 0, 0, 0, 0, +112,115,190, 2, 0, 0, 0, 0,208,115,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 0,121,190, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,112,121,190, 2, 0, 0, 0, 0,144,120,190, 2, 0, 0, 0, 0, + 16,115,190, 2, 0, 0, 0, 0,208,115,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +112,121,190, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,224,121,190, 2, 0, 0, 0, 0, 0,121,190, 2, 0, 0, 0, 0, +176,114,190, 2, 0, 0, 0, 0, 48,116,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +224,121,190, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 80,122,190, 2, 0, 0, 0, 0,112,121,190, 2, 0, 0, 0, 0, +144,113,190, 2, 0, 0, 0, 0,144,116,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 80,122,190, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,192,122,190, 2, 0, 0, 0, 0,224,121,190, 2, 0, 0, 0, 0, + 16,115,190, 2, 0, 0, 0, 0,144,116,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +192,122,190, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 48,123,190, 2, 0, 0, 0, 0, 80,122,190, 2, 0, 0, 0, 0, +208,115,190, 2, 0, 0, 0, 0,240,116,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 48,123,190, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,160,123,190, 2, 0, 0, 0, 0,192,122,190, 2, 0, 0, 0, 0, + 48,116,190, 2, 0, 0, 0, 0,240,116,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +160,123,190, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 16,124,190, 2, 0, 0, 0, 0, 48,123,190, 2, 0, 0, 0, 0, +144,116,190, 2, 0, 0, 0, 0,240,116,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 16,124,190, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,128,124,190, 2, 0, 0, 0, 0,160,123,190, 2, 0, 0, 0, 0, +144,113,190, 2, 0, 0, 0, 0, 80,117,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +128,124,190, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,240,124,190, 2, 0, 0, 0, 0, 16,124,190, 2, 0, 0, 0, 0, + 48,116,190, 2, 0, 0, 0, 0, 80,117,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +240,124,190, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 96,125,190, 2, 0, 0, 0, 0,128,124,190, 2, 0, 0, 0, 0, +144,116,190, 2, 0, 0, 0, 0,176,117,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 96,125,190, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,208,125,190, 2, 0, 0, 0, 0,240,124,190, 2, 0, 0, 0, 0, +240,116,190, 2, 0, 0, 0, 0,176,117,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +208,125,190, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 64,126,190, 2, 0, 0, 0, 0, 96,125,190, 2, 0, 0, 0, 0, + 80,117,190, 2, 0, 0, 0, 0,176,117,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 64,126,190, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,176,126,190, 2, 0, 0, 0, 0,208,125,190, 2, 0, 0, 0, 0, + 48,116,190, 2, 0, 0, 0, 0, 16,118,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +176,126,190, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 32,127,190, 2, 0, 0, 0, 0, 64,126,190, 2, 0, 0, 0, 0, +208,115,190, 2, 0, 0, 0, 0, 16,118,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 32,127,190, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,144,127,190, 2, 0, 0, 0, 0,176,126,190, 2, 0, 0, 0, 0, +112,115,190, 2, 0, 0, 0, 0,112,118,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +144,127,190, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0,128,190, 2, 0, 0, 0, 0, 32,127,190, 2, 0, 0, 0, 0, +176,114,190, 2, 0, 0, 0, 0,112,118,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 0,128,190, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,127,190, 2, 0, 0, 0, 0, + 16,118,190, 2, 0, 0, 0, 0,112,118,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, +112,128,190, 2, 0, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 48,132,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16,115,190, 2, 0, 0, 0, 0,240,113,190, 2, 0, 0, 0, 0, 80,114,190, 2, 0, 0, 0, 0,112,115,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 23, 4, 0, 0, 49, 4, 0, 0, 7, 7,129, 7, 27, 0, 1, 0, - 0, 0, 0, 0, 7, 0, 0, 0,240, 35, 15, 3, 1, 0, 0, 0,240,218, 38, 3, 1, 0, 0, 0,240,218, 38, 3, 1, 0, 0, 0, -176, 39, 38, 3, 1, 0, 0, 0, 16, 41, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208, 56, 40, 3, 1, 0, 0, 0,144,246,252, 24, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176, 39, 38, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 16, 41, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,161, 68, + 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 58,191, 2, 0, 0, 0, 0,144, 58,191, 2, 0, 0, 0, 0, + 80,129,190, 2, 0, 0, 0, 0,192,130,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80,129,190, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,192,130,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,161, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 32,240, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,129, 7, 26, 0,129, 7, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 23, 4, 0, 0, 48, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 7, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0,176, 37, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 16, 41, 38, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176, 39, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0,240,109, 69, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,192,130,190, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,129,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192, 0, 0, 0, 0,112, 7, 0, 0,129, 7, 0, 0, 18, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 18, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,129, 7, 7, 0,112, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 4, 0, 0, 49, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0,208, 36, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,112, 42, 38, 3, 1, 0, 0, 0, -194, 0, 0, 0, 1, 0, 0, 0,224, 95, 38, 3, 1, 0, 0, 0,208, 38, 38, 3, 1, 0, 0, 0,240, 27, 38, 3, 1, 0, 0, 0, -208, 29, 38, 3, 1, 0, 0, 0, 48, 30, 38, 3, 1, 0, 0, 0,112, 26, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 48,132,190, 2, 0, 0, 0, 0, +194, 0, 0, 0, 1, 0, 0, 0,144,187,190, 2, 0, 0, 0, 0,112,128,190, 2, 0, 0, 0, 0, 48,116,190, 2, 0, 0, 0, 0, + 16,118,190, 2, 0, 0, 0, 0,112,118,190, 2, 0, 0, 0, 0,176,114,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 5, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 4, 4,144, 1, 4, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 96, 32, 15, 3, 1, 0, 0, 0, 0, 82, 38, 3, 1, 0, 0, 0,128, 94, 38, 3, 1, 0, 0, 0, 80, 43, 38, 3, 1, 0, 0, 0, -176, 44, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,240, 36, 3, 1, 0, 0, 0, -112,245,252, 24, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80, 43, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -176, 44, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 67, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 80,173,190, 2, 0, 0, 0, 0, 48,186,190, 2, 0, 0, 0, 0, 16,133,190, 2, 0, 0, 0, 0, +128,134,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 16,133,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +128,134,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,200, 67, 0, 0, 0, 0, 0, 0,248, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,143, 1, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,144, 1, 31, 0,144, 1, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 5, 0, 0,128, 7, 0, 0,229, 2, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 1, 31, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 35, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176, 44, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 80, 43, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 67, 0, 0, 62,196, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,128,134,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16,133,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 67, 0, 0, 62,196, 0, 0, 0, 0, 0, 0, 0, 0,255,127,191, 67,255,191, 52,196, 0, 0, 0, 0,127, 1, 0, 0,144, 1, 0, 0, 18, 0, 0, 0,228, 2, 0, 0, 0, 0, 0, 0,126, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,126, 1, 0, 0, 18, 0, 0, 0,228, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, - 18, 0, 0, 4, 6, 0,144, 1,229, 2,127, 1,211, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 34, 16, 26, 1, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0,241, 5, 0, 0,128, 7, 0, 0, 0, 0, 0, 0,228, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 18, 0, 0, 4, 6, 0,144, 1,229, 2,127, 1,211, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,241, 5, 0, 0,128, 7, 0, 0, 0, 0, 0, 0,228, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 1,229, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 64, 33, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 46, 38, 3, 1, 0, 0, 0, -112, 80, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 16, 46, 38, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -160, 47, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 34, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 67,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0, 80,173,190, 2, 0, 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0, +224,178,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,220,255,126, 1, 36, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -160, 47, 38, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 48, 49, 38, 3, 1, 0, 0, 0, 16, 46, 38, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,144,174,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0,176,190, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0,242, 67, + 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,227, 1, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0,128,241, 67, 0, 0,208, 65, + 0,128,241, 67, 0, 0,208, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,228, 1, + 27, 0,228, 1, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +157, 5, 0, 0,128, 7, 0, 0, 85, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +228, 1, 27, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255, 76, 1, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0, 0,176,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,112,177,190, 2, 0, 0, 0, 0, +144,174,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 48, 49, 38, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -192, 50, 38, 3, 1, 0, 0, 0,160, 47, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 76, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,111,255, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +128, 7, 0, 0,128, 7, 0, 0,112, 0, 0, 0,235, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -192, 50, 38, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 80, 52, 38, 3, 1, 0, 0, 0, 48, 49, 38, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,100,105,109,101,110,115,105, -111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,100,105,109,101,110,115,105, -111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,112,177,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,176,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,122, 67, + 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,123, 1, 0, 0, 18, 0, 0, 0,227, 1, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,227, 1, 0, 0, 18, 0, 0, 0,123, 1, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, + 0,124,146, 72, 0, 0, 0, 66, 10,215, 35, 60, 0, 0,200, 66,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 8, 0,228, 1, +124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +157, 5, 0, 0,128, 7, 0, 0,112, 0, 0, 0,235, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +228, 1,124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,165,254, 76, 1,178, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,240, 0, 0, 0,224,178,190, 2, 0, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, 48,186,190, 2, 0, 0, 0, 0, + 80,173,190, 2, 0, 0, 0, 0,144,174,190, 2, 0, 0, 0, 0,112,177,190, 2, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 80, 52, 38, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -224, 53, 38, 3, 1, 0, 0, 0,192, 50, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 65,110,116,105, 45, 65,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 83,254, 76, 1, 58, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 16,180,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +128,181,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 0,138, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, + 4, 0, 12, 4, 10, 0, 20, 1, 26, 0, 20, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -224, 53, 38, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,112, 55, 38, 3, 1, 0, 0, 0, 80, 52, 38, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,115,104, 97,100,105,110,103, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,128,181,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16,180,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,213,253, 76, 1,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,112, 55, 38, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 0, 57, 38, 3, 1, 0, 0, 0,224, 53, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, 26, 0, 0, 0, 80, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 55, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 79,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +240,182,190, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0,240,182,190, 2, 0, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, +103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0,128, 63, +103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65, +237,122,111, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,128, 63, +103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 84,253, 76, 1,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +100, 32,222, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 0, 57, 38, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,144, 58, 38, 3, 1, 0, 0, 0,112, 55, 38, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,112,101,114,102,111,114,109, - 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,112,101,114,102,111,114,109, - 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,253, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,144, 58, 38, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 32, 60, 38, 3, 1, 0, 0, 0, 0, 57, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, + 48,186,190, 2, 0, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,178,190, 2, 0, 0, 0, 0, + 16,180,190, 2, 0, 0, 0, 0,128,181,190, 2, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, 7, 0,176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80,111,115,116, 32, 80,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, + 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,144,187,190, 2, 0, 0, 0, 0, +194, 0, 0, 0, 1, 0, 0, 0, 48,223,190, 2, 0, 0, 0, 0, 48,132,190, 2, 0, 0, 0, 0, 80,117,190, 2, 0, 0, 0, 0, +176,117,190, 2, 0, 0, 0, 0,240,116,190, 2, 0, 0, 0, 0, 48,116,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +241, 2, 0, 0,239, 5, 0, 0, 0, 0, 0, 0,159, 1, 0, 0, 18, 18,255, 2,160, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 80,191,190, 2, 0, 0, 0, 0, 32,222,190, 2, 0, 0, 0, 0,112,188,190, 2, 0, 0, 0, 0, +224,189,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,112,188,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +224,189,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0,192, 63, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0,224,189, 68, 0, 0,200, 65, 0,224,189, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, + 4, 0, 12, 4, 10, 0,255, 2, 26, 0,255, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,241, 2, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,255, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 36,253, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,224,189,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,112,188,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 68, 0, 0, 0, 0, 0, 0, 48, 65, + 0, 0, 0, 0, 0,128, 59, 68, 0, 0, 0, 0, 0, 0,195, 67,238, 2, 0, 0,255, 2, 0, 0, 0, 0, 0, 0,133, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,237, 2, 0, 0, 0, 0, 0, 0,133, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 2, 0, 0, 0, 1, 0, 3, 3, + 2, 0, 0, 4, 10, 0,255, 2,134, 1,238, 2,134, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,241, 2, 0, 0,239, 5, 0, 0, 26, 0, 0, 0,159, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,255, 2,134, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 32, 60, 38, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,176, 61, 38, 3, 1, 0, 0, 0,144, 58, 38, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,112, 0, 0, 0, 80,191,190, 2, 0, 0, 0, 0,177, 0, 0, 0, 1, 0, 0, 0, +224,194,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, + 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 32, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0,192,190, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,112,193,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,251, 67, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0,224,189, 68, 0, 0,200, 65, 0,224,189, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,240, 5, 26, 0,240, 5, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,253, 76, 1, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,112,193,190, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,189, 68, + 0, 0, 0, 0, 0,128,192, 67, 0, 6,188, 63,254,176,189, 68, 0, 0, 0, 0, 0,128,192, 67, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, + 0, 0, 0, 0,129, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,122, 68, + 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 4, 10, 0,240, 5,130, 1,240, 5,130, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 26, 0, 0, 0,155, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,130, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,176, 61, 38, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 64, 63, 38, 3, 1, 0, 0, 0, 32, 60, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95,117,110,105,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,144, 2, 0, 0,224,194,190, 2, 0, 0, 0, 0, +169, 0, 0, 0, 1, 0, 0, 0,144,200,190, 2, 0, 0, 0, 0, 80,191,190, 2, 0, 0, 0, 0, 0,192,190, 2, 0, 0, 0, 0, +112,193,190, 2, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95,117,110,105,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 85,110,105,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 50,255,126, 1, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 64, 63, 38, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,208, 64, 38, 3, 1, 0, 0, 0,176, 61, 38, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,107,101,121,105,110,103, 95, -115,101,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,107,101,121,105,110,103, 95, -115,101,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75,101,121,105,110,103, 32, 83,101,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,213,254,126, 1, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,208, 64, 38, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 96, 66, 38, 3, 1, 0, 0, 0, 64, 63, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95,112,104,121,115,105, 99,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95,112,104,121,115,105, 99,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 71,114, 97,118,105,116,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,153,254,126, 1, 36, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 96, 66, 38, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,240, 67, 38, 3, 1, 0, 0, 0,208, 64, 38, 3, 1, 0, 0, 0, - 64, 47,243, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255,126, 1, 61, 0, 0, 0, 0, 0, 0, 0, 6, 0, - 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, +176,197,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 32,199,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,128, 37, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,189, 68, 0, 0,200, 65, 0,224,189, 68, 0, 0,200, 65, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,240, 5, 26, 0,240, 5, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 26, 0, 0, 0, 1, 0, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,240, 67, 38, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -128, 69, 38, 3, 1, 0, 0, 0, 96, 66, 38, 3, 1, 0, 0, 0,192, 34,243, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, + 32,199,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,197,190, 2, 0, 0, 0, 0, + 0, 0, 32,193, 0, 0, 0, 68, 0, 0, 32,193, 0, 0, 0, 68,134,137,182,195,195, 68, 91, 68, 30,222,207, 66,116, 8,204, 67, +223, 5, 0, 0,240, 5, 0, 0, 18, 0, 0, 0,129, 1, 0, 0, 0, 0, 0, 0,222, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 0, 0,222, 5, 0, 0, 18, 0, 0, 0,129, 1, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,250, 70, 0, 0,250, 70, +205,204, 76, 62, 72,225,154, 63, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0,240, 5,130, 1,223, 5,112, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, + 26, 0, 0, 0,155, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,130, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 76, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, +144,200,190, 2, 0, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 64,206,190, 2, 0, 0, 0, 0,224,194,190, 2, 0, 0, 0, 0, +176,197,190, 2, 0, 0, 0, 0, 32,199,190, 2, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,127,253,126, 1,240, 1, 0, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -128, 69, 38, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 16, 71, 38, 3, 1, 0, 0, 0,240, 67, 38, 3, 1, 0, 0, 0, -128,241,242, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115, -105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115, -105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,165,254,126, 1,178, 0, 0, 0, 0, 0, 0, 0, 6, 0, - 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 16, 71, 38, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -160, 72, 38, 3, 1, 0, 0, 0,128, 69, 38, 3, 1, 0, 0, 0,112,108,242, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 64, 85,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 52, 81, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,240,201,190, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 96,203,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, + 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, + 0, 0, 0, 0, 26, 0, 0, 0, 0,224,189, 68, 0, 0,208, 65, 0,224,189, 68, 0, 0,208, 65, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,240, 5, 27, 0,240, 5, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 85, 0, 0, 0,111, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 27, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 65,110,116,105, 45, 65,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 83,254,126, 1, 58, 0, 20, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 96,203,190, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,208,204,190, 2, 0, 0, 0, 0,240,201,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -160, 72, 38, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 48, 74, 38, 3, 1, 0, 0, 0, 16, 71, 38, 3, 1, 0, 0, 0, -160, 93,243, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,213,253,126, 1,102, 0, 0, 0, 0, 0, 0, 0, 6, 0, - 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0,239, 5, 0, 0,112, 0, 0, 0, 18, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 48, 74, 38, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -192, 75, 38, 3, 1, 0, 0, 0,160, 72, 38, 3, 1, 0, 0, 0,128, 98,243, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,208,204,190, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,203,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, + 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 17, 0, 0, 0, + 18, 0, 0, 0,162, 3, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, + 18, 0, 0, 0,162, 3, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 0,124,146, 72, 0, 0, 0, 66, 10,215, 35, 60, 0, 0,200, 66, +105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 8, 0,240, 5,163, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0,112, 0, 0, 0, 18, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,163, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 79,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 84,253,126, 1,105, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0, 64,206,190, 2, 0, 0, 0, 0, +163, 0, 0, 0, 1, 0, 0, 0,224,217,190, 2, 0, 0, 0, 0,144,200,190, 2, 0, 0, 0, 0,240,201,190, 2, 0, 0, 0, 0, +208,204,190, 2, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -192, 75, 38, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 80, 77, 38, 3, 1, 0, 0, 0, 48, 74, 38, 3, 1, 0, 0, 0, - 64,105,243, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114, -109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114, -109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,253,126, 1, 0, 0, 0, 0, 0, 0, 4, 0, 6, 0, - 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 80, 77, 38, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -224, 78, 38, 3, 1, 0, 0, 0,192, 75, 38, 3, 1, 0, 0, 0, 32,107,243, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, +112,207,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,224,208,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,157, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,231, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,232, 4, 26, 0,232, 4, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0,128, 7, 0, 0, +225, 1, 0, 0,250, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 4, 26, 0, 0, 0, 1, 0, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80,111,115,116, 32, 80,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, +224,208,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 80,210,190, 2, 0, 0, 0, 0,112,207,190, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0, +143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0,153, 2, 0, 0, +251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 24, 2, 0, 0, 5, 0, + 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 36,253,126, 1, 0, 0, 0, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, + 80,210,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,192,211,190, 2, 0, 0, 0, 0,224,208,190, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0, +143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0,128, 7, 0, 0, +251, 1, 0, 0,251, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, + 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, +192,211,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 48,213,190, 2, 0, 0, 0, 0, 80,210,190, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 35, 67, 0,128,142,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 0, 26,196, 0, 0, 0, 0, +163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0,122, 2,163, 0,104, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,128, 7, 0, 0, +251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, + 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -224, 78, 38, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,112, 80, 38, 3, 1, 0, 0, 0, 80, 77, 38, 3, 1, 0, 0, 0, -128,109,243, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, + 48,213,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,211,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,253,126, 1, 0, 0, 20, 0, 0, 0, 4, 0, 7, 0, - 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0,128, 7, 0, 0, +251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 4, 24, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,112, 80, 38, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,224, 78, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95,115, 99,101,110,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 69, 78, 69, 95, 80, 84, 95,115, 99,101,110,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,214,190, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, +160,214,190, 2, 0, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, 1, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,165, 7, 36, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, + 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, + 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63, 69,239,209, 62, 70,119,105, 63,176, 84, 89,188, 0, 0, 0, 0, + 53,177,205,190,142, 74, 70, 62,166, 33,101, 63, 0, 0, 0, 0,185,158, 81, 63, 35, 44,185,190, 43, 61,228, 62, 0, 0, 0, 0, +164, 96, 68, 65,111,121,173,192,248,209,213, 64, 0, 0,128, 63,180,157,229, 62,169,203,131,191,222,160, 81,191,184,158, 81,191, +118, 90,127, 63, 95, 27,254, 62, 9, 46,185, 62, 35, 44,185, 62,147,180,109,188,102,208, 18, 64,129, 63,228,190, 42, 61,228,190, + 0, 0, 0, 0, 0, 0, 0, 0, 96,132,111, 65,214,211,111, 65,217,236,191, 62, 54,117, 85, 63,224,246, 70,188, 0,128, 32,182, + 69,129, 32,190,250,186,154, 61,170,205,178, 62, 0, 64, 1, 53,215,104, 25,196,135,132,135, 67, 37, 9,167,195,136,252, 71,194, + 3, 54, 25, 68,160, 87,135,195,205,209,166, 67,151,254, 71, 66, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, + 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63,180,157,229, 62,169,203,131,191,222,160, 81,191,184,158, 81,191, +118, 90,127, 63, 95, 27,254, 62, 9, 46,185, 62, 35, 44,185, 62,147,180,109,188,102,208, 18, 64,129, 63,228,190, 42, 61,228,190, + 0, 0, 0, 0, 0, 0, 0, 0, 96,132,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 99,101,110,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190, +214,211,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0,218,210,190, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,135,255,126, 1, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0, - 0, 82, 38, 3, 1, 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0, 96, 87, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,224,217,190, 2, 0, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, + 32,222,190, 2, 0, 0, 0, 0, 64,206,190, 2, 0, 0, 0, 0,112,207,190, 2, 0, 0, 0, 0, 48,213,190, 2, 0, 0, 0, 0, + 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, + 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0, 64,219,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,176,220,190, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 68, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, + 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,152, 4, + 26, 0,152, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,151, 4, 0, 0,101, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +152, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0,176,167, 20, 26, 1, 0, 0, 0, -255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 64, 83, 38, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,160, 84, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, - 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0,242, 67, 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,227, 1, 0, 0, - 0, 0, 0, 0, 26, 0, 0, 0, 0,128,241, 67, 0, 0,208, 65, 0,128,241, 67, 0, 0,208, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,228, 1, 27, 0,228, 1, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,157, 5, 0, 0,128, 7, 0, 0, 85, 0, 0, 0,111, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228, 1, 27, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,176,220,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 64,219,190, 2, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, + 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, + 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0,152, 4, +122, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,151, 4, 0, 0,127, 0, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +152, 4,122, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,160, 84, 38, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 86, 38, 3, 1, 0, 0, 0, 64, 83, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,200, 0, 0, 0, 32,222,190, 2, 0, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +224,217,190, 2, 0, 0, 0, 0, 64,219,190, 2, 0, 0, 0, 0,176,220,190, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,128, 7, 0, 0,112, 0, 0, 0,235, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, + 68, 65, 84, 65,160, 0, 0, 0, 48,223,190, 2, 0, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 64,255,190, 2, 0, 0, 0, 0, +144,187,190, 2, 0, 0, 0, 0,144,116,190, 2, 0, 0, 0, 0, 16,115,190, 2, 0, 0, 0, 0,208,115,190, 2, 0, 0, 0, 0, +240,116,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0,161, 1, 0, 0, 21, 4, 0, 0, + 9, 9,240, 5,117, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,226,190, 2, 0, 0, 0, 0, + 48,254,190, 2, 0, 0, 0, 0, 16,224,190, 2, 0, 0, 0, 0,128,225,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, + 16,224,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,128,225,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,128,251, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0, 86, 38, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 84, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, - 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 17, 0, 0, 0, - 18, 0, 0, 0,123, 1, 0, 0, 18, 0, 0, 0,227, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,227, 1, 0, 0, - 18, 0, 0, 0,123, 1, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 0,124,146, 72, 0, 0, 0, 66, 10,215, 35, 60, 0, 0,200, 66, -105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 8, 0,228, 1,124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,157, 5, 0, 0,128, 7, 0, 0,112, 0, 0, 0,235, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228, 1,124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,189, 68, 0, 0,200, 65, 0,224,189, 68, 0, 0,200, 65, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,240, 5, 26, 0,240, 5, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, +161, 1, 0, 0,186, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 26, 0, 0, 0, 1, 0, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, +128,225,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,224,190, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0,224,189, 68, 0, 0, 0, 0, 0,192, 22, 68,170, 86,234, 67, 86, 74,131, 68,162, 32, 58, 67,175,111,208, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0, 96, 87, 38, 3, 1, 0, 0, 0, -163, 0, 0, 0, 1, 0, 0, 0,128, 94, 38, 3, 1, 0, 0, 0, 0, 82, 38, 3, 1, 0, 0, 0, 64, 83, 38, 3, 1, 0, 0, 0, - 0, 86, 38, 3, 1, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 90, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 10,215, 35, 60, 0, 0,122, 68, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 4, 10, 0,240, 5, 91, 2,240, 5, 91, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, +187, 1, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 91, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,144, 2, 0, 0, +240,226,190, 2, 0, 0, 0, 0,169, 0, 0, 0, 1, 0, 0, 0,160,232,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -144, 88, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,240, 89, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,138, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 1, 26, 0, 20, 1, 26, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 26, 0, 0, 0, 1, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -240, 89, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 88, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, - 26, 0, 0, 0, 80, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 55, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 91, 38, 3, 1, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, - 80, 91, 38, 3, 1, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0,103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, - 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0,128, 63,103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, - 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65,237,122,111, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, - 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,128, 63,103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, - 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 32,222, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,128, 94, 38, 3, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 96, 87, 38, 3, 1, 0, 0, 0,144, 88, 38, 3, 1, 0, 0, 0,240, 89, 38, 3, 1, 0, 0, 0, - 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,194,129, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, - 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,160, 0, 0, 0,224, 95, 38, 3, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 96,130, 38, 3, 1, 0, 0, 0, -112, 42, 38, 3, 1, 0, 0, 0, 16, 29, 38, 3, 1, 0, 0, 0,112, 29, 38, 3, 1, 0, 0, 0,176, 28, 38, 3, 1, 0, 0, 0, -240, 27, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 2, 0, 0,239, 5, 0, 0, 0, 0, 0, 0,159, 1, 0, 0, - 18, 18,255, 2,160, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 76, 15, 3, 1, 0, 0, 0,128, 99, 38, 3, 1, 0, 0, 0, - 96,129, 38, 3, 1, 0, 0, 0,192, 96, 38, 3, 1, 0, 0, 0, 32, 98, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 96,251,249, 24, 1, 0, 0, 0,240,232,251, 24, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -192, 96, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 32, 98, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,192, 63, 68, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,254, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,189, 68, 0, 0,200, 65, 0,224,189, 68, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,255, 2, 26, 0,255, 2, 26, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 2, 0, 0,239, 5, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 2, 26, 0, 0, 0, 1, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 78, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 32, 98, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 96, 38, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0,128, 63, 68, 0, 0, 0, 0, 0, 0, 48, 65, 0, 0, 0, 0, 0,128, 59, 68, 0, 0, 0, 0, 0, 0,195, 67, -238, 2, 0, 0,255, 2, 0, 0, 0, 0, 0, 0,133, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,237, 2, 0, 0, 0, 0, 0, 0,133, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 2, 0, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,255, 2,134, 1,238, 2,134, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 2, 0, 0,239, 5, 0, 0, - 26, 0, 0, 0,159, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 2,134, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176, 77, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,112, 0, 0, 0, -128, 99, 38, 3, 1, 0, 0, 0,177, 0, 0, 0, 1, 0, 0, 0,240,102, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0,192,186,153, 22, 1, 0, 0, 0, -112,243,140, 22, 1, 0, 0, 0, 48,171,153, 22, 1, 0, 0, 0, 48,171,153, 22, 1, 0, 0, 0, 62, 62, 62, 32, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 48,100, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,144,101, 38, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,251, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,190, 68, + 68, 65, 84, 65, 40, 1, 0, 0,192,229,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 48,231,190, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,189, 68, 0, 0,200, 65, 0,224,189, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,240, 5, 26, 0,240, 5, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,239, 5, 0, 0,157, 1, 0, 0,182, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 5, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,144,101, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48,100, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0,224,189, 68, 0, 0, 0, 0, 0,128,192, 67, 0, 6,188, 63,254,176,189, 68, - 0, 0, 0, 0, 0,128,192, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0,129, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,122, 68, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 4, 10, 0,240, 5, -130, 1,240, 5,130, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,239, 5, 0, 0, 26, 0, 0, 0,155, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -240, 5,130, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,144, 2, 0, 0,240,102, 38, 3, 1, 0, 0, 0,169, 0, 0, 0, 1, 0, 0, 0,128,108, 38, 3, 1, 0, 0, 0, -128, 99, 38, 3, 1, 0, 0, 0, 48,100, 38, 3, 1, 0, 0, 0,144,101, 38, 3, 1, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0, 48,231,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +192,229,190, 2, 0, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, 0, 0, 32,193, 0, 0, 0, 68,132,137,182,195,194, 68, 91, 68, +112,158, 93, 65, 8, 19,249, 67,223, 5, 0, 0,240, 5, 0, 0, 18, 0, 0, 0, 91, 2, 0, 0, 0, 0, 0, 0,222, 5, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,222, 5, 0, 0, 18, 0, 0, 0, 91, 2, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,250, 70, 0, 0,250, 70,205,204, 76, 62, 72,225,154, 63, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0,240, 5, + 92, 2,223, 5, 74, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,239, 5, 0, 0,183, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +240, 5, 92, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 1, 0, 0,160,232,190, 2, 0, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 80,238,190, 2, 0, 0, 0, 0, +240,226,190, 2, 0, 0, 0, 0,192,229,190, 2, 0, 0, 0, 0, 48,231,190, 2, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 64, 85,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 52, 81, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, + 0,234,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,112,235,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0,224,189, 68, 0, 0,208, 65, 0,224,189, 68, 0, 0,208, 65, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,240, 5, 27, 0,240, 5, 27, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, + 85, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 27, 0, 0, 0, 1, 0, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, +112,235,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,224,236,190, 2, 0, 0, 0, 0, 0,234,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,192,105, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 32,107, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 68, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0,224,189, 68, 0, 0,200, 65, 0,224,189, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0,240, 5, 26, 0,240, 5, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0,239, 5, 0, 0, +112, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, + 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, +224,236,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,235,190, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, + 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, + 18, 0, 0, 0,239, 5, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 0,124,146, 72, 0, 0, 0, 66, + 10,215, 35, 60, 0, 0,200, 66,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 8, 0,240, 5,163, 3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, +112, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,163, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 32,107, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,192,105, 38, 3, 1, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, 0, 0, 32,193, 0, 0, 0, 68, -134,137,182,195,195, 68, 91, 68, 30,222,207, 66,116, 8,204, 67,223, 5, 0, 0,240, 5, 0, 0, 18, 0, 0, 0,129, 1, 0, 0, - 0, 0, 0, 0,222, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,222, 5, 0, 0, 18, 0, 0, 0,129, 1, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,250, 70, 0, 0,250, 70,205,204, 76, 62, 72,225,154, 63, 10, 0, 0, 0, 0, 0, 3, 0, - 0, 0, 0, 4, 0, 0,240, 5,130, 1,223, 5,112, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 26, 0, 0, 0,155, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,240, 5,130, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0, + 80,238,190, 2, 0, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0,240,249,190, 2, 0, 0, 0, 0,160,232,190, 2, 0, 0, 0, 0, + 0,234,190, 2, 0, 0, 0, 0,224,236,190, 2, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,128,108, 38, 3, 1, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, - 0,114, 38, 3, 1, 0, 0, 0,240,102, 38, 3, 1, 0, 0, 0,192,105, 38, 3, 1, 0, 0, 0, 32,107, 38, 3, 1, 0, 0, 0, - 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,186,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 58, 52, 81, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,224,109, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 64,111, 38, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0,190, 68, - 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0,224,189, 68, 0, 0,208, 65, - 0,224,189, 68, 0, 0,208, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,240, 5, - 27, 0,240, 5, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,239, 5, 0, 0, 85, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -240, 5, 27, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,128,239,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,240,240,190, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,157, 68, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,231, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, + 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,232, 4, + 26, 0,232, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +153, 2, 0, 0,128, 7, 0, 0,225, 1, 0, 0,250, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +232, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 64,111, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,160,112, 38, 3, 1, 0, 0, 0, -224,109, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,240,240,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 96,242,190, 2, 0, 0, 0, 0, +128,239,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, +255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, + 44, 3,143, 0, 26, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +153, 2, 0, 0,153, 2, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 24, 2, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0, 96,242,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,208,243,190, 2, 0, 0, 0, 0, +240,240,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, + 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0, +120, 0,143, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +153, 2, 0, 0,128, 7, 0, 0,251, 1, 0, 0,251, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -239, 5, 0, 0,239, 5, 0, 0,112, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,208,243,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 64,245,190, 2, 0, 0, 0, 0, + 96,242,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128,142,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, + 0, 0, 26,196, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0, +122, 2,163, 0,104, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +128, 7, 0, 0,128, 7, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,160,112, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 64,111, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,122, 67, - 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, - 0,124,146, 72, 0, 0, 0, 66, 10,215, 35, 60, 0, 0,200, 66,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 8, 0,240, 5, -163, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,239, 5, 0, 0,112, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -240, 5,163, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0, 64,245,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +208,243,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,240, 0, 0, 0, 0,114, 38, 3, 1, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, 64,125, 38, 3, 1, 0, 0, 0, -128,108, 38, 3, 1, 0, 0, 0,224,109, 38, 3, 1, 0, 0, 0,160,112, 38, 3, 1, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 48,115, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -144,116, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0,157, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,231, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0,232, 4, 26, 0,232, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0,128, 7, 0, 0,225, 1, 0, 0,250, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,232, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,144,116, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -240,117, 38, 3, 1, 0, 0, 0, 48,115, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, - 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, - 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0,153, 2, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 24, 2, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,240,117, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 80,119, 38, 3, 1, 0, 0, 0,144,116, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, - 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, - 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, - 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0,128, 7, 0, 0,251, 1, 0, 0,251, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80,119, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -176,120, 38, 3, 1, 0, 0, 0,240,117, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128,142,196, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 35, 67, 0, 0, 26,196, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, - 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, - 18, 0, 0, 0, 6, 0,180, 0,122, 2,163, 0,104, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,128, 7, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +153, 2, 0, 0,128, 7, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +232, 4, 24, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176,120, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 80,119, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,246,190, 2, 0, 0, 0, 0, + 68, 65, 84, 65,248, 2, 0, 0,176,246,190, 2, 0, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, 1, 0,140, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,165, 7, 36, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 68,239,209, 62, 51,177,205,190, +184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, + 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63, 69,239,209, 62, 70,119,105, 63, +176, 84, 89,188, 0, 0, 0, 0, 53,177,205,190,142, 74, 70, 62,166, 33,101, 63, 0, 0, 0, 0,185,158, 81, 63, 35, 44,185,190, + 43, 61,228, 62, 0, 0, 0, 0,164, 96, 68, 65,111,121,173,192,248,209,213, 64, 0, 0,128, 63,180,157,229, 62,169,203,131,191, +222,160, 81,191,184,158, 81,191,118, 90,127, 63, 95, 27,254, 62, 9, 46,185, 62, 35, 44,185, 62,147,180,109,188,102,208, 18, 64, +129, 63,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 96,132,111, 65,214,211,111, 65,217,236,191, 62, 54,117, 85, 63, +224,246, 70,188, 0,128, 32,182, 69,129, 32,190,250,186,154, 61,170,205,178, 62, 0, 64, 1, 53,215,104, 25,196,135,132,135, 67, + 37, 9,167,195,136,252, 71,194, 3, 54, 25, 68,160, 87,135,195,205,209,166, 67,151,254, 71, 66, 68,239,209, 62, 51,177,205,190, +184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, + 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63,180,157,229, 62,169,203,131,191, +222,160, 81,191,184,158, 81,191,118, 90,127, 63, 95, 27,254, 62, 9, 46,185, 62, 35, 44,185, 62,147,180,109,188,102,208, 18, 64, +129, 63,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 96,132,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 62, 55, 63, 56,186,224,190, +237,203,148,190, 3,236,234,190,214,211,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0,218,210,190, 58, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0,128, 7, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,232, 4, 24, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16,122, 38, 3, 1, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, 16,122, 38, 3, 1, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, - 1, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,165, 7, 36, 64, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, - 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0, -162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63, - 69,239,209, 62, 70,119,105, 63,176, 84, 89,188, 0, 0, 0, 0, 53,177,205,190,142, 74, 70, 62,166, 33,101, 63, 0, 0, 0, 0, -185,158, 81, 63, 35, 44,185,190, 43, 61,228, 62, 0, 0, 0, 0,164, 96, 68, 65,111,121,173,192,248,209,213, 64, 0, 0,128, 63, -180,157,229, 62,169,203,131,191,222,160, 81,191,184,158, 81,191,118, 90,127, 63, 95, 27,254, 62, 9, 46,185, 62, 35, 44,185, 62, -147,180,109,188,102,208, 18, 64,129, 63,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 96,132,111, 65,214,211,111, 65, -217,236,191, 62, 54,117, 85, 63,224,246, 70,188, 0,128, 32,182, 69,129, 32,190,250,186,154, 61,170,205,178, 62, 0, 64, 1, 53, -215,104, 25,196,135,132,135, 67, 37, 9,167,195,136,252, 71,194, 3, 54, 25, 68,160, 87,135,195,205,209,166, 67,151,254, 71, 66, - 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0, -162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63, -180,157,229, 62,169,203,131,191,222,160, 81,191,184,158, 81,191,118, 90,127, 63, 95, 27,254, 62, 9, 46,185, 62, 35, 44,185, 62, -147,180,109,188,102,208, 18, 64,129, 63,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 96,132,111, 65,214,211,111, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,240,249,190, 2, 0, 0, 0, 0, +157, 0, 0, 0, 1, 0, 0, 0, 48,254,190, 2, 0, 0, 0, 0, 80,238,190, 2, 0, 0, 0, 0,128,239,190, 2, 0, 0, 0, 0, + 64,245,190, 2, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, +176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190,214,211,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, -218,210,190, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80,251,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +192,252,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 0,147, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, + 4, 0, 12, 4, 10, 0,152, 4, 26, 0,152, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0,101, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,152, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,192,252,190, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 80,251,190, 2, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66, +112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, + 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, + 4, 0, 0, 4, 8, 0,152, 4,122, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0,127, 0, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0, 48,254,190, 2, 0, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,240,249,190, 2, 0, 0, 0, 0, 80,251,190, 2, 0, 0, 0, 0,192,252,190, 2, 0, 0, 0, 0, + 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, - 64,125, 38, 3, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, 96,129, 38, 3, 1, 0, 0, 0, 0,114, 38, 3, 1, 0, 0, 0, - 48,115, 38, 3, 1, 0, 0, 0,176,120, 38, 3, 1, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0, 7, 0, 48,194,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, - 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,160,126, 38, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0,128, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,152, 4, 26, 0,152, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0,101, 0, 0, 0,126, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0,128, 38, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,126, 38, 3, 1, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, - 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, - 18, 0, 0, 0,121, 2, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, - 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0,152, 4,122, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0,127, 0, 0, 0,248, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 64,255,190, 2, 0, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, +224, 34,191, 2, 0, 0, 0, 0, 48,223,190, 2, 0, 0, 0, 0,144,113,190, 2, 0, 0, 0, 0,144,116,190, 2, 0, 0, 0, 0, +176,117,190, 2, 0, 0, 0, 0, 80,117,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 2, 0, 0, + 0, 0, 0, 0,159, 1, 0, 0, 18, 18,240, 2,160, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3,191, 2, 0, 0, 0, 0,208, 33,191, 2, 0, 0, 0, 0, 32, 0,191, 2, 0, 0, 0, 0,144, 1,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0, 32, 0,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,144, 1,191, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,231, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 60, 68, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,189, 68, 0, 0,200, 65, + 0,224,189, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,240, 2, + 26, 0,240, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,239, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +240, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0, 96,129, 38, 3, 1, 0, 0, 0, -172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,125, 38, 3, 1, 0, 0, 0,160,126, 38, 3, 1, 0, 0, 0, - 0,128, 38, 3, 1, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,144, 1,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 32, 0,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 59, 68, 0, 0, 0, 0, 0, 0, 9, 67, 0, 0, 0, 0, 0,192, 55, 68, + 0, 0, 0, 0, 0, 0,195, 67,223, 2, 0, 0,240, 2, 0, 0, 0, 0, 0, 0,133, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,222, 2, 0, 0, 0, 0, 0, 0,133, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 2, 0, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,240, 2, +134, 1,223, 2,134, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,239, 2, 0, 0, 26, 0, 0, 0,159, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +240, 2,134, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,112, 0, 0, 0, 0, 3,191, 2, 0, 0, 0, 0,177, 0, 0, 0, 1, 0, 0, 0,144, 6,191, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 96,130, 38, 3, 1, 0, 0, 0, -194, 0, 0, 0, 1, 0, 0, 0,112,161, 38, 3, 1, 0, 0, 0,224, 95, 38, 3, 1, 0, 0, 0, 80, 28, 38, 3, 1, 0, 0, 0, -208, 26, 38, 3, 1, 0, 0, 0,144, 27, 38, 3, 1, 0, 0, 0,176, 28, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,239, 5, 0, 0,161, 1, 0, 0, 21, 4, 0, 0, 9, 9,240, 5,117, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80, 66, 15, 3, 1, 0, 0, 0, 0,134, 38, 3, 1, 0, 0, 0,112,160, 38, 3, 1, 0, 0, 0, 64,131, 38, 3, 1, 0, 0, 0, -160,132, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,251,249, 24, 1, 0, 0, 0, - 32, 87, 40, 3, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 64,131, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -160,132, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,251, 67, 0, 0, 0, 0, 0, 0,208, 65, + 62, 62, 62, 32, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176, 3,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 32, 5,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,251, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,189, 68, 0, 0,200, 65, 0,224,189, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,240, 5, 26, 0,240, 5, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0,161, 1, 0, 0,186, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -240, 68, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,160,132, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 64,131, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0,224,189, 68, 0, 0, 0, 0, 0,192, 22, 68, -170, 86,234, 67, 86, 74,131, 68,162, 32, 58, 67,175,111,208, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 90, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 32, 5,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,176, 3,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,189, 68, 0, 0, 0, 0, 0,128,192, 67, + 0, 6,188, 63,254,176,189, 68, 0, 0, 0, 0, 0,128,192, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0,129, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,122, 68, 0, 0, 0, 0, 1, 0, 3, 0, - 0, 0, 0, 4, 10, 0,240, 5, 91, 2,240, 5, 91, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0,187, 1, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 91, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48, 67, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4, 10, 0,240, 5,130, 1,240, 5,130, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 26, 0, 0, 0,155, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,240, 5,130, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,144, 2, 0, 0, 0,134, 38, 3, 1, 0, 0, 0,169, 0, 0, 0, 1, 0, 0, 0, -144,139, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,144, 2, 0, 0,144, 6,191, 2, 0, 0, 0, 0,169, 0, 0, 0, 1, 0, 0, 0, + 64, 12,191, 2, 0, 0, 0, 0, 0, 3,191, 2, 0, 0, 0, 0,176, 3,191, 2, 0, 0, 0, 0, 32, 5,191, 2, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9267,38 +6424,38 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,208,136, 38, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 48,138, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 68, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 96, 9,191, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,208, 10,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,189, 68, 0, 0,200, 65, 0,224,189, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,240, 5, 26, 0,240, 5, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0,157, 1, 0, 0,182, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 48,138, 38, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,136, 38, 3, 1, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, - 0, 0, 32,193, 0, 0, 0, 68,132,137,182,195,194, 68, 91, 68,112,158, 93, 65, 8, 19,249, 67,223, 5, 0, 0,240, 5, 0, 0, - 18, 0, 0, 0, 91, 2, 0, 0, 0, 0, 0, 0,222, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,222, 5, 0, 0, - 18, 0, 0, 0, 91, 2, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,250, 70, 0, 0,250, 70,205,204, 76, 62, 72,225,154, 63, - 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0,240, 5, 92, 2,223, 5, 74, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0,183, 1, 0, 0, 18, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 92, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,208, 10,191, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 9,191, 2, 0, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, + 0, 0, 32,193, 0, 0, 0, 68,134,137,182,195,195, 68, 91, 68, 30,222,207, 66,116, 8,204, 67,223, 5, 0, 0,240, 5, 0, 0, + 18, 0, 0, 0,129, 1, 0, 0, 0, 0, 0, 0,222, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,222, 5, 0, 0, + 18, 0, 0, 0,129, 1, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,250, 70, 0, 0,250, 70,205,204, 76, 62, 72,225,154, 63, + 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0,240, 5,130, 1,223, 5,112, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 26, 0, 0, 0,155, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,130, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,144,139, 38, 3, 1, 0, 0, 0, -173, 0, 0, 0, 1, 0, 0, 0, 16,145, 38, 3, 1, 0, 0, 0, 0,134, 38, 3, 1, 0, 0, 0,208,136, 38, 3, 1, 0, 0, 0, - 48,138, 38, 3, 1, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, 64, 12,191, 2, 0, 0, 0, 0, +173, 0, 0, 0, 1, 0, 0, 0,240, 17,191, 2, 0, 0, 0, 0,144, 6,191, 2, 0, 0, 0, 0, 96, 9,191, 2, 0, 0, 0, 0, +208, 10,191, 2, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,186,129, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 52, 81, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 85,192, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 52, 81, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,240,140, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 80,142, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, 0, 0,216, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,160, 13,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 16, 15,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0,224,189, 68, 0, 0,208, 65, 0,224,189, 68, 0, 0,208, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, @@ -9307,8 +6464,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 27, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80,142, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -176,143, 38, 3, 1, 0, 0, 0,240,140, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 16, 15,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +128, 16,191, 2, 0, 0, 0, 0,160, 13,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9317,8 +6474,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176,143, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 80,142, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,128, 16,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16, 15,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 0,124,146, 72, 0, 0, 0, 66, 10,215, 35, 60, 0, 0,200, 66,105, 0, 0, 0, 0, 0, 0, 0, @@ -9327,16 +6484,16 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0,240, 5,163, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0, 16,145, 38, 3, 1, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, - 80,156, 38, 3, 1, 0, 0, 0,144,139, 38, 3, 1, 0, 0, 0,240,140, 38, 3, 1, 0, 0, 0,176,143, 38, 3, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0,240, 17,191, 2, 0, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, +144, 29,191, 2, 0, 0, 0, 0, 64, 12,191, 2, 0, 0, 0, 0,160, 13,191, 2, 0, 0, 0, 0,128, 16,191, 2, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 64,146, 38, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,160,147, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, + 0, 0, 0, 0, 0, 0,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 32, 19,191, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,144, 20,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,157, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,231, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, @@ -9345,8 +6502,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,160,147, 38, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0,149, 38, 3, 1, 0, 0, 0, 64,146, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,144, 20,191, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 22,191, 2, 0, 0, 0, 0, 32, 19,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, @@ -9355,8 +6512,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 24, 2, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0,149, 38, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 96,150, 38, 3, 1, 0, 0, 0,160,147, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0, 22,191, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,112, 23,191, 2, 0, 0, 0, 0,144, 20,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, @@ -9365,8 +6522,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 96,150, 38, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,192,151, 38, 3, 1, 0, 0, 0, 0,149, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,112, 23,191, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,224, 24,191, 2, 0, 0, 0, 0, 0, 22,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128,142,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 0, 26,196, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, @@ -9375,8 +6532,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,192,151, 38, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,150, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,224, 24,191, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112, 23,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9385,7 +6542,7 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 4, 24, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 32,153, 38, 3, 1, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, 32,153, 38, 3, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 80, 26,191, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, 80, 26,191, 2, 0, 0, 0, 0, 156, 0, 0, 0, 1, 0, 0, 0, 1, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,165, 7, 36, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128, 226,215,163,188, 0, 0, 0,128, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, @@ -9410,17 +6567,17 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 1, 0, 0, 80,156, 38, 3, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0,112,160, 38, 3, 1, 0, 0, 0, - 16,145, 38, 3, 1, 0, 0, 0, 64,146, 38, 3, 1, 0, 0, 0,192,151, 38, 3, 1, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, + 68, 65, 84, 65, 32, 1, 0, 0,144, 29,191, 2, 0, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0,208, 33,191, 2, 0, 0, 0, 0, +240, 17,191, 2, 0, 0, 0, 0, 32, 19,191, 2, 0, 0, 0, 0,224, 24,191, 2, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,194,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -176,157, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 16,159, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +240, 30,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 96, 32,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, @@ -9430,7 +6587,7 @@ char datatoc_B_blend[]= { 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 16,159, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,157, 38, 3, 1, 0, 0, 0, + 96, 32,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 30,191, 2, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66, @@ -9440,766 +6597,297 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0, -112,160, 38, 3, 1, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,156, 38, 3, 1, 0, 0, 0, -176,157, 38, 3, 1, 0, 0, 0, 16,159, 38, 3, 1, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +208, 33,191, 2, 0, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 29,191, 2, 0, 0, 0, 0, +240, 30,191, 2, 0, 0, 0, 0, 96, 32,191, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, -112,161, 38, 3, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,240,195, 38, 3, 1, 0, 0, 0, 96,130, 38, 3, 1, 0, 0, 0, - 80, 25, 38, 3, 1, 0, 0, 0, 80, 28, 38, 3, 1, 0, 0, 0,112, 29, 38, 3, 1, 0, 0, 0, 16, 29, 38, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 2, 0, 0, 0, 0, 0, 0,159, 1, 0, 0, 18, 18,240, 2,160, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0,208, 76, 15, 3, 1, 0, 0, 0, 16,165, 38, 3, 1, 0, 0, 0,240,194, 38, 3, 1, 0, 0, 0, - 80,162, 38, 3, 1, 0, 0, 0,176,163, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 64, 84, 40, 3, 1, 0, 0, 0, 48,172,252, 24, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80,162, 38, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,176,163, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,231, 67, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 60, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 2, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0,224,189, 68, 0, 0,200, 65, 0,224,189, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,240, 2, 26, 0,240, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,144, 78, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176,163, 38, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,162, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 59, 68, - 0, 0, 0, 0, 0, 0, 9, 67, 0, 0, 0, 0, 0,192, 55, 68, 0, 0, 0, 0, 0, 0,195, 67,223, 2, 0, 0,240, 2, 0, 0, - 0, 0, 0, 0,133, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,222, 2, 0, 0, - 0, 0, 0, 0,133, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 2, 0, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,240, 2,134, 1,223, 2,134, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 2, 0, 0, 26, 0, 0, 0,159, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 2,134, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,176, 77, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,112, 0, 0, 0, 16,165, 38, 3, 1, 0, 0, 0, -177, 0, 0, 0, 1, 0, 0, 0,128,168, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 64, 47,152, 22, 1, 0, 0, 0,240, 17,151, 22, 1, 0, 0, 0, -240,184, 63, 25, 1, 0, 0, 0,240,184, 63, 25, 1, 0, 0, 0, 62, 62, 62, 32, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -192,165, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 32,167, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,128,251, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,189, 68, 0, 0,200, 65, 0,224,189, 68, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,240, 5, 26, 0,240, 5, 26, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 26, 0, 0, 0, 1, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 32,167, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,165, 38, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0,224,189, 68, 0, 0, 0, 0, 0,128,192, 67, 0, 6,188, 63,254,176,189, 68, 0, 0, 0, 0, 0,128,192, 67, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0,129, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 10,215, 35, 60, 0, 0,122, 68, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 4, 10, 0,240, 5,130, 1,240, 5,130, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, - 26, 0, 0, 0,155, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,130, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,144, 2, 0, 0, -128,168, 38, 3, 1, 0, 0, 0,169, 0, 0, 0, 1, 0, 0, 0, 16,174, 38, 3, 1, 0, 0, 0, 16,165, 38, 3, 1, 0, 0, 0, -192,165, 38, 3, 1, 0, 0, 0, 32,167, 38, 3, 1, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +224, 34,191, 2, 0, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,255,190, 2, 0, 0, 0, 0, + 16,118,190, 2, 0, 0, 0, 0,208,115,190, 2, 0, 0, 0, 0,112,115,190, 2, 0, 0, 0, 0,112,118,190, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,241, 5, 0, 0,128, 7, 0, 0, 5, 3, 0, 0, 21, 4, 0, 0, 3, 3,144, 1, 17, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 38,191, 2, 0, 0, 0, 0, 48, 57,191, 2, 0, 0, 0, 0, +192, 35,191, 2, 0, 0, 0, 0, 48, 37,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,192, 35,191, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 48, 37,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,163, 67, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,200, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,143, 1, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0,128,149, 67, 0, 0,200, 65, 0,128,149, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,144, 1, 26, 0,144, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 5, 0, 0,128, 7, 0, 0, 5, 3, 0, 0, 30, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 48, 37,191, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 35,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,131, 67, + 0, 0,228,194, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,191, 67, 0, 0,101,195, 0, 0, 0, 0,127, 1, 0, 0,144, 1, 0, 0, + 18, 0, 0, 0,246, 0, 0, 0, 0, 0, 0, 0,126, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,126, 1, 0, 0, + 18, 0, 0, 0,246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 18, 0, 0, 0, 2, 0, 3, 3, 0, 0, 0, 4, 6, 0,144, 1,247, 0,127, 1,229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 5, 0, 0,128, 7, 0, 0, 31, 3, 0, 0, 21, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 1,247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,160, 38,191, 2, 0, 0, 0, 0, +166, 0, 0, 0, 1, 0, 0, 0, 80, 44,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 80,171, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,176,172, 38, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,190, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,189, 68, 0, 0,200, 65, - 0,224,189, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,240, 5, - 26, 0,240, 5, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -240, 5, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16, 40,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,176,172, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80,171, 38, 3, 1, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, 0, 0, 32,193, 0, 0, 0, 68,134,137,182,195,195, 68, 91, 68, - 30,222,207, 66,116, 8,204, 67,223, 5, 0, 0,240, 5, 0, 0, 18, 0, 0, 0,129, 1, 0, 0, 0, 0, 0, 0,222, 5, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,222, 5, 0, 0, 18, 0, 0, 0,129, 1, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,250, 70, 0, 0,250, 70,205,204, 76, 62, 72,225,154, 63, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0,240, 5, -130, 1,223, 5,112, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,239, 5, 0, 0, 26, 0, 0, 0,155, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -240, 5,130, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65, 16, 0, 0, 0, 16, 40,191, 2, 0, 0, 0, 0, +218, 0, 0, 0, 1, 0, 0, 0, 13, 0, 0, 0, 13, 0, 0, 0, 96, 40,191, 2, 0, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0, + 96, 40,191, 2, 0, 0, 0, 0,217, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 64, 85,192, 2, 0, 0, 0, 0, + 19, 0, 0, 0, 1, 0, 1, 0, 64, 85,192, 2, 0, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0, 64, 85,192, 2, 0, 0, 0, 0, + 21, 0, 1, 0, 1, 0, 1, 0, 64, 85,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,160,100,192, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 1, 0,144,113,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,176,163,192, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 1, 0,240,123,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 80,145,192, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 1, 0, 16,119,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 16, 96,192, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 1, 0,176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48, 95,192, 2, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,112, 41,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,224, 42,191, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,150, 67, + 0, 0, 0, 0, 0, 0,248, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, + 0,128,137, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 44, 1, + 31, 0, 44, 1, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +117, 4, 0, 0,160, 5, 0, 0,218, 2, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 44, 1, 31, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 1, 0, 0, 16,174, 38, 3, 1, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0,144,179, 38, 3, 1, 0, 0, 0, -128,168, 38, 3, 1, 0, 0, 0, 80,171, 38, 3, 1, 0, 0, 0,176,172, 38, 3, 1, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,224, 42,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +112, 41,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,141, 67, 0, 0, 62,196, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,141, 67, + 0, 0,246,194, 0, 0, 0, 0, 27, 1, 0, 0, 44, 1, 0, 0, 18, 0, 0, 0,140, 0, 0, 0, 0, 0, 0, 0, 26, 1, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 26, 1, 0, 0, 18, 0, 0, 0,140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0, 44, 1, +141, 0, 27, 1,123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +117, 4, 0, 0,160, 5, 0, 0, 77, 2, 0, 0,217, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 44, 1,141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 0, 1, 0, 0, 80, 44,191, 2, 0, 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0,224, 49,191, 2, 0, 0, 0, 0, +160, 38,191, 2, 0, 0, 0, 0,112, 41,191, 2, 0, 0, 0, 0,224, 42,191, 2, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48,186,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 52, 81, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -112,175, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,208,176, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0,224,189, 68, 0, 0,208, 65, 0,224,189, 68, 0, 0,208, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,240, 5, 27, 0,240, 5, 27, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, - 85, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 27, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, +144, 45,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 47,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0,242, 67, 0, 0, 0, 0, 0, 0,216, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,227, 1, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0,128,241, 67, 0, 0,208, 65, 0,128,241, 67, 0, 0,208, 65, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,228, 1, 27, 0,228, 1, 27, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,157, 5, 0, 0,128, 7, 0, 0, + 85, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228, 1, 27, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -208,176, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 48,178, 38, 3, 1, 0, 0, 0,112,175, 38, 3, 1, 0, 0, 0, + 0, 47,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,112, 48,191, 2, 0, 0, 0, 0,144, 45,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0,239, 5, 0, 0, -112, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,128, 7, 0, 0, +112, 0, 0, 0,235, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 48,178, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,176, 38, 3, 1, 0, 0, 0, +112, 48,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, - 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 18, 0, 0, 0,239, 5, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 0,124,146, 72, 0, 0, 0, 66, - 10,215, 35, 60, 0, 0,200, 66,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 8, 0,240, 5,163, 3, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, -112, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,163, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,123, 1, 0, 0, 18, 0, 0, 0,227, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, + 18, 0, 0, 0,227, 1, 0, 0, 18, 0, 0, 0,123, 1, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 0,124,146, 72, 0, 0, 0, 66, + 10,215, 35, 60, 0, 0,200, 66,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 8, 0,228, 1,124, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,157, 5, 0, 0,128, 7, 0, 0, +112, 0, 0, 0,235, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228, 1,124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0, -144,179, 38, 3, 1, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0,208,190, 38, 3, 1, 0, 0, 0, 16,174, 38, 3, 1, 0, 0, 0, -112,175, 38, 3, 1, 0, 0, 0, 48,178, 38, 3, 1, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +224, 49,191, 2, 0, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, 48, 57,191, 2, 0, 0, 0, 0, 80, 44,191, 2, 0, 0, 0, 0, +144, 45,191, 2, 0, 0, 0, 0,112, 48,191, 2, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,192,180, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 32,182, 38, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,157, 68, + 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0, 16, 51,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,128, 52,191, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,138, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,231, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, - 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,232, 4, - 26, 0,232, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153, 2, 0, 0,128, 7, 0, 0,225, 1, 0, 0,250, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -232, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 32,182, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,128,183, 38, 3, 1, 0, 0, 0, -192,180, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, -255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, - 44, 3,143, 0, 26, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153, 2, 0, 0,153, 2, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 24, 2, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,128,183, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,224,184, 38, 3, 1, 0, 0, 0, - 32,182, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, - 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0, -120, 0,143, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153, 2, 0, 0,128, 7, 0, 0,251, 1, 0, 0,251, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,224,184, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 64,186, 38, 3, 1, 0, 0, 0, -128,183, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128,142,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, - 0, 0, 26,196, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0, -122, 2,163, 0,104, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128, 7, 0, 0,128, 7, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, + 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 1, + 26, 0, 20, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 89, 6, 0, 0,108, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 20, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 64,186, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -224,184, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,128, 52,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16, 51,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153, 2, 0, 0,128, 7, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -232, 4, 24, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 89, 6, 0, 0,108, 7, 0, 0, 26, 0, 0, 0, 80, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 20, 1, 55, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,187, 38, 3, 1, 0, 0, 0, - 68, 65, 84, 65,248, 2, 0, 0,160,187, 38, 3, 1, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, 1, 0,140, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,165, 7, 36, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 68,239,209, 62, 51,177,205,190, -184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, - 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63, 69,239,209, 62, 70,119,105, 63, -176, 84, 89,188, 0, 0, 0, 0, 53,177,205,190,142, 74, 70, 62,166, 33,101, 63, 0, 0, 0, 0,185,158, 81, 63, 35, 44,185,190, - 43, 61,228, 62, 0, 0, 0, 0,164, 96, 68, 65,111,121,173,192,248,209,213, 64, 0, 0,128, 63,180,157,229, 62,169,203,131,191, -222,160, 81,191,184,158, 81,191,118, 90,127, 63, 95, 27,254, 62, 9, 46,185, 62, 35, 44,185, 62,147,180,109,188,102,208, 18, 64, -129, 63,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 96,132,111, 65,214,211,111, 65,217,236,191, 62, 54,117, 85, 63, -224,246, 70,188, 0,128, 32,182, 69,129, 32,190,250,186,154, 61,170,205,178, 62, 0, 64, 1, 53,215,104, 25,196,135,132,135, 67, - 37, 9,167,195,136,252, 71,194, 3, 54, 25, 68,160, 87,135,195,205,209,166, 67,151,254, 71, 66, 68,239,209, 62, 51,177,205,190, -184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, - 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63,180,157,229, 62,169,203,131,191, -222,160, 81,191,184,158, 81,191,118, 90,127, 63, 95, 27,254, 62, 9, 46,185, 62, 35, 44,185, 62,147,180,109,188,102,208, 18, 64, -129, 63,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 96,132,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 53,191, 2, 0, 0, 0, 0, + 68, 65, 84, 65,248, 2, 0, 0,240, 53,191, 2, 0, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0,103,212,136, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0,128, 63,103,212,136, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65,237,122,111, 62, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,128, 63,103,212,136, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 62, 55, 63, 56,186,224,190, -237,203,148,190, 3,236,234,190,214,211,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0,218,210,190, 58, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 32,222, 58, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,208,190, 38, 3, 1, 0, 0, 0, -157, 0, 0, 0, 1, 0, 0, 0,240,194, 38, 3, 1, 0, 0, 0,144,179, 38, 3, 1, 0, 0, 0,192,180, 38, 3, 1, 0, 0, 0, - 64,186, 38, 3, 1, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, 48, 57,191, 2, 0, 0, 0, 0, +157, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 49,191, 2, 0, 0, 0, 0, 16, 51,191, 2, 0, 0, 0, 0, +128, 52,191, 2, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, - 48,194,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, + 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 48,192, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -144,193, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0,147, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0,152, 4, 26, 0,152, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0,101, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,152, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,144,193, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48,192, 38, 3, 1, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66, -112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, - 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, - 4, 0, 0, 4, 8, 0,152, 4,122, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0,127, 0, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0,208, 0, 0, 0, 32, 59,191, 2, 0, 0, 0, 0,190, 0, 0, 0, 1, 0, 0, 0, + 16,232,191, 2, 0, 0, 0, 0,128,112,190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 83, 82, 85, 86, 32, 69,100,105,116,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 48, 60,191, 2, 0, 0, 0, 0, 80, 64,191, 2, 0, 0, 0, 0,176, 64,191, 2, 0, 0, 0, 0, +144, 72,191, 2, 0, 0, 0, 0, 0, 73,191, 2, 0, 0, 0, 0, 32,183,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 64, 85,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 48, 60,191, 2, 0, 0, 0, 0, +191, 0, 0, 0, 1, 0, 0, 0,144, 60,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,144, 60,191, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, +240, 60,191, 2, 0, 0, 0, 0, 48, 60,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 4, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0,240, 60,191, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 80, 61,191, 2, 0, 0, 0, 0, +144, 60,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 49, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, + 80, 61,191, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,176, 61,191, 2, 0, 0, 0, 0,240, 60,191, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,176, 61,191, 2, 0, 0, 0, 0, +191, 0, 0, 0, 1, 0, 0, 0, 16, 62,191, 2, 0, 0, 0, 0, 80, 61,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 16, 62,191, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, +112, 62,191, 2, 0, 0, 0, 0,176, 61,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 22, 4, 1, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0,112, 62,191, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,208, 62,191, 2, 0, 0, 0, 0, + 16, 62,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 80, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, +208, 62,191, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 48, 63,191, 2, 0, 0, 0, 0,112, 62,191, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,140, 4, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 48, 63,191, 2, 0, 0, 0, 0, +191, 0, 0, 0, 1, 0, 0, 0,144, 63,191, 2, 0, 0, 0, 0,208, 62,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +140, 4, 80, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,144, 63,191, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, +240, 63,191, 2, 0, 0, 0, 0, 48, 63,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 4, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0,240, 63,191, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 80, 64,191, 2, 0, 0, 0, 0, +144, 63,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 6, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, + 80, 64,191, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 63,191, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 6, 80, 1, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,176, 64,191, 2, 0, 0, 0, 0, +192, 0, 0, 0, 1, 0, 0, 0, 32, 65,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 60,191, 2, 0, 0, 0, 0, +240, 60,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 32, 65,191, 2, 0, 0, 0, 0, +192, 0, 0, 0, 1, 0, 0, 0,144, 65,191, 2, 0, 0, 0, 0,176, 64,191, 2, 0, 0, 0, 0,144, 60,191, 2, 0, 0, 0, 0, +176, 61,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,144, 65,191, 2, 0, 0, 0, 0, +192, 0, 0, 0, 1, 0, 0, 0, 0, 66,191, 2, 0, 0, 0, 0, 32, 65,191, 2, 0, 0, 0, 0,240, 60,191, 2, 0, 0, 0, 0, + 16, 62,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 0, 66,191, 2, 0, 0, 0, 0, +192, 0, 0, 0, 1, 0, 0, 0,112, 66,191, 2, 0, 0, 0, 0,144, 65,191, 2, 0, 0, 0, 0,176, 61,191, 2, 0, 0, 0, 0, + 16, 62,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,112, 66,191, 2, 0, 0, 0, 0, +192, 0, 0, 0, 1, 0, 0, 0,224, 66,191, 2, 0, 0, 0, 0, 0, 66,191, 2, 0, 0, 0, 0, 16, 62,191, 2, 0, 0, 0, 0, +112, 62,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,224, 66,191, 2, 0, 0, 0, 0, +192, 0, 0, 0, 1, 0, 0, 0, 80, 67,191, 2, 0, 0, 0, 0,112, 66,191, 2, 0, 0, 0, 0, 80, 61,191, 2, 0, 0, 0, 0, +112, 62,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 80, 67,191, 2, 0, 0, 0, 0, +192, 0, 0, 0, 1, 0, 0, 0,192, 67,191, 2, 0, 0, 0, 0,224, 66,191, 2, 0, 0, 0, 0,176, 61,191, 2, 0, 0, 0, 0, +208, 62,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,192, 67,191, 2, 0, 0, 0, 0, +192, 0, 0, 0, 1, 0, 0, 0, 48, 68,191, 2, 0, 0, 0, 0, 80, 67,191, 2, 0, 0, 0, 0,208, 62,191, 2, 0, 0, 0, 0, + 48, 63,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 48, 68,191, 2, 0, 0, 0, 0, +192, 0, 0, 0, 1, 0, 0, 0,160, 68,191, 2, 0, 0, 0, 0,192, 67,191, 2, 0, 0, 0, 0, 48, 60,191, 2, 0, 0, 0, 0, +144, 63,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,160, 68,191, 2, 0, 0, 0, 0, +192, 0, 0, 0, 1, 0, 0, 0, 16, 69,191, 2, 0, 0, 0, 0, 48, 68,191, 2, 0, 0, 0, 0, 48, 63,191, 2, 0, 0, 0, 0, +144, 63,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 16, 69,191, 2, 0, 0, 0, 0, +192, 0, 0, 0, 1, 0, 0, 0,128, 69,191, 2, 0, 0, 0, 0,160, 68,191, 2, 0, 0, 0, 0, 48, 60,191, 2, 0, 0, 0, 0, +176, 61,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,128, 69,191, 2, 0, 0, 0, 0, +192, 0, 0, 0, 1, 0, 0, 0,240, 69,191, 2, 0, 0, 0, 0, 16, 69,191, 2, 0, 0, 0, 0,208, 62,191, 2, 0, 0, 0, 0, +144, 63,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,240, 69,191, 2, 0, 0, 0, 0, +192, 0, 0, 0, 1, 0, 0, 0, 96, 70,191, 2, 0, 0, 0, 0,128, 69,191, 2, 0, 0, 0, 0,112, 62,191, 2, 0, 0, 0, 0, + 48, 63,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 96, 70,191, 2, 0, 0, 0, 0, +192, 0, 0, 0, 1, 0, 0, 0,208, 70,191, 2, 0, 0, 0, 0,240, 69,191, 2, 0, 0, 0, 0, 16, 62,191, 2, 0, 0, 0, 0, +208, 62,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,208, 70,191, 2, 0, 0, 0, 0, +192, 0, 0, 0, 1, 0, 0, 0, 64, 71,191, 2, 0, 0, 0, 0, 96, 70,191, 2, 0, 0, 0, 0,144, 63,191, 2, 0, 0, 0, 0, +240, 63,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 64, 71,191, 2, 0, 0, 0, 0, +192, 0, 0, 0, 1, 0, 0, 0,176, 71,191, 2, 0, 0, 0, 0,208, 70,191, 2, 0, 0, 0, 0, 80, 61,191, 2, 0, 0, 0, 0, +240, 63,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,176, 71,191, 2, 0, 0, 0, 0, +192, 0, 0, 0, 1, 0, 0, 0, 32, 72,191, 2, 0, 0, 0, 0, 64, 71,191, 2, 0, 0, 0, 0, 48, 63,191, 2, 0, 0, 0, 0, + 80, 64,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 32, 72,191, 2, 0, 0, 0, 0, +192, 0, 0, 0, 1, 0, 0, 0,144, 72,191, 2, 0, 0, 0, 0,176, 71,191, 2, 0, 0, 0, 0,112, 62,191, 2, 0, 0, 0, 0, + 80, 64,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,144, 72,191, 2, 0, 0, 0, 0, +192, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 72,191, 2, 0, 0, 0, 0,240, 63,191, 2, 0, 0, 0, 0, + 80, 64,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 0, 73,191, 2, 0, 0, 0, 0, +194, 0, 0, 0, 1, 0, 0, 0,192, 76,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176, 61,191, 2, 0, 0, 0, 0, +144, 60,191, 2, 0, 0, 0, 0,240, 60,191, 2, 0, 0, 0, 0, 16, 62,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,128, 7, 0, 0, 23, 4, 0, 0, 49, 4, 0, 0, 7, 7,129, 7, 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,128,231,191, 2, 0, 0, 0, 0,128,231,191, 2, 0, 0, 0, 0,224, 73,191, 2, 0, 0, 0, 0, + 80, 75,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,224, 73,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 80, 75,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,161, 68, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 32,240, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, + 4, 0, 12, 4, 10, 0,129, 7, 26, 0,129, 7, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 23, 4, 0, 0, 48, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,129, 7, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0,240,194, 38, 3, 1, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,208,190, 38, 3, 1, 0, 0, 0, 48,192, 38, 3, 1, 0, 0, 0,144,193, 38, 3, 1, 0, 0, 0, - 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80, 75,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,224, 73,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0, + 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192, 0, 0, 0, 0,112, 7, 0, 0,129, 7, 0, 0, 18, 0, 0, 0, 6, 0, 0, 0, + 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 18, 0, 0, 0, 6, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, + 18, 0, 0, 4, 6, 0,129, 7, 7, 0,112, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 4, 0, 0, 49, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,192, 76,191, 2, 0, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, + 96,128,191, 2, 0, 0, 0, 0, 0, 73,191, 2, 0, 0, 0, 0,240, 63,191, 2, 0, 0, 0, 0, 80, 64,191, 2, 0, 0, 0, 0, +112, 62,191, 2, 0, 0, 0, 0, 80, 61,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 6, 0, 0,128, 7, 0, 0, + 0, 0, 0, 0, 79, 1, 0, 0, 4, 4,116, 1, 80, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 96,111,191, 2, 0, 0, 0, 0, 80,127,191, 2, 0, 0, 0, 0,160, 77,191, 2, 0, 0, 0, 0, 16, 79,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,240,195, 38, 3, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,112,161, 38, 3, 1, 0, 0, 0,208, 29, 38, 3, 1, 0, 0, 0,144, 27, 38, 3, 1, 0, 0, 0, - 48, 27, 38, 3, 1, 0, 0, 0, 48, 30, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 5, 0, 0,128, 7, 0, 0, - 5, 3, 0, 0, 21, 4, 0, 0, 3, 3,144, 1, 17, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 15, 3, 1, 0, 0, 0, -144,199, 38, 3, 1, 0, 0, 0,144,217, 38, 3, 1, 0, 0, 0,208,196, 38, 3, 1, 0, 0, 0, 48,198, 38, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,102,253, 24, 1, 0, 0, 0, 0, 90, 40, 3, 1, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,208,196, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 48,198, 38, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,163, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,200, 67, + 68, 65, 84, 65, 40, 1, 0, 0,160, 77,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 16, 79,191, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 67, 0, 0, 0, 0, 0, 0,192, 65, 0, 0,144, 65, 0, 0,149, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,143, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,149, 67, 0, 0,200, 65, - 0,128,149, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,144, 1, - 26, 0,144, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -241, 5, 0, 0,128, 7, 0, 0, 5, 3, 0, 0, 30, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -144, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 2, 15, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 48,198, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208,196, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0,128,131, 67, 0, 0,228,194, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,191, 67, - 0, 0,101,195, 0, 0, 0, 0,127, 1, 0, 0,144, 1, 0, 0, 18, 0, 0, 0,246, 0, 0, 0, 0, 0, 0, 0,126, 1, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,126, 1, 0, 0, 18, 0, 0, 0,246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 18, 0, 0, 0, 2, 0, 3, 3, 0, 0, 0, 4, 6, 0,144, 1, -247, 0,127, 1,229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -241, 5, 0, 0,128, 7, 0, 0, 31, 3, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -144, 1,247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 1, 15, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,144,199, 38, 3, 1, 0, 0, 0,166, 0, 0, 0, 1, 0, 0, 0, 16,205, 38, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,240, 23, 22, 26, 1, 0, 0, 0,240, 23, 22, 26, 1, 0, 0, 0,240,200, 38, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 68, 65, 84, 65, 16, 0, 0, 0,240,200, 38, 3, 1, 0, 0, 0,218, 0, 0, 0, 1, 0, 0, 0, 13, 0, 0, 0, 13, 0, 0, 0, - 64,201, 38, 3, 1, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0, 64,201, 38, 3, 1, 0, 0, 0,217, 0, 0, 0, 13, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 48,186,129, 3, 1, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0, 48,186,129, 3, 1, 0, 0, 0, - 20, 0, 0, 0, 1, 0, 1, 0, 48,186,129, 3, 1, 0, 0, 0, 21, 0, 1, 0, 1, 0, 1, 0, 48,186,129, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0,128,242, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48,200,129, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0,112,253, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 96,246, 39, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0,112,251, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48,206,129, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0, 48,238, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48,194,129, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0, 96,237, 39, 3, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80,202, 38, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,176,203, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 67, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,150, 67, 0, 0, 0, 0, 0, 0,248, 65, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 1, 0, 0, - 0, 0, 0, 0, 30, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 44, 1, 31, 0, 44, 1, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,117, 4, 0, 0,160, 5, 0, 0,218, 2, 0, 0,248, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 1, 31, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176,203, 38, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,202, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0,128,141, 67, - 0, 0, 62,196, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,141, 67, 0, 0,246,194, 0, 0, 0, 0, 27, 1, 0, 0, 44, 1, 0, 0, - 18, 0, 0, 0,140, 0, 0, 0, 0, 0, 0, 0, 26, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 26, 1, 0, 0, - 18, 0, 0, 0,140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, - 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0, 44, 1,141, 0, 27, 1,123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,117, 4, 0, 0,160, 5, 0, 0, 77, 2, 0, 0,217, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 1,141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0, 16,205, 38, 3, 1, 0, 0, 0, -162, 0, 0, 0, 1, 0, 0, 0,112,210, 38, 3, 1, 0, 0, 0,144,199, 38, 3, 1, 0, 0, 0, 80,202, 38, 3, 1, 0, 0, 0, -176,203, 38, 3, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80,206, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -176,207, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, 0, 0,216, 65, - 0, 0, 0, 0, 0, 0,242, 67, 0, 0, 0, 0, 0, 0,216, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,227, 1, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, - 0,128,241, 67, 0, 0,208, 65, 0,128,241, 67, 0, 0,208, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0,228, 1, 27, 0,228, 1, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,157, 5, 0, 0,128, 7, 0, 0, 85, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,228, 1, 27, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176,207, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 16,209, 38, 3, 1, 0, 0, 0, 80,206, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,128, 7, 0, 0,112, 0, 0, 0,235, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 16,209, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,176,207, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, - 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,123, 1, 0, 0, - 18, 0, 0, 0,227, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,227, 1, 0, 0, 18, 0, 0, 0,123, 1, 0, 0, - 0, 0, 32, 65, 0, 0,128, 64, 0,124,146, 72, 0, 0, 0, 66, 10,215, 35, 60, 0, 0,200, 66,105, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 4, 8, 0,228, 1,124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,157, 5, 0, 0,128, 7, 0, 0,112, 0, 0, 0,235, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,228, 1,124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0,112,210, 38, 3, 1, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, -144,217, 38, 3, 1, 0, 0, 0, 16,205, 38, 3, 1, 0, 0, 0, 80,206, 38, 3, 1, 0, 0, 0, 16,209, 38, 3, 1, 0, 0, 0, - 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 61, 68, 0, 0,184, 65, + 0,192, 61, 68, 0, 0,184, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 24, 1, + 26, 0, 24, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 13, 6, 0, 0,128, 7, 0, 0, 79, 1, 0, 0, 79, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0, 16, 79,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +160, 77,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0, 0, 12,196, 0, 0, 0, 0, 0, 0, 0, 0,182,145,178, 67, + 47,245,159,195, 0, 0, 0, 0, 99, 1, 0, 0,116, 1, 0, 0, 18, 0, 0, 0, 79, 1, 0, 0, 0, 0, 0, 0, 98, 1, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 98, 1, 0, 0, 18, 0, 0, 0, 79, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,116, 1, + 80, 1, 99, 1, 62, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 13, 6, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +116, 1, 80, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,160,211, 38, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0,213, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,138, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 1, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 1, 26, 0, 20, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0,213, 38, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,211, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, 26, 0, 0, 0, 80, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 55, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 96,214, 38, 3, 1, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, 96,214, 38, 3, 1, 0, 0, 0, -156, 0, 0, 0, 1, 0, 0, 0,103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128, -226,215,163,188, 0, 0, 0,128, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32,193, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32, 65, 0, 0,128, 63,103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, -184,175, 31, 65, 0, 0, 32, 65,237,122,111, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,161, 14,106, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, - 98,127,249, 67,129,255, 71, 66, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32,193, 0, 0,128, 63,103,212,136, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, -184,175, 31, 65, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,100, 32,222, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 1, 0, 0,144,217, 38, 3, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112,210, 38, 3, 1, 0, 0, 0,160,211, 38, 3, 1, 0, 0, 0, 0,213, 38, 3, 1, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,194,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, -159, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0,208, 0, 0, 0, -112,219, 38, 3, 1, 0, 0, 0,190, 0, 0, 0, 1, 0, 0, 0, 96,129, 39, 3, 1, 0, 0, 0, 64, 24, 38, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 85, 86, 32, 69,100,105,116,105,110,103, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,220, 38, 3, 1, 0, 0, 0, -160,224, 38, 3, 1, 0, 0, 0, 0,225, 38, 3, 1, 0, 0, 0,192,231, 38, 3, 1, 0, 0, 0, 32,232, 38, 3, 1, 0, 0, 0, - 64, 82, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,186,129, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,155,180, 21, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0,128,220, 38, 3, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,224,220, 38, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, -224,220, 38, 3, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 64,221, 38, 3, 1, 0, 0, 0,128,220, 38, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 64,221, 38, 3, 1, 0, 0, 0, -191, 0, 0, 0, 1, 0, 0, 0,160,221, 38, 3, 1, 0, 0, 0,224,220, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128, 7, 49, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,160,221, 38, 3, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, - 0,222, 38, 3, 1, 0, 0, 0, 64,221, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0, 0,222, 38, 3, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 96,222, 38, 3, 1, 0, 0, 0, -160,221, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, - 96,222, 38, 3, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,192,222, 38, 3, 1, 0, 0, 0, 0,222, 38, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,192,222, 38, 3, 1, 0, 0, 0, -191, 0, 0, 0, 1, 0, 0, 0, 32,223, 38, 3, 1, 0, 0, 0, 96,222, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128, 7, 80, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 32,223, 38, 3, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, -128,223, 38, 3, 1, 0, 0, 0,192,222, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 4, 22, 4, 1, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0,128,223, 38, 3, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,224,223, 38, 3, 1, 0, 0, 0, - 32,223, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 4, 80, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, -224,223, 38, 3, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 64,224, 38, 3, 1, 0, 0, 0,128,223, 38, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,140, 4, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 64,224, 38, 3, 1, 0, 0, 0, -191, 0, 0, 0, 1, 0, 0, 0,160,224, 38, 3, 1, 0, 0, 0,224,223, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 12, 6, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,160,224, 38, 3, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 64,224, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 6, 80, 1, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 0,225, 38, 3, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 96,225, 38, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,224,220, 38, 3, 1, 0, 0, 0, 64,221, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 96,225, 38, 3, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,192,225, 38, 3, 1, 0, 0, 0, - 0,225, 38, 3, 1, 0, 0, 0,224,220, 38, 3, 1, 0, 0, 0, 0,222, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,192,225, 38, 3, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 32,226, 38, 3, 1, 0, 0, 0, - 96,225, 38, 3, 1, 0, 0, 0, 64,221, 38, 3, 1, 0, 0, 0, 96,222, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 32,226, 38, 3, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,128,226, 38, 3, 1, 0, 0, 0, -192,225, 38, 3, 1, 0, 0, 0, 0,222, 38, 3, 1, 0, 0, 0, 96,222, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,128,226, 38, 3, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,224,226, 38, 3, 1, 0, 0, 0, - 32,226, 38, 3, 1, 0, 0, 0, 96,222, 38, 3, 1, 0, 0, 0,192,222, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,224,226, 38, 3, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 64,227, 38, 3, 1, 0, 0, 0, -128,226, 38, 3, 1, 0, 0, 0,160,221, 38, 3, 1, 0, 0, 0,192,222, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 64,227, 38, 3, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,160,227, 38, 3, 1, 0, 0, 0, -224,226, 38, 3, 1, 0, 0, 0, 0,222, 38, 3, 1, 0, 0, 0, 32,223, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,160,227, 38, 3, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0,228, 38, 3, 1, 0, 0, 0, - 64,227, 38, 3, 1, 0, 0, 0, 32,223, 38, 3, 1, 0, 0, 0,128,223, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 0,228, 38, 3, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 96,228, 38, 3, 1, 0, 0, 0, -160,227, 38, 3, 1, 0, 0, 0,128,220, 38, 3, 1, 0, 0, 0,224,223, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 96,228, 38, 3, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,192,228, 38, 3, 1, 0, 0, 0, - 0,228, 38, 3, 1, 0, 0, 0,128,223, 38, 3, 1, 0, 0, 0,224,223, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,192,228, 38, 3, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 32,229, 38, 3, 1, 0, 0, 0, - 96,228, 38, 3, 1, 0, 0, 0,128,220, 38, 3, 1, 0, 0, 0, 0,222, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 32,229, 38, 3, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,128,229, 38, 3, 1, 0, 0, 0, -192,228, 38, 3, 1, 0, 0, 0, 32,223, 38, 3, 1, 0, 0, 0,224,223, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,128,229, 38, 3, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,224,229, 38, 3, 1, 0, 0, 0, - 32,229, 38, 3, 1, 0, 0, 0,192,222, 38, 3, 1, 0, 0, 0,128,223, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,224,229, 38, 3, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 64,230, 38, 3, 1, 0, 0, 0, -128,229, 38, 3, 1, 0, 0, 0, 96,222, 38, 3, 1, 0, 0, 0, 32,223, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 64,230, 38, 3, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,160,230, 38, 3, 1, 0, 0, 0, -224,229, 38, 3, 1, 0, 0, 0,224,223, 38, 3, 1, 0, 0, 0, 64,224, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,160,230, 38, 3, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0,231, 38, 3, 1, 0, 0, 0, - 64,230, 38, 3, 1, 0, 0, 0,160,221, 38, 3, 1, 0, 0, 0, 64,224, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 0,231, 38, 3, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 96,231, 38, 3, 1, 0, 0, 0, -160,230, 38, 3, 1, 0, 0, 0,128,223, 38, 3, 1, 0, 0, 0,160,224, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 96,231, 38, 3, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,192,231, 38, 3, 1, 0, 0, 0, - 0,231, 38, 3, 1, 0, 0, 0,192,222, 38, 3, 1, 0, 0, 0,160,224, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,192,231, 38, 3, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 96,231, 38, 3, 1, 0, 0, 0, 64,224, 38, 3, 1, 0, 0, 0,160,224, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,160, 0, 0, 0, 32,232, 38, 3, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,192,235, 38, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0,222, 38, 3, 1, 0, 0, 0,224,220, 38, 3, 1, 0, 0, 0, 64,221, 38, 3, 1, 0, 0, 0, - 96,222, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 23, 4, 0, 0, 49, 4, 0, 0, - 7, 7,129, 7, 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0,240, 35, 15, 3, 1, 0, 0, 0,224,128, 39, 3, 1, 0, 0, 0, -224,128, 39, 3, 1, 0, 0, 0, 0,233, 38, 3, 1, 0, 0, 0, 96,234, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 64,250, 36, 3, 1, 0, 0, 0,112, 98,251, 24, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 0,233, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 96,234, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,128,161, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 32,240, 68, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,129, 7, 26, 0,129, 7, 26, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, - 23, 4, 0, 0, 48, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 7, 26, 0, 0, 0, 1, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,176, 37, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 96,234, 38, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,233, 38, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192, 0, 0, 0, 0, -112, 7, 0, 0,129, 7, 0, 0, 18, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 0, 0, 0, 0,111, 7, 0, 0, 18, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,129, 7, 7, 0,112, 7, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 49, 4, 0, 0, 49, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,208, 36, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, -192,235, 38, 3, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,128, 29, 39, 3, 1, 0, 0, 0, 32,232, 38, 3, 1, 0, 0, 0, - 64,224, 38, 3, 1, 0, 0, 0,160,224, 38, 3, 1, 0, 0, 0,192,222, 38, 3, 1, 0, 0, 0,160,221, 38, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 13, 6, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 79, 1, 0, 0, 4, 4,116, 1, 80, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 96, 32, 15, 3, 1, 0, 0, 0, 16, 13, 39, 3, 1, 0, 0, 0,128, 28, 39, 3, 1, 0, 0, 0, -160,236, 38, 3, 1, 0, 0, 0, 0,238, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -224, 92, 40, 3, 1, 0, 0, 0, 48,232,251, 24, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,160,236, 38, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0,238, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 67, - 0, 0, 0, 0, 0, 0,192, 65, 0, 0,144, 65, 0, 0,149, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 1, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 61, 68, 0, 0,184, 65, 0,192, 61, 68, 0, 0,184, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 24, 1, 26, 0, 24, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 6, 0, 0,128, 7, 0, 0, 79, 1, 0, 0, 79, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 16, 35, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0,238, 38, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,236, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, - 0, 0, 12,196, 0, 0, 0, 0, 0, 0, 0, 0,182,145,178, 67, 47,245,159,195, 0, 0, 0, 0, 99, 1, 0, 0,116, 1, 0, 0, - 18, 0, 0, 0, 79, 1, 0, 0, 0, 0, 0, 0, 98, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 98, 1, 0, 0, - 18, 0, 0, 0, 79, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, - 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,116, 1, 80, 1, 99, 1, 62, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80, 31,148, 22, 1, 0, 0, 0, 7, 0, 0, 0, 6, 0, 0, 0, 13, 6, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 79, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,116, 1, 80, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 64, 33, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 96,239, 38, 3, 1, 0, 0, 0,128, 11, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 96,239, 38, 3, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0,240,240, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 34, 15, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 67,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220,255,101, 1, 36, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0,240,240, 38, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,128,242, 38, 3, 1, 0, 0, 0, - 96,239, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255, 28, 1, 61, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,128,242, 38, 3, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0, 16,244, 38, 3, 1, 0, 0, 0,240,240, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111,255, 28, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0, 16,244, 38, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,160,245, 38, 3, 1, 0, 0, 0, -128,242, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,109,101,110,115,105,111, -110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,165,254, 28, 1,178, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,160,245, 38, 3, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0, 48,247, 38, 3, 1, 0, 0, 0, 16,244, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 65,110,116,105, 45, 65,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,254, 28, 1, 58, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0, 48,247, 38, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,192,248, 38, 3, 1, 0, 0, 0, -160,245, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,105,110,103, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,213,253, 28, 1,102, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,192,248, 38, 3, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0, 80,250, 38, 3, 1, 0, 0, 0, 48,247, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 79,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,253, 28, 1,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0, 80,250, 38, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,224,251, 38, 3, 1, 0, 0, 0, -192,248, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,101,114,102,111,114,109, 97, -110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,253, 28, 1, 0, 0, - 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,224,251, 38, 3, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0,112,253, 38, 3, 1, 0, 0, 0, 80,250, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 80,111,115,116, 32, 80,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36,253, 28, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0,112,253, 38, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0,255, 38, 3, 1, 0, 0, 0, -224,251, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, - 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,112, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,253, 28, 1, 0, 0, - 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 0,255, 38, 3, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0,144, 0, 39, 3, 1, 0, 0, 0,112,253, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95, 99,111,110,116,101,120,116, 95,109,101,115,104, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95, 99,111,110,116,101,120,116, 95,109,101,115,104, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,255, 89, 1, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0,144, 0, 39, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 32, 2, 39, 3, 1, 0, 0, 0, - 0,255, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95, -110,111,114,109, 97,108,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95, -110,111,114,109, 97,108,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78,111,114,109, 97,108,115, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,102,255, 89, 1, 58, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 32, 2, 39, 3, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0,176, 3, 39, 3, 1, 0, 0, 0,144, 0, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95,115,101,116,116,105,110,103,115, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95,115,101,116,116,105,110,103,115, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83,101,116,116,105,110,103,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42,255, 89, 1, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0,176, 3, 39, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 64, 5, 39, 3, 1, 0, 0, 0, - 32, 2, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95, -118,101,114,116,101,120, 95,103,114,111,117,112,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95, -118,101,114,116,101,120, 95,103,114,111,117,112,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86,101,114,116,101,120, 32, 71, -114,111,117,112,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,198,254, 89, 1, 76, 0, - 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 64, 5, 39, 3, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0,208, 6, 39, 3, 1, 0, 0, 0,176, 3, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95,115,104, 97,112,101, 95,107,101,121,115, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95,115,104, 97,112,101, 95,107,101,121,115, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,112,101, 32, 75,101,121,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,181,254, 89, 1, 69, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0,208, 6, 39, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 96, 8, 39, 3, 1, 0, 0, 0, - 64, 5, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95, -117,118, 95,116,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95, -117,118, 95,116,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 86, 32, 84,101,120,116,117, -114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,157,254, 89, 1, 69, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 96, 8, 39, 3, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0,240, 9, 39, 3, 1, 0, 0, 0,208, 6, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95,118,101,114,116,101,120, 95, 99,111,108,111,114,115, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95,118,101,114,116,101,120, 95, 99,111,108,111,114,115, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 86,101,114,116,101,120, 32, 67,111,108,111,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,254, 89, 1, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0,240, 9, 39, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,128, 11, 39, 3, 1, 0, 0, 0, - 96, 8, 39, 3, 1, 0, 0, 0,240, 19,142, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, - 80, 84, 95, 99,111,110,116,101,120,116, 95,116,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, - 80, 84, 95, 99,111,110,116,101,120,116, 95,116,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,255,101, 1,204, 0, - 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,128, 11, 39, 3, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 9, 39, 3, 1, 0, 0, 0, 32,158,243, 24, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,105,110,102,108,117,101,110, 99,101, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,105,110,102,108,117,101,110, 99,101, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 73,110,102,108,117,101,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,212,253,101, 1, 36, 1, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 1, 0, 0, 16, 13, 39, 3, 1, 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0, 96, 24, 39, 3, 1, 0, 0, 0, + 68, 65, 84, 65, 0, 1, 0, 0, 96,111,191, 2, 0, 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0, 16,123,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10207,8 +6895,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 6, 0, 6, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, - 48, 22, 22, 26, 1, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 80, 14, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,176, 15, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, +160,112,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 16,114,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128,211, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,166, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, @@ -10218,7 +6906,7 @@ char datatoc_B_blend[]= { 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -176, 15, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 16, 17, 39, 3, 1, 0, 0, 0, 80, 14, 39, 3, 1, 0, 0, 0, + 16,114,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,128,115,191, 2, 0, 0, 0, 0,160,112,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0, 143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10228,7 +6916,7 @@ char datatoc_B_blend[]= { 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 16, 17, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,112, 18, 39, 3, 1, 0, 0, 0,176, 15, 39, 3, 1, 0, 0, 0, +128,115,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,240,116,191, 2, 0, 0, 0, 0, 16,114,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10238,7 +6926,7 @@ char datatoc_B_blend[]= { 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -112, 18, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,208, 19, 39, 3, 1, 0, 0, 0, 16, 17, 39, 3, 1, 0, 0, 0, +240,116,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 96,118,191, 2, 0, 0, 0, 0,128,115,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128,142,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 0, 26,196, 0, 0, 0, 0, 163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10248,7 +6936,7 @@ char datatoc_B_blend[]= { 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -208, 19, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112, 18, 39, 3, 1, 0, 0, 0, + 96,118,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,116,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10257,8 +6945,8 @@ char datatoc_B_blend[]= { 43, 1, 0, 0,231, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167, 1,189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 21, 39, 3, 1, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, - 48, 21, 39, 3, 1, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0,255,255,139, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,119,191, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, +208,119,191, 2, 0, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0,255,255,139, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,169,170, 28, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, @@ -10282,17 +6970,17 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, 96, 24, 39, 3, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, -128, 28, 39, 3, 1, 0, 0, 0, 16, 13, 39, 3, 1, 0, 0, 0, 80, 14, 39, 3, 1, 0, 0, 0,208, 19, 39, 3, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, 16,123,191, 2, 0, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, + 80,127,191, 2, 0, 0, 0, 0, 96,111,191, 2, 0, 0, 0, 0,160,112,191, 2, 0, 0, 0, 0, 96,118,191, 2, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,194,129, 3, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,192, 25, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 32, 27, 39, 3, 1, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,112,124,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,224,125,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, @@ -10302,8 +6990,8 @@ char datatoc_B_blend[]= { 152, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 32, 27, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192, 25, 39, 3, 1, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, + 68, 65, 84, 65, 40, 1, 0, 0,224,125,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +112,124,191, 2, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0,152, 4, @@ -10312,338 +7000,223 @@ char datatoc_B_blend[]= { 152, 4,122, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,200, 0, 0, 0,128, 28, 39, 3, 1, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 96, 24, 39, 3, 1, 0, 0, 0,192, 25, 39, 3, 1, 0, 0, 0, 32, 27, 39, 3, 1, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,200, 0, 0, 0, 80,127,191, 2, 0, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16,123,191, 2, 0, 0, 0, 0,112,124,191, 2, 0, 0, 0, 0,224,125,191, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, - 68, 65, 84, 65,160, 0, 0, 0,128, 29, 39, 3, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 32, 52, 39, 3, 1, 0, 0, 0, -192,235, 38, 3, 1, 0, 0, 0,128,220, 38, 3, 1, 0, 0, 0, 0,222, 38, 3, 1, 0, 0, 0, 32,223, 38, 3, 1, 0, 0, 0, -224,223, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,139, 4, 0, 0, 0, 0, 0, 0, 21, 4, 0, 0, - 6, 6,140, 4, 22, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,176, 22, 15, 3, 1, 0, 0, 0, 16, 36, 39, 3, 1, 0, 0, 0, - 32, 51, 39, 3, 1, 0, 0, 0, 96, 30, 39, 3, 1, 0, 0, 0,176, 34, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,240,118, 37, 3, 1, 0, 0, 0,224,129, 36, 3, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 96, 30, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,192, 31, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,160, 0, 0, 0, 96,128,191, 2, 0, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,224,151,191, 2, 0, 0, 0, 0, +192, 76,191, 2, 0, 0, 0, 0, 48, 60,191, 2, 0, 0, 0, 0,176, 61,191, 2, 0, 0, 0, 0,208, 62,191, 2, 0, 0, 0, 0, +144, 63,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,139, 4, 0, 0, 0, 0, 0, 0, 21, 4, 0, 0, + 6, 6,140, 4, 22, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,135,191, 2, 0, 0, 0, 0, +208,150,191, 2, 0, 0, 0, 0, 64,129,191, 2, 0, 0, 0, 0,192,133,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, + 64,129,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,176,130,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,202, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128,145, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,139, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 41, 68, 0, 0,200, 65, 0,192, 41, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,140, 4, 26, 0,140, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,139, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 4, 26, 0, 0, 0, 1, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 28, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -192, 31, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,176, 34, 39, 3, 1, 0, 0, 0, 96, 30, 39, 3, 1, 0, 0, 0, +176,130,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,192,133,191, 2, 0, 0, 0, 0, 64,129,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 67, 0,128,122,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 67, 1,128,122,196, 0, 0, 0, 0, 203, 0, 0, 0,220, 0, 0, 0, 18, 0, 0, 0,251, 3, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, 18, 0, 0, 0,251, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,220, 0,252, 3,203, 0,234, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,219, 0, 0, 0, 26, 0, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220, 0,252, 3, 0, 0, 4, 0, - 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112, 24, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 32, 33, 39, 3, 1, 0, 0, 0, 32, 33, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 32, 33, 39, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48, 27, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 77, 65, 71, 69, 95, 80, 84, 95,103,112,101,110, 99,105,108, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 77, 65, 71, 69, 95, 80, 84, 95,103,112,101,110, 99,105,108, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71,114,101, 97,115,101, 32, 80,101,110, 99,105,108, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,196,255,203, 0, 36, 0, 0, 0, 0, 0, 0, 0, 39, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176, 34, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,192, 31, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 67, -154,153,121,191,205,204,252, 63, 0, 0,140,191, 0, 0, 6, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176, 3, 0, 0, 0, 0, 0, 0,252, 3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,220, 0, 0, 0,139, 4, 0, 0, 26, 0, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,176, 3,252, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -144, 23, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,168, 0, 0, 0, 16, 36, 39, 3, 1, 0, 0, 0,167, 0, 0, 0, 1, 0, 0, 0, - 0, 47, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48,186,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,240, 36, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 80, 38, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0, 42, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0,168, 2, 26, 0,168, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167, 2, 0, 0, 85, 0, 0, 0,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,168, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80, 38, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -176, 39, 39, 3, 1, 0, 0, 0,240, 36, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, - 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, - 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,164, 3, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176, 39, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 16, 41, 39, 3, 1, 0, 0, 0, 80, 38, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, - 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, - 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, - 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167, 2, 0, 0,111, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 16, 41, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -112, 42, 39, 3, 1, 0, 0, 0,176, 39, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128,142,196, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 35, 67, 0, 0, 26,196, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, - 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, - 18, 0, 0, 0, 6, 0,180, 0,122, 2,163, 0,104, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,167, 2, 0, 0,167, 2, 0, 0,111, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, +192,133,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,130,191, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 67,154,153,121,191,205,204,252, 63, 0, 0,140,191, 0, 0, 6, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,176, 3, 0, 0, 0, 0, 0, 0,252, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,112, 42, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 16, 41, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220, 0, 0, 0,139, 4, 0, 0, + 26, 0, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176, 3,252, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,168, 0, 0, 0, + 48,135,191, 2, 0, 0, 0, 0,167, 0, 0, 0, 1, 0, 0, 0,144,146,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,160, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, + 32,136,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,144,137,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 42, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167, 2, 0, 0,111, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,168, 2,164, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,167, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,168, 2, 26, 0,168, 2, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167, 2, 0, 0, + 85, 0, 0, 0,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 2, 26, 0, 0, 0, 1, 0, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, +144,137,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0,139,191, 2, 0, 0, 0, 0, 32,136,191, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0, +143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208, 43, 39, 3, 1, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0,208, 43, 39, 3, 1, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, -226,225,191, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, - 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0, -162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63, - 69,239,209, 62, 70,119,105, 63,176, 84, 89,188, 0, 0, 0, 0, 53,177,205,190,142, 74, 70, 62,166, 33,101, 63, 0, 0, 0, 0, -185,158, 81, 63, 35, 44,185,190, 43, 61,228, 62, 0, 0, 0, 0,164, 96, 68, 65,111,121,173,192,248,209,213, 64, 0, 0,128, 63, -192, 90, 29, 63,208,249,224,190,222,160, 81,191,184,158, 81,191,253,253,174, 63,140,225, 88, 62, 9, 46,185, 62, 35, 44,185, 62, -232,229,162,188,206,156,122, 63,129, 63,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 96,132,111, 65,214,211,111, 65, -250, 8,140, 62,174,189, 27, 63,224, 25, 17,188, 0, 64,153,181,195, 13,188,190,191, 73, 53, 62, 99,126, 81, 63, 0,128,163, 53, -215,104, 25,196,134,132,135, 67, 37, 9,167,195,136,252, 71,194, 3, 54, 25, 68,159, 87,135,195,205,209,166, 67,151,254, 71, 66, - 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0, -162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63, -192, 90, 29, 63,208,249,224,190,222,160, 81,191,184,158, 81,191,253,253,174, 63,140,225, 88, 62, 9, 46,185, 62, 35, 44,185, 62, -232,229,162,188,206,156,122, 63,129, 63,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 96,132,111, 65,214,211,111, 65, +111, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,164, 3, 0, 0, 5, 0, + 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, + 0,139,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,112,140,191, 2, 0, 0, 0, 0,144,137,191, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0, +143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167, 2, 0, 0, +111, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, + 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190,214,211,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, -172,148, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, +112,140,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,224,141,191, 2, 0, 0, 0, 0, 0,139,191, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 35, 67, 0,128,142,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 0, 26,196, 0, 0, 0, 0, +163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0,122, 2,163, 0,104, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167, 2, 0, 0,167, 2, 0, 0, +111, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, + 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, +224,141,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,140,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, - 0, 47, 39, 3, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, 32, 51, 39, 3, 1, 0, 0, 0, 16, 36, 39, 3, 1, 0, 0, 0, -240, 36, 39, 3, 1, 0, 0, 0,112, 42, 39, 3, 1, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0, 7, 0, 48,194,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167, 2, 0, 0, +111, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 2,164, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, - 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 96, 48, 39, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,192, 49, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,152, 4, 26, 0,152, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0,101, 0, 0, 0,126, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,143,191, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, + 80,143,191, 2, 0, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0,226,225,191, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, + 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, + 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63, 69,239,209, 62, 70,119,105, 63,176, 84, 89,188, 0, 0, 0, 0, + 53,177,205,190,142, 74, 70, 62,166, 33,101, 63, 0, 0, 0, 0,185,158, 81, 63, 35, 44,185,190, 43, 61,228, 62, 0, 0, 0, 0, +164, 96, 68, 65,111,121,173,192,248,209,213, 64, 0, 0,128, 63,192, 90, 29, 63,208,249,224,190,222,160, 81,191,184,158, 81,191, +253,253,174, 63,140,225, 88, 62, 9, 46,185, 62, 35, 44,185, 62,232,229,162,188,206,156,122, 63,129, 63,228,190, 42, 61,228,190, + 0, 0, 0, 0, 0, 0, 0, 0, 96,132,111, 65,214,211,111, 65,250, 8,140, 62,174,189, 27, 63,224, 25, 17,188, 0, 64,153,181, +195, 13,188,190,191, 73, 53, 62, 99,126, 81, 63, 0,128,163, 53,215,104, 25,196,134,132,135, 67, 37, 9,167,195,136,252, 71,194, + 3, 54, 25, 68,159, 87,135,195,205,209,166, 67,151,254, 71, 66, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, + 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63,192, 90, 29, 63,208,249,224,190,222,160, 81,191,184,158, 81,191, +253,253,174, 63,140,225, 88, 62, 9, 46,185, 62, 35, 44,185, 62,232,229,162,188,206,156,122, 63,129, 63,228,190, 42, 61,228,190, + 0, 0, 0, 0, 0, 0, 0, 0, 96,132,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,192, 49, 39, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 48, 39, 3, 1, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, - 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, - 18, 0, 0, 0,121, 2, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, - 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0,152, 4,122, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0,127, 0, 0, 0,248, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190, +214,211,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0,172,148, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0, 32, 51, 39, 3, 1, 0, 0, 0, -172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 39, 3, 1, 0, 0, 0, 96, 48, 39, 3, 1, 0, 0, 0, -192, 49, 39, 3, 1, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,144,146,191, 2, 0, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, +208,150,191, 2, 0, 0, 0, 0, 48,135,191, 2, 0, 0, 0, 0, 32,136,191, 2, 0, 0, 0, 0,224,141,191, 2, 0, 0, 0, 0, + 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 32, 52, 39, 3, 1, 0, 0, 0, -194, 0, 0, 0, 1, 0, 0, 0, 64, 82, 39, 3, 1, 0, 0, 0,128, 29, 39, 3, 1, 0, 0, 0,128,223, 38, 3, 1, 0, 0, 0, - 32,223, 38, 3, 1, 0, 0, 0, 96,222, 38, 3, 1, 0, 0, 0,192,222, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -141, 4, 0, 0,128, 7, 0, 0, 81, 1, 0, 0, 21, 4, 0, 0, 1, 1,244, 2,197, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -144, 5, 15, 3, 1, 0, 0, 0, 32, 77, 39, 3, 1, 0, 0, 0, 64, 81, 39, 3, 1, 0, 0, 0, 0, 53, 39, 3, 1, 0, 0, 0, -144, 72, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 11,251, 24, 1, 0, 0, 0, -192,179,251, 24, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0, 53, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 96, 54, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0, 61, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,243, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0,244, 2, 26, 0,244, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,141, 4, 0, 0,128, 7, 0, 0, 81, 1, 0, 0,106, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,244, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176, 13, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, + 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 96, 54, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -224, 58, 39, 3, 1, 0, 0, 0, 0, 53, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, - 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, - 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,141, 4, 0, 0,141, 4, 0, 0,107, 1, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,171, 2, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 16, 10, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 55, 39, 3, 1, 0, 0, 0, - 80, 57, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,192, 55, 39, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 80, 57, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108, 95,115,104,101,108,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,240,147,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 96,149,191, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 68, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, + 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,152, 4, + 26, 0,152, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,151, 4, 0, 0,101, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +152, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108, 95,115,104,101,108,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 84,111,111,108, 32, 83,104,101,108,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0, 96,149,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +240,147,191, 2, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, + 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, + 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0,152, 4, +122, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,151, 4, 0, 0,127, 0, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +152, 4,122, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,196,255,143, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,200, 0, 0, 0,208,150,191, 2, 0, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +144,146,191, 2, 0, 0, 0, 0,240,147,191, 2, 0, 0, 0, 0, 96,149,191, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 80, 57, 39, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 55, 39, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, -111, 98,106,101, 99,116,109,111,100,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, -111, 98,106,101, 99,116,109,111,100,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 98,106,101, 99,116, 32, 84,111,111,108,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,223,253,143, 0,205, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,224, 58, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -208, 61, 39, 3, 1, 0, 0, 0, 96, 54, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, - 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, - 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, - 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,141, 4, 0, 0,128, 7, 0, 0,107, 1, 0, 0,107, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, -224, 11, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 60, 39, 3, 1, 0, 0, 0, - 64, 60, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 64, 60, 39, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,108, 97,115,116, 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,108, 97,115,116, 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, + 68, 65, 84, 65,160, 0, 0, 0,224,151,191, 2, 0, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 32,183,191, 2, 0, 0, 0, 0, + 96,128,191, 2, 0, 0, 0, 0, 48, 63,191, 2, 0, 0, 0, 0,208, 62,191, 2, 0, 0, 0, 0, 16, 62,191, 2, 0, 0, 0, 0, +112, 62,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,141, 4, 0, 0,128, 7, 0, 0, 81, 1, 0, 0, 21, 4, 0, 0, + 1, 1,244, 2,197, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,177,191, 2, 0, 0, 0, 0, + 16,182,191, 2, 0, 0, 0, 0,192,152,191, 2, 0, 0, 0, 0, 32,173,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, +192,152,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 48,154,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 61, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 78,101,119, 32, 83, 99,114,101,101,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,243, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,244, 2, 26, 0,244, 2, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,141, 4, 0, 0,128, 7, 0, 0, + 81, 1, 0, 0,106, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,244, 2, 26, 0, 0, 0, 1, 0, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,216,255,144, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, + 48,154,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,224,158,191, 2, 0, 0, 0, 0,192,152,191, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0, +143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,141, 4, 0, 0,141, 4, 0, 0, +107, 1, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,171, 2, 0, 0, 5, 0, + 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, +224,158,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,240,161,191, 2, 0, 0, 0, 0, 48,154,191, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0, +143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,141, 4, 0, 0,128, 7, 0, 0, +107, 1, 0, 0,107, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, + 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -208, 61, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,144, 72, 39, 3, 1, 0, 0, 0,224, 58, 39, 3, 1, 0, 0, 0, +240,161,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 32,173,191, 2, 0, 0, 0, 0,224,158,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,192, 77,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128,235,195, 0, 0, 0, 0, 163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,232, 1, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,232, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0,233, 1,163, 0,215, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,128, 7, 0, 0, 107, 1, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, - 4, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 80, 7, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48, 63, 39, 3, 1, 0, 0, 0, 0, 71, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 48, 63, 39, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,192, 64, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,111, 98,106,101, 99,116, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,111, 98,106,101, 99,116, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,114, 97,110,115,102,111,114,109, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,254,163, 0,104, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,192, 64, 39, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 80, 66, 39, 3, 1, 0, 0, 0, 48, 63, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,103,112,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,103,112,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 71,114,101, 97,115,101, 32, 80,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,171,252,163, 0, 58, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 80, 66, 39, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,224, 67, 39, 3, 1, 0, 0, 0,192, 64, 39, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100,118,105,101,119, - 95,112,114,111,112,101,114,116,105,101,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100,118,105,101,119, - 95,112,114,111,112,101,114,116,105,101,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86,105,101,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45,253,163, 0, 59, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,224, 67, 39, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -112, 69, 39, 3, 1, 0, 0, 0, 80, 66, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100,118,105,101,119, 95,100,105,115,112,108, 97,121, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100,118,105,101,119, 95,100,105,115,112,108, 97,121, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68,105,115,112,108, 97,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 18,252,163, 0, 3, 1, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -112, 69, 39, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 71, 39, 3, 1, 0, 0, 0,224, 67, 39, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 98, 97, 99,107,103,114, -111,117,110,100, 95,105,109, 97,103,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 98, 97, 99,107,103,114, -111,117,110,100, 95,105,109, 97,103,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 97, 99,107,103,114,111,117,110,100, 32, 73,109, 97,103,101, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,253,252,163, 0, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 0, 71, 39, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,112, 69, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,114, 97,110,115,102,111,114,109, 95,111,114,105,101,110,116, 97,116,105,111,110, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,114, 97,110,115,102,111,114,109, 95,111,114,105,101,110,116, 97,116,105,111,110, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 84,114, 97,110,115,102,111,114,109, 32, 79,114,105,101,110,116, 97,116,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,205,252,163, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -144, 72, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 61, 39, 3, 1, 0, 0, 0, + 32,173,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,161,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,141, 4, 0, 0,128, 7, 0, 0, 107, 1, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,244, 2,171, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112, 6, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 73, 39, 3, 1, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, -240, 73, 39, 3, 1, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,174,191, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, +144,174,191, 2, 0, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,246,154, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, @@ -10667,17 +7240,17 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, 32, 77, 39, 3, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, - 64, 81, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,208,177,191, 2, 0, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, + 16,182,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,194,129, 3, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,128, 78, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,224, 79, 39, 3, 1, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0, 48,179,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,160,180,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, @@ -10687,8 +7260,8 @@ char datatoc_B_blend[]= { 152, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,224, 79, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128, 78, 39, 3, 1, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, + 68, 65, 84, 65, 40, 1, 0, 0,160,180,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48,179,191, 2, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0,152, 4, @@ -10697,329 +7270,708 @@ char datatoc_B_blend[]= { 152, 4,122, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,200, 0, 0, 0, 64, 81, 39, 3, 1, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 32, 77, 39, 3, 1, 0, 0, 0,128, 78, 39, 3, 1, 0, 0, 0,224, 79, 39, 3, 1, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,200, 0, 0, 0, 16,182,191, 2, 0, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +208,177,191, 2, 0, 0, 0, 0, 48,179,191, 2, 0, 0, 0, 0,160,180,191, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, - 68, 65, 84, 65,160, 0, 0, 0, 64, 82, 39, 3, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 32, 52, 39, 3, 1, 0, 0, 0,224,223, 38, 3, 1, 0, 0, 0,128,223, 38, 3, 1, 0, 0, 0,160,224, 38, 3, 1, 0, 0, 0, - 64,224, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,141, 4, 0, 0, 11, 6, 0, 0, 0, 0, 0, 0, 79, 1, 0, 0, - 4, 4,127, 1, 80, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 32, 15, 3, 1, 0, 0, 0,112,112, 39, 3, 1, 0, 0, 0, -224,127, 39, 3, 1, 0, 0, 0, 32, 83, 39, 3, 1, 0, 0, 0,128, 84, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 16,198,254, 24, 1, 0, 0, 0, 96, 80, 42, 3, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 32, 83, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,128, 84, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,160, 0, 0, 0, 32,183,191, 2, 0, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +224,151,191, 2, 0, 0, 0, 0,144, 63,191, 2, 0, 0, 0, 0, 48, 63,191, 2, 0, 0, 0, 0, 80, 64,191, 2, 0, 0, 0, 0, +240, 63,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,141, 4, 0, 0, 11, 6, 0, 0, 0, 0, 0, 0, 79, 1, 0, 0, + 4, 4,127, 1, 80, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,214,191, 2, 0, 0, 0, 0, +112,230,191, 2, 0, 0, 0, 0, 0,184,191, 2, 0, 0, 0, 0,112,185,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, + 0,184,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,112,185,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 67, 0, 0, 0, 0, 0, 0,192, 65, 0, 0, 0, 0, 0,128,133, 67, 0, 0, 0, 0, 0, 0,192, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 1, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0,192, 61, 68, 0, 0,184, 65, 0,192, 61, 68, 0, 0,184, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 11, 1, 24, 0, 11, 1, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,141, 4, 0, 0, 11, 6, 0, 0, 79, 1, 0, 0, 79, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, - 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 16, 35, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -128, 84, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 83, 39, 3, 1, 0, 0, 0, +112,185,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184, 67, 0, 0,179,195, 0, 0, 0, 0, 0, 0, 0, 0, 91, 26,184, 67, 83,245,159,195, 0, 0, 0, 0, 110, 1, 0, 0,127, 1, 0, 0, 18, 0, 0, 0, 79, 1, 0, 0, 0, 0, 0, 0,109, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,109, 1, 0, 0, 18, 0, 0, 0, 79, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,127, 1, 80, 1,110, 1, 62, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,192, 53, 20, 26, 1, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0,141, 4, 0, 0, 11, 6, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,141, 4, 0, 0, 11, 6, 0, 0, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127, 1, 80, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 33, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,224, 85, 39, 3, 1, 0, 0, 0,224,110, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -224, 85, 39, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,112, 87, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 32, 34, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101, -120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101, -120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220,255,112, 1, 36, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0, +128,214,191, 2, 0, 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0, 48,226,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,112, 87, 39, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 0, 89, 39, 3, 1, 0, 0, 0,224, 85, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 84, 1,171,255, 84, 1, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 0, 4, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,192,215,191, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 48,217,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128,211, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,166, 1, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,167, 1, 26, 0,167, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,141, 2, 0, 0, 51, 4, 0, 0, 17, 1, 0, 0, 42, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 0, 89, 39, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,144, 90, 39, 3, 1, 0, 0, 0,112, 87, 39, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 48,217,191, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,160,218,191, 2, 0, 0, 0, 0,192,215,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, + 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, + 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, + 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, + 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,141, 2, 0, 0,141, 2, 0, 0, 43, 1, 0, 0,231, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,189, 0, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,160,218,191, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 16,220,191, 2, 0, 0, 0, 0, 48,217,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, + 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, + 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, + 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, + 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,141, 2, 0, 0, 51, 4, 0, 0, 43, 1, 0, 0, 43, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 2,232,255, 84, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 16,220,191, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,128,221,191, 2, 0, 0, 0, 0,160,218,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, + 0,128,142,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 0, 26,196, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, + 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, + 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, + 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0,122, 2,163, 0,104, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 4, 0, 0, 51, 4, 0, 0, 43, 1, 0, 0,231, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,144, 90, 39, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 32, 92, 39, 3, 1, 0, 0, 0, 0, 89, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,128,221,191, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,220,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -188, 2, 54,255, 84, 1,178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 32, 92, 39, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,176, 93, 39, 3, 1, 0, 0, 0,144, 90, 39, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108, -105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108, -105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65,110,116,105, 45, 65,108,105, 97,115,105,110,103, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,141, 2, 0, 0, 51, 4, 0, 0, 43, 1, 0, 0,231, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167, 1,189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 4,174,255, 84, 1, 58, 0, 20, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,240,222,191, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0,240,222,191, 2, 0, 0, 0, 0, +156, 0, 0, 0, 1, 0, 0, 0,255,255,139, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,169,170, 28, 64, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128, +226,215,163,188, 0, 0, 0,128, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, + 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +214,211,111,193, 0, 0,128, 63, 69,239,209, 62, 70,119,105, 63,176, 84, 89,188, 0, 0, 0, 0, 53,177,205,190,142, 74, 70, 62, +166, 33,101, 63, 0, 0, 0, 0,185,158, 81, 63, 35, 44,185,190, 43, 61,228, 62, 0, 0, 0, 0,164, 96, 68, 65,111,121,173,192, +248,209,213, 64, 0, 0,128, 63,177,157,229, 62, 53,194,123,191,222,160, 81,191,184,158, 81,191,115, 90,127, 63, 63,179,242, 62, + 9, 46,185, 62, 35, 44,185, 62,143,180,109,188, 65, 57, 12, 64,129, 63,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, + 96,132,111, 65,214,211,111, 65,217,236,191, 62, 56,117, 85, 63,240,246, 70,188, 0,224, 32,182, 42, 13, 40,190, 78, 1,162, 61, +203, 52,187, 62, 0, 0,149, 52,215,104, 25,196,134,132,135, 67, 37, 9,167,195,136,252, 71,194, 3, 54, 25, 68,159, 87,135,195, +205,209,166, 67,151,254, 71, 66, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, + 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +214,211,111,193, 0, 0,128, 63,177,157,229, 62, 53,194,123,191,222,160, 81,191,184,158, 81,191,115, 90,127, 63, 63,179,242, 62, + 9, 46,185, 62, 35, 44,185, 62,143,180,109,188, 65, 57, 12, 64,129, 63,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, + 96,132,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,176, 93, 39, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 64, 95, 39, 3, 1, 0, 0, 0, 32, 92, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190,214,211,111, 65,214,211,111, 65, + 0, 0, 0, 0, 0, 0, 0, 0,208,166,141, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 5,130,255, 84, 1,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 64, 95, 39, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,208, 96, 39, 3, 1, 0, 0, 0,176, 93, 39, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, + 68, 65, 84, 65, 32, 1, 0, 0, 48,226,191, 2, 0, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0,112,230,191, 2, 0, 0, 0, 0, +128,214,191, 2, 0, 0, 0, 0,192,215,191, 2, 0, 0, 0, 0,128,221,191, 2, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, +144,227,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0,229,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,152, 4, 26, 0,152, 4, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, +101, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4, 26, 0, 0, 0, 1, 0, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184, 6,127,255, 84, 1,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, + 0,229,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,227,191, 2, 0, 0, 0, 0, + 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66, +205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0,152, 4,122, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, +127, 0, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,208, 96, 39, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, - 96, 98, 39, 3, 1, 0, 0, 0, 64, 95, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0, +112,230,191, 2, 0, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,226,191, 2, 0, 0, 0, 0, +144,227,191, 2, 0, 0, 0, 0, 0,229,191, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 12, 8,232,255, 84, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 83, 78, 0, 0,208, 0, 0, 0, + 16,232,191, 2, 0, 0, 0, 0,190, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 59,191, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 86,105,100,101,111, 32, 69,100,105,116,105,110,103, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,233,191, 2, 0, 0, 0, 0, + 64,237,191, 2, 0, 0, 0, 0,160,237,191, 2, 0, 0, 0, 0, 16,245,191, 2, 0, 0, 0, 0,128,245,191, 2, 0, 0, 0, 0, +144, 62,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 85,192, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 96, 98, 39, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,240, 99, 39, 3, 1, 0, 0, 0,208, 96, 39, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112, -114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112, -114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,111,115,116, 32, 80,114,111, 99,101,115,115,105,110,103, 0, + 68, 65, 84, 65, 32, 0, 0, 0, 32,233,191, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,128,233,191, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, +128,233,191, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,224,233,191, 2, 0, 0, 0, 0, 32,233,191, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,224,233,191, 2, 0, 0, 0, 0, +191, 0, 0, 0, 1, 0, 0, 0, 64,234,191, 2, 0, 0, 0, 0,128,233,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +128, 7, 49, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 64,234,191, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, +160,234,191, 2, 0, 0, 0, 0,224,233,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0,160,234,191, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 0,235,191, 2, 0, 0, 0, 0, + 64,234,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, + 0,235,191, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 96,235,191, 2, 0, 0, 0, 0,160,234,191, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 96,235,191, 2, 0, 0, 0, 0, +191, 0, 0, 0, 1, 0, 0, 0,192,235,191, 2, 0, 0, 0, 0, 0,235,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +128, 7,240, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,192,235,191, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, + 32,236,191, 2, 0, 0, 0, 0, 96,235,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0, 32,236,191, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,128,236,191, 2, 0, 0, 0, 0, +192,235,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 3, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, +128,236,191, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,224,236,191, 2, 0, 0, 0, 0, 32,236,191, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,224,236,191, 2, 0, 0, 0, 0, +191, 0, 0, 0, 1, 0, 0, 0, 64,237,191, 2, 0, 0, 0, 0,128,236,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 80, 3,240, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 64,237,191, 2, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,224,236,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 88, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,160,237,191, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 16,238,191, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,128,233,191, 2, 0, 0, 0, 0,224,233,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 16,238,191, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,128,238,191, 2, 0, 0, 0, 0, +160,237,191, 2, 0, 0, 0, 0,128,233,191, 2, 0, 0, 0, 0,160,234,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,128,238,191, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,240,238,191, 2, 0, 0, 0, 0, + 16,238,191, 2, 0, 0, 0, 0,224,233,191, 2, 0, 0, 0, 0, 0,235,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,240,238,191, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 96,239,191, 2, 0, 0, 0, 0, +128,238,191, 2, 0, 0, 0, 0,160,234,191, 2, 0, 0, 0, 0, 0,235,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 96,239,191, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,208,239,191, 2, 0, 0, 0, 0, +240,238,191, 2, 0, 0, 0, 0, 0,235,191, 2, 0, 0, 0, 0, 96,235,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,208,239,191, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 64,240,191, 2, 0, 0, 0, 0, + 96,239,191, 2, 0, 0, 0, 0, 32,233,191, 2, 0, 0, 0, 0,192,235,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 64,240,191, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,176,240,191, 2, 0, 0, 0, 0, +208,239,191, 2, 0, 0, 0, 0,160,234,191, 2, 0, 0, 0, 0, 32,236,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,176,240,191, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 32,241,191, 2, 0, 0, 0, 0, + 64,240,191, 2, 0, 0, 0, 0,192,235,191, 2, 0, 0, 0, 0,128,236,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 32,241,191, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,144,241,191, 2, 0, 0, 0, 0, +176,240,191, 2, 0, 0, 0, 0,128,236,191, 2, 0, 0, 0, 0,224,236,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,144,241,191, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0,242,191, 2, 0, 0, 0, 0, + 32,241,191, 2, 0, 0, 0, 0, 32,236,191, 2, 0, 0, 0, 0,224,236,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 0,242,191, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,112,242,191, 2, 0, 0, 0, 0, +144,241,191, 2, 0, 0, 0, 0, 96,235,191, 2, 0, 0, 0, 0, 64,237,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,112,242,191, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,224,242,191, 2, 0, 0, 0, 0, + 0,242,191, 2, 0, 0, 0, 0, 64,234,191, 2, 0, 0, 0, 0, 64,237,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,224,242,191, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 80,243,191, 2, 0, 0, 0, 0, +112,242,191, 2, 0, 0, 0, 0,192,235,191, 2, 0, 0, 0, 0, 64,237,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 80,243,191, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,192,243,191, 2, 0, 0, 0, 0, +224,242,191, 2, 0, 0, 0, 0, 32,233,191, 2, 0, 0, 0, 0, 64,234,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,192,243,191, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 48,244,191, 2, 0, 0, 0, 0, + 80,243,191, 2, 0, 0, 0, 0, 0,235,191, 2, 0, 0, 0, 0, 32,236,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 48,244,191, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,160,244,191, 2, 0, 0, 0, 0, +192,243,191, 2, 0, 0, 0, 0, 96,235,191, 2, 0, 0, 0, 0,224,236,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,160,244,191, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 16,245,191, 2, 0, 0, 0, 0, + 48,244,191, 2, 0, 0, 0, 0,160,234,191, 2, 0, 0, 0, 0,128,236,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 16,245,191, 2, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +160,244,191, 2, 0, 0, 0, 0, 96,235,191, 2, 0, 0, 0, 0,128,236,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,160, 0, 0, 0,128,245,191, 2, 0, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 64,249,191, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,160,234,191, 2, 0, 0, 0, 0,128,233,191, 2, 0, 0, 0, 0,224,233,191, 2, 0, 0, 0, 0, + 0,235,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 23, 4, 0, 0, 49, 4, 0, 0, + 7, 7,129, 7, 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176, 84,192, 2, 0, 0, 0, 0, +176, 84,192, 2, 0, 0, 0, 0, 96,246,191, 2, 0, 0, 0, 0,208,247,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, + 96,246,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,208,247,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,128,161, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 32,240, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 8,232,255, 84, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,129, 7, 26, 0,129, 7, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, + 23, 4, 0, 0, 48, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 7, 26, 0, 0, 0, 1, 0, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, +208,247,191, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,246,191, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192, 0, 0, 0, 0, +112, 7, 0, 0,129, 7, 0, 0, 18, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 0, 0,111, 7, 0, 0, 18, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,129, 7, 7, 0,112, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,240, 99, 39, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -128,101, 39, 3, 1, 0, 0, 0, 96, 98, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 49, 4, 0, 0, 49, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, + 64,249,191, 2, 0, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,144, 5,192, 2, 0, 0, 0, 0,128,245,191, 2, 0, 0, 0, 0, + 32,233,191, 2, 0, 0, 0, 0,192,235,191, 2, 0, 0, 0, 0, 64,237,191, 2, 0, 0, 0, 0, 64,234,191, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 15, 15,129, 7, 88, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,253,191, 2, 0, 0, 0, 0, 48, 4,192, 2, 0, 0, 0, 0, + 32,250,191, 2, 0, 0, 0, 0,144,251,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 32,250,191, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,144,251,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 32,240, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,129, 7, 26, 0,129, 7, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 7, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 52, 8,232,255, 84, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,144,251,191, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,250,191, 2, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, + 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, + 18, 0, 0, 0, 61, 0, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, + 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0,129, 7, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 26, 0, 0, 0, 87, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 7, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -128,101, 39, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 16,103, 39, 3, 1, 0, 0, 0,240, 99, 39, 3, 1, 0, 0, 0, - 0,218,240, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95, 99,111,110,116,101,120,116, 95, -109,101,115,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95, 99,111,110,116,101,120,116, 95, -109,101,115,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0, 0,253,191, 2, 0, 0, 0, 0, +172, 0, 0, 0, 1, 0, 0, 0, 48, 4,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,255,112, 1, 36, 0, 0, 0, 0, 0, 0, 0, 6, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 16,103, 39, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -160,104, 39, 3, 1, 0, 0, 0,128,101, 39, 3, 1, 0, 0, 0,224,222,240, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 95, 80, 84, 95,110,111,114,109, 97,108,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 16,254,191, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,128,255,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,203, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 6, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 88, 6, 26, 0, 88, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 95, 80, 84, 95,110,111,114,109, 97,108,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,128,255,191, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,254,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 78,111,114,109, 97,108,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,172,254,112, 1, 58, 0, 0, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -160,104, 39, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 48,106, 39, 3, 1, 0, 0, 0, 16,103, 39, 3, 1, 0, 0, 0, -192,227,240, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95,115,101,116,116,105,110,103,115, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 6, 0, 0, 26, 0, 0, 0, 55, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 6, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,240, 0,192, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0,240, 0,192, 2, 0, 0, 0, 0, +156, 0, 0, 0, 1, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,213,108, 66, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128, +226,215,163,188, 0, 0, 0,128, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 32,193, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 32, 65, 0, 0,128, 63, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,213,108, 66, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, +184,175, 31, 65, 0, 0, 32, 65,161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 91,138, 60, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, + 98,127,249, 67,129,255, 71, 66, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 32,193, 0, 0,128, 63, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,213,108, 66, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, +184,175, 31, 65, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 52,149,147, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95,115,101,116,116,105,110,103,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,101,116,116,105,110,103,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,170,254,112, 1, 36, 0, 0, 0, 0, 0, 4, 0, 6, 0, - 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 48,106, 39, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -192,107, 39, 3, 1, 0, 0, 0,160,104, 39, 3, 1, 0, 0, 0,160,232,240, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 95, 80, 84, 95,118,101,114,116,101,120, 95,103,114,111,117,112,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 1, 0, 0, 48, 4,192, 2, 0, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,253,191, 2, 0, 0, 0, 0, 16,254,191, 2, 0, 0, 0, 0,128,255,191, 2, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 95, 80, 84, 95,118,101,114,116,101,120, 95,103,114,111,117,112,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, +159, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, +144, 5,192, 2, 0, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,176, 27,192, 2, 0, 0, 0, 0, 64,249,191, 2, 0, 0, 0, 0, +192,235,191, 2, 0, 0, 0, 0,128,236,191, 2, 0, 0, 0, 0, 96,235,191, 2, 0, 0, 0, 0, 64,237,191, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 89, 0, 0, 0,239, 1, 0, 0, 8, 8,129, 7,151, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 10,192, 2, 0, 0, 0, 0,160, 26,192, 2, 0, 0, 0, 0, +112, 6,192, 2, 0, 0, 0, 0, 80, 9,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,112, 6,192, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0,224, 7,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 31, 68, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 32,240, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0, 96,191, 68, 0, 0,200, 65, 0, 96,191, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,129, 7, 26, 0,129, 7, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 89, 0, 0, 0,114, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 7, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 86,101,114,116,101,120, 32, 71,114,111,117,112,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,106,254,112, 1, 76, 0, 0, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,224, 7,192, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 80, 9,192, 2, 0, 0, 0, 0,112, 6,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 67, + 0,128,181,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 67, 0,128,181,195, 0, 0, 0, 0,203, 0, 0, 0,220, 0, 0, 0, + 18, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, + 18, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, + 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,220, 0,125, 1,203, 0,107, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,165, 6, 0, 0,128, 7, 0, 0,115, 0, 0, 0,239, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220, 0,125, 1, 0, 0, 4, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -192,107, 39, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 80,109, 39, 3, 1, 0, 0, 0, 48,106, 39, 3, 1, 0, 0, 0, -128,237,240, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95,115,104, 97,112,101, 95,107,101, -121,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95,115,104, 97,112,101, 95,107,101, -121,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,112,101, 32, 75,101,121,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89,254,112, 1, 69, 0, 0, 0, 0, 0, 4, 0, 6, 0, - 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80, 9,192, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 7,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, + 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 17, 0, 0, 0, + 18, 0, 0, 0,124, 1, 0, 0, 18, 0, 0, 0,164, 6, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,164, 6, 0, 0, + 18, 0, 0, 0,124, 1, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 0,124,146, 72, 0, 0, 0, 66, 10,215, 35, 60, 0, 0,200, 66, +105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 8, 0,165, 6,125, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,164, 6, 0, 0,115, 0, 0, 0,239, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,165, 6,125, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 80,109, 39, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, -224,110, 39, 3, 1, 0, 0, 0,192,107, 39, 3, 1, 0, 0, 0, 96,242,240, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 95, 80, 84, 95,117,118, 95,116,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0,192, 10,192, 2, 0, 0, 0, 0, +163, 0, 0, 0, 1, 0, 0, 0, 96, 22,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 95, 80, 84, 95,117,118, 95,116,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 85, 86, 32, 84,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 91,255,112, 1, 69, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -224,110, 39, 3, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,109, 39, 3, 1, 0, 0, 0, -192,247,240, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95,118,101,114,116,101,120, 95, 99, -111,108,111,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95,118,101,114,116,101,120, 95, 99, -111,108,111,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86,101,114,116,101,120, 32, 67,111,108,111,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254,254,112, 1, 69, 0, 0, 0, 0, 0, 0, 0, 7, 0, - 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, +240, 11,192, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 96, 13,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128,191, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,251, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,252, 5, 26, 0,252, 5, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,251, 5, 0, 0, + 85, 0, 0, 0,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,252, 5, 26, 0, 0, 0, 1, 0, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0,112,112, 39, 3, 1, 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0, -192,123, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, + 96, 13,192, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,208, 14,192, 2, 0, 0, 0, 0,240, 11,192, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0, +143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +111, 0, 0, 0,223, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,113, 1, 0, 0, 5, 0, + 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, +208, 14,192, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 64, 16,192, 2, 0, 0, 0, 0, 96, 13,192, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0, +143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,251, 5, 0, 0, +111, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, + 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, + 64, 16,192, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,176, 17,192, 2, 0, 0, 0, 0,208, 14,192, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 35, 67, 0,128,142,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 0, 26,196, 0, 0, 0, 0, +163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0,122, 2,163, 0,104, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,251, 5, 0, 0,251, 5, 0, 0, +111, 0, 0, 0,223, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, + 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, +176, 17,192, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 16,192, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,251, 5, 0, 0, +111, 0, 0, 0,223, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,252, 5,113, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 19,192, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, + 32, 19,192, 2, 0, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,200, 79,145, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, + 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, + 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63, 69,239,209, 62, 70,119,105, 63,176, 84, 89,188, 0, 0, 0, 0, + 53,177,205,190,142, 74, 70, 62,166, 33,101, 63, 0, 0, 0, 0,185,158, 81, 63, 35, 44,185,190, 43, 61,228, 62, 0, 0, 0, 0, +164, 96, 68, 65,111,121,173,192,248,209,213, 64, 0, 0,128, 63,178,157,229, 62,241,130,233,191,222,160, 81,191,184,158, 81,191, +117, 90,127, 63, 14, 28, 97, 63, 9, 46,185, 62, 35, 44,185, 62,145,180,109,188,119, 15,130, 64,129, 63,228,190, 42, 61,228,190, + 0, 0, 0, 0, 0, 0, 0, 0, 96,132,111, 65,214,211,111, 65,112,240,191, 62,108,116, 85, 63, 80,184, 70,188, 0, 0, 46,180, +159, 49,181,189,125,172, 46, 61, 7,213, 73, 62, 0, 64,143,180,182,107, 25,196, 13,135,135, 67, 70, 12,167,195, 71, 0, 72,194, +225, 56, 25, 68, 38, 90,135,195,237,212,166, 67, 84, 2, 72, 66, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, + 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63,178,157,229, 62,241,130,233,191,222,160, 81,191,184,158, 81,191, +117, 90,127, 63, 14, 28, 97, 63, 9, 46,185, 62, 35, 44,185, 62,145,180,109,188,119, 15,130, 64,129, 63,228,190, 42, 61,228,190, + 0, 0, 0, 0, 0, 0, 0, 0, 96,132,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190, +214,211,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, 13,114,156, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 0, 4, 0, 0, 0, - 2, 0, 1, 0, 0, 0, 0, 0, 64,148, 21, 26, 1, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,176,113, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 16,115, 39, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128,211, 67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, 96, 22,192, 2, 0, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, +160, 26,192, 2, 0, 0, 0, 0,192, 10,192, 2, 0, 0, 0, 0,240, 11,192, 2, 0, 0, 0, 0,176, 17,192, 2, 0, 0, 0, 0, + 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,176,108,192, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, + 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,192, 23,192, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 48, 25,192, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,166, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, - 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,167, 1, - 26, 0,167, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -141, 2, 0, 0, 51, 4, 0, 0, 17, 1, 0, 0, 42, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, + 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,152, 4, + 26, 0,152, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,151, 4, 0, 0,101, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +152, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0, 48, 25,192, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +192, 23,192, 2, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, + 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, + 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0,152, 4, +122, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,151, 4, 0, 0,127, 0, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +152, 4,122, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,200, 0, 0, 0,160, 26,192, 2, 0, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 96, 22,192, 2, 0, 0, 0, 0,192, 23,192, 2, 0, 0, 0, 0, 48, 25,192, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 16,115, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,112,116, 39, 3, 1, 0, 0, 0, -176,113, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, + 68, 65, 84, 65,160, 0, 0, 0,176, 27,192, 2, 0, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,144, 62,192, 2, 0, 0, 0, 0, +144, 5,192, 2, 0, 0, 0, 0,128,236,191, 2, 0, 0, 0, 0,160,234,191, 2, 0, 0, 0, 0, 32,236,191, 2, 0, 0, 0, 0, +224,236,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 3, 0, 0,241, 1, 0, 0, 21, 4, 0, 0, + 2, 2, 80, 3, 37, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 34,192, 2, 0, 0, 0, 0, +128, 61,192, 2, 0, 0, 0, 0,144, 28,192, 2, 0, 0, 0, 0,224, 32,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, +144, 28,192, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 30,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,128, 78, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 84, 68, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 79, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,103, 68, 0, 0,200, 65, 0,192,103, 68, 0, 0,200, 65, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 80, 3, 26, 0, 80, 3, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 3, 0, 0, +241, 1, 0, 0, 10, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 3, 26, 0, 0, 0, 1, 0, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, + 0, 30,192, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,112, 31,192, 2, 0, 0, 0, 0,144, 28,192, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 72, 67, 0, 0,112,193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 67, 0,128,252,195, 0, 0, 0, 0, +200, 0, 0, 0,217, 0, 0, 0, 18, 0, 0, 0, 10, 2, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 0, 0,199, 0, 0, 0, 18, 0, 0, 0, 10, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 10, 0, 0, 0, 2, 0, 3, 3, 0, 0, 0, 4, 6, 0,217, 0, 11, 2,200, 0,249, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 0, 0, 0, + 11, 2, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,217, 0, 11, 2, 0, 0, 2, 0, + 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, +112, 31,192, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,224, 32,192, 2, 0, 0, 0, 0, 0, 30,192, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 3, 0, 0, 79, 3, 0, 0, + 11, 2, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, + 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, +224, 32,192, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112, 31,192, 2, 0, 0, 0, 0, + 0, 0, 16,193, 0, 0,130, 67, 0, 0,160,192, 0, 0,160, 64, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 16,193, 0, 0, 32, 65, + 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 10, 2, 0, 0, 18, 0, 0, 0,118, 2, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, + 18, 0, 0, 0,118, 2, 0, 0, 18, 0, 0, 0, 10, 2, 0, 0,111, 18,131, 58,111, 18,131, 58, 0,124,146, 72, 0, 80, 67, 71, + 0, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0,119, 2, 11, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,217, 0, 0, 0, 79, 3, 0, 0, + 11, 2, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,119, 2, 11, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, + 80, 34,192, 2, 0, 0, 0, 0,161, 0, 0, 0, 1, 0, 0, 0, 64, 40,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +144, 35,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,144, 35,192, 2, 0, 0, 0, 0, 20, 1, 0, 0, 1, 0, 0, 0, + 64, 85,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,240, 35,192, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 96, 37,192, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 38, 68, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,103, 68, 0, 0,200, 65, + 0,192,103, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,152, 2, + 26, 0,152, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,151, 2, 0, 0,225, 1, 0, 0,250, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +152, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0, 96, 37,192, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,208, 38,192, 2, 0, 0, 0, 0, +240, 35,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 67, 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 67, + 0,128, 4,196, 0, 0, 64,193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,180, 0, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0, 23, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 8, 0, 0, 0, 2, 0, 3, 3, 0, 0, 2, 4, 6, 0,181, 0, + 24, 2,181, 0, 6, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,180, 0, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +181, 0, 24, 2, 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,208, 38,192, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 96, 37,192, 2, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,104, 68, 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,104, 68, + 0,128, 4,196, 0, 0, 64,193,210, 1, 0, 0,227, 1, 0, 0, 18, 0, 0, 0, 23, 2, 0, 0, 0, 0, 0, 0,209, 1, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,209, 1, 0, 0, 18, 0, 0, 0, 23, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,124,146, 72, 0, 64, 28, 70, 10,215, 35, 60, 0, 0, 72, 66, 74, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 4, 4, 0,227, 1, + 24, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +181, 0, 0, 0,151, 2, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +227, 1, 24, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 8, 1, 0, 0, 64, 40,192, 2, 0, 0, 0, 0, 21, 1, 0, 0, 1, 0, 0, 0,224, 45,192, 2, 0, 0, 0, 0, + 80, 34,192, 2, 0, 0, 0, 0,240, 35,192, 2, 0, 0, 0, 0,208, 38,192, 2, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 85,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,144, 41,192, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 43,192, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,202, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,104, 68, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 41, 68, 0, 0,200, 65, + 0,192, 41, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,160, 3, + 26, 0,160, 3, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,159, 3, 0, 0, 85, 0, 0, 0,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +160, 3, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0, 0, 43,192, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,112, 44,192, 2, 0, 0, 0, 0, +144, 41,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 67, 0,128,100,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 67, + 0,128,100,196, 0, 0, 0, 0,172, 0, 0, 0,189, 0, 0, 0, 18, 0, 0, 0,163, 3, 0, 0, 0, 0, 0, 0,171, 0, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,171, 0, 0, 0, 18, 0, 0, 0,163, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,189, 0, +164, 3,172, 0,146, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,111, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 4, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,112, 44,192, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 43,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 67, 0, 0,168,191, 0, 0, 20, 64, + 0, 0,169,191, 0,128, 20, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 3, 0, 0, 0, 0, 0, 0,164, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,159, 3, 0, 0,111, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +160, 3,164, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,168, 0, 0, 0,224, 45,192, 2, 0, 0, 0, 0,167, 0, 0, 0, 1, 0, 0, 0, 64, 57,192, 2, 0, 0, 0, 0, + 64, 40,192, 2, 0, 0, 0, 0,144, 41,192, 2, 0, 0, 0, 0,112, 44,192, 2, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,208, 46,192, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 64, 48,192, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 42, 68, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, + 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,168, 2, + 26, 0,168, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,167, 2, 0, 0, 85, 0, 0, 0,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +168, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0, 64, 48,192, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,176, 49,192, 2, 0, 0, 0, 0, +208, 46,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -141, 2, 0, 0,141, 2, 0, 0, 43, 1, 0, 0,231, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0,189, 0, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,111, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0,164, 3, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,112,116, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,208,117, 39, 3, 1, 0, 0, 0, - 16,115, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, + 68, 65, 84, 65, 40, 1, 0, 0,176, 49,192, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 32, 51,192, 2, 0, 0, 0, 0, + 64, 48,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0, 120, 0,143, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -141, 2, 0, 0, 51, 4, 0, 0, 43, 1, 0, 0, 43, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,167, 2, 0, 0,111, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,208,117, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 48,119, 39, 3, 1, 0, 0, 0, -112,116, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128,142,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, + 68, 65, 84, 65, 40, 1, 0, 0, 32, 51,192, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,144, 52,192, 2, 0, 0, 0, 0, +176, 49,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128,142,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 0, 26,196, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0, 122, 2,163, 0,104, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 51, 4, 0, 0, 51, 4, 0, 0, 43, 1, 0, 0,231, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +167, 2, 0, 0,167, 2, 0, 0,111, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 48,119, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208,117, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,144, 52,192, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 32, 51,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -141, 2, 0, 0, 51, 4, 0, 0, 43, 1, 0, 0,231, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, 1,189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,167, 2, 0, 0,111, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +168, 2,164, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,120, 39, 3, 1, 0, 0, 0, - 68, 65, 84, 65,248, 2, 0, 0,144,120, 39, 3, 1, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0,255,255,139, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,169,170, 28, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54,192, 2, 0, 0, 0, 0, + 68, 65, 84, 65,248, 2, 0, 0, 0, 54,192, 2, 0, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0,226,225,191, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 68,239,209, 62, 51,177,205,190, 184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63, 69,239,209, 62, 70,119,105, 63, 176, 84, 89,188, 0, 0, 0, 0, 53,177,205,190,142, 74, 70, 62,166, 33,101, 63, 0, 0, 0, 0,185,158, 81, 63, 35, 44,185,190, - 43, 61,228, 62, 0, 0, 0, 0,164, 96, 68, 65,111,121,173,192,248,209,213, 64, 0, 0,128, 63,177,157,229, 62, 53,194,123,191, -222,160, 81,191,184,158, 81,191,115, 90,127, 63, 63,179,242, 62, 9, 46,185, 62, 35, 44,185, 62,143,180,109,188, 65, 57, 12, 64, -129, 63,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 96,132,111, 65,214,211,111, 65,217,236,191, 62, 56,117, 85, 63, -240,246, 70,188, 0,224, 32,182, 42, 13, 40,190, 78, 1,162, 61,203, 52,187, 62, 0, 0,149, 52,215,104, 25,196,134,132,135, 67, + 43, 61,228, 62, 0, 0, 0, 0,164, 96, 68, 65,111,121,173,192,248,209,213, 64, 0, 0,128, 63,192, 90, 29, 63,208,249,224,190, +222,160, 81,191,184,158, 81,191,253,253,174, 63,140,225, 88, 62, 9, 46,185, 62, 35, 44,185, 62,232,229,162,188,206,156,122, 63, +129, 63,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 96,132,111, 65,214,211,111, 65,250, 8,140, 62,174,189, 27, 63, +224, 25, 17,188, 0, 64,153,181,195, 13,188,190,191, 73, 53, 62, 99,126, 81, 63, 0,128,163, 53,215,104, 25,196,134,132,135, 67, 37, 9,167,195,136,252, 71,194, 3, 54, 25, 68,159, 87,135,195,205,209,166, 67,151,254, 71, 66, 68,239,209, 62, 51,177,205,190, 184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, - 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63,177,157,229, 62, 53,194,123,191, -222,160, 81,191,184,158, 81,191,115, 90,127, 63, 63,179,242, 62, 9, 46,185, 62, 35, 44,185, 62,143,180,109,188, 65, 57, 12, 64, + 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63,192, 90, 29, 63,208,249,224,190, +222,160, 81,191,184,158, 81,191,253,253,174, 63,140,225, 88, 62, 9, 46,185, 62, 35, 44,185, 62,232,229,162,188,206,156,122, 63, 129, 63,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 96,132,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 62, 55, 63, 56,186,224,190, -237,203,148,190, 3,236,234,190,214,211,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0,208,166,141, 59, 0, 0, 0, 0, +237,203,148,190, 3,236,234,190,214,211,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0,172,148, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,192,123, 39, 3, 1, 0, 0, 0, -157, 0, 0, 0, 1, 0, 0, 0,224,127, 39, 3, 1, 0, 0, 0,112,112, 39, 3, 1, 0, 0, 0,176,113, 39, 3, 1, 0, 0, 0, - 48,119, 39, 3, 1, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, 64, 57,192, 2, 0, 0, 0, 0, +157, 0, 0, 0, 1, 0, 0, 0,128, 61,192, 2, 0, 0, 0, 0,224, 45,192, 2, 0, 0, 0, 0,208, 46,192, 2, 0, 0, 0, 0, +144, 52,192, 2, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, - 48,194,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 32,125, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -128,126, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,160, 58,192, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 16, 60,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, @@ -11028,8 +7980,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0,152, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,128,126, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 32,125, 39, 3, 1, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 16, 60,192, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,160, 58,192, 2, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66, 112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, @@ -11038,320 +7990,143 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0,224,127, 39, 3, 1, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,192,123, 39, 3, 1, 0, 0, 0, 32,125, 39, 3, 1, 0, 0, 0,128,126, 39, 3, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0,128, 61,192, 2, 0, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 64, 57,192, 2, 0, 0, 0, 0,160, 58,192, 2, 0, 0, 0, 0, 16, 60,192, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 6, 0, 0, 0, 83, 78, 0, 0,208, 0, 0, 0, 96,129, 39, 3, 1, 0, 0, 0,190, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,112,219, 38, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 82, 86,105,100,101,111, 32, 69,100,105,116,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,112,130, 39, 3, 1, 0, 0, 0,144,134, 39, 3, 1, 0, 0, 0,240,134, 39, 3, 1, 0, 0, 0, - 80,141, 39, 3, 1, 0, 0, 0,176,141, 39, 3, 1, 0, 0, 0, 32,212, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48,186,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,155,180, 21, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,112,130, 39, 3, 1, 0, 0, 0, -191, 0, 0, 0, 1, 0, 0, 0,208,130, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,208,130, 39, 3, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, - 48,131, 39, 3, 1, 0, 0, 0,112,130, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 4, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0, 48,131, 39, 3, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,144,131, 39, 3, 1, 0, 0, 0, -208,130, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 49, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, -144,131, 39, 3, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,240,131, 39, 3, 1, 0, 0, 0, 48,131, 39, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,240,131, 39, 3, 1, 0, 0, 0, -191, 0, 0, 0, 1, 0, 0, 0, 80,132, 39, 3, 1, 0, 0, 0,144,131, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 80,132, 39, 3, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, -176,132, 39, 3, 1, 0, 0, 0,240,131, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 22, 4, 1, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0,176,132, 39, 3, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 16,133, 39, 3, 1, 0, 0, 0, - 80,132, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7,240, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, - 16,133, 39, 3, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,112,133, 39, 3, 1, 0, 0, 0,176,132, 39, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,112,133, 39, 3, 1, 0, 0, 0, -191, 0, 0, 0, 1, 0, 0, 0,208,133, 39, 3, 1, 0, 0, 0, 16,133, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80, 3, 22, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,208,133, 39, 3, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, - 48,134, 39, 3, 1, 0, 0, 0,112,133, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 1, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0, 48,134, 39, 3, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,144,134, 39, 3, 1, 0, 0, 0, -208,133, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 3,240, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, -144,134, 39, 3, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,134, 39, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 88, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,240,134, 39, 3, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0, 80,135, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,130, 39, 3, 1, 0, 0, 0, - 48,131, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 80,135, 39, 3, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0,176,135, 39, 3, 1, 0, 0, 0,240,134, 39, 3, 1, 0, 0, 0,208,130, 39, 3, 1, 0, 0, 0, -240,131, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,176,135, 39, 3, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0, 16,136, 39, 3, 1, 0, 0, 0, 80,135, 39, 3, 1, 0, 0, 0, 48,131, 39, 3, 1, 0, 0, 0, - 80,132, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 16,136, 39, 3, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0,112,136, 39, 3, 1, 0, 0, 0,176,135, 39, 3, 1, 0, 0, 0,240,131, 39, 3, 1, 0, 0, 0, - 80,132, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,112,136, 39, 3, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0,208,136, 39, 3, 1, 0, 0, 0, 16,136, 39, 3, 1, 0, 0, 0, 80,132, 39, 3, 1, 0, 0, 0, -176,132, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,208,136, 39, 3, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0, 48,137, 39, 3, 1, 0, 0, 0,112,136, 39, 3, 1, 0, 0, 0,112,130, 39, 3, 1, 0, 0, 0, - 16,133, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 48,137, 39, 3, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0,144,137, 39, 3, 1, 0, 0, 0,208,136, 39, 3, 1, 0, 0, 0,240,131, 39, 3, 1, 0, 0, 0, -112,133, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,144,137, 39, 3, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0,240,137, 39, 3, 1, 0, 0, 0, 48,137, 39, 3, 1, 0, 0, 0, 16,133, 39, 3, 1, 0, 0, 0, -208,133, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,240,137, 39, 3, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0, 80,138, 39, 3, 1, 0, 0, 0,144,137, 39, 3, 1, 0, 0, 0,208,133, 39, 3, 1, 0, 0, 0, - 48,134, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 80,138, 39, 3, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0,176,138, 39, 3, 1, 0, 0, 0,240,137, 39, 3, 1, 0, 0, 0,112,133, 39, 3, 1, 0, 0, 0, - 48,134, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,176,138, 39, 3, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0, 16,139, 39, 3, 1, 0, 0, 0, 80,138, 39, 3, 1, 0, 0, 0,176,132, 39, 3, 1, 0, 0, 0, -144,134, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 16,139, 39, 3, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0,112,139, 39, 3, 1, 0, 0, 0,176,138, 39, 3, 1, 0, 0, 0,144,131, 39, 3, 1, 0, 0, 0, -144,134, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,112,139, 39, 3, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0,208,139, 39, 3, 1, 0, 0, 0, 16,139, 39, 3, 1, 0, 0, 0, 16,133, 39, 3, 1, 0, 0, 0, -144,134, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,208,139, 39, 3, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0, 48,140, 39, 3, 1, 0, 0, 0,112,139, 39, 3, 1, 0, 0, 0,112,130, 39, 3, 1, 0, 0, 0, -144,131, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 48,140, 39, 3, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0,144,140, 39, 3, 1, 0, 0, 0,208,139, 39, 3, 1, 0, 0, 0, 80,132, 39, 3, 1, 0, 0, 0, -112,133, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,144,140, 39, 3, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0,240,140, 39, 3, 1, 0, 0, 0, 48,140, 39, 3, 1, 0, 0, 0,176,132, 39, 3, 1, 0, 0, 0, - 48,134, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,240,140, 39, 3, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0, 80,141, 39, 3, 1, 0, 0, 0,144,140, 39, 3, 1, 0, 0, 0,240,131, 39, 3, 1, 0, 0, 0, -208,133, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 80,141, 39, 3, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,140, 39, 3, 1, 0, 0, 0,176,132, 39, 3, 1, 0, 0, 0, -208,133, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,176,141, 39, 3, 1, 0, 0, 0, -194, 0, 0, 0, 1, 0, 0, 0, 80,145, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,131, 39, 3, 1, 0, 0, 0, -208,130, 39, 3, 1, 0, 0, 0, 48,131, 39, 3, 1, 0, 0, 0, 80,132, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,128, 7, 0, 0, 23, 4, 0, 0, 49, 4, 0, 0, 7, 7,129, 7, 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, -240, 35, 15, 3, 1, 0, 0, 0,128,233, 39, 3, 1, 0, 0, 0,128,233, 39, 3, 1, 0, 0, 0,144,142, 39, 3, 1, 0, 0, 0, -240,143, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,182,250, 24, 1, 0, 0, 0, -176, 57,113, 29, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,144,142, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -240,143, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,161, 68, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 32,240, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0,129, 7, 26, 0,129, 7, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 23, 4, 0, 0, 48, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,129, 7, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, -176, 37, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,240,143, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,144,142, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0, - 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192, 0, 0, 0, 0,112, 7, 0, 0,129, 7, 0, 0, 18, 0, 0, 0, 6, 0, 0, 0, - 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 18, 0, 0, 0, 6, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, - 18, 0, 0, 4, 6, 0,129, 7, 7, 0,112, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 4, 0, 0, 49, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, -208, 36, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 80,145, 39, 3, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, - 64,157, 39, 3, 1, 0, 0, 0,176,141, 39, 3, 1, 0, 0, 0,112,130, 39, 3, 1, 0, 0, 0, 16,133, 39, 3, 1, 0, 0, 0, -144,134, 39, 3, 1, 0, 0, 0,144,131, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, - 0, 0, 0, 0, 87, 0, 0, 0, 15, 15,129, 7, 88, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 2, 15, 3, 1, 0, 0, 0, -240,148, 39, 3, 1, 0, 0, 0,224,155, 39, 3, 1, 0, 0, 0, 48,146, 39, 3, 1, 0, 0, 0,144,147, 39, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,226,250, 24, 1, 0, 0, 0, 32,181,250, 24, 1, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 48,146, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,144,147, 39, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 32,240, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, - 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,129, 7, - 26, 0,129, 7, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -129, 7, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176, 4, 15, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,144,147, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48,146, 39, 3, 1, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, - 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 18, 0, 0, 0, 61, 0, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, - 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0,129, 7, - 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,128, 7, 0, 0, 26, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -129, 7, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 3, 15, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,200, 0, 0, 0,240,148, 39, 3, 1, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0,224,155, 39, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,240,149, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 80,151, 39, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,203, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, - 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 88, 6, - 26, 0, 88, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 87, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 88, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 80,151, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -240,149, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,144, 62,192, 2, 0, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,176, 27,192, 2, 0, 0, 0, 0,224,236,191, 2, 0, 0, 0, 0, 32,236,191, 2, 0, 0, 0, 0, + 0,235,191, 2, 0, 0, 0, 0, 96,235,191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 3, 0, 0,128, 7, 0, 0, +241, 1, 0, 0, 21, 4, 0, 0, 8, 8, 48, 4, 37, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +192, 67,192, 2, 0, 0, 0, 0,160, 83,192, 2, 0, 0, 0, 0,112, 63,192, 2, 0, 0, 0, 0, 80, 66,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,112, 63,192, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,224, 64,192, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,135, 68, + 0, 0, 0, 64, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 4, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0,224,156, 68, 0, 0,200, 65, + 0,224,156, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 56, 4, + 24, 0, 56, 4, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 81, 3, 0, 0,128, 7, 0, 0,241, 1, 0, 0,241, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 1, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 87, 6, 0, 0, 26, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 88, 6, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,152, 39, 3, 1, 0, 0, 0, - 68, 65, 84, 65,248, 2, 0, 0,176,152, 39, 3, 1, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,213,108, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0,128, 63, 0, 0,140, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,213,108, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65,161, 14,106, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 91,138, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,128, 63, 0, 0,140, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,213,108, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52,149,147, 58, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,224, 64,192, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 80, 66,192, 2, 0, 0, 0, 0, +112, 63,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,224,155, 39, 3, 1, 0, 0, 0, -157, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,148, 39, 3, 1, 0, 0, 0,240,149, 39, 3, 1, 0, 0, 0, - 80,151, 39, 3, 1, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, - 48,194,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 64,157, 39, 3, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, -160,178, 39, 3, 1, 0, 0, 0, 80,145, 39, 3, 1, 0, 0, 0, 16,133, 39, 3, 1, 0, 0, 0,208,133, 39, 3, 1, 0, 0, 0, -176,132, 39, 3, 1, 0, 0, 0,144,134, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, - 89, 0, 0, 0,239, 1, 0, 0, 8, 8,129, 7,151, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 69, 15, 3, 1, 0, 0, 0, - 64,162, 39, 3, 1, 0, 0, 0,160,177, 39, 3, 1, 0, 0, 0, 32,158, 39, 3, 1, 0, 0, 0,224,160, 39, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 90,251, 24, 1, 0, 0, 0,160,161,253, 24, 1, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 32,158, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,128,159, 39, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 31, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 32,240, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 96,191, 68, 0, 0,200, 65, - 0, 96,191, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,129, 7, - 26, 0,129, 7, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,128, 7, 0, 0, 89, 0, 0, 0,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -129, 7, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112, 72, 15, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,128,159, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,224,160, 39, 3, 1, 0, 0, 0, - 32,158, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 67, 0,128,181,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 67, - 0,128,181,195, 0, 0, 0, 0,203, 0, 0, 0,220, 0, 0, 0, 18, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, 18, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,220, 0, -125, 1,203, 0,107, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, 6, 0, 0,128, 7, 0, 0,115, 0, 0, 0,239, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -220, 0,125, 1, 0, 0, 4, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 71, 15, 3, 1, 0, 0, 0, +128, 7, 0, 0,128, 7, 0, 0,241, 1, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,224,160, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128,159, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,122, 67, - 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,124, 1, 0, 0, 18, 0, 0, 0,164, 6, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,164, 6, 0, 0, 18, 0, 0, 0,124, 1, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, - 0,124,146, 72, 0, 0, 0, 66, 10,215, 35, 60, 0, 0,200, 66,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 8, 0,165, 6, -125, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,164, 6, 0, 0,115, 0, 0, 0,239, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, 6,125, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176, 70, 15, 3, 1, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0, 80, 66,192, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +224, 64,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,122, 67, + 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 36, 2, 0, 0, 18, 0, 0, 0, 47, 4, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 47, 4, 0, 0, 18, 0, 0, 0, 36, 2, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, + 0,124,146, 72, 0, 0, 0, 66, 10,215, 35, 60, 0, 0,200, 66,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 8, 0, 48, 4, + 37, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 81, 3, 0, 0,128, 7, 0, 0,241, 1, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 4, 37, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,240, 0, 0, 0, 64,162, 39, 3, 1, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0,128,173, 39, 3, 1, 0, 0, 0, + 68, 65, 84, 65,240, 0, 0, 0,192, 67,192, 2, 0, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, 96, 79,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,112,163, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -208,164, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0,128,191, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,251, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,240, 68,192, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 96, 70,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 0,157, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,231, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0,252, 5, 26, 0,252, 5, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,251, 5, 0, 0, 85, 0, 0, 0,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,252, 5, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4, 0, 12, 4, 10, 0,232, 4, 26, 0,232, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0,128, 7, 0, 0,225, 1, 0, 0,250, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,232, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,208,164, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 48,166, 39, 3, 1, 0, 0, 0,112,163, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 96, 70,192, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +208, 71,192, 2, 0, 0, 0, 0,240, 68,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111, 0, 0, 0,223, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,113, 1, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0,153, 2, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 24, 2, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 48,166, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -144,167, 39, 3, 1, 0, 0, 0,208,164, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,208, 71,192, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 64, 73,192, 2, 0, 0, 0, 0, 96, 70,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,251, 5, 0, 0,111, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0,128, 7, 0, 0,251, 1, 0, 0,251, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,144,167, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -240,168, 39, 3, 1, 0, 0, 0, 48,166, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128,142,196, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 64, 73,192, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, +176, 74,192, 2, 0, 0, 0, 0,208, 71,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128,142,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 0, 26,196, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0,122, 2,163, 0,104, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,251, 5, 0, 0,251, 5, 0, 0,111, 0, 0, 0,223, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,128, 7, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,240,168, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,144,167, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176, 74,192, 2, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 64, 73,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,251, 5, 0, 0,111, 0, 0, 0,223, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,252, 5,113, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0,128, 7, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,232, 4, 24, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80,170, 39, 3, 1, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, 80,170, 39, 3, 1, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, - 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 79,145, 64, 0, 0, 0, 0, 0, 0, 0, 0, + 32, 76,192, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, 32, 76,192, 2, 0, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, + 1, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,165, 7, 36, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0, 162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63, 69,239,209, 62, 70,119,105, 63,176, 84, 89,188, 0, 0, 0, 0, 53,177,205,190,142, 74, 70, 62,166, 33,101, 63, 0, 0, 0, 0, 185,158, 81, 63, 35, 44,185,190, 43, 61,228, 62, 0, 0, 0, 0,164, 96, 68, 65,111,121,173,192,248,209,213, 64, 0, 0,128, 63, -178,157,229, 62,241,130,233,191,222,160, 81,191,184,158, 81,191,117, 90,127, 63, 14, 28, 97, 63, 9, 46,185, 62, 35, 44,185, 62, -145,180,109,188,119, 15,130, 64,129, 63,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 96,132,111, 65,214,211,111, 65, -112,240,191, 62,108,116, 85, 63, 80,184, 70,188, 0, 0, 46,180,159, 49,181,189,125,172, 46, 61, 7,213, 73, 62, 0, 64,143,180, -182,107, 25,196, 13,135,135, 67, 70, 12,167,195, 71, 0, 72,194,225, 56, 25, 68, 38, 90,135,195,237,212,166, 67, 84, 2, 72, 66, +180,157,229, 62,169,203,131,191,222,160, 81,191,184,158, 81,191,118, 90,127, 63, 95, 27,254, 62, 9, 46,185, 62, 35, 44,185, 62, +147,180,109,188,102,208, 18, 64,129, 63,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 96,132,111, 65,214,211,111, 65, +217,236,191, 62, 54,117, 85, 63,224,246, 70,188, 0,128, 32,182, 69,129, 32,190,250,186,154, 61,170,205,178, 62, 0, 64, 1, 53, +215,104, 25,196,135,132,135, 67, 37, 9,167,195,136,252, 71,194, 3, 54, 25, 68,160, 87,135,195,205,209,166, 67,151,254, 71, 66, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0, 162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63, -178,157,229, 62,241,130,233,191,222,160, 81,191,184,158, 81,191,117, 90,127, 63, 14, 28, 97, 63, 9, 46,185, 62, 35, 44,185, 62, -145,180,109,188,119, 15,130, 64,129, 63,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 96,132,111, 65,214,211,111, 65, +180,157,229, 62,169,203,131,191,222,160, 81,191,184,158, 81,191,118, 90,127, 63, 95, 27,254, 62, 9, 46,185, 62, 35, 44,185, 62, +147,180,109,188,102,208, 18, 64,129, 63,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 96,132,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190,214,211,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, - 13,114,156, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, +218,210,190, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, -128,173, 39, 3, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0,160,177, 39, 3, 1, 0, 0, 0, 64,162, 39, 3, 1, 0, 0, 0, -112,163, 39, 3, 1, 0, 0, 0,240,168, 39, 3, 1, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 96, 79,192, 2, 0, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0,160, 83,192, 2, 0, 0, 0, 0,192, 67,192, 2, 0, 0, 0, 0, +240, 68,192, 2, 0, 0, 0, 0,176, 74,192, 2, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0, 7, 0, 48,194,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, 7, 0,176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,224,174, 39, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 64,176, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,192, 80,192, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 48, 82,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, @@ -11360,8 +8135,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 64,176, 39, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,174, 39, 3, 1, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 48, 82,192, 2, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 80,192, 2, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, @@ -11370,838 +8145,440 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0,160,177, 39, 3, 1, 0, 0, 0, -172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,173, 39, 3, 1, 0, 0, 0,224,174, 39, 3, 1, 0, 0, 0, - 64,176, 39, 3, 1, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,160,178, 39, 3, 1, 0, 0, 0, -194, 0, 0, 0, 1, 0, 0, 0, 32,212, 39, 3, 1, 0, 0, 0, 64,157, 39, 3, 1, 0, 0, 0,208,133, 39, 3, 1, 0, 0, 0, -240,131, 39, 3, 1, 0, 0, 0,112,133, 39, 3, 1, 0, 0, 0, 48,134, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 79, 3, 0, 0,241, 1, 0, 0, 21, 4, 0, 0, 2, 2, 80, 3, 37, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -144, 14, 15, 3, 1, 0, 0, 0, 0,185, 39, 3, 1, 0, 0, 0, 32,211, 39, 3, 1, 0, 0, 0,128,179, 39, 3, 1, 0, 0, 0, -160,183, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,162,253, 24, 1, 0, 0, 0, -160,247,254, 24, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,128,179, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -224,180, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 78, 68, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0, 84, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0,192,103, 68, 0, 0,200, 65, 0,192,103, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0, 80, 3, 26, 0, 80, 3, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 3, 0, 0,241, 1, 0, 0, 10, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 80, 3, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80, 16, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,224,180, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 64,182, 39, 3, 1, 0, 0, 0,128,179, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 67, 0, 0,112,193, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 72, 67, 0,128,252,195, 0, 0, 0, 0,200, 0, 0, 0,217, 0, 0, 0, 18, 0, 0, 0, 10, 2, 0, 0, - 0, 0, 0, 0,199, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 18, 0, 0, 0, 10, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 10, 0, 0, 0, 2, 0, 3, 3, - 0, 0, 0, 4, 6, 0,217, 0, 11, 2,200, 0,249, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 0, 0, 0, 11, 2, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,217, 0, 11, 2, 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48, 17, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 64,182, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -160,183, 39, 3, 1, 0, 0, 0,224,180, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0,160, 83,192, 2, 0, 0, 0, 0, +172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 79,192, 2, 0, 0, 0, 0,192, 80,192, 2, 0, 0, 0, 0, + 48, 82,192, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 79, 3, 0, 0, 79, 3, 0, 0, 11, 2, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 16, 18, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 83, 67, 0, 0, 0, 6, 0, 0, 64, 85,192, 2, 0, 0, 0, 0, +154, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 83, 99,101,110,101, 0,116, 97,103,101, 0, 97,105,110, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,108,192, 2, 0, 0, 0, 0, +160,100,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 91,192, 2, 0, 0, 0, 0, + 96, 92,192, 2, 0, 0, 0, 0,128, 91,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,160,183, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 64,182, 39, 3, 1, 0, 0, 0, 0, 0, 16,193, 0, 0,130, 67, 0, 0,160,192, 0, 0,160, 64, - 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 16,193, 0, 0, 32, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 10, 2, 0, 0, - 18, 0, 0, 0,118, 2, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,118, 2, 0, 0, 18, 0, 0, 0, 10, 2, 0, 0, -111, 18,131, 58,111, 18,131, 58, 0,124,146, 72, 0, 80, 67, 71, 0, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 4, 0, 0,119, 2, 11, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,217, 0, 0, 0, 79, 3, 0, 0, 11, 2, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,119, 2, 11, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, 15, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +208, 92,192, 2, 0, 0, 0, 0,208,207,131, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,172, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 0,185, 39, 3, 1, 0, 0, 0,161, 0, 0, 0, 1, 0, 0, 0, -176,190, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0,100, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 2,224, 1, 60, 0, + 32, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 25, 0,141, 0,128, 7, 56, 4, 8, 0, 8, 0, 0, 0, 24, 0, 17, 0, + 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 23, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, + 0, 0, 8, 0, 24, 0, 10, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 94,192, 2, 0, 0, 0, 0, +144, 94,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0,128, 63, 0, 0,128, 63, 1, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 5, 0, 2, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 98, 97, 99,107, 98,117,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,186, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, - 48,186, 39, 3, 1, 0, 0, 0, 20, 1, 0, 0, 1, 0, 0, 0, 48,186,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,144,186, 39, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,240,187, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 38, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 2, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0,192,103, 68, 0, 0,200, 65, 0,192,103, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,152, 2, 26, 0,152, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 2, 0, 0,225, 1, 0, 0,250, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,240,187, 39, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 80,189, 39, 3, 1, 0, 0, 0,144,186, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 67, - 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 67, 0,128, 4,196, 0, 0, 64,193, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,180, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,180, 0, 0, 0, - 18, 0, 0, 0, 23, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 8, 0, 0, 0, 2, 0, 3, 3, 0, 0, 2, 4, 6, 0,181, 0, 24, 2,181, 0, 6, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,180, 0, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,181, 0, 24, 2, 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 47,116,109,112, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80,189, 39, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,187, 39, 3, 1, 0, 0, 0, 0, 0, 32,193, 0, 0,104, 68, - 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,104, 68, 0,128, 4,196, 0, 0, 64,193,210, 1, 0, 0,227, 1, 0, 0, - 18, 0, 0, 0, 23, 2, 0, 0, 0, 0, 0, 0,209, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,209, 1, 0, 0, - 18, 0, 0, 0, 23, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,124,146, 72, 0, 64, 28, 70, 10,215, 35, 60, 0, 0, 72, 66, - 74, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 4, 4, 0,227, 1, 24, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,181, 0, 0, 0,151, 2, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,227, 1, 24, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 1, 0, 0,176,190, 39, 3, 1, 0, 0, 0, - 21, 1, 0, 0, 1, 0, 0, 0, 16,196, 39, 3, 1, 0, 0, 0, 0,185, 39, 3, 1, 0, 0, 0,144,186, 39, 3, 1, 0, 0, 0, - 80,189, 39, 3, 1, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48,186,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,240,191, 39, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 80,193, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,202, 67, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,104, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 3, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 41, 68, 0, 0,200, 65, 0,192, 41, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,160, 3, 26, 0,160, 3, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 3, 0, 0, 85, 0, 0, 0,110, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 3, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205,204, 76, 63,205,204, 76, 63,205,204, 76, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 62, 6, 0, 0, 0, 16, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, +173, 2, 95, 0,154,153,217, 63, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 1, 0,180, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 66, 76, 69, 78, 68, 69, 82, 95, 82, 69, 78, 68, 69, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68,172, 0, 0, 0, 0,128, 63,102,166,171, 67, 0, 0,128, 63, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80,193, 39, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,176,194, 39, 3, 1, 0, 0, 0,240,191, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 67, - 0,128,100,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 67, 0,128,100,196, 0, 0, 0, 0,172, 0, 0, 0,189, 0, 0, 0, - 18, 0, 0, 0,163, 3, 0, 0, 0, 0, 0, 0,171, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,171, 0, 0, 0, - 18, 0, 0, 0,163, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, - 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,189, 0,164, 3,172, 0,146, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111, 0, 0, 0, 18, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 3, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176,194, 39, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,193, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 67, - 0, 0, 0, 0, 0, 0,128, 67, 0, 0,168,191, 0, 0, 20, 64, 0, 0,169,191, 0,128, 20, 64, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 3, 0, 0, - 0, 0, 0, 0,164, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 3, 0, 0,111, 0, 0, 0, 18, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 3,164, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,248,133, 2, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 10, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,205,204, 28, 65, 0, 0, 0, 0, 32, 0, 32, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 0, 5, 0, + 60, 0, 5, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 2,224, 1, 60, 0, + 32, 0, 0, 0, 0, 0, 0, 0, 4, 0, 1, 0,180, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 5, 0,128, 7, 56, 4, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +195,245, 28,193, 1, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,128, 91,192, 2, 0, 0, 0, 0,131, 0, 0, 0, 1, 0, 0, 0, +240, 91,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,176, 2,229, 1, +144,113,192, 2, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,240, 91,192, 2, 0, 0, 0, 0,131, 0, 0, 0, 1, 0, 0, 0, + 96, 92,192, 2, 0, 0, 0, 0,128, 91,192, 2, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 4, 0, 0,121, 3, 24, 3, + 16,119,192, 2, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 96, 92,192, 2, 0, 0, 0, 0,131, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,240, 91,192, 2, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0,152, 0, 67, 2, +176,108,192, 2, 0, 0, 0, 0, 68, 65, 84, 65,120, 1, 0, 0,208, 92,192, 2, 0, 0, 0, 0,150, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 1, 0, 1, 0, +205,204, 76, 63, 0, 0,180, 66, 9, 0, 1, 0, 0, 0,128, 63,111, 18,131, 58,205,204,204, 61, 0, 0, 1, 0, 32, 0, 32, 0, + 32, 0, 1, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 5, 0, 5, 0,255,255, 50, 0, 50, 0, 10, 0, 0, 0, + 50, 0,100, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, + 50, 0, 50, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 62, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 10,215, 35, 60,205,204,204, 61, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,250, 0,205,204,204, 61,205,204,204, 61, +102,102,166, 63, 0, 0,192, 63, 0, 0,240, 65, 72,225,122, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 67, 2, 0, 3, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 0, 0, 0, +144, 94,192, 2, 0, 0, 0, 0,136, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 49, 32, 82,101,110,100,101,114, 76, 97,121,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255, 15, 0, 0, 0, 0, 0,255,127, 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 0, 0, 67, 65, 0, 0,152, 0, 0, 0, 48, 95,192, 2, 0, 0, 0, 0, 29, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 67, 65, 67, 97,109,101,114, 97, 0, 97,109,101,114, 97, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 63,145,137, 68, 66,205,204,204, 61, + 0, 0,200, 66, 0, 0, 12, 66,161, 14,234, 64, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 0, 0,248, 1, 0, 0, + 16, 96,192, 2, 0, 0, 0, 0, 41, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 83,112,111,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,247,255,239, 65, 0, 0,150, 66,154,153, 25, 62, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 80, 98,192, 2, 0, 0, 0, 0, 2, 0, 0, 0, 46, 26,128, 63, 25, 4,240, 65, 0, 0, 52, 66, + 0, 0,128, 63, 0, 0, 64, 64,205,204, 76, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 11, 3, 0, 1, 0, 0, 0, + 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,111, 18,131, 58, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 64, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,168, 0, 0, 0, 16,196, 39, 3, 1, 0, 0, 0, -167, 0, 0, 0, 1, 0, 0, 0, 0,207, 39, 3, 1, 0, 0, 0,176,190, 39, 3, 1, 0, 0, 0,240,191, 39, 3, 1, 0, 0, 0, -176,194, 39, 3, 1, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,240,196, 39, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 80,198, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 42, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167, 2, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,168, 2, 26, 0,168, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167, 2, 0, 0, 85, 0, 0, 0,110, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80,198, 39, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,176,199, 39, 3, 1, 0, 0, 0,240,196, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, - 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, - 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, - 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, - 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111, 0, 0, 0, 18, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,164, 3, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48,100,192, 2, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 80, 98,192, 2, 0, 0, 0, 0, 74, 1, 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 2, 0, 1, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,243, 4, 53,191,242, 4, 53, 63, +242, 4, 53,191,243, 4, 53, 63,208, 99,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176,199, 39, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 16,201, 39, 3, 1, 0, 0, 0, 80,198, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, - 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, - 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, - 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, - 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167, 2, 0, 0,111, 0, 0, 0,111, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 16,201, 39, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,112,202, 39, 3, 1, 0, 0, 0,176,199, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, - 0,128,142,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 0, 26,196, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, - 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, - 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, - 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0,122, 2,163, 0,104, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167, 2, 0, 0,167, 2, 0, 0,111, 0, 0, 0, 18, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,112,202, 39, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,201, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, +208, 99,192, 2, 0, 0, 0, 0, 72, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 48,100,192, 2, 0, 0, 0, 0, 19, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 87, 79, 0, 0,216, 1, 0, 0,160,100,192, 2, 0, 0, 0, 0,130, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 87, 79, 87,111,114,108,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 62, 0, 0,128, 62, + 0, 0,128, 62, 0, 0, 0, 0,205,204,204, 61,205,204,204, 61,205,204,204, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, +205,204, 28, 65, 0, 0, 0, 0, 0, 0, 32, 0,128, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, + 0, 0,112, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0,128, 63,205,204, 76, 61, + 0, 0, 5, 0, 0, 0, 0, 0, 10,215,163, 59, 0, 0, 0, 0, 0, 0,128, 62, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167, 2, 0, 0,111, 0, 0, 0, 18, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 2,164, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,208,203, 39, 3, 1, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0,208,203, 39, 3, 1, 0, 0, 0, -156, 0, 0, 0, 1, 0, 0, 0,226,225,191, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128, -226,215,163,188, 0, 0, 0,128, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, - 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -214,211,111,193, 0, 0,128, 63, 69,239,209, 62, 70,119,105, 63,176, 84, 89,188, 0, 0, 0, 0, 53,177,205,190,142, 74, 70, 62, -166, 33,101, 63, 0, 0, 0, 0,185,158, 81, 63, 35, 44,185,190, 43, 61,228, 62, 0, 0, 0, 0,164, 96, 68, 65,111,121,173,192, -248,209,213, 64, 0, 0,128, 63,192, 90, 29, 63,208,249,224,190,222,160, 81,191,184,158, 81,191,253,253,174, 63,140,225, 88, 62, - 9, 46,185, 62, 35, 44,185, 62,232,229,162,188,206,156,122, 63,129, 63,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, - 96,132,111, 65,214,211,111, 65,250, 8,140, 62,174,189, 27, 63,224, 25, 17,188, 0, 64,153,181,195, 13,188,190,191, 73, 53, 62, - 99,126, 81, 63, 0,128,163, 53,215,104, 25,196,134,132,135, 67, 37, 9,167,195,136,252, 71,194, 3, 54, 25, 68,159, 87,135,195, -205,209,166, 67,151,254, 71, 66, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, - 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -214,211,111,193, 0, 0,128, 63,192, 90, 29, 63,208,249,224,190,222,160, 81,191,184,158, 81,191,253,253,174, 63,140,225, 88, 62, - 9, 46,185, 62, 35, 44,185, 62,232,229,162,188,206,156,122, 63,129, 63,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, - 96,132,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 88, 0, 0,176, 0, 0, 0, +192,102,192, 2, 0, 0, 0, 0, 27, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 88, 84,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 0, 0, 0, 1, 0, 0, 0,176,103,192, 2, 0, 0, 0, 0,176,103,192, 2, 0, 0, 0, 0,176,103,192, 2, 0, 0, 0, 0, +176,103,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +112,104,192, 2, 0, 0, 0, 0,255,255,255,255, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,176,103,192, 2, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 32,104,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 69, 82, 70, + 68, 65, 84, 65, 4, 0, 0, 0, 32,104,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 79, 66, 0, 0, +152, 4, 0, 0,176,108,192, 2, 0, 0, 0, 0,119, 0, 0, 0, 1, 0, 0, 0,144,113,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 67, 97,109,101,114, 97, 0, 97,109,101, +114, 97, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190,214,211,111, 65,214,211,111, 65, - 0, 0, 0, 0, 0, 0, 0, 0,172,148, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 95,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 1, 0, 0, 0,207, 39, 3, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, 32,211, 39, 3, 1, 0, 0, 0, - 16,196, 39, 3, 1, 0, 0, 0,240,196, 39, 3, 1, 0, 0, 0,112,202, 39, 3, 1, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,110,101,239, 64,150, 62,208,192, 78,255,170, 64, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42,254,141, 63,192, 57, 49, 60, 34,159, 80, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,222,149, 47, 63, 53, 70, 58, 63,222, 56, 49,188, 0, 0, 0, 0, 86,126,162,190,227,251,159, 62, + 55, 53,101, 63, 0, 0, 0, 0, 7,165, 39, 63,149, 84, 28,191, 51,247,227, 62, 0, 0, 0, 0,110,101,239, 64,150, 62,208,192, + 78,255,170, 64, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,194,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 96,208, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,192,209, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 68, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,152, 4, 26, 0,152, 4, 26, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, -101, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4, 26, 0, 0, 0, 1, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -192,209, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,208, 39, 3, 1, 0, 0, 0, - 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66, -205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0,152, 4,122, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, -127, 0, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0, - 32,211, 39, 3, 1, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,207, 39, 3, 1, 0, 0, 0, - 96,208, 39, 3, 1, 0, 0, 0,192,209, 39, 3, 1, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, - 32,212, 39, 3, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,178, 39, 3, 1, 0, 0, 0, - 48,134, 39, 3, 1, 0, 0, 0,112,133, 39, 3, 1, 0, 0, 0, 80,132, 39, 3, 1, 0, 0, 0,176,132, 39, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 81, 3, 0, 0,128, 7, 0, 0,241, 1, 0, 0, 21, 4, 0, 0, 8, 8, 48, 4, 37, 2, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0,208, 69, 15, 3, 1, 0, 0, 0, 32,217, 39, 3, 1, 0, 0, 0,128,232, 39, 3, 1, 0, 0, 0, - 0,213, 39, 3, 1, 0, 0, 0,192,215, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176,176,151, 22, 1, 0, 0, 0,176,195,140, 22, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0,213, 39, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 96,214, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,135, 68, 0, 0, 0, 64, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 4, 0, 0, - 0, 0, 0, 0, 23, 0, 0, 0, 0,224,156, 68, 0, 0,200, 65, 0,224,156, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 56, 4, 24, 0, 56, 4, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 3, 0, 0,128, 7, 0, 0,241, 1, 0, 0,241, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 2, 0, 1, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0,112, 72, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 96,214, 39, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,192,215, 39, 3, 1, 0, 0, 0, 0,213, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,128, 7, 0, 0,241, 1, 0, 0, 21, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0,144, 71, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,192,215, 39, 3, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,214, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, - 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 17, 0, 0, 0, - 18, 0, 0, 0, 36, 2, 0, 0, 18, 0, 0, 0, 47, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 47, 4, 0, 0, - 18, 0, 0, 0, 36, 2, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 0,124,146, 72, 0, 0, 0, 66, 10,215, 35, 60, 0, 0,200, 66, -105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 8, 0, 48, 4, 37, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 3, 0, 0,128, 7, 0, 0,241, 1, 0, 0, 21, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 4, 37, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,176, 70, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0, 32,217, 39, 3, 1, 0, 0, 0, -163, 0, 0, 0, 1, 0, 0, 0, 96,228, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 80,218, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,176,219, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,157, 68, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,231, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,232, 4, 26, 0,232, 4, 26, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0,128, 7, 0, 0, -225, 1, 0, 0,250, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 4, 26, 0, 0, 0, 1, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -176,219, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 16,221, 39, 3, 1, 0, 0, 0, 80,218, 39, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0, -143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0,153, 2, 0, 0, -251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 24, 2, 0, 0, 5, 0, - 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 16,221, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,112,222, 39, 3, 1, 0, 0, 0,176,219, 39, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0, -143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0,128, 7, 0, 0, -251, 1, 0, 0,251, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, - 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -112,222, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,208,223, 39, 3, 1, 0, 0, 0, 16,221, 39, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 35, 67, 0,128,142,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 0, 26,196, 0, 0, 0, 0, -163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0,122, 2,163, 0,104, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,128, 7, 0, 0, -251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, - 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -208,223, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,222, 39, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0,128, 7, 0, 0, -251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 4, 24, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,225, 39, 3, 1, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, - 48,225, 39, 3, 1, 0, 0, 0,156, 0, 0, 0, 1, 0, 0, 0, 1, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,165, 7, 36, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, - 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, - 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63, 69,239,209, 62, 70,119,105, 63,176, 84, 89,188, 0, 0, 0, 0, - 53,177,205,190,142, 74, 70, 62,166, 33,101, 63, 0, 0, 0, 0,185,158, 81, 63, 35, 44,185,190, 43, 61,228, 62, 0, 0, 0, 0, -164, 96, 68, 65,111,121,173,192,248,209,213, 64, 0, 0,128, 63,180,157,229, 62,169,203,131,191,222,160, 81,191,184,158, 81,191, -118, 90,127, 63, 95, 27,254, 62, 9, 46,185, 62, 35, 44,185, 62,147,180,109,188,102,208, 18, 64,129, 63,228,190, 42, 61,228,190, - 0, 0, 0, 0, 0, 0, 0, 0, 96,132,111, 65,214,211,111, 65,217,236,191, 62, 54,117, 85, 63,224,246, 70,188, 0,128, 32,182, - 69,129, 32,190,250,186,154, 61,170,205,178, 62, 0, 64, 1, 53,215,104, 25,196,135,132,135, 67, 37, 9,167,195,136,252, 71,194, - 3, 54, 25, 68,160, 87,135,195,205,209,166, 67,151,254, 71, 66, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, - 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63,180,157,229, 62,169,203,131,191,222,160, 81,191,184,158, 81,191, -118, 90,127, 63, 95, 27,254, 62, 9, 46,185, 62, 35, 44,185, 62,147,180,109,188,102,208, 18, 64,129, 63,228,190, 42, 61,228,190, - 0, 0, 0, 0, 0, 0, 0, 0, 96,132,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190, -214,211,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0,218,210,190, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, 96,228, 39, 3, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, -128,232, 39, 3, 1, 0, 0, 0, 32,217, 39, 3, 1, 0, 0, 0, 80,218, 39, 3, 1, 0, 0, 0,208,223, 39, 3, 1, 0, 0, 0, - 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,194,129, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, - 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,192,229, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 32,231, 39, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, - 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,152, 4, - 26, 0,152, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,151, 4, 0, 0,101, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 1, 0,128, 63, 1, 0,128, 51, 1, 0, 0,179, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0,128, 63, + 1, 0,128, 51, 0, 0, 0, 0, 2, 0, 0,179, 2, 0, 0,167, 1, 0,128, 63, 0, 0, 0, 0, 1, 0, 0, 53, 1, 0, 0, 41, + 1, 0,128,168, 0, 0,128, 63, 0, 0,128, 63,157,190,215, 49,167,170, 4, 52, 0, 0, 0,128,129,116,157,178, 1, 0,128, 63, + 33, 69, 15, 51, 0, 0, 0,128, 73,254, 67, 51,243, 97,106, 49, 0, 0,128, 63, 0, 0, 0,128, 3, 0, 64, 52,183,164,157, 39, + 0, 0,128, 53, 0, 0,128, 63, 1, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 5, 0, 1, 0, 0, 0, 0, 0, 79, 66, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 56,180,150,201, 0, 0,128, 63, +187,225, 16, 63, 0, 0,128, 63,205,204,204, 62,237, 54, 32, 63, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 2, 0, 1, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 32,231, 39, 3, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192,229, 39, 3, 1, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, - 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, - 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0,152, 4, -122, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,151, 4, 0, 0,127, 0, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, 4,122, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,200, 0, 0, 0,128,232, 39, 3, 1, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 96,228, 39, 3, 1, 0, 0, 0,192,229, 39, 3, 1, 0, 0, 0, 32,231, 39, 3, 1, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, - 83, 67, 0, 0, 0, 6, 0, 0, 48,186,129, 3, 1, 0, 0, 0,154, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 83, 99,101,110,101, 0, -116, 97,103,101, 0, 97,105,110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48,194,129, 3, 1, 0, 0, 0,128,242, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0,234, 39, 3, 1, 0, 0, 0,192,234, 39, 3, 1, 0, 0, 0, 0,234, 39, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,235, 39, 3, 1, 0, 0, 0,208, 89, 16, 26, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68,172, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,100, 0, 0, 0,100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 2,224, 1, 60, 0, 32, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 25, 0, -141, 0,128, 7, 56, 4, 8, 0, 8, 0, 0, 0, 24, 0, 17, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, - 23, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 8, 0, 24, 0, 10, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,208,236, 39, 3, 1, 0, 0, 0,208,236, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, - 0, 0,200, 66, 0, 0,128, 63, 0, 0,128, 63, 1, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 5, 0, 2, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 98, 97, 99,107, 98,117, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47,116,109,112, 47, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -205,204, 76, 63,205,204, 76, 63,205,204, 76, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 62, - 6, 0, 0, 0, 16, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,173, 2, 95, 0,154,153,217, 63, 0, 0, 0, 0, 0, 0, 0, 0, - 4, 0, 1, 0,180, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 76, 69, 78, 68, 69, 82, 95, - 82, 69, 78, 68, 69, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,172, 0, 0, 0, 0,128, 63, -102,166,171, 67, 0, 0,128, 63, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176,171,135, 22, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 10, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205,204, 28, 65, 0, 0, 0, 0, - 32, 0, 32, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 0, 5, 0, 60, 0, 5, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 2,224, 1, 60, 0, 32, 0, 0, 0, 0, 0, 0, 0, 4, 0, 1, 0,180, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0,128, 7, 56, 4, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195,245, 28,193, 1, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 0,234, 39, 3, 1, 0, 0, 0,131, 0, 0, 0, 1, 0, 0, 0, 96,234, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,180, 2,209, 1, 48,200,129, 3, 1, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 96,234, 39, 3, 1, 0, 0, 0,131, 0, 0, 0, 1, 0, 0, 0,192,234, 39, 3, 1, 0, 0, 0, 0,234, 39, 3, 1, 0, 0, 0, - 1, 0, 0, 0, 2, 0, 0, 0, 0, 4, 0, 0,126, 3, 6, 3, 48,206,129, 3, 1, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -192,234, 39, 3, 1, 0, 0, 0,131, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,234, 39, 3, 1, 0, 0, 0, - 1, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0,153, 0, 47, 2, 48,194,129, 3, 1, 0, 0, 0, 68, 65, 84, 65,120, 1, 0, 0, - 32,235, 39, 3, 1, 0, 0, 0,150, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 1, 0, 1, 0,205,204, 76, 63, 0, 0,180, 66, 9, 0, 1, 0, 0, 0,128, 63, -111, 18,131, 58,205,204,204, 61, 0, 0, 1, 0, 32, 0, 32, 0, 32, 0, 1, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 0, 5, 0, 5, 0,255,255, 50, 0, 50, 0, 10, 0, 0, 0, 50, 0,100, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, - 50, 0, 50, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,215, 35, 60,205,204,204, 61, 2, 0, 0, 0, - 0, 0, 0, 0, 0, 0,250, 0,205,204,204, 61,205,204,204, 61,102,102,166, 63, 0, 0,192, 63, 0, 0,240, 65, 72,225,122, 63, -205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 67, 2, 0, 3, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 0, 0, 0,208,236, 39, 3, 1, 0, 0, 0,136, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 32, 82,101,110,100,101,114, 76, 97,121,101,114, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -255,255, 15, 0, 0, 0, 0, 0,255,127, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 67, 65, 0, 0,152, 0, 0, 0, - 96,237, 39, 3, 1, 0, 0, 0, 29, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 65, 67, 97,109,101,114, 97, 0, 97,109,101,114, 97, 46, 48, - 48, 49, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4, 0, 0, 0, 0, 63,145,137, 68, 66,205,204,204, 61, 0, 0,200, 66, 0, 0, 12, 66,161, 14,234, 64, 0, 0, 0, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 0, 0,248, 1, 0, 0, 48,238, 39, 3, 1, 0, 0, 0, 41, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 76, 65, 83,112,111,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, -247,255,239, 65, 0, 0,150, 66,154,153, 25, 62, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 96,240, 39, 3, 1, 0, 0, 0, - 2, 0, 0, 0, 46, 26,128, 63, 25, 4,240, 65, 0, 0, 52, 66, 0, 0,128, 63, 0, 0, 64, 64,205,204, 76, 61, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 64, 11, 3, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63,111, 18,131, 58, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 64, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,242, 39, 3, 1, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, - 96,240, 39, 3, 1, 0, 0, 0, 73, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 2, 0, 1, 0, 0, 0,128, 67, - 0, 0, 0, 0, 0, 0,128, 63,243, 4, 53,191,242, 4, 53, 63,242, 4, 53,191,243, 4, 53, 63,208,241, 39, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,208,241, 39, 3, 1, 0, 0, 0, 71, 1, 0, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 32,242, 39, 3, 1, 0, 0, 0, 19, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 79, 0, 0,216, 1, 0, 0, -128,242, 39, 3, 1, 0, 0, 0,130, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 79, 87,111,114,108,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 62, 0, 0,128, 62, 0, 0,128, 62, 0, 0, 0, 0,205,204,204, 61,205,204,204, 61, -205,204,204, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,205,204, 28, 65, 0, 0, 0, 0, 0, 0, 32, 0,128, 0, 5, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0,112, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32, 65, 0, 0, 0, 0, 0, 0,128, 63,205,204, 76, 61, 0, 0, 5, 0, 0, 0, 0, 0, 10,215,163, 59, 0, 0, 0, 0, - 0, 0,128, 62, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 84, 88, 0, 0,176, 0, 0, 0,144,244, 39, 3, 1, 0, 0, 0, 27, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 84, 88, 84,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0,128,245, 39, 3, 1, 0, 0, 0, -128,245, 39, 3, 1, 0, 0, 0,128,245, 39, 3, 1, 0, 0, 0,128,245, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,128,129, 3, 1, 0, 0, 0,255,255,255,255, 0, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,128,245, 39, 3, 1, 0, 0, 0, - 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 35, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 69, 82, 70, 68, 65, 84, 65, 4, 0, 0, 0,128, 37, 35, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 79, 66, 0, 0,152, 4, 0, 0, 48,194,129, 3, 1, 0, 0, 0,119, 0, 0, 0, - 1, 0, 0, 0, 48,200,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 79, 66, 67, 97,109,101,114, 97, 0, 97,109,101,114, 97, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0,152, 4, 0, 0,144,113,192, 2, 0, 0, 0, 0,119, 0, 0, 0, + 1, 0, 0, 0, 16,119,192, 2, 0, 0, 0, 0,176,108,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 79, 66, 67,117, 98,101, 0,112,104,101,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 96,237, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,112,115,140, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,176,163,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,110,101,239, 64,150, 62,208,192, 78,255,170, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,118,192, 2, 0, 0, 0, 0,192,118,192, 2, 0, 0, 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 42,254,141, 63,192, 57, 49, 60, 34,159, 80, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,222,149, 47, 63, 53, 70, 58, 63, -222, 56, 49,188, 0, 0, 0, 0, 86,126,162,190,227,251,159, 62, 55, 53,101, 63, 0, 0, 0, 0, 7,165, 39, 63,149, 84, 28,191, - 51,247,227, 62, 0, 0, 0, 0,110,101,239, 64,150, 62,208,192, 78,255,170, 64, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 1, 0,128, 63, 1, 0,128, 51, - 1, 0, 0,179, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0,128, 63, 1, 0,128, 51, 0, 0, 0, 0, 2, 0, 0,179, 2, 0, 0,167, - 1, 0,128, 63, 0, 0, 0, 0, 1, 0, 0, 53, 1, 0, 0, 41, 1, 0,128,168, 0, 0,128, 63, 0, 0,128, 63,157,190,215, 49, -167,170, 4, 52, 0, 0, 0,128,129,116,157,178, 1, 0,128, 63, 33, 69, 15, 51, 0, 0, 0,128, 73,254, 67, 51,243, 97,106, 49, - 0, 0,128, 63, 0, 0, 0,128, 3, 0, 64, 52,183,164,157, 39, 0, 0,128, 53, 0, 0,128, 63, 1, 0, 0, 0, 0, 4, 0, 0, - 0, 0, 0, 0, 5, 0, 1, 0, 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, -100, 0, 0, 0, 0, 0, 0, 0, 56,180,150,201, 0, 0,128, 63,187,225, 16, 63, 0, 0,128, 63,205,204,204, 62,237, 54, 32, 63, - 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 1, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,222,149, 47, 63, 52, 70, 58, 63, +179, 56, 49,188, 0, 0, 0,128, 86,126,162,190,227,251,159, 62, 56, 53,101, 63, 0, 0, 0,128, 7,165, 39, 63,149, 84, 28,191, + 50,247,227, 62, 0, 0, 0,128,110,101,239, 64,151, 62,208,192, 77,255,170, 64, 0, 0,128, 63, 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 68, 0, 79, 66, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, +100, 0, 0, 0, 0, 0, 0, 0, 56,180,150,201, 0, 0,128, 63,169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,229,208, 34, 62, + 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 1, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 64, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 18,140, 3, 0, 0, 0, 0,192,107,140, 3, + 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 8, 0, 0, 0,112,118,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 4, 0, 0, 0,192,118,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0,152, 4, 0, 0, + 16,119,192, 2, 0, 0, 0, 0,119, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,113,192, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 76, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, -152, 4, 0, 0, 48,200,129, 3, 1, 0, 0, 0,119, 0, 0, 0, 1, 0, 0, 0, 48,206,129, 3, 1, 0, 0, 0, 48,194,129, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 67,117, 98,101, 0,112,104,101,114,101, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176, 19,253, 24, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,253, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 96,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,245, 39, 3, - 1, 0, 0, 0, 32,246, 39, 3, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,154,112,130, 64,183,178,128, 63,112,236,188, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,229,123, 38, 63, 87, 43, 98, 61,229,229,238, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 54,236,148,190, 25,134,116, 63,236, 13, 98,189, 0, 0, 0, 0,221,102, 69,191, 57,174, 76,190, 34,194, 26, 63, + 0, 0, 0, 0, 37,255, 16, 63,241,161, 95, 62,164,111, 75, 63, 0, 0, 0, 0,154,112,130, 64,183,178,128, 63,112,236,188, 64, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63,222,149, 47, 63, 52, 70, 58, 63,179, 56, 49,188, 0, 0, 0,128, 86,126,162,190,227,251,159, 62, - 56, 53,101, 63, 0, 0, 0,128, 7,165, 39, 63,149, 84, 28,191, 50,247,227, 62, 0, 0, 0,128,110,101,239, 64,151, 62,208,192, - 77,255,170, 64, 0, 0,128, 63, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 68, 0, 79, 66, 0, 0, - 7, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 56,180,150,201, 0, 0,128, 63, -169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,229,208, 34, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 4, 0, 1, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 64, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,160, 24,253, 24, 1, 0, 0, 0,176, 31,253, 24, 1, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 0, 0, 0,224,245, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0, 32,246, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0,152, 4, 0, 0, 48,206,129, 3, 1, 0, 0, 0,119, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48,200,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 79, 66, 76, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48,238, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -154,112,130, 64,183,178,128, 63,112,236,188, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,229,123, 38, 63, - 87, 43, 98, 61,229,229,238, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54,236,148,190, 25,134,116, 63,236, 13, 98,189, - 0, 0, 0, 0,221,102, 69,191, 57,174, 76,190, 34,194, 26, 63, 0, 0, 0, 0, 37,255, 16, 63,241,161, 95, 62,164,111, 75, 63, - 0, 0, 0, 0,154,112,130, 64,183,178,128, 63,112,236,188, 64, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 1, 0,128, 50, 0, 0, 0,179, - 0, 0, 0, 0, 1, 0,128, 50, 1, 0,128, 63, 1, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 1, 0, 0, 39, 1, 0, 0, 52, 1, 0,128, 39, 0, 0,128, 63, 53,236,148,190,222,102, 69,191, 37,255, 16, 63, - 0, 0, 0,128, 24,134,116, 63, 57,174, 76,190,240,161, 95, 62, 0, 0, 0,128,235, 13, 98,189, 34,194, 26, 63,166,111, 75, 63, - 0, 0, 0,128,208, 19, 13, 63,234, 65,102,190, 10, 10,231,192, 0, 0,128, 63, 1, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, - 5, 0, 1, 0, 0, 0, 68, 0, 79, 66, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, - 0, 0, 0, 0, 56,180,150,201, 0, 0,128, 63,169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,229,208, 34, 62, 0, 0, 0, 0, -143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 1, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 1, 0,128, 50, 0, 0, 0,179, 0, 0, 0, 0, 1, 0,128, 50, 1, 0,128, 63, 1, 0, 0, 51, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 0, 39, 1, 0, 0, 52, 1, 0,128, 39, + 0, 0,128, 63, 53,236,148,190,222,102, 69,191, 37,255, 16, 63, 0, 0, 0,128, 24,134,116, 63, 57,174, 76,190,240,161, 95, 62, + 0, 0, 0,128,235, 13, 98,189, 34,194, 26, 63,166,111, 75, 63, 0, 0, 0,128,208, 19, 13, 63,234, 65,102,190, 10, 10,231,192, + 0, 0,128, 63, 1, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 5, 0, 1, 0, 0, 0, 68, 0, 79, 66, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 56,180,150,201, 0, 0,128, 63,169, 19,208, 60, + 0, 0,128, 63,205,204,204, 62,229,208, 34, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 4, 0, 1, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 64, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 65, 0, 0, 32, 3, 0, 0, - 96,246, 39, 3, 1, 0, 0, 0, 44, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 65, 77, 97,116,101,114,105, 97,108, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 23, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0,205,204, 76, 63,205,204, 76, 63,205,204, 76, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,205,204, 76, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 10,215, 35, 60, 0, 0, 0, 0, - 0, 0, 8, 0, 1, 0, 50, 0,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 63, - 0, 0, 0, 0, 0, 0,160, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 2, 0, 2, 0, 50, 0, 0, 6, 0, 0,128, 63, - 0, 0,128, 63, 18, 0, 18, 0, 10,215,163, 59, 10,215,163, 59, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 3, - 67, 0, 0, 3, 1, 0, 4, 0, 12, 0, 4, 0, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0,128, 64, 0, 0, 0, 63, -205,204,204, 61, 0, 0, 0, 63,205,204,204, 61,205,204,204, 61, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,192,249, 39, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 77, 65, 0, 0, 32, 3, 0, 0,240,123,192, 2, 0, 0, 0, 0, 44, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 77, 65, 77, 97,116,101,114,105, 97,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,205,204, 76, 63,205,204, 76, 63,205,204, 76, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,205,204, 76, 63, + 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 10,215, 35, 60, 0, 0, 0, 0, 0, 0, 8, 0, 1, 0, 50, 0,205,204, 76, 62, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 63, 0, 0, 0, 0, 0, 0,160, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 2, 0, 2, 0, 50, 0, 0, 6, 0, 0,128, 63, 0, 0,128, 63, 18, 0, 18, 0, 10,215,163, 59, 10,215,163, 59, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 3, 67, 0, 0, 3, 1, 0, 4, 0, 12, 0, 4, 0, 0, 0, 0, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0,128, 64, 0, 0, 0, 63,205,204,204, 61, 0, 0, 0, 63,205,204,204, 61,205,204,204, 61, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 80,127,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16,251, 39, 3, 1, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 63,205,204, 76, 63,205,204, 76, 63,205,204, 76, 61,205,204,204, 61, -102,102,166, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 16, 1, 0, 0,192,249, 39, 3, 1, 0, 0, 0, - 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,251, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, -144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63,205,204, 76, 62, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,128,192, 2, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 63, +205,204, 76, 63,205,204, 76, 63,205,204, 76, 61,205,204,204, 61,102,102,166, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 16, 1, 0, 0, 80,127,192, 2, 0, 0, 0, 0, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 80,145,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 40, 0, 0, 0, - 16,251, 39, 3, 1, 0, 0, 0, 19, 0, 0, 0, 1, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 48,212,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 16, 0, 0, - 48,212,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 51, 2, 2, 2, 51, 6, 6, 6,153, 6, 6, 6,153, 6, 6, 6,153, 4, 4, 4,102, 3, 3, 3,102, 2, 2, 2, 51, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 51, 8, 8, 8,153, 11, 11, 11,204, - 13, 13, 13,255, 12, 12, 12,255, 12, 12, 12,255, 11, 11, 11,255, 10, 10, 10,255, 10, 10, 10,255, 9, 9, 9,255, 9, 9, 9,255, - 9, 9, 9,255, 4, 4, 4,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 51, 10, 10, 10,153, 18, 18, 18,255, 20, 20, 20,255, 22, 22, 22,255, - 23, 23, 23,255, 22, 22, 22,255, 20, 20, 20,255, 19, 19, 19,255, 16, 16, 16,255, 14, 14, 14,255, 11, 11, 11,255, 10, 10, 10,255, - 9, 9, 9,255, 9, 9, 9,255, 9, 9, 9,255, 8, 8, 8,204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7,102, 19, 19, 19,204, 27, 27, 27,255, 31, 31, 31,255, 32, 32, 32,255, 33, 33, 33,255, - 33, 33, 33,255, 31, 31, 31,255, 30, 30, 30,255, 27, 27, 27,255, 25, 25, 25,255, 22, 22, 22,255, 19, 19, 19,255, 16, 16, 16,255, - 12, 12, 12,255, 10, 10, 10,255, 10, 10, 10,255, 10, 10, 10,255, 10, 10, 10,255, 4, 4, 4,102, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 13, 13, 13,153, 29, 29, 29,255, 37, 37, 37,255, 40, 40, 40,255, 42, 42, 42,255, 42, 42, 42,255, 43, 43, 43,255, - 41, 41, 41,255, 40, 40, 40,255, 38, 38, 38,255, 36, 36, 36,255, 33, 33, 33,255, 30, 30, 30,255, 27, 27, 27,255, 24, 24, 24,255, - 20, 20, 20,255, 16, 16, 16,255, 12, 12, 12,255, 10, 10, 10,255, 10, 10, 10,255, 10, 10, 10,255, 7, 7, 7,153, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 13, 13, 13,102, 37, 37, 37,255, 44, 44, 44,255, 48, 48, 48,255, 50, 50, 50,255, 51, 51, 51,255, 51, 51, 51,255, 50, 50, 50,255, - 49, 49, 49,255, 48, 48, 48,255, 45, 45, 45,255, 43, 43, 43,255, 41, 41, 41,255, 37, 37, 37,255, 34, 34, 34,255, 31, 31, 31,255, - 28, 28, 28,255, 24, 24, 24,255, 20, 20, 20,255, 15, 15, 15,255, 11, 11, 11,255, 10, 10, 10,255, 11, 11, 11,255, 7, 7, 7,153, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13,102, - 41, 41, 41,255, 50, 50, 50,255, 54, 54, 54,255, 57, 57, 57,255, 58, 58, 58,255, 59, 59, 59,255, 59, 59, 59,255, 58, 58, 58,255, - 57, 57, 57,255, 55, 55, 55,255, 53, 53, 53,255, 51, 51, 51,255, 48, 48, 48,255, 45, 45, 45,255, 41, 41, 41,255, 38, 38, 38,255, - 35, 35, 35,255, 31, 31, 31,255, 27, 27, 27,255, 23, 23, 23,255, 17, 17, 17,255, 12, 12, 12,255, 11, 11, 11,255, 11, 11, 11,255, - 5, 5, 5,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 36, 36,204, - 53, 53, 53,255, 59, 59, 59,255, 63, 63, 63,255, 65, 65, 65,255, 66, 66, 66,255, 66, 66, 66,255, 66, 66, 66,255, 65, 65, 65,255, - 64, 64, 64,255, 62, 62, 62,255, 60, 60, 60,255, 57, 57, 57,255, 54, 54, 54,255, 51, 51, 51,255, 48, 48, 48,255, 44, 44, 44,255, - 41, 41, 41,255, 37, 37, 37,255, 33, 33, 33,255, 29, 29, 29,255, 24, 24, 24,255, 19, 19, 19,255, 13, 13, 13,255, 11, 11, 11,255, - 12, 12, 12,255, 3, 3, 3, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19,102, 56, 56, 56,255, - 64, 64, 64,255, 68, 68, 68,255, 71, 71, 71,255, 73, 73, 73,255, 74, 74, 74,255, 74, 74, 74,255, 73, 73, 73,255, 72, 72, 72,255, - 71, 71, 71,255, 69, 69, 69,255, 67, 67, 67,255, 64, 64, 64,255, 61, 61, 61,255, 58, 58, 58,255, 54, 54, 54,255, 50, 50, 50,255, - 47, 47, 47,255, 43, 43, 43,255, 39, 39, 39,255, 34, 34, 34,255, 30, 30, 30,255, 25, 25, 25,255, 19, 19, 19,255, 13, 13, 13,255, - 12, 12, 12,255, 10, 10, 10,204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54,255, 66, 66, 66,255, - 72, 72, 72,255, 77, 77, 77,255, 79, 79, 79,255, 81, 81, 81,255, 81, 81, 81,255, 81, 81, 81,255, 80, 80, 80,255, 79, 79, 79,255, - 77, 77, 77,255, 75, 75, 75,255, 73, 73, 73,255, 70, 70, 70,255, 67, 67, 67,255, 63, 63, 63,255, 60, 60, 60,255, 56, 56, 56,255, - 52, 52, 52,255, 49, 49, 49,255, 44, 44, 44,255, 40, 40, 40,255, 35, 35, 35,255, 30, 30, 30,255, 24, 24, 24,255, 18, 18, 18,255, - 12, 12, 12,255, 12, 12, 12,255, 6, 6, 6,102, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22,102, 67, 67, 67,255, 76, 76, 76,255, - 81, 81, 81,255, 84, 84, 84,255, 87, 87, 87,255, 88, 88, 88,255, 88, 88, 88,255, 88, 88, 88,255, 87, 87, 87,255, 86, 86, 86,255, - 84, 84, 84,255, 82, 82, 82,255, 79, 79, 79,255, 76, 76, 76,255, 73, 73, 73,255, 69, 69, 69,255, 65, 65, 65,255, 62, 62, 62,255, - 58, 58, 58,255, 54, 54, 54,255, 49, 49, 49,255, 45, 45, 45,255, 40, 40, 40,255, 35, 35, 35,255, 29, 29, 29,255, 23, 23, 23,255, - 16, 16, 16,255, 12, 12, 12,255, 12, 12, 12,204, 0, 0, 0, 0, 0, 0, 0, 0, 49, 49, 49,204, 76, 76, 76,255, 84, 84, 84,255, - 89, 89, 89,255, 92, 92, 92,255, 94, 94, 94,255, 95, 95, 95,255, 95, 95, 95,255, 95, 95, 95,255, 94, 94, 94,255, 93, 93, 93,255, - 91, 91, 91,255, 88, 88, 88,255, 85, 85, 85,255, 82, 82, 82,255, 79, 79, 79,255, 75, 75, 75,255, 71, 71, 71,255, 67, 67, 67,255, - 63, 63, 63,255, 59, 59, 59,255, 55, 55, 55,255, 50, 50, 50,255, 45, 45, 45,255, 40, 40, 40,255, 34, 34, 34,255, 28, 28, 28,255, - 21, 21, 21,255, 13, 13, 13,255, 14, 14, 14,255, 0, 0, 0, 0, 14, 14, 14,102, 70, 70, 70,255, 85, 85, 85,255, 92, 92, 92,255, - 97, 97, 97,255,100,100,100,255,102,102,102,255,102,102,102,255,103,103,103,255,102,102,102,255,101,101,101,255, 99, 99, 99,255, - 97, 97, 97,255, 94, 94, 94,255, 91, 91, 91,255, 88, 88, 88,255, 84, 84, 84,255, 81, 81, 81,255, 77, 77, 77,255, 72, 72, 72,255, - 68, 68, 68,255, 64, 64, 64,255, 59, 59, 59,255, 55, 55, 55,255, 50, 50, 50,255, 44, 44, 44,255, 39, 39, 39,255, 32, 32, 32,255, - 25, 25, 25,255, 17, 17, 17,255, 13, 13, 13,255, 7, 7, 7,102, 24, 24, 24,102, 80, 80, 80,255, 93, 93, 93,255,100,100,100,255, -104,104,104,255,107,107,107,255,109,109,109,255,109,109,109,255,109,109,109,255,109,109,109,255,107,107,107,255,106,106,106,255, -103,103,103,255,100,100,100,255, 97, 97, 97,255, 94, 94, 94,255, 90, 90, 90,255, 86, 86, 86,255, 82, 82, 82,255, 77, 77, 77,255, - 73, 73, 73,255, 69, 69, 69,255, 64, 64, 64,255, 59, 59, 59,255, 54, 54, 54,255, 49, 49, 49,255, 43, 43, 43,255, 36, 36, 36,255, - 29, 29, 29,255, 21, 21, 21,255, 14, 14, 14,255, 10, 10, 10,153, 29, 29, 29,102, 89, 89, 89,255,100,100,100,255,107,107,107,255, -112,112,112,255,114,114,114,255,116,116,116,255,116,116,116,255,116,116,116,255,115,115,115,255,114,114,114,255,112,112,112,255, -110,110,110,255,107,107,107,255,104,104,104,255,100,100,100,255, 96, 96, 96,255, 92, 92, 92,255, 87, 87, 87,255, 83, 83, 83,255, - 78, 78, 78,255, 73, 73, 73,255, 68, 68, 68,255, 63, 63, 63,255, 58, 58, 58,255, 52, 52, 52,255, 46, 46, 46,255, 40, 40, 40,255, - 33, 33, 33,255, 24, 24, 24,255, 17, 17, 17,255, 13, 13, 13,204, 46, 46, 46,153, 95, 95, 95,255,107,107,107,255,114,114,114,255, -118,118,118,255,121,121,121,255,122,122,122,255,123,123,123,255,123,123,123,255,122,122,122,255,122,122,122,255,120,120,120,255, -118,118,118,255,114,114,114,255,110,110,110,255,106,106,106,255,101,101,101,255, 97, 97, 97,255, 92, 92, 92,255, 87, 87, 87,255, - 83, 83, 83,255, 78, 78, 78,255, 73, 73, 73,255, 68, 68, 68,255, 62, 62, 62,255, 56, 56, 56,255, 50, 50, 50,255, 44, 44, 44,255, - 36, 36, 36,255, 28, 28, 28,255, 19, 19, 19,255, 12, 12, 12,204, 47, 47, 47,153,101,101,101,255,113,113,113,255,120,120,120,255, -125,125,125,255,127,127,127,255,129,129,129,255,130,130,130,255,130,130,130,255,131,131,131,255,131,131,131,255,131,131,131,255, -129,129,129,255,125,125,125,255,120,120,120,255,113,113,113,255,108,108,108,255,103,103,103,255, 97, 97, 97,255, 92, 92, 92,255, - 87, 87, 87,255, 82, 82, 82,255, 77, 77, 77,255, 72, 72, 72,255, 66, 66, 66,255, 60, 60, 60,255, 54, 54, 54,255, 47, 47, 47,255, - 39, 39, 39,255, 31, 31, 31,255, 22, 22, 22,255, 12, 12, 12,204, 48, 48, 48,153,106,106,106,255,118,118,118,255,126,126,126,255, -131,131,131,255,134,134,134,255,135,135,135,255,137,137,137,255,138,138,138,255,142,142,142,255,147,147,147,255,149,149,149,255, -148,148,148,255,142,142,142,255,133,133,133,255,124,124,124,255,115,115,115,255,108,108,108,255,102,102,102,255, 97, 97, 97,255, - 92, 92, 92,255, 87, 87, 87,255, 81, 81, 81,255, 75, 75, 75,255, 69, 69, 69,255, 63, 63, 63,255, 57, 57, 57,255, 49, 49, 49,255, - 42, 42, 42,255, 33, 33, 33,255, 24, 24, 24,255, 9, 9, 9,153, 32, 32, 32,102,109,109,109,255,123,123,123,255,131,131,131,255, -136,136,136,255,140,140,140,255,142,142,142,255,144,144,144,255,148,148,148,255,156,156,156,255,168,168,168,255,176,176,176,255, -177,177,177,255,168,168,168,255,153,153,153,255,137,137,137,255,124,124,124,255,114,114,114,255,107,107,107,255,101,101,101,255, - 96, 96, 96,255, 90, 90, 90,255, 85, 85, 85,255, 79, 79, 79,255, 72, 72, 72,255, 66, 66, 66,255, 59, 59, 59,255, 52, 52, 52,255, - 44, 44, 44,255, 35, 35, 35,255, 26, 26, 26,255, 10, 10, 10,153, 17, 17, 17, 51,110,110,110,255,127,127,127,255,136,136,136,255, -142,142,142,255,145,145,145,255,148,148,148,255,151,151,151,255,159,159,159,255,174,174,174,255,195,195,195,255,212,212,212,255, -216,216,216,255,204,204,204,255,179,179,179,255,154,154,154,255,135,135,135,255,121,121,121,255,112,112,112,255,106,106,106,255, - 99, 99, 99,255, 94, 94, 94,255, 88, 88, 88,255, 82, 82, 82,255, 76, 76, 76,255, 69, 69, 69,255, 62, 62, 62,255, 54, 54, 54,255, - 46, 46, 46,255, 37, 37, 37,255, 26, 26, 26,255, 6, 6, 6,102, 0, 0, 0, 0,107,107,107,255,130,130,130,255,140,140,140,255, -146,146,146,255,150,150,150,255,153,153,153,255,158,158,158,255,169,169,169,255,191,191,191,255,219,219,219,255,246,246,246,255, -254,254,254,255,237,237,237,255,204,204,204,255,170,170,170,255,145,145,145,255,127,127,127,255,117,117,117,255,110,110,110,255, -103,103,103,255, 97, 97, 97,255, 91, 91, 91,255, 85, 85, 85,255, 78, 78, 78,255, 71, 71, 71,255, 64, 64, 64,255, 55, 55, 55,255, - 47, 47, 47,255, 37, 37, 37,255, 25, 25, 25,255, 3, 3, 3, 51, 0, 0, 0, 0, 65, 65, 65,153,129,129,129,255,142,142,142,255, -149,149,149,255,154,154,154,255,157,157,157,255,163,163,163,255,176,176,176,255,199,199,199,255,232,232,232,255,255,255,255,255, -255,255,255,255,255,255,255,255,220,220,220,255,181,181,181,255,151,151,151,255,132,132,132,255,121,121,121,255,113,113,113,255, -106,106,106,255,100,100,100,255, 94, 94, 94,255, 87, 87, 87,255, 80, 80, 80,255, 73, 73, 73,255, 65, 65, 65,255, 57, 57, 57,255, - 48, 48, 48,255, 38, 38, 38,255, 16, 16, 16,153, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 51,127,127,127,255,143,143,143,255, -152,152,152,255,157,157,157,255,161,161,161,255,165,165,165,255,177,177,177,255,198,198,198,255,227,227,227,255,253,253,253,255, -255,255,255,255,250,250,250,255,217,217,217,255,181,181,181,255,153,153,153,255,135,135,135,255,124,124,124,255,117,117,117,255, -110,110,110,255,103,103,103,255, 96, 96, 96,255, 89, 89, 89,255, 82, 82, 82,255, 74, 74, 74,255, 66, 66, 66,255, 57, 57, 57,255, - 48, 48, 48,255, 35, 35, 35,255, 10, 10, 10,153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 93, 93,204,141,141,141,255, -153,153,153,255,159,159,159,255,163,163,163,255,167,167,167,255,174,174,174,255,188,188,188,255,209,209,209,255,228,228,228,255, -234,234,234,255,224,224,224,255,200,200,200,255,173,173,173,255,151,151,151,255,136,136,136,255,127,127,127,255,119,119,119,255, -112,112,112,255,105,105,105,255, 98, 98, 98,255, 91, 91, 91,255, 83, 83, 83,255, 75, 75, 75,255, 66, 66, 66,255, 57, 57, 57,255, - 46, 46, 46,255, 24, 24, 24,204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 20, 20, 51,134,134,134,255, -151,151,151,255,160,160,160,255,164,164,164,255,167,167,167,255,171,171,171,255,178,178,178,255,189,189,189,255,200,200,200,255, -202,202,202,255,195,195,195,255,180,180,180,255,163,163,163,255,148,148,148,255,137,137,137,255,129,129,129,255,121,121,121,255, -114,114,114,255,107,107,107,255, 99, 99, 99,255, 91, 91, 91,255, 83, 83, 83,255, 74, 74, 74,255, 65, 65, 65,255, 55, 55, 55,255, - 41, 41, 41,255, 7, 7, 7, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 49, 49,102, -145,145,145,255,157,157,157,255,164,164,164,255,167,167,167,255,170,170,170,255,172,172,172,255,176,176,176,255,180,180,180,255, -179,179,179,255,174,174,174,255,165,165,165,255,155,155,155,255,145,145,145,255,137,137,137,255,130,130,130,255,122,122,122,255, -115,115,115,255,107,107,107,255, 99, 99, 99,255, 91, 91, 91,255, 82, 82, 82,255, 73, 73, 73,255, 63, 63, 63,255, 50, 50, 50,255, - 22, 22, 22,153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 78, 78, 78,153,149,149,149,255,160,160,160,255,166,166,166,255,168,168,168,255,169,169,169,255,170,170,170,255,169,169,169,255, -167,167,167,255,164,164,164,255,158,158,158,255,151,151,151,255,144,144,144,255,137,137,137,255,130,130,130,255,123,123,123,255, -115,115,115,255,106,106,106,255, 98, 98, 98,255, 89, 89, 89,255, 80, 80, 80,255, 70, 70, 70,255, 58, 58, 58,255, 27, 27, 27,153, - 3, 3, 3, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 80, 80, 80,153,150,150,150,255,160,160,160,255,165,165,165,255,167,167,167,255,167,167,167,255,166,166,166,255, -163,163,163,255,160,160,160,255,155,155,155,255,149,149,149,255,143,143,143,255,137,137,137,255,129,129,129,255,121,121,121,255, -113,113,113,255,105,105,105,255, 96, 96, 96,255, 86, 86, 86,255, 76, 76, 76,255, 63, 63, 63,255, 38, 38, 38,204, 7, 7, 7, 51, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 78, 78, 78,153,147,147,147,255,157,157,157,255,161,161,161,255,163,163,163,255,162,162,162,255, -160,160,160,255,157,157,157,255,152,152,152,255,147,147,147,255,141,141,141,255,135,135,135,255,127,127,127,255,119,119,119,255, -110,110,110,255,101,101,101,255, 91, 91, 91,255, 80, 80, 80,255, 66, 66, 66,255, 32, 32, 32,153, 7, 7, 7, 51, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,134,134,134,255,148,148,148,255,154,154,154,255,155,155,155,255, -154,154,154,255,152,152,152,255,147,147,147,255,142,142,142,255,136,136,136,255,130,130,130,255,122,122,122,255,114,114,114,255, -104,104,104,255, 93, 93, 93,255, 81, 81, 81,255, 54, 54, 54,204, 22, 22, 22,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 73, 73,153,103,103,103,204,137,137,137,255, -140,140,140,255,140,140,140,255,137,137,137,255,133,133,133,255,127,127,127,255,120,120,120,255,113,113,113,255,102,102,102,255, - 91, 91, 91,255, 64, 64, 64,204, 28, 28, 28,102, 6, 6, 6, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 46, 46, 46,102, 72, 72, 72,153, 72, 72, 72,153, 92, 92, 92,204, 88, 88, 88,204, 81, 81, 81,204, 54, 54, 54,153, 35, 35, 35,102, - 16, 16, 16, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 0, 0,104, 1, 0, 0,112,251, 39, 3, 1, 0, 0, 0, - 39, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 84,101,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 22, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 62, 0, 0,160, 64, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 64, - 0, 0, 0, 64, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 32, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 5, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 8, 0, 0, 0, 1, 0, 1, 0, 3, 0, 2, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,205,204,204, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,253, 39, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 16,253, 39, 3, 1, 0, 0, 0, - 19, 0, 0, 0, 1, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 48,230,129, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 16, 0, 0, 48,230,129, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, + 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 40, 0, 0, 0,160,128,192, 2, 0, 0, 0, 0, 19, 0, 0, 0, 1, 0, 0, 0, + 32, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 16,129,192, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 16, 0, 0, 16,129,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 51, 2, 2, 2, 51, 6, 6, 6,153, 6, 6, 6,153, + 6, 6, 6,153, 4, 4, 4,102, 3, 3, 3,102, 2, 2, 2, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 3, 3, 51, 8, 8, 8,153, 11, 11, 11,204, 13, 13, 13,255, 12, 12, 12,255, 12, 12, 12,255, 11, 11, 11,255, + 10, 10, 10,255, 10, 10, 10,255, 9, 9, 9,255, 9, 9, 9,255, 9, 9, 9,255, 4, 4, 4,102, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 51, + 10, 10, 10,153, 18, 18, 18,255, 20, 20, 20,255, 22, 22, 22,255, 23, 23, 23,255, 22, 22, 22,255, 20, 20, 20,255, 19, 19, 19,255, + 16, 16, 16,255, 14, 14, 14,255, 11, 11, 11,255, 10, 10, 10,255, 9, 9, 9,255, 9, 9, 9,255, 9, 9, 9,255, 8, 8, 8,204, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7,102, 19, 19, 19,204, + 27, 27, 27,255, 31, 31, 31,255, 32, 32, 32,255, 33, 33, 33,255, 33, 33, 33,255, 31, 31, 31,255, 30, 30, 30,255, 27, 27, 27,255, + 25, 25, 25,255, 22, 22, 22,255, 19, 19, 19,255, 16, 16, 16,255, 12, 12, 12,255, 10, 10, 10,255, 10, 10, 10,255, 10, 10, 10,255, + 10, 10, 10,255, 4, 4, 4,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13,153, 29, 29, 29,255, 37, 37, 37,255, + 40, 40, 40,255, 42, 42, 42,255, 42, 42, 42,255, 43, 43, 43,255, 41, 41, 41,255, 40, 40, 40,255, 38, 38, 38,255, 36, 36, 36,255, + 33, 33, 33,255, 30, 30, 30,255, 27, 27, 27,255, 24, 24, 24,255, 20, 20, 20,255, 16, 16, 16,255, 12, 12, 12,255, 10, 10, 10,255, + 10, 10, 10,255, 10, 10, 10,255, 7, 7, 7,153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13,102, 37, 37, 37,255, 44, 44, 44,255, 48, 48, 48,255, + 50, 50, 50,255, 51, 51, 51,255, 51, 51, 51,255, 50, 50, 50,255, 49, 49, 49,255, 48, 48, 48,255, 45, 45, 45,255, 43, 43, 43,255, + 41, 41, 41,255, 37, 37, 37,255, 34, 34, 34,255, 31, 31, 31,255, 28, 28, 28,255, 24, 24, 24,255, 20, 20, 20,255, 15, 15, 15,255, + 11, 11, 11,255, 10, 10, 10,255, 11, 11, 11,255, 7, 7, 7,153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13,102, 41, 41, 41,255, 50, 50, 50,255, 54, 54, 54,255, 57, 57, 57,255, + 58, 58, 58,255, 59, 59, 59,255, 59, 59, 59,255, 58, 58, 58,255, 57, 57, 57,255, 55, 55, 55,255, 53, 53, 53,255, 51, 51, 51,255, + 48, 48, 48,255, 45, 45, 45,255, 41, 41, 41,255, 38, 38, 38,255, 35, 35, 35,255, 31, 31, 31,255, 27, 27, 27,255, 23, 23, 23,255, + 17, 17, 17,255, 12, 12, 12,255, 11, 11, 11,255, 11, 11, 11,255, 5, 5, 5,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 36, 36,204, 53, 53, 53,255, 59, 59, 59,255, 63, 63, 63,255, 65, 65, 65,255, + 66, 66, 66,255, 66, 66, 66,255, 66, 66, 66,255, 65, 65, 65,255, 64, 64, 64,255, 62, 62, 62,255, 60, 60, 60,255, 57, 57, 57,255, + 54, 54, 54,255, 51, 51, 51,255, 48, 48, 48,255, 44, 44, 44,255, 41, 41, 41,255, 37, 37, 37,255, 33, 33, 33,255, 29, 29, 29,255, + 24, 24, 24,255, 19, 19, 19,255, 13, 13, 13,255, 11, 11, 11,255, 12, 12, 12,255, 3, 3, 3, 51, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19,102, 56, 56, 56,255, 64, 64, 64,255, 68, 68, 68,255, 71, 71, 71,255, 73, 73, 73,255, + 74, 74, 74,255, 74, 74, 74,255, 73, 73, 73,255, 72, 72, 72,255, 71, 71, 71,255, 69, 69, 69,255, 67, 67, 67,255, 64, 64, 64,255, + 61, 61, 61,255, 58, 58, 58,255, 54, 54, 54,255, 50, 50, 50,255, 47, 47, 47,255, 43, 43, 43,255, 39, 39, 39,255, 34, 34, 34,255, + 30, 30, 30,255, 25, 25, 25,255, 19, 19, 19,255, 13, 13, 13,255, 12, 12, 12,255, 10, 10, 10,204, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54,255, 66, 66, 66,255, 72, 72, 72,255, 77, 77, 77,255, 79, 79, 79,255, 81, 81, 81,255, + 81, 81, 81,255, 81, 81, 81,255, 80, 80, 80,255, 79, 79, 79,255, 77, 77, 77,255, 75, 75, 75,255, 73, 73, 73,255, 70, 70, 70,255, + 67, 67, 67,255, 63, 63, 63,255, 60, 60, 60,255, 56, 56, 56,255, 52, 52, 52,255, 49, 49, 49,255, 44, 44, 44,255, 40, 40, 40,255, + 35, 35, 35,255, 30, 30, 30,255, 24, 24, 24,255, 18, 18, 18,255, 12, 12, 12,255, 12, 12, 12,255, 6, 6, 6,102, 0, 0, 0, 0, + 0, 0, 0, 0, 22, 22, 22,102, 67, 67, 67,255, 76, 76, 76,255, 81, 81, 81,255, 84, 84, 84,255, 87, 87, 87,255, 88, 88, 88,255, + 88, 88, 88,255, 88, 88, 88,255, 87, 87, 87,255, 86, 86, 86,255, 84, 84, 84,255, 82, 82, 82,255, 79, 79, 79,255, 76, 76, 76,255, + 73, 73, 73,255, 69, 69, 69,255, 65, 65, 65,255, 62, 62, 62,255, 58, 58, 58,255, 54, 54, 54,255, 49, 49, 49,255, 45, 45, 45,255, + 40, 40, 40,255, 35, 35, 35,255, 29, 29, 29,255, 23, 23, 23,255, 16, 16, 16,255, 12, 12, 12,255, 12, 12, 12,204, 0, 0, 0, 0, + 0, 0, 0, 0, 49, 49, 49,204, 76, 76, 76,255, 84, 84, 84,255, 89, 89, 89,255, 92, 92, 92,255, 94, 94, 94,255, 95, 95, 95,255, + 95, 95, 95,255, 95, 95, 95,255, 94, 94, 94,255, 93, 93, 93,255, 91, 91, 91,255, 88, 88, 88,255, 85, 85, 85,255, 82, 82, 82,255, + 79, 79, 79,255, 75, 75, 75,255, 71, 71, 71,255, 67, 67, 67,255, 63, 63, 63,255, 59, 59, 59,255, 55, 55, 55,255, 50, 50, 50,255, + 45, 45, 45,255, 40, 40, 40,255, 34, 34, 34,255, 28, 28, 28,255, 21, 21, 21,255, 13, 13, 13,255, 14, 14, 14,255, 0, 0, 0, 0, + 14, 14, 14,102, 70, 70, 70,255, 85, 85, 85,255, 92, 92, 92,255, 97, 97, 97,255,100,100,100,255,102,102,102,255,102,102,102,255, +103,103,103,255,102,102,102,255,101,101,101,255, 99, 99, 99,255, 97, 97, 97,255, 94, 94, 94,255, 91, 91, 91,255, 88, 88, 88,255, + 84, 84, 84,255, 81, 81, 81,255, 77, 77, 77,255, 72, 72, 72,255, 68, 68, 68,255, 64, 64, 64,255, 59, 59, 59,255, 55, 55, 55,255, + 50, 50, 50,255, 44, 44, 44,255, 39, 39, 39,255, 32, 32, 32,255, 25, 25, 25,255, 17, 17, 17,255, 13, 13, 13,255, 7, 7, 7,102, + 24, 24, 24,102, 80, 80, 80,255, 93, 93, 93,255,100,100,100,255,104,104,104,255,107,107,107,255,109,109,109,255,109,109,109,255, +109,109,109,255,109,109,109,255,107,107,107,255,106,106,106,255,103,103,103,255,100,100,100,255, 97, 97, 97,255, 94, 94, 94,255, + 90, 90, 90,255, 86, 86, 86,255, 82, 82, 82,255, 77, 77, 77,255, 73, 73, 73,255, 69, 69, 69,255, 64, 64, 64,255, 59, 59, 59,255, + 54, 54, 54,255, 49, 49, 49,255, 43, 43, 43,255, 36, 36, 36,255, 29, 29, 29,255, 21, 21, 21,255, 14, 14, 14,255, 10, 10, 10,153, + 29, 29, 29,102, 89, 89, 89,255,100,100,100,255,107,107,107,255,112,112,112,255,114,114,114,255,116,116,116,255,116,116,116,255, +116,116,116,255,115,115,115,255,114,114,114,255,112,112,112,255,110,110,110,255,107,107,107,255,104,104,104,255,100,100,100,255, + 96, 96, 96,255, 92, 92, 92,255, 87, 87, 87,255, 83, 83, 83,255, 78, 78, 78,255, 73, 73, 73,255, 68, 68, 68,255, 63, 63, 63,255, + 58, 58, 58,255, 52, 52, 52,255, 46, 46, 46,255, 40, 40, 40,255, 33, 33, 33,255, 24, 24, 24,255, 17, 17, 17,255, 13, 13, 13,204, + 46, 46, 46,153, 95, 95, 95,255,107,107,107,255,114,114,114,255,118,118,118,255,121,121,121,255,122,122,122,255,123,123,123,255, +123,123,123,255,122,122,122,255,122,122,122,255,120,120,120,255,118,118,118,255,114,114,114,255,110,110,110,255,106,106,106,255, +101,101,101,255, 97, 97, 97,255, 92, 92, 92,255, 87, 87, 87,255, 83, 83, 83,255, 78, 78, 78,255, 73, 73, 73,255, 68, 68, 68,255, + 62, 62, 62,255, 56, 56, 56,255, 50, 50, 50,255, 44, 44, 44,255, 36, 36, 36,255, 28, 28, 28,255, 19, 19, 19,255, 12, 12, 12,204, + 47, 47, 47,153,101,101,101,255,113,113,113,255,120,120,120,255,125,125,125,255,127,127,127,255,129,129,129,255,130,130,130,255, +130,130,130,255,131,131,131,255,131,131,131,255,131,131,131,255,129,129,129,255,125,125,125,255,120,120,120,255,113,113,113,255, +108,108,108,255,103,103,103,255, 97, 97, 97,255, 92, 92, 92,255, 87, 87, 87,255, 82, 82, 82,255, 77, 77, 77,255, 72, 72, 72,255, + 66, 66, 66,255, 60, 60, 60,255, 54, 54, 54,255, 47, 47, 47,255, 39, 39, 39,255, 31, 31, 31,255, 22, 22, 22,255, 12, 12, 12,204, + 48, 48, 48,153,106,106,106,255,118,118,118,255,126,126,126,255,131,131,131,255,134,134,134,255,135,135,135,255,137,137,137,255, +138,138,138,255,142,142,142,255,147,147,147,255,149,149,149,255,148,148,148,255,142,142,142,255,133,133,133,255,124,124,124,255, +115,115,115,255,108,108,108,255,102,102,102,255, 97, 97, 97,255, 92, 92, 92,255, 87, 87, 87,255, 81, 81, 81,255, 75, 75, 75,255, + 69, 69, 69,255, 63, 63, 63,255, 57, 57, 57,255, 49, 49, 49,255, 42, 42, 42,255, 33, 33, 33,255, 24, 24, 24,255, 9, 9, 9,153, + 32, 32, 32,102,109,109,109,255,123,123,123,255,131,131,131,255,136,136,136,255,140,140,140,255,142,142,142,255,144,144,144,255, +148,148,148,255,156,156,156,255,168,168,168,255,176,176,176,255,177,177,177,255,168,168,168,255,153,153,153,255,137,137,137,255, +124,124,124,255,114,114,114,255,107,107,107,255,101,101,101,255, 96, 96, 96,255, 90, 90, 90,255, 85, 85, 85,255, 79, 79, 79,255, + 72, 72, 72,255, 66, 66, 66,255, 59, 59, 59,255, 52, 52, 52,255, 44, 44, 44,255, 35, 35, 35,255, 26, 26, 26,255, 10, 10, 10,153, + 17, 17, 17, 51,110,110,110,255,127,127,127,255,136,136,136,255,142,142,142,255,145,145,145,255,148,148,148,255,151,151,151,255, +159,159,159,255,174,174,174,255,195,195,195,255,212,212,212,255,216,216,216,255,204,204,204,255,179,179,179,255,154,154,154,255, +135,135,135,255,121,121,121,255,112,112,112,255,106,106,106,255, 99, 99, 99,255, 94, 94, 94,255, 88, 88, 88,255, 82, 82, 82,255, + 76, 76, 76,255, 69, 69, 69,255, 62, 62, 62,255, 54, 54, 54,255, 46, 46, 46,255, 37, 37, 37,255, 26, 26, 26,255, 6, 6, 6,102, + 0, 0, 0, 0,107,107,107,255,130,130,130,255,140,140,140,255,146,146,146,255,150,150,150,255,153,153,153,255,158,158,158,255, +169,169,169,255,191,191,191,255,219,219,219,255,246,246,246,255,254,254,254,255,237,237,237,255,204,204,204,255,170,170,170,255, +145,145,145,255,127,127,127,255,117,117,117,255,110,110,110,255,103,103,103,255, 97, 97, 97,255, 91, 91, 91,255, 85, 85, 85,255, + 78, 78, 78,255, 71, 71, 71,255, 64, 64, 64,255, 55, 55, 55,255, 47, 47, 47,255, 37, 37, 37,255, 25, 25, 25,255, 3, 3, 3, 51, + 0, 0, 0, 0, 65, 65, 65,153,129,129,129,255,142,142,142,255,149,149,149,255,154,154,154,255,157,157,157,255,163,163,163,255, +176,176,176,255,199,199,199,255,232,232,232,255,255,255,255,255,255,255,255,255,255,255,255,255,220,220,220,255,181,181,181,255, +151,151,151,255,132,132,132,255,121,121,121,255,113,113,113,255,106,106,106,255,100,100,100,255, 94, 94, 94,255, 87, 87, 87,255, + 80, 80, 80,255, 73, 73, 73,255, 65, 65, 65,255, 57, 57, 57,255, 48, 48, 48,255, 38, 38, 38,255, 16, 16, 16,153, 0, 0, 0, 0, + 0, 0, 0, 0, 21, 21, 21, 51,127,127,127,255,143,143,143,255,152,152,152,255,157,157,157,255,161,161,161,255,165,165,165,255, +177,177,177,255,198,198,198,255,227,227,227,255,253,253,253,255,255,255,255,255,250,250,250,255,217,217,217,255,181,181,181,255, +153,153,153,255,135,135,135,255,124,124,124,255,117,117,117,255,110,110,110,255,103,103,103,255, 96, 96, 96,255, 89, 89, 89,255, + 82, 82, 82,255, 74, 74, 74,255, 66, 66, 66,255, 57, 57, 57,255, 48, 48, 48,255, 35, 35, 35,255, 10, 10, 10,153, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 93, 93, 93,204,141,141,141,255,153,153,153,255,159,159,159,255,163,163,163,255,167,167,167,255, +174,174,174,255,188,188,188,255,209,209,209,255,228,228,228,255,234,234,234,255,224,224,224,255,200,200,200,255,173,173,173,255, +151,151,151,255,136,136,136,255,127,127,127,255,119,119,119,255,112,112,112,255,105,105,105,255, 98, 98, 98,255, 91, 91, 91,255, + 83, 83, 83,255, 75, 75, 75,255, 66, 66, 66,255, 57, 57, 57,255, 46, 46, 46,255, 24, 24, 24,204, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 20, 20, 20, 51,134,134,134,255,151,151,151,255,160,160,160,255,164,164,164,255,167,167,167,255, +171,171,171,255,178,178,178,255,189,189,189,255,200,200,200,255,202,202,202,255,195,195,195,255,180,180,180,255,163,163,163,255, +148,148,148,255,137,137,137,255,129,129,129,255,121,121,121,255,114,114,114,255,107,107,107,255, 99, 99, 99,255, 91, 91, 91,255, + 83, 83, 83,255, 74, 74, 74,255, 65, 65, 65,255, 55, 55, 55,255, 41, 41, 41,255, 7, 7, 7, 51, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 49, 49,102,145,145,145,255,157,157,157,255,164,164,164,255,167,167,167,255, +170,170,170,255,172,172,172,255,176,176,176,255,180,180,180,255,179,179,179,255,174,174,174,255,165,165,165,255,155,155,155,255, +145,145,145,255,137,137,137,255,130,130,130,255,122,122,122,255,115,115,115,255,107,107,107,255, 99, 99, 99,255, 91, 91, 91,255, + 82, 82, 82,255, 73, 73, 73,255, 63, 63, 63,255, 50, 50, 50,255, 22, 22, 22,153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 78, 78,153,149,149,149,255,160,160,160,255,166,166,166,255, +168,168,168,255,169,169,169,255,170,170,170,255,169,169,169,255,167,167,167,255,164,164,164,255,158,158,158,255,151,151,151,255, +144,144,144,255,137,137,137,255,130,130,130,255,123,123,123,255,115,115,115,255,106,106,106,255, 98, 98, 98,255, 89, 89, 89,255, + 80, 80, 80,255, 70, 70, 70,255, 58, 58, 58,255, 27, 27, 27,153, 3, 3, 3, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80,153,150,150,150,255,160,160,160,255, +165,165,165,255,167,167,167,255,167,167,167,255,166,166,166,255,163,163,163,255,160,160,160,255,155,155,155,255,149,149,149,255, +143,143,143,255,137,137,137,255,129,129,129,255,121,121,121,255,113,113,113,255,105,105,105,255, 96, 96, 96,255, 86, 86, 86,255, + 76, 76, 76,255, 63, 63, 63,255, 38, 38, 38,204, 7, 7, 7, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 78, 78,153,147,147,147,255, +157,157,157,255,161,161,161,255,163,163,163,255,162,162,162,255,160,160,160,255,157,157,157,255,152,152,152,255,147,147,147,255, +141,141,141,255,135,135,135,255,127,127,127,255,119,119,119,255,110,110,110,255,101,101,101,255, 91, 91, 91,255, 80, 80, 80,255, + 66, 66, 66,255, 32, 32, 32,153, 7, 7, 7, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +134,134,134,255,148,148,148,255,154,154,154,255,155,155,155,255,154,154,154,255,152,152,152,255,147,147,147,255,142,142,142,255, +136,136,136,255,130,130,130,255,122,122,122,255,114,114,114,255,104,104,104,255, 93, 93, 93,255, 81, 81, 81,255, 54, 54, 54,204, + 22, 22, 22,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 73, 73, 73,153,103,103,103,204,137,137,137,255,140,140,140,255,140,140,140,255,137,137,137,255,133,133,133,255, +127,127,127,255,120,120,120,255,113,113,113,255,102,102,102,255, 91, 91, 91,255, 64, 64, 64,204, 28, 28, 28,102, 6, 6, 6, 51, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46,102, 72, 72, 72,153, 72, 72, 72,153, 92, 92, 92,204, + 88, 88, 88,204, 81, 81, 81,204, 54, 54, 54,153, 35, 35, 35,102, 16, 16, 16, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 84, 69, 0, 0,104, 1, 0, 0, 80,145,192, 2, 0, 0, 0, 0, 39, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 84,101,120, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 62, 0, 0,160, 64, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 64, 0, 0, 0, 64, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 64, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 5, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 8, 0, 0, 0, 1, 0, 1, 0, 3, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, +205,204,204, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,147,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 0,147,192, 2, 0, 0, 0, 0, 19, 0, 0, 0, 1, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, + 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,112,147,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 0, 16, 0, 0,112,147,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, @@ -12329,24 +8706,25 @@ char datatoc_B_blend[]= { 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, - 0, 0, 0,255, 0, 0, 0,255, 77, 69, 0, 0,144, 1, 0, 0,112,253, 39, 3, 1, 0, 0, 0, 54, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 77, 69, 0, 0,144, 1, 0, 0, +176,163,192, 2, 0, 0, 0, 0, 54, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 67,117, 98,101, 0,112,104,101,114,101, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 77, 69, 67,117, 98,101, 0,112,104,101,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, +128,165,192, 2, 0, 0, 0, 0,176,172,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +128,167,192, 2, 0, 0, 0, 0, 48,170,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,255, 39, 3, 1, 0, 0, 0, 48, 6, 40, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 1, 40, 3, 1, 0, 0, 0,192, 3, 40, 3, 1, 0, 0, 0, +208,165,192, 2, 0, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +128,168,192, 2, 0, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,171,192, 2, 0, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8, 0, 0, 0, 12, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,128, 51, 0, 0, 0,180, + 0, 0, 0, 0, 4, 0,128, 63, 4, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 67, 0, 0, 0, 30, 0, 4, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 8, 0, 0, 0,128,165,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,240,123,192, 2, 0, 0, 0, 0, + 68, 65, 84, 65,104, 1, 0, 0,208,165,192, 2, 0, 0, 0, 0, 77, 1, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,255, 39, 3, 1, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, - 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 2, 40, 3, 1, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, - 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 4, 40, 3, 1, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, - 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,128, 51, 0, 0, 0,180, 0, 0, 0, 0, 4, 0,128, 63, 4, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 30, 0, 4, 0, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 0, 0, 0, 64,255, 39, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 96,246, 39, 3, 1, 0, 0, 0, 68, 65, 84, 65,104, 1, 0, 0,128,255, 39, 3, 1, 0, 0, 0, - 76, 1, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,167,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 32, 1, 40, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -12355,17 +8733,16 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,192, 0, 0, 0, 32, 1, 40, 3, 1, 0, 0, 0, - 60, 0, 0, 0, 8, 0, 0, 0, 0, 0,128, 63,255,255,127, 63, 0, 0,128,191,230, 73,230, 73, 26,182,255,127, 1, 0, 0, 0, - 0, 0,128, 63, 0, 0,128,191, 0, 0,128,191,230, 73, 26,182, 26,182,255,127, 1, 0, 0, 0, 1, 0,128,191,253,255,127,191, - 0, 0,128,191, 26,182, 26,182, 26,182,255,127, 1, 0, 0, 0,250,255,127,191, 3, 0,128, 63, 0, 0,128,191, 26,182,230, 73, - 26,182,255,127, 1, 0, 0, 0, 4, 0,128, 63,247,255,127, 63, 0, 0,128, 63,230, 73,230, 73,230, 73,255,127, 1, 0, 0, 0, -245,255,127, 63, 5, 0,128,191, 0, 0,128, 63,230, 73, 26,182,230, 73,255,127, 1, 0, 0, 0, 3, 0,128,191,250,255,127,191, - 0, 0,128, 63, 26,182, 26,182,230, 73,255,127, 1, 0, 0, 0,255,255,127,191, 0, 0,128, 63, 0, 0,128, 63, 26,182,230, 73, -230, 73,255,127, 1, 0, 0, 0, 68, 65, 84, 65,104, 1, 0, 0, 32, 2, 40, 3, 1, 0, 0, 0, 76, 1, 0, 0, 5, 0, 0, 0, - 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,192, 0, 0, 0,128,167,192, 2, 0, 0, 0, 0, 60, 0, 0, 0, 8, 0, 0, 0, 0, 0,128, 63,255,255,127, 63, + 0, 0,128,191,230, 73,230, 73, 26,182,255,127, 1, 0, 0, 0, 0, 0,128, 63, 0, 0,128,191, 0, 0,128,191,230, 73, 26,182, + 26,182,255,127, 1, 0, 0, 0, 1, 0,128,191,253,255,127,191, 0, 0,128,191, 26,182, 26,182, 26,182,255,127, 1, 0, 0, 0, +250,255,127,191, 3, 0,128, 63, 0, 0,128,191, 26,182,230, 73, 26,182,255,127, 1, 0, 0, 0, 4, 0,128, 63,247,255,127, 63, + 0, 0,128, 63,230, 73,230, 73,230, 73,255,127, 1, 0, 0, 0,245,255,127, 63, 5, 0,128,191, 0, 0,128, 63,230, 73, 26,182, +230, 73,255,127, 1, 0, 0, 0, 3, 0,128,191,250,255,127,191, 0, 0,128, 63, 26,182, 26,182,230, 73,255,127, 1, 0, 0, 0, +255,255,127,191, 0, 0,128, 63, 0, 0,128, 63, 26,182,230, 73,230, 73,255,127, 1, 0, 0, 0, 68, 65, 84, 65,104, 1, 0, 0, +128,168,192, 2, 0, 0, 0, 0, 77, 1, 0, 0, 5, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192, 3, 40, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,170,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -12374,15 +8751,15 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,144, 0, 0, 0,192, 3, 40, 3, 1, 0, 0, 0, 57, 0, 0, 0, 12, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 35, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0, - 3, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0, 6, 0, 0, 0, 0, 0, 35, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, - 4, 0, 0, 0, 5, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0, 6, 0, 0, 0, - 0, 0, 35, 0, 6, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, 68, 65, 84, 65,104, 1, 0, 0,144, 4, 40, 3, 1, 0, 0, 0, - 76, 1, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,144, 0, 0, 0, + 48,170,192, 2, 0, 0, 0, 0, 57, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 35, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, + 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0, 6, 0, 0, 0, + 0, 0, 35, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0, 5, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0, + 7, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0, 6, 0, 0, 0, 0, 0, 35, 0, 6, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, + 68, 65, 84, 65,104, 1, 0, 0, 0,171,192, 2, 0, 0, 0, 0, 77, 1, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48, 6, 40, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,172,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -12391,29 +8768,28 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,120, 0, 0, 0, 48, 6, 40, 3, 1, 0, 0, 0, - 56, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 0, - 7, 0, 0, 0, 6, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 2, 1, 0, 0, 0, 5, 0, 0, 0, 6, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 6, 0, 0, 0, - 7, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 2, - 85, 83, 69, 82,160, 11, 0, 0,192,162,118, 1, 1, 0, 0, 0,189, 0, 0, 0, 1, 0, 0, 0, 33,152, 1, 0, 63, 2, 0, 0, - 5, 0, 0, 0, 47,116,109,112, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,120, 0, 0, 0,176,172,192, 2, 0, 0, 0, 0, 56, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 0, 7, 0, 0, 0, 6, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 2, + 0, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 5, 0, 0, 0, 6, 0, 0, 0, + 2, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 0, + 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 2, 85, 83, 69, 82,160, 11, 0, 0, 32,136,128, 1, 0, 0, 0, 0, +189, 0, 0, 0, 1, 0, 0, 0, 33,152, 1, 0, 63, 2, 0, 0, 5, 0, 0, 0, 47,116,109,112, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 47, 47, 0, 85,115,101,114,115, 47,116,111,110, 47, 68,101,115,107,116,111,112, 47, 0, 45,112,111,119,101,114, -112, 99, 47, 98,105,110, 47, 98,108,101,110,100,101,114, 46, 97,112,112, 47, 67,111,110,116,101,110,116,115, 47, 82,101,115,111, -117,114, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 0, 85,115,101,114,115, 47,116,111,110, + 47, 68,101,115,107,116,111,112, 47, 0, 45,112,111,119,101,114,112, 99, 47, 98,105,110, 47, 98,108,101,110,100,101,114, 46, 97, +112,112, 47, 67,111,110,116,101,110,116,115, 47, 82,101,115,111,117,114, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -12432,8 +8808,8 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -12442,21 +8818,21 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 0, 0, 0, 8, 0, 0, 0, 3, 0, 0, 0, 48, 52, 6, 1, 0, 0, 0, 0, 5, 0, 2, 0, 0, 8, 0, 0, - 2, 0, 0, 0, 68,172, 0, 0, 36, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 64, 0, 5, 0, 2, 0, - 48, 4,130, 3, 1, 0, 0, 0, 48, 28,130, 3, 1, 0, 0, 0, 0,251, 36, 3, 1, 0, 0, 0, 0,251, 36, 3, 1, 0, 0, 0, - 16, 6, 37, 3, 1, 0, 0, 0, 16, 6, 37, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 8, 0, 0, 0, 3, 0, 0, 0, + 48, 52, 6, 1, 0, 0, 0, 0, 5, 0, 2, 0, 0, 8, 0, 0, 2, 0, 0, 0, 68,172, 0, 0, 36, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 64, 0, 5, 0, 2, 0, 80,185,192, 2, 0, 0, 0, 0,112,207,192, 2, 0, 0, 0, 0, + 80,139,200, 2, 0, 0, 0, 0, 80,139,200, 2, 0, 0, 0, 0,240,254,200, 2, 0, 0, 0, 0,240,254,200, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 32, 0, 0, 0, 1, 0, 2, 0, 25, 0, 0, 0, 20, 0, 20, 0, 1, 0, 0, 0, 0, 0, 0, 0,205,204, 76, 63,205,204, 76, 63, -205,204, 76, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 30, 90,100,191,154,153,153, 62, -102,102,102, 63, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 31,250,254, 62, 9, 0, 0, 63,156,153, 25, 63, 0, 0, 0, 0, -205,204, 76, 62,205,204, 76, 62,205,204, 76, 62, 0, 0,128, 63, 44,135, 22, 63, 32,133,235, 62,184,243,125, 62, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,195, 73, 76, 63, 42,135, 86, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 43,135, 61, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 16, 47, 93, 62, 58,180,200,190, 24, 47, 93,190, 0, 0, 0, 0, 14, 0, 0, 0, 25, 0, 15, 0, -120, 0, 60, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0,144, 31, 15, 0, 6, 0, 15, 0, 8, 0, 10, 0,250, 0, 0, 0, -100, 0,100, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 1, 0, 2, 0, 25, 0, 0, 0, 20, 0, 20, 0, + 1, 0, 0, 0, 0, 0, 0, 0,205,204, 76, 63,205,204, 76, 63,205,204, 76, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0,128, 63, 30, 90,100,191,154,153,153, 62,102,102,102, 63, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 31,250,254, 62, 9, 0, 0, 63,156,153, 25, 63, 0, 0, 0, 0,205,204, 76, 62,205,204, 76, 62,205,204, 76, 62, 0, 0,128, 63, + 44,135, 22, 63, 32,133,235, 62,184,243,125, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195, 73, 76, 63, 42,135, 86, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 43,135, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 16, 47, 93, 62, 58,180,200,190, + 24, 47, 93,190, 0, 0, 0, 0, 14, 0, 0, 0, 25, 0, 15, 0,120, 0, 60, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, +144, 31, 15, 0, 6, 0, 15, 0, 8, 0, 10, 0,250, 0, 0, 0,100, 0,100, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -12465,8 +8841,11 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, + 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, @@ -12488,88 +8867,78 @@ char datatoc_B_blend[]= { 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, - 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, - 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 21, 0, 0, - 48, 4,130, 3, 1, 0, 0, 0,187, 0, 0, 0, 1, 0, 0, 0, 48, 28,130, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68,101,102, 97,117,108,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 25, 25, 25,255,153,153,153,255,100,100,100,255, 25, 25, 25,255, 0, 0, 0,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, - 25, 25, 25,255,153,153,153,255,100,100,100,255, 25, 25, 25,255, 0, 0, 0,255,255,255,255,255, 1, 0, 15, 0,241,255, 0, 0, - 25, 25, 25,255,153,153,153,255,153,153,153,255, 90, 90, 90,255, 0, 0, 0,255,255,255,255,255, 1, 0, 0, 0, 25, 0, 0, 0, - 0, 0, 0,255, 70, 70, 70,255, 86,128,194,255,255,255,255,255,255,255,255,255, 0, 0, 0,255, 1, 0, 15, 0,241,255, 0, 0, - 0, 0, 0,255, 70, 70, 70,255, 70, 70, 70,255,255,255,255,255, 0, 0, 0,255,255,255,255,255, 1, 0, 15, 0,241,255, 0, 0, - 25, 25, 25,255,153,153,153,255,100,100,100,255, 25, 25, 25,255, 0, 0, 0,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, - 25, 25, 25,255,180,180,180,255,153,153,153,255, 90, 90, 90,255, 0, 0, 0,255,255,255,255,255, 1, 0,236,255, 0, 0, 0, 0, - 25, 25, 25,255,180,180,180,255,153,153,153,255,128,128,128,255, 0, 0, 0,255,255,255,255,255, 1, 0,236,255, 0, 0, 0, 0, - 0, 0, 0,255, 70, 70, 70,255, 70, 70, 70,255,255,255,255,255,255,255,255,255,204,204,204,255, 1, 0, 15, 0,241,255, 0, 0, - 0, 0, 0,255, 63, 63, 63,255, 86,128,194,255,255,255,255,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 25, 0,236,255, 0, 0, - 0, 0, 0,255, 25, 25, 25,230, 45, 45, 45,230,100,100,100,255,160,160,160,255,255,255,255,255, 0, 0, 25, 0,236,255, 0, 0, - 0, 0, 0,255, 0, 0, 0, 0, 86,128,194,255,255,255,255,255,255,255,255,255, 0, 0, 0,255, 0, 0, 38, 0, 0, 0, 0, 0, - 25, 25, 25,255,128,128,128,255,100,100,100,255, 25, 25, 25,255, 0, 0, 0,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, - 50, 50, 50,180, 80, 80, 80,180,100,100,100,180,128,128,128,255, 0, 0, 0,255,255,255,255,255, 1, 0, 5, 0,251,255, 0, 0, - 0, 0, 0,255, 0, 0, 0, 0, 86,128,194,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, -115,190, 76,255, 90,166, 51,255,240,235,100,255,215,211, 75,255,180, 0,255,255,153, 0,230,255, 0, 0, 0, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 21, 0, 0, 80,185,192, 2, 0, 0, 0, 0,187, 0, 0, 0, 1, 0, 0, 0, +112,207,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,101,102, 97,117,108,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 25,255,153,153,153,255,100,100,100,255, 25, 25, 25,255, + 0, 0, 0,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 25,255,153,153,153,255,100,100,100,255, 25, 25, 25,255, + 0, 0, 0,255,255,255,255,255, 1, 0, 15, 0,241,255, 0, 0, 25, 25, 25,255,153,153,153,255,153,153,153,255, 90, 90, 90,255, + 0, 0, 0,255,255,255,255,255, 1, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0,255, 70, 70, 70,255, 86,128,194,255,255,255,255,255, +255,255,255,255, 0, 0, 0,255, 1, 0, 15, 0,241,255, 0, 0, 0, 0, 0,255, 70, 70, 70,255, 70, 70, 70,255,255,255,255,255, + 0, 0, 0,255,255,255,255,255, 1, 0, 15, 0,241,255, 0, 0, 25, 25, 25,255,153,153,153,255,100,100,100,255, 25, 25, 25,255, + 0, 0, 0,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 25,255,180,180,180,255,153,153,153,255, 90, 90, 90,255, + 0, 0, 0,255,255,255,255,255, 1, 0,236,255, 0, 0, 0, 0, 25, 25, 25,255,180,180,180,255,153,153,153,255,128,128,128,255, + 0, 0, 0,255,255,255,255,255, 1, 0,236,255, 0, 0, 0, 0, 0, 0, 0,255, 70, 70, 70,255, 70, 70, 70,255,255,255,255,255, +255,255,255,255,204,204,204,255, 1, 0, 15, 0,241,255, 0, 0, 0, 0, 0,255, 63, 63, 63,255, 86,128,194,255,255,255,255,255, + 0, 0, 0,255, 0, 0, 0,255, 0, 0, 25, 0,236,255, 0, 0, 0, 0, 0,255, 25, 25, 25,230, 45, 45, 45,230,100,100,100,255, +160,160,160,255,255,255,255,255, 0, 0, 25, 0,236,255, 0, 0, 0, 0, 0,255, 0, 0, 0, 0, 86,128,194,255,255,255,255,255, +255,255,255,255, 0, 0, 0,255, 0, 0, 38, 0, 0, 0, 0, 0, 25, 25, 25,255,128,128,128,255,100,100,100,255, 25, 25, 25,255, + 0, 0, 0,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50,180, 80, 80, 80,180,100,100,100,180,128,128,128,255, + 0, 0, 0,255,255,255,255,255, 1, 0, 5, 0,251,255, 0, 0, 0, 0, 0,255, 0, 0, 0, 0, 86,128,194,255, 0, 0, 0,255, + 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 0,115,190, 76,255, 90,166, 51,255,240,235,100,255,215,211, 75,255, +180, 0,255,255,153, 0,230,255, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,114,114,114,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, -114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,130,130,130,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, - 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255, -255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, - 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 57, 57, 57,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +114,114,114,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, +130,130,130,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255, 255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60, 255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 76, 76,255, 0, 0, 0, 0,250,250,250,255, 15, 15, 15,255, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 57, 57,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, 114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -102,102,102,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -160,160,160,100,127,112,112,100,255,140, 25,255,250,250,250,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,130,130,130,255, +165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255, 255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,250,250,250,255,250,250,250,255,250,250,250,255, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, + 76, 76, 76,255, 0, 0, 0, 0,250,250,250,255, 15, 15, 15,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,102,102,102,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -255,255,255,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,150,150,150,100,112,112,112,100, 96,192, 64,255, 94, 94, 94,255, - 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, 79,101, 73,255,135,177,125,255,255,255,255,255, 0, 0, 0,255, +145,145,145,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100,255,140, 25,255,250,250,250,255, + 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,130,130,130,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255, 255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60, -255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 82, 96,110,255, -124,137,150,255, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, - 0, 0, 0,255,255,133, 0,255, 3, 0, 0, 0, 0, 0, 0, 0,114,114,114,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, +255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,250,250,250,255, +250,250,250,255,250,250,250,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, 114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, - 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255, +102,102,102,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,255,255,255,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +150,150,150,100,112,112,112,100, 96,192, 64,255, 94, 94, 94,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, + 79,101, 73,255,135,177,125,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255, 255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, - 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 82, 96,110,255,124,137,150,255, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0,255,255,133, 0,255, 3, 0, 0, 0, 0, 0, 0, 0, 114,114,114,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,173,173,173,255,127,112,112,100, 0, 0, 0, 0, 91, 91, 91,255, +165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255, 255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60, 255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,114,114,114,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, 114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -102,102,102,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,255,255,255,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -150,150,150,100,112,112,112,100, 96,192, 64,255, 94, 94, 94,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, - 79,101, 73,255,135,177,125,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255, +165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +173,173,173,255,127,112,112,100, 0, 0, 0, 0, 91, 91, 91,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, + 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255, 255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, - 12, 10, 10,128,255,140, 0,255, 96,192, 64,255, 82, 96,110,255,124,137,150,255, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0,255,255,133, 0,255, 3, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,102,102,102,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 255,255,255,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,150,150,150,100,112,112,112,100, 96,192, 64,255, 94, 94, 94,255, @@ -12578,75 +8947,75 @@ char datatoc_B_blend[]= { 255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 12, 10, 10,128,255,140, 0,255, 96,192, 64,255, 82, 96,110,255, 124,137,150,255, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, - 0, 0, 0,255,255,133, 0,255, 3, 0, 0, 0, 0, 0, 0, 0,116,116,116,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, + 0, 0, 0,255,255,133, 0,255, 3, 0, 0, 0, 0, 0, 0, 0,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, 114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, - 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255, +102,102,102,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,255,255,255,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +150,150,150,100,112,112,112,100, 96,192, 64,255, 94, 94, 94,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, + 79,101, 73,255,135,177,125,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255, 255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, - 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81,105,135,255,109, 88,129,255, 78,152, 62,255, 46,143,143,255,169, 84,124,255, -126,126, 80,255,162, 95,111,255,109,145,131,255,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 53, 53, 53,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, + 12, 10, 10,128,255,140, 0,255, 96,192, 64,255, 82, 96,110,255,124,137,150,255, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0,255,255,133, 0,255, 3, 0, 0, 0, 0, 0, 0, 0, +116,116,116,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255, -255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255,255,255,255, 10,255,133, 0, 60, +255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60, 255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, - 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,110,110,110,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, + 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81,105,135,255, +109, 88,129,255, 78,152, 62,255, 46,143,143,255,169, 84,124,255,126,126, 80,255,162, 95,111,255,109,145,131,255,255,255,255,128, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, 114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,132,132,132,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, - 94, 94, 94,255,172,172,172,255, 17, 27, 60,100, 94, 94, 94,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,195,195,195,255, +165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255, -255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, - 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +255, 32, 32,255, 75, 75, 75,255,255,255,255, 10,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, + 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153,153,153,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +110,110,110,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,143,143,143,255,198,119,119,255,255, 0, 0,255, 64, 64, 64,255, - 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255, +132,132,132,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 94, 94, 94,255,172,172,172,255, 17, 27, 60,100, 94, 94, 94,255, + 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,195,195,195,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255, 255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60, 255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, - 0, 0, 0, 0, 3, 4, 0, 0,100, 0, 0,255, 0, 0,200,255,128, 0, 80,255, 95, 95, 0,255, 0,100, 50,255, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,114,114,114,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,153,153,153,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, 114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, +143,143,143,255,198,119,119,255,255, 0, 0,255, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255, 255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, - 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0,100, 0, 0,255, 0, 0,200,255, +128, 0, 80,255, 95, 95, 0,255, 0,100, 50,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114,114,114,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,173,173,173,255,127,112,112,100, 0, 0, 0, 0, 91, 91, 91,255, +165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255, 255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60, 255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 57, 57,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,114,114,114,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, 114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, - 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,255,255,255,219, 37, 18,255, +173,173,173,255,127,112,112,100, 0, 0, 0, 0, 91, 91, 91,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, + 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255, 255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, - 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0,155,155,155,160,100,100,100,255, -108,105,111,255,104,106,117,255,105,117,110,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100,100,100,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, + 57, 57, 57,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255, -255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60, +255,133, 0,255, 0, 0, 0,255,255,255,255,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60, 255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, - 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 4, 0, 0,155,155,155,160,100,100,100,255,108,105,111,255,104,106,117,255,105,117,110,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,114,114,114,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100,100,100,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, 114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, @@ -12655,1045 +9024,1054 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -154, 0, 0,255,189, 17, 17,255,247, 10, 10,255, 0, 0, 0, 0,247, 64, 24,255,246,105, 19,255,250,153, 0,255, 0, 0, 0, 0, - 30,145, 9,255, 89,183, 11,255,131,239, 29,255, 0, 0, 0, 0, 10, 54,148,255, 54,103,223,255, 94,193,239,255, 0, 0, 0, 0, -169, 41, 78,255,193, 65,106,255,240, 93,145,255, 0, 0, 0, 0, 67, 12,120,255, 84, 58,163,255,135,100,213,255, 0, 0, 0, 0, - 36,120, 90,255, 60,149,121,255,111,182,171,255, 0, 0, 0, 0, 75,112,124,255,106,134,145,255,155,194,205,255, 0, 0, 0, 0, -244,201, 12,255,238,194, 54,255,243,255, 0,255, 0, 0, 0, 0, 30, 32, 36,255, 72, 76, 86,255,255,255,255,255, 0, 0, 0, 0, -111, 47,106,255,152, 69,190,255,211, 48,214,255, 0, 0, 0, 0,108,142, 34,255,127,176, 34,255,187,239, 91,255, 0, 0, 0, 0, -141,141,141,255,176,176,176,255,222,222,222,255, 0, 0, 0, 0,131, 67, 38,255,139, 88, 17,255,189,106, 17,255, 0, 0, 0, 0, - 8, 49, 14,255, 28, 67, 11,255, 52, 98, 43,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +114,114,114,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, + 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255, +255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60, +255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,154, 0, 0,255,189, 17, 17,255,247, 10, 10,255, 0, 0, 0, 0, +247, 64, 24,255,246,105, 19,255,250,153, 0,255, 0, 0, 0, 0, 30,145, 9,255, 89,183, 11,255,131,239, 29,255, 0, 0, 0, 0, + 10, 54,148,255, 54,103,223,255, 94,193,239,255, 0, 0, 0, 0,169, 41, 78,255,193, 65,106,255,240, 93,145,255, 0, 0, 0, 0, + 67, 12,120,255, 84, 58,163,255,135,100,213,255, 0, 0, 0, 0, 36,120, 90,255, 60,149,121,255,111,182,171,255, 0, 0, 0, 0, + 75,112,124,255,106,134,145,255,155,194,205,255, 0, 0, 0, 0,244,201, 12,255,238,194, 54,255,243,255, 0,255, 0, 0, 0, 0, + 30, 32, 36,255, 72, 76, 86,255,255,255,255,255, 0, 0, 0, 0,111, 47,106,255,152, 69,190,255,211, 48,214,255, 0, 0, 0, 0, +108,142, 34,255,127,176, 34,255,187,239, 91,255, 0, 0, 0, 0,141,141,141,255,176,176,176,255,222,222,222,255, 0, 0, 0, 0, +131, 67, 38,255,139, 88, 17,255,189,106, 17,255, 0, 0, 0, 0, 8, 49, 14,255, 28, 67, 11,255, 52, 98, 43,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 21, 0, 0, 48, 28,130, 3, 1, 0, 0, 0,187, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48, 4,130, 3, 1, 0, 0, 0, 82,111,117,110,100,101,100, 0, 0,101,119, 32, 85,115,101,114, - 32, 84,104,101,109,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 25,255,153,153,153,255,100,100,100,255, 25, 25, 25,255, - 0, 0, 0,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 25,255,153,153,153,255,100,100,100,255, 25, 25, 25,255, - 0, 0, 0,255,255,255,255,255, 1, 0, 25, 0,231,255, 0, 0, 25, 25, 25,255,153,153,153,255,153,153,153,255, 90, 90, 90,255, - 0, 0, 0,255,255,255,255,255, 1, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0,255, 70, 70, 70,255, 86,128,194,255,255,255,255,255, -255,255,255,255, 0, 0, 0,255, 1, 0, 15, 0,241,255, 0, 0, 0, 0, 0,255, 70, 70, 70,255, 70, 70, 70,255,255,255,255,255, - 0, 0, 0,255,255,255,255,255, 1, 0, 15, 0,241,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 25,255,180,180,180,255,153,153,153,255, 90, 90, 90,255, - 0, 0, 0,255,255,255,255,255, 1, 0,236,255, 0, 0, 0, 0, 25, 25, 25,255,180,180,180,255,153,153,153,255,128,128,128,255, - 0, 0, 0,255,255,255,255,255, 1, 0,236,255, 0, 0, 0, 0, 0, 0, 0,255, 70, 70, 70,255, 70, 70, 70,255,255,255,255,255, -255,255,255,255,204,204,204,255, 1, 0, 15, 0,241,255, 0, 0, 0, 0, 0,255, 63, 63, 63,255, 86,128,194,255,255,255,255,255, - 0, 0, 0,255, 0, 0, 0,255, 0, 0, 25, 0,236,255, 0, 0, 0, 0, 0,255, 25, 25, 25,230, 46,124,217,204,255,255,255,255, -255,255,255,255, 0, 0, 0,255, 0, 0, 25, 0,236,255, 0, 0, 0, 0, 0,255, 0, 0, 0, 0, 86,128,194,255,255,255,255,255, -255,255,255,255, 0, 0, 0,255, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 21, 0, 0, +112,207,192, 2, 0, 0, 0, 0,187, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,185,192, 2, 0, 0, 0, 0, + 82,111,117,110,100,101,100, 0, 0,101,119, 32, 85,115,101,114, 32, 84,104,101,109,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 25, 25, 25,255,153,153,153,255,100,100,100,255, 25, 25, 25,255, 0, 0, 0,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, + 25, 25, 25,255,153,153,153,255,100,100,100,255, 25, 25, 25,255, 0, 0, 0,255,255,255,255,255, 1, 0, 25, 0,231,255, 0, 0, + 25, 25, 25,255,153,153,153,255,153,153,153,255, 90, 90, 90,255, 0, 0, 0,255,255,255,255,255, 1, 0, 0, 0, 25, 0, 0, 0, + 0, 0, 0,255, 70, 70, 70,255, 86,128,194,255,255,255,255,255,255,255,255,255, 0, 0, 0,255, 1, 0, 15, 0,241,255, 0, 0, + 0, 0, 0,255, 70, 70, 70,255, 70, 70, 70,255,255,255,255,255, 0, 0, 0,255,255,255,255,255, 1, 0, 15, 0,241,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 25, 25, 25,255,180,180,180,255,153,153,153,255, 90, 90, 90,255, 0, 0, 0,255,255,255,255,255, 1, 0,236,255, 0, 0, 0, 0, + 25, 25, 25,255,180,180,180,255,153,153,153,255,128,128,128,255, 0, 0, 0,255,255,255,255,255, 1, 0,236,255, 0, 0, 0, 0, + 0, 0, 0,255, 70, 70, 70,255, 70, 70, 70,255,255,255,255,255,255,255,255,255,204,204,204,255, 1, 0, 15, 0,241,255, 0, 0, + 0, 0, 0,255, 63, 63, 63,255, 86,128,194,255,255,255,255,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 25, 0,236,255, 0, 0, + 0, 0, 0,255, 25, 25, 25,230, 46,124,217,204,255,255,255,255,255,255,255,255, 0, 0, 0,255, 0, 0, 25, 0,236,255, 0, 0, + 0, 0, 0,255, 0, 0, 0, 0, 86,128,194,255,255,255,255,255,255,255,255,255, 0, 0, 0,255, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -145,145,145,245, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -175,175,175, 51, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, - 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255, -255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, 107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 0, 0, 0, 51, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -160,160,160,100,127,112,112,100, 0, 0, 0, 0,143,143,143,255, 0, 0, 0,255,217,217,217,255, 0, 0, 0, 40,255,255,255,255, - 16, 64, 16,255,102,255,102,255,255,130, 0,255, 0, 0, 0,255,255,130, 0,255, 0, 0, 0,255,255,255,255,255,230,150, 50,255, -255, 32, 32,255, 0, 0, 0, 0,255,255,255, 10,255,130, 0, 60,255,138, 48,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, - 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,175,175,175, 51, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +160,160,160,100,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, + 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 145,145,145,245, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -165,165,165,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100,255,130, 0,255, 88, 88, 88,255, - 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255, -255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 51, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0,143,143,143,255, + 0, 0, 0,255,217,217,217,255, 0, 0, 0, 40,255,255,255,255, 16, 64, 16,255,102,255,102,255,255,130, 0,255, 0, 0, 0,255, +255,130, 0,255, 0, 0, 0,255,255,255,255,255,230,150, 50,255,255, 32, 32,255, 0, 0, 0, 0,255,255,255, 10,255,130, 0, 60, +255,138, 48,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, 107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,107,107,107,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -107,107,107,100,143,143,143,100, 96,192, 64,255, 94, 94, 94,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, - 79,101, 73,255,135,177,125,255,255,255,255,255,255,255,255,255,255,130, 0,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 82, 96,110,255,124,137,150,255, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,130, 0,255, 2, 0, 0, 0, 0, 0, 0, 0, -114,114,114,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -145,145,145,245, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -165,165,165,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, - 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255, -255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,158,158,158,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, -158,158,158,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -140,140,140,255,127,112,112,100, 0, 0, 0, 0,112,112, 96,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, +160,160,160,100,127,112,112,100,255,130, 0,255, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 145,145,145,245, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -165,165,165,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,107,107,107,255,178,178,178,100,255,130, 0,100, 94, 94, 94,255, - 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 79,101, 73,255,135,177,125,255,255,255,255,255,255,112,255,255, -255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,143,143,143,255,200,100,200, 60, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228,156,198,204,255,255,170,204, 96,192, 64,255, 82, 96,110,255, +107,107,107,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,107,107,107,100,143,143,143,100, 96,192, 64,255, 94, 94, 94,255, + 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 79,101, 73,255,135,177,125,255,255,255,255,255,255,255,255,255, +255,130, 0,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 82, 96,110,255, 124,137,150,255, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, -143,143,143,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +255,255,255,255,255,130, 0,255, 2, 0, 0, 0, 0, 0, 0, 0,114,114,114,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, +107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -107,107,107,255,178,178,178,100,255,130, 0,100, 94, 94, 94,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, +160,160,160,100,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -228,156,198,255,255,255,170,255, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +158,158,158,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,158,158,158,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 145,145,145,245, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -165,165,165,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, +165,165,165,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,140,140,140,255,127,112,112,100, 0, 0, 0, 0,112,112, 96,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255, -255,130, 0,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,200,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81,105,135,255, -109, 88,129,255, 78,152, 62,255, 46,143,143,255,169, 84,124,255,126,126, 80,255,162, 95,111,255,109,145,131,255, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, -195,195,195,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, + 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, +107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -160,160,160,100,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, - 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60,255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 80,200,255,255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +107,107,107,255,178,178,178,100,255,130, 0,100, 94, 94, 94,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, + 79,101, 73,255,135,177,125,255,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,143,143,143,255,200,100,200, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +228,156,198,204,255,255,170,204, 96,192, 64,255, 82, 96,110,255,124,137,150,255, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,195,195,195,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,143,143,143,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 145,145,145,245, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -165,165,165,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,143,143,143,255,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, +165,165,165,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,107,107,107,255,178,178,178,100,255,130, 0,100, 94, 94, 94,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255, 255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228,156,198,255,255,255,170,255, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,153,153,153,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, -153,153,153,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, +107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -143,143,143,255,198,119,119,255,255, 0, 0,255, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, +160,160,160,100,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, + 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,130, 0,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,200,255,255, + 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81,105,135,255,109, 88,129,255, 78,152, 62,255, 46,143,143,255,169, 84,124,255, +126,126, 80,255,162, 95,111,255,109,145,131,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 53, 53, 53,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,195,195,195,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +145,145,145,245, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +165,165,165,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, + 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255, +255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60, +255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 80,200,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, +195,195,195,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +143,143,143,255,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,100, 0, 0,255, 0, 0,200,255, -128, 0, 80,255, 95, 95, 0,255, 0,100, 50,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +153,153,153,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,153,153,153,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 145,145,145,245, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -165,165,165,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, +165,165,165,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,143,143,143,255,198,119,119,255,255, 0, 0,255, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255, 255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2, 0, 0, 0,100, 0, 0,255, 0, 0,200,255,128, 0, 80,255, 95, 95, 0,255, 0,100, 50,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,158,158,158,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, -158,158,158,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, +107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -140,140,140,255,127,112,112,100, 0, 0, 0, 0,112,112, 96,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, +160,160,160,100,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +158,158,158,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,158,158,158,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 145,145,145,245, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, - 0, 0, 0, 51, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0,143,143,143,255, - 0, 0, 0,255,217,217,217,255, 0, 0, 0, 40,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,130, 0,255, 0, 0, 0,255, -255,130, 0,255, 0, 0, 0,255,255,255,255,255,230,150, 50,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255, 10,255,130, 0, 60, -255,138, 48,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3, 4, 0, 0,150,150,150,255,129,131,144,255,127,127,127,255,142,138,145,255,120,145,120,255, 0, 0, 0, 0, +165,165,165,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,140,140,140,255,127,112,112,100, 0, 0, 0, 0,112,112, 96,255, + 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255, +255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, + 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100,100,100,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, 107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 0, 0, 0, 51, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 160,160,160,100,127,112,112,100, 0, 0, 0, 0,143,143,143,255, 0, 0, 0,255,217,217,217,255, 0, 0, 0, 40,255,255,255,255, - 16, 64, 16,255,102,255,102,255,255,130, 0,255, 0, 0, 0,255,255,130, 0,255, 0, 0, 0,255,255,255,255,255,230,150, 50,255, -255, 32, 32,255, 0, 0, 0, 0,255,255,255, 10,255,130, 0, 60,255,138, 48,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, - 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,255,130, 0,255, 0, 0, 0,255,255,130, 0,255, 0, 0, 0,255,255,255,255,255,230,150, 50,255, + 0, 0, 0, 0, 0, 0, 0, 0,255,255,255, 10,255,130, 0, 60,255,138, 48,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0,150,150,150,255,129,131,144,255, +127,127,127,255,142,138,145,255,120,145,120,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114,114,114,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +100,100,100,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 145,145,145,245, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, - 0, 0, 0, 0, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 51, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0,143,143,143,255, + 0, 0, 0,255,217,217,217,255, 0, 0, 0, 40,255,255,255,255, 16, 64, 16,255,102,255,102,255,255,130, 0,255, 0, 0, 0,255, +255,130, 0,255, 0, 0, 0,255,255,255,255,255,230,150, 50,255,255, 32, 32,255, 0, 0, 0, 0,255,255,255, 10,255,130, 0, 60, +255,138, 48,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,114,114,114,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,154, 0, 0,255,189, 17, 17,255,247, 10, 10,255, 0, 0, 0, 0, -247, 64, 24,255,246,105, 19,255,250,153, 0,255, 0, 0, 0, 0, 30,145, 9,255, 89,183, 11,255,131,239, 29,255, 0, 0, 0, 0, - 10, 54,148,255, 54,103,223,255, 94,193,239,255, 0, 0, 0, 0,169, 41, 78,255,193, 65,106,255,240, 93,145,255, 0, 0, 0, 0, - 67, 12,120,255, 84, 58,163,255,135,100,213,255, 0, 0, 0, 0, 36,120, 90,255, 60,149,121,255,111,182,171,255, 0, 0, 0, 0, - 75,112,124,255,106,134,145,255,155,194,205,255, 0, 0, 0, 0,244,201, 12,255,238,194, 54,255,243,255, 0,255, 0, 0, 0, 0, - 30, 32, 36,255, 72, 76, 86,255,255,255,255,255, 0, 0, 0, 0,111, 47,106,255,152, 69,190,255,211, 48,214,255, 0, 0, 0, 0, -108,142, 34,255,127,176, 34,255,187,239, 91,255, 0, 0, 0, 0,141,141,141,255,176,176,176,255,222,222,222,255, 0, 0, 0, 0, -131, 67, 38,255,139, 88, 17,255,189,106, 17,255, 0, 0, 0, 0, 8, 49, 14,255, 28, 67, 11,255, 52, 98, 43,255, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +154, 0, 0,255,189, 17, 17,255,247, 10, 10,255, 0, 0, 0, 0,247, 64, 24,255,246,105, 19,255,250,153, 0,255, 0, 0, 0, 0, + 30,145, 9,255, 89,183, 11,255,131,239, 29,255, 0, 0, 0, 0, 10, 54,148,255, 54,103,223,255, 94,193,239,255, 0, 0, 0, 0, +169, 41, 78,255,193, 65,106,255,240, 93,145,255, 0, 0, 0, 0, 67, 12,120,255, 84, 58,163,255,135,100,213,255, 0, 0, 0, 0, + 36,120, 90,255, 60,149,121,255,111,182,171,255, 0, 0, 0, 0, 75,112,124,255,106,134,145,255,155,194,205,255, 0, 0, 0, 0, +244,201, 12,255,238,194, 54,255,243,255, 0,255, 0, 0, 0, 0, 30, 32, 36,255, 72, 76, 86,255,255,255,255,255, 0, 0, 0, 0, +111, 47,106,255,152, 69,190,255,211, 48,214,255, 0, 0, 0, 0,108,142, 34,255,127,176, 34,255,187,239, 91,255, 0, 0, 0, 0, +141,141,141,255,176,176,176,255,222,222,222,255, 0, 0, 0, 0,131, 67, 38,255,139, 88, 17,255,189,106, 17,255, 0, 0, 0, 0, + 8, 49, 14,255, 28, 67, 11,255, 52, 98, 43,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 78, 65, 49,184,228, 0, 0, - 48,134,156, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 83, 68, 78, 65, 78, 65, 77, 69, 38, 11, 0, 0, 42,110,101,120, -116, 0, 42,112,114,101,118, 0, 42,100, 97,116, 97, 0, 42,102,105,114,115,116, 0, 42,108, 97,115,116, 0,120, 0,121, 0,122, - 0,119, 0,120,109,105,110, 0,120,109, 97,120, 0,121,109,105,110, 0,121,109, 97,120, 0, 42,112,111,105,110,116,101,114, 0, -103,114,111,117,112, 0,118, 97,108, 0,118, 97,108, 50, 0,116,121,112,101, 0,115,117, 98,116,121,112,101, 0,102,108, 97,103, - 0,110, 97,109,101, 91, 51, 50, 93, 0,115, 97,118,101,100, 0,100, 97,116, 97, 0,108,101,110, 0,116,111,116, 97,108,108,101, -110, 0, 42,110,101,119,105,100, 0, 42,108,105, 98, 0,110, 97,109,101, 91, 50, 52, 93, 0,117,115, 0,105, 99,111,110, 95,105, -100, 0, 42,112,114,111,112,101,114,116,105,101,115, 0,105,100, 0, 42,105,100, 98,108,111, 99,107, 0, 42,102,105,108,101,100, - 97,116, 97, 0,110, 97,109,101, 91, 50, 52, 48, 93, 0,102,105,108,101,110, 97,109,101, 91, 50, 52, 48, 93, 0,116,111,116, 0, -112, 97,100, 0, 42,112, 97,114,101,110,116, 0,119, 91, 50, 93, 0,104, 91, 50, 93, 0, 99,104, 97,110,103,101,100, 91, 50, 93, - 0,112, 97,100, 48, 0,112, 97,100, 49, 0, 42,114,101, 99,116, 91, 50, 93, 0, 42,111, 98, 0, 98,108,111, 99,107,116,121,112, -101, 0, 97,100,114, 99,111,100,101, 0,110, 97,109,101, 91, 49, 50, 56, 93, 0, 42, 98,112, 0, 42, 98,101,122,116, 0,109, 97, -120,114, 99,116, 0,116,111,116,114, 99,116, 0,118, 97,114,116,121,112,101, 0,116,111,116,118,101,114,116, 0,105,112,111, 0, -101,120,116,114, 97,112, 0,114,116, 0, 98,105,116,109, 97,115,107, 0,115,108,105,100,101, 95,109,105,110, 0,115,108,105,100, -101, 95,109, 97,120, 0, 99,117,114,118, 97,108, 0, 42,100,114,105,118,101,114, 0, 99,117,114,118,101, 0, 99,117,114, 0,115, -104,111,119,107,101,121, 0,109,117,116,101,105,112,111, 0,112,111,115, 0,114,101,108, 97,116,105,118,101, 0,116,111,116,101, -108,101,109, 0,112, 97,100, 50, 0, 42,119,101,105,103,104,116,115, 0,118,103,114,111,117,112, 91, 51, 50, 93, 0,115,108,105, -100,101,114,109,105,110, 0,115,108,105,100,101,114,109, 97,120, 0, 42, 97,100,116, 0, 42,114,101,102,107,101,121, 0,101,108, -101,109,115,116,114, 91, 51, 50, 93, 0,101,108,101,109,115,105,122,101, 0, 98,108,111, 99,107, 0, 42,105,112,111, 0, 42,102, -114,111,109, 0,116,111,116,107,101,121, 0,115,108,117,114,112,104, 0, 42,108,105,110,101, 0, 42,102,111,114,109, 97,116, 0, - 98,108,101,110, 0,108,105,110,101,110,111, 0,115,116, 97,114,116, 0,101,110,100, 0,102,108, 97,103,115, 0, 99,111,108,111, -114, 91, 52, 93, 0,112, 97,100, 91, 52, 93, 0, 42,110, 97,109,101, 0,110,108,105,110,101,115, 0,108,105,110,101,115, 0, 42, - 99,117,114,108, 0, 42,115,101,108,108, 0, 99,117,114, 99, 0,115,101,108, 99, 0,109, 97,114,107,101,114,115, 0, 42,117,110, -100,111, 95, 98,117,102, 0,117,110,100,111, 95,112,111,115, 0,117,110,100,111, 95,108,101,110, 0, 42, 99,111,109,112,105,108, -101,100, 0,109,116,105,109,101, 0,115,105,122,101, 0,115,101,101,107, 0,112, 97,115,115,101,112, 97,114,116, 97,108,112,104, - 97, 0, 97,110,103,108,101, 0, 99,108,105,112,115,116, 97, 0, 99,108,105,112,101,110,100, 0,108,101,110,115, 0,111,114,116, -104,111, 95,115, 99, 97,108,101, 0,100,114, 97,119,115,105,122,101, 0,115,104,105,102,116,120, 0,115,104,105,102,116,121, 0, - 89, 70, 95,100,111,102,100,105,115,116, 0, 89, 70, 95, 97,112,101,114,116,117,114,101, 0, 89, 70, 95, 98,107,104,116,121,112, -101, 0, 89, 70, 95, 98,107,104, 98,105, 97,115, 0, 89, 70, 95, 98,107,104,114,111,116, 0, 42,100,111,102, 95,111, 98, 0,102, -114, 97,109,101,110,114, 0,102,114, 97,109,101,115, 0,111,102,102,115,101,116, 0,115,102,114, 97, 0,102,105,101, 95,105,109, - 97, 0, 99,121, 99,108, 0,111,107, 0,109,117,108,116,105, 95,105,110,100,101,120, 0,108, 97,121,101,114, 0,112, 97,115,115, - 0,109,101,110,117,110,114, 0, 42,115, 99,101,110,101, 0,105, 98,117,102,115, 0, 42,103,112,117,116,101,120,116,117,114,101, - 0, 42, 97,110,105,109, 0, 42,114,114, 0,115,111,117,114, 99,101, 0,108, 97,115,116,102,114, 97,109,101, 0,116,112, 97,103, -101,102,108, 97,103, 0,116,111,116, 98,105,110,100, 0,120,114,101,112, 0,121,114,101,112, 0,116,119,115,116, 97, 0,116,119, -101,110,100, 0, 98,105,110,100, 99,111,100,101, 0, 42,114,101,112, 98,105,110,100, 0, 42,112, 97, 99,107,101,100,102,105,108, -101, 0, 42,112,114,101,118,105,101,119, 0, 42,114,101,110,100,101,114, 95,116,101,120,116, 0,108, 97,115,116,117,112,100, 97, -116,101, 0,108, 97,115,116,117,115,101,100, 0, 97,110,105,109,115,112,101,101,100, 0,103,101,110, 95,120, 0,103,101,110, 95, -121, 0,103,101,110, 95,116,121,112,101, 0, 97,115,112,120, 0, 97,115,112,121, 0,116,101,120, 99,111, 0,109, 97,112,116,111, - 0,109, 97,112,116,111,110,101,103, 0, 98,108,101,110,100,116,121,112,101, 0, 42,111, 98,106,101, 99,116, 0, 42,116,101,120, - 0,117,118,110, 97,109,101, 91, 51, 50, 93, 0,112,114,111,106,120, 0,112,114,111,106,121, 0,112,114,111,106,122, 0,109, 97, -112,112,105,110,103, 0,111,102,115, 91, 51, 93, 0,115,105,122,101, 91, 51, 93, 0,114,111,116, 0,116,101,120,102,108, 97,103, - 0, 99,111,108,111,114,109,111,100,101,108, 0,112,109, 97,112,116,111, 0,112,109, 97,112,116,111,110,101,103, 0,110,111,114, -109, 97,112,115,112, 97, 99,101, 0,119,104,105, 99,104, 95,111,117,116,112,117,116, 0, 98,114,117,115,104, 95,109, 97,112, 95, -109,111,100,101, 0,112, 97,100, 91, 55, 93, 0,114, 0,103, 0, 98, 0,107, 0,100,101,102, 95,118, 97,114, 0, 99,111,108,102, - 97, 99, 0,118, 97,114,102, 97, 99, 0,110,111,114,102, 97, 99, 0,100,105,115,112,102, 97, 99, 0,119, 97,114,112,102, 97, 99, - 0, 99,111,108,115,112,101, 99,102, 97, 99, 0,109,105,114,114,102, 97, 99, 0, 97,108,112,104, 97,102, 97, 99, 0,100,105,102, -102,102, 97, 99, 0,115,112,101, 99,102, 97, 99, 0,101,109,105,116,102, 97, 99, 0,104, 97,114,100,102, 97, 99, 0,114, 97,121, -109,105,114,114,102, 97, 99, 0,116,114, 97,110,115,108,102, 97, 99, 0, 97,109, 98,102, 97, 99, 0, 99,111,108,101,109,105,116, -102, 97, 99, 0, 99,111,108,114,101,102,108,102, 97, 99, 0, 99,111,108,116,114, 97,110,115,102, 97, 99, 0,100,101,110,115,102, - 97, 99, 0,115, 99, 97,116,116,101,114,102, 97, 99, 0,114,101,102,108,102, 97, 99, 0,116,105,109,101,102, 97, 99, 0,108,101, -110,103,116,104,102, 97, 99, 0, 99,108,117,109,112,102, 97, 99, 0,107,105,110,107,102, 97, 99, 0,114,111,117,103,104,102, 97, - 99, 0,112, 97,100,101,110,115,102, 97, 99, 0,108,105,102,101,102, 97, 99, 0,115,105,122,101,102, 97, 99, 0,105,118,101,108, -102, 97, 99, 0,112,118,101,108,102, 97, 99, 0,115,104, 97,100,111,119,102, 97, 99, 0,122,101,110,117,112,102, 97, 99, 0,122, -101,110,100,111,119,110,102, 97, 99, 0, 98,108,101,110,100,102, 97, 99, 0,110, 97,109,101, 91, 49, 54, 48, 93, 0, 42,104, 97, -110,100,108,101, 0, 42,112,110, 97,109,101, 0, 42,115,116,110, 97,109,101,115, 0,115,116,121,112,101,115, 0,118, 97,114,115, - 0, 42,118, 97,114,115,116,114, 0, 42,114,101,115,117,108,116, 0, 42, 99,102,114, 97, 0,100, 97,116, 97, 91, 51, 50, 93, 0, - 40, 42,100,111,105,116, 41, 40, 41, 0, 40, 42,105,110,115,116, 97,110, 99,101, 95,105,110,105,116, 41, 40, 41, 0, 40, 42, 99, - 97,108,108, 98, 97, 99,107, 41, 40, 41, 0,118,101,114,115,105,111,110, 0, 97, 0,105,112,111,116,121,112,101, 0, 42,105,109, - 97, 0, 42, 99,117, 98,101, 91, 54, 93, 0,105,109, 97,116, 91, 52, 93, 91, 52, 93, 0,111, 98,105,109, 97,116, 91, 51, 93, 91, - 51, 93, 0,115,116,121,112,101, 0,118,105,101,119,115, 99, 97,108,101, 0,110,111,116,108, 97,121, 0, 99,117, 98,101,114,101, -115, 0,100,101,112,116,104, 0,114,101, 99, 97,108, 99, 0,108, 97,115,116,115,105,122,101, 0,102, 97,108,108,111,102,102, 95, -116,121,112,101, 0,102, 97,108,108,111,102,102, 95,115,111,102,116,110,101,115,115, 0,114, 97,100,105,117,115, 0, 99,111,108, -111,114, 95,115,111,117,114, 99,101, 0,116,111,116,112,111,105,110,116,115, 0,112,100,112, 97,100, 0, 42,112,115,121,115, 0, -112,115,121,115, 95, 99, 97, 99,104,101, 95,115,112, 97, 99,101, 0,111, 98, 95, 99, 97, 99,104,101, 95,115,112, 97, 99,101, 0, -112,100,112, 97,100, 50, 91, 50, 93, 0, 42,112,111,105,110,116, 95,116,114,101,101, 0, 42,112,111,105,110,116, 95,100, 97,116, - 97, 0,110,111,105,115,101, 95,115,105,122,101, 0,110,111,105,115,101, 95,100,101,112,116,104, 0,110,111,105,115,101, 95,105, -110,102,108,117,101,110, 99,101, 0,110,111,105,115,101, 95, 98, 97,115,105,115, 0,112,100,112, 97,100, 51, 91, 51, 93, 0,110, -111,105,115,101, 95,102, 97, 99, 0,115,112,101,101,100, 95,115, 99, 97,108,101, 0, 42, 99,111, 98, 97, 0,114,101,115,111,108, - 91, 51, 93, 0,105,110,116,101,114,112, 95,116,121,112,101, 0,102,105,108,101, 95,102,111,114,109, 97,116, 0,101,120,116,101, -110,100, 0,105,110,116, 95,109,117,108,116,105,112,108,105,101,114, 0,115,116,105,108,108, 95,102,114, 97,109,101, 0,115,111, -117,114, 99,101, 95,112, 97,116,104, 91, 50, 52, 48, 93, 0, 42,100, 97,116, 97,115,101,116, 0,110,111,105,115,101,115,105,122, -101, 0,116,117,114, 98,117,108, 0, 98,114,105,103,104,116, 0, 99,111,110,116,114, 97,115,116, 0,114,102, 97, 99, 0,103,102, - 97, 99, 0, 98,102, 97, 99, 0,102,105,108,116,101,114,115,105,122,101, 0,109,103, 95, 72, 0,109,103, 95,108, 97, 99,117,110, - 97,114,105,116,121, 0,109,103, 95,111, 99,116, 97,118,101,115, 0,109,103, 95,111,102,102,115,101,116, 0,109,103, 95,103, 97, -105,110, 0,100,105,115,116, 95, 97,109,111,117,110,116, 0,110,115, 95,111,117,116,115, 99, 97,108,101, 0,118,110, 95,119, 49, - 0,118,110, 95,119, 50, 0,118,110, 95,119, 51, 0,118,110, 95,119, 52, 0,118,110, 95,109,101,120,112, 0,118,110, 95,100,105, -115,116,109, 0,118,110, 95, 99,111,108,116,121,112,101, 0,110,111,105,115,101,100,101,112,116,104, 0,110,111,105,115,101,116, -121,112,101, 0,110,111,105,115,101, 98, 97,115,105,115, 0,110,111,105,115,101, 98, 97,115,105,115, 50, 0,105,109, 97,102,108, - 97,103, 0, 99,114,111,112,120,109,105,110, 0, 99,114,111,112,121,109,105,110, 0, 99,114,111,112,120,109, 97,120, 0, 99,114, -111,112,121,109, 97,120, 0,116,101,120,102,105,108,116,101,114, 0, 97,102,109, 97,120, 0,120,114,101,112,101, 97,116, 0,121, -114,101,112,101, 97,116, 0, 99,104,101, 99,107,101,114,100,105,115,116, 0,110, 97, 98,108, 97, 0,105,117,115,101,114, 0, 42, -110,111,100,101,116,114,101,101, 0, 42,112,108,117,103,105,110, 0, 42,101,110,118, 0, 42,112,100, 0, 42,118,100, 0,117,115, -101, 95,110,111,100,101,115, 0,108,111, 99, 91, 51, 93, 0,114,111,116, 91, 51, 93, 0,109, 97,116, 91, 52, 93, 91, 52, 93, 0, -109,105,110, 91, 51, 93, 0,109, 97,120, 91, 51, 93, 0,109,111,100,101, 0,116,111,116,101,120, 0,115,104,100,119,114, 0,115, -104,100,119,103, 0,115,104,100,119, 98, 0,115,104,100,119,112, 97,100, 0,101,110,101,114,103,121, 0,100,105,115,116, 0,115, -112,111,116,115,105,122,101, 0,115,112,111,116, 98,108,101,110,100, 0,104, 97,105,110,116, 0, 97,116,116, 49, 0, 97,116,116, - 50, 0, 42, 99,117,114,102, 97,108,108,111,102,102, 0,115,104, 97,100,115,112,111,116,115,105,122,101, 0, 98,105, 97,115, 0, -115,111,102,116, 0, 99,111,109,112,114,101,115,115,116,104,114,101,115,104, 0,112, 97,100, 53, 91, 51, 93, 0, 98,117,102,115, -105,122,101, 0,115, 97,109,112, 0, 98,117,102,102,101,114,115, 0,102,105,108,116,101,114,116,121,112,101, 0, 98,117,102,102, -108, 97,103, 0, 98,117,102,116,121,112,101, 0,114, 97,121, 95,115, 97,109,112, 0,114, 97,121, 95,115, 97,109,112,121, 0,114, - 97,121, 95,115, 97,109,112,122, 0,114, 97,121, 95,115, 97,109,112, 95,116,121,112,101, 0, 97,114,101, 97, 95,115,104, 97,112, -101, 0, 97,114,101, 97, 95,115,105,122,101, 0, 97,114,101, 97, 95,115,105,122,101,121, 0, 97,114,101, 97, 95,115,105,122,101, -122, 0, 97,100, 97,112,116, 95,116,104,114,101,115,104, 0,114, 97,121, 95,115, 97,109,112, 95,109,101,116,104,111,100, 0,116, -101,120, 97, 99,116, 0,115,104, 97,100,104, 97,108,111,115,116,101,112, 0,115,117,110, 95,101,102,102,101, 99,116, 95,116,121, -112,101, 0,115,107,121, 98,108,101,110,100,116,121,112,101, 0,104,111,114,105,122,111,110, 95, 98,114,105,103,104,116,110,101, -115,115, 0,115,112,114,101, 97,100, 0,115,117,110, 95, 98,114,105,103,104,116,110,101,115,115, 0,115,117,110, 95,115,105,122, -101, 0, 98, 97, 99,107,115, 99, 97,116,116,101,114,101,100, 95,108,105,103,104,116, 0,115,117,110, 95,105,110,116,101,110,115, -105,116,121, 0, 97,116,109, 95,116,117,114, 98,105,100,105,116,121, 0, 97,116,109, 95,105,110,115, 99, 97,116,116,101,114,105, -110,103, 95,102, 97, 99,116,111,114, 0, 97,116,109, 95,101,120,116,105,110, 99,116,105,111,110, 95,102, 97, 99,116,111,114, 0, - 97,116,109, 95,100,105,115,116, 97,110, 99,101, 95,102, 97, 99,116,111,114, 0,115,107,121, 98,108,101,110,100,102, 97, 99, 0, -115,107,121, 95,101,120,112,111,115,117,114,101, 0,115,107,121, 95, 99,111,108,111,114,115,112, 97, 99,101, 0,112, 97,100, 52, - 0, 89, 70, 95,110,117,109,112,104,111,116,111,110,115, 0, 89, 70, 95,110,117,109,115,101, 97,114, 99,104, 0, 89, 70, 95,112, -104,100,101,112,116,104, 0, 89, 70, 95,117,115,101,113,109, 99, 0, 89, 70, 95, 98,117,102,115,105,122,101, 0, 89, 70, 95,112, - 97,100, 0, 89, 70, 95, 99, 97,117,115,116,105, 99, 98,108,117,114, 0, 89, 70, 95,108,116,114, 97,100,105,117,115, 0, 89, 70, - 95,103,108,111,119,105,110,116, 0, 89, 70, 95,103,108,111,119,111,102,115, 0, 89, 70, 95,103,108,111,119,116,121,112,101, 0, - 89, 70, 95,112, 97,100, 50, 0, 42,109,116,101,120, 91, 49, 56, 93, 0,112,114, 95,116,101,120,116,117,114,101, 0,112, 97,100, - 91, 51, 93, 0,100,101,110,115,105,116,121, 0,101,109,105,115,115,105,111,110, 0,115, 99, 97,116,116,101,114,105,110,103, 0, -114,101,102,108,101, 99,116,105,111,110, 0,101,109,105,115,115,105,111,110, 95, 99,111,108, 91, 51, 93, 0,116,114, 97,110,115, -109,105,115,115,105,111,110, 95, 99,111,108, 91, 51, 93, 0,114,101,102,108,101, 99,116,105,111,110, 95, 99,111,108, 91, 51, 93, - 0,100,101,110,115,105,116,121, 95,115, 99, 97,108,101, 0,100,101,112,116,104, 95, 99,117,116,111,102,102, 0, 97,115,121,109, -109,101,116,114,121, 0,115,116,101,112,115,105,122,101, 95,116,121,112,101, 0,115,104, 97,100,101,102,108, 97,103, 0,115,104, - 97,100,101, 95,116,121,112,101, 0,112,114,101, 99, 97, 99,104,101, 95,114,101,115,111,108,117,116,105,111,110, 0,115,116,101, -112,115,105,122,101, 0,109,115, 95,100,105,102,102, 0,109,115, 95,105,110,116,101,110,115,105,116,121, 0,109,115, 95,115,116, -101,112,115, 0,109, 97,116,101,114,105, 97,108, 95,116,121,112,101, 0,115,112,101, 99,114, 0,115,112,101, 99,103, 0,115,112, -101, 99, 98, 0,109,105,114,114, 0,109,105,114,103, 0,109,105,114, 98, 0, 97,109, 98,114, 0, 97,109, 98, 98, 0, 97,109, 98, -103, 0, 97,109, 98, 0,101,109,105,116, 0, 97,110,103, 0,115,112,101, 99,116,114, 97, 0,114, 97,121, 95,109,105,114,114,111, -114, 0, 97,108,112,104, 97, 0,114,101,102, 0,115,112,101, 99, 0,122,111,102,102,115, 0, 97,100,100, 0,116,114, 97,110,115, -108,117, 99,101,110, 99,121, 0,118,111,108, 0,102,114,101,115,110,101,108, 95,109,105,114, 0,102,114,101,115,110,101,108, 95, -109,105,114, 95,105, 0,102,114,101,115,110,101,108, 95,116,114, 97, 0,102,114,101,115,110,101,108, 95,116,114, 97, 95,105, 0, -102,105,108,116,101,114, 0,116,120, 95,108,105,109,105,116, 0,116,120, 95,102, 97,108,108,111,102,102, 0,114, 97,121, 95,100, -101,112,116,104, 0,114, 97,121, 95,100,101,112,116,104, 95,116,114, 97, 0,104, 97,114, 0,115,101,101,100, 49, 0,115,101,101, -100, 50, 0,103,108,111,115,115, 95,109,105,114, 0,103,108,111,115,115, 95,116,114, 97, 0,115, 97,109,112, 95,103,108,111,115, -115, 95,109,105,114, 0,115, 97,109,112, 95,103,108,111,115,115, 95,116,114, 97, 0, 97,100, 97,112,116, 95,116,104,114,101,115, -104, 95,109,105,114, 0, 97,100, 97,112,116, 95,116,104,114,101,115,104, 95,116,114, 97, 0, 97,110,105,115,111, 95,103,108,111, -115,115, 95,109,105,114, 0,100,105,115,116, 95,109,105,114, 0,102, 97,100,101,116,111, 95,109,105,114, 0,115,104, 97,100,101, - 95,102,108, 97,103, 0,109,111,100,101, 95,108, 0,102,108, 97,114,101, 99, 0,115,116, 97,114, 99, 0,108,105,110,101, 99, 0, -114,105,110,103, 99, 0,104, 97,115,105,122,101, 0,102,108, 97,114,101,115,105,122,101, 0,115,117, 98,115,105,122,101, 0,102, -108, 97,114,101, 98,111,111,115,116, 0,115,116,114, 97,110,100, 95,115,116, 97, 0,115,116,114, 97,110,100, 95,101,110,100, 0, -115,116,114, 97,110,100, 95,101, 97,115,101, 0,115,116,114, 97,110,100, 95,115,117,114,102,110,111,114, 0,115,116,114, 97,110, -100, 95,109,105,110, 0,115,116,114, 97,110,100, 95,119,105,100,116,104,102, 97,100,101, 0,115,116,114, 97,110,100, 95,117,118, -110, 97,109,101, 91, 51, 50, 93, 0,115, 98,105, 97,115, 0,108, 98,105, 97,115, 0,115,104, 97,100, 95, 97,108,112,104, 97, 0, -115,101,112,116,101,120, 0,114,103, 98,115,101,108, 0,112,114, 95,116,121,112,101, 0,112,114, 95, 98, 97, 99,107, 0,112,114, - 95,108, 97,109,112, 0,109,108, 95,102,108, 97,103, 0,100,105,102,102, 95,115,104, 97,100,101,114, 0,115,112,101, 99, 95,115, -104, 97,100,101,114, 0,114,111,117,103,104,110,101,115,115, 0,114,101,102,114, 97, 99, 0,112, 97,114, 97,109, 91, 52, 93, 0, -114,109,115, 0,100, 97,114,107,110,101,115,115, 0, 42,114, 97,109,112, 95, 99,111,108, 0, 42,114, 97,109,112, 95,115,112,101, - 99, 0,114, 97,109,112,105,110, 95, 99,111,108, 0,114, 97,109,112,105,110, 95,115,112,101, 99, 0,114, 97,109,112, 98,108,101, -110,100, 95, 99,111,108, 0,114, 97,109,112, 98,108,101,110,100, 95,115,112,101, 99, 0,114, 97,109,112, 95,115,104,111,119, 0, -112, 97,100, 51, 0,114, 97,109,112,102, 97, 99, 95, 99,111,108, 0,114, 97,109,112,102, 97, 99, 95,115,112,101, 99, 0, 42,103, -114,111,117,112, 0,102,114,105, 99,116,105,111,110, 0,102,104, 0,114,101,102,108,101, 99,116, 0,102,104,100,105,115,116, 0, -120,121,102,114,105, 99,116, 0,100,121,110, 97,109,111,100,101, 0,115,115,115, 95,114, 97,100,105,117,115, 91, 51, 93, 0,115, -115,115, 95, 99,111,108, 91, 51, 93, 0,115,115,115, 95,101,114,114,111,114, 0,115,115,115, 95,115, 99, 97,108,101, 0,115,115, -115, 95,105,111,114, 0,115,115,115, 95, 99,111,108,102, 97, 99, 0,115,115,115, 95,116,101,120,102, 97, 99, 0,115,115,115, 95, -102,114,111,110,116, 0,115,115,115, 95, 98, 97, 99,107, 0,115,115,115, 95,102,108, 97,103, 0,115,115,115, 95,112,114,101,115, -101,116, 0,109, 97,112,116,111, 95,116,101,120,116,117,114,101,100, 0,103,112,117,109, 97,116,101,114,105, 97,108, 0,110, 97, -109,101, 91, 50, 53, 54, 93, 0, 42, 98, 98, 0,105, 49, 0,106, 49, 0,107, 49, 0,105, 50, 0,106, 50, 0,107, 50, 0,115,101, -108, 99,111,108, 49, 0,115,101,108, 99,111,108, 50, 0,113,117, 97,116, 91, 52, 93, 0,101,120,112,120, 0,101,120,112,121, 0, -101,120,112,122, 0,114, 97,100, 0,114, 97,100, 50, 0,115, 0, 42,109, 97,116, 0, 42,105,109, 97,116, 0,101,108,101,109,115, - 0,100,105,115,112, 0, 42,101,100,105,116,101,108,101,109,115, 0, 42, 42,109, 97,116, 0,102,108, 97,103, 50, 0,116,111,116, - 99,111,108, 0,119,105,114,101,115,105,122,101, 0,114,101,110,100,101,114,115,105,122,101, 0,116,104,114,101,115,104, 0, 42, -108, 97,115,116,101,108,101,109, 0,118,101, 99, 91, 51, 93, 91, 51, 93, 0, 97,108,102, 97, 0,119,101,105,103,104,116, 0,104, - 49, 0,104, 50, 0,102, 49, 0,102, 50, 0,102, 51, 0,104,105,100,101, 0,118,101, 99, 91, 52, 93, 0,109, 97,116, 95,110,114, - 0,112,110,116,115,117, 0,112,110,116,115,118, 0,114,101,115,111,108,117, 0,114,101,115,111,108,118, 0,111,114,100,101,114, -117, 0,111,114,100,101,114,118, 0,102,108, 97,103,117, 0,102,108, 97,103,118, 0, 42,107,110,111,116,115,117, 0, 42,107,110, -111,116,115,118, 0,116,105,108,116, 95,105,110,116,101,114,112, 0,114, 97,100,105,117,115, 95,105,110,116,101,114,112, 0, 99, -104, 97,114,105,100,120, 0,107,101,114,110, 0,104, 0,110,117,114, 98, 0, 42,101,100,105,116,110,117,114, 98, 0, 42, 98,101, -118,111, 98,106, 0, 42,116, 97,112,101,114,111, 98,106, 0, 42,116,101,120,116,111,110, 99,117,114,118,101, 0, 42,112, 97,116, -104, 0, 42,107,101,121, 0, 98,101,118, 0,100,114, 97,119,102,108, 97,103, 0,116,119,105,115,116, 95,109,111,100,101, 0,112, - 97,100, 91, 50, 93, 0,116,119,105,115,116, 95,115,109,111,111,116,104, 0,112, 97,116,104,108,101,110, 0, 98,101,118,114,101, -115,111,108, 0,119,105,100,116,104, 0,101,120,116, 49, 0,101,120,116, 50, 0,114,101,115,111,108,117, 95,114,101,110, 0,114, -101,115,111,108,118, 95,114,101,110, 0, 97, 99,116,110,117, 0, 42,108, 97,115,116,115,101,108, 98,112, 0,115,112, 97, 99,101, -109,111,100,101, 0,115,112, 97, 99,105,110,103, 0,108,105,110,101,100,105,115,116, 0,115,104,101, 97,114, 0,102,115,105,122, -101, 0,119,111,114,100,115,112, 97, 99,101, 0,117,108,112,111,115, 0,117,108,104,101,105,103,104,116, 0,120,111,102, 0,121, -111,102, 0,108,105,110,101,119,105,100,116,104, 0, 42,115,116,114, 0, 42,115,101,108, 98,111,120,101,115, 0, 42,101,100,105, -116,102,111,110,116, 0,102, 97,109,105,108,121, 91, 50, 52, 93, 0, 42,118,102,111,110,116, 0, 42,118,102,111,110,116, 98, 0, - 42,118,102,111,110,116,105, 0, 42,118,102,111,110,116, 98,105, 0,115,101,112, 99,104, 97,114, 0, 99,116,105,109,101, 0,116, -111,116, 98,111,120, 0, 97, 99,116, 98,111,120, 0, 42,116, 98, 0,115,101,108,115,116, 97,114,116, 0,115,101,108,101,110,100, - 0, 42,115,116,114,105,110,102,111, 0, 99,117,114,105,110,102,111, 0,101,102,102,101, 99,116, 0, 42,109,102, 97, 99,101, 0, - 42,109,116,102, 97, 99,101, 0, 42,116,102, 97, 99,101, 0, 42,109,118,101,114,116, 0, 42,109,101,100,103,101, 0, 42,100,118, -101,114,116, 0, 42,109, 99,111,108, 0, 42,109,115,116,105, 99,107,121, 0, 42,116,101,120, 99,111,109,101,115,104, 0, 42,109, -115,101,108,101, 99,116, 0, 42,101,100,105,116, 95,109,101,115,104, 0,118,100, 97,116, 97, 0,101,100, 97,116, 97, 0,102,100, - 97,116, 97, 0,116,111,116,101,100,103,101, 0,116,111,116,102, 97, 99,101, 0,116,111,116,115,101,108,101, 99,116, 0, 97, 99, -116, 95,102, 97, 99,101, 0,101,100,105,116,102,108, 97,103, 0, 99,117, 98,101,109, 97,112,115,105,122,101, 0,115,109,111,111, -116,104,114,101,115,104, 0,115,117, 98,100,105,118, 0,115,117, 98,100,105,118,114, 0,115,117, 98,115,117,114,102,116,121,112, -101, 0, 42,109,114, 0, 42,112,118, 0, 42,116,112, 97,103,101, 0,117,118, 91, 52, 93, 91, 50, 93, 0, 99,111,108, 91, 52, 93, - 0,116,114, 97,110,115,112, 0,116,105,108,101, 0,117,110,119,114, 97,112, 0,118, 49, 0,118, 50, 0,118, 51, 0,118, 52, 0, -101,100, 99,111,100,101, 0, 99,114,101, 97,115,101, 0, 98,119,101,105,103,104,116, 0,100,101,102, 95,110,114, 0, 42,100,119, - 0,116,111,116,119,101,105,103,104,116, 0, 99,111, 91, 51, 93, 0,110,111, 91, 51, 93, 0,117,118, 91, 50, 93, 0, 99,111, 91, - 50, 93, 0,105,110,100,101,120, 0,102, 0,105, 0,115, 91, 50, 53, 54, 93, 0,116,111,116,100,105,115,112, 0, 40, 42,100,105, -115,112,115, 41, 40, 41, 0,118, 91, 52, 93, 0,109,105,100, 0,118, 91, 50, 93, 0, 42,102, 97, 99,101,115, 0, 42, 99,111,108, -102, 97, 99,101,115, 0, 42,101,100,103,101,115, 0, 42,118,101,114,116,115, 0,108,101,118,101,108,115, 0,108,101,118,101,108, - 95, 99,111,117,110,116, 0, 99,117,114,114,101,110,116, 0,110,101,119,108,118,108, 0,101,100,103,101,108,118,108, 0,112,105, -110,108,118,108, 0,114,101,110,100,101,114,108,118,108, 0,117,115,101, 95, 99,111,108, 0, 42,101,100,103,101, 95,102,108, 97, -103,115, 0, 42,101,100,103,101, 95, 99,114,101, 97,115,101,115, 0, 42,118,101,114,116, 95,109, 97,112, 0, 42,101,100,103,101, - 95,109, 97,112, 0, 42,111,108,100, 95,102, 97, 99,101,115, 0, 42,111,108,100, 95,101,100,103,101,115, 0, 42,101,114,114,111, -114, 0,109,111,100,105,102,105,101,114, 0,115,117, 98,100,105,118, 84,121,112,101, 0,114,101,110,100,101,114, 76,101,118,101, -108,115, 0, 42,101,109, 67, 97, 99,104,101, 0, 42,109, 67, 97, 99,104,101, 0,100,101,102, 97,120,105,115, 0,112, 97,100, 91, - 54, 93, 0,108,101,110,103,116,104, 0,114, 97,110,100,111,109,105,122,101, 0,115,101,101,100, 0, 42,111, 98, 95, 97,114,109, - 0, 42,115,116, 97,114,116, 95, 99, 97,112, 0, 42,101,110,100, 95, 99, 97,112, 0, 42, 99,117,114,118,101, 95,111, 98, 0, 42, -111,102,102,115,101,116, 95,111, 98, 0,111,102,102,115,101,116, 91, 51, 93, 0,115, 99, 97,108,101, 91, 51, 93, 0,109,101,114, -103,101, 95,100,105,115,116, 0,102,105,116, 95,116,121,112,101, 0,111,102,102,115,101,116, 95,116,121,112,101, 0, 99,111,117, -110,116, 0, 97,120,105,115, 0,116,111,108,101,114, 97,110, 99,101, 0, 42,109,105,114,114,111,114, 95,111, 98, 0,115,112,108, -105,116, 95, 97,110,103,108,101, 0,118, 97,108,117,101, 0,114,101,115, 0,118, 97,108, 95,102,108, 97,103,115, 0,108,105,109, - 95,102,108, 97,103,115, 0,101, 95,102,108, 97,103,115, 0, 98,101,118,101,108, 95, 97,110,103,108,101, 0,100,101,102,103,114, -112, 95,110, 97,109,101, 91, 51, 50, 93, 0, 42,100,111,109, 97,105,110, 0, 42,102,108,111,119, 0, 42, 99,111,108,108, 0,116, -105,109,101, 0, 42,116,101,120,116,117,114,101, 0,115,116,114,101,110,103,116,104, 0,100,105,114,101, 99,116,105,111,110, 0, -109,105,100,108,101,118,101,108, 0,116,101,120,109, 97,112,112,105,110,103, 0, 42,109, 97,112, 95,111, 98,106,101, 99,116, 0, -117,118,108, 97,121,101,114, 95,110, 97,109,101, 91, 51, 50, 93, 0,117,118,108, 97,121,101,114, 95,116,109,112, 0, 42,112,114, -111,106,101, 99,116,111,114,115, 91, 49, 48, 93, 0, 42,105,109, 97,103,101, 0,110,117,109, 95,112,114,111,106,101, 99,116,111, -114,115, 0, 97,115,112,101, 99,116,120, 0, 97,115,112,101, 99,116,121, 0,112,101,114, 99,101,110,116, 0,102, 97, 99,101, 67, -111,117,110,116, 0,102, 97, 99, 0,114,101,112,101, 97,116, 0, 42,111, 98,106,101, 99,116, 99,101,110,116,101,114, 0,115,116, - 97,114,116,120, 0,115,116, 97,114,116,121, 0,104,101,105,103,104,116, 0,110, 97,114,114,111,119, 0,115,112,101,101,100, 0, -100, 97,109,112, 0,102, 97,108,108,111,102,102, 0,116,105,109,101,111,102,102,115, 0,108,105,102,101,116,105,109,101, 0,100, -101,102,111,114,109,102,108, 97,103, 0,109,117,108,116,105, 0, 42,112,114,101,118, 67,111,115, 0,115,117, 98,116, 97,114,103, -101,116, 91, 51, 50, 93, 0,112, 97,114,101,110,116,105,110,118, 91, 52, 93, 91, 52, 93, 0, 99,101,110,116, 91, 51, 93, 0, 42, -105,110,100,101,120, 97,114, 0,116,111,116,105,110,100,101,120, 0,102,111,114, 99,101, 0, 42, 99,108,111,116,104, 79, 98,106, -101, 99,116, 0, 42,115,105,109, 95,112, 97,114,109,115, 0, 42, 99,111,108,108, 95,112, 97,114,109,115, 0, 42,112,111,105,110, -116, 95, 99, 97, 99,104,101, 0,112,116, 99, 97, 99,104,101,115, 0, 42,120, 0, 42,120,110,101,119, 0, 42,120,111,108,100, 0, - 42, 99,117,114,114,101,110,116, 95,120,110,101,119, 0, 42, 99,117,114,114,101,110,116, 95,120, 0, 42, 99,117,114,114,101,110, -116, 95,118, 0, 42,109,102, 97, 99,101,115, 0,110,117,109,118,101,114,116,115, 0,110,117,109,102, 97, 99,101,115, 0, 42, 98, -118,104,116,114,101,101, 0, 42,118, 0, 42,100,109, 0, 99,102,114, 97, 0,111,112,101,114, 97,116,105,111,110, 0,118,101,114, -116,101,120, 0,116,111,116,105,110,102,108,117,101,110, 99,101, 0,103,114,105,100,115,105,122,101, 0,110,101,101,100, 98,105, -110,100, 0, 42, 98,105,110,100,119,101,105,103,104,116,115, 0, 42, 98,105,110,100, 99,111,115, 0,116,111,116, 99, 97,103,101, -118,101,114,116, 0, 42,100,121,110,103,114,105,100, 0, 42,100,121,110,105,110,102,108,117,101,110, 99,101,115, 0, 42,100,121, -110,118,101,114,116,115, 0, 42,112, 97,100, 50, 0,100,121,110,103,114,105,100,115,105,122,101, 0,100,121,110, 99,101,108,108, -109,105,110, 91, 51, 93, 0,100,121,110, 99,101,108,108,119,105,100,116,104, 0, 98,105,110,100,109, 97,116, 91, 52, 93, 91, 52, - 93, 0,116,111,116,100,109,118,101,114,116, 0,116,111,116,100,109,101,100,103,101, 0,116,111,116,100,109,102, 97, 99,101, 0, -112,115,121,115, 0,112,111,115,105,116,105,111,110, 0,114, 97,110,100,111,109, 95,112,111,115,105,116,105,111,110, 0, 42,102, - 97, 99,101,112, 97, 0,118,103,114,111,117,112, 0,112,114,111,116,101, 99,116, 0, 42,117,110,100,111, 95,118,101,114,116,115, - 0,117,110,100,111, 95,118,101,114,116,115, 95,116,111,116, 0,117,110,100,111, 95,115,105,103,110, 97,108, 0,108,118,108, 0, -116,111,116,108,118,108, 0,115,105,109,112,108,101, 0, 42,102,115,115, 0, 42,116, 97,114,103,101,116, 0, 42, 97,117,120, 84, - 97,114,103,101,116, 0,118,103,114,111,117,112, 95,110, 97,109,101, 91, 51, 50, 93, 0,107,101,101,112, 68,105,115,116, 0,115, -104,114,105,110,107, 84,121,112,101, 0,115,104,114,105,110,107, 79,112,116,115, 0,112,114,111,106, 65,120,105,115, 0,115,117, - 98,115,117,114,102, 76,101,118,101,108,115, 0, 42,111,114,105,103,105,110, 0,102, 97, 99,116,111,114, 0,108,105,109,105,116, - 91, 50, 93, 0,111,114,105,103,105,110, 79,112,116,115, 0,112,110,116,115,119, 0,111,112,110,116,115,117, 0,111,112,110,116, -115,118, 0,111,112,110,116,115,119, 0,116,121,112,101,117, 0,116,121,112,101,118, 0,116,121,112,101,119, 0,102,117, 0,102, -118, 0,102,119, 0,100,117, 0,100,118, 0,100,119, 0, 42,100,101,102, 0, 42,108, 97,116,116,105, 99,101,100, 97,116, 97, 0, -108, 97,116,109, 97,116, 91, 52, 93, 91, 52, 93, 0, 42,101,100,105,116,108, 97,116,116, 0,118,101, 99, 91, 56, 93, 91, 51, 93, - 0, 42,115, 99,117,108,112,116, 0,112, 97,114,116,121,112,101, 0,112, 97,114, 49, 0,112, 97,114, 50, 0,112, 97,114, 51, 0, -112, 97,114,115,117, 98,115,116,114, 91, 51, 50, 93, 0, 42,116,114, 97, 99,107, 0, 42,112,114,111,120,121, 0, 42,112,114,111, -120,121, 95,103,114,111,117,112, 0, 42,112,114,111,120,121, 95,102,114,111,109, 0, 42, 97, 99,116,105,111,110, 0, 42,112,111, -115,101,108,105, 98, 0, 42,112,111,115,101, 0, 42,103,112,100, 0, 99,111,110,115,116,114, 97,105,110,116, 67,104, 97,110,110, -101,108,115, 0,100,101,102, 98, 97,115,101, 0,109,111,100,105,102,105,101,114,115, 0,114,101,115,116,111,114,101, 95,109,111, -100,101, 0, 42,109, 97,116, 98,105,116,115, 0, 97, 99,116, 99,111,108, 0,100,108,111, 99, 91, 51, 93, 0,111,114,105,103, 91, - 51, 93, 0,100,115,105,122,101, 91, 51, 93, 0,100,114,111,116, 91, 51, 93, 0,100,113,117, 97,116, 91, 52, 93, 0,114,111,116, - 65,120,105,115, 91, 51, 93, 0,100,114,111,116, 65,120,105,115, 91, 51, 93, 0,114,111,116, 65,110,103,108,101, 0,100,114,111, -116, 65,110,103,108,101, 0,111, 98,109, 97,116, 91, 52, 93, 91, 52, 93, 0, 99,111,110,115,116,105,110,118, 91, 52, 93, 91, 52, - 93, 0,108, 97,121, 0, 99,111,108, 98,105,116,115, 0,116,114, 97,110,115,102,108, 97,103, 0,112,114,111,116,101, 99,116,102, -108, 97,103, 0,116,114, 97, 99,107,102,108, 97,103, 0,117,112,102,108, 97,103, 0,110,108, 97,102,108, 97,103, 0,105,112,111, -102,108, 97,103, 0,105,112,111,119,105,110, 0,115, 99, 97,102,108, 97,103, 0,115, 99, 97,118,105,115,102,108, 97,103, 0, 98, -111,117,110,100,116,121,112,101, 0,100,117,112,111,110, 0,100,117,112,111,102,102, 0,100,117,112,115,116, 97, 0,100,117,112, -101,110,100, 0,115,102, 0,109, 97,115,115, 0,100, 97,109,112,105,110,103, 0,105,110,101,114,116,105, 97, 0,102,111,114,109, -102, 97, 99,116,111,114, 0,114,100, 97,109,112,105,110,103, 0,109, 97,114,103,105,110, 0,109, 97,120, 95,118,101,108, 0,109, -105,110, 95,118,101,108, 0,109, 95, 99,111,110,116, 97, 99,116, 80,114,111, 99,101,115,115,105,110,103, 84,104,114,101,115,104, -111,108,100, 0,114,111,116,109,111,100,101, 0,100,116, 0,100,116,120, 0,101,109,112,116,121, 95,100,114, 97,119,116,121,112, -101, 0,112, 97,100, 49, 91, 51, 93, 0,101,109,112,116,121, 95,100,114, 97,119,115,105,122,101, 0,100,117,112,102, 97, 99,101, -115, 99, 97, 0,112,114,111,112, 0,115,101,110,115,111,114,115, 0, 99,111,110,116,114,111,108,108,101,114,115, 0, 97, 99,116, -117, 97,116,111,114,115, 0, 98, 98,115,105,122,101, 91, 51, 93, 0, 97, 99,116,100,101,102, 0,103, 97,109,101,102,108, 97,103, - 0,103, 97,109,101,102,108, 97,103, 50, 0, 42, 98,115,111,102,116, 0,115,111,102,116,102,108, 97,103, 0, 97,110,105,115,111, -116,114,111,112,105, 99, 70,114,105, 99,116,105,111,110, 91, 51, 93, 0, 99,111,110,115,116,114, 97,105,110,116,115, 0,110,108, - 97,115,116,114,105,112,115, 0,104,111,111,107,115, 0,112, 97,114,116,105, 99,108,101,115,121,115,116,101,109, 0, 42,115,111, -102,116, 0, 42,100,117,112, 95,103,114,111,117,112, 0,102,108,117,105,100,115,105,109, 70,108, 97,103, 0,114,101,115,116,114, -105, 99,116,102,108, 97,103, 0,115,104, 97,112,101,110,114, 0,115,104, 97,112,101,102,108, 97,103, 0,114,101, 99, 97,108, 99, -111, 0, 98,111,100,121, 95,116,121,112,101, 0, 42,102,108,117,105,100,115,105,109, 83,101,116,116,105,110,103,115, 0, 42,100, -101,114,105,118,101,100, 68,101,102,111,114,109, 0, 42,100,101,114,105,118,101,100, 70,105,110, 97,108, 0,108, 97,115,116, 68, - 97,116, 97, 77, 97,115,107, 0,115,116, 97,116,101, 0,105,110,105,116, 95,115,116, 97,116,101, 0,103,112,117,108, 97,109,112, - 0,112, 99, 95,105,100,115, 0, 42,100,117,112,108,105,108,105,115,116, 0, 99,117,114,105,110,100,101,120, 0, 97, 99,116,105, -118,101, 0,111,114,105,103,108, 97,121, 0,110,111, 95,100,114, 97,119, 0, 97,110,105,109, 97,116,101,100, 0,111,109, 97,116, - 91, 52, 93, 91, 52, 93, 0,111,114, 99,111, 91, 51, 93, 0,100,101,102,108,101, 99,116, 0,102,111,114, 99,101,102,105,101,108, -100, 0,115,104, 97,112,101, 0,116,101,120, 95,109,111,100,101, 0,107,105,110,107, 0,107,105,110,107, 95, 97,120,105,115, 0, -122,100,105,114, 0,102, 95,115,116,114,101,110,103,116,104, 0,102, 95,100, 97,109,112, 0,102, 95,102,108,111,119, 0,102, 95, -115,105,122,101, 0,102, 95,112,111,119,101,114, 0,109, 97,120,100,105,115,116, 0,109,105,110,100,105,115,116, 0,102, 95,112, -111,119,101,114, 95,114, 0,109, 97,120,114, 97,100, 0,109,105,110,114, 97,100, 0,112,100,101,102, 95,100, 97,109,112, 0,112, -100,101,102, 95,114,100, 97,109,112, 0,112,100,101,102, 95,112,101,114,109, 0,112,100,101,102, 95,102,114,105, 99,116, 0,112, -100,101,102, 95,114,102,114,105, 99,116, 0, 97, 98,115,111,114,112,116,105,111,110, 0,112,100,101,102, 95,115, 98,100, 97,109, -112, 0,112,100,101,102, 95,115, 98,105,102,116, 0,112,100,101,102, 95,115, 98,111,102,116, 0, 99,108,117,109,112, 95,102, 97, - 99, 0, 99,108,117,109,112, 95,112,111,119, 0,107,105,110,107, 95,102,114,101,113, 0,107,105,110,107, 95,115,104, 97,112,101, - 0,107,105,110,107, 95, 97,109,112, 0,102,114,101,101, 95,101,110,100, 0,116,101,120, 95,110, 97, 98,108, 97, 0, 42,114,110, -103, 0,102, 95,110,111,105,115,101, 0,119,101,105,103,104,116, 91, 49, 51, 93, 0,103,108,111, 98, 97,108, 95,103,114, 97,118, -105,116,121, 0,114,116, 91, 51, 93, 0,102,114, 97,109,101, 0,116,111,116,112,111,105,110,116, 0,100, 97,116, 97, 95,116,121, -112,101,115, 0, 42,105,110,100,101,120, 95, 97,114,114, 97,121, 0, 42,100, 97,116, 97, 91, 56, 93, 0, 42, 99,117,114, 91, 56, - 93, 0,115,116,101,112, 0,115,105,109,102,114, 97,109,101, 0,115,116, 97,114,116,102,114, 97,109,101, 0,101,110,100,102,114, - 97,109,101, 0,101,100,105,116,102,114, 97,109,101, 0,108, 97,115,116, 95,101,120, 97, 99,116, 0,110, 97,109,101, 91, 54, 52, - 93, 0,112,114,101,118, 95,110, 97,109,101, 91, 54, 52, 93, 0,105,110,102,111, 91, 54, 52, 93, 0,112, 97,116,104, 91, 50, 52, - 48, 93, 0,109,101,109, 95, 99, 97, 99,104,101, 0, 42,101,100,105,116, 0, 40, 42,102,114,101,101, 95,101,100,105,116, 41, 40, - 41, 0,108,105,110, 83,116,105,102,102, 0, 97,110,103, 83,116,105,102,102, 0,118,111,108,117,109,101, 0,118,105,116,101,114, - 97,116,105,111,110,115, 0,112,105,116,101,114, 97,116,105,111,110,115, 0,100,105,116,101,114, 97,116,105,111,110,115, 0, 99, -105,116,101,114, 97,116,105,111,110,115, 0,107, 83, 82, 72, 82, 95, 67, 76, 0,107, 83, 75, 72, 82, 95, 67, 76, 0,107, 83, 83, - 72, 82, 95, 67, 76, 0,107, 83, 82, 95, 83, 80, 76, 84, 95, 67, 76, 0,107, 83, 75, 95, 83, 80, 76, 84, 95, 67, 76, 0,107, 83, - 83, 95, 83, 80, 76, 84, 95, 67, 76, 0,107, 86, 67, 70, 0,107, 68, 80, 0,107, 68, 71, 0,107, 76, 70, 0,107, 80, 82, 0,107, - 86, 67, 0,107, 68, 70, 0,107, 77, 84, 0,107, 67, 72, 82, 0,107, 75, 72, 82, 0,107, 83, 72, 82, 0,107, 65, 72, 82, 0, 99, -111,108,108,105,115,105,111,110,102,108, 97,103,115, 0,110,117,109, 99,108,117,115,116,101,114,105,116,101,114, 97,116,105,111, -110,115, 0,119,101,108,100,105,110,103, 0,116,111,116,115,112,114,105,110,103, 0, 42, 98,112,111,105,110,116, 0, 42, 98,115, -112,114,105,110,103, 0,109,115,103, 95,108,111, 99,107, 0,109,115,103, 95,118, 97,108,117,101, 0,110,111,100,101,109, 97,115, -115, 0,110, 97,109,101,100, 86, 71, 95, 77, 97,115,115, 91, 51, 50, 93, 0,103,114, 97,118, 0,109,101,100,105, 97,102,114,105, - 99,116, 0,114,107,108,105,109,105,116, 0,112,104,121,115,105, 99,115, 95,115,112,101,101,100, 0,103,111, 97,108,115,112,114, -105,110,103, 0,103,111, 97,108,102,114,105, 99,116, 0,109,105,110,103,111, 97,108, 0,109, 97,120,103,111, 97,108, 0,100,101, -102,103,111, 97,108, 0,118,101,114,116,103,114,111,117,112, 0,110, 97,109,101,100, 86, 71, 95, 83,111,102,116,103,111, 97,108, - 91, 51, 50, 93, 0,102,117,122,122,121,110,101,115,115, 0,105,110,115,112,114,105,110,103, 0,105,110,102,114,105, 99,116, 0, -110, 97,109,101,100, 86, 71, 95, 83,112,114,105,110,103, 95, 75, 91, 51, 50, 93, 0,101,102,114, 97, 0,105,110,116,101,114,118, - 97,108, 0,108,111, 99, 97,108, 0,115,111,108,118,101,114,102,108, 97,103,115, 0, 42, 42,107,101,121,115, 0,116,111,116,112, -111,105,110,116,107,101,121, 0,115,101, 99,111,110,100,115,112,114,105,110,103, 0, 99,111,108, 98, 97,108,108, 0, 98, 97,108, -108,100, 97,109,112, 0, 98, 97,108,108,115,116,105,102,102, 0,115, 98, 99, 95,109,111,100,101, 0, 97,101,114,111,101,100,103, -101, 0,109,105,110,108,111,111,112,115, 0,109, 97,120,108,111,111,112,115, 0, 99,104,111,107,101, 0,115,111,108,118,101,114, - 95, 73, 68, 0,112,108, 97,115,116,105, 99, 0,115,112,114,105,110,103,112,114,101,108,111, 97,100, 0, 42,115, 99,114, 97,116, - 99,104, 0,115,104,101, 97,114,115,116,105,102,102, 0,105,110,112,117,115,104, 0, 42,112,111,105,110,116, 99, 97, 99,104,101, - 0, 42,101,102,102,101, 99,116,111,114, 95,119,101,105,103,104,116,115, 0, 42,102,109,100, 0,115,104,111,119, 95, 97,100,118, - 97,110, 99,101,100,111,112,116,105,111,110,115, 0,114,101,115,111,108,117,116,105,111,110,120,121,122, 0,112,114,101,118,105, -101,119,114,101,115,120,121,122, 0,114,101, 97,108,115,105,122,101, 0,103,117,105, 68,105,115,112,108, 97,121, 77,111,100,101, - 0,114,101,110,100,101,114, 68,105,115,112,108, 97,121, 77,111,100,101, 0,118,105,115, 99,111,115,105,116,121, 86, 97,108,117, -101, 0,118,105,115, 99,111,115,105,116,121, 77,111,100,101, 0,118,105,115, 99,111,115,105,116,121, 69,120,112,111,110,101,110, -116, 0,103,114, 97,118,120, 0,103,114, 97,118,121, 0,103,114, 97,118,122, 0, 97,110,105,109, 83,116, 97,114,116, 0, 97,110, -105,109, 69,110,100, 0,103,115,116, 97,114, 0,109, 97,120, 82,101,102,105,110,101, 0,105,110,105, 86,101,108,120, 0,105,110, -105, 86,101,108,121, 0,105,110,105, 86,101,108,122, 0, 42,111,114,103, 77,101,115,104, 0, 42,109,101,115,104, 83,117,114,102, - 97, 99,101, 0, 42,109,101,115,104, 66, 66, 0,115,117,114,102,100, 97,116, 97, 80, 97,116,104, 91, 50, 52, 48, 93, 0, 98, 98, - 83,116, 97,114,116, 91, 51, 93, 0, 98, 98, 83,105,122,101, 91, 51, 93, 0,116,121,112,101, 70,108, 97,103,115, 0,100,111,109, - 97,105,110, 78,111,118,101, 99,103,101,110, 0,118,111,108,117,109,101, 73,110,105,116, 84,121,112,101, 0,112, 97,114,116, 83, -108,105,112, 86, 97,108,117,101, 0,103,101,110,101,114, 97,116,101, 84,114, 97, 99,101,114,115, 0,103,101,110,101,114, 97,116, -101, 80, 97,114,116,105, 99,108,101,115, 0,115,117,114,102, 97, 99,101, 83,109,111,111,116,104,105,110,103, 0,115,117,114,102, - 97, 99,101, 83,117, 98,100,105,118,115, 0,112, 97,114,116,105, 99,108,101, 73,110,102, 83,105,122,101, 0,112, 97,114,116,105, - 99,108,101, 73,110,102, 65,108,112,104, 97, 0,102, 97,114, 70,105,101,108,100, 83,105,122,101, 0, 42,109,101,115,104, 83,117, -114,102, 78,111,114,109, 97,108,115, 0, 99,112,115, 84,105,109,101, 83,116, 97,114,116, 0, 99,112,115, 84,105,109,101, 69,110, -100, 0, 99,112,115, 81,117, 97,108,105,116,121, 0, 97,116,116,114, 97, 99,116,102,111,114, 99,101, 83,116,114,101,110,103,116, -104, 0, 97,116,116,114, 97, 99,116,102,111,114, 99,101, 82, 97,100,105,117,115, 0,118,101,108,111, 99,105,116,121,102,111,114, - 99,101, 83,116,114,101,110,103,116,104, 0,118,101,108,111, 99,105,116,121,102,111,114, 99,101, 82, 97,100,105,117,115, 0,108, - 97,115,116,103,111,111,100,102,114, 97,109,101, 0,109,105,115,116,121,112,101, 0,104,111,114,114, 0,104,111,114,103, 0,104, -111,114, 98, 0,104,111,114,107, 0,122,101,110,114, 0,122,101,110,103, 0,122,101,110, 98, 0,122,101,110,107, 0, 97,109, 98, -107, 0,102, 97,115,116, 99,111,108, 0,101,120,112,111,115,117,114,101, 0,101,120,112, 0,114, 97,110,103,101, 0,108,105,110, -102, 97, 99, 0,108,111,103,102, 97, 99, 0,103,114, 97,118,105,116,121, 0, 97, 99,116,105,118,105,116,121, 66,111,120, 82, 97, -100,105,117,115, 0,115,107,121,116,121,112,101, 0,111, 99, 99,108,117,115,105,111,110, 82,101,115, 0,112,104,121,115,105, 99, -115, 69,110,103,105,110,101, 0,116,105, 99,114, 97,116,101, 0,109, 97,120,108,111,103,105, 99,115,116,101,112, 0,112,104,121, -115,117, 98,115,116,101,112, 0,109, 97,120,112,104,121,115,116,101,112, 0,109,105,115,105, 0,109,105,115,116,115,116, 97, 0, -109,105,115,116,100,105,115,116, 0,109,105,115,116,104,105, 0,115,116, 97,114,114, 0,115,116, 97,114,103, 0,115,116, 97,114, - 98, 0,115,116, 97,114,107, 0,115,116, 97,114,115,105,122,101, 0,115,116, 97,114,109,105,110,100,105,115,116, 0,115,116, 97, -114,100,105,115,116, 0,115,116, 97,114, 99,111,108,110,111,105,115,101, 0,100,111,102,115,116, 97, 0,100,111,102,101,110,100, - 0,100,111,102,109,105,110, 0,100,111,102,109, 97,120, 0, 97,111,100,105,115,116, 0, 97,111,100,105,115,116,102, 97, 99, 0, - 97,111,101,110,101,114,103,121, 0, 97,111, 98,105, 97,115, 0, 97,111,109,111,100,101, 0, 97,111,115, 97,109,112, 0, 97,111, -109,105,120, 0, 97,111, 99,111,108,111,114, 0, 97,111, 95, 97,100, 97,112,116, 95,116,104,114,101,115,104, 0, 97,111, 95, 97, -100, 97,112,116, 95,115,112,101,101,100, 95,102, 97, 99, 0, 97,111, 95, 97,112,112,114,111,120, 95,101,114,114,111,114, 0, 97, -111, 95, 97,112,112,114,111,120, 95, 99,111,114,114,101, 99,116,105,111,110, 0, 97,111, 95,115, 97,109,112, 95,109,101,116,104, -111,100, 0, 97,111, 95,103, 97,116,104,101,114, 95,109,101,116,104,111,100, 0, 97,111, 95, 97,112,112,114,111,120, 95,112, 97, -115,115,101,115, 0, 42, 97,111,115,112,104,101,114,101, 0, 42, 97,111,116, 97, 98,108,101,115, 0,115,101,108, 99,111,108, 0, -115,120, 0,115,121, 0, 42,108,112, 70,111,114,109, 97,116, 0, 42,108,112, 80, 97,114,109,115, 0, 99, 98, 70,111,114,109, 97, -116, 0, 99, 98, 80, 97,114,109,115, 0,102, 99, 99, 84,121,112,101, 0,102, 99, 99, 72, 97,110,100,108,101,114, 0,100,119, 75, -101,121, 70,114, 97,109,101, 69,118,101,114,121, 0,100,119, 81,117, 97,108,105,116,121, 0,100,119, 66,121,116,101,115, 80,101, -114, 83,101, 99,111,110,100, 0,100,119, 70,108, 97,103,115, 0,100,119, 73,110,116,101,114,108,101, 97,118,101, 69,118,101,114, -121, 0, 97,118,105, 99,111,100,101, 99,110, 97,109,101, 91, 49, 50, 56, 93, 0, 42, 99,100, 80, 97,114,109,115, 0, 42,112, 97, -100, 0, 99,100, 83,105,122,101, 0,113,116, 99,111,100,101, 99,110, 97,109,101, 91, 49, 50, 56, 93, 0, 99,111,100,101, 99, 0, - 97,117,100,105,111, 95, 99,111,100,101, 99, 0,118,105,100,101,111, 95, 98,105,116,114, 97,116,101, 0, 97,117,100,105,111, 95, - 98,105,116,114, 97,116,101, 0, 97,117,100,105,111, 95,109,105,120,114, 97,116,101, 0, 97,117,100,105,111, 95,118,111,108,117, -109,101, 0,103,111,112, 95,115,105,122,101, 0,114, 99, 95,109,105,110, 95,114, 97,116,101, 0,114, 99, 95,109, 97,120, 95,114, - 97,116,101, 0,114, 99, 95, 98,117,102,102,101,114, 95,115,105,122,101, 0,109,117,120, 95,112, 97, 99,107,101,116, 95,115,105, -122,101, 0,109,117,120, 95,114, 97,116,101, 0,109,105,120,114, 97,116,101, 0,109, 97,105,110, 0,115,112,101,101,100, 95,111, -102, 95,115,111,117,110,100, 0,100,111,112,112,108,101,114, 95,102, 97, 99,116,111,114, 0,100,105,115,116, 97,110, 99,101, 95, -109,111,100,101,108, 0, 42,109, 97,116, 95,111,118,101,114,114,105,100,101, 0, 42,108,105,103,104,116, 95,111,118,101,114,114, -105,100,101, 0,108, 97,121, 95,122,109, 97,115,107, 0,108, 97,121,102,108, 97,103, 0,112, 97,115,115,102,108, 97,103, 0,112, - 97,115,115, 95,120,111,114, 0, 42, 97,118,105, 99,111,100,101, 99,100, 97,116, 97, 0, 42,113,116, 99,111,100,101, 99,100, 97, -116, 97, 0,102,102, 99,111,100,101, 99,100, 97,116, 97, 0,112,115,102,114, 97, 0,112,101,102,114, 97, 0,105,109, 97,103,101, -115, 0,102,114, 97,109, 97,112,116,111, 0,116,104,114,101, 97,100,115, 0,102,114, 97,109,101,108,101,110, 0, 98,108,117,114, -102, 97, 99, 0,101,100,103,101, 82, 0,101,100,103,101, 71, 0,101,100,103,101, 66, 0,102,117,108,108,115, 99,114,101,101,110, - 0,120,112,108, 97,121, 0,121,112,108, 97,121, 0,102,114,101,113,112,108, 97,121, 0, 97,116,116,114,105, 98, 0,114,116, 49, - 0,114,116, 50, 0,115,116,101,114,101,111,109,111,100,101, 0,100,105,109,101,110,115,105,111,110,115,112,114,101,115,101,116, - 0,109, 97,120,105,109,115,105,122,101, 0,120,115, 99,104, 0,121,115, 99,104, 0,120,112, 97,114,116,115, 0,121,112, 97,114, -116,115, 0,119,105,110,112,111,115, 0,112,108, 97,110,101,115, 0,105,109,116,121,112,101, 0,115,117, 98,105,109,116,121,112, -101, 0,113,117, 97,108,105,116,121, 0,100,105,115,112,108, 97,121,109,111,100,101, 0,114,112, 97,100, 49, 0,114,112, 97,100, - 50, 0,115, 99,101,109,111,100,101, 0,114, 97,121,116,114, 97, 99,101, 95,111,112,116,105,111,110,115, 0,114, 97,121,116,114, - 97, 99,101, 95,115,116,114,117, 99,116,117,114,101, 0,114,101,110,100,101,114,101,114, 0,111, 99,114,101,115, 0, 97,108,112, -104, 97,109,111,100,101, 0,111,115, 97, 0,102,114,115, 95,115,101, 99, 0,101,100,103,101,105,110,116, 0,115, 97,102,101,116, -121, 0, 98,111,114,100,101,114, 0,100,105,115,112,114,101, 99,116, 0,108, 97,121,101,114,115, 0, 97, 99,116,108, 97,121, 0, -120, 97,115,112, 0,121, 97,115,112, 0,102,114,115, 95,115,101, 99, 95, 98, 97,115,101, 0,103, 97,117,115,115, 0, 99,111,108, -111,114, 95,109,103,116, 95,102,108, 97,103, 0,112,111,115,116,103, 97,109,109, 97, 0,112,111,115,116,104,117,101, 0,112,111, -115,116,115, 97,116, 0,100,105,116,104,101,114, 95,105,110,116,101,110,115,105,116,121, 0, 98, 97,107,101, 95,111,115, 97, 0, - 98, 97,107,101, 95,102,105,108,116,101,114, 0, 98, 97,107,101, 95,109,111,100,101, 0, 98, 97,107,101, 95,102,108, 97,103, 0, - 98, 97,107,101, 95,110,111,114,109, 97,108, 95,115,112, 97, 99,101, 0, 98, 97,107,101, 95,113,117, 97,100, 95,115,112,108,105, -116, 0, 98, 97,107,101, 95,109, 97,120,100,105,115,116, 0, 98, 97,107,101, 95, 98,105, 97,115,100,105,115,116, 0, 98, 97,107, -101, 95,112, 97,100, 0, 71, 73,113,117, 97,108,105,116,121, 0, 71, 73, 99, 97, 99,104,101, 0, 71, 73,109,101,116,104,111,100, - 0, 71, 73,112,104,111,116,111,110,115, 0, 71, 73,100,105,114,101, 99,116, 0, 89, 70, 95, 65, 65, 0, 89, 70,101,120,112,111, -114,116,120,109,108, 0, 89, 70, 95,110,111, 98,117,109,112, 0, 89, 70, 95, 99,108, 97,109,112,114,103, 98, 0,121,102,112, 97, -100, 49, 0, 71, 73,100,101,112,116,104, 0, 71, 73, 99, 97,117,115,100,101,112,116,104, 0, 71, 73,112,105,120,101,108,115,112, -101,114,115, 97,109,112,108,101, 0, 71, 73,112,104,111,116,111,110, 99,111,117,110,116, 0, 71, 73,109,105,120,112,104,111,116, -111,110,115, 0, 71, 73,112,104,111,116,111,110,114, 97,100,105,117,115, 0, 89, 70, 95,114, 97,121,100,101,112,116,104, 0, 89, - 70, 95, 65, 65,112, 97,115,115,101,115, 0, 89, 70, 95, 65, 65,115, 97,109,112,108,101,115, 0,121,102,112, 97,100, 50, 0, 71, - 73,115,104, 97,100,111,119,113,117, 97,108,105,116,121, 0, 71, 73,114,101,102,105,110,101,109,101,110,116, 0, 71, 73,112,111, -119,101,114, 0, 71, 73,105,110,100,105,114,112,111,119,101,114, 0, 89, 70, 95,103, 97,109,109, 97, 0, 89, 70, 95,101,120,112, -111,115,117,114,101, 0, 89, 70, 95,114, 97,121, 98,105, 97,115, 0, 89, 70, 95, 65, 65,112,105,120,101,108,115,105,122,101, 0, - 89, 70, 95, 65, 65,116,104,114,101,115,104,111,108,100, 0, 98, 97, 99,107, 98,117,102, 91, 49, 54, 48, 93, 0,112,105, 99, 91, - 49, 54, 48, 93, 0,115,116, 97,109,112, 0,115,116, 97,109,112, 95,102,111,110,116, 95,105,100, 0,115,116, 97,109,112, 95,117, -100, 97,116, 97, 91, 49, 54, 48, 93, 0,102,103, 95,115,116, 97,109,112, 91, 52, 93, 0, 98,103, 95,115,116, 97,109,112, 91, 52, - 93, 0,115,105,109,112,108,105,102,121, 95,115,117, 98,115,117,114,102, 0,115,105,109,112,108,105,102,121, 95,115,104, 97,100, -111,119,115, 97,109,112,108,101,115, 0,115,105,109,112,108,105,102,121, 95,112, 97,114,116,105, 99,108,101,115, 0,115,105,109, -112,108,105,102,121, 95, 97,111,115,115,115, 0, 99,105,110,101,111,110,119,104,105,116,101, 0, 99,105,110,101,111,110, 98,108, - 97, 99,107, 0, 99,105,110,101,111,110,103, 97,109,109, 97, 0,106,112, 50, 95,112,114,101,115,101,116, 0,106,112, 50, 95,100, -101,112,116,104, 0,114,112, 97,100, 51, 0,100,111,109,101,114,101,115, 0,100,111,109,101,109,111,100,101, 0,100,111,109,101, - 97,110,103,108,101, 0,100,111,109,101,116,105,108,116, 0,100,111,109,101,114,101,115, 98,117,102, 0, 42,100,111,109,101,116, -101,120,116, 0,101,110,103,105,110,101, 91, 51, 50, 93, 0,112, 97,114,116,105, 99,108,101, 95,112,101,114, 99, 0,115,117, 98, -115,117,114,102, 95,109, 97,120, 0,115,104, 97,100, 98,117,102,115, 97,109,112,108,101, 95,109, 97,120, 0, 97,111, 95,101,114, -114,111,114, 0,116,105,108,116, 0,114,101,115, 98,117,102, 0, 42,119, 97,114,112,116,101,120,116, 0, 99,111,108, 91, 51, 93, - 0,109, 97,116,109,111,100,101, 0,102,114, 97,109,105,110,103, 0,100,111,109,101, 0,115,116,101,114,101,111,102,108, 97,103, - 0, 42, 42, 98,114,117,115,104,101,115, 0, 97, 99,116,105,118,101, 95, 98,114,117,115,104, 95,105,110,100,101,120, 0, 98,114, -117,115,104, 95, 99,111,117,110,116, 0, 42,112, 97,105,110,116, 95, 99,117,114,115,111,114, 0,112, 97,105,110,116, 95, 99,117, -114,115,111,114, 95, 99,111,108, 91, 52, 93, 0,112, 97,105,110,116, 0,116,111,111,108, 0,115,101, 97,109, 95, 98,108,101,101, -100, 0,110,111,114,109, 97,108, 95, 97,110,103,108,101, 0, 42,112, 97,105,110,116, 99,117,114,115,111,114, 0,105,110,118,101, -114,116, 0,116,111,116,114,101,107,101,121, 0,116,111,116, 97,100,100,107,101,121, 0, 98,114,117,115,104,116,121,112,101, 0, - 98,114,117,115,104, 91, 55, 93, 0,101,109,105,116,116,101,114,100,105,115,116, 0,115,101,108,101, 99,116,109,111,100,101, 0, -101,100,105,116,116,121,112,101, 0,100,114, 97,119, 95,115,116,101,112, 0,102, 97,100,101, 95,102,114, 97,109,101,115, 0,110, - 97,109,101, 91, 51, 54, 93, 0,109, 97,116, 91, 51, 93, 91, 51, 93, 0,112,105,118,111,116, 91, 51, 93, 0,116, 97, 98,108,101, -116, 95,115,105,122,101, 0,116, 97, 98,108,101,116, 95,115,116,114,101,110,103,116,104, 0,103, 97,109,109, 97, 0,109,117,108, - 0, 42,118,112, 97,105,110,116, 95,112,114,101,118, 0, 42,119,112, 97,105,110,116, 95,112,114,101,118, 0, 42,118,112, 97,105, -110,116, 0, 42,119,112, 97,105,110,116, 0,118,103,114,111,117,112, 95,119,101,105,103,104,116, 0, 99,111,114,110,101,114,116, -121,112,101, 0,101,100,105,116, 98,117,116,102,108, 97,103, 0,106,111,105,110,116,114,105,108,105,109,105,116, 0,100,101,103, -114, 0,116,117,114,110, 0,101,120,116,114, 95,111,102,102,115, 0,100,111,117, 98,108,105,109,105,116, 0,110,111,114,109, 97, -108,115,105,122,101, 0, 97,117,116,111,109,101,114,103,101, 0,115,101,103,109,101,110,116,115, 0,114,105,110,103,115, 0,118, -101,114,116,105, 99,101,115, 0,117,110,119,114, 97,112,112,101,114, 0,117,118, 99, 97,108, 99, 95,114, 97,100,105,117,115, 0, -117,118, 99, 97,108, 99, 95, 99,117, 98,101,115,105,122,101, 0,117,118, 99, 97,108, 99, 95,109, 97,114,103,105,110, 0,117,118, - 99, 97,108, 99, 95,109, 97,112,100,105,114, 0,117,118, 99, 97,108, 99, 95,109, 97,112, 97,108,105,103,110, 0,117,118, 99, 97, -108, 99, 95,102,108, 97,103, 0,117,118, 95,102,108, 97,103, 0,117,118, 95,115,101,108,101, 99,116,109,111,100,101, 0,117,118, - 95,112, 97,100, 91, 50, 93, 0, 97,117,116,111,105,107, 95, 99,104, 97,105,110,108,101,110, 0,105,109, 97,112, 97,105,110,116, - 0,112, 97,114,116,105, 99,108,101, 0,112,114,111,112,111,114,116,105,111,110, 97,108, 95,115,105,122,101, 0,115,101,108,101, - 99,116, 95,116,104,114,101,115,104, 0, 99,108,101, 97,110, 95,116,104,114,101,115,104, 0, 97,117,116,111,107,101,121, 95,109, -111,100,101, 0, 97,117,116,111,107,101,121, 95,102,108, 97,103, 0,114,101,116,111,112,111, 95,109,111,100,101, 0,114,101,116, -111,112,111, 95,112, 97,105,110,116, 95,116,111,111,108, 0,108,105,110,101, 95,100,105,118, 0,101,108,108,105,112,115,101, 95, -100,105,118, 0,114,101,116,111,112,111, 95,104,111,116,115,112,111,116, 0,109,117,108,116,105,114,101,115, 95,115,117, 98,100, -105,118, 95,116,121,112,101, 0,115,107,103,101,110, 95,114,101,115,111,108,117,116,105,111,110, 0,115,107,103,101,110, 95,116, -104,114,101,115,104,111,108,100, 95,105,110,116,101,114,110, 97,108, 0,115,107,103,101,110, 95,116,104,114,101,115,104,111,108, -100, 95,101,120,116,101,114,110, 97,108, 0,115,107,103,101,110, 95,108,101,110,103,116,104, 95,114, 97,116,105,111, 0,115,107, -103,101,110, 95,108,101,110,103,116,104, 95,108,105,109,105,116, 0,115,107,103,101,110, 95, 97,110,103,108,101, 95,108,105,109, -105,116, 0,115,107,103,101,110, 95, 99,111,114,114,101,108, 97,116,105,111,110, 95,108,105,109,105,116, 0,115,107,103,101,110, - 95,115,121,109,109,101,116,114,121, 95,108,105,109,105,116, 0,115,107,103,101,110, 95,114,101,116, 97,114,103,101,116, 95, 97, -110,103,108,101, 95,119,101,105,103,104,116, 0,115,107,103,101,110, 95,114,101,116, 97,114,103,101,116, 95,108,101,110,103,116, -104, 95,119,101,105,103,104,116, 0,115,107,103,101,110, 95,114,101,116, 97,114,103,101,116, 95,100,105,115,116, 97,110, 99,101, - 95,119,101,105,103,104,116, 0,115,107,103,101,110, 95,111,112,116,105,111,110,115, 0,115,107,103,101,110, 95,112,111,115,116, -112,114,111, 0,115,107,103,101,110, 95,112,111,115,116,112,114,111, 95,112, 97,115,115,101,115, 0,115,107,103,101,110, 95,115, -117, 98,100,105,118,105,115,105,111,110,115, 91, 51, 93, 0,115,107,103,101,110, 95,109,117,108,116,105, 95,108,101,118,101,108, - 0, 42,115,107,103,101,110, 95,116,101,109,112,108, 97,116,101, 0, 98,111,110,101, 95,115,107,101,116, 99,104,105,110,103, 0, - 98,111,110,101, 95,115,107,101,116, 99,104,105,110,103, 95, 99,111,110,118,101,114,116, 0,115,107,103,101,110, 95,115,117, 98, -100,105,118,105,115,105,111,110, 95,110,117,109, 98,101,114, 0,115,107,103,101,110, 95,114,101,116, 97,114,103,101,116, 95,111, -112,116,105,111,110,115, 0,115,107,103,101,110, 95,114,101,116, 97,114,103,101,116, 95,114,111,108,108, 0,115,107,103,101,110, - 95,115,105,100,101, 95,115,116,114,105,110,103, 91, 56, 93, 0,115,107,103,101,110, 95,110,117,109, 95,115,116,114,105,110,103, - 91, 56, 93, 0,101,100,103,101, 95,109,111,100,101, 0,115,110, 97,112, 95,109,111,100,101, 0,115,110, 97,112, 95,102,108, 97, -103, 0,115,110, 97,112, 95,116, 97,114,103,101,116, 0,112,114,111,112,111,114,116,105,111,110, 97,108, 0,112,114,111,112, 95, -109,111,100,101, 0, 97,117,116,111, 95,110,111,114,109, 97,108,105,122,101, 0,105,110,116,112, 97,100, 0,116,111,116,111, 98, -106, 0,116,111,116,108, 97,109,112, 0,116,111,116,111, 98,106,115,101,108, 0,116,111,116, 99,117,114,118,101, 0,116,111,116, -109,101,115,104, 0,116,111,116, 97,114,109, 97,116,117,114,101, 0,115, 99, 97,108,101, 95,108,101,110,103,116,104, 0,115,121, -115,116,101,109, 0,103,114, 97,118,105,116,121, 91, 51, 93, 0, 42, 99, 97,109,101,114, 97, 0, 42,119,111,114,108,100, 0, 42, -115,101,116, 0, 98, 97,115,101, 0, 42, 98, 97,115, 97, 99,116, 0, 42,111, 98,101,100,105,116, 0, 99,117,114,115,111,114, 91, - 51, 93, 0,116,119, 99,101,110,116, 91, 51, 93, 0,116,119,109,105,110, 91, 51, 93, 0,116,119,109, 97,120, 91, 51, 93, 0, 42, -101,100, 0, 42,116,111,111,108,115,101,116,116,105,110,103,115, 0, 42,115,116, 97,116,115, 0, 97,117,100,105,111, 0,116,114, - 97,110,115,102,111,114,109, 95,115,112, 97, 99,101,115, 0,115,111,117,110,100, 95,104, 97,110,100,108,101,115, 0, 42,116,104, -101, 68, 97,103, 0,100, 97,103,105,115,118, 97,108,105,100, 0,100, 97,103,102,108, 97,103,115, 0,106,117,109,112,102,114, 97, -109,101, 0,102,114, 97,109,101, 95,115,116,101,112, 0, 97, 99,116,105,118,101, 95,107,101,121,105,110,103,115,101,116, 0,107, -101,121,105,110,103,115,101,116,115, 0,103,109, 0,117,110,105,116, 0,112,104,121,115,105, 99,115, 95,115,101,116,116,105,110, -103,115, 0, 98,108,101,110,100, 0,119,105,110,109, 97,116, 91, 52, 93, 91, 52, 93, 0,118,105,101,119,109, 97,116, 91, 52, 93, - 91, 52, 93, 0,118,105,101,119,105,110,118, 91, 52, 93, 91, 52, 93, 0,112,101,114,115,109, 97,116, 91, 52, 93, 91, 52, 93, 0, -112,101,114,115,105,110,118, 91, 52, 93, 91, 52, 93, 0,118,105,101,119,109, 97,116,111, 98, 91, 52, 93, 91, 52, 93, 0,112,101, -114,115,109, 97,116,111, 98, 91, 52, 93, 91, 52, 93, 0,116,119,109, 97,116, 91, 52, 93, 91, 52, 93, 0,118,105,101,119,113,117, - 97,116, 91, 52, 93, 0,122,102, 97, 99, 0, 99, 97,109,100,120, 0, 99, 97,109,100,121, 0,112,105,120,115,105,122,101, 0, 99, - 97,109,122,111,111,109, 0,118,105,101,119, 98,117,116, 0,114,102,108, 97,103, 0,118,105,101,119,108,111, 99,107, 0,112,101, -114,115,112, 0,118,105,101,119, 0, 99,108,105,112, 91, 54, 93, 91, 52, 93, 0, 42, 99,108,105,112, 98, 98, 0, 42,108,111, 99, - 97,108,118,100, 0, 42,114,105, 0, 42,114,101,116,111,112,111, 95,118,105,101,119, 95,100, 97,116, 97, 0, 42,100,101,112,116, -104,115, 0, 42,115,109,115, 0, 42,115,109,111,111,116,104, 95,116,105,109,101,114, 0,108,118,105,101,119,113,117, 97,116, 91, - 52, 93, 0,108,112,101,114,115,112, 0,108,118,105,101,119, 0,114,101,103,105,111,110, 98, 97,115,101, 0,115,112, 97, 99,101, -116,121,112,101, 0, 98,108,111, 99,107,115, 99, 97,108,101, 0, 98,108,111, 99,107,104, 97,110,100,108,101,114, 91, 56, 93, 0, -108, 97,121, 95,117,115,101,100, 0, 42,111, 98, 95, 99,101,110,116,114,101, 0, 42, 98,103,112,105, 99, 0,111, 98, 95, 99,101, -110,116,114,101, 95, 98,111,110,101, 91, 51, 50, 93, 0,108, 97,121, 97, 99,116, 0,100,114, 97,119,116,121,112,101, 0,115, 99, -101,110,101,108,111, 99,107, 0, 97,114,111,117,110,100, 0,112,105,118,111,116, 95,108, 97,115,116, 0,103,114,105,100, 0,103, -114,105,100,118,105,101,119, 0,112, 97,100,102, 0,110,101, 97,114, 0,102, 97,114, 0,103,114,105,100,108,105,110,101,115, 0, -103,114,105,100,102,108, 97,103, 0,103,114,105,100,115,117, 98,100,105,118, 0,109,111,100,101,115,101,108,101, 99,116, 0,107, -101,121,102,108, 97,103,115, 0,116,119,116,121,112,101, 0,116,119,109,111,100,101, 0,116,119,102,108, 97,103, 0,116,119,100, -114, 97,119,102,108, 97,103, 0, 99,117,115,116,111,109,100, 97,116, 97, 95,109, 97,115,107, 0, 97,102,116,101,114,100,114, 97, -119, 0,122, 98,117,102, 0,120,114, 97,121, 0,110,100,111,102,109,111,100,101, 0,110,100,111,102,102,105,108,116,101,114, 0, - 42,112,114,111,112,101,114,116,105,101,115, 95,115,116,111,114, 97,103,101, 0,118,101,114,116, 0,104,111,114, 0,109, 97,115, -107, 0,109,105,110, 91, 50, 93, 0,109, 97,120, 91, 50, 93, 0,109,105,110,122,111,111,109, 0,109, 97,120,122,111,111,109, 0, -115, 99,114,111,108,108, 0,115, 99,114,111,108,108, 95,117,105, 0,107,101,101,112,116,111,116, 0,107,101,101,112,122,111,111, -109, 0,107,101,101,112,111,102,115, 0, 97,108,105,103,110, 0,119,105,110,120, 0,119,105,110,121, 0,111,108,100,119,105,110, -120, 0,111,108,100,119,105,110,121, 0, 99,117,114,115,111,114, 91, 50, 93, 0, 42,116, 97, 98, 95,111,102,102,115,101,116, 0, -116, 97, 98, 95,110,117,109, 0,116, 97, 98, 95, 99,117,114, 0, 42,115, 99,114,101,101,110, 0,118, 50,100, 0, 42, 97,100,115, - 0,103,104,111,115,116, 67,117,114,118,101,115, 0, 97,117,116,111,115,110, 97,112, 0, 99,117,114,115,111,114, 86, 97,108, 0, -109, 97,105,110, 98, 0,109, 97,105,110, 98,111, 0,109, 97,105,110, 98,117,115,101,114, 0,114,101, 95, 97,108,105,103,110, 0, -112,114,101,118,105,101,119, 0,112, 97,116,104,102,108, 97,103, 0,100, 97,116, 97,105, 99,111,110, 0, 42,112,105,110,105,100, - 0,114,101,110,100,101,114, 95,115,105,122,101, 0, 99,104, 97,110,115,104,111,119,110, 0,122,101, 98,114, 97, 0,122,111,111, -109, 0,116,105,116,108,101, 91, 50, 52, 93, 0,100,105,114, 91, 50, 52, 48, 93, 0,102,105,108,101, 91, 56, 48, 93, 0,114,101, -110, 97,109,101,102,105,108,101, 91, 56, 48, 93, 0,115,111,114,116, 0,100,105,115,112,108, 97,121, 0, 97, 99,116,105,118,101, - 95, 98,111,111,107,109, 97,114,107, 0, 97, 99,116,105,118,101, 95,102,105,108,101, 0,115,101,108,115,116, 97,116,101, 0,102, - 95,102,112, 0,109,101,110,117, 0,102,112, 95,115,116,114, 91, 56, 93, 0, 42,112,117,112,109,101,110,117, 0, 42,112, 97,114, - 97,109,115, 0, 42,102,105,108,101,115, 0, 42,102,111,108,100,101,114,115, 95,112,114,101,118, 0, 42,102,111,108,100,101,114, -115, 95,110,101,120,116, 0, 42,111,112, 0, 42,108,111, 97,100,105,109, 97,103,101, 95,116,105,109,101,114, 0, 42,108, 97,121, -111,117,116, 0,114,101, 99,101,110,116,110,114, 0, 98,111,111,107,109, 97,114,107,110,114, 0,115,121,115,116,101,109,110,114, - 0,116,114,101,101, 0, 42,116,114,101,101,115,116,111,114,101, 0,115,101, 97,114, 99,104, 95,115,116,114,105,110,103, 91, 51, - 50, 93, 0,115,101, 97,114, 99,104, 95,116,115,101, 0,115,101, 97,114, 99,104, 95,102,108, 97,103,115, 0,100,111, 95, 0,111, -117,116,108,105,110,101,118,105,115, 0,115,116,111,114,101,102,108, 97,103, 0, 42, 99,117,109, 97,112, 0,105,109, 97,110,114, - 0, 99,117,114,116,105,108,101, 0,105,109,116,121,112,101,110,114, 0,108,111, 99,107, 0,112,105,110, 0,100,116, 95,117,118, - 0,115,116,105, 99,107,121, 0,100,116, 95,117,118,115,116,114,101,116, 99,104, 0, 99,101,110,116,120, 0, 99,101,110,116,121, - 0, 42,116,101,120,116, 0,116,111,112, 0,118,105,101,119,108,105,110,101,115, 0,108,104,101,105,103,104,116, 0, 99,119,105, -100,116,104, 0,108,105,110,101,110,114,115, 95,116,111,116, 0,108,101,102,116, 0,115,104,111,119,108,105,110,101,110,114,115, - 0,116, 97, 98,110,117,109, 98,101,114, 0,115,104,111,119,115,121,110,116, 97,120, 0,111,118,101,114,119,114,105,116,101, 0, -108,105,118,101, 95,101,100,105,116, 0,112,105,120, 95,112,101,114, 95,108,105,110,101, 0,116,120,116,115, 99,114,111,108,108, - 0,116,120,116, 98, 97,114, 0,119,111,114,100,119,114, 97,112, 0,100,111,112,108,117,103,105,110,115, 0,102,105,110,100,115, -116,114, 91, 50, 53, 54, 93, 0,114,101,112,108, 97, 99,101,115,116,114, 91, 50, 53, 54, 93, 0, 42,112,121, 95,100,114, 97,119, - 0, 42,112,121, 95,101,118,101,110,116, 0, 42,112,121, 95, 98,117,116,116,111,110, 0, 42,112,121, 95, 98,114,111,119,115,101, -114, 99, 97,108,108, 98, 97, 99,107, 0, 42,112,121, 95,103,108,111, 98, 97,108,100,105, 99,116, 0,108, 97,115,116,115,112, 97, - 99,101, 0,115, 99,114,105,112,116,110, 97,109,101, 91, 50, 53, 54, 93, 0,115, 99,114,105,112,116, 97,114,103, 91, 50, 53, 54, - 93, 0, 42,115, 99,114,105,112,116, 0, 42, 98,117,116, 95,114,101,102,115, 0,114,101,100,114, 97,119,115, 0, 42,105,100, 0, - 97,115,112,101, 99,116, 0, 42, 99,117,114,102,111,110,116, 0,109,120, 0,109,121, 0, 42,101,100,105,116,116,114,101,101, 0, -116,114,101,101,116,121,112,101, 0,116,101,120,102,114,111,109, 0,110,117,109,116,105,108,101,115,120, 0,110,117,109,116,105, -108,101,115,121, 0,118,105,101,119,114,101, 99,116, 0, 98,111,111,107,109, 97,114,107,114,101, 99,116, 0,115, 99,114,111,108, -108,112,111,115, 0,115, 99,114,111,108,108,104,101,105,103,104,116, 0,115, 99,114,111,108,108, 97,114,101, 97, 0,114,101,116, -118, 97,108, 0,112,114,118, 95,119, 0,112,114,118, 95,104, 0, 40, 42,114,101,116,117,114,110,102,117,110, 99, 41, 40, 41, 0, - 40, 42,114,101,116,117,114,110,102,117,110, 99, 95,101,118,101,110,116, 41, 40, 41, 0, 40, 42,114,101,116,117,114,110,102,117, -110, 99, 95, 97,114,103,115, 41, 40, 41, 0, 42, 97,114,103, 49, 0, 42, 97,114,103, 50, 0, 42,109,101,110,117,112, 0, 42,105, -109,103, 0,108,101,110, 95, 97,108,108,111, 99, 0, 99,117,114,115,111,114, 0,114,112,116, 95,109, 97,115,107, 0,115, 99,114, -111,108,108, 98, 97, 99,107, 0,104,105,115,116,111,114,121, 0,112,114,111,109,112,116, 91, 56, 93, 0,102,105,108,101,110, 97, -109,101, 91, 50, 53, 54, 93, 0, 98,108,102, 95,105,100, 0,117,105,102,111,110,116, 95,105,100, 0,114, 95,116,111, 95,108, 0, -112,111,105,110,116,115, 0,107,101,114,110,105,110,103, 0,105,116, 97,108,105, 99, 0, 98,111,108,100, 0,115,104, 97,100,111, -119, 0,115,104, 97,100,120, 0,115,104, 97,100,121, 0,115,104, 97,100,111,119, 97,108,112,104, 97, 0,115,104, 97,100,111,119, - 99,111,108,111,114, 0,112, 97,110,101,108,116,105,116,108,101, 0,103,114,111,117,112,108, 97, 98,101,108, 0,119,105,100,103, -101,116,108, 97, 98,101,108, 0,119,105,100,103,101,116, 0,112, 97,110,101,108,122,111,111,109, 0,109,105,110,108, 97, 98,101, -108, 99,104, 97,114,115, 0,109,105,110,119,105,100,103,101,116, 99,104, 97,114,115, 0, 99,111,108,117,109,110,115,112, 97, 99, -101, 0,116,101,109,112,108, 97,116,101,115,112, 97, 99,101, 0, 98,111,120,115,112, 97, 99,101, 0, 98,117,116,116,111,110,115, -112, 97, 99,101,120, 0, 98,117,116,116,111,110,115,112, 97, 99,101,121, 0,112, 97,110,101,108,115,112, 97, 99,101, 0,112, 97, -110,101,108,111,117,116,101,114, 0,112, 97,100, 91, 49, 93, 0,111,117,116,108,105,110,101, 91, 52, 93, 0,105,110,110,101,114, - 91, 52, 93, 0,105,110,110,101,114, 95,115,101,108, 91, 52, 93, 0,105,116,101,109, 91, 52, 93, 0,116,101,120,116, 91, 52, 93, - 0,116,101,120,116, 95,115,101,108, 91, 52, 93, 0,115,104, 97,100,101,100, 0,115,104, 97,100,101,116,111,112, 0,115,104, 97, -100,101,100,111,119,110, 0,105,110,110,101,114, 95, 97,110,105,109, 91, 52, 93, 0,105,110,110,101,114, 95, 97,110,105,109, 95, -115,101,108, 91, 52, 93, 0,105,110,110,101,114, 95,107,101,121, 91, 52, 93, 0,105,110,110,101,114, 95,107,101,121, 95,115,101, -108, 91, 52, 93, 0,105,110,110,101,114, 95,100,114,105,118,101,110, 91, 52, 93, 0,105,110,110,101,114, 95,100,114,105,118,101, -110, 95,115,101,108, 91, 52, 93, 0,119, 99,111,108, 95,114,101,103,117,108, 97,114, 0,119, 99,111,108, 95,116,111,111,108, 0, -119, 99,111,108, 95,116,101,120,116, 0,119, 99,111,108, 95,114, 97,100,105,111, 0,119, 99,111,108, 95,111,112,116,105,111,110, - 0,119, 99,111,108, 95,116,111,103,103,108,101, 0,119, 99,111,108, 95,110,117,109, 0,119, 99,111,108, 95,110,117,109,115,108, -105,100,101,114, 0,119, 99,111,108, 95,109,101,110,117, 0,119, 99,111,108, 95,112,117,108,108,100,111,119,110, 0,119, 99,111, -108, 95,109,101,110,117, 95, 98, 97, 99,107, 0,119, 99,111,108, 95,109,101,110,117, 95,105,116,101,109, 0,119, 99,111,108, 95, - 98,111,120, 0,119, 99,111,108, 95,115, 99,114,111,108,108, 0,119, 99,111,108, 95,108,105,115,116, 95,105,116,101,109, 0,119, - 99,111,108, 95,115,116, 97,116,101, 0,105, 99,111,110,102,105,108,101, 91, 56, 48, 93, 0, 98, 97, 99,107, 91, 52, 93, 0,116, -105,116,108,101, 91, 52, 93, 0,116,101,120,116, 95,104,105, 91, 52, 93, 0,104,101, 97,100,101,114, 91, 52, 93, 0,104,101, 97, -100,101,114, 95,116,105,116,108,101, 91, 52, 93, 0,104,101, 97,100,101,114, 95,116,101,120,116, 91, 52, 93, 0,104,101, 97,100, -101,114, 95,116,101,120,116, 95,104,105, 91, 52, 93, 0, 98,117,116,116,111,110, 91, 52, 93, 0, 98,117,116,116,111,110, 95,116, -105,116,108,101, 91, 52, 93, 0, 98,117,116,116,111,110, 95,116,101,120,116, 91, 52, 93, 0, 98,117,116,116,111,110, 95,116,101, -120,116, 95,104,105, 91, 52, 93, 0,108,105,115,116, 91, 52, 93, 0,108,105,115,116, 95,116,105,116,108,101, 91, 52, 93, 0,108, -105,115,116, 95,116,101,120,116, 91, 52, 93, 0,108,105,115,116, 95,116,101,120,116, 95,104,105, 91, 52, 93, 0,112, 97,110,101, -108, 91, 52, 93, 0,112, 97,110,101,108, 95,116,105,116,108,101, 91, 52, 93, 0,112, 97,110,101,108, 95,116,101,120,116, 91, 52, - 93, 0,112, 97,110,101,108, 95,116,101,120,116, 95,104,105, 91, 52, 93, 0,115,104, 97,100,101, 49, 91, 52, 93, 0,115,104, 97, -100,101, 50, 91, 52, 93, 0,104,105,108,105,116,101, 91, 52, 93, 0,103,114,105,100, 91, 52, 93, 0,119,105,114,101, 91, 52, 93, - 0,115,101,108,101, 99,116, 91, 52, 93, 0,108, 97,109,112, 91, 52, 93, 0, 97, 99,116,105,118,101, 91, 52, 93, 0,103,114,111, -117,112, 91, 52, 93, 0,103,114,111,117,112, 95, 97, 99,116,105,118,101, 91, 52, 93, 0,116,114, 97,110,115,102,111,114,109, 91, - 52, 93, 0,118,101,114,116,101,120, 91, 52, 93, 0,118,101,114,116,101,120, 95,115,101,108,101, 99,116, 91, 52, 93, 0,101,100, -103,101, 91, 52, 93, 0,101,100,103,101, 95,115,101,108,101, 99,116, 91, 52, 93, 0,101,100,103,101, 95,115,101, 97,109, 91, 52, - 93, 0,101,100,103,101, 95,115,104, 97,114,112, 91, 52, 93, 0,101,100,103,101, 95,102, 97, 99,101,115,101,108, 91, 52, 93, 0, -102, 97, 99,101, 91, 52, 93, 0,102, 97, 99,101, 95,115,101,108,101, 99,116, 91, 52, 93, 0,102, 97, 99,101, 95,100,111,116, 91, - 52, 93, 0,110,111,114,109, 97,108, 91, 52, 93, 0, 98,111,110,101, 95,115,111,108,105,100, 91, 52, 93, 0, 98,111,110,101, 95, -112,111,115,101, 91, 52, 93, 0,115,116,114,105,112, 91, 52, 93, 0,115,116,114,105,112, 95,115,101,108,101, 99,116, 91, 52, 93, - 0, 99,102,114, 97,109,101, 91, 52, 93, 0,100,115, 95, 99,104, 97,110,110,101,108, 91, 52, 93, 0,100,115, 95,115,117, 98, 99, -104, 97,110,110,101,108, 91, 52, 93, 0,118,101,114,116,101,120, 95,115,105,122,101, 0,102, 97, 99,101,100,111,116, 95,115,105, -122,101, 0, 98,112, 97,100, 91, 50, 93, 0,115,121,110,116, 97,120,108, 91, 52, 93, 0,115,121,110,116, 97,120,110, 91, 52, 93, - 0,115,121,110,116, 97,120, 98, 91, 52, 93, 0,115,121,110,116, 97,120,118, 91, 52, 93, 0,115,121,110,116, 97,120, 99, 91, 52, - 93, 0,109,111,118,105,101, 91, 52, 93, 0,105,109, 97,103,101, 91, 52, 93, 0,115, 99,101,110,101, 91, 52, 93, 0, 97,117,100, -105,111, 91, 52, 93, 0,101,102,102,101, 99,116, 91, 52, 93, 0,112,108,117,103,105,110, 91, 52, 93, 0,116,114, 97,110,115,105, -116,105,111,110, 91, 52, 93, 0,109,101,116, 97, 91, 52, 93, 0,101,100,105,116,109,101,115,104, 95, 97, 99,116,105,118,101, 91, - 52, 93, 0,104, 97,110,100,108,101, 95,118,101,114,116,101,120, 91, 52, 93, 0,104, 97,110,100,108,101, 95,118,101,114,116,101, -120, 95,115,101,108,101, 99,116, 91, 52, 93, 0,104, 97,110,100,108,101, 95,118,101,114,116,101,120, 95,115,105,122,101, 0,104, -112, 97,100, 91, 51, 93, 0,115,111,108,105,100, 91, 52, 93, 0,116,117,105, 0,116, 98,117,116,115, 0,116,118, 51,100, 0,116, -102,105,108,101, 0,116,105,112,111, 0,116,105,110,102,111, 0,116,115,110,100, 0,116, 97, 99,116, 0,116,110,108, 97, 0,116, -115,101,113, 0,116,105,109, 97, 0,116,105,109, 97,115,101,108, 0,116,101,120,116, 0,116,111,111,112,115, 0,116,116,105,109, -101, 0,116,110,111,100,101, 0,116,108,111,103,105, 99, 0,116,117,115,101,114,112,114,101,102, 0,116, 97,114,109, 91, 50, 48, - 93, 0, 97, 99,116,105,118,101, 95,116,104,101,109,101, 95,103,114,111,117,112, 0,115,112,101, 99, 91, 52, 93, 0,100,117,112, -102,108, 97,103, 0,115, 97,118,101,116,105,109,101, 0,116,101,109,112,100,105,114, 91, 49, 54, 48, 93, 0,102,111,110,116,100, -105,114, 91, 49, 54, 48, 93, 0,114,101,110,100,101,114,100,105,114, 91, 49, 54, 48, 93, 0,116,101,120,116,117,100,105,114, 91, - 49, 54, 48, 93, 0,112,108,117,103,116,101,120,100,105,114, 91, 49, 54, 48, 93, 0,112,108,117,103,115,101,113,100,105,114, 91, - 49, 54, 48, 93, 0,112,121,116,104,111,110,100,105,114, 91, 49, 54, 48, 93, 0,115,111,117,110,100,100,105,114, 91, 49, 54, 48, - 93, 0,121,102,101,120,112,111,114,116,100,105,114, 91, 49, 54, 48, 93, 0,118,101,114,115,105,111,110,115, 0,103, 97,109,101, -102,108, 97,103,115, 0,119,104,101,101,108,108,105,110,101,115, 99,114,111,108,108, 0,117,105,102,108, 97,103, 0,108, 97,110, -103,117, 97,103,101, 0,117,115,101,114,112,114,101,102, 0,118,105,101,119,122,111,111,109, 0,109,105,120, 98,117,102,115,105, -122,101, 0, 97,117,100,105,111,100,101,118,105, 99,101, 0, 97,117,100,105,111,114, 97,116,101, 0, 97,117,100,105,111,102,111, -114,109, 97,116, 0, 97,117,100,105,111, 99,104, 97,110,110,101,108,115, 0,100,112,105, 0,101,110, 99,111,100,105,110,103, 0, -116,114, 97,110,115,111,112,116,115, 0,109,101,110,117,116,104,114,101,115,104,111,108,100, 49, 0,109,101,110,117,116,104,114, -101,115,104,111,108,100, 50, 0,116,104,101,109,101,115, 0,117,105,102,111,110,116,115, 0,117,105,115,116,121,108,101,115, 0, -107,101,121,109, 97,112,115, 0,107,101,121, 99,111,110,102,105,103,115,116,114, 91, 54, 52, 93, 0,117,110,100,111,115,116,101, -112,115, 0,117,110,100,111,109,101,109,111,114,121, 0,103,112, 95,109, 97,110,104, 97,116,116,101,110,100,105,115,116, 0,103, -112, 95,101,117, 99,108,105,100,101, 97,110,100,105,115,116, 0,103,112, 95,101,114, 97,115,101,114, 0,103,112, 95,115,101,116, -116,105,110,103,115, 0,116, 98, 95,108,101,102,116,109,111,117,115,101, 0,116, 98, 95,114,105,103,104,116,109,111,117,115,101, - 0,108,105,103,104,116, 91, 51, 93, 0,116,119, 95,104,111,116,115,112,111,116, 0,116,119, 95,102,108, 97,103, 0,116,119, 95, -104, 97,110,100,108,101,115,105,122,101, 0,116,119, 95,115,105,122,101, 0,116,101,120,116,105,109,101,111,117,116, 0,116,101, -120, 99,111,108,108,101, 99,116,114, 97,116,101, 0,119,109,100,114, 97,119,109,101,116,104,111,100, 0,119,109,112, 97,100, 0, -109,101,109, 99, 97, 99,104,101,108,105,109,105,116, 0,112,114,101,102,101,116, 99,104,102,114, 97,109,101,115, 0,102,114, 97, -109,101,115,101,114,118,101,114,112,111,114,116, 0,112, 97,100, 95,114,111,116, 95, 97,110,103,108,101, 0,111, 98, 99,101,110, -116,101,114, 95,100,105, 97, 0,114,118,105,115,105,122,101, 0,114,118,105, 98,114,105,103,104,116, 0,114,101, 99,101,110,116, - 95,102,105,108,101,115, 0,115,109,111,111,116,104, 95,118,105,101,119,116,120, 0,103,108,114,101,115,108,105,109,105,116, 0, -110,100,111,102, 95,112, 97,110, 0,110,100,111,102, 95,114,111,116, 97,116,101, 0, 99,117,114,115,115,105,122,101, 0,105,112, -111, 95,110,101,119, 0,118,101,114,115,101,109, 97,115,116,101,114, 91, 49, 54, 48, 93, 0,118,101,114,115,101,117,115,101,114, - 91, 49, 54, 48, 93, 0,103,108, 97,108,112,104, 97, 99,108,105,112, 0, 99,111, 98, 97, 95,119,101,105,103,104,116, 0,118,101, -114,116, 98, 97,115,101, 0,101,100,103,101, 98, 97,115,101, 0, 97,114,101, 97, 98, 97,115,101, 0, 42,110,101,119,115, 99,101, -110,101, 0,102,117,108,108, 0,119,105,110,105,100, 0,100,111, 95,100,114, 97,119, 0,100,111, 95,114,101,102,114,101,115,104, - 0,100,111, 95,100,114, 97,119, 95,103,101,115,116,117,114,101, 0,100,111, 95,100,114, 97,119, 95,112, 97,105,110,116, 99,117, -114,115,111,114, 0,115,119, 97,112, 0,109, 97,105,110,119,105,110, 0,115,117, 98,119,105,110, 97, 99,116,105,118,101, 0, 42, - 97,110,105,109,116,105,109,101,114, 0, 42, 99,111,110,116,101,120,116, 0,104, 97,110,100,108,101,114, 91, 56, 93, 0, 42,110, -101,119,118, 0,118,101, 99, 0, 42,118, 49, 0, 42,118, 50, 0, 42,116,121,112,101, 0,112, 97,110,101,108,110, 97,109,101, 91, - 54, 52, 93, 0,116, 97, 98,110, 97,109,101, 91, 54, 52, 93, 0,100,114, 97,119,110, 97,109,101, 91, 54, 52, 93, 0,111,102,115, -120, 0,111,102,115,121, 0,115,105,122,101,120, 0,115,105,122,101,121, 0,108, 97, 98,101,108,111,102,115, 0,114,117,110,116, -105,109,101, 95,102,108, 97,103, 0, 99,111,110,116,114,111,108, 0,115,110, 97,112, 0,115,111,114,116,111,114,100,101,114, 0, - 42,112, 97,110,101,108,116, 97, 98, 0, 42, 97, 99,116,105,118,101,100, 97,116, 97, 0,108,105,115,116, 95,115, 99,114,111,108, -108, 0,108,105,115,116, 95,115,105,122,101, 0,108,105,115,116, 95,108, 97,115,116, 95,108,101,110, 0,108,105,115,116, 95,103, -114,105,112, 95,115,105,122,101, 0,108,105,115,116, 95,115,101, 97,114, 99,104, 91, 54, 52, 93, 0, 42,118, 51, 0, 42,118, 52, - 0, 42,102,117,108,108, 0, 98,117,116,115,112, 97, 99,101,116,121,112,101, 0,104,101, 97,100,101,114,116,121,112,101, 0,115, -112, 97, 99,101,100, 97,116, 97, 0,104, 97,110,100,108,101,114,115, 0, 97, 99,116,105,111,110,122,111,110,101,115, 0,119,105, -110,114, 99,116, 0,100,114, 97,119,114, 99,116, 0,115,119,105,110,105,100, 0,114,101,103,105,111,110,116,121,112,101, 0, 97, -108,105,103,110,109,101,110,116, 0,117,105, 98,108,111, 99,107,115, 0,112, 97,110,101,108,115, 0, 42,104,101, 97,100,101,114, -115,116,114, 0, 42,114,101,103,105,111,110,100, 97,116, 97, 0,115,117, 98,118,115,116,114, 91, 52, 93, 0,115,117, 98,118,101, -114,115,105,111,110, 0,112, 97,100,115, 0,109,105,110,118,101,114,115,105,111,110, 0,109,105,110,115,117, 98,118,101,114,115, -105,111,110, 0, 42, 99,117,114,115, 99,114,101,101,110, 0, 42, 99,117,114,115, 99,101,110,101, 0,102,105,108,101,102,108, 97, -103,115, 0,103,108,111, 98, 97,108,102, 0,110, 97,109,101, 91, 56, 48, 93, 0, 42,105, 98,117,102, 0, 42,105, 98,117,102, 95, - 99,111,109,112, 0, 42,115,101, 49, 0, 42,115,101, 50, 0, 42,115,101, 51, 0,110,114, 0, 98,111,116,116,111,109, 0,114,105, -103,104,116, 0,120,111,102,115, 0,121,111,102,115, 0,108,105,102,116, 91, 51, 93, 0,103, 97,109,109, 97, 91, 51, 93, 0,103, - 97,105,110, 91, 51, 93, 0,115, 97,116,117,114, 97,116,105,111,110, 0,100,105,114, 91, 49, 54, 48, 93, 0,100,111,110,101, 0, -115,116, 97,114,116,115,116,105,108,108, 0,101,110,100,115,116,105,108,108, 0, 42,115,116,114,105,112,100, 97,116, 97, 0,111, -114,120, 0,111,114,121, 0, 42, 99,114,111,112, 0, 42,116,114, 97,110,115,102,111,114,109, 0, 42, 99,111,108,111,114, 95, 98, - 97,108, 97,110, 99,101, 0, 42,116,115,116,114,105,112,100, 97,116, 97, 0, 42,116,115,116,114,105,112,100, 97,116, 97, 95,115, -116, 97,114,116,115,116,105,108,108, 0, 42,116,115,116,114,105,112,100, 97,116, 97, 95,101,110,100,115,116,105,108,108, 0, 42, -105, 98,117,102, 95,115,116, 97,114,116,115,116,105,108,108, 0, 42,105, 98,117,102, 95,101,110,100,115,116,105,108,108, 0, 42, -105,110,115,116, 97,110, 99,101, 95,112,114,105,118, 97,116,101, 95,100, 97,116, 97, 0, 42, 42, 99,117,114,114,101,110,116, 95, -112,114,105,118, 97,116,101, 95,100, 97,116, 97, 0, 42,116,109,112, 0,115,116, 97,114,116,111,102,115, 0,101,110,100,111,102, -115, 0,109, 97, 99,104,105,110,101, 0,115,116, 97,114,116,100,105,115,112, 0,101,110,100,100,105,115,112, 0,104, 97,110,100, -115,105,122,101, 0, 97,110,105,109, 95,112,114,101,115,101,101,107, 0, 42,115,116,114,105,112, 0,102, 97, 99,102, 48, 0,102, - 97, 99,102, 49, 0, 42,115,101,113, 49, 0, 42,115,101,113, 50, 0, 42,115,101,113, 51, 0,115,101,113, 98, 97,115,101, 0, 42, -115,111,117,110,100, 0, 42,115,111,117,110,100, 95,104, 97,110,100,108,101, 0,108,101,118,101,108, 0,112, 97,110, 0,115, 99, -101,110,101,110,114, 0,115,116,114,111, 98,101, 0, 42,101,102,102,101, 99,116,100, 97,116, 97, 0, 97,110,105,109, 95,115,116, - 97,114,116,111,102,115, 0, 97,110,105,109, 95,101,110,100,111,102,115, 0, 98,108,101,110,100, 95,109,111,100,101, 0, 98,108, -101,110,100, 95,111,112, 97, 99,105,116,121, 0, 42,111,108,100, 98, 97,115,101,112, 0, 42,112, 97,114,115,101,113, 0, 42,115, -101,113, 98, 97,115,101,112, 0,109,101,116, 97,115,116, 97, 99,107, 0, 42, 97, 99,116, 95,115,101,113, 0, 97, 99,116, 95,105, -109, 97,103,101,100,105,114, 91, 50, 53, 54, 93, 0, 97, 99,116, 95,115,111,117,110,100,100,105,114, 91, 50, 53, 54, 93, 0,101, -100,103,101, 87,105,100,116,104, 0,102,111,114,119, 97,114,100, 0,119,105,112,101,116,121,112,101, 0,102, 77,105,110,105, 0, -102, 67,108, 97,109,112, 0,102, 66,111,111,115,116, 0,100, 68,105,115,116, 0,100, 81,117, 97,108,105,116,121, 0, 98, 78,111, - 67,111,109,112, 0, 83, 99, 97,108,101,120, 73,110,105, 0, 83, 99, 97,108,101,121, 73,110,105, 0, 83, 99, 97,108,101,120, 70, -105,110, 0, 83, 99, 97,108,101,121, 70,105,110, 0,120, 73,110,105, 0,120, 70,105,110, 0,121, 73,110,105, 0,121, 70,105,110, - 0,114,111,116, 73,110,105, 0,114,111,116, 70,105,110, 0,105,110,116,101,114,112,111,108, 97,116,105,111,110, 0, 42,102,114, - 97,109,101, 77, 97,112, 0,103,108,111, 98, 97,108, 83,112,101,101,100, 0,108, 97,115,116, 86, 97,108,105,100, 70,114, 97,109, -101, 0, 98,117,116,116,121,112,101, 0,117,115,101,114,106,105,116, 0,115,116, 97, 0,116,111,116,112, 97,114,116, 0,110,111, -114,109,102, 97, 99, 0,111, 98,102, 97, 99, 0,114, 97,110,100,102, 97, 99, 0,116,101,120,102, 97, 99, 0,114, 97,110,100,108, -105,102,101, 0,102,111,114, 99,101, 91, 51, 93, 0,118,101, 99,116,115,105,122,101, 0,109, 97,120,108,101,110, 0,100,101,102, -118,101, 99, 91, 51, 93, 0,109,117,108,116, 91, 52, 93, 0,108,105,102,101, 91, 52, 93, 0, 99,104,105,108,100, 91, 52, 93, 0, -109, 97,116, 91, 52, 93, 0,116,101,120,109, 97,112, 0, 99,117,114,109,117,108,116, 0,115,116, 97,116,105, 99,115,116,101,112, - 0,111,109, 97,116, 0,116,105,109,101,116,101,120, 0,115,112,101,101,100,116,101,120, 0,102,108, 97,103, 50,110,101,103, 0, -118,101,114,116,103,114,111,117,112, 95,118, 0,118,103,114,111,117,112,110, 97,109,101, 91, 51, 50, 93, 0,118,103,114,111,117, -112,110, 97,109,101, 95,118, 91, 51, 50, 93, 0, 42,107,101,121,115, 0,109,105,110,102, 97, 99, 0,117,115,101,100, 0,117,115, -101,100,101,108,101,109, 0, 42,112,111,105,110, 0,114,101,115,101,116,100,105,115,116, 0,108, 97,115,116,118, 97,108, 0, 42, -109, 97, 0,107,101,121, 0,113,117, 97,108, 0,113,117, 97,108, 50, 0,116, 97,114,103,101,116, 78, 97,109,101, 91, 51, 50, 93, - 0,116,111,103,103,108,101, 78, 97,109,101, 91, 51, 50, 93, 0,118, 97,108,117,101, 91, 51, 50, 93, 0,109, 97,120,118, 97,108, -117,101, 91, 51, 50, 93, 0,100,101,108, 97,121, 0,100,117,114, 97,116,105,111,110, 0,109, 97,116,101,114,105, 97,108, 78, 97, -109,101, 91, 51, 50, 93, 0,100, 97,109,112,116,105,109,101,114, 0,112,114,111,112,110, 97,109,101, 91, 51, 50, 93, 0,109, 97, -116,110, 97,109,101, 91, 51, 50, 93, 0, 97,120,105,115,102,108, 97,103, 0,112,111,115,101, 99,104, 97,110,110,101,108, 91, 51, - 50, 93, 0, 99,111,110,115,116,114, 97,105,110,116, 91, 51, 50, 93, 0, 42,102,114,111,109, 79, 98,106,101, 99,116, 0,115,117, - 98,106,101, 99,116, 91, 51, 50, 93, 0, 98,111,100,121, 91, 51, 50, 93, 0,111,116,121,112,101, 0,112,117,108,115,101, 0,102, -114,101,113, 0,116,111,116,108,105,110,107,115, 0, 42, 42,108,105,110,107,115, 0,116, 97,112, 0,106,111,121,105,110,100,101, -120, 0, 97,120,105,115, 95,115,105,110,103,108,101, 0, 97,120,105,115,102, 0, 98,117,116,116,111,110, 0,104, 97,116, 0,104, - 97,116,102, 0,112,114,101, 99,105,115,105,111,110, 0,115,116,114, 91, 49, 50, 56, 93, 0,109,111,100,117,108,101, 91, 54, 52, - 93, 0, 42,109,121,110,101,119, 0,105,110,112,117,116,115, 0,116,111,116,115,108,105,110,107,115, 0, 42, 42,115,108,105,110, -107,115, 0,118, 97,108,111, 0,115,116, 97,116,101, 95,109, 97,115,107, 0, 42, 97, 99,116, 0,102,114, 97,109,101, 80,114,111, -112, 91, 51, 50, 93, 0, 98,108,101,110,100,105,110, 0,112,114,105,111,114,105,116,121, 0,101,110,100, 95,114,101,115,101,116, - 0,115,116,114,105,100,101, 97,120,105,115, 0,115,116,114,105,100,101,108,101,110,103,116,104, 0,115,110,100,110,114, 0,112, - 97,100, 49, 91, 50, 93, 0,112,105,116, 99,104, 0,115,111,117,110,100, 51, 68, 0,109, 97,107,101, 99,111,112,121, 0, 99,111, -112,121,109, 97,100,101, 0,112, 97,100, 50, 91, 49, 93, 0, 42,109,101, 0,108,105,110, 86,101,108,111, 99,105,116,121, 91, 51, - 93, 0, 97,110,103, 86,101,108,111, 99,105,116,121, 91, 51, 93, 0,108,111, 99, 97,108,102,108, 97,103, 0,100,121,110, 95,111, -112,101,114, 97,116,105,111,110, 0,102,111,114, 99,101,108,111, 99, 91, 51, 93, 0,102,111,114, 99,101,114,111,116, 91, 51, 93, - 0,108,105,110,101, 97,114,118,101,108,111, 99,105,116,121, 91, 51, 93, 0, 97,110,103,117,108, 97,114,118,101,108,111, 99,105, -116,121, 91, 51, 93, 0, 42,114,101,102,101,114,101,110, 99,101, 0, 98,117,116,115,116, 97, 0, 98,117,116,101,110,100, 0,109, -105,110, 0,109, 97,120, 0,118,105,115,105,102, 97, 99, 0,114,111,116,100, 97,109,112, 0,109,105,110,108,111, 99, 91, 51, 93, - 0,109, 97,120,108,111, 99, 91, 51, 93, 0,109,105,110,114,111,116, 91, 51, 93, 0,109, 97,120,114,111,116, 91, 51, 93, 0,109, - 97,116,112,114,111,112, 91, 51, 50, 93, 0,100,105,115,116,114,105, 98,117,116,105,111,110, 0,105,110,116, 95, 97,114,103, 95, - 49, 0,105,110,116, 95, 97,114,103, 95, 50, 0,102,108,111, 97,116, 95, 97,114,103, 95, 49, 0,102,108,111, 97,116, 95, 97,114, -103, 95, 50, 0,116,111, 80,114,111,112, 78, 97,109,101, 91, 51, 50, 93, 0, 42,116,111, 79, 98,106,101, 99,116, 0, 98,111,100, -121, 84,121,112,101, 0,102,105,108,101,110, 97,109,101, 91, 54, 52, 93, 0,108,111, 97,100, 97,110,105,110, 97,109,101, 91, 54, - 52, 93, 0,105,110,116, 95, 97,114,103, 0,102,108,111, 97,116, 95, 97,114,103, 0, 42,115,117, 98,116, 97,114,103,101,116, 0, -103,111, 0, 97, 99, 99,101,108,108,101,114, 97,116,105,111,110, 0,109, 97,120,115,112,101,101,100, 0,109, 97,120,114,111,116, -115,112,101,101,100, 0,109, 97,120,116,105,108,116,115,112,101,101,100, 0,116,105,108,116,100, 97,109,112, 0,115,112,101,101, -100,100, 97,109,112, 0, 42,115,111,117,114, 99,101, 0,102,114, 97,109,101,115,107,105,112, 0,109,117,116,101, 0, 99,104, 97, -110,103,101,100, 0,109,105,110, 95,103, 97,105,110, 0,109, 97,120, 95,103, 97,105,110, 0,114,101,102,101,114,101,110, 99,101, - 95,100,105,115,116, 97,110, 99,101, 0,109, 97,120, 95,100,105,115,116, 97,110, 99,101, 0,114,111,108,108,111,102,102, 95,102, - 97, 99,116,111,114, 0, 99,111,110,101, 95,105,110,110,101,114, 95, 97,110,103,108,101, 0, 99,111,110,101, 95,111,117,116,101, -114, 95, 97,110,103,108,101, 0, 99,111,110,101, 95,111,117,116,101,114, 95,103, 97,105,110, 0, 42,110,101,119,112, 97, 99,107, -101,100,102,105,108,101, 0, 97,116,116,101,110,117, 97,116,105,111,110, 0,100,105,115,116, 97,110, 99,101, 0, 42, 99, 97, 99, -104,101, 0, 42, 97,114,101, 97, 0, 42,108, 97,109,112,114,101,110, 0,103,111, 98,106,101, 99,116, 0,100,117,112,108,105, 95, -111,102,115, 91, 51, 93, 0, 42,112,114,111,112, 0, 99,104,105,108,100, 98, 97,115,101, 0,114,111,108,108, 0,104,101, 97,100, - 91, 51, 93, 0,116, 97,105,108, 91, 51, 93, 0, 98,111,110,101, 95,109, 97,116, 91, 51, 93, 91, 51, 93, 0, 97,114,109, 95,104, -101, 97,100, 91, 51, 93, 0, 97,114,109, 95,116, 97,105,108, 91, 51, 93, 0, 97,114,109, 95,109, 97,116, 91, 52, 93, 91, 52, 93, - 0,120,119,105,100,116,104, 0,122,119,105,100,116,104, 0,101, 97,115,101, 49, 0,101, 97,115,101, 50, 0,114, 97,100, 95,104, -101, 97,100, 0,114, 97,100, 95,116, 97,105,108, 0, 98,111,110,101, 98, 97,115,101, 0, 99,104, 97,105,110, 98, 97,115,101, 0, - 42,101,100, 98,111, 0, 42,115,107,101,116, 99,104, 0,108, 97,121,101,114, 95,112,114,111,116,101, 99,116,101,100, 0,103,104, -111,115,116,101,112, 0,103,104,111,115,116,115,105,122,101, 0,103,104,111,115,116,116,121,112,101, 0,112, 97,116,104,115,105, -122,101, 0,103,104,111,115,116,115,102, 0,103,104,111,115,116,101,102, 0,112, 97,116,104,115,102, 0,112, 97,116,104,101,102, - 0,112, 97,116,104, 98, 99, 0,112, 97,116,104, 97, 99, 0, 42,112,111,105,110,116,115, 0,115,116, 97,114,116, 95,102,114, 97, -109,101, 0,101,110,100, 95,102,114, 97,109,101, 0, 99,111,110,115,116,102,108, 97,103, 0,105,107,102,108, 97,103, 0,115,101, -108,101, 99,116,102,108, 97,103, 0, 97,103,114,112, 95,105,110,100,101,120, 0, 42, 98,111,110,101, 0, 42, 99,104,105,108,100, - 0,105,107,116,114,101,101, 0, 42, 98, 95, 98,111,110,101, 95,109, 97,116,115, 0, 42,100,117, 97,108, 95,113,117, 97,116, 0, - 42, 98, 95, 98,111,110,101, 95,100,117, 97,108, 95,113,117, 97,116,115, 0,101,117,108, 91, 51, 93, 0, 99,104, 97,110, 95,109, - 97,116, 91, 52, 93, 91, 52, 93, 0,112,111,115,101, 95,109, 97,116, 91, 52, 93, 91, 52, 93, 0,112,111,115,101, 95,104,101, 97, -100, 91, 51, 93, 0,112,111,115,101, 95,116, 97,105,108, 91, 51, 93, 0,108,105,109,105,116,109,105,110, 91, 51, 93, 0,108,105, -109,105,116,109, 97,120, 91, 51, 93, 0,115,116,105,102,102,110,101,115,115, 91, 51, 93, 0,105,107,115,116,114,101,116, 99,104, - 0,105,107,114,111,116,119,101,105,103,104,116, 0,105,107,108,105,110,119,101,105,103,104,116, 0, 42, 99,117,115,116,111,109, - 0, 99,104, 97,110, 98, 97,115,101, 0,112,114,111,120,121, 95,108, 97,121,101,114, 0,115,116,114,105,100,101, 95,111,102,102, -115,101,116, 91, 51, 93, 0, 99,121, 99,108,105, 99, 95,111,102,102,115,101,116, 91, 51, 93, 0, 97,103,114,111,117,112,115, 0, - 97, 99,116,105,118,101, 95,103,114,111,117,112, 0,105,107,115,111,108,118,101,114, 0, 42,105,107,100, 97,116, 97, 0, 42,105, -107,112, 97,114, 97,109, 0,110,117,109,105,116,101,114, 0,110,117,109,115,116,101,112, 0,109,105,110,115,116,101,112, 0,109, - 97,120,115,116,101,112, 0,115,111,108,118,101,114, 0,102,101,101,100, 98, 97, 99,107, 0,109, 97,120,118,101,108, 0,100, 97, -109,112,109, 97,120, 0,100, 97,109,112,101,112,115, 0, 99,104, 97,110,110,101,108,115, 0, 99,117,115,116,111,109, 67,111,108, - 0, 99,115, 0, 99,117,114,118,101,115, 0,103,114,111,117,112,115, 0, 97, 99,116,105,118,101, 95,109, 97,114,107,101,114, 0, -102,105,108,116,101,114,102,108, 97,103, 0, 97,100,115, 0, 97, 99,116,110,114, 0, 97, 99,116,119,105,100,116,104, 0,116,105, -109,101,115,108,105,100,101, 0, 42,103,114,112, 0,116,101,109,112, 0,110, 97,109,101, 91, 51, 48, 93, 0,111,119,110,115,112, - 97, 99,101, 0,116, 97,114,115,112, 97, 99,101, 0,101,110,102,111,114, 99,101, 0,104,101, 97,100,116, 97,105,108, 0,108,105, -110, 95,101,114,114,111,114, 0,114,111,116, 95,101,114,114,111,114, 0, 42,116, 97,114, 0,109, 97,116,114,105,120, 91, 52, 93, - 91, 52, 93, 0,115,112, 97, 99,101, 0,114,111,116, 79,114,100,101,114, 0,116, 97,114,110,117,109, 0,116, 97,114,103,101,116, -115, 0,105,116,101,114, 97,116,105,111,110,115, 0,114,111,111,116, 98,111,110,101, 0,109, 97,120, 95,114,111,111,116, 98,111, -110,101, 0, 42,112,111,108,101,116, 97,114, 0,112,111,108,101,115,117, 98,116, 97,114,103,101,116, 91, 51, 50, 93, 0,112,111, -108,101, 97,110,103,108,101, 0,111,114,105,101,110,116,119,101,105,103,104,116, 0,103,114, 97, 98,116, 97,114,103,101,116, 91, - 51, 93, 0,114,101,115,101,114,118,101,100, 49, 0,114,101,115,101,114,118,101,100, 50, 0,109,105,110,109, 97,120,102,108, 97, -103, 0,115,116,117, 99,107, 0, 99, 97, 99,104,101, 91, 51, 93, 0,108,111, 99,107,102,108, 97,103, 0,102,111,108,108,111,119, -102,108, 97,103, 0,118,111,108,109,111,100,101, 0,112,108, 97,110,101, 0,111,114,103,108,101,110,103,116,104, 0, 98,117,108, -103,101, 0,112,105,118, 88, 0,112,105,118, 89, 0,112,105,118, 90, 0, 97,120, 88, 0, 97,120, 89, 0, 97,120, 90, 0,109,105, -110, 76,105,109,105,116, 91, 54, 93, 0,109, 97,120, 76,105,109,105,116, 91, 54, 93, 0,101,120,116,114, 97, 70,122, 0,105,110, -118,109, 97,116, 91, 52, 93, 91, 52, 93, 0,102,114,111,109, 0,116,111, 0,109, 97,112, 91, 51, 93, 0,101,120,112,111, 0,102, -114,111,109, 95,109,105,110, 91, 51, 93, 0,102,114,111,109, 95,109, 97,120, 91, 51, 93, 0,116,111, 95,109,105,110, 91, 51, 93, - 0,116,111, 95,109, 97,120, 91, 51, 93, 0,122,109,105,110, 0,122,109, 97,120, 0,112, 97,100, 91, 57, 93, 0, 99,104, 97,110, -110,101,108, 91, 51, 50, 93, 0,110,111, 95,114,111,116, 95, 97,120,105,115, 0,115,116,114,105,100,101, 95, 97,120,105,115, 0, - 99,117,114,109,111,100, 0, 97, 99,116,115,116, 97,114,116, 0, 97, 99,116,101,110,100, 0, 97, 99,116,111,102,102,115, 0,115, -116,114,105,100,101,108,101,110, 0,115, 99, 97,108,101, 0, 98,108,101,110,100,111,117,116, 0,115,116,114,105,100,101, 99,104, - 97,110,110,101,108, 91, 51, 50, 93, 0,111,102,102,115, 95, 98,111,110,101, 91, 51, 50, 93, 0,104, 97,115,105,110,112,117,116, - 0,104, 97,115,111,117,116,112,117,116, 0,100, 97,116, 97,116,121,112,101, 0,115,111, 99,107,101,116,116,121,112,101, 0, 42, -110,101,119, 95,115,111, 99,107, 0,110,115, 0,108,105,109,105,116, 0,115,116, 97, 99,107, 95,105,110,100,101,120, 0,105,110, -116,101,114,110, 0,115,116, 97, 99,107, 95,105,110,100,101,120, 95,101,120,116, 0,108,111, 99,120, 0,108,111, 99,121, 0,111, -119,110, 95,105,110,100,101,120, 0,116,111, 95,105,110,100,101,120, 0, 42,116,111,115,111, 99,107, 0, 42,108,105,110,107, 0, - 42,110,101,119, 95,110,111,100,101, 0,117,115,101,114,110, 97,109,101, 91, 51, 50, 93, 0,108, 97,115,116,121, 0,111,117,116, -112,117,116,115, 0, 42,115,116,111,114, 97,103,101, 0,109,105,110,105,119,105,100,116,104, 0, 99,117,115,116,111,109, 49, 0, - 99,117,115,116,111,109, 50, 0, 99,117,115,116,111,109, 51, 0, 99,117,115,116,111,109, 52, 0,110,101,101,100, 95,101,120,101, - 99, 0,101,120,101, 99, 0, 42,116,104,114,101, 97,100,100, 97,116, 97, 0,116,111,116,114, 0, 98,117,116,114, 0,112,114,118, -114, 0, 42, 98,108,111, 99,107, 0, 42,116,121,112,101,105,110,102,111, 0, 42,102,114,111,109,110,111,100,101, 0, 42,116,111, -110,111,100,101, 0, 42,102,114,111,109,115,111, 99,107, 0,110,111,100,101,115, 0,108,105,110,107,115, 0, 42,115,116, 97, 99, -107, 0, 42,116,104,114,101, 97,100,115,116, 97, 99,107, 0,105,110,105,116, 0,115,116, 97, 99,107,115,105,122,101, 0, 99,117, -114, 95,105,110,100,101,120, 0, 97,108,108,116,121,112,101,115, 0, 42,111,119,110,116,121,112,101, 0, 42,115,101,108,105,110, - 0, 42,115,101,108,111,117,116, 0, 40, 42,116,105,109,101, 99,117,114,115,111,114, 41, 40, 41, 0, 40, 42,115,116, 97,116,115, - 95,100,114, 97,119, 41, 40, 41, 0, 40, 42,116,101,115,116, 95, 98,114,101, 97,107, 41, 40, 41, 0, 42,116, 98,104, 0, 42,116, - 99,104, 0, 42,115,100,104, 0, 99,121, 99,108,105, 99, 0,109,111,118,105,101, 0,115, 97,109,112,108,101,115, 0,109,105,110, -115,112,101,101,100, 0,112,101,114, 99,101,110,116,120, 0,112,101,114, 99,101,110,116,121, 0, 98,111,107,101,104, 0, 99,117, -114,118,101,100, 0,105,109, 97,103,101, 95,105,110, 95,119,105,100,116,104, 0,105,109, 97,103,101, 95,105,110, 95,104,101,105, -103,104,116, 0, 99,101,110,116,101,114, 95,120, 0, 99,101,110,116,101,114, 95,121, 0,115,112,105,110, 0,105,116,101,114, 0, -119,114, 97,112, 0,115,105,103,109, 97, 95, 99,111,108,111,114, 0,115,105,103,109, 97, 95,115,112, 97, 99,101, 0,104,117,101, - 0,115, 97,116, 0,116, 49, 0,116, 50, 0,116, 51, 0,102,115,116,114,101,110,103,116,104, 0,102, 97,108,112,104, 97, 0,107, -101,121, 91, 52, 93, 0,120, 49, 0,120, 50, 0,121, 49, 0,121, 50, 0, 99,111,108,110, 97,109,101, 91, 51, 50, 93, 0, 98,107, -116,121,112,101, 0,114,111,116, 97,116,105,111,110, 0,103, 97,109, 99,111, 0,110,111, 95,122, 98,117,102, 0,102,115,116,111, -112, 0,109, 97,120, 98,108,117,114, 0, 98,116,104,114,101,115,104, 0, 42,100,105, 99,116, 0, 42,110,111,100,101, 0, 97,110, -103,108,101, 95,111,102,115, 0, 99,111,108,109,111,100, 0,109,105,120, 0,116,104,114,101,115,104,111,108,100, 0,102, 97,100, -101, 0,109, 0, 99, 0,106,105,116, 0,112,114,111,106, 0,102,105,116, 0,115,104,111,114,116,121, 0,109,105,110,116, 97, 98, -108,101, 0,109, 97,120,116, 97, 98,108,101, 0,101,120,116, 95,105,110, 91, 50, 93, 0,101,120,116, 95,111,117,116, 91, 50, 93, - 0, 42, 99,117,114,118,101, 0, 42,116, 97, 98,108,101, 0, 42,112,114,101,109,117,108,116, 97, 98,108,101, 0, 99,117,114,114, - 0, 99,108,105,112,114, 0, 99,109, 91, 52, 93, 0, 98,108, 97, 99,107, 91, 51, 93, 0,119,104,105,116,101, 91, 51, 93, 0, 98, -119,109,117,108, 91, 51, 93, 0,115, 97,109,112,108,101, 91, 51, 93, 0,111,102,102,115,101,116, 91, 50, 93, 0, 99,108,111,110, -101, 0,106,105,116,116,101,114, 0,115,109,111,111,116,104, 95,115,116,114,111,107,101, 95,114, 97,100,105,117,115, 0,115,109, -111,111,116,104, 95,115,116,114,111,107,101, 95,102, 97, 99,116,111,114, 0,114, 97,116,101, 0,114,103, 98, 91, 51, 93, 0,115, - 99,117,108,112,116, 95,116,111,111,108, 0, 97, 99,116,105,118,101, 95,114,110,100, 0, 97, 99,116,105,118,101, 95, 99,108,111, -110,101, 0, 97, 99,116,105,118,101, 95,109, 97,115,107, 0, 42,108, 97,121,101,114,115, 0,116,111,116,108, 97,121,101,114, 0, -109, 97,120,108, 97,121,101,114, 0,116,111,116,115,105,122,101, 0, 42,112,111,111,108, 0,118,101,108, 91, 51, 93, 0,114,111, -116, 91, 52, 93, 0, 97,118,101, 91, 51, 93, 0, 42,103,114,111,117,110,100, 0,119, 97,110,100,101,114, 91, 51, 93, 0,110,117, -109, 0,112, 97,114,101,110,116, 0,112, 97, 91, 52, 93, 0,119, 91, 52, 93, 0,102,117,118, 91, 52, 93, 0,102,111,102,102,115, -101,116, 0,114,116, 91, 50, 93, 0,112,114,101,118, 95,115,116, 97,116,101, 0, 42,104, 97,105,114, 0, 42, 98,111,105,100, 0, -100,105,101,116,105,109,101, 0,110,117,109, 95,100,109, 99, 97, 99,104,101, 0, 97,108,105,118,101, 0,108,111,111,112, 0,104, - 97,105,114, 95,105,110,100,101,120, 0, 42, 98,111,105,100,115, 0,100,105,115,116,114, 0,112,104,121,115,116,121,112,101, 0, - 97,118,101,109,111,100,101, 0,114,101, 97, 99,116,101,118,101,110,116, 0,100,114, 97,119, 0,100,114, 97,119, 95, 97,115, 0, -100,114, 97,119, 95,115,105,122,101, 0, 99,104,105,108,100,116,121,112,101, 0,114,101,110, 95, 97,115, 0,114,101,110, 95,115, -116,101,112, 0,104, 97,105,114, 95,115,116,101,112, 0,107,101,121,115, 95,115,116,101,112, 0, 97,100, 97,112,116, 95, 97,110, -103,108,101, 0, 97,100, 97,112,116, 95,112,105,120, 0,114,111,116,102,114,111,109, 0,105,110,116,101,103,114, 97,116,111,114, - 0, 98, 98, 95, 97,108,105,103,110, 0, 98, 98, 95,117,118, 95,115,112,108,105,116, 0, 98, 98, 95, 97,110,105,109, 0, 98, 98, - 95,115,112,108,105,116, 95,111,102,102,115,101,116, 0, 98, 98, 95,116,105,108,116, 0, 98, 98, 95,114, 97,110,100, 95,116,105, -108,116, 0, 98, 98, 95,111,102,102,115,101,116, 91, 50, 93, 0,115,105,109,112,108,105,102,121, 95,102,108, 97,103, 0,115,105, -109,112,108,105,102,121, 95,114,101,102,115,105,122,101, 0,115,105,109,112,108,105,102,121, 95,114, 97,116,101, 0,115,105,109, -112,108,105,102,121, 95,116,114, 97,110,115,105,116,105,111,110, 0,115,105,109,112,108,105,102,121, 95,118,105,101,119,112,111, -114,116, 0,116,105,109,101,116,119,101, 97,107, 0,106,105,116,102, 97, 99, 0,101,102,102, 95,104, 97,105,114, 0,103,114,105, -100, 95,114,101,115, 0,112, 97,114,116,102, 97, 99, 0,116, 97,110,102, 97, 99, 0,116, 97,110,112,104, 97,115,101, 0,114,101, - 97, 99,116,102, 97, 99, 0,111, 98, 95,118,101,108, 91, 51, 93, 0, 97,118,101,102, 97, 99, 0,112,104, 97,115,101,102, 97, 99, - 0,114, 97,110,100,114,111,116,102, 97, 99, 0,114, 97,110,100,112,104, 97,115,101,102, 97, 99, 0,114, 97,110,100,115,105,122, -101, 0,114,101, 97, 99,116,115,104, 97,112,101, 0, 97, 99, 99, 91, 51, 93, 0,100,114, 97,103,102, 97, 99, 0, 98,114,111,119, -110,102, 97, 99, 0,100, 97,109,112,102, 97, 99, 0,114, 97,110,100,108,101,110,103,116,104, 0, 99,104,105,108,100, 95,110, 98, -114, 0,114,101,110, 95, 99,104,105,108,100, 95,110, 98,114, 0,112, 97,114,101,110,116,115, 0, 99,104,105,108,100,115,105,122, -101, 0, 99,104,105,108,100,114, 97,110,100,115,105,122,101, 0, 99,104,105,108,100,114, 97,100, 0, 99,104,105,108,100,102,108, - 97,116, 0, 99,108,117,109,112,112,111,119, 0,114,111,117,103,104, 49, 0,114,111,117,103,104, 49, 95,115,105,122,101, 0,114, -111,117,103,104, 50, 0,114,111,117,103,104, 50, 95,115,105,122,101, 0,114,111,117,103,104, 50, 95,116,104,114,101,115, 0,114, -111,117,103,104, 95,101,110,100, 0,114,111,117,103,104, 95,101,110,100, 95,115,104, 97,112,101, 0, 99,108,101,110,103,116,104, - 0, 99,108,101,110,103,116,104, 95,116,104,114,101,115, 0, 98,114, 97,110, 99,104, 95,116,104,114,101,115, 0,100,114, 97,119, - 95,108,105,110,101, 91, 50, 93, 0,112, 97,116,104, 95,115,116, 97,114,116, 0,112, 97,116,104, 95,101,110,100, 0,116,114, 97, -105,108, 95, 99,111,117,110,116, 0,107,101,121,101,100, 95,108,111,111,112,115, 0,100,117,112,108,105,119,101,105,103,104,116, -115, 0, 42,101,102,102, 95,103,114,111,117,112, 0, 42,100,117,112, 95,111, 98, 0, 42, 98, 98, 95,111, 98, 0, 42,112,100, 50, - 0, 42,112, 97,114,116, 0, 42,112, 97,114,116,105, 99,108,101,115, 0, 42, 42,112, 97,116,104, 99, 97, 99,104,101, 0, 42, 42, - 99,104,105,108,100, 99, 97, 99,104,101, 0,112, 97,116,104, 99, 97, 99,104,101, 98,117,102,115, 0, 99,104,105,108,100, 99, 97, - 99,104,101, 98,117,102,115, 0, 42, 99,108,109,100, 0, 42,104, 97,105,114, 95,105,110, 95,100,109, 0, 42,104, 97,105,114, 95, -111,117,116, 95,100,109, 0, 42,116, 97,114,103,101,116, 95,111, 98, 0, 42,108, 97,116,116,105, 99,101, 0,116,114,101,101, 95, -102,114, 97,109,101, 0,116,111,116, 99,104,105,108,100, 0,116,111,116, 99, 97, 99,104,101,100, 0,116,111,116, 99,104,105,108, -100, 99, 97, 99,104,101, 0,116, 97,114,103,101,116, 95,112,115,121,115, 0,116,111,116,107,101,121,101,100, 0, 98, 97,107,101, -115,112, 97, 99,101, 0, 98, 98, 95,117,118,110, 97,109,101, 91, 51, 93, 91, 51, 50, 93, 0,118,103,114,111,117,112, 91, 49, 50, - 93, 0,118,103, 95,110,101,103, 0,114,116, 51, 0, 42,114,101,110,100,101,114,100, 97,116, 97, 0, 42,101,102,102,101, 99,116, -111,114,115, 0, 42,116,114,101,101, 0, 42,112,100,100, 0, 42,102,114, 97,110,100, 0, 67,100,105,115, 0, 67,118,105, 0, 91, - 51, 93, 0,115,116,114,117, 99,116,117,114, 97,108, 0, 98,101,110,100,105,110,103, 0,109, 97,120, 95, 98,101,110,100, 0,109, - 97,120, 95,115,116,114,117, 99,116, 0,109, 97,120, 95,115,104,101, 97,114, 0, 97,118,103, 95,115,112,114,105,110,103, 95,108, -101,110, 0,116,105,109,101,115, 99, 97,108,101, 0,101,102,102, 95,102,111,114, 99,101, 95,115, 99, 97,108,101, 0,101,102,102, - 95,119,105,110,100, 95,115, 99, 97,108,101, 0,115,105,109, 95,116,105,109,101, 95,111,108,100, 0,118,101,108,111, 99,105,116, -121, 95,115,109,111,111,116,104, 0,115,116,101,112,115, 80,101,114, 70,114, 97,109,101, 0,112,114,101,114,111,108,108, 0,109, - 97,120,115,112,114,105,110,103,108,101,110, 0,115,111,108,118,101,114, 95,116,121,112,101, 0,118,103,114,111,117,112, 95, 98, -101,110,100, 0,118,103,114,111,117,112, 95,109, 97,115,115, 0,118,103,114,111,117,112, 95,115,116,114,117, 99,116, 0,112,114, -101,115,101,116,115, 0, 42, 99,111,108,108,105,115,105,111,110, 95,108,105,115,116, 0,101,112,115,105,108,111,110, 0,115,101, -108,102, 95,102,114,105, 99,116,105,111,110, 0,115,101,108,102,101,112,115,105,108,111,110, 0,115,101,108,102, 95,108,111,111, -112, 95, 99,111,117,110,116, 0,108,111,111,112, 95, 99,111,117,110,116, 0,112,114,101,115,115,117,114,101, 0,116,104,105, 99, -107,110,101,115,115, 0,115,116,114,111,107,101,115, 0,102,114, 97,109,101,110,117,109, 0, 42, 97, 99,116,102,114, 97,109,101, - 0,103,115,116,101,112, 0,105,110,102,111, 91, 49, 50, 56, 93, 0,115, 98,117,102,102,101,114, 95,115,105,122,101, 0,115, 98, -117,102,102,101,114, 95,115,102,108, 97,103, 0, 42,115, 98,117,102,102,101,114, 0, 42,116,121,112,101,115,116,114, 0, 42,109, -101,115,115, 97,103,101, 0,108,105,115,116, 0,112,114,105,110,116,108,101,118,101,108, 0,115,116,111,114,101,108,101,118,101, -108, 0, 42,119,105,110,100,114, 97,119, 97, 98,108,101, 0, 42,119,105,110, 97, 99,116,105,118,101, 0,119,105,110,100,111,119, -115, 0,105,110,105,116,105, 97,108,105,122,101,100, 0,102,105,108,101, 95,115, 97,118,101,100, 0,111,112,101,114, 97,116,111, -114,115, 0,113,117,101,117,101, 0,114,101,112,111,114,116,115, 0,106,111, 98,115, 0,112, 97,105,110,116, 99,117,114,115,111, -114,115, 0,107,101,121, 99,111,110,102,105,103,115, 0, 42,100,101,102, 97,117,108,116, 99,111,110,102, 0,100,101,102, 97,117, -108,116, 97, 99,116,109, 97,112, 0,116,105,109,101,114,115, 0, 42, 97,117,116,111,115, 97,118,101,116,105,109,101,114, 0, 42, -103,104,111,115,116,119,105,110, 0, 42,110,101,119,115, 99,114,101,101,110, 0,115, 99,114,101,101,110,110, 97,109,101, 91, 51, - 50, 93, 0,112,111,115,120, 0,112,111,115,121, 0,119,105,110,100,111,119,115,116, 97,116,101, 0,109,111,110,105,116,111,114, - 0,108, 97,115,116, 99,117,114,115,111,114, 0, 97,100,100,109,111,117,115,101,109,111,118,101, 0, 42,101,118,101,110,116,115, -116, 97,116,101, 0, 42, 99,117,114,115,119,105,110, 0, 42,116,119,101, 97,107, 0,100,114, 97,119,109,101,116,104,111,100, 0, -100,114, 97,119,102, 97,105,108, 0, 42,100,114, 97,119,100, 97,116, 97, 0,109,111,100, 97,108,104, 97,110,100,108,101,114,115, - 0,115,117, 98,119,105,110,100,111,119,115, 0,103,101,115,116,117,114,101, 0,105,100,110, 97,109,101, 91, 54, 52, 93, 0,112, -114,111,112,118, 97,108,117,101, 0,115,104,105,102,116, 0, 99,116,114,108, 0, 97,108,116, 0,111,115,107,101,121, 0,107,101, -121,109,111,100,105,102,105,101,114, 0,109, 97,112,116,121,112,101, 0, 42,112,116,114, 0,105,116,101,109,115, 0,115,112, 97, - 99,101,105,100, 0,114,101,103,105,111,110,105,100, 0, 40, 42,112,111,108,108, 41, 40, 41, 0, 42,109,111,100, 97,108, 95,105, -116,101,109,115, 0, 98, 97,115,101,110, 97,109,101, 91, 54, 52, 93, 0, 97, 99,116,107,101,121,109, 97,112, 0, 42, 99,117,115, -116,111,109,100, 97,116, 97, 0, 42,114,101,112,111,114,116,115, 0,109, 97, 99,114,111, 0, 42,111,112,109, 0,109,118, 97,108, - 91, 50, 93, 0,112,114,101,118,120, 0,112,114,101,118,121, 0,117,110,105, 99,111,100,101, 0, 97,115, 99,105,105, 0, 42,107, -101,121,109, 97,112, 95,105,100,110, 97,109,101, 0, 99,117,115,116,111,109, 0, 99,117,115,116,111,109,100, 97,116, 97,102,114, -101,101, 0, 42,101,100, 97,116, 97, 0,105,110,102,108,117,101,110, 99,101, 0, 42, 99,111,101,102,102,105, 99,105,101,110,116, -115, 0, 97,114,114, 97,121,115,105,122,101, 0,112,111,108,121, 95,111,114,100,101,114, 0, 97,109,112,108,105,116,117,100,101, - 0,112,104, 97,115,101, 95,109,117,108,116,105,112,108,105,101,114, 0,112,104, 97,115,101, 95,111,102,102,115,101,116, 0,118, - 97,108,117,101, 95,111,102,102,115,101,116, 0,109,105,100,118, 97,108, 0, 98,101,102,111,114,101, 95,109,111,100,101, 0, 97, -102,116,101,114, 95,109,111,100,101, 0, 98,101,102,111,114,101, 95, 99,121, 99,108,101,115, 0, 97,102,116,101,114, 95, 99,121, - 99,108,101,115, 0,114,101, 99,116, 0,112,104, 97,115,101, 0,109,111,100,105,102,105, 99, 97,116,105,111,110, 0, 42,114,110, - 97, 95,112, 97,116,104, 0, 97,114,114, 97,121, 95,105,110,100,101,120, 0,105,100,116,121,112,101, 0,101,120,112,114,101,115, -115,105,111,110, 91, 50, 53, 54, 93, 0,118,101, 99, 91, 50, 93, 0, 42,102,112,116, 0, 99,111,108,111,114, 95,109,111,100,101, - 0, 99,111,108,111,114, 91, 51, 93, 0,102,114,111,109, 91, 49, 50, 56, 93, 0,116,111, 91, 49, 50, 56, 93, 0,109, 97,112,112, -105,110,103,115, 0,115,116,114,105,112,115, 0, 42,114,101,109, 97,112, 0,102, 99,117,114,118,101,115, 0,115,116,114,105,112, - 95,116,105,109,101, 0, 98,108,101,110,100,109,111,100,101, 0,101,120,116,101,110,100,109,111,100,101, 0,103,114,111,117,112, - 91, 54, 52, 93, 0,116,101,109,112,108, 97,116,101,115, 0,103,114,111,117,112,109,111,100,101, 0,112, 97,116,104,115, 0,107, -101,121,105,110,103,102,108, 97,103, 0, 97, 99,116,105,118,101, 95,112, 97,116,104, 0, 42,116,109,112, 97, 99,116, 0,110,108, - 97, 95,116,114, 97, 99,107,115, 0, 42, 97, 99,116,115,116,114,105,112, 0,100,114,105,118,101,114,115, 0,111,118,101,114,114, -105,100,101,115, 0, 97, 99,116, 95, 98,108,101,110,100,109,111,100,101, 0, 97, 99,116, 95,101,120,116,101,110,100,109,111,100, -101, 0, 97, 99,116, 95,105,110,102,108,117,101,110, 99,101, 0,114,117,108,101, 0,111,112,116,105,111,110,115, 0,102,101, 97, -114, 95,102, 97, 99,116,111,114, 0,115,105,103,110, 97,108, 95,105,100, 0,108,111,111,107, 95, 97,104,101, 97,100, 0,111,108, -111, 99, 91, 51, 93, 0,113,117,101,117,101, 95,115,105,122,101, 0,119, 97,110,100,101,114, 0,102,108,101,101, 95,100,105,115, -116, 97,110, 99,101, 0,104,101, 97,108,116,104, 0,115,116, 97,116,101, 95,105,100, 0,114,117,108,101,115, 0, 99,111,110,100, -105,116,105,111,110,115, 0, 97, 99,116,105,111,110,115, 0,114,117,108,101,115,101,116, 95,116,121,112,101, 0,114,117,108,101, - 95,102,117,122,122,105,110,101,115,115, 0,108, 97,115,116, 95,115,116, 97,116,101, 95,105,100, 0,108, 97,110,100,105,110,103, - 95,115,109,111,111,116,104,110,101,115,115, 0, 98, 97,110,107,105,110,103, 0, 97,103,103,114,101,115,115,105,111,110, 0, 97, - 99, 99,117,114, 97, 99,121, 0, 97,105,114, 95,109,105,110, 95,115,112,101,101,100, 0, 97,105,114, 95,109, 97,120, 95,115,112, -101,101,100, 0, 97,105,114, 95,109, 97,120, 95, 97, 99, 99, 0, 97,105,114, 95,109, 97,120, 95, 97,118,101, 0, 97,105,114, 95, -112,101,114,115,111,110, 97,108, 95,115,112, 97, 99,101, 0,108, 97,110,100, 95,106,117,109,112, 95,115,112,101,101,100, 0,108, - 97,110,100, 95,109, 97,120, 95,115,112,101,101,100, 0,108, 97,110,100, 95,109, 97,120, 95, 97, 99, 99, 0,108, 97,110,100, 95, -109, 97,120, 95, 97,118,101, 0,108, 97,110,100, 95,112,101,114,115,111,110, 97,108, 95,115,112, 97, 99,101, 0,108, 97,110,100, - 95,115,116,105, 99,107, 95,102,111,114, 99,101, 0,115,116, 97,116,101,115, 0, 42,115,109,100, 0, 42,102,108,117,105,100, 0, - 42,102,108,117,105,100, 95,103,114,111,117,112, 0, 42, 99,111,108,108, 95,103,114,111,117,112, 0, 42,119,116, 0, 42,116,101, -120, 95,119,116, 0, 42,116,101,120, 95,115,104, 97,100,111,119, 0, 42,115,104, 97,100,111,119, 0,112, 48, 91, 51, 93, 0,112, - 49, 91, 51, 93, 0,100,120, 0,111,109,101,103, 97, 0,116,101,109,112, 65,109, 98, 0, 98,101,116, 97, 0,114,101,115, 91, 51, - 93, 0, 97,109,112,108,105,102,121, 0,109, 97,120,114,101,115, 0,118,105,101,119,115,101,116,116,105,110,103,115, 0,110,111, -105,115,101, 0,100,105,115,115, 95,112,101,114, 99,101,110,116, 0,100,105,115,115, 95,115,112,101,101,100, 0,114,101,115, 95, -119,116, 91, 51, 93, 0,100,120, 95,119,116, 0,118, 51,100,110,117,109, 0, 42,112,111,105,110,116, 95, 99, 97, 99,104,101, 91, - 50, 93, 0,112,116, 99, 97, 99,104,101,115, 91, 50, 93, 0,118,101,108,111, 99,105,116,121, 91, 51, 93, 0,118,103,114,112, 95, -104,101, 97,116, 95,115, 99, 97,108,101, 91, 50, 93, 0,118,103,114,111,117,112, 95,102,108,111,119, 0,118,103,114,111,117,112, - 95,100,101,110,115,105,116,121, 0,118,103,114,111,117,112, 95,104,101, 97,116, 0, 42,112,111,105,110,116,115, 95,111,108,100, - 0, 42,118,101,108, 0,109, 97,116, 95,111,108,100, 91, 52, 93, 91, 52, 93, 0,110,117,109,112,111,105,110,116,115, 0, 0, 0, - 84, 89, 80, 69,195, 1, 0, 0, 99,104, 97,114, 0,117, 99,104, 97,114, 0,115,104,111,114,116, 0,117,115,104,111,114,116, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 78, 65, 49, 8,228, 0, 0,224,115,146, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 83, 68, 78, 65, 78, 65, 77, 69, 39, 11, 0, 0, 42,110,101,120,116, 0, 42,112,114,101,118, 0, 42,100, 97,116, 97, 0, 42,102, +105,114,115,116, 0, 42,108, 97,115,116, 0,120, 0,121, 0,122, 0,119, 0,120,109,105,110, 0,120,109, 97,120, 0,121,109,105, +110, 0,121,109, 97,120, 0, 42,112,111,105,110,116,101,114, 0,103,114,111,117,112, 0,118, 97,108, 0,118, 97,108, 50, 0,116, +121,112,101, 0,115,117, 98,116,121,112,101, 0,102,108, 97,103, 0,110, 97,109,101, 91, 51, 50, 93, 0,115, 97,118,101,100, 0, +100, 97,116, 97, 0,108,101,110, 0,116,111,116, 97,108,108,101,110, 0, 42,110,101,119,105,100, 0, 42,108,105, 98, 0,110, 97, +109,101, 91, 50, 52, 93, 0,117,115, 0,105, 99,111,110, 95,105,100, 0, 42,112,114,111,112,101,114,116,105,101,115, 0,105,100, + 0, 42,105,100, 98,108,111, 99,107, 0, 42,102,105,108,101,100, 97,116, 97, 0,110, 97,109,101, 91, 50, 52, 48, 93, 0,102,105, +108,101,110, 97,109,101, 91, 50, 52, 48, 93, 0,116,111,116, 0,112, 97,100, 0, 42,112, 97,114,101,110,116, 0,119, 91, 50, 93, + 0,104, 91, 50, 93, 0, 99,104, 97,110,103,101,100, 91, 50, 93, 0,112, 97,100, 48, 0,112, 97,100, 49, 0, 42,114,101, 99,116, + 91, 50, 93, 0, 42,111, 98, 0, 98,108,111, 99,107,116,121,112,101, 0, 97,100,114, 99,111,100,101, 0,110, 97,109,101, 91, 49, + 50, 56, 93, 0, 42, 98,112, 0, 42, 98,101,122,116, 0,109, 97,120,114, 99,116, 0,116,111,116,114, 99,116, 0,118, 97,114,116, +121,112,101, 0,116,111,116,118,101,114,116, 0,105,112,111, 0,101,120,116,114, 97,112, 0,114,116, 0, 98,105,116,109, 97,115, +107, 0,115,108,105,100,101, 95,109,105,110, 0,115,108,105,100,101, 95,109, 97,120, 0, 99,117,114,118, 97,108, 0, 42,100,114, +105,118,101,114, 0, 99,117,114,118,101, 0, 99,117,114, 0,115,104,111,119,107,101,121, 0,109,117,116,101,105,112,111, 0,112, +111,115, 0,114,101,108, 97,116,105,118,101, 0,116,111,116,101,108,101,109, 0,112, 97,100, 50, 0, 42,119,101,105,103,104,116, +115, 0,118,103,114,111,117,112, 91, 51, 50, 93, 0,115,108,105,100,101,114,109,105,110, 0,115,108,105,100,101,114,109, 97,120, + 0, 42, 97,100,116, 0, 42,114,101,102,107,101,121, 0,101,108,101,109,115,116,114, 91, 51, 50, 93, 0,101,108,101,109,115,105, +122,101, 0, 98,108,111, 99,107, 0, 42,105,112,111, 0, 42,102,114,111,109, 0,116,111,116,107,101,121, 0,115,108,117,114,112, +104, 0, 42,108,105,110,101, 0, 42,102,111,114,109, 97,116, 0, 98,108,101,110, 0,108,105,110,101,110,111, 0,115,116, 97,114, +116, 0,101,110,100, 0,102,108, 97,103,115, 0, 99,111,108,111,114, 91, 52, 93, 0,112, 97,100, 91, 52, 93, 0, 42,110, 97,109, +101, 0,110,108,105,110,101,115, 0,108,105,110,101,115, 0, 42, 99,117,114,108, 0, 42,115,101,108,108, 0, 99,117,114, 99, 0, +115,101,108, 99, 0,109, 97,114,107,101,114,115, 0, 42,117,110,100,111, 95, 98,117,102, 0,117,110,100,111, 95,112,111,115, 0, +117,110,100,111, 95,108,101,110, 0, 42, 99,111,109,112,105,108,101,100, 0,109,116,105,109,101, 0,115,105,122,101, 0,115,101, +101,107, 0,112, 97,115,115,101,112, 97,114,116, 97,108,112,104, 97, 0, 97,110,103,108,101, 0, 99,108,105,112,115,116, 97, 0, + 99,108,105,112,101,110,100, 0,108,101,110,115, 0,111,114,116,104,111, 95,115, 99, 97,108,101, 0,100,114, 97,119,115,105,122, +101, 0,115,104,105,102,116,120, 0,115,104,105,102,116,121, 0, 89, 70, 95,100,111,102,100,105,115,116, 0, 89, 70, 95, 97,112, +101,114,116,117,114,101, 0, 89, 70, 95, 98,107,104,116,121,112,101, 0, 89, 70, 95, 98,107,104, 98,105, 97,115, 0, 89, 70, 95, + 98,107,104,114,111,116, 0, 42,100,111,102, 95,111, 98, 0,102,114, 97,109,101,110,114, 0,102,114, 97,109,101,115, 0,111,102, +102,115,101,116, 0,115,102,114, 97, 0,102,105,101, 95,105,109, 97, 0, 99,121, 99,108, 0,111,107, 0,109,117,108,116,105, 95, +105,110,100,101,120, 0,108, 97,121,101,114, 0,112, 97,115,115, 0,109,101,110,117,110,114, 0, 42,115, 99,101,110,101, 0,105, + 98,117,102,115, 0, 42,103,112,117,116,101,120,116,117,114,101, 0, 42, 97,110,105,109, 0, 42,114,114, 0,115,111,117,114, 99, +101, 0,108, 97,115,116,102,114, 97,109,101, 0,116,112, 97,103,101,102,108, 97,103, 0,116,111,116, 98,105,110,100, 0,120,114, +101,112, 0,121,114,101,112, 0,116,119,115,116, 97, 0,116,119,101,110,100, 0, 98,105,110,100, 99,111,100,101, 0, 42,114,101, +112, 98,105,110,100, 0, 42,112, 97, 99,107,101,100,102,105,108,101, 0, 42,112,114,101,118,105,101,119, 0, 42,114,101,110,100, +101,114, 95,116,101,120,116, 0,108, 97,115,116,117,112,100, 97,116,101, 0,108, 97,115,116,117,115,101,100, 0, 97,110,105,109, +115,112,101,101,100, 0,103,101,110, 95,120, 0,103,101,110, 95,121, 0,103,101,110, 95,116,121,112,101, 0, 97,115,112,120, 0, + 97,115,112,121, 0,116,101,120, 99,111, 0,109, 97,112,116,111, 0,109, 97,112,116,111,110,101,103, 0, 98,108,101,110,100,116, +121,112,101, 0, 42,111, 98,106,101, 99,116, 0, 42,116,101,120, 0,117,118,110, 97,109,101, 91, 51, 50, 93, 0,112,114,111,106, +120, 0,112,114,111,106,121, 0,112,114,111,106,122, 0,109, 97,112,112,105,110,103, 0,111,102,115, 91, 51, 93, 0,115,105,122, +101, 91, 51, 93, 0,114,111,116, 0,116,101,120,102,108, 97,103, 0, 99,111,108,111,114,109,111,100,101,108, 0,112,109, 97,112, +116,111, 0,112,109, 97,112,116,111,110,101,103, 0,110,111,114,109, 97,112,115,112, 97, 99,101, 0,119,104,105, 99,104, 95,111, +117,116,112,117,116, 0, 98,114,117,115,104, 95,109, 97,112, 95,109,111,100,101, 0,112, 97,100, 91, 55, 93, 0,114, 0,103, 0, + 98, 0,107, 0,100,101,102, 95,118, 97,114, 0, 99,111,108,102, 97, 99, 0,118, 97,114,102, 97, 99, 0,110,111,114,102, 97, 99, + 0,100,105,115,112,102, 97, 99, 0,119, 97,114,112,102, 97, 99, 0, 99,111,108,115,112,101, 99,102, 97, 99, 0,109,105,114,114, +102, 97, 99, 0, 97,108,112,104, 97,102, 97, 99, 0,100,105,102,102,102, 97, 99, 0,115,112,101, 99,102, 97, 99, 0,101,109,105, +116,102, 97, 99, 0,104, 97,114,100,102, 97, 99, 0,114, 97,121,109,105,114,114,102, 97, 99, 0,116,114, 97,110,115,108,102, 97, + 99, 0, 97,109, 98,102, 97, 99, 0, 99,111,108,101,109,105,116,102, 97, 99, 0, 99,111,108,114,101,102,108,102, 97, 99, 0, 99, +111,108,116,114, 97,110,115,102, 97, 99, 0,100,101,110,115,102, 97, 99, 0,115, 99, 97,116,116,101,114,102, 97, 99, 0,114,101, +102,108,102, 97, 99, 0,116,105,109,101,102, 97, 99, 0,108,101,110,103,116,104,102, 97, 99, 0, 99,108,117,109,112,102, 97, 99, + 0,107,105,110,107,102, 97, 99, 0,114,111,117,103,104,102, 97, 99, 0,112, 97,100,101,110,115,102, 97, 99, 0,108,105,102,101, +102, 97, 99, 0,115,105,122,101,102, 97, 99, 0,105,118,101,108,102, 97, 99, 0,112,118,101,108,102, 97, 99, 0,115,104, 97,100, +111,119,102, 97, 99, 0,122,101,110,117,112,102, 97, 99, 0,122,101,110,100,111,119,110,102, 97, 99, 0, 98,108,101,110,100,102, + 97, 99, 0,110, 97,109,101, 91, 49, 54, 48, 93, 0, 42,104, 97,110,100,108,101, 0, 42,112,110, 97,109,101, 0, 42,115,116,110, + 97,109,101,115, 0,115,116,121,112,101,115, 0,118, 97,114,115, 0, 42,118, 97,114,115,116,114, 0, 42,114,101,115,117,108,116, + 0, 42, 99,102,114, 97, 0,100, 97,116, 97, 91, 51, 50, 93, 0, 40, 42,100,111,105,116, 41, 40, 41, 0, 40, 42,105,110,115,116, + 97,110, 99,101, 95,105,110,105,116, 41, 40, 41, 0, 40, 42, 99, 97,108,108, 98, 97, 99,107, 41, 40, 41, 0,118,101,114,115,105, +111,110, 0, 97, 0,105,112,111,116,121,112,101, 0, 42,105,109, 97, 0, 42, 99,117, 98,101, 91, 54, 93, 0,105,109, 97,116, 91, + 52, 93, 91, 52, 93, 0,111, 98,105,109, 97,116, 91, 51, 93, 91, 51, 93, 0,115,116,121,112,101, 0,118,105,101,119,115, 99, 97, +108,101, 0,110,111,116,108, 97,121, 0, 99,117, 98,101,114,101,115, 0,100,101,112,116,104, 0,114,101, 99, 97,108, 99, 0,108, + 97,115,116,115,105,122,101, 0,102, 97,108,108,111,102,102, 95,116,121,112,101, 0,102, 97,108,108,111,102,102, 95,115,111,102, +116,110,101,115,115, 0,114, 97,100,105,117,115, 0, 99,111,108,111,114, 95,115,111,117,114, 99,101, 0,116,111,116,112,111,105, +110,116,115, 0,112,100,112, 97,100, 0,112,115,121,115, 0,112,115,121,115, 95, 99, 97, 99,104,101, 95,115,112, 97, 99,101, 0, +111, 98, 95, 99, 97, 99,104,101, 95,115,112, 97, 99,101, 0, 42,112,111,105,110,116, 95,116,114,101,101, 0, 42,112,111,105,110, +116, 95,100, 97,116, 97, 0,110,111,105,115,101, 95,115,105,122,101, 0,110,111,105,115,101, 95,100,101,112,116,104, 0,110,111, +105,115,101, 95,105,110,102,108,117,101,110, 99,101, 0,110,111,105,115,101, 95, 98, 97,115,105,115, 0,112,100,112, 97,100, 51, + 91, 51, 93, 0,110,111,105,115,101, 95,102, 97, 99, 0,115,112,101,101,100, 95,115, 99, 97,108,101, 0, 42, 99,111, 98, 97, 0, +114,101,115,111,108, 91, 51, 93, 0,105,110,116,101,114,112, 95,116,121,112,101, 0,102,105,108,101, 95,102,111,114,109, 97,116, + 0,101,120,116,101,110,100, 0,105,110,116, 95,109,117,108,116,105,112,108,105,101,114, 0,115,116,105,108,108, 95,102,114, 97, +109,101, 0,115,111,117,114, 99,101, 95,112, 97,116,104, 91, 50, 52, 48, 93, 0, 42,100, 97,116, 97,115,101,116, 0,110,111,105, +115,101,115,105,122,101, 0,116,117,114, 98,117,108, 0, 98,114,105,103,104,116, 0, 99,111,110,116,114, 97,115,116, 0,114,102, + 97, 99, 0,103,102, 97, 99, 0, 98,102, 97, 99, 0,102,105,108,116,101,114,115,105,122,101, 0,109,103, 95, 72, 0,109,103, 95, +108, 97, 99,117,110, 97,114,105,116,121, 0,109,103, 95,111, 99,116, 97,118,101,115, 0,109,103, 95,111,102,102,115,101,116, 0, +109,103, 95,103, 97,105,110, 0,100,105,115,116, 95, 97,109,111,117,110,116, 0,110,115, 95,111,117,116,115, 99, 97,108,101, 0, +118,110, 95,119, 49, 0,118,110, 95,119, 50, 0,118,110, 95,119, 51, 0,118,110, 95,119, 52, 0,118,110, 95,109,101,120,112, 0, +118,110, 95,100,105,115,116,109, 0,118,110, 95, 99,111,108,116,121,112,101, 0,110,111,105,115,101,100,101,112,116,104, 0,110, +111,105,115,101,116,121,112,101, 0,110,111,105,115,101, 98, 97,115,105,115, 0,110,111,105,115,101, 98, 97,115,105,115, 50, 0, +105,109, 97,102,108, 97,103, 0, 99,114,111,112,120,109,105,110, 0, 99,114,111,112,121,109,105,110, 0, 99,114,111,112,120,109, + 97,120, 0, 99,114,111,112,121,109, 97,120, 0,116,101,120,102,105,108,116,101,114, 0, 97,102,109, 97,120, 0,120,114,101,112, +101, 97,116, 0,121,114,101,112,101, 97,116, 0, 99,104,101, 99,107,101,114,100,105,115,116, 0,110, 97, 98,108, 97, 0,105,117, +115,101,114, 0, 42,110,111,100,101,116,114,101,101, 0, 42,112,108,117,103,105,110, 0, 42,101,110,118, 0, 42,112,100, 0, 42, +118,100, 0,117,115,101, 95,110,111,100,101,115, 0,108,111, 99, 91, 51, 93, 0,114,111,116, 91, 51, 93, 0,109, 97,116, 91, 52, + 93, 91, 52, 93, 0,109,105,110, 91, 51, 93, 0,109, 97,120, 91, 51, 93, 0,109,111,100,101, 0,116,111,116,101,120, 0,115,104, +100,119,114, 0,115,104,100,119,103, 0,115,104,100,119, 98, 0,115,104,100,119,112, 97,100, 0,101,110,101,114,103,121, 0,100, +105,115,116, 0,115,112,111,116,115,105,122,101, 0,115,112,111,116, 98,108,101,110,100, 0,104, 97,105,110,116, 0, 97,116,116, + 49, 0, 97,116,116, 50, 0, 42, 99,117,114,102, 97,108,108,111,102,102, 0,115,104, 97,100,115,112,111,116,115,105,122,101, 0, + 98,105, 97,115, 0,115,111,102,116, 0, 99,111,109,112,114,101,115,115,116,104,114,101,115,104, 0,112, 97,100, 53, 91, 51, 93, + 0, 98,117,102,115,105,122,101, 0,115, 97,109,112, 0, 98,117,102,102,101,114,115, 0,102,105,108,116,101,114,116,121,112,101, + 0, 98,117,102,102,108, 97,103, 0, 98,117,102,116,121,112,101, 0,114, 97,121, 95,115, 97,109,112, 0,114, 97,121, 95,115, 97, +109,112,121, 0,114, 97,121, 95,115, 97,109,112,122, 0,114, 97,121, 95,115, 97,109,112, 95,116,121,112,101, 0, 97,114,101, 97, + 95,115,104, 97,112,101, 0, 97,114,101, 97, 95,115,105,122,101, 0, 97,114,101, 97, 95,115,105,122,101,121, 0, 97,114,101, 97, + 95,115,105,122,101,122, 0, 97,100, 97,112,116, 95,116,104,114,101,115,104, 0,114, 97,121, 95,115, 97,109,112, 95,109,101,116, +104,111,100, 0,116,101,120, 97, 99,116, 0,115,104, 97,100,104, 97,108,111,115,116,101,112, 0,115,117,110, 95,101,102,102,101, + 99,116, 95,116,121,112,101, 0,115,107,121, 98,108,101,110,100,116,121,112,101, 0,104,111,114,105,122,111,110, 95, 98,114,105, +103,104,116,110,101,115,115, 0,115,112,114,101, 97,100, 0,115,117,110, 95, 98,114,105,103,104,116,110,101,115,115, 0,115,117, +110, 95,115,105,122,101, 0, 98, 97, 99,107,115, 99, 97,116,116,101,114,101,100, 95,108,105,103,104,116, 0,115,117,110, 95,105, +110,116,101,110,115,105,116,121, 0, 97,116,109, 95,116,117,114, 98,105,100,105,116,121, 0, 97,116,109, 95,105,110,115, 99, 97, +116,116,101,114,105,110,103, 95,102, 97, 99,116,111,114, 0, 97,116,109, 95,101,120,116,105,110, 99,116,105,111,110, 95,102, 97, + 99,116,111,114, 0, 97,116,109, 95,100,105,115,116, 97,110, 99,101, 95,102, 97, 99,116,111,114, 0,115,107,121, 98,108,101,110, +100,102, 97, 99, 0,115,107,121, 95,101,120,112,111,115,117,114,101, 0,115,107,121, 95, 99,111,108,111,114,115,112, 97, 99,101, + 0,112, 97,100, 52, 0, 89, 70, 95,110,117,109,112,104,111,116,111,110,115, 0, 89, 70, 95,110,117,109,115,101, 97,114, 99,104, + 0, 89, 70, 95,112,104,100,101,112,116,104, 0, 89, 70, 95,117,115,101,113,109, 99, 0, 89, 70, 95, 98,117,102,115,105,122,101, + 0, 89, 70, 95,112, 97,100, 0, 89, 70, 95, 99, 97,117,115,116,105, 99, 98,108,117,114, 0, 89, 70, 95,108,116,114, 97,100,105, +117,115, 0, 89, 70, 95,103,108,111,119,105,110,116, 0, 89, 70, 95,103,108,111,119,111,102,115, 0, 89, 70, 95,103,108,111,119, +116,121,112,101, 0, 89, 70, 95,112, 97,100, 50, 0, 42,109,116,101,120, 91, 49, 56, 93, 0,112,114, 95,116,101,120,116,117,114, +101, 0,112, 97,100, 91, 51, 93, 0,100,101,110,115,105,116,121, 0,101,109,105,115,115,105,111,110, 0,115, 99, 97,116,116,101, +114,105,110,103, 0,114,101,102,108,101, 99,116,105,111,110, 0,101,109,105,115,115,105,111,110, 95, 99,111,108, 91, 51, 93, 0, +116,114, 97,110,115,109,105,115,115,105,111,110, 95, 99,111,108, 91, 51, 93, 0,114,101,102,108,101, 99,116,105,111,110, 95, 99, +111,108, 91, 51, 93, 0,100,101,110,115,105,116,121, 95,115, 99, 97,108,101, 0,100,101,112,116,104, 95, 99,117,116,111,102,102, + 0, 97,115,121,109,109,101,116,114,121, 0,115,116,101,112,115,105,122,101, 95,116,121,112,101, 0,115,104, 97,100,101,102,108, + 97,103, 0,115,104, 97,100,101, 95,116,121,112,101, 0,112,114,101, 99, 97, 99,104,101, 95,114,101,115,111,108,117,116,105,111, +110, 0,115,116,101,112,115,105,122,101, 0,109,115, 95,100,105,102,102, 0,109,115, 95,105,110,116,101,110,115,105,116,121, 0, +109,115, 95,115,116,101,112,115, 0,109, 97,116,101,114,105, 97,108, 95,116,121,112,101, 0,115,112,101, 99,114, 0,115,112,101, + 99,103, 0,115,112,101, 99, 98, 0,109,105,114,114, 0,109,105,114,103, 0,109,105,114, 98, 0, 97,109, 98,114, 0, 97,109, 98, + 98, 0, 97,109, 98,103, 0, 97,109, 98, 0,101,109,105,116, 0, 97,110,103, 0,115,112,101, 99,116,114, 97, 0,114, 97,121, 95, +109,105,114,114,111,114, 0, 97,108,112,104, 97, 0,114,101,102, 0,115,112,101, 99, 0,122,111,102,102,115, 0, 97,100,100, 0, +116,114, 97,110,115,108,117, 99,101,110, 99,121, 0,118,111,108, 0,102,114,101,115,110,101,108, 95,109,105,114, 0,102,114,101, +115,110,101,108, 95,109,105,114, 95,105, 0,102,114,101,115,110,101,108, 95,116,114, 97, 0,102,114,101,115,110,101,108, 95,116, +114, 97, 95,105, 0,102,105,108,116,101,114, 0,116,120, 95,108,105,109,105,116, 0,116,120, 95,102, 97,108,108,111,102,102, 0, +114, 97,121, 95,100,101,112,116,104, 0,114, 97,121, 95,100,101,112,116,104, 95,116,114, 97, 0,104, 97,114, 0,115,101,101,100, + 49, 0,115,101,101,100, 50, 0,103,108,111,115,115, 95,109,105,114, 0,103,108,111,115,115, 95,116,114, 97, 0,115, 97,109,112, + 95,103,108,111,115,115, 95,109,105,114, 0,115, 97,109,112, 95,103,108,111,115,115, 95,116,114, 97, 0, 97,100, 97,112,116, 95, +116,104,114,101,115,104, 95,109,105,114, 0, 97,100, 97,112,116, 95,116,104,114,101,115,104, 95,116,114, 97, 0, 97,110,105,115, +111, 95,103,108,111,115,115, 95,109,105,114, 0,100,105,115,116, 95,109,105,114, 0,102, 97,100,101,116,111, 95,109,105,114, 0, +115,104, 97,100,101, 95,102,108, 97,103, 0,109,111,100,101, 95,108, 0,102,108, 97,114,101, 99, 0,115,116, 97,114, 99, 0,108, +105,110,101, 99, 0,114,105,110,103, 99, 0,104, 97,115,105,122,101, 0,102,108, 97,114,101,115,105,122,101, 0,115,117, 98,115, +105,122,101, 0,102,108, 97,114,101, 98,111,111,115,116, 0,115,116,114, 97,110,100, 95,115,116, 97, 0,115,116,114, 97,110,100, + 95,101,110,100, 0,115,116,114, 97,110,100, 95,101, 97,115,101, 0,115,116,114, 97,110,100, 95,115,117,114,102,110,111,114, 0, +115,116,114, 97,110,100, 95,109,105,110, 0,115,116,114, 97,110,100, 95,119,105,100,116,104,102, 97,100,101, 0,115,116,114, 97, +110,100, 95,117,118,110, 97,109,101, 91, 51, 50, 93, 0,115, 98,105, 97,115, 0,108, 98,105, 97,115, 0,115,104, 97,100, 95, 97, +108,112,104, 97, 0,115,101,112,116,101,120, 0,114,103, 98,115,101,108, 0,112,114, 95,116,121,112,101, 0,112,114, 95, 98, 97, + 99,107, 0,112,114, 95,108, 97,109,112, 0,109,108, 95,102,108, 97,103, 0,100,105,102,102, 95,115,104, 97,100,101,114, 0,115, +112,101, 99, 95,115,104, 97,100,101,114, 0,114,111,117,103,104,110,101,115,115, 0,114,101,102,114, 97, 99, 0,112, 97,114, 97, +109, 91, 52, 93, 0,114,109,115, 0,100, 97,114,107,110,101,115,115, 0, 42,114, 97,109,112, 95, 99,111,108, 0, 42,114, 97,109, +112, 95,115,112,101, 99, 0,114, 97,109,112,105,110, 95, 99,111,108, 0,114, 97,109,112,105,110, 95,115,112,101, 99, 0,114, 97, +109,112, 98,108,101,110,100, 95, 99,111,108, 0,114, 97,109,112, 98,108,101,110,100, 95,115,112,101, 99, 0,114, 97,109,112, 95, +115,104,111,119, 0,112, 97,100, 51, 0,114, 97,109,112,102, 97, 99, 95, 99,111,108, 0,114, 97,109,112,102, 97, 99, 95,115,112, +101, 99, 0, 42,103,114,111,117,112, 0,102,114,105, 99,116,105,111,110, 0,102,104, 0,114,101,102,108,101, 99,116, 0,102,104, +100,105,115,116, 0,120,121,102,114,105, 99,116, 0,100,121,110, 97,109,111,100,101, 0,115,115,115, 95,114, 97,100,105,117,115, + 91, 51, 93, 0,115,115,115, 95, 99,111,108, 91, 51, 93, 0,115,115,115, 95,101,114,114,111,114, 0,115,115,115, 95,115, 99, 97, +108,101, 0,115,115,115, 95,105,111,114, 0,115,115,115, 95, 99,111,108,102, 97, 99, 0,115,115,115, 95,116,101,120,102, 97, 99, + 0,115,115,115, 95,102,114,111,110,116, 0,115,115,115, 95, 98, 97, 99,107, 0,115,115,115, 95,102,108, 97,103, 0,115,115,115, + 95,112,114,101,115,101,116, 0,109, 97,112,116,111, 95,116,101,120,116,117,114,101,100, 0,103,112,117,109, 97,116,101,114,105, + 97,108, 0,110, 97,109,101, 91, 50, 53, 54, 93, 0, 42, 98, 98, 0,105, 49, 0,106, 49, 0,107, 49, 0,105, 50, 0,106, 50, 0, +107, 50, 0,115,101,108, 99,111,108, 49, 0,115,101,108, 99,111,108, 50, 0,113,117, 97,116, 91, 52, 93, 0,101,120,112,120, 0, +101,120,112,121, 0,101,120,112,122, 0,114, 97,100, 0,114, 97,100, 50, 0,115, 0, 42,109, 97,116, 0, 42,105,109, 97,116, 0, +101,108,101,109,115, 0,100,105,115,112, 0, 42,101,100,105,116,101,108,101,109,115, 0, 42, 42,109, 97,116, 0,102,108, 97,103, + 50, 0,116,111,116, 99,111,108, 0,119,105,114,101,115,105,122,101, 0,114,101,110,100,101,114,115,105,122,101, 0,116,104,114, +101,115,104, 0, 42,108, 97,115,116,101,108,101,109, 0,118,101, 99, 91, 51, 93, 91, 51, 93, 0, 97,108,102, 97, 0,119,101,105, +103,104,116, 0,104, 49, 0,104, 50, 0,102, 49, 0,102, 50, 0,102, 51, 0,104,105,100,101, 0,118,101, 99, 91, 52, 93, 0,109, + 97,116, 95,110,114, 0,112,110,116,115,117, 0,112,110,116,115,118, 0,114,101,115,111,108,117, 0,114,101,115,111,108,118, 0, +111,114,100,101,114,117, 0,111,114,100,101,114,118, 0,102,108, 97,103,117, 0,102,108, 97,103,118, 0, 42,107,110,111,116,115, +117, 0, 42,107,110,111,116,115,118, 0,116,105,108,116, 95,105,110,116,101,114,112, 0,114, 97,100,105,117,115, 95,105,110,116, +101,114,112, 0, 99,104, 97,114,105,100,120, 0,107,101,114,110, 0,104, 0,110,117,114, 98, 0, 42,101,100,105,116,110,117,114, + 98, 0, 42, 98,101,118,111, 98,106, 0, 42,116, 97,112,101,114,111, 98,106, 0, 42,116,101,120,116,111,110, 99,117,114,118,101, + 0, 42,112, 97,116,104, 0, 42,107,101,121, 0, 98,101,118, 0,100,114, 97,119,102,108, 97,103, 0,116,119,105,115,116, 95,109, +111,100,101, 0,112, 97,100, 91, 50, 93, 0,116,119,105,115,116, 95,115,109,111,111,116,104, 0,112, 97,116,104,108,101,110, 0, + 98,101,118,114,101,115,111,108, 0,119,105,100,116,104, 0,101,120,116, 49, 0,101,120,116, 50, 0,114,101,115,111,108,117, 95, +114,101,110, 0,114,101,115,111,108,118, 95,114,101,110, 0, 97, 99,116,110,117, 0, 42,108, 97,115,116,115,101,108, 98,112, 0, +115,112, 97, 99,101,109,111,100,101, 0,115,112, 97, 99,105,110,103, 0,108,105,110,101,100,105,115,116, 0,115,104,101, 97,114, + 0,102,115,105,122,101, 0,119,111,114,100,115,112, 97, 99,101, 0,117,108,112,111,115, 0,117,108,104,101,105,103,104,116, 0, +120,111,102, 0,121,111,102, 0,108,105,110,101,119,105,100,116,104, 0, 42,115,116,114, 0, 42,115,101,108, 98,111,120,101,115, + 0, 42,101,100,105,116,102,111,110,116, 0,102, 97,109,105,108,121, 91, 50, 52, 93, 0, 42,118,102,111,110,116, 0, 42,118,102, +111,110,116, 98, 0, 42,118,102,111,110,116,105, 0, 42,118,102,111,110,116, 98,105, 0,115,101,112, 99,104, 97,114, 0, 99,116, +105,109,101, 0,116,111,116, 98,111,120, 0, 97, 99,116, 98,111,120, 0, 42,116, 98, 0,115,101,108,115,116, 97,114,116, 0,115, +101,108,101,110,100, 0, 42,115,116,114,105,110,102,111, 0, 99,117,114,105,110,102,111, 0,101,102,102,101, 99,116, 0, 42,109, +102, 97, 99,101, 0, 42,109,116,102, 97, 99,101, 0, 42,116,102, 97, 99,101, 0, 42,109,118,101,114,116, 0, 42,109,101,100,103, +101, 0, 42,100,118,101,114,116, 0, 42,109, 99,111,108, 0, 42,109,115,116,105, 99,107,121, 0, 42,116,101,120, 99,111,109,101, +115,104, 0, 42,109,115,101,108,101, 99,116, 0, 42,101,100,105,116, 95,109,101,115,104, 0,118,100, 97,116, 97, 0,101,100, 97, +116, 97, 0,102,100, 97,116, 97, 0,116,111,116,101,100,103,101, 0,116,111,116,102, 97, 99,101, 0,116,111,116,115,101,108,101, + 99,116, 0, 97, 99,116, 95,102, 97, 99,101, 0,101,100,105,116,102,108, 97,103, 0, 99,117, 98,101,109, 97,112,115,105,122,101, + 0,115,109,111,111,116,104,114,101,115,104, 0,115,117, 98,100,105,118, 0,115,117, 98,100,105,118,114, 0,115,117, 98,115,117, +114,102,116,121,112,101, 0, 42,109,114, 0, 42,112,118, 0, 42,116,112, 97,103,101, 0,117,118, 91, 52, 93, 91, 50, 93, 0, 99, +111,108, 91, 52, 93, 0,116,114, 97,110,115,112, 0,116,105,108,101, 0,117,110,119,114, 97,112, 0,118, 49, 0,118, 50, 0,118, + 51, 0,118, 52, 0,101,100, 99,111,100,101, 0, 99,114,101, 97,115,101, 0, 98,119,101,105,103,104,116, 0,100,101,102, 95,110, +114, 0, 42,100,119, 0,116,111,116,119,101,105,103,104,116, 0, 99,111, 91, 51, 93, 0,110,111, 91, 51, 93, 0,117,118, 91, 50, + 93, 0, 99,111, 91, 50, 93, 0,105,110,100,101,120, 0,102, 0,105, 0,115, 91, 50, 53, 54, 93, 0,116,111,116,100,105,115,112, + 0, 40, 42,100,105,115,112,115, 41, 40, 41, 0,118, 91, 52, 93, 0,109,105,100, 0,118, 91, 50, 93, 0, 42,102, 97, 99,101,115, + 0, 42, 99,111,108,102, 97, 99,101,115, 0, 42,101,100,103,101,115, 0, 42,118,101,114,116,115, 0,108,101,118,101,108,115, 0, +108,101,118,101,108, 95, 99,111,117,110,116, 0, 99,117,114,114,101,110,116, 0,110,101,119,108,118,108, 0,101,100,103,101,108, +118,108, 0,112,105,110,108,118,108, 0,114,101,110,100,101,114,108,118,108, 0,117,115,101, 95, 99,111,108, 0, 42,101,100,103, +101, 95,102,108, 97,103,115, 0, 42,101,100,103,101, 95, 99,114,101, 97,115,101,115, 0, 42,118,101,114,116, 95,109, 97,112, 0, + 42,101,100,103,101, 95,109, 97,112, 0, 42,111,108,100, 95,102, 97, 99,101,115, 0, 42,111,108,100, 95,101,100,103,101,115, 0, + 42,101,114,114,111,114, 0,109,111,100,105,102,105,101,114, 0,115,117, 98,100,105,118, 84,121,112,101, 0,114,101,110,100,101, +114, 76,101,118,101,108,115, 0, 42,101,109, 67, 97, 99,104,101, 0, 42,109, 67, 97, 99,104,101, 0,100,101,102, 97,120,105,115, + 0,112, 97,100, 91, 54, 93, 0,108,101,110,103,116,104, 0,114, 97,110,100,111,109,105,122,101, 0,115,101,101,100, 0, 42,111, + 98, 95, 97,114,109, 0, 42,115,116, 97,114,116, 95, 99, 97,112, 0, 42,101,110,100, 95, 99, 97,112, 0, 42, 99,117,114,118,101, + 95,111, 98, 0, 42,111,102,102,115,101,116, 95,111, 98, 0,111,102,102,115,101,116, 91, 51, 93, 0,115, 99, 97,108,101, 91, 51, + 93, 0,109,101,114,103,101, 95,100,105,115,116, 0,102,105,116, 95,116,121,112,101, 0,111,102,102,115,101,116, 95,116,121,112, +101, 0, 99,111,117,110,116, 0, 97,120,105,115, 0,116,111,108,101,114, 97,110, 99,101, 0, 42,109,105,114,114,111,114, 95,111, + 98, 0,115,112,108,105,116, 95, 97,110,103,108,101, 0,118, 97,108,117,101, 0,114,101,115, 0,118, 97,108, 95,102,108, 97,103, +115, 0,108,105,109, 95,102,108, 97,103,115, 0,101, 95,102,108, 97,103,115, 0, 98,101,118,101,108, 95, 97,110,103,108,101, 0, +100,101,102,103,114,112, 95,110, 97,109,101, 91, 51, 50, 93, 0, 42,100,111,109, 97,105,110, 0, 42,102,108,111,119, 0, 42, 99, +111,108,108, 0,116,105,109,101, 0, 42,116,101,120,116,117,114,101, 0,115,116,114,101,110,103,116,104, 0,100,105,114,101, 99, +116,105,111,110, 0,109,105,100,108,101,118,101,108, 0,116,101,120,109, 97,112,112,105,110,103, 0, 42,109, 97,112, 95,111, 98, +106,101, 99,116, 0,117,118,108, 97,121,101,114, 95,110, 97,109,101, 91, 51, 50, 93, 0,117,118,108, 97,121,101,114, 95,116,109, +112, 0, 42,112,114,111,106,101, 99,116,111,114,115, 91, 49, 48, 93, 0, 42,105,109, 97,103,101, 0,110,117,109, 95,112,114,111, +106,101, 99,116,111,114,115, 0, 97,115,112,101, 99,116,120, 0, 97,115,112,101, 99,116,121, 0,112,101,114, 99,101,110,116, 0, +102, 97, 99,101, 67,111,117,110,116, 0,102, 97, 99, 0,114,101,112,101, 97,116, 0, 42,111, 98,106,101, 99,116, 99,101,110,116, +101,114, 0,115,116, 97,114,116,120, 0,115,116, 97,114,116,121, 0,104,101,105,103,104,116, 0,110, 97,114,114,111,119, 0,115, +112,101,101,100, 0,100, 97,109,112, 0,102, 97,108,108,111,102,102, 0,116,105,109,101,111,102,102,115, 0,108,105,102,101,116, +105,109,101, 0,100,101,102,111,114,109,102,108, 97,103, 0,109,117,108,116,105, 0, 42,112,114,101,118, 67,111,115, 0,115,117, + 98,116, 97,114,103,101,116, 91, 51, 50, 93, 0,112, 97,114,101,110,116,105,110,118, 91, 52, 93, 91, 52, 93, 0, 99,101,110,116, + 91, 51, 93, 0, 42,105,110,100,101,120, 97,114, 0,116,111,116,105,110,100,101,120, 0,102,111,114, 99,101, 0, 42, 99,108,111, +116,104, 79, 98,106,101, 99,116, 0, 42,115,105,109, 95,112, 97,114,109,115, 0, 42, 99,111,108,108, 95,112, 97,114,109,115, 0, + 42,112,111,105,110,116, 95, 99, 97, 99,104,101, 0,112,116, 99, 97, 99,104,101,115, 0, 42,120, 0, 42,120,110,101,119, 0, 42, +120,111,108,100, 0, 42, 99,117,114,114,101,110,116, 95,120,110,101,119, 0, 42, 99,117,114,114,101,110,116, 95,120, 0, 42, 99, +117,114,114,101,110,116, 95,118, 0, 42,109,102, 97, 99,101,115, 0,110,117,109,118,101,114,116,115, 0,110,117,109,102, 97, 99, +101,115, 0, 42, 98,118,104,116,114,101,101, 0, 42,118, 0, 42,100,109, 0, 99,102,114, 97, 0,111,112,101,114, 97,116,105,111, +110, 0,118,101,114,116,101,120, 0,116,111,116,105,110,102,108,117,101,110, 99,101, 0,103,114,105,100,115,105,122,101, 0, 42, + 98,105,110,100,119,101,105,103,104,116,115, 0, 42, 98,105,110,100, 99,111,115, 0,116,111,116, 99, 97,103,101,118,101,114,116, + 0, 42,100,121,110,103,114,105,100, 0, 42,100,121,110,105,110,102,108,117,101,110, 99,101,115, 0, 42,100,121,110,118,101,114, +116,115, 0, 42,112, 97,100, 50, 0,100,121,110,103,114,105,100,115,105,122,101, 0,100,121,110, 99,101,108,108,109,105,110, 91, + 51, 93, 0,100,121,110, 99,101,108,108,119,105,100,116,104, 0, 98,105,110,100,109, 97,116, 91, 52, 93, 91, 52, 93, 0, 40, 42, + 98,105,110,100,102,117,110, 99, 41, 40, 41, 0, 42,112,115,121,115, 0,116,111,116,100,109,118,101,114,116, 0,116,111,116,100, +109,101,100,103,101, 0,116,111,116,100,109,102, 97, 99,101, 0,112,111,115,105,116,105,111,110, 0,114, 97,110,100,111,109, 95, +112,111,115,105,116,105,111,110, 0, 42,102, 97, 99,101,112, 97, 0,118,103,114,111,117,112, 0,112,114,111,116,101, 99,116, 0, + 42,117,110,100,111, 95,118,101,114,116,115, 0,117,110,100,111, 95,118,101,114,116,115, 95,116,111,116, 0,117,110,100,111, 95, +115,105,103,110, 97,108, 0,108,118,108, 0,116,111,116,108,118,108, 0,115,105,109,112,108,101, 0, 42,102,115,115, 0, 42,116, + 97,114,103,101,116, 0, 42, 97,117,120, 84, 97,114,103,101,116, 0,118,103,114,111,117,112, 95,110, 97,109,101, 91, 51, 50, 93, + 0,107,101,101,112, 68,105,115,116, 0,115,104,114,105,110,107, 84,121,112,101, 0,115,104,114,105,110,107, 79,112,116,115, 0, +112,114,111,106, 65,120,105,115, 0,115,117, 98,115,117,114,102, 76,101,118,101,108,115, 0, 42,111,114,105,103,105,110, 0,102, + 97, 99,116,111,114, 0,108,105,109,105,116, 91, 50, 93, 0,111,114,105,103,105,110, 79,112,116,115, 0,112,110,116,115,119, 0, +111,112,110,116,115,117, 0,111,112,110,116,115,118, 0,111,112,110,116,115,119, 0,116,121,112,101,117, 0,116,121,112,101,118, + 0,116,121,112,101,119, 0,102,117, 0,102,118, 0,102,119, 0,100,117, 0,100,118, 0,100,119, 0, 42,100,101,102, 0, 42,108, + 97,116,116,105, 99,101,100, 97,116, 97, 0,108, 97,116,109, 97,116, 91, 52, 93, 91, 52, 93, 0, 42,101,100,105,116,108, 97,116, +116, 0,118,101, 99, 91, 56, 93, 91, 51, 93, 0, 42,115, 99,117,108,112,116, 0,112, 97,114,116,121,112,101, 0,112, 97,114, 49, + 0,112, 97,114, 50, 0,112, 97,114, 51, 0,112, 97,114,115,117, 98,115,116,114, 91, 51, 50, 93, 0, 42,116,114, 97, 99,107, 0, + 42,112,114,111,120,121, 0, 42,112,114,111,120,121, 95,103,114,111,117,112, 0, 42,112,114,111,120,121, 95,102,114,111,109, 0, + 42, 97, 99,116,105,111,110, 0, 42,112,111,115,101,108,105, 98, 0, 42,112,111,115,101, 0, 42,103,112,100, 0, 99,111,110,115, +116,114, 97,105,110,116, 67,104, 97,110,110,101,108,115, 0,100,101,102, 98, 97,115,101, 0,109,111,100,105,102,105,101,114,115, + 0,114,101,115,116,111,114,101, 95,109,111,100,101, 0, 42,109, 97,116, 98,105,116,115, 0, 97, 99,116, 99,111,108, 0,100,108, +111, 99, 91, 51, 93, 0,111,114,105,103, 91, 51, 93, 0,100,115,105,122,101, 91, 51, 93, 0,100,114,111,116, 91, 51, 93, 0,100, +113,117, 97,116, 91, 52, 93, 0,114,111,116, 65,120,105,115, 91, 51, 93, 0,100,114,111,116, 65,120,105,115, 91, 51, 93, 0,114, +111,116, 65,110,103,108,101, 0,100,114,111,116, 65,110,103,108,101, 0,111, 98,109, 97,116, 91, 52, 93, 91, 52, 93, 0, 99,111, +110,115,116,105,110,118, 91, 52, 93, 91, 52, 93, 0,108, 97,121, 0, 99,111,108, 98,105,116,115, 0,116,114, 97,110,115,102,108, + 97,103, 0,112,114,111,116,101, 99,116,102,108, 97,103, 0,116,114, 97, 99,107,102,108, 97,103, 0,117,112,102,108, 97,103, 0, +110,108, 97,102,108, 97,103, 0,105,112,111,102,108, 97,103, 0,105,112,111,119,105,110, 0,115, 99, 97,102,108, 97,103, 0,115, + 99, 97,118,105,115,102,108, 97,103, 0, 98,111,117,110,100,116,121,112,101, 0,100,117,112,111,110, 0,100,117,112,111,102,102, + 0,100,117,112,115,116, 97, 0,100,117,112,101,110,100, 0,115,102, 0,109, 97,115,115, 0,100, 97,109,112,105,110,103, 0,105, +110,101,114,116,105, 97, 0,102,111,114,109,102, 97, 99,116,111,114, 0,114,100, 97,109,112,105,110,103, 0,109, 97,114,103,105, +110, 0,109, 97,120, 95,118,101,108, 0,109,105,110, 95,118,101,108, 0,109, 95, 99,111,110,116, 97, 99,116, 80,114,111, 99,101, +115,115,105,110,103, 84,104,114,101,115,104,111,108,100, 0,114,111,116,109,111,100,101, 0,100,116, 0,100,116,120, 0,101,109, +112,116,121, 95,100,114, 97,119,116,121,112,101, 0,112, 97,100, 49, 91, 51, 93, 0,101,109,112,116,121, 95,100,114, 97,119,115, +105,122,101, 0,100,117,112,102, 97, 99,101,115, 99, 97, 0,112,114,111,112, 0,115,101,110,115,111,114,115, 0, 99,111,110,116, +114,111,108,108,101,114,115, 0, 97, 99,116,117, 97,116,111,114,115, 0, 98, 98,115,105,122,101, 91, 51, 93, 0, 97, 99,116,100, +101,102, 0,103, 97,109,101,102,108, 97,103, 0,103, 97,109,101,102,108, 97,103, 50, 0, 42, 98,115,111,102,116, 0,115,111,102, +116,102,108, 97,103, 0, 97,110,105,115,111,116,114,111,112,105, 99, 70,114,105, 99,116,105,111,110, 91, 51, 93, 0, 99,111,110, +115,116,114, 97,105,110,116,115, 0,110,108, 97,115,116,114,105,112,115, 0,104,111,111,107,115, 0,112, 97,114,116,105, 99,108, +101,115,121,115,116,101,109, 0, 42,115,111,102,116, 0, 42,100,117,112, 95,103,114,111,117,112, 0,102,108,117,105,100,115,105, +109, 70,108, 97,103, 0,114,101,115,116,114,105, 99,116,102,108, 97,103, 0,115,104, 97,112,101,110,114, 0,115,104, 97,112,101, +102,108, 97,103, 0,114,101, 99, 97,108, 99,111, 0, 98,111,100,121, 95,116,121,112,101, 0, 42,102,108,117,105,100,115,105,109, + 83,101,116,116,105,110,103,115, 0, 42,100,101,114,105,118,101,100, 68,101,102,111,114,109, 0, 42,100,101,114,105,118,101,100, + 70,105,110, 97,108, 0,108, 97,115,116, 68, 97,116, 97, 77, 97,115,107, 0,115,116, 97,116,101, 0,105,110,105,116, 95,115,116, + 97,116,101, 0,103,112,117,108, 97,109,112, 0,112, 99, 95,105,100,115, 0, 42,100,117,112,108,105,108,105,115,116, 0, 99,117, +114,105,110,100,101,120, 0, 97, 99,116,105,118,101, 0,111,114,105,103,108, 97,121, 0,110,111, 95,100,114, 97,119, 0, 97,110, +105,109, 97,116,101,100, 0,111,109, 97,116, 91, 52, 93, 91, 52, 93, 0,111,114, 99,111, 91, 51, 93, 0,100,101,102,108,101, 99, +116, 0,102,111,114, 99,101,102,105,101,108,100, 0,115,104, 97,112,101, 0,116,101,120, 95,109,111,100,101, 0,107,105,110,107, + 0,107,105,110,107, 95, 97,120,105,115, 0,122,100,105,114, 0,102, 95,115,116,114,101,110,103,116,104, 0,102, 95,100, 97,109, +112, 0,102, 95,102,108,111,119, 0,102, 95,115,105,122,101, 0,102, 95,112,111,119,101,114, 0,109, 97,120,100,105,115,116, 0, +109,105,110,100,105,115,116, 0,102, 95,112,111,119,101,114, 95,114, 0,109, 97,120,114, 97,100, 0,109,105,110,114, 97,100, 0, +112,100,101,102, 95,100, 97,109,112, 0,112,100,101,102, 95,114,100, 97,109,112, 0,112,100,101,102, 95,112,101,114,109, 0,112, +100,101,102, 95,102,114,105, 99,116, 0,112,100,101,102, 95,114,102,114,105, 99,116, 0, 97, 98,115,111,114,112,116,105,111,110, + 0,112,100,101,102, 95,115, 98,100, 97,109,112, 0,112,100,101,102, 95,115, 98,105,102,116, 0,112,100,101,102, 95,115, 98,111, +102,116, 0, 99,108,117,109,112, 95,102, 97, 99, 0, 99,108,117,109,112, 95,112,111,119, 0,107,105,110,107, 95,102,114,101,113, + 0,107,105,110,107, 95,115,104, 97,112,101, 0,107,105,110,107, 95, 97,109,112, 0,102,114,101,101, 95,101,110,100, 0,116,101, +120, 95,110, 97, 98,108, 97, 0, 42,114,110,103, 0,102, 95,110,111,105,115,101, 0,119,101,105,103,104,116, 91, 49, 51, 93, 0, +103,108,111, 98, 97,108, 95,103,114, 97,118,105,116,121, 0,114,116, 91, 51, 93, 0,102,114, 97,109,101, 0,116,111,116,112,111, +105,110,116, 0,100, 97,116, 97, 95,116,121,112,101,115, 0, 42,105,110,100,101,120, 95, 97,114,114, 97,121, 0, 42,100, 97,116, + 97, 91, 56, 93, 0, 42, 99,117,114, 91, 56, 93, 0,115,116,101,112, 0,115,105,109,102,114, 97,109,101, 0,115,116, 97,114,116, +102,114, 97,109,101, 0,101,110,100,102,114, 97,109,101, 0,101,100,105,116,102,114, 97,109,101, 0,108, 97,115,116, 95,101,120, + 97, 99,116, 0,110, 97,109,101, 91, 54, 52, 93, 0,112,114,101,118, 95,110, 97,109,101, 91, 54, 52, 93, 0,105,110,102,111, 91, + 54, 52, 93, 0,112, 97,116,104, 91, 50, 52, 48, 93, 0,109,101,109, 95, 99, 97, 99,104,101, 0, 42,101,100,105,116, 0, 40, 42, +102,114,101,101, 95,101,100,105,116, 41, 40, 41, 0,108,105,110, 83,116,105,102,102, 0, 97,110,103, 83,116,105,102,102, 0,118, +111,108,117,109,101, 0,118,105,116,101,114, 97,116,105,111,110,115, 0,112,105,116,101,114, 97,116,105,111,110,115, 0,100,105, +116,101,114, 97,116,105,111,110,115, 0, 99,105,116,101,114, 97,116,105,111,110,115, 0,107, 83, 82, 72, 82, 95, 67, 76, 0,107, + 83, 75, 72, 82, 95, 67, 76, 0,107, 83, 83, 72, 82, 95, 67, 76, 0,107, 83, 82, 95, 83, 80, 76, 84, 95, 67, 76, 0,107, 83, 75, + 95, 83, 80, 76, 84, 95, 67, 76, 0,107, 83, 83, 95, 83, 80, 76, 84, 95, 67, 76, 0,107, 86, 67, 70, 0,107, 68, 80, 0,107, 68, + 71, 0,107, 76, 70, 0,107, 80, 82, 0,107, 86, 67, 0,107, 68, 70, 0,107, 77, 84, 0,107, 67, 72, 82, 0,107, 75, 72, 82, 0, +107, 83, 72, 82, 0,107, 65, 72, 82, 0, 99,111,108,108,105,115,105,111,110,102,108, 97,103,115, 0,110,117,109, 99,108,117,115, +116,101,114,105,116,101,114, 97,116,105,111,110,115, 0,119,101,108,100,105,110,103, 0,116,111,116,115,112,114,105,110,103, 0, + 42, 98,112,111,105,110,116, 0, 42, 98,115,112,114,105,110,103, 0,109,115,103, 95,108,111, 99,107, 0,109,115,103, 95,118, 97, +108,117,101, 0,110,111,100,101,109, 97,115,115, 0,110, 97,109,101,100, 86, 71, 95, 77, 97,115,115, 91, 51, 50, 93, 0,103,114, + 97,118, 0,109,101,100,105, 97,102,114,105, 99,116, 0,114,107,108,105,109,105,116, 0,112,104,121,115,105, 99,115, 95,115,112, +101,101,100, 0,103,111, 97,108,115,112,114,105,110,103, 0,103,111, 97,108,102,114,105, 99,116, 0,109,105,110,103,111, 97,108, + 0,109, 97,120,103,111, 97,108, 0,100,101,102,103,111, 97,108, 0,118,101,114,116,103,114,111,117,112, 0,110, 97,109,101,100, + 86, 71, 95, 83,111,102,116,103,111, 97,108, 91, 51, 50, 93, 0,102,117,122,122,121,110,101,115,115, 0,105,110,115,112,114,105, +110,103, 0,105,110,102,114,105, 99,116, 0,110, 97,109,101,100, 86, 71, 95, 83,112,114,105,110,103, 95, 75, 91, 51, 50, 93, 0, +101,102,114, 97, 0,105,110,116,101,114,118, 97,108, 0,108,111, 99, 97,108, 0,115,111,108,118,101,114,102,108, 97,103,115, 0, + 42, 42,107,101,121,115, 0,116,111,116,112,111,105,110,116,107,101,121, 0,115,101, 99,111,110,100,115,112,114,105,110,103, 0, + 99,111,108, 98, 97,108,108, 0, 98, 97,108,108,100, 97,109,112, 0, 98, 97,108,108,115,116,105,102,102, 0,115, 98, 99, 95,109, +111,100,101, 0, 97,101,114,111,101,100,103,101, 0,109,105,110,108,111,111,112,115, 0,109, 97,120,108,111,111,112,115, 0, 99, +104,111,107,101, 0,115,111,108,118,101,114, 95, 73, 68, 0,112,108, 97,115,116,105, 99, 0,115,112,114,105,110,103,112,114,101, +108,111, 97,100, 0, 42,115, 99,114, 97,116, 99,104, 0,115,104,101, 97,114,115,116,105,102,102, 0,105,110,112,117,115,104, 0, + 42,112,111,105,110,116, 99, 97, 99,104,101, 0, 42,101,102,102,101, 99,116,111,114, 95,119,101,105,103,104,116,115, 0, 42,102, +109,100, 0,115,104,111,119, 95, 97,100,118, 97,110, 99,101,100,111,112,116,105,111,110,115, 0,114,101,115,111,108,117,116,105, +111,110,120,121,122, 0,112,114,101,118,105,101,119,114,101,115,120,121,122, 0,114,101, 97,108,115,105,122,101, 0,103,117,105, + 68,105,115,112,108, 97,121, 77,111,100,101, 0,114,101,110,100,101,114, 68,105,115,112,108, 97,121, 77,111,100,101, 0,118,105, +115, 99,111,115,105,116,121, 86, 97,108,117,101, 0,118,105,115, 99,111,115,105,116,121, 77,111,100,101, 0,118,105,115, 99,111, +115,105,116,121, 69,120,112,111,110,101,110,116, 0,103,114, 97,118,120, 0,103,114, 97,118,121, 0,103,114, 97,118,122, 0, 97, +110,105,109, 83,116, 97,114,116, 0, 97,110,105,109, 69,110,100, 0,103,115,116, 97,114, 0,109, 97,120, 82,101,102,105,110,101, + 0,105,110,105, 86,101,108,120, 0,105,110,105, 86,101,108,121, 0,105,110,105, 86,101,108,122, 0, 42,111,114,103, 77,101,115, +104, 0, 42,109,101,115,104, 83,117,114,102, 97, 99,101, 0, 42,109,101,115,104, 66, 66, 0,115,117,114,102,100, 97,116, 97, 80, + 97,116,104, 91, 50, 52, 48, 93, 0, 98, 98, 83,116, 97,114,116, 91, 51, 93, 0, 98, 98, 83,105,122,101, 91, 51, 93, 0,116,121, +112,101, 70,108, 97,103,115, 0,100,111,109, 97,105,110, 78,111,118,101, 99,103,101,110, 0,118,111,108,117,109,101, 73,110,105, +116, 84,121,112,101, 0,112, 97,114,116, 83,108,105,112, 86, 97,108,117,101, 0,103,101,110,101,114, 97,116,101, 84,114, 97, 99, +101,114,115, 0,103,101,110,101,114, 97,116,101, 80, 97,114,116,105, 99,108,101,115, 0,115,117,114,102, 97, 99,101, 83,109,111, +111,116,104,105,110,103, 0,115,117,114,102, 97, 99,101, 83,117, 98,100,105,118,115, 0,112, 97,114,116,105, 99,108,101, 73,110, +102, 83,105,122,101, 0,112, 97,114,116,105, 99,108,101, 73,110,102, 65,108,112,104, 97, 0,102, 97,114, 70,105,101,108,100, 83, +105,122,101, 0, 42,109,101,115,104, 83,117,114,102, 78,111,114,109, 97,108,115, 0, 99,112,115, 84,105,109,101, 83,116, 97,114, +116, 0, 99,112,115, 84,105,109,101, 69,110,100, 0, 99,112,115, 81,117, 97,108,105,116,121, 0, 97,116,116,114, 97, 99,116,102, +111,114, 99,101, 83,116,114,101,110,103,116,104, 0, 97,116,116,114, 97, 99,116,102,111,114, 99,101, 82, 97,100,105,117,115, 0, +118,101,108,111, 99,105,116,121,102,111,114, 99,101, 83,116,114,101,110,103,116,104, 0,118,101,108,111, 99,105,116,121,102,111, +114, 99,101, 82, 97,100,105,117,115, 0,108, 97,115,116,103,111,111,100,102,114, 97,109,101, 0,109,105,115,116,121,112,101, 0, +104,111,114,114, 0,104,111,114,103, 0,104,111,114, 98, 0,104,111,114,107, 0,122,101,110,114, 0,122,101,110,103, 0,122,101, +110, 98, 0,122,101,110,107, 0, 97,109, 98,107, 0,102, 97,115,116, 99,111,108, 0,101,120,112,111,115,117,114,101, 0,101,120, +112, 0,114, 97,110,103,101, 0,108,105,110,102, 97, 99, 0,108,111,103,102, 97, 99, 0,103,114, 97,118,105,116,121, 0, 97, 99, +116,105,118,105,116,121, 66,111,120, 82, 97,100,105,117,115, 0,115,107,121,116,121,112,101, 0,111, 99, 99,108,117,115,105,111, +110, 82,101,115, 0,112,104,121,115,105, 99,115, 69,110,103,105,110,101, 0,116,105, 99,114, 97,116,101, 0,109, 97,120,108,111, +103,105, 99,115,116,101,112, 0,112,104,121,115,117, 98,115,116,101,112, 0,109, 97,120,112,104,121,115,116,101,112, 0,109,105, +115,105, 0,109,105,115,116,115,116, 97, 0,109,105,115,116,100,105,115,116, 0,109,105,115,116,104,105, 0,115,116, 97,114,114, + 0,115,116, 97,114,103, 0,115,116, 97,114, 98, 0,115,116, 97,114,107, 0,115,116, 97,114,115,105,122,101, 0,115,116, 97,114, +109,105,110,100,105,115,116, 0,115,116, 97,114,100,105,115,116, 0,115,116, 97,114, 99,111,108,110,111,105,115,101, 0,100,111, +102,115,116, 97, 0,100,111,102,101,110,100, 0,100,111,102,109,105,110, 0,100,111,102,109, 97,120, 0, 97,111,100,105,115,116, + 0, 97,111,100,105,115,116,102, 97, 99, 0, 97,111,101,110,101,114,103,121, 0, 97,111, 98,105, 97,115, 0, 97,111,109,111,100, +101, 0, 97,111,115, 97,109,112, 0, 97,111,109,105,120, 0, 97,111, 99,111,108,111,114, 0, 97,111, 95, 97,100, 97,112,116, 95, +116,104,114,101,115,104, 0, 97,111, 95, 97,100, 97,112,116, 95,115,112,101,101,100, 95,102, 97, 99, 0, 97,111, 95, 97,112,112, +114,111,120, 95,101,114,114,111,114, 0, 97,111, 95, 97,112,112,114,111,120, 95, 99,111,114,114,101, 99,116,105,111,110, 0, 97, +111, 95,115, 97,109,112, 95,109,101,116,104,111,100, 0, 97,111, 95,103, 97,116,104,101,114, 95,109,101,116,104,111,100, 0, 97, +111, 95, 97,112,112,114,111,120, 95,112, 97,115,115,101,115, 0, 42, 97,111,115,112,104,101,114,101, 0, 42, 97,111,116, 97, 98, +108,101,115, 0,115,101,108, 99,111,108, 0,115,120, 0,115,121, 0, 42,108,112, 70,111,114,109, 97,116, 0, 42,108,112, 80, 97, +114,109,115, 0, 99, 98, 70,111,114,109, 97,116, 0, 99, 98, 80, 97,114,109,115, 0,102, 99, 99, 84,121,112,101, 0,102, 99, 99, + 72, 97,110,100,108,101,114, 0,100,119, 75,101,121, 70,114, 97,109,101, 69,118,101,114,121, 0,100,119, 81,117, 97,108,105,116, +121, 0,100,119, 66,121,116,101,115, 80,101,114, 83,101, 99,111,110,100, 0,100,119, 70,108, 97,103,115, 0,100,119, 73,110,116, +101,114,108,101, 97,118,101, 69,118,101,114,121, 0, 97,118,105, 99,111,100,101, 99,110, 97,109,101, 91, 49, 50, 56, 93, 0, 42, + 99,100, 80, 97,114,109,115, 0, 42,112, 97,100, 0, 99,100, 83,105,122,101, 0,113,116, 99,111,100,101, 99,110, 97,109,101, 91, + 49, 50, 56, 93, 0, 99,111,100,101, 99, 0, 97,117,100,105,111, 95, 99,111,100,101, 99, 0,118,105,100,101,111, 95, 98,105,116, +114, 97,116,101, 0, 97,117,100,105,111, 95, 98,105,116,114, 97,116,101, 0, 97,117,100,105,111, 95,109,105,120,114, 97,116,101, + 0, 97,117,100,105,111, 95,118,111,108,117,109,101, 0,103,111,112, 95,115,105,122,101, 0,114, 99, 95,109,105,110, 95,114, 97, +116,101, 0,114, 99, 95,109, 97,120, 95,114, 97,116,101, 0,114, 99, 95, 98,117,102,102,101,114, 95,115,105,122,101, 0,109,117, +120, 95,112, 97, 99,107,101,116, 95,115,105,122,101, 0,109,117,120, 95,114, 97,116,101, 0,109,105,120,114, 97,116,101, 0,109, + 97,105,110, 0,115,112,101,101,100, 95,111,102, 95,115,111,117,110,100, 0,100,111,112,112,108,101,114, 95,102, 97, 99,116,111, +114, 0,100,105,115,116, 97,110, 99,101, 95,109,111,100,101,108, 0, 42,109, 97,116, 95,111,118,101,114,114,105,100,101, 0, 42, +108,105,103,104,116, 95,111,118,101,114,114,105,100,101, 0,108, 97,121, 95,122,109, 97,115,107, 0,108, 97,121,102,108, 97,103, + 0,112, 97,115,115,102,108, 97,103, 0,112, 97,115,115, 95,120,111,114, 0, 42, 97,118,105, 99,111,100,101, 99,100, 97,116, 97, + 0, 42,113,116, 99,111,100,101, 99,100, 97,116, 97, 0,102,102, 99,111,100,101, 99,100, 97,116, 97, 0,112,115,102,114, 97, 0, +112,101,102,114, 97, 0,105,109, 97,103,101,115, 0,102,114, 97,109, 97,112,116,111, 0,116,104,114,101, 97,100,115, 0,102,114, + 97,109,101,108,101,110, 0, 98,108,117,114,102, 97, 99, 0,101,100,103,101, 82, 0,101,100,103,101, 71, 0,101,100,103,101, 66, + 0,102,117,108,108,115, 99,114,101,101,110, 0,120,112,108, 97,121, 0,121,112,108, 97,121, 0,102,114,101,113,112,108, 97,121, + 0, 97,116,116,114,105, 98, 0,114,116, 49, 0,114,116, 50, 0,115,116,101,114,101,111,109,111,100,101, 0,100,105,109,101,110, +115,105,111,110,115,112,114,101,115,101,116, 0,109, 97,120,105,109,115,105,122,101, 0,120,115, 99,104, 0,121,115, 99,104, 0, +120,112, 97,114,116,115, 0,121,112, 97,114,116,115, 0,119,105,110,112,111,115, 0,112,108, 97,110,101,115, 0,105,109,116,121, +112,101, 0,115,117, 98,105,109,116,121,112,101, 0,113,117, 97,108,105,116,121, 0,100,105,115,112,108, 97,121,109,111,100,101, + 0,114,112, 97,100, 49, 0,114,112, 97,100, 50, 0,115, 99,101,109,111,100,101, 0,114, 97,121,116,114, 97, 99,101, 95,111,112, +116,105,111,110,115, 0,114, 97,121,116,114, 97, 99,101, 95,115,116,114,117, 99,116,117,114,101, 0,114,101,110,100,101,114,101, +114, 0,111, 99,114,101,115, 0, 97,108,112,104, 97,109,111,100,101, 0,111,115, 97, 0,102,114,115, 95,115,101, 99, 0,101,100, +103,101,105,110,116, 0,115, 97,102,101,116,121, 0, 98,111,114,100,101,114, 0,100,105,115,112,114,101, 99,116, 0,108, 97,121, +101,114,115, 0, 97, 99,116,108, 97,121, 0,120, 97,115,112, 0,121, 97,115,112, 0,102,114,115, 95,115,101, 99, 95, 98, 97,115, +101, 0,103, 97,117,115,115, 0, 99,111,108,111,114, 95,109,103,116, 95,102,108, 97,103, 0,112,111,115,116,103, 97,109,109, 97, + 0,112,111,115,116,104,117,101, 0,112,111,115,116,115, 97,116, 0,100,105,116,104,101,114, 95,105,110,116,101,110,115,105,116, +121, 0, 98, 97,107,101, 95,111,115, 97, 0, 98, 97,107,101, 95,102,105,108,116,101,114, 0, 98, 97,107,101, 95,109,111,100,101, + 0, 98, 97,107,101, 95,102,108, 97,103, 0, 98, 97,107,101, 95,110,111,114,109, 97,108, 95,115,112, 97, 99,101, 0, 98, 97,107, +101, 95,113,117, 97,100, 95,115,112,108,105,116, 0, 98, 97,107,101, 95,109, 97,120,100,105,115,116, 0, 98, 97,107,101, 95, 98, +105, 97,115,100,105,115,116, 0, 98, 97,107,101, 95,112, 97,100, 0, 71, 73,113,117, 97,108,105,116,121, 0, 71, 73, 99, 97, 99, +104,101, 0, 71, 73,109,101,116,104,111,100, 0, 71, 73,112,104,111,116,111,110,115, 0, 71, 73,100,105,114,101, 99,116, 0, 89, + 70, 95, 65, 65, 0, 89, 70,101,120,112,111,114,116,120,109,108, 0, 89, 70, 95,110,111, 98,117,109,112, 0, 89, 70, 95, 99,108, + 97,109,112,114,103, 98, 0,121,102,112, 97,100, 49, 0, 71, 73,100,101,112,116,104, 0, 71, 73, 99, 97,117,115,100,101,112,116, +104, 0, 71, 73,112,105,120,101,108,115,112,101,114,115, 97,109,112,108,101, 0, 71, 73,112,104,111,116,111,110, 99,111,117,110, +116, 0, 71, 73,109,105,120,112,104,111,116,111,110,115, 0, 71, 73,112,104,111,116,111,110,114, 97,100,105,117,115, 0, 89, 70, + 95,114, 97,121,100,101,112,116,104, 0, 89, 70, 95, 65, 65,112, 97,115,115,101,115, 0, 89, 70, 95, 65, 65,115, 97,109,112,108, +101,115, 0,121,102,112, 97,100, 50, 0, 71, 73,115,104, 97,100,111,119,113,117, 97,108,105,116,121, 0, 71, 73,114,101,102,105, +110,101,109,101,110,116, 0, 71, 73,112,111,119,101,114, 0, 71, 73,105,110,100,105,114,112,111,119,101,114, 0, 89, 70, 95,103, + 97,109,109, 97, 0, 89, 70, 95,101,120,112,111,115,117,114,101, 0, 89, 70, 95,114, 97,121, 98,105, 97,115, 0, 89, 70, 95, 65, + 65,112,105,120,101,108,115,105,122,101, 0, 89, 70, 95, 65, 65,116,104,114,101,115,104,111,108,100, 0, 98, 97, 99,107, 98,117, +102, 91, 49, 54, 48, 93, 0,112,105, 99, 91, 49, 54, 48, 93, 0,115,116, 97,109,112, 0,115,116, 97,109,112, 95,102,111,110,116, + 95,105,100, 0,115,116, 97,109,112, 95,117,100, 97,116, 97, 91, 49, 54, 48, 93, 0,102,103, 95,115,116, 97,109,112, 91, 52, 93, + 0, 98,103, 95,115,116, 97,109,112, 91, 52, 93, 0,115,105,109,112,108,105,102,121, 95,115,117, 98,115,117,114,102, 0,115,105, +109,112,108,105,102,121, 95,115,104, 97,100,111,119,115, 97,109,112,108,101,115, 0,115,105,109,112,108,105,102,121, 95,112, 97, +114,116,105, 99,108,101,115, 0,115,105,109,112,108,105,102,121, 95, 97,111,115,115,115, 0, 99,105,110,101,111,110,119,104,105, +116,101, 0, 99,105,110,101,111,110, 98,108, 97, 99,107, 0, 99,105,110,101,111,110,103, 97,109,109, 97, 0,106,112, 50, 95,112, +114,101,115,101,116, 0,106,112, 50, 95,100,101,112,116,104, 0,114,112, 97,100, 51, 0,100,111,109,101,114,101,115, 0,100,111, +109,101,109,111,100,101, 0,100,111,109,101, 97,110,103,108,101, 0,100,111,109,101,116,105,108,116, 0,100,111,109,101,114,101, +115, 98,117,102, 0, 42,100,111,109,101,116,101,120,116, 0,101,110,103,105,110,101, 91, 51, 50, 93, 0,112, 97,114,116,105, 99, +108,101, 95,112,101,114, 99, 0,115,117, 98,115,117,114,102, 95,109, 97,120, 0,115,104, 97,100, 98,117,102,115, 97,109,112,108, +101, 95,109, 97,120, 0, 97,111, 95,101,114,114,111,114, 0,116,105,108,116, 0,114,101,115, 98,117,102, 0, 42,119, 97,114,112, +116,101,120,116, 0, 99,111,108, 91, 51, 93, 0,109, 97,116,109,111,100,101, 0,102,114, 97,109,105,110,103, 0,100,111,109,101, + 0,115,116,101,114,101,111,102,108, 97,103, 0, 42, 42, 98,114,117,115,104,101,115, 0, 97, 99,116,105,118,101, 95, 98,114,117, +115,104, 95,105,110,100,101,120, 0, 98,114,117,115,104, 95, 99,111,117,110,116, 0, 42,112, 97,105,110,116, 95, 99,117,114,115, +111,114, 0,112, 97,105,110,116, 95, 99,117,114,115,111,114, 95, 99,111,108, 91, 52, 93, 0,112, 97,105,110,116, 0,116,111,111, +108, 0,115,101, 97,109, 95, 98,108,101,101,100, 0,110,111,114,109, 97,108, 95, 97,110,103,108,101, 0, 42,112, 97,105,110,116, + 99,117,114,115,111,114, 0,105,110,118,101,114,116, 0,116,111,116,114,101,107,101,121, 0,116,111,116, 97,100,100,107,101,121, + 0, 98,114,117,115,104,116,121,112,101, 0, 98,114,117,115,104, 91, 55, 93, 0,101,109,105,116,116,101,114,100,105,115,116, 0, +115,101,108,101, 99,116,109,111,100,101, 0,101,100,105,116,116,121,112,101, 0,100,114, 97,119, 95,115,116,101,112, 0,102, 97, +100,101, 95,102,114, 97,109,101,115, 0,110, 97,109,101, 91, 51, 54, 93, 0,109, 97,116, 91, 51, 93, 91, 51, 93, 0,112,105,118, +111,116, 91, 51, 93, 0,116, 97, 98,108,101,116, 95,115,105,122,101, 0,116, 97, 98,108,101,116, 95,115,116,114,101,110,103,116, +104, 0,103, 97,109,109, 97, 0,109,117,108, 0, 42,118,112, 97,105,110,116, 95,112,114,101,118, 0, 42,119,112, 97,105,110,116, + 95,112,114,101,118, 0, 42,118,112, 97,105,110,116, 0, 42,119,112, 97,105,110,116, 0,118,103,114,111,117,112, 95,119,101,105, +103,104,116, 0, 99,111,114,110,101,114,116,121,112,101, 0,101,100,105,116, 98,117,116,102,108, 97,103, 0,106,111,105,110,116, +114,105,108,105,109,105,116, 0,100,101,103,114, 0,116,117,114,110, 0,101,120,116,114, 95,111,102,102,115, 0,100,111,117, 98, +108,105,109,105,116, 0,110,111,114,109, 97,108,115,105,122,101, 0, 97,117,116,111,109,101,114,103,101, 0,115,101,103,109,101, +110,116,115, 0,114,105,110,103,115, 0,118,101,114,116,105, 99,101,115, 0,117,110,119,114, 97,112,112,101,114, 0,117,118, 99, + 97,108, 99, 95,114, 97,100,105,117,115, 0,117,118, 99, 97,108, 99, 95, 99,117, 98,101,115,105,122,101, 0,117,118, 99, 97,108, + 99, 95,109, 97,114,103,105,110, 0,117,118, 99, 97,108, 99, 95,109, 97,112,100,105,114, 0,117,118, 99, 97,108, 99, 95,109, 97, +112, 97,108,105,103,110, 0,117,118, 99, 97,108, 99, 95,102,108, 97,103, 0,117,118, 95,102,108, 97,103, 0,117,118, 95,115,101, +108,101, 99,116,109,111,100,101, 0,117,118, 95,112, 97,100, 91, 50, 93, 0, 97,117,116,111,105,107, 95, 99,104, 97,105,110,108, +101,110, 0,105,109, 97,112, 97,105,110,116, 0,112, 97,114,116,105, 99,108,101, 0,112,114,111,112,111,114,116,105,111,110, 97, +108, 95,115,105,122,101, 0,115,101,108,101, 99,116, 95,116,104,114,101,115,104, 0, 99,108,101, 97,110, 95,116,104,114,101,115, +104, 0, 97,117,116,111,107,101,121, 95,109,111,100,101, 0, 97,117,116,111,107,101,121, 95,102,108, 97,103, 0,114,101,116,111, +112,111, 95,109,111,100,101, 0,114,101,116,111,112,111, 95,112, 97,105,110,116, 95,116,111,111,108, 0,108,105,110,101, 95,100, +105,118, 0,101,108,108,105,112,115,101, 95,100,105,118, 0,114,101,116,111,112,111, 95,104,111,116,115,112,111,116, 0,109,117, +108,116,105,114,101,115, 95,115,117, 98,100,105,118, 95,116,121,112,101, 0,115,107,103,101,110, 95,114,101,115,111,108,117,116, +105,111,110, 0,115,107,103,101,110, 95,116,104,114,101,115,104,111,108,100, 95,105,110,116,101,114,110, 97,108, 0,115,107,103, +101,110, 95,116,104,114,101,115,104,111,108,100, 95,101,120,116,101,114,110, 97,108, 0,115,107,103,101,110, 95,108,101,110,103, +116,104, 95,114, 97,116,105,111, 0,115,107,103,101,110, 95,108,101,110,103,116,104, 95,108,105,109,105,116, 0,115,107,103,101, +110, 95, 97,110,103,108,101, 95,108,105,109,105,116, 0,115,107,103,101,110, 95, 99,111,114,114,101,108, 97,116,105,111,110, 95, +108,105,109,105,116, 0,115,107,103,101,110, 95,115,121,109,109,101,116,114,121, 95,108,105,109,105,116, 0,115,107,103,101,110, + 95,114,101,116, 97,114,103,101,116, 95, 97,110,103,108,101, 95,119,101,105,103,104,116, 0,115,107,103,101,110, 95,114,101,116, + 97,114,103,101,116, 95,108,101,110,103,116,104, 95,119,101,105,103,104,116, 0,115,107,103,101,110, 95,114,101,116, 97,114,103, +101,116, 95,100,105,115,116, 97,110, 99,101, 95,119,101,105,103,104,116, 0,115,107,103,101,110, 95,111,112,116,105,111,110,115, + 0,115,107,103,101,110, 95,112,111,115,116,112,114,111, 0,115,107,103,101,110, 95,112,111,115,116,112,114,111, 95,112, 97,115, +115,101,115, 0,115,107,103,101,110, 95,115,117, 98,100,105,118,105,115,105,111,110,115, 91, 51, 93, 0,115,107,103,101,110, 95, +109,117,108,116,105, 95,108,101,118,101,108, 0, 42,115,107,103,101,110, 95,116,101,109,112,108, 97,116,101, 0, 98,111,110,101, + 95,115,107,101,116, 99,104,105,110,103, 0, 98,111,110,101, 95,115,107,101,116, 99,104,105,110,103, 95, 99,111,110,118,101,114, +116, 0,115,107,103,101,110, 95,115,117, 98,100,105,118,105,115,105,111,110, 95,110,117,109, 98,101,114, 0,115,107,103,101,110, + 95,114,101,116, 97,114,103,101,116, 95,111,112,116,105,111,110,115, 0,115,107,103,101,110, 95,114,101,116, 97,114,103,101,116, + 95,114,111,108,108, 0,115,107,103,101,110, 95,115,105,100,101, 95,115,116,114,105,110,103, 91, 56, 93, 0,115,107,103,101,110, + 95,110,117,109, 95,115,116,114,105,110,103, 91, 56, 93, 0,101,100,103,101, 95,109,111,100,101, 0,115,110, 97,112, 95,109,111, +100,101, 0,115,110, 97,112, 95,102,108, 97,103, 0,115,110, 97,112, 95,116, 97,114,103,101,116, 0,112,114,111,112,111,114,116, +105,111,110, 97,108, 0,112,114,111,112, 95,109,111,100,101, 0, 97,117,116,111, 95,110,111,114,109, 97,108,105,122,101, 0,105, +110,116,112, 97,100, 0,116,111,116,111, 98,106, 0,116,111,116,108, 97,109,112, 0,116,111,116,111, 98,106,115,101,108, 0,116, +111,116, 99,117,114,118,101, 0,116,111,116,109,101,115,104, 0,116,111,116, 97,114,109, 97,116,117,114,101, 0,115, 99, 97,108, +101, 95,108,101,110,103,116,104, 0,115,121,115,116,101,109, 0,103,114, 97,118,105,116,121, 91, 51, 93, 0, 42, 99, 97,109,101, +114, 97, 0, 42,119,111,114,108,100, 0, 42,115,101,116, 0, 98, 97,115,101, 0, 42, 98, 97,115, 97, 99,116, 0, 42,111, 98,101, +100,105,116, 0, 99,117,114,115,111,114, 91, 51, 93, 0,116,119, 99,101,110,116, 91, 51, 93, 0,116,119,109,105,110, 91, 51, 93, + 0,116,119,109, 97,120, 91, 51, 93, 0, 42,101,100, 0, 42,116,111,111,108,115,101,116,116,105,110,103,115, 0, 42,115,116, 97, +116,115, 0, 97,117,100,105,111, 0,116,114, 97,110,115,102,111,114,109, 95,115,112, 97, 99,101,115, 0,115,111,117,110,100, 95, +104, 97,110,100,108,101,115, 0, 42,116,104,101, 68, 97,103, 0,100, 97,103,105,115,118, 97,108,105,100, 0,100, 97,103,102,108, + 97,103,115, 0,106,117,109,112,102,114, 97,109,101, 0,102,114, 97,109,101, 95,115,116,101,112, 0, 97, 99,116,105,118,101, 95, +107,101,121,105,110,103,115,101,116, 0,107,101,121,105,110,103,115,101,116,115, 0,103,109, 0,117,110,105,116, 0,112,104,121, +115,105, 99,115, 95,115,101,116,116,105,110,103,115, 0, 98,108,101,110,100, 0,119,105,110,109, 97,116, 91, 52, 93, 91, 52, 93, + 0,118,105,101,119,109, 97,116, 91, 52, 93, 91, 52, 93, 0,118,105,101,119,105,110,118, 91, 52, 93, 91, 52, 93, 0,112,101,114, +115,109, 97,116, 91, 52, 93, 91, 52, 93, 0,112,101,114,115,105,110,118, 91, 52, 93, 91, 52, 93, 0,118,105,101,119,109, 97,116, +111, 98, 91, 52, 93, 91, 52, 93, 0,112,101,114,115,109, 97,116,111, 98, 91, 52, 93, 91, 52, 93, 0,116,119,109, 97,116, 91, 52, + 93, 91, 52, 93, 0,118,105,101,119,113,117, 97,116, 91, 52, 93, 0,122,102, 97, 99, 0, 99, 97,109,100,120, 0, 99, 97,109,100, +121, 0,112,105,120,115,105,122,101, 0, 99, 97,109,122,111,111,109, 0,118,105,101,119, 98,117,116, 0,114,102,108, 97,103, 0, +118,105,101,119,108,111, 99,107, 0,112,101,114,115,112, 0,118,105,101,119, 0, 99,108,105,112, 91, 54, 93, 91, 52, 93, 0, 42, + 99,108,105,112, 98, 98, 0, 42,108,111, 99, 97,108,118,100, 0, 42,114,105, 0, 42,114,101,116,111,112,111, 95,118,105,101,119, + 95,100, 97,116, 97, 0, 42,100,101,112,116,104,115, 0, 42,115,109,115, 0, 42,115,109,111,111,116,104, 95,116,105,109,101,114, + 0,108,118,105,101,119,113,117, 97,116, 91, 52, 93, 0,108,112,101,114,115,112, 0,108,118,105,101,119, 0,114,101,103,105,111, +110, 98, 97,115,101, 0,115,112, 97, 99,101,116,121,112,101, 0, 98,108,111, 99,107,115, 99, 97,108,101, 0, 98,108,111, 99,107, +104, 97,110,100,108,101,114, 91, 56, 93, 0,108, 97,121, 95,117,115,101,100, 0, 42,111, 98, 95, 99,101,110,116,114,101, 0, 42, + 98,103,112,105, 99, 0,111, 98, 95, 99,101,110,116,114,101, 95, 98,111,110,101, 91, 51, 50, 93, 0,108, 97,121, 97, 99,116, 0, +100,114, 97,119,116,121,112,101, 0,115, 99,101,110,101,108,111, 99,107, 0, 97,114,111,117,110,100, 0,112,105,118,111,116, 95, +108, 97,115,116, 0,103,114,105,100, 0,103,114,105,100,118,105,101,119, 0,112, 97,100,102, 0,110,101, 97,114, 0,102, 97,114, + 0,103,114,105,100,108,105,110,101,115, 0,103,114,105,100,102,108, 97,103, 0,103,114,105,100,115,117, 98,100,105,118, 0,109, +111,100,101,115,101,108,101, 99,116, 0,107,101,121,102,108, 97,103,115, 0,116,119,116,121,112,101, 0,116,119,109,111,100,101, + 0,116,119,102,108, 97,103, 0,116,119,100,114, 97,119,102,108, 97,103, 0, 99,117,115,116,111,109,100, 97,116, 97, 95,109, 97, +115,107, 0, 97,102,116,101,114,100,114, 97,119, 0,122, 98,117,102, 0,120,114, 97,121, 0,110,100,111,102,109,111,100,101, 0, +110,100,111,102,102,105,108,116,101,114, 0, 42,112,114,111,112,101,114,116,105,101,115, 95,115,116,111,114, 97,103,101, 0,118, +101,114,116, 0,104,111,114, 0,109, 97,115,107, 0,109,105,110, 91, 50, 93, 0,109, 97,120, 91, 50, 93, 0,109,105,110,122,111, +111,109, 0,109, 97,120,122,111,111,109, 0,115, 99,114,111,108,108, 0,115, 99,114,111,108,108, 95,117,105, 0,107,101,101,112, +116,111,116, 0,107,101,101,112,122,111,111,109, 0,107,101,101,112,111,102,115, 0, 97,108,105,103,110, 0,119,105,110,120, 0, +119,105,110,121, 0,111,108,100,119,105,110,120, 0,111,108,100,119,105,110,121, 0, 99,117,114,115,111,114, 91, 50, 93, 0, 42, +116, 97, 98, 95,111,102,102,115,101,116, 0,116, 97, 98, 95,110,117,109, 0,116, 97, 98, 95, 99,117,114, 0, 42,115, 99,114,101, +101,110, 0,118, 50,100, 0, 42, 97,100,115, 0,103,104,111,115,116, 67,117,114,118,101,115, 0, 97,117,116,111,115,110, 97,112, + 0, 99,117,114,115,111,114, 86, 97,108, 0,109, 97,105,110, 98, 0,109, 97,105,110, 98,111, 0,109, 97,105,110, 98,117,115,101, +114, 0,114,101, 95, 97,108,105,103,110, 0,112,114,101,118,105,101,119, 0,112, 97,116,104,102,108, 97,103, 0,100, 97,116, 97, +105, 99,111,110, 0, 42,112,105,110,105,100, 0,114,101,110,100,101,114, 95,115,105,122,101, 0, 99,104, 97,110,115,104,111,119, +110, 0,122,101, 98,114, 97, 0,122,111,111,109, 0,116,105,116,108,101, 91, 50, 52, 93, 0,100,105,114, 91, 50, 52, 48, 93, 0, +102,105,108,101, 91, 56, 48, 93, 0,114,101,110, 97,109,101,102,105,108,101, 91, 56, 48, 93, 0,115,111,114,116, 0,100,105,115, +112,108, 97,121, 0, 97, 99,116,105,118,101, 95, 98,111,111,107,109, 97,114,107, 0, 97, 99,116,105,118,101, 95,102,105,108,101, + 0,115,101,108,115,116, 97,116,101, 0,102, 95,102,112, 0,109,101,110,117, 0,102,112, 95,115,116,114, 91, 56, 93, 0, 42,112, +117,112,109,101,110,117, 0, 42,112, 97,114, 97,109,115, 0, 42,102,105,108,101,115, 0, 42,102,111,108,100,101,114,115, 95,112, +114,101,118, 0, 42,102,111,108,100,101,114,115, 95,110,101,120,116, 0, 42,111,112, 0, 42,108,111, 97,100,105,109, 97,103,101, + 95,116,105,109,101,114, 0, 42,108, 97,121,111,117,116, 0,114,101, 99,101,110,116,110,114, 0, 98,111,111,107,109, 97,114,107, +110,114, 0,115,121,115,116,101,109,110,114, 0,116,114,101,101, 0, 42,116,114,101,101,115,116,111,114,101, 0,115,101, 97,114, + 99,104, 95,115,116,114,105,110,103, 91, 51, 50, 93, 0,115,101, 97,114, 99,104, 95,116,115,101, 0,115,101, 97,114, 99,104, 95, +102,108, 97,103,115, 0,100,111, 95, 0,111,117,116,108,105,110,101,118,105,115, 0,115,116,111,114,101,102,108, 97,103, 0, 42, + 99,117,109, 97,112, 0,105,109, 97,110,114, 0, 99,117,114,116,105,108,101, 0,105,109,116,121,112,101,110,114, 0,108,111, 99, +107, 0,112,105,110, 0,100,116, 95,117,118, 0,115,116,105, 99,107,121, 0,100,116, 95,117,118,115,116,114,101,116, 99,104, 0, + 99,101,110,116,120, 0, 99,101,110,116,121, 0, 42,116,101,120,116, 0,116,111,112, 0,118,105,101,119,108,105,110,101,115, 0, +108,104,101,105,103,104,116, 0, 99,119,105,100,116,104, 0,108,105,110,101,110,114,115, 95,116,111,116, 0,108,101,102,116, 0, +115,104,111,119,108,105,110,101,110,114,115, 0,116, 97, 98,110,117,109, 98,101,114, 0,115,104,111,119,115,121,110,116, 97,120, + 0,111,118,101,114,119,114,105,116,101, 0,108,105,118,101, 95,101,100,105,116, 0,112,105,120, 95,112,101,114, 95,108,105,110, +101, 0,116,120,116,115, 99,114,111,108,108, 0,116,120,116, 98, 97,114, 0,119,111,114,100,119,114, 97,112, 0,100,111,112,108, +117,103,105,110,115, 0,102,105,110,100,115,116,114, 91, 50, 53, 54, 93, 0,114,101,112,108, 97, 99,101,115,116,114, 91, 50, 53, + 54, 93, 0, 42,112,121, 95,100,114, 97,119, 0, 42,112,121, 95,101,118,101,110,116, 0, 42,112,121, 95, 98,117,116,116,111,110, + 0, 42,112,121, 95, 98,114,111,119,115,101,114, 99, 97,108,108, 98, 97, 99,107, 0, 42,112,121, 95,103,108,111, 98, 97,108,100, +105, 99,116, 0,108, 97,115,116,115,112, 97, 99,101, 0,115, 99,114,105,112,116,110, 97,109,101, 91, 50, 53, 54, 93, 0,115, 99, +114,105,112,116, 97,114,103, 91, 50, 53, 54, 93, 0, 42,115, 99,114,105,112,116, 0, 42, 98,117,116, 95,114,101,102,115, 0,114, +101,100,114, 97,119,115, 0, 42,105,100, 0, 97,115,112,101, 99,116, 0, 42, 99,117,114,102,111,110,116, 0,109,120, 0,109,121, + 0, 42,101,100,105,116,116,114,101,101, 0,116,114,101,101,116,121,112,101, 0,116,101,120,102,114,111,109, 0,110,117,109,116, +105,108,101,115,120, 0,110,117,109,116,105,108,101,115,121, 0,118,105,101,119,114,101, 99,116, 0, 98,111,111,107,109, 97,114, +107,114,101, 99,116, 0,115, 99,114,111,108,108,112,111,115, 0,115, 99,114,111,108,108,104,101,105,103,104,116, 0,115, 99,114, +111,108,108, 97,114,101, 97, 0,114,101,116,118, 97,108, 0,112,114,118, 95,119, 0,112,114,118, 95,104, 0, 40, 42,114,101,116, +117,114,110,102,117,110, 99, 41, 40, 41, 0, 40, 42,114,101,116,117,114,110,102,117,110, 99, 95,101,118,101,110,116, 41, 40, 41, + 0, 40, 42,114,101,116,117,114,110,102,117,110, 99, 95, 97,114,103,115, 41, 40, 41, 0, 42, 97,114,103, 49, 0, 42, 97,114,103, + 50, 0, 42,109,101,110,117,112, 0, 42,105,109,103, 0,108,101,110, 95, 97,108,108,111, 99, 0, 99,117,114,115,111,114, 0,114, +112,116, 95,109, 97,115,107, 0,115, 99,114,111,108,108, 98, 97, 99,107, 0,104,105,115,116,111,114,121, 0,112,114,111,109,112, +116, 91, 56, 93, 0,102,105,108,101,110, 97,109,101, 91, 50, 53, 54, 93, 0, 98,108,102, 95,105,100, 0,117,105,102,111,110,116, + 95,105,100, 0,114, 95,116,111, 95,108, 0,112,111,105,110,116,115, 0,107,101,114,110,105,110,103, 0,105,116, 97,108,105, 99, + 0, 98,111,108,100, 0,115,104, 97,100,111,119, 0,115,104, 97,100,120, 0,115,104, 97,100,121, 0,115,104, 97,100,111,119, 97, +108,112,104, 97, 0,115,104, 97,100,111,119, 99,111,108,111,114, 0,112, 97,110,101,108,116,105,116,108,101, 0,103,114,111,117, +112,108, 97, 98,101,108, 0,119,105,100,103,101,116,108, 97, 98,101,108, 0,119,105,100,103,101,116, 0,112, 97,110,101,108,122, +111,111,109, 0,109,105,110,108, 97, 98,101,108, 99,104, 97,114,115, 0,109,105,110,119,105,100,103,101,116, 99,104, 97,114,115, + 0, 99,111,108,117,109,110,115,112, 97, 99,101, 0,116,101,109,112,108, 97,116,101,115,112, 97, 99,101, 0, 98,111,120,115,112, + 97, 99,101, 0, 98,117,116,116,111,110,115,112, 97, 99,101,120, 0, 98,117,116,116,111,110,115,112, 97, 99,101,121, 0,112, 97, +110,101,108,115,112, 97, 99,101, 0,112, 97,110,101,108,111,117,116,101,114, 0,112, 97,100, 91, 49, 93, 0,111,117,116,108,105, +110,101, 91, 52, 93, 0,105,110,110,101,114, 91, 52, 93, 0,105,110,110,101,114, 95,115,101,108, 91, 52, 93, 0,105,116,101,109, + 91, 52, 93, 0,116,101,120,116, 91, 52, 93, 0,116,101,120,116, 95,115,101,108, 91, 52, 93, 0,115,104, 97,100,101,100, 0,115, +104, 97,100,101,116,111,112, 0,115,104, 97,100,101,100,111,119,110, 0,105,110,110,101,114, 95, 97,110,105,109, 91, 52, 93, 0, +105,110,110,101,114, 95, 97,110,105,109, 95,115,101,108, 91, 52, 93, 0,105,110,110,101,114, 95,107,101,121, 91, 52, 93, 0,105, +110,110,101,114, 95,107,101,121, 95,115,101,108, 91, 52, 93, 0,105,110,110,101,114, 95,100,114,105,118,101,110, 91, 52, 93, 0, +105,110,110,101,114, 95,100,114,105,118,101,110, 95,115,101,108, 91, 52, 93, 0,119, 99,111,108, 95,114,101,103,117,108, 97,114, + 0,119, 99,111,108, 95,116,111,111,108, 0,119, 99,111,108, 95,116,101,120,116, 0,119, 99,111,108, 95,114, 97,100,105,111, 0, +119, 99,111,108, 95,111,112,116,105,111,110, 0,119, 99,111,108, 95,116,111,103,103,108,101, 0,119, 99,111,108, 95,110,117,109, + 0,119, 99,111,108, 95,110,117,109,115,108,105,100,101,114, 0,119, 99,111,108, 95,109,101,110,117, 0,119, 99,111,108, 95,112, +117,108,108,100,111,119,110, 0,119, 99,111,108, 95,109,101,110,117, 95, 98, 97, 99,107, 0,119, 99,111,108, 95,109,101,110,117, + 95,105,116,101,109, 0,119, 99,111,108, 95, 98,111,120, 0,119, 99,111,108, 95,115, 99,114,111,108,108, 0,119, 99,111,108, 95, +108,105,115,116, 95,105,116,101,109, 0,119, 99,111,108, 95,115,116, 97,116,101, 0,105, 99,111,110,102,105,108,101, 91, 56, 48, + 93, 0, 98, 97, 99,107, 91, 52, 93, 0,116,105,116,108,101, 91, 52, 93, 0,116,101,120,116, 95,104,105, 91, 52, 93, 0,104,101, + 97,100,101,114, 91, 52, 93, 0,104,101, 97,100,101,114, 95,116,105,116,108,101, 91, 52, 93, 0,104,101, 97,100,101,114, 95,116, +101,120,116, 91, 52, 93, 0,104,101, 97,100,101,114, 95,116,101,120,116, 95,104,105, 91, 52, 93, 0, 98,117,116,116,111,110, 91, + 52, 93, 0, 98,117,116,116,111,110, 95,116,105,116,108,101, 91, 52, 93, 0, 98,117,116,116,111,110, 95,116,101,120,116, 91, 52, + 93, 0, 98,117,116,116,111,110, 95,116,101,120,116, 95,104,105, 91, 52, 93, 0,108,105,115,116, 91, 52, 93, 0,108,105,115,116, + 95,116,105,116,108,101, 91, 52, 93, 0,108,105,115,116, 95,116,101,120,116, 91, 52, 93, 0,108,105,115,116, 95,116,101,120,116, + 95,104,105, 91, 52, 93, 0,112, 97,110,101,108, 91, 52, 93, 0,112, 97,110,101,108, 95,116,105,116,108,101, 91, 52, 93, 0,112, + 97,110,101,108, 95,116,101,120,116, 91, 52, 93, 0,112, 97,110,101,108, 95,116,101,120,116, 95,104,105, 91, 52, 93, 0,115,104, + 97,100,101, 49, 91, 52, 93, 0,115,104, 97,100,101, 50, 91, 52, 93, 0,104,105,108,105,116,101, 91, 52, 93, 0,103,114,105,100, + 91, 52, 93, 0,119,105,114,101, 91, 52, 93, 0,115,101,108,101, 99,116, 91, 52, 93, 0,108, 97,109,112, 91, 52, 93, 0, 97, 99, +116,105,118,101, 91, 52, 93, 0,103,114,111,117,112, 91, 52, 93, 0,103,114,111,117,112, 95, 97, 99,116,105,118,101, 91, 52, 93, + 0,116,114, 97,110,115,102,111,114,109, 91, 52, 93, 0,118,101,114,116,101,120, 91, 52, 93, 0,118,101,114,116,101,120, 95,115, +101,108,101, 99,116, 91, 52, 93, 0,101,100,103,101, 91, 52, 93, 0,101,100,103,101, 95,115,101,108,101, 99,116, 91, 52, 93, 0, +101,100,103,101, 95,115,101, 97,109, 91, 52, 93, 0,101,100,103,101, 95,115,104, 97,114,112, 91, 52, 93, 0,101,100,103,101, 95, +102, 97, 99,101,115,101,108, 91, 52, 93, 0,102, 97, 99,101, 91, 52, 93, 0,102, 97, 99,101, 95,115,101,108,101, 99,116, 91, 52, + 93, 0,102, 97, 99,101, 95,100,111,116, 91, 52, 93, 0,110,111,114,109, 97,108, 91, 52, 93, 0, 98,111,110,101, 95,115,111,108, +105,100, 91, 52, 93, 0, 98,111,110,101, 95,112,111,115,101, 91, 52, 93, 0,115,116,114,105,112, 91, 52, 93, 0,115,116,114,105, +112, 95,115,101,108,101, 99,116, 91, 52, 93, 0, 99,102,114, 97,109,101, 91, 52, 93, 0,100,115, 95, 99,104, 97,110,110,101,108, + 91, 52, 93, 0,100,115, 95,115,117, 98, 99,104, 97,110,110,101,108, 91, 52, 93, 0,118,101,114,116,101,120, 95,115,105,122,101, + 0,102, 97, 99,101,100,111,116, 95,115,105,122,101, 0, 98,112, 97,100, 91, 50, 93, 0,115,121,110,116, 97,120,108, 91, 52, 93, + 0,115,121,110,116, 97,120,110, 91, 52, 93, 0,115,121,110,116, 97,120, 98, 91, 52, 93, 0,115,121,110,116, 97,120,118, 91, 52, + 93, 0,115,121,110,116, 97,120, 99, 91, 52, 93, 0,109,111,118,105,101, 91, 52, 93, 0,105,109, 97,103,101, 91, 52, 93, 0,115, + 99,101,110,101, 91, 52, 93, 0, 97,117,100,105,111, 91, 52, 93, 0,101,102,102,101, 99,116, 91, 52, 93, 0,112,108,117,103,105, +110, 91, 52, 93, 0,116,114, 97,110,115,105,116,105,111,110, 91, 52, 93, 0,109,101,116, 97, 91, 52, 93, 0,101,100,105,116,109, +101,115,104, 95, 97, 99,116,105,118,101, 91, 52, 93, 0,104, 97,110,100,108,101, 95,118,101,114,116,101,120, 91, 52, 93, 0,104, + 97,110,100,108,101, 95,118,101,114,116,101,120, 95,115,101,108,101, 99,116, 91, 52, 93, 0,104, 97,110,100,108,101, 95,118,101, +114,116,101,120, 95,115,105,122,101, 0,104,112, 97,100, 91, 51, 93, 0,115,111,108,105,100, 91, 52, 93, 0,116,117,105, 0,116, + 98,117,116,115, 0,116,118, 51,100, 0,116,102,105,108,101, 0,116,105,112,111, 0,116,105,110,102,111, 0,116,115,110,100, 0, +116, 97, 99,116, 0,116,110,108, 97, 0,116,115,101,113, 0,116,105,109, 97, 0,116,105,109, 97,115,101,108, 0,116,101,120,116, + 0,116,111,111,112,115, 0,116,116,105,109,101, 0,116,110,111,100,101, 0,116,108,111,103,105, 99, 0,116,117,115,101,114,112, +114,101,102, 0,116, 97,114,109, 91, 50, 48, 93, 0, 97, 99,116,105,118,101, 95,116,104,101,109,101, 95,103,114,111,117,112, 0, +115,112,101, 99, 91, 52, 93, 0,100,117,112,102,108, 97,103, 0,115, 97,118,101,116,105,109,101, 0,116,101,109,112,100,105,114, + 91, 49, 54, 48, 93, 0,102,111,110,116,100,105,114, 91, 49, 54, 48, 93, 0,114,101,110,100,101,114,100,105,114, 91, 49, 54, 48, + 93, 0,116,101,120,116,117,100,105,114, 91, 49, 54, 48, 93, 0,112,108,117,103,116,101,120,100,105,114, 91, 49, 54, 48, 93, 0, +112,108,117,103,115,101,113,100,105,114, 91, 49, 54, 48, 93, 0,112,121,116,104,111,110,100,105,114, 91, 49, 54, 48, 93, 0,115, +111,117,110,100,100,105,114, 91, 49, 54, 48, 93, 0,121,102,101,120,112,111,114,116,100,105,114, 91, 49, 54, 48, 93, 0,118,101, +114,115,105,111,110,115, 0,103, 97,109,101,102,108, 97,103,115, 0,119,104,101,101,108,108,105,110,101,115, 99,114,111,108,108, + 0,117,105,102,108, 97,103, 0,108, 97,110,103,117, 97,103,101, 0,117,115,101,114,112,114,101,102, 0,118,105,101,119,122,111, +111,109, 0,109,105,120, 98,117,102,115,105,122,101, 0, 97,117,100,105,111,100,101,118,105, 99,101, 0, 97,117,100,105,111,114, + 97,116,101, 0, 97,117,100,105,111,102,111,114,109, 97,116, 0, 97,117,100,105,111, 99,104, 97,110,110,101,108,115, 0,100,112, +105, 0,101,110, 99,111,100,105,110,103, 0,116,114, 97,110,115,111,112,116,115, 0,109,101,110,117,116,104,114,101,115,104,111, +108,100, 49, 0,109,101,110,117,116,104,114,101,115,104,111,108,100, 50, 0,116,104,101,109,101,115, 0,117,105,102,111,110,116, +115, 0,117,105,115,116,121,108,101,115, 0,107,101,121,109, 97,112,115, 0,107,101,121, 99,111,110,102,105,103,115,116,114, 91, + 54, 52, 93, 0,117,110,100,111,115,116,101,112,115, 0,117,110,100,111,109,101,109,111,114,121, 0,103,112, 95,109, 97,110,104, + 97,116,116,101,110,100,105,115,116, 0,103,112, 95,101,117, 99,108,105,100,101, 97,110,100,105,115,116, 0,103,112, 95,101,114, + 97,115,101,114, 0,103,112, 95,115,101,116,116,105,110,103,115, 0,116, 98, 95,108,101,102,116,109,111,117,115,101, 0,116, 98, + 95,114,105,103,104,116,109,111,117,115,101, 0,108,105,103,104,116, 91, 51, 93, 0,116,119, 95,104,111,116,115,112,111,116, 0, +116,119, 95,102,108, 97,103, 0,116,119, 95,104, 97,110,100,108,101,115,105,122,101, 0,116,119, 95,115,105,122,101, 0,116,101, +120,116,105,109,101,111,117,116, 0,116,101,120, 99,111,108,108,101, 99,116,114, 97,116,101, 0,119,109,100,114, 97,119,109,101, +116,104,111,100, 0,119,109,112, 97,100, 0,109,101,109, 99, 97, 99,104,101,108,105,109,105,116, 0,112,114,101,102,101,116, 99, +104,102,114, 97,109,101,115, 0,102,114, 97,109,101,115,101,114,118,101,114,112,111,114,116, 0,112, 97,100, 95,114,111,116, 95, + 97,110,103,108,101, 0,111, 98, 99,101,110,116,101,114, 95,100,105, 97, 0,114,118,105,115,105,122,101, 0,114,118,105, 98,114, +105,103,104,116, 0,114,101, 99,101,110,116, 95,102,105,108,101,115, 0,115,109,111,111,116,104, 95,118,105,101,119,116,120, 0, +103,108,114,101,115,108,105,109,105,116, 0,110,100,111,102, 95,112, 97,110, 0,110,100,111,102, 95,114,111,116, 97,116,101, 0, + 99,117,114,115,115,105,122,101, 0,105,112,111, 95,110,101,119, 0,118,101,114,115,101,109, 97,115,116,101,114, 91, 49, 54, 48, + 93, 0,118,101,114,115,101,117,115,101,114, 91, 49, 54, 48, 93, 0,103,108, 97,108,112,104, 97, 99,108,105,112, 0, 99,111, 98, + 97, 95,119,101,105,103,104,116, 0,118,101,114,116, 98, 97,115,101, 0,101,100,103,101, 98, 97,115,101, 0, 97,114,101, 97, 98, + 97,115,101, 0, 42,110,101,119,115, 99,101,110,101, 0,102,117,108,108, 0,119,105,110,105,100, 0,100,111, 95,100,114, 97,119, + 0,100,111, 95,114,101,102,114,101,115,104, 0,100,111, 95,100,114, 97,119, 95,103,101,115,116,117,114,101, 0,100,111, 95,100, +114, 97,119, 95,112, 97,105,110,116, 99,117,114,115,111,114, 0,115,119, 97,112, 0,109, 97,105,110,119,105,110, 0,115,117, 98, +119,105,110, 97, 99,116,105,118,101, 0, 42, 97,110,105,109,116,105,109,101,114, 0, 42, 99,111,110,116,101,120,116, 0,104, 97, +110,100,108,101,114, 91, 56, 93, 0, 42,110,101,119,118, 0,118,101, 99, 0, 42,118, 49, 0, 42,118, 50, 0, 42,116,121,112,101, + 0,112, 97,110,101,108,110, 97,109,101, 91, 54, 52, 93, 0,116, 97, 98,110, 97,109,101, 91, 54, 52, 93, 0,100,114, 97,119,110, + 97,109,101, 91, 54, 52, 93, 0,111,102,115,120, 0,111,102,115,121, 0,115,105,122,101,120, 0,115,105,122,101,121, 0,108, 97, + 98,101,108,111,102,115, 0,114,117,110,116,105,109,101, 95,102,108, 97,103, 0, 99,111,110,116,114,111,108, 0,115,110, 97,112, + 0,115,111,114,116,111,114,100,101,114, 0, 42,112, 97,110,101,108,116, 97, 98, 0, 42, 97, 99,116,105,118,101,100, 97,116, 97, + 0,108,105,115,116, 95,115, 99,114,111,108,108, 0,108,105,115,116, 95,115,105,122,101, 0,108,105,115,116, 95,108, 97,115,116, + 95,108,101,110, 0,108,105,115,116, 95,103,114,105,112, 95,115,105,122,101, 0,108,105,115,116, 95,115,101, 97,114, 99,104, 91, + 54, 52, 93, 0, 42,118, 51, 0, 42,118, 52, 0, 42,102,117,108,108, 0, 98,117,116,115,112, 97, 99,101,116,121,112,101, 0,104, +101, 97,100,101,114,116,121,112,101, 0,115,112, 97, 99,101,100, 97,116, 97, 0,104, 97,110,100,108,101,114,115, 0, 97, 99,116, +105,111,110,122,111,110,101,115, 0,119,105,110,114, 99,116, 0,100,114, 97,119,114, 99,116, 0,115,119,105,110,105,100, 0,114, +101,103,105,111,110,116,121,112,101, 0, 97,108,105,103,110,109,101,110,116, 0,117,105, 98,108,111, 99,107,115, 0,112, 97,110, +101,108,115, 0, 42,104,101, 97,100,101,114,115,116,114, 0, 42,114,101,103,105,111,110,100, 97,116, 97, 0,115,117, 98,118,115, +116,114, 91, 52, 93, 0,115,117, 98,118,101,114,115,105,111,110, 0,112, 97,100,115, 0,109,105,110,118,101,114,115,105,111,110, + 0,109,105,110,115,117, 98,118,101,114,115,105,111,110, 0, 42, 99,117,114,115, 99,114,101,101,110, 0, 42, 99,117,114,115, 99, +101,110,101, 0,102,105,108,101,102,108, 97,103,115, 0,103,108,111, 98, 97,108,102, 0,110, 97,109,101, 91, 56, 48, 93, 0, 42, +105, 98,117,102, 0, 42,105, 98,117,102, 95, 99,111,109,112, 0, 42,115,101, 49, 0, 42,115,101, 50, 0, 42,115,101, 51, 0,110, +114, 0, 98,111,116,116,111,109, 0,114,105,103,104,116, 0,120,111,102,115, 0,121,111,102,115, 0,108,105,102,116, 91, 51, 93, + 0,103, 97,109,109, 97, 91, 51, 93, 0,103, 97,105,110, 91, 51, 93, 0,115, 97,116,117,114, 97,116,105,111,110, 0,100,105,114, + 91, 49, 54, 48, 93, 0,100,111,110,101, 0,115,116, 97,114,116,115,116,105,108,108, 0,101,110,100,115,116,105,108,108, 0, 42, +115,116,114,105,112,100, 97,116, 97, 0,111,114,120, 0,111,114,121, 0, 42, 99,114,111,112, 0, 42,116,114, 97,110,115,102,111, +114,109, 0, 42, 99,111,108,111,114, 95, 98, 97,108, 97,110, 99,101, 0, 42,116,115,116,114,105,112,100, 97,116, 97, 0, 42,116, +115,116,114,105,112,100, 97,116, 97, 95,115,116, 97,114,116,115,116,105,108,108, 0, 42,116,115,116,114,105,112,100, 97,116, 97, + 95,101,110,100,115,116,105,108,108, 0, 42,105, 98,117,102, 95,115,116, 97,114,116,115,116,105,108,108, 0, 42,105, 98,117,102, + 95,101,110,100,115,116,105,108,108, 0, 42,105,110,115,116, 97,110, 99,101, 95,112,114,105,118, 97,116,101, 95,100, 97,116, 97, + 0, 42, 42, 99,117,114,114,101,110,116, 95,112,114,105,118, 97,116,101, 95,100, 97,116, 97, 0, 42,116,109,112, 0,115,116, 97, +114,116,111,102,115, 0,101,110,100,111,102,115, 0,109, 97, 99,104,105,110,101, 0,115,116, 97,114,116,100,105,115,112, 0,101, +110,100,100,105,115,112, 0,104, 97,110,100,115,105,122,101, 0, 97,110,105,109, 95,112,114,101,115,101,101,107, 0, 42,115,116, +114,105,112, 0,102, 97, 99,102, 48, 0,102, 97, 99,102, 49, 0, 42,115,101,113, 49, 0, 42,115,101,113, 50, 0, 42,115,101,113, + 51, 0,115,101,113, 98, 97,115,101, 0, 42,115,111,117,110,100, 0, 42,115,111,117,110,100, 95,104, 97,110,100,108,101, 0,108, +101,118,101,108, 0,112, 97,110, 0,115, 99,101,110,101,110,114, 0,115,116,114,111, 98,101, 0, 42,101,102,102,101, 99,116,100, + 97,116, 97, 0, 97,110,105,109, 95,115,116, 97,114,116,111,102,115, 0, 97,110,105,109, 95,101,110,100,111,102,115, 0, 98,108, +101,110,100, 95,109,111,100,101, 0, 98,108,101,110,100, 95,111,112, 97, 99,105,116,121, 0, 42,111,108,100, 98, 97,115,101,112, + 0, 42,112, 97,114,115,101,113, 0, 42,115,101,113, 98, 97,115,101,112, 0,109,101,116, 97,115,116, 97, 99,107, 0, 42, 97, 99, +116, 95,115,101,113, 0, 97, 99,116, 95,105,109, 97,103,101,100,105,114, 91, 50, 53, 54, 93, 0, 97, 99,116, 95,115,111,117,110, +100,100,105,114, 91, 50, 53, 54, 93, 0,101,100,103,101, 87,105,100,116,104, 0,102,111,114,119, 97,114,100, 0,119,105,112,101, +116,121,112,101, 0,102, 77,105,110,105, 0,102, 67,108, 97,109,112, 0,102, 66,111,111,115,116, 0,100, 68,105,115,116, 0,100, + 81,117, 97,108,105,116,121, 0, 98, 78,111, 67,111,109,112, 0, 83, 99, 97,108,101,120, 73,110,105, 0, 83, 99, 97,108,101,121, + 73,110,105, 0, 83, 99, 97,108,101,120, 70,105,110, 0, 83, 99, 97,108,101,121, 70,105,110, 0,120, 73,110,105, 0,120, 70,105, +110, 0,121, 73,110,105, 0,121, 70,105,110, 0,114,111,116, 73,110,105, 0,114,111,116, 70,105,110, 0,105,110,116,101,114,112, +111,108, 97,116,105,111,110, 0, 42,102,114, 97,109,101, 77, 97,112, 0,103,108,111, 98, 97,108, 83,112,101,101,100, 0,108, 97, +115,116, 86, 97,108,105,100, 70,114, 97,109,101, 0, 98,117,116,116,121,112,101, 0,117,115,101,114,106,105,116, 0,115,116, 97, + 0,116,111,116,112, 97,114,116, 0,110,111,114,109,102, 97, 99, 0,111, 98,102, 97, 99, 0,114, 97,110,100,102, 97, 99, 0,116, +101,120,102, 97, 99, 0,114, 97,110,100,108,105,102,101, 0,102,111,114, 99,101, 91, 51, 93, 0,118,101, 99,116,115,105,122,101, + 0,109, 97,120,108,101,110, 0,100,101,102,118,101, 99, 91, 51, 93, 0,109,117,108,116, 91, 52, 93, 0,108,105,102,101, 91, 52, + 93, 0, 99,104,105,108,100, 91, 52, 93, 0,109, 97,116, 91, 52, 93, 0,116,101,120,109, 97,112, 0, 99,117,114,109,117,108,116, + 0,115,116, 97,116,105, 99,115,116,101,112, 0,111,109, 97,116, 0,116,105,109,101,116,101,120, 0,115,112,101,101,100,116,101, +120, 0,102,108, 97,103, 50,110,101,103, 0,118,101,114,116,103,114,111,117,112, 95,118, 0,118,103,114,111,117,112,110, 97,109, +101, 91, 51, 50, 93, 0,118,103,114,111,117,112,110, 97,109,101, 95,118, 91, 51, 50, 93, 0, 42,107,101,121,115, 0,109,105,110, +102, 97, 99, 0,117,115,101,100, 0,117,115,101,100,101,108,101,109, 0, 42,112,111,105,110, 0,114,101,115,101,116,100,105,115, +116, 0,108, 97,115,116,118, 97,108, 0, 42,109, 97, 0,107,101,121, 0,113,117, 97,108, 0,113,117, 97,108, 50, 0,116, 97,114, +103,101,116, 78, 97,109,101, 91, 51, 50, 93, 0,116,111,103,103,108,101, 78, 97,109,101, 91, 51, 50, 93, 0,118, 97,108,117,101, + 91, 51, 50, 93, 0,109, 97,120,118, 97,108,117,101, 91, 51, 50, 93, 0,100,101,108, 97,121, 0,100,117,114, 97,116,105,111,110, + 0,109, 97,116,101,114,105, 97,108, 78, 97,109,101, 91, 51, 50, 93, 0,100, 97,109,112,116,105,109,101,114, 0,112,114,111,112, +110, 97,109,101, 91, 51, 50, 93, 0,109, 97,116,110, 97,109,101, 91, 51, 50, 93, 0, 97,120,105,115,102,108, 97,103, 0,112,111, +115,101, 99,104, 97,110,110,101,108, 91, 51, 50, 93, 0, 99,111,110,115,116,114, 97,105,110,116, 91, 51, 50, 93, 0, 42,102,114, +111,109, 79, 98,106,101, 99,116, 0,115,117, 98,106,101, 99,116, 91, 51, 50, 93, 0, 98,111,100,121, 91, 51, 50, 93, 0,111,116, +121,112,101, 0,112,117,108,115,101, 0,102,114,101,113, 0,116,111,116,108,105,110,107,115, 0, 42, 42,108,105,110,107,115, 0, +116, 97,112, 0,106,111,121,105,110,100,101,120, 0, 97,120,105,115, 95,115,105,110,103,108,101, 0, 97,120,105,115,102, 0, 98, +117,116,116,111,110, 0,104, 97,116, 0,104, 97,116,102, 0,112,114,101, 99,105,115,105,111,110, 0,115,116,114, 91, 49, 50, 56, + 93, 0,109,111,100,117,108,101, 91, 54, 52, 93, 0, 42,109,121,110,101,119, 0,105,110,112,117,116,115, 0,116,111,116,115,108, +105,110,107,115, 0, 42, 42,115,108,105,110,107,115, 0,118, 97,108,111, 0,115,116, 97,116,101, 95,109, 97,115,107, 0, 42, 97, + 99,116, 0,102,114, 97,109,101, 80,114,111,112, 91, 51, 50, 93, 0, 98,108,101,110,100,105,110, 0,112,114,105,111,114,105,116, +121, 0,101,110,100, 95,114,101,115,101,116, 0,115,116,114,105,100,101, 97,120,105,115, 0,115,116,114,105,100,101,108,101,110, +103,116,104, 0,115,110,100,110,114, 0,112, 97,100, 49, 91, 50, 93, 0,112,105,116, 99,104, 0,115,111,117,110,100, 51, 68, 0, +109, 97,107,101, 99,111,112,121, 0, 99,111,112,121,109, 97,100,101, 0,112, 97,100, 50, 91, 49, 93, 0, 42,109,101, 0,108,105, +110, 86,101,108,111, 99,105,116,121, 91, 51, 93, 0, 97,110,103, 86,101,108,111, 99,105,116,121, 91, 51, 93, 0,108,111, 99, 97, +108,102,108, 97,103, 0,100,121,110, 95,111,112,101,114, 97,116,105,111,110, 0,102,111,114, 99,101,108,111, 99, 91, 51, 93, 0, +102,111,114, 99,101,114,111,116, 91, 51, 93, 0,108,105,110,101, 97,114,118,101,108,111, 99,105,116,121, 91, 51, 93, 0, 97,110, +103,117,108, 97,114,118,101,108,111, 99,105,116,121, 91, 51, 93, 0, 42,114,101,102,101,114,101,110, 99,101, 0, 98,117,116,115, +116, 97, 0, 98,117,116,101,110,100, 0,109,105,110, 0,109, 97,120, 0,118,105,115,105,102, 97, 99, 0,114,111,116,100, 97,109, +112, 0,109,105,110,108,111, 99, 91, 51, 93, 0,109, 97,120,108,111, 99, 91, 51, 93, 0,109,105,110,114,111,116, 91, 51, 93, 0, +109, 97,120,114,111,116, 91, 51, 93, 0,109, 97,116,112,114,111,112, 91, 51, 50, 93, 0,100,105,115,116,114,105, 98,117,116,105, +111,110, 0,105,110,116, 95, 97,114,103, 95, 49, 0,105,110,116, 95, 97,114,103, 95, 50, 0,102,108,111, 97,116, 95, 97,114,103, + 95, 49, 0,102,108,111, 97,116, 95, 97,114,103, 95, 50, 0,116,111, 80,114,111,112, 78, 97,109,101, 91, 51, 50, 93, 0, 42,116, +111, 79, 98,106,101, 99,116, 0, 98,111,100,121, 84,121,112,101, 0,102,105,108,101,110, 97,109,101, 91, 54, 52, 93, 0,108,111, + 97,100, 97,110,105,110, 97,109,101, 91, 54, 52, 93, 0,105,110,116, 95, 97,114,103, 0,102,108,111, 97,116, 95, 97,114,103, 0, + 42,115,117, 98,116, 97,114,103,101,116, 0,103,111, 0, 97, 99, 99,101,108,108,101,114, 97,116,105,111,110, 0,109, 97,120,115, +112,101,101,100, 0,109, 97,120,114,111,116,115,112,101,101,100, 0,109, 97,120,116,105,108,116,115,112,101,101,100, 0,116,105, +108,116,100, 97,109,112, 0,115,112,101,101,100,100, 97,109,112, 0, 42,115,111,117,114, 99,101, 0,102,114, 97,109,101,115,107, +105,112, 0,109,117,116,101, 0, 99,104, 97,110,103,101,100, 0,109,105,110, 95,103, 97,105,110, 0,109, 97,120, 95,103, 97,105, +110, 0,114,101,102,101,114,101,110, 99,101, 95,100,105,115,116, 97,110, 99,101, 0,109, 97,120, 95,100,105,115,116, 97,110, 99, +101, 0,114,111,108,108,111,102,102, 95,102, 97, 99,116,111,114, 0, 99,111,110,101, 95,105,110,110,101,114, 95, 97,110,103,108, +101, 0, 99,111,110,101, 95,111,117,116,101,114, 95, 97,110,103,108,101, 0, 99,111,110,101, 95,111,117,116,101,114, 95,103, 97, +105,110, 0, 42,110,101,119,112, 97, 99,107,101,100,102,105,108,101, 0, 97,116,116,101,110,117, 97,116,105,111,110, 0,100,105, +115,116, 97,110, 99,101, 0, 42, 99, 97, 99,104,101, 0, 42, 97,114,101, 97, 0, 42,108, 97,109,112,114,101,110, 0,103,111, 98, +106,101, 99,116, 0,100,117,112,108,105, 95,111,102,115, 91, 51, 93, 0, 42,112,114,111,112, 0, 99,104,105,108,100, 98, 97,115, +101, 0,114,111,108,108, 0,104,101, 97,100, 91, 51, 93, 0,116, 97,105,108, 91, 51, 93, 0, 98,111,110,101, 95,109, 97,116, 91, + 51, 93, 91, 51, 93, 0, 97,114,109, 95,104,101, 97,100, 91, 51, 93, 0, 97,114,109, 95,116, 97,105,108, 91, 51, 93, 0, 97,114, +109, 95,109, 97,116, 91, 52, 93, 91, 52, 93, 0,120,119,105,100,116,104, 0,122,119,105,100,116,104, 0,101, 97,115,101, 49, 0, +101, 97,115,101, 50, 0,114, 97,100, 95,104,101, 97,100, 0,114, 97,100, 95,116, 97,105,108, 0, 98,111,110,101, 98, 97,115,101, + 0, 99,104, 97,105,110, 98, 97,115,101, 0, 42,101,100, 98,111, 0, 42,115,107,101,116, 99,104, 0,108, 97,121,101,114, 95,112, +114,111,116,101, 99,116,101,100, 0,103,104,111,115,116,101,112, 0,103,104,111,115,116,115,105,122,101, 0,103,104,111,115,116, +116,121,112,101, 0,112, 97,116,104,115,105,122,101, 0,103,104,111,115,116,115,102, 0,103,104,111,115,116,101,102, 0,112, 97, +116,104,115,102, 0,112, 97,116,104,101,102, 0,112, 97,116,104, 98, 99, 0,112, 97,116,104, 97, 99, 0, 42,112,111,105,110,116, +115, 0,115,116, 97,114,116, 95,102,114, 97,109,101, 0,101,110,100, 95,102,114, 97,109,101, 0, 99,111,110,115,116,102,108, 97, +103, 0,105,107,102,108, 97,103, 0,115,101,108,101, 99,116,102,108, 97,103, 0, 97,103,114,112, 95,105,110,100,101,120, 0, 42, + 98,111,110,101, 0, 42, 99,104,105,108,100, 0,105,107,116,114,101,101, 0, 42, 98, 95, 98,111,110,101, 95,109, 97,116,115, 0, + 42,100,117, 97,108, 95,113,117, 97,116, 0, 42, 98, 95, 98,111,110,101, 95,100,117, 97,108, 95,113,117, 97,116,115, 0,101,117, +108, 91, 51, 93, 0, 99,104, 97,110, 95,109, 97,116, 91, 52, 93, 91, 52, 93, 0,112,111,115,101, 95,109, 97,116, 91, 52, 93, 91, + 52, 93, 0,112,111,115,101, 95,104,101, 97,100, 91, 51, 93, 0,112,111,115,101, 95,116, 97,105,108, 91, 51, 93, 0,108,105,109, +105,116,109,105,110, 91, 51, 93, 0,108,105,109,105,116,109, 97,120, 91, 51, 93, 0,115,116,105,102,102,110,101,115,115, 91, 51, + 93, 0,105,107,115,116,114,101,116, 99,104, 0,105,107,114,111,116,119,101,105,103,104,116, 0,105,107,108,105,110,119,101,105, +103,104,116, 0, 42, 99,117,115,116,111,109, 0, 99,104, 97,110, 98, 97,115,101, 0,112,114,111,120,121, 95,108, 97,121,101,114, + 0,115,116,114,105,100,101, 95,111,102,102,115,101,116, 91, 51, 93, 0, 99,121, 99,108,105, 99, 95,111,102,102,115,101,116, 91, + 51, 93, 0, 97,103,114,111,117,112,115, 0, 97, 99,116,105,118,101, 95,103,114,111,117,112, 0,105,107,115,111,108,118,101,114, + 0, 42,105,107,100, 97,116, 97, 0, 42,105,107,112, 97,114, 97,109, 0,110,117,109,105,116,101,114, 0,110,117,109,115,116,101, +112, 0,109,105,110,115,116,101,112, 0,109, 97,120,115,116,101,112, 0,115,111,108,118,101,114, 0,102,101,101,100, 98, 97, 99, +107, 0,109, 97,120,118,101,108, 0,100, 97,109,112,109, 97,120, 0,100, 97,109,112,101,112,115, 0, 99,104, 97,110,110,101,108, +115, 0, 99,117,115,116,111,109, 67,111,108, 0, 99,115, 0, 99,117,114,118,101,115, 0,103,114,111,117,112,115, 0, 97, 99,116, +105,118,101, 95,109, 97,114,107,101,114, 0,102,105,108,116,101,114,102,108, 97,103, 0, 97,100,115, 0, 97, 99,116,110,114, 0, + 97, 99,116,119,105,100,116,104, 0,116,105,109,101,115,108,105,100,101, 0, 42,103,114,112, 0,116,101,109,112, 0,110, 97,109, +101, 91, 51, 48, 93, 0,111,119,110,115,112, 97, 99,101, 0,116, 97,114,115,112, 97, 99,101, 0,101,110,102,111,114, 99,101, 0, +104,101, 97,100,116, 97,105,108, 0,108,105,110, 95,101,114,114,111,114, 0,114,111,116, 95,101,114,114,111,114, 0, 42,116, 97, +114, 0,109, 97,116,114,105,120, 91, 52, 93, 91, 52, 93, 0,115,112, 97, 99,101, 0,114,111,116, 79,114,100,101,114, 0,116, 97, +114,110,117,109, 0,116, 97,114,103,101,116,115, 0,105,116,101,114, 97,116,105,111,110,115, 0,114,111,111,116, 98,111,110,101, + 0,109, 97,120, 95,114,111,111,116, 98,111,110,101, 0, 42,112,111,108,101,116, 97,114, 0,112,111,108,101,115,117, 98,116, 97, +114,103,101,116, 91, 51, 50, 93, 0,112,111,108,101, 97,110,103,108,101, 0,111,114,105,101,110,116,119,101,105,103,104,116, 0, +103,114, 97, 98,116, 97,114,103,101,116, 91, 51, 93, 0,110,117,109,112,111,105,110,116,115, 0, 99,104, 97,105,110,108,101,110, + 0,120,122, 83, 99, 97,108,101, 77,111,100,101, 0,114,101,115,101,114,118,101,100, 49, 0,114,101,115,101,114,118,101,100, 50, + 0,109,105,110,109, 97,120,102,108, 97,103, 0,115,116,117, 99,107, 0, 99, 97, 99,104,101, 91, 51, 93, 0,108,111, 99,107,102, +108, 97,103, 0,102,111,108,108,111,119,102,108, 97,103, 0,118,111,108,109,111,100,101, 0,112,108, 97,110,101, 0,111,114,103, +108,101,110,103,116,104, 0, 98,117,108,103,101, 0,112,105,118, 88, 0,112,105,118, 89, 0,112,105,118, 90, 0, 97,120, 88, 0, + 97,120, 89, 0, 97,120, 90, 0,109,105,110, 76,105,109,105,116, 91, 54, 93, 0,109, 97,120, 76,105,109,105,116, 91, 54, 93, 0, +101,120,116,114, 97, 70,122, 0,105,110,118,109, 97,116, 91, 52, 93, 91, 52, 93, 0,102,114,111,109, 0,116,111, 0,109, 97,112, + 91, 51, 93, 0,101,120,112,111, 0,102,114,111,109, 95,109,105,110, 91, 51, 93, 0,102,114,111,109, 95,109, 97,120, 91, 51, 93, + 0,116,111, 95,109,105,110, 91, 51, 93, 0,116,111, 95,109, 97,120, 91, 51, 93, 0,122,109,105,110, 0,122,109, 97,120, 0,112, + 97,100, 91, 57, 93, 0, 99,104, 97,110,110,101,108, 91, 51, 50, 93, 0,110,111, 95,114,111,116, 95, 97,120,105,115, 0,115,116, +114,105,100,101, 95, 97,120,105,115, 0, 99,117,114,109,111,100, 0, 97, 99,116,115,116, 97,114,116, 0, 97, 99,116,101,110,100, + 0, 97, 99,116,111,102,102,115, 0,115,116,114,105,100,101,108,101,110, 0,115, 99, 97,108,101, 0, 98,108,101,110,100,111,117, +116, 0,115,116,114,105,100,101, 99,104, 97,110,110,101,108, 91, 51, 50, 93, 0,111,102,102,115, 95, 98,111,110,101, 91, 51, 50, + 93, 0,104, 97,115,105,110,112,117,116, 0,104, 97,115,111,117,116,112,117,116, 0,100, 97,116, 97,116,121,112,101, 0,115,111, + 99,107,101,116,116,121,112,101, 0, 42,110,101,119, 95,115,111, 99,107, 0,110,115, 0,108,105,109,105,116, 0,115,116, 97, 99, +107, 95,105,110,100,101,120, 0,105,110,116,101,114,110, 0,115,116, 97, 99,107, 95,105,110,100,101,120, 95,101,120,116, 0,108, +111, 99,120, 0,108,111, 99,121, 0,111,119,110, 95,105,110,100,101,120, 0,116,111, 95,105,110,100,101,120, 0, 42,116,111,115, +111, 99,107, 0, 42,108,105,110,107, 0, 42,110,101,119, 95,110,111,100,101, 0,117,115,101,114,110, 97,109,101, 91, 51, 50, 93, + 0,108, 97,115,116,121, 0,111,117,116,112,117,116,115, 0, 42,115,116,111,114, 97,103,101, 0,109,105,110,105,119,105,100,116, +104, 0, 99,117,115,116,111,109, 49, 0, 99,117,115,116,111,109, 50, 0, 99,117,115,116,111,109, 51, 0, 99,117,115,116,111,109, + 52, 0,110,101,101,100, 95,101,120,101, 99, 0,101,120,101, 99, 0, 42,116,104,114,101, 97,100,100, 97,116, 97, 0,116,111,116, +114, 0, 98,117,116,114, 0,112,114,118,114, 0, 42, 98,108,111, 99,107, 0, 42,116,121,112,101,105,110,102,111, 0, 42,102,114, +111,109,110,111,100,101, 0, 42,116,111,110,111,100,101, 0, 42,102,114,111,109,115,111, 99,107, 0,110,111,100,101,115, 0,108, +105,110,107,115, 0, 42,115,116, 97, 99,107, 0, 42,116,104,114,101, 97,100,115,116, 97, 99,107, 0,105,110,105,116, 0,115,116, + 97, 99,107,115,105,122,101, 0, 99,117,114, 95,105,110,100,101,120, 0, 97,108,108,116,121,112,101,115, 0, 42,111,119,110,116, +121,112,101, 0, 42,115,101,108,105,110, 0, 42,115,101,108,111,117,116, 0, 40, 42,116,105,109,101, 99,117,114,115,111,114, 41, + 40, 41, 0, 40, 42,115,116, 97,116,115, 95,100,114, 97,119, 41, 40, 41, 0, 40, 42,116,101,115,116, 95, 98,114,101, 97,107, 41, + 40, 41, 0, 42,116, 98,104, 0, 42,116, 99,104, 0, 42,115,100,104, 0, 99,121, 99,108,105, 99, 0,109,111,118,105,101, 0,115, + 97,109,112,108,101,115, 0,109,105,110,115,112,101,101,100, 0,112,101,114, 99,101,110,116,120, 0,112,101,114, 99,101,110,116, +121, 0, 98,111,107,101,104, 0, 99,117,114,118,101,100, 0,105,109, 97,103,101, 95,105,110, 95,119,105,100,116,104, 0,105,109, + 97,103,101, 95,105,110, 95,104,101,105,103,104,116, 0, 99,101,110,116,101,114, 95,120, 0, 99,101,110,116,101,114, 95,121, 0, +115,112,105,110, 0,105,116,101,114, 0,119,114, 97,112, 0,115,105,103,109, 97, 95, 99,111,108,111,114, 0,115,105,103,109, 97, + 95,115,112, 97, 99,101, 0,104,117,101, 0,115, 97,116, 0,116, 49, 0,116, 50, 0,116, 51, 0,102,115,116,114,101,110,103,116, +104, 0,102, 97,108,112,104, 97, 0,107,101,121, 91, 52, 93, 0,120, 49, 0,120, 50, 0,121, 49, 0,121, 50, 0, 99,111,108,110, + 97,109,101, 91, 51, 50, 93, 0, 98,107,116,121,112,101, 0,114,111,116, 97,116,105,111,110, 0,103, 97,109, 99,111, 0,110,111, + 95,122, 98,117,102, 0,102,115,116,111,112, 0,109, 97,120, 98,108,117,114, 0, 98,116,104,114,101,115,104, 0, 42,100,105, 99, +116, 0, 42,110,111,100,101, 0, 97,110,103,108,101, 95,111,102,115, 0, 99,111,108,109,111,100, 0,109,105,120, 0,116,104,114, +101,115,104,111,108,100, 0,102, 97,100,101, 0,109, 0, 99, 0,106,105,116, 0,112,114,111,106, 0,102,105,116, 0,115,104,111, +114,116,121, 0,109,105,110,116, 97, 98,108,101, 0,109, 97,120,116, 97, 98,108,101, 0,101,120,116, 95,105,110, 91, 50, 93, 0, +101,120,116, 95,111,117,116, 91, 50, 93, 0, 42, 99,117,114,118,101, 0, 42,116, 97, 98,108,101, 0, 42,112,114,101,109,117,108, +116, 97, 98,108,101, 0, 99,117,114,114, 0, 99,108,105,112,114, 0, 99,109, 91, 52, 93, 0, 98,108, 97, 99,107, 91, 51, 93, 0, +119,104,105,116,101, 91, 51, 93, 0, 98,119,109,117,108, 91, 51, 93, 0,115, 97,109,112,108,101, 91, 51, 93, 0,111,102,102,115, +101,116, 91, 50, 93, 0, 99,108,111,110,101, 0,106,105,116,116,101,114, 0,115,109,111,111,116,104, 95,115,116,114,111,107,101, + 95,114, 97,100,105,117,115, 0,115,109,111,111,116,104, 95,115,116,114,111,107,101, 95,102, 97, 99,116,111,114, 0,114, 97,116, +101, 0,114,103, 98, 91, 51, 93, 0,115, 99,117,108,112,116, 95,116,111,111,108, 0, 97, 99,116,105,118,101, 95,114,110,100, 0, + 97, 99,116,105,118,101, 95, 99,108,111,110,101, 0, 97, 99,116,105,118,101, 95,109, 97,115,107, 0, 42,108, 97,121,101,114,115, + 0,116,111,116,108, 97,121,101,114, 0,109, 97,120,108, 97,121,101,114, 0,116,111,116,115,105,122,101, 0, 42,112,111,111,108, + 0,118,101,108, 91, 51, 93, 0,114,111,116, 91, 52, 93, 0, 97,118,101, 91, 51, 93, 0, 42,103,114,111,117,110,100, 0,119, 97, +110,100,101,114, 91, 51, 93, 0,110,117,109, 0,112, 97,114,101,110,116, 0,112, 97, 91, 52, 93, 0,119, 91, 52, 93, 0,102,117, +118, 91, 52, 93, 0,102,111,102,102,115,101,116, 0,114,116, 91, 50, 93, 0,112,114,101,118, 95,115,116, 97,116,101, 0, 42,104, + 97,105,114, 0, 42, 98,111,105,100, 0,100,105,101,116,105,109,101, 0,110,117,109, 95,100,109, 99, 97, 99,104,101, 0, 97,108, +105,118,101, 0,108,111,111,112, 0,104, 97,105,114, 95,105,110,100,101,120, 0, 42, 98,111,105,100,115, 0,100,105,115,116,114, + 0,112,104,121,115,116,121,112,101, 0, 97,118,101,109,111,100,101, 0,114,101, 97, 99,116,101,118,101,110,116, 0,100,114, 97, +119, 0,100,114, 97,119, 95, 97,115, 0,100,114, 97,119, 95,115,105,122,101, 0, 99,104,105,108,100,116,121,112,101, 0,114,101, +110, 95, 97,115, 0,114,101,110, 95,115,116,101,112, 0,104, 97,105,114, 95,115,116,101,112, 0,107,101,121,115, 95,115,116,101, +112, 0, 97,100, 97,112,116, 95, 97,110,103,108,101, 0, 97,100, 97,112,116, 95,112,105,120, 0,114,111,116,102,114,111,109, 0, +105,110,116,101,103,114, 97,116,111,114, 0, 98, 98, 95, 97,108,105,103,110, 0, 98, 98, 95,117,118, 95,115,112,108,105,116, 0, + 98, 98, 95, 97,110,105,109, 0, 98, 98, 95,115,112,108,105,116, 95,111,102,102,115,101,116, 0, 98, 98, 95,116,105,108,116, 0, + 98, 98, 95,114, 97,110,100, 95,116,105,108,116, 0, 98, 98, 95,111,102,102,115,101,116, 91, 50, 93, 0,115,105,109,112,108,105, +102,121, 95,102,108, 97,103, 0,115,105,109,112,108,105,102,121, 95,114,101,102,115,105,122,101, 0,115,105,109,112,108,105,102, +121, 95,114, 97,116,101, 0,115,105,109,112,108,105,102,121, 95,116,114, 97,110,115,105,116,105,111,110, 0,115,105,109,112,108, +105,102,121, 95,118,105,101,119,112,111,114,116, 0,116,105,109,101,116,119,101, 97,107, 0,106,105,116,102, 97, 99, 0,101,102, +102, 95,104, 97,105,114, 0,103,114,105,100, 95,114,101,115, 0,112, 97,114,116,102, 97, 99, 0,116, 97,110,102, 97, 99, 0,116, + 97,110,112,104, 97,115,101, 0,114,101, 97, 99,116,102, 97, 99, 0,111, 98, 95,118,101,108, 91, 51, 93, 0, 97,118,101,102, 97, + 99, 0,112,104, 97,115,101,102, 97, 99, 0,114, 97,110,100,114,111,116,102, 97, 99, 0,114, 97,110,100,112,104, 97,115,101,102, + 97, 99, 0,114, 97,110,100,115,105,122,101, 0,114,101, 97, 99,116,115,104, 97,112,101, 0, 97, 99, 99, 91, 51, 93, 0,100,114, + 97,103,102, 97, 99, 0, 98,114,111,119,110,102, 97, 99, 0,100, 97,109,112,102, 97, 99, 0,114, 97,110,100,108,101,110,103,116, +104, 0, 99,104,105,108,100, 95,110, 98,114, 0,114,101,110, 95, 99,104,105,108,100, 95,110, 98,114, 0,112, 97,114,101,110,116, +115, 0, 99,104,105,108,100,115,105,122,101, 0, 99,104,105,108,100,114, 97,110,100,115,105,122,101, 0, 99,104,105,108,100,114, + 97,100, 0, 99,104,105,108,100,102,108, 97,116, 0, 99,108,117,109,112,112,111,119, 0,114,111,117,103,104, 49, 0,114,111,117, +103,104, 49, 95,115,105,122,101, 0,114,111,117,103,104, 50, 0,114,111,117,103,104, 50, 95,115,105,122,101, 0,114,111,117,103, +104, 50, 95,116,104,114,101,115, 0,114,111,117,103,104, 95,101,110,100, 0,114,111,117,103,104, 95,101,110,100, 95,115,104, 97, +112,101, 0, 99,108,101,110,103,116,104, 0, 99,108,101,110,103,116,104, 95,116,104,114,101,115, 0, 98,114, 97,110, 99,104, 95, +116,104,114,101,115, 0,100,114, 97,119, 95,108,105,110,101, 91, 50, 93, 0,112, 97,116,104, 95,115,116, 97,114,116, 0,112, 97, +116,104, 95,101,110,100, 0,116,114, 97,105,108, 95, 99,111,117,110,116, 0,107,101,121,101,100, 95,108,111,111,112,115, 0,100, +117,112,108,105,119,101,105,103,104,116,115, 0, 42,101,102,102, 95,103,114,111,117,112, 0, 42,100,117,112, 95,111, 98, 0, 42, + 98, 98, 95,111, 98, 0, 42,112,100, 50, 0, 42,112, 97,114,116, 0, 42,112, 97,114,116,105, 99,108,101,115, 0, 42, 42,112, 97, +116,104, 99, 97, 99,104,101, 0, 42, 42, 99,104,105,108,100, 99, 97, 99,104,101, 0,112, 97,116,104, 99, 97, 99,104,101, 98,117, +102,115, 0, 99,104,105,108,100, 99, 97, 99,104,101, 98,117,102,115, 0, 42, 99,108,109,100, 0, 42,104, 97,105,114, 95,105,110, + 95,100,109, 0, 42,104, 97,105,114, 95,111,117,116, 95,100,109, 0, 42,116, 97,114,103,101,116, 95,111, 98, 0, 42,108, 97,116, +116,105, 99,101, 0,116,114,101,101, 95,102,114, 97,109,101, 0,116,111,116, 99,104,105,108,100, 0,116,111,116, 99, 97, 99,104, +101,100, 0,116,111,116, 99,104,105,108,100, 99, 97, 99,104,101, 0,116, 97,114,103,101,116, 95,112,115,121,115, 0,116,111,116, +107,101,121,101,100, 0, 98, 97,107,101,115,112, 97, 99,101, 0, 98, 98, 95,117,118,110, 97,109,101, 91, 51, 93, 91, 51, 50, 93, + 0,118,103,114,111,117,112, 91, 49, 50, 93, 0,118,103, 95,110,101,103, 0,114,116, 51, 0, 42,114,101,110,100,101,114,100, 97, +116, 97, 0, 42,101,102,102,101, 99,116,111,114,115, 0, 42,116,114,101,101, 0, 42,112,100,100, 0, 42,102,114, 97,110,100, 0, + 67,100,105,115, 0, 67,118,105, 0, 91, 51, 93, 0,115,116,114,117, 99,116,117,114, 97,108, 0, 98,101,110,100,105,110,103, 0, +109, 97,120, 95, 98,101,110,100, 0,109, 97,120, 95,115,116,114,117, 99,116, 0,109, 97,120, 95,115,104,101, 97,114, 0, 97,118, +103, 95,115,112,114,105,110,103, 95,108,101,110, 0,116,105,109,101,115, 99, 97,108,101, 0,101,102,102, 95,102,111,114, 99,101, + 95,115, 99, 97,108,101, 0,101,102,102, 95,119,105,110,100, 95,115, 99, 97,108,101, 0,115,105,109, 95,116,105,109,101, 95,111, +108,100, 0,118,101,108,111, 99,105,116,121, 95,115,109,111,111,116,104, 0,115,116,101,112,115, 80,101,114, 70,114, 97,109,101, + 0,112,114,101,114,111,108,108, 0,109, 97,120,115,112,114,105,110,103,108,101,110, 0,115,111,108,118,101,114, 95,116,121,112, +101, 0,118,103,114,111,117,112, 95, 98,101,110,100, 0,118,103,114,111,117,112, 95,109, 97,115,115, 0,118,103,114,111,117,112, + 95,115,116,114,117, 99,116, 0,112,114,101,115,101,116,115, 0, 42, 99,111,108,108,105,115,105,111,110, 95,108,105,115,116, 0, +101,112,115,105,108,111,110, 0,115,101,108,102, 95,102,114,105, 99,116,105,111,110, 0,115,101,108,102,101,112,115,105,108,111, +110, 0,115,101,108,102, 95,108,111,111,112, 95, 99,111,117,110,116, 0,108,111,111,112, 95, 99,111,117,110,116, 0,112,114,101, +115,115,117,114,101, 0,116,104,105, 99,107,110,101,115,115, 0,115,116,114,111,107,101,115, 0,102,114, 97,109,101,110,117,109, + 0, 42, 97, 99,116,102,114, 97,109,101, 0,103,115,116,101,112, 0,105,110,102,111, 91, 49, 50, 56, 93, 0,115, 98,117,102,102, +101,114, 95,115,105,122,101, 0,115, 98,117,102,102,101,114, 95,115,102,108, 97,103, 0, 42,115, 98,117,102,102,101,114, 0, 42, +116,121,112,101,115,116,114, 0, 42,109,101,115,115, 97,103,101, 0,108,105,115,116, 0,112,114,105,110,116,108,101,118,101,108, + 0,115,116,111,114,101,108,101,118,101,108, 0, 42,119,105,110,100,114, 97,119, 97, 98,108,101, 0, 42,119,105,110, 97, 99,116, +105,118,101, 0,119,105,110,100,111,119,115, 0,105,110,105,116,105, 97,108,105,122,101,100, 0,102,105,108,101, 95,115, 97,118, +101,100, 0,111,112,101,114, 97,116,111,114,115, 0,113,117,101,117,101, 0,114,101,112,111,114,116,115, 0,106,111, 98,115, 0, +112, 97,105,110,116, 99,117,114,115,111,114,115, 0,107,101,121, 99,111,110,102,105,103,115, 0, 42,100,101,102, 97,117,108,116, + 99,111,110,102, 0,100,101,102, 97,117,108,116, 97, 99,116,109, 97,112, 0,116,105,109,101,114,115, 0, 42, 97,117,116,111,115, + 97,118,101,116,105,109,101,114, 0, 42,103,104,111,115,116,119,105,110, 0, 42,110,101,119,115, 99,114,101,101,110, 0,115, 99, +114,101,101,110,110, 97,109,101, 91, 51, 50, 93, 0,112,111,115,120, 0,112,111,115,121, 0,119,105,110,100,111,119,115,116, 97, +116,101, 0,109,111,110,105,116,111,114, 0,108, 97,115,116, 99,117,114,115,111,114, 0, 97,100,100,109,111,117,115,101,109,111, +118,101, 0, 42,101,118,101,110,116,115,116, 97,116,101, 0, 42, 99,117,114,115,119,105,110, 0, 42,116,119,101, 97,107, 0,100, +114, 97,119,109,101,116,104,111,100, 0,100,114, 97,119,102, 97,105,108, 0, 42,100,114, 97,119,100, 97,116, 97, 0,109,111,100, + 97,108,104, 97,110,100,108,101,114,115, 0,115,117, 98,119,105,110,100,111,119,115, 0,103,101,115,116,117,114,101, 0,105,100, +110, 97,109,101, 91, 54, 52, 93, 0,112,114,111,112,118, 97,108,117,101, 0,115,104,105,102,116, 0, 99,116,114,108, 0, 97,108, +116, 0,111,115,107,101,121, 0,107,101,121,109,111,100,105,102,105,101,114, 0,109, 97,112,116,121,112,101, 0, 42,112,116,114, + 0,105,116,101,109,115, 0,115,112, 97, 99,101,105,100, 0,114,101,103,105,111,110,105,100, 0, 40, 42,112,111,108,108, 41, 40, + 41, 0, 42,109,111,100, 97,108, 95,105,116,101,109,115, 0, 98, 97,115,101,110, 97,109,101, 91, 54, 52, 93, 0, 97, 99,116,107, +101,121,109, 97,112, 0, 42, 99,117,115,116,111,109,100, 97,116, 97, 0, 42,114,101,112,111,114,116,115, 0,109, 97, 99,114,111, + 0, 42,111,112,109, 0,109,118, 97,108, 91, 50, 93, 0,112,114,101,118,120, 0,112,114,101,118,121, 0,117,110,105, 99,111,100, +101, 0, 97,115, 99,105,105, 0, 42,107,101,121,109, 97,112, 95,105,100,110, 97,109,101, 0, 99,117,115,116,111,109, 0, 99,117, +115,116,111,109,100, 97,116, 97,102,114,101,101, 0, 42,101,100, 97,116, 97, 0,105,110,102,108,117,101,110, 99,101, 0, 42, 99, +111,101,102,102,105, 99,105,101,110,116,115, 0, 97,114,114, 97,121,115,105,122,101, 0,112,111,108,121, 95,111,114,100,101,114, + 0, 97,109,112,108,105,116,117,100,101, 0,112,104, 97,115,101, 95,109,117,108,116,105,112,108,105,101,114, 0,112,104, 97,115, +101, 95,111,102,102,115,101,116, 0,118, 97,108,117,101, 95,111,102,102,115,101,116, 0,109,105,100,118, 97,108, 0, 98,101,102, +111,114,101, 95,109,111,100,101, 0, 97,102,116,101,114, 95,109,111,100,101, 0, 98,101,102,111,114,101, 95, 99,121, 99,108,101, +115, 0, 97,102,116,101,114, 95, 99,121, 99,108,101,115, 0,114,101, 99,116, 0,112,104, 97,115,101, 0,109,111,100,105,102,105, + 99, 97,116,105,111,110, 0, 42,114,110, 97, 95,112, 97,116,104, 0, 97,114,114, 97,121, 95,105,110,100,101,120, 0,105,100,116, +121,112,101, 0,101,120,112,114,101,115,115,105,111,110, 91, 50, 53, 54, 93, 0,118,101, 99, 91, 50, 93, 0, 42,102,112,116, 0, + 99,111,108,111,114, 95,109,111,100,101, 0, 99,111,108,111,114, 91, 51, 93, 0,102,114,111,109, 91, 49, 50, 56, 93, 0,116,111, + 91, 49, 50, 56, 93, 0,109, 97,112,112,105,110,103,115, 0,115,116,114,105,112,115, 0, 42,114,101,109, 97,112, 0,102, 99,117, +114,118,101,115, 0,115,116,114,105,112, 95,116,105,109,101, 0, 98,108,101,110,100,109,111,100,101, 0,101,120,116,101,110,100, +109,111,100,101, 0,103,114,111,117,112, 91, 54, 52, 93, 0,116,101,109,112,108, 97,116,101,115, 0,103,114,111,117,112,109,111, +100,101, 0,112, 97,116,104,115, 0,107,101,121,105,110,103,102,108, 97,103, 0, 97, 99,116,105,118,101, 95,112, 97,116,104, 0, + 42,116,109,112, 97, 99,116, 0,110,108, 97, 95,116,114, 97, 99,107,115, 0, 42, 97, 99,116,115,116,114,105,112, 0,100,114,105, +118,101,114,115, 0,111,118,101,114,114,105,100,101,115, 0, 97, 99,116, 95, 98,108,101,110,100,109,111,100,101, 0, 97, 99,116, + 95,101,120,116,101,110,100,109,111,100,101, 0, 97, 99,116, 95,105,110,102,108,117,101,110, 99,101, 0,114,117,108,101, 0,111, +112,116,105,111,110,115, 0,102,101, 97,114, 95,102, 97, 99,116,111,114, 0,115,105,103,110, 97,108, 95,105,100, 0,108,111,111, +107, 95, 97,104,101, 97,100, 0,111,108,111, 99, 91, 51, 93, 0,113,117,101,117,101, 95,115,105,122,101, 0,119, 97,110,100,101, +114, 0,102,108,101,101, 95,100,105,115,116, 97,110, 99,101, 0,104,101, 97,108,116,104, 0,115,116, 97,116,101, 95,105,100, 0, +114,117,108,101,115, 0, 99,111,110,100,105,116,105,111,110,115, 0, 97, 99,116,105,111,110,115, 0,114,117,108,101,115,101,116, + 95,116,121,112,101, 0,114,117,108,101, 95,102,117,122,122,105,110,101,115,115, 0,108, 97,115,116, 95,115,116, 97,116,101, 95, +105,100, 0,108, 97,110,100,105,110,103, 95,115,109,111,111,116,104,110,101,115,115, 0, 98, 97,110,107,105,110,103, 0, 97,103, +103,114,101,115,115,105,111,110, 0, 97, 99, 99,117,114, 97, 99,121, 0, 97,105,114, 95,109,105,110, 95,115,112,101,101,100, 0, + 97,105,114, 95,109, 97,120, 95,115,112,101,101,100, 0, 97,105,114, 95,109, 97,120, 95, 97, 99, 99, 0, 97,105,114, 95,109, 97, +120, 95, 97,118,101, 0, 97,105,114, 95,112,101,114,115,111,110, 97,108, 95,115,112, 97, 99,101, 0,108, 97,110,100, 95,106,117, +109,112, 95,115,112,101,101,100, 0,108, 97,110,100, 95,109, 97,120, 95,115,112,101,101,100, 0,108, 97,110,100, 95,109, 97,120, + 95, 97, 99, 99, 0,108, 97,110,100, 95,109, 97,120, 95, 97,118,101, 0,108, 97,110,100, 95,112,101,114,115,111,110, 97,108, 95, +115,112, 97, 99,101, 0,108, 97,110,100, 95,115,116,105, 99,107, 95,102,111,114, 99,101, 0,115,116, 97,116,101,115, 0, 42,115, +109,100, 0, 42,102,108,117,105,100, 0, 42,102,108,117,105,100, 95,103,114,111,117,112, 0, 42, 99,111,108,108, 95,103,114,111, +117,112, 0, 42,119,116, 0, 42,116,101,120, 95,119,116, 0, 42,116,101,120, 95,115,104, 97,100,111,119, 0, 42,115,104, 97,100, +111,119, 0,112, 48, 91, 51, 93, 0,112, 49, 91, 51, 93, 0,100,120, 0,111,109,101,103, 97, 0,116,101,109,112, 65,109, 98, 0, + 98,101,116, 97, 0,114,101,115, 91, 51, 93, 0, 97,109,112,108,105,102,121, 0,109, 97,120,114,101,115, 0,118,105,101,119,115, +101,116,116,105,110,103,115, 0,110,111,105,115,101, 0,100,105,115,115, 95,112,101,114, 99,101,110,116, 0,100,105,115,115, 95, +115,112,101,101,100, 0,114,101,115, 95,119,116, 91, 51, 93, 0,100,120, 95,119,116, 0,118, 51,100,110,117,109, 0, 42,112,111, +105,110,116, 95, 99, 97, 99,104,101, 91, 50, 93, 0,112,116, 99, 97, 99,104,101,115, 91, 50, 93, 0,118,101,108,111, 99,105,116, +121, 91, 51, 93, 0,118,103,114,112, 95,104,101, 97,116, 95,115, 99, 97,108,101, 91, 50, 93, 0,118,103,114,111,117,112, 95,102, +108,111,119, 0,118,103,114,111,117,112, 95,100,101,110,115,105,116,121, 0,118,103,114,111,117,112, 95,104,101, 97,116, 0, 42, +112,111,105,110,116,115, 95,111,108,100, 0, 42,118,101,108, 0,109, 97,116, 95,111,108,100, 91, 52, 93, 91, 52, 93, 0, 0, 0, + 84, 89, 80, 69,196, 1, 0, 0, 99,104, 97,114, 0,117, 99,104, 97,114, 0,115,104,111,114,116, 0,117,115,104,111,114,116, 0, 105,110,116, 0,108,111,110,103, 0,117,108,111,110,103, 0,102,108,111, 97,116, 0,100,111,117, 98,108,101, 0,118,111,105,100, 0, 76,105,110,107, 0, 76,105,110,107, 68, 97,116, 97, 0, 76,105,115,116, 66, 97,115,101, 0,118,101, 99, 50,115, 0,118,101, 99, 50,105, 0,118,101, 99, 50,102, 0,118,101, 99, 50,100, 0,118,101, 99, 51,105, 0,118,101, 99, 51,102, 0,118,101, 99, 51, @@ -13706,971 +10084,965 @@ char datatoc_B_blend[]= { 101, 0, 67, 97,109,101,114, 97, 0, 73,109, 97,103,101, 85,115,101,114, 0, 83, 99,101,110,101, 0, 73,109, 97,103,101, 0, 71, 80, 85, 84,101,120,116,117,114,101, 0, 97,110,105,109, 0, 82,101,110,100,101,114, 82,101,115,117,108,116, 0, 77, 84,101,120, 0, 84,101,120, 0, 80,108,117,103,105,110, 84,101,120, 0, 67, 66, 68, 97,116, 97, 0, 67,111,108,111,114, 66, 97,110,100, 0, - 69,110,118, 77, 97,112, 0, 73,109, 66,117,102, 0, 80,111,105,110,116, 68,101,110,115,105,116,121, 0, 80, 97,114,116,105, 99, -108,101, 83,121,115,116,101,109, 0, 86,111,120,101,108, 68, 97,116, 97, 0, 98, 78,111,100,101, 84,114,101,101, 0, 84,101,120, - 77, 97,112,112,105,110,103, 0, 76, 97,109,112, 0, 67,117,114,118,101, 77, 97,112,112,105,110,103, 0, 87, 97,118,101, 0, 86, -111,108,117,109,101, 83,101,116,116,105,110,103,115, 0, 77, 97,116,101,114,105, 97,108, 0, 71,114,111,117,112, 0, 86, 70,111, -110,116, 0, 86, 70,111,110,116, 68, 97,116, 97, 0, 77,101,116, 97, 69,108,101,109, 0, 66,111,117,110,100, 66,111,120, 0, 77, -101,116, 97, 66, 97,108,108, 0, 78,117,114, 98, 0, 67,104, 97,114, 73,110,102,111, 0, 84,101,120,116, 66,111,120, 0, 67,117, -114,118,101, 0, 80, 97,116,104, 0, 83,101,108, 66,111,120, 0, 69,100,105,116, 70,111,110,116, 0, 77,101,115,104, 0, 77, 70, - 97, 99,101, 0, 77, 84, 70, 97, 99,101, 0, 84, 70, 97, 99,101, 0, 77, 86,101,114,116, 0, 77, 69,100,103,101, 0, 77, 68,101, -102,111,114,109, 86,101,114,116, 0, 77, 67,111,108, 0, 77, 83,116,105, 99,107,121, 0, 77, 83,101,108,101, 99,116, 0, 69,100, -105,116, 77,101,115,104, 0, 67,117,115,116,111,109, 68, 97,116, 97, 0, 77,117,108,116,105,114,101,115, 0, 80, 97,114,116,105, - 97,108, 86,105,115,105, 98,105,108,105,116,121, 0, 77, 68,101,102,111,114,109, 87,101,105,103,104,116, 0, 77, 84,101,120, 80, -111,108,121, 0, 77, 76,111,111,112, 85, 86, 0, 77, 76,111,111,112, 67,111,108, 0, 77, 70,108,111, 97,116, 80,114,111,112,101, -114,116,121, 0, 77, 73,110,116, 80,114,111,112,101,114,116,121, 0, 77, 83,116,114,105,110,103, 80,114,111,112,101,114,116,121, - 0, 79,114,105,103, 83,112, 97, 99,101, 70, 97, 99,101, 0, 77, 68,105,115,112,115, 0, 32, 35,100,101,102,105,110,101, 32, 77, - 69, 95, 69, 68, 71, 69, 68, 82, 65, 87, 32, 40, 49, 60, 60, 49, 41, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 69, 65, - 77, 32, 40, 49, 60, 60, 50, 41, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 71, 79, 78, 32, 40, 49, 60, 60, 51, 41, 32, - 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 68, 71, 69, 82, 69, 78, 68, 69, 82, 32, 40, 49, 60, 60, 53, 41, 32, 35,100, -101,102,105,110,101, 32, 77, 69, 95, 76, 79, 79, 83, 69, 69, 68, 71, 69, 32, 40, 49, 60, 60, 55, 41, 32, 35,100,101,102,105,110, -101, 32, 77, 69, 95, 83, 69, 65, 77, 95, 76, 65, 83, 84, 32, 40, 49, 60, 60, 56, 41, 32, 35,100,101,102,105,110,101, 32, 77, 69, - 95, 83, 72, 65, 82, 80, 32, 40, 49, 60, 60, 57, 41, 32, 32, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, - 49, 32, 49, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 50, 32, 50, 32, 35,100,101,102,105,110,101, 32, - 77, 69, 95, 70, 76, 73, 80, 86, 51, 32, 52, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 52, 32, 56, 32, - 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 88, 89, 32, 49, 54, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, - 80, 82, 79, 74, 88, 90, 32, 51, 50, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 89, 90, 32, 54, 52, 32, 32, - 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 49, 86, 50, 32, 49, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 50, 86, - 51, 32, 50, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 51, 86, 49, 32, 52, 32, 35,100,101,102,105,110,101, 32, 77, 69, - 95, 86, 51, 86, 52, 32, 52, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 52, 86, 49, 32, 56, 32, 32, 35,100,101,102,105, -110,101, 32, 77, 69, 95, 83, 77, 79, 79, 84, 72, 32, 49, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 65, 67, 69, 95, 83, - 69, 76, 32, 50, 32, 32, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 83, 69,108, 32, 48, 32, 35,100,101,102,105,110,101, - 32, 77, 69, 95, 69, 83, 69,108, 32, 49, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 83, 69, 76, 32, 50, 32, 32, 35,100, -101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 69, 67, 84, 32, 49, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 67, - 84, 73, 86, 69, 32, 50, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 49, 32, 52, 32, 35,100,101,102,105,110, -101, 32, 84, 70, 95, 83, 69, 76, 50, 32, 56, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 51, 32, 49, 54, 32, 35, -100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 52, 32, 51, 50, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 72, 73, 68, - 69, 32, 54, 52, 32, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 89, 78, 65, 77, 73, 67, 32, 49, 32, 35,100,101,102, -105,110,101, 32, 84, 70, 95, 65, 76, 80, 72, 65, 83, 79, 82, 84, 32, 50, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 84, 69, - 88, 32, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 72, 65, 82, 69, 68, 86, 69, 82, 84, 32, 56, 32, 35,100,101,102, -105,110,101, 32, 84, 70, 95, 76, 73, 71, 72, 84, 32, 49, 54, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 72, 65, 82, 69, - 68, 67, 79, 76, 32, 54, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 84, 73, 76, 69, 83, 32, 49, 50, 56, 32, 32, 35,100, -101,102,105,110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, 65, 82, 68, 32, 50, 53, 54, 32, 35,100,101,102,105,110,101, 32, 84, - 70, 95, 84, 87, 79, 83, 73, 68, 69, 32, 53, 49, 50, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 73, 78, 86, 73, 83, 73, 66, - 76, 69, 32, 49, 48, 50, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 79, 66, 67, 79, 76, 32, 50, 48, 52, 56, 32, 35,100, -101,102,105,110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, 65, 82, 68, 50, 32, 52, 48, 57, 54, 32, 32, 35,100,101,102,105,110, -101, 32, 84, 70, 95, 83, 72, 65, 68, 79, 87, 32, 56, 49, 57, 50, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 66, 77, 70, 79, - 78, 84, 32, 49, 54, 51, 56, 52, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 79, 76, 73, 68, 32, 48, 32, 35,100,101, -102,105,110,101, 32, 84, 70, 95, 65, 68, 68, 32, 49, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 76, 80, 72, 65, 32, 50, - 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 67, 76, 73, 80, 32, 52, 32, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, - 83, 85, 66, 32, 51, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 49, 32, 49, 32, - 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 50, 32, 50, 32, 35,100,101,102,105,110,101, - 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 51, 32, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, - 82, 69, 67, 65, 84, 69, 68, 52, 32, 56, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 49, 32, 49, 54, 32, 35,100, -101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 50, 32, 51, 50, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 51, - 32, 54, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 52, 32, 49, 50, 56, 32, 35,101,110,100,105,102,100, 32, - 99,104, 97,114, 32,117,115,101, 95, 99,111,108, 44, 32,102,108, 97,103, 59, 10, 10, 9, 47, 42, 32, 83,112,101, 99,105, 97,108, - 32,108,101,118,101,108, 32, 49, 32,100, 97,116, 97, 32,116,104, 97,116, 32, 99, 97,110,110,111,116, 32, 98,101, 32,109,111,100, -105,102,105,101,100, 32,102,114,111,109, 32,111,116,104,101,114, 32,108,101,118,101,108,115, 32, 42, 47, 10, 9, 67,117,115,116, -111,109, 68, 97,116, 97, 32,118,100, 97,116, 97, 59, 10, 9, 67,117,115,116,111,109, 68, 97,116, 97, 32,102,100, 97,116, 97, 59, - 10, 9,115,104,111,114,116, 32, 42,101,100,103,101, 95,102,108, 97,103,115, 59, 10, 9, 99,104, 97,114, 32, 42,101,100,103,101, - 95, 99,114,101, 97,115,101,115, 59, 10,125, 32, 77,117,108,116,105,114,101,115, 59, 10, 10, 47, 42, 42, 32, 69,110,100, 32, 77, -117,108,116,105,114,101,115, 32, 42, 42, 47, 10, 10,116,121,112,101,100,101,102, 32,115,116,114,117, 99,116, 32, 80, 97,114,116, -105, 97,108, 86,105,115,105, 98,105,108,105,116,121, 32,123, 10, 9,117,110,115,105,103,110,101,100, 32,105,110,116, 32, 42,118, -101,114,116, 95,109, 97,112, 59, 32, 47, 42, 32,118,101,114,116, 95,109, 97,112, 91, 79,108,100, 32, 73,110,100,101,120, 93, 61, - 32, 78,101,119, 32, 73,110,100,101,120, 32, 42, 47, 10, 9,105,110,116, 32, 42,101,100,103,101, 95,109, 97,112, 59, 32, 47, 42, - 32,101,100,103,101, 95,109, 97,112, 91, 79,108,100, 32, 73,110,100,101,120, 93, 61, 32, 78,101,119, 32, 73,110,100,101,120, 44, - 32, 45, 49, 61, 32,104,105,100,100,101,110, 32, 42, 47, 10, 9, 77, 70, 97, 99,101, 32, 42,111,108,100, 95,102, 97, 99,101,115, - 59, 10, 9, 77, 69,100,103,101, 32, 42,111,108,100, 95,101,100,103,101,115, 59, 10, 9,117,110,115,105,103,110,101,100, 32,105, -110,116, 32,116,111,116,102, 97, 99,101, 44, 32,116,111,116,101,100,103,101, 44, 32,116,111,116,118,101,114,116, 44, 32,112, 97, -100, 59, 10,125, 32, 80, 97,114,116,105, 97,108, 86,105,115,105, 98,105,108,105,116,121, 59, 10, 10, 47, 42, 32,109,118,101,114, -116, 45, 62,102,108, 97,103, 32, 40, 49, 61, 83, 69, 76, 69, 67, 84, 41, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 77, 69, - 95, 83, 80, 72, 69, 82, 69, 84, 69, 83, 84, 9, 50, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 80, 72, 69, 82, 69, 84, - 69, 77, 80, 9, 52, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 72, 73, 68, 69, 9, 9, 9, 49, 54, 10, 35,100,101,102,105, -110,101, 32, 77, 69, 95, 86, 69, 82, 84, 95, 77, 69, 82, 71, 69, 68, 9, 9, 40, 49, 60, 60, 54, 41, 10, 10, 47, 42, 32,109,101, -100,103,101, 45, 62,102,108, 97,103, 32, 40, 49, 61, 83, 69, 76, 69, 67, 84, 41, 42, 47, 10, 35,100,101,102,105,110,101, 32, 77, - 69, 95, 69, 68, 71, 69, 68, 82, 65, 87, 9, 9, 9, 40, 49, 60, 60, 49, 41, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, - 69, 65, 77, 9, 9, 9, 9, 40, 49, 60, 60, 50, 41, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 71, 79, 78, 9, 9, 9, - 9, 40, 49, 60, 60, 51, 41, 10, 9, 9, 9, 9, 9, 9, 47, 42, 32,114,101,115,101,114,118,101, 32, 49, 54, 32,102,111,114, 32, - 77, 69, 95, 72, 73, 68, 69, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 68, 71, 69, 82, 69, 78, 68, 69, 82, - 9, 9, 40, 49, 60, 60, 53, 41, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 76, 79, 79, 83, 69, 69, 68, 71, 69, 9, 9, 40, - 49, 60, 60, 55, 41, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 69, 65, 77, 95, 76, 65, 83, 84, 9, 9, 40, 49, 60, 60, - 56, 41, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 72, 65, 82, 80, 9, 9, 9, 40, 49, 60, 60, 57, 41, 10, 10, 47, 42, - 32,112,117,110,111, 32, 61, 32,118,101,114,116,101,120,110,111,114,109, 97,108, 32, 40,109,102, 97, 99,101, 41, 32, 42, 47, 10, - 47, 42, 32,114,101,110,100,101,114, 32, 97,115,115,117,109,101,115, 32,102,108,105,112,115, 32,116,111, 32, 98,101, 32,111,114, -100,101,114,101,100, 32,108,105,107,101, 32,116,104,105,115, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, - 73, 80, 86, 49, 9, 9, 49, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 50, 9, 9, 50, 10, 35,100,101, -102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 51, 9, 9, 52, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, - 80, 86, 52, 9, 9, 56, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 88, 89, 9, 9, 49, 54, 10, 35,100,101, -102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 88, 90, 9, 9, 51, 50, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, - 79, 74, 89, 90, 9, 9, 54, 52, 10, 10, 47, 42, 32,101,100, 99,111,100,101, 32, 40,109,102, 97, 99,101, 41, 32, 42, 47, 10, 35, -100,101,102,105,110,101, 32, 77, 69, 95, 86, 49, 86, 50, 9, 9, 9, 49, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 50, - 86, 51, 9, 9, 9, 50, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 51, 86, 49, 9, 9, 9, 52, 10, 35,100,101,102,105, -110,101, 32, 77, 69, 95, 86, 51, 86, 52, 9, 9, 9, 52, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 52, 86, 49, 9, 9, - 9, 56, 10, 10, 47, 42, 32,102,108, 97,103, 32, 40,109,102, 97, 99,101, 41, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 77, - 69, 95, 83, 77, 79, 79, 84, 72, 9, 9, 9, 49, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 65, 67, 69, 95, 83, 69, 76, - 9, 9, 9, 50, 10, 9, 9, 9, 9, 9, 9, 47, 42, 32,102,108, 97,103, 32, 77, 69, 95, 72, 73, 68, 69, 61, 61, 49, 54, 32,105, -115, 32,117,115,101,100, 32,104,101,114,101, 32,116,111,111, 32, 42, 47, 32, 10, 47, 42, 32,109,115,101,108,101, 99,116, 45, 62, -116,121,112,101, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 83, 69,108, 9, 48, 10, 35,100,101,102,105,110, -101, 32, 77, 69, 95, 69, 83, 69,108, 32, 49, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 83, 69, 76, 32, 50, 10, 10, 47, - 42, 32,109,116,102, 97, 99,101, 45, 62,102,108, 97,103, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, - 69, 67, 84, 9, 49, 32, 47, 42, 32,117,115,101, 32, 77, 70, 97, 99,101, 32,104,105,100,101, 32,102,108, 97,103, 32, 40, 97,102, -116,101,114, 32, 50, 46, 52, 51, 41, 44, 32,115,104,111,117,108,100, 32, 98,101, 32, 97, 98,108,101, 32,116,111, 32,114,101,117, -115,101, 32, 97,102,116,101,114, 32, 50, 46, 52, 52, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 67, 84, 73, - 86, 69, 9, 50, 32, 47, 42, 32,100,101,112,114,101, 99, 97,116,101,100, 33, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, - 70, 95, 83, 69, 76, 49, 9, 9, 52, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 50, 9, 9, 56, 10, 35,100,101, -102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 51, 9, 9, 49, 54, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 52, - 9, 9, 51, 50, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 72, 73, 68, 69, 9, 9, 54, 52, 32, 47, 42, 32,117,110,117,115, -101,100, 44, 32,115, 97,109,101, 32, 97,115, 32, 84, 70, 95, 83, 69, 76, 69, 67, 84, 32, 42, 47, 10, 10, 47, 42, 32,109,116,102, - 97, 99,101, 45, 62,109,111,100,101, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 89, 78, 65, 77, 73, 67, 9, - 9, 49, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 76, 80, 72, 65, 83, 79, 82, 84, 9, 50, 10, 35,100,101,102,105,110, -101, 32, 84, 70, 95, 84, 69, 88, 9, 9, 9, 52, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 72, 65, 82, 69, 68, 86, 69, - 82, 84, 9, 56, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 76, 73, 71, 72, 84, 9, 9, 49, 54, 10, 10, 35,100,101,102,105, -110,101, 32, 84, 70, 95, 83, 72, 65, 82, 69, 68, 67, 79, 76, 9, 54, 52, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 84, 73, - 76, 69, 83, 9, 9, 49, 50, 56, 9, 9, 47, 42, 32,100,101,112,114,101, 99, 97,116,101,100, 32, 42, 47, 10, 35,100,101,102,105, -110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, 65, 82, 68, 9, 50, 53, 54, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 84, - 87, 79, 83, 73, 68, 69, 9, 9, 53, 49, 50, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 73, 78, 86, 73, 83, 73, 66, 76, 69, - 9, 49, 48, 50, 52, 10, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 79, 66, 67, 79, 76, 9, 9, 50, 48, 52, 56, 10, 35,100, -101,102,105,110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, 65, 82, 68, 50, 9, 52, 48, 57, 54, 9, 47, 42, 32,119,105,116,104, - 32, 90, 32, 97,120,105,115, 32, 99,111,110,115,116,114, 97,105,110,116, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, - 95, 83, 72, 65, 68, 79, 87, 9, 9, 56, 49, 57, 50, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 66, 77, 70, 79, 78, 84, 9, - 9, 49, 54, 51, 56, 52, 10, 10, 47, 42, 32,109,116,102, 97, 99,101, 45, 62,116,114, 97,110,115,112, 44, 32,118, 97,108,117,101, -115, 32, 49, 45, 52, 32, 97,114,101, 32,117,115,101,100, 32, 97,115, 32,102,108, 97,103,115, 32,105,110, 32,116,104,101, 32, 71, - 76, 44, 32, 87, 65, 82, 78, 73, 78, 71, 44, 32, 84, 70, 95, 83, 85, 66, 32, 99, 97,110,116, 32,119,111,114,107, 32,119,105,116, -104, 32,116,104,105,115, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 79, 76, 73, 68, 9, 48, 10, 35,100,101, -102,105,110,101, 32, 84, 70, 95, 65, 68, 68, 9, 9, 49, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 76, 80, 72, 65, 9, - 50, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 67, 76, 73, 80, 9, 9, 52, 32, 47, 42, 32, 99,108,105,112,109, 97,112, 32, - 97,108,112,104, 97, 47, 98,105,110, 97,114,121, 32, 97,108,112,104, 97, 32, 97,108,108, 32,111,114, 32,110,111,116,104,105,110, -103, 33, 32, 42, 47, 10, 10, 47, 42, 32,115,117, 98, 32,105,115, 32,110,111,116, 32, 97,118, 97,105,108, 97, 98,108,101, 32,105, -110, 32,116,104,101, 32,117,115,101,114, 32,105,110,116,101,114,102, 97, 99,101, 32, 97,110,121,109,111,114,101, 32, 42, 47, 10, - 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 85, 66, 9, 9, 51, 10, 10, 10, 47, 42, 32,109,116,102, 97, 99,101, 45, 62,117, -110,119,114, 97,112, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 49, 9, - 49, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 50, 9, 50, 10, 35,100,101,102,105, -110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 51, 9, 52, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, - 69, 80, 82, 69, 67, 65, 84, 69, 68, 52, 9, 56, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 49, 9, 9, 32, 32, - 32, 32, 49, 54, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 50, 9, 9, 32, 32, 32, 32, 51, 50, 10, 35,100,101, -102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 51, 9, 32, 32, 32, 9, 9, 54, 52, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, - 80, 73, 78, 52, 9, 32, 32, 32, 32, 9, 49, 50, 56, 10, 10, 35,101,110,100,105,102, 10,100,105, 79, 67, 75, 33,110,100,101,120, - 32,105,110, 32,110,117,114, 98, 32,108,105,115,116, 32, 42, 47, 10, 9,105,110,116, 32, 97, 99,116,110,117, 59, 10, 9, 47, 42, - 32,101,100,105,116, 44, 32,108, 97,115,116, 32,115,101,108,101, 99,116,101,100, 32, 98,112,111,105,110,116, 32, 42, 47, 10, 9, - 66, 80,111,105,110,116, 32, 42,108, 97,115,116,115,101,108, 98,112, 59, 10, 9, 10, 9, 47, 42, 32,102,111,110,116, 32,112, 97, -114,116, 32, 42, 47, 10, 9,115,104,111,114,116, 32,108,101,110, 44, 32,108,105,110,101,115, 44, 32,112,111,115, 44, 32,115,112, - 97, 99,101,109,111,100,101, 59, 10, 9,102,108,111, 97,116, 32,115,112, 97, 99,105,110,103, 44, 32,108,105,110,101,100,105,115, -116, 44, 32,115,104,101, 97,114, 44, 32,102,115,105,122,101, 44, 32,119,111,114,100,115,112, 97, 99,101, 44, 32,117,108,112,111, -115, 44, 32,117,108,104,101,105,103,104,116, 59, 10, 9,102,108,111, 97,116, 32,120,111,102, 44, 32,121,111,102, 59, 10, 9,102, -108,111, 97,116, 32,108,105,110,101,119,105,100,116,104, 59, 10, 70, 82, 69, 69,216, 24, 0, 77,117,108,116,105,114,101,115, 67, -111,108, 0, 77,117,108,116,105,114,101,115, 67,111,108, 70, 97, 99,101, 0, 77,117,108,116,105,114,101,115, 70, 97, 99,101, 0, - 77,117,108,116,105,114,101,115, 69,100,103,101, 0, 77,117,108,116,105,114,101,115, 76,101,118,101,108, 0, 77,111,100,105,102, -105,101,114, 68, 97,116, 97, 0, 83,117, 98,115,117,114,102, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 76, 97,116,116, -105, 99,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 67,117,114,118,101, 77,111,100,105,102,105,101,114, 68, 97,116, - 97, 0, 66,117,105,108,100, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 77, 97,115,107, 77,111,100,105,102,105,101,114, - 68, 97,116, 97, 0, 65,114,114, 97,121, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 77,105,114,114,111,114, 77,111,100, -105,102,105,101,114, 68, 97,116, 97, 0, 69,100,103,101, 83,112,108,105,116, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, - 66,101,118,101,108, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 66, 77,101,115,104, 77,111,100,105,102,105,101,114, 68, - 97,116, 97, 0, 83,109,111,107,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,109,111,107,101, 68,111,109, 97,105, -110, 83,101,116,116,105,110,103,115, 0, 83,109,111,107,101, 70,108,111,119, 83,101,116,116,105,110,103,115, 0, 83,109,111,107, -101, 67,111,108,108, 83,101,116,116,105,110,103,115, 0, 68,105,115,112,108, 97, 99,101, 77,111,100,105,102,105,101,114, 68, 97, -116, 97, 0, 85, 86, 80,114,111,106,101, 99,116, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 68,101, 99,105,109, 97,116, -101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,109,111,111,116,104, 77,111,100,105,102,105,101,114, 68, 97,116, 97, - 0, 67, 97,115,116, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 87, 97,118,101, 77,111,100,105,102,105,101,114, 68, 97, -116, 97, 0, 65,114,109, 97,116,117,114,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 72,111,111,107, 77,111,100,105, -102,105,101,114, 68, 97,116, 97, 0, 83,111,102,116, 98,111,100,121, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 67,108, -111,116,104, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 67,108,111,116,104, 0, 67,108,111,116,104, 83,105,109, 83,101, -116,116,105,110,103,115, 0, 67,108,111,116,104, 67,111,108,108, 83,101,116,116,105,110,103,115, 0, 80,111,105,110,116, 67, 97, - 99,104,101, 0, 67,111,108,108,105,115,105,111,110, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 66, 86, 72, 84,114,101, -101, 0, 83,117,114,102, 97, 99,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 68,101,114,105,118,101,100, 77,101,115, -104, 0, 66, 86, 72, 84,114,101,101, 70,114,111,109, 77,101,115,104, 0, 66,111,111,108,101, 97,110, 77,111,100,105,102,105,101, -114, 68, 97,116, 97, 0, 77, 68,101,102, 73,110,102,108,117,101,110, 99,101, 0, 77, 68,101,102, 67,101,108,108, 0, 77,101,115, -104, 68,101,102,111,114,109, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 83,121,115,116, -101,109, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 73,110,115,116, 97,110, 99,101, 77, -111,100,105,102,105,101,114, 68, 97,116, 97, 0, 69,120,112,108,111,100,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, - 77,117,108,116,105,114,101,115, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 70,108,117,105,100,115,105,109, 77,111,100, -105,102,105,101,114, 68, 97,116, 97, 0, 70,108,117,105,100,115,105,109, 83,101,116,116,105,110,103,115, 0, 83,104,114,105,110, -107,119,114, 97,112, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,105,109,112,108,101, 68,101,102,111,114,109, 77,111, -100,105,102,105,101,114, 68, 97,116, 97, 0, 83,104, 97,112,101, 75,101,121, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, - 76, 97,116,116,105, 99,101, 0, 98, 68,101,102,111,114,109, 71,114,111,117,112, 0, 83, 99,117,108,112,116, 83,101,115,115,105, -111,110, 0, 98, 65, 99,116,105,111,110, 0, 98, 80,111,115,101, 0, 98, 71, 80,100, 97,116, 97, 0, 66,117,108,108,101,116, 83, -111,102,116, 66,111,100,121, 0, 80, 97,114,116, 68,101,102,108,101, 99,116, 0, 83,111,102,116, 66,111,100,121, 0, 79, 98, 72, -111,111,107, 0, 68,117,112,108,105, 79, 98,106,101, 99,116, 0, 82, 78, 71, 0, 69,102,102,101, 99,116,111,114, 87,101,105,103, -104,116,115, 0, 80, 84, 67, 97, 99,104,101, 77,101,109, 0, 80, 84, 67, 97, 99,104,101, 69,100,105,116, 0, 83, 66, 86,101,114, -116,101,120, 0, 66,111,100,121, 80,111,105,110,116, 0, 66,111,100,121, 83,112,114,105,110,103, 0, 83, 66, 83, 99,114, 97,116, - 99,104, 0, 87,111,114,108,100, 0, 66, 97,115,101, 0, 65,118,105, 67,111,100,101, 99, 68, 97,116, 97, 0, 81,117,105, 99,107, -116,105,109,101, 67,111,100,101, 99, 68, 97,116, 97, 0, 70, 70, 77,112,101,103, 67,111,100,101, 99, 68, 97,116, 97, 0, 65,117, -100,105,111, 68, 97,116, 97, 0, 83, 99,101,110,101, 82,101,110,100,101,114, 76, 97,121,101,114, 0, 82,101,110,100,101,114, 68, - 97,116, 97, 0, 82,101,110,100,101,114, 80,114,111,102,105,108,101, 0, 71, 97,109,101, 68,111,109,101, 0, 71, 97,109,101, 70, -114, 97,109,105,110,103, 0, 71, 97,109,101, 68, 97,116, 97, 0, 84,105,109,101, 77, 97,114,107,101,114, 0, 80, 97,105,110,116, - 0, 66,114,117,115,104, 0, 73,109, 97,103,101, 80, 97,105,110,116, 83,101,116,116,105,110,103,115, 0, 80, 97,114,116,105, 99, -108,101, 66,114,117,115,104, 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 69,100,105,116, 83,101,116,116,105,110,103,115, - 0, 84,114, 97,110,115,102,111,114,109, 79,114,105,101,110,116, 97,116,105,111,110, 0, 83, 99,117,108,112,116, 0, 86, 80, 97, -105,110,116, 0, 84,111,111,108, 83,101,116,116,105,110,103,115, 0, 98, 83,116, 97,116,115, 0, 85,110,105,116, 83,101,116,116, -105,110,103,115, 0, 80,104,121,115,105, 99,115, 83,101,116,116,105,110,103,115, 0, 69,100,105,116,105,110,103, 0, 83, 99,101, -110,101, 83,116, 97,116,115, 0, 68, 97,103, 70,111,114,101,115,116, 0, 66, 71,112,105, 99, 0, 82,101,103,105,111,110, 86,105, -101,119, 51, 68, 0, 82,101,110,100,101,114, 73,110,102,111, 0, 82,101,116,111,112,111, 86,105,101,119, 68, 97,116, 97, 0, 86, -105,101,119, 68,101,112,116,104,115, 0, 83,109,111,111,116,104, 86,105,101,119, 83,116,111,114,101, 0,119,109, 84,105,109,101, -114, 0, 86,105,101,119, 51, 68, 0, 83,112, 97, 99,101, 76,105,110,107, 0, 86,105,101,119, 50, 68, 0, 83,112, 97, 99,101, 73, -110,102,111, 0, 98, 83, 99,114,101,101,110, 0, 83,112, 97, 99,101, 73,112,111, 0, 98, 68,111,112,101, 83,104,101,101,116, 0, - 83,112, 97, 99,101, 66,117,116,115, 0, 83,112, 97, 99,101, 83,101,113, 0, 70,105,108,101, 83,101,108,101, 99,116, 80, 97,114, - 97,109,115, 0, 83,112, 97, 99,101, 70,105,108,101, 0, 70,105,108,101, 76,105,115,116, 0,119,109, 79,112,101,114, 97,116,111, -114, 0, 70,105,108,101, 76, 97,121,111,117,116, 0, 83,112, 97, 99,101, 79,111,112,115, 0, 84,114,101,101, 83,116,111,114,101, - 0, 84,114,101,101, 83,116,111,114,101, 69,108,101,109, 0, 83,112, 97, 99,101, 73,109, 97,103,101, 0, 83,112, 97, 99,101, 78, -108, 97, 0, 83,112, 97, 99,101, 84,101,120,116, 0, 83, 99,114,105,112,116, 0, 83,112, 97, 99,101, 83, 99,114,105,112,116, 0, - 83,112, 97, 99,101, 84,105,109,101, 0, 83,112, 97, 99,101, 78,111,100,101, 0, 83,112, 97, 99,101, 76,111,103,105, 99, 0, 83, -112, 97, 99,101, 73,109, 97, 83,101,108, 0, 67,111,110,115,111,108,101, 76,105,110,101, 0, 83,112, 97, 99,101, 67,111,110,115, -111,108,101, 0, 83,112, 97, 99,101, 85,115,101,114, 80,114,101,102, 0,117,105, 70,111,110,116, 0,117,105, 70,111,110,116, 83, -116,121,108,101, 0,117,105, 83,116,121,108,101, 0,117,105, 87,105,100,103,101,116, 67,111,108,111,114,115, 0,117,105, 87,105, -100,103,101,116, 83,116, 97,116,101, 67,111,108,111,114,115, 0, 84,104,101,109,101, 85, 73, 0, 84,104,101,109,101, 83,112, 97, - 99,101, 0, 84,104,101,109,101, 87,105,114,101, 67,111,108,111,114, 0, 98, 84,104,101,109,101, 0, 83,111,108,105,100, 76,105, -103,104,116, 0, 85,115,101,114, 68,101,102, 0, 83, 99,114, 86,101,114,116, 0, 83, 99,114, 69,100,103,101, 0, 80, 97,110,101, -108, 0, 80, 97,110,101,108, 84,121,112,101, 0,117,105, 76, 97,121,111,117,116, 0, 83, 99,114, 65,114,101, 97, 0, 83,112, 97, - 99,101, 84,121,112,101, 0, 65, 82,101,103,105,111,110, 0, 65, 82,101,103,105,111,110, 84,121,112,101, 0, 70,105,108,101, 71, -108,111, 98, 97,108, 0, 83,116,114,105,112, 69,108,101,109, 0, 84, 83,116,114,105,112, 69,108,101,109, 0, 83,116,114,105,112, - 67,114,111,112, 0, 83,116,114,105,112, 84,114, 97,110,115,102,111,114,109, 0, 83,116,114,105,112, 67,111,108,111,114, 66, 97, -108, 97,110, 99,101, 0, 83,116,114,105,112, 80,114,111,120,121, 0, 83,116,114,105,112, 0, 80,108,117,103,105,110, 83,101,113, - 0, 83,101,113,117,101,110, 99,101, 0, 98, 83,111,117,110,100, 0, 83,111,117,110,100, 72, 97,110,100,108,101, 0, 77,101,116, - 97, 83,116, 97, 99,107, 0, 87,105,112,101, 86, 97,114,115, 0, 71,108,111,119, 86, 97,114,115, 0, 84,114, 97,110,115,102,111, -114,109, 86, 97,114,115, 0, 83,111,108,105,100, 67,111,108,111,114, 86, 97,114,115, 0, 83,112,101,101,100, 67,111,110,116,114, -111,108, 86, 97,114,115, 0, 69,102,102,101, 99,116, 0, 66,117,105,108,100, 69,102,102, 0, 80, 97,114,116, 69,102,102, 0, 80, - 97,114,116,105, 99,108,101, 0, 87, 97,118,101, 69,102,102, 0, 98, 80,114,111,112,101,114,116,121, 0, 98, 78,101, 97,114, 83, -101,110,115,111,114, 0, 98, 77,111,117,115,101, 83,101,110,115,111,114, 0, 98, 84,111,117, 99,104, 83,101,110,115,111,114, 0, - 98, 75,101,121, 98,111, 97,114,100, 83,101,110,115,111,114, 0, 98, 80,114,111,112,101,114,116,121, 83,101,110,115,111,114, 0, - 98, 65, 99,116,117, 97,116,111,114, 83,101,110,115,111,114, 0, 98, 68,101,108, 97,121, 83,101,110,115,111,114, 0, 98, 67,111, -108,108,105,115,105,111,110, 83,101,110,115,111,114, 0, 98, 82, 97,100, 97,114, 83,101,110,115,111,114, 0, 98, 82, 97,110,100, -111,109, 83,101,110,115,111,114, 0, 98, 82, 97,121, 83,101,110,115,111,114, 0, 98, 65,114,109, 97,116,117,114,101, 83,101,110, -115,111,114, 0, 98, 77,101,115,115, 97,103,101, 83,101,110,115,111,114, 0, 98, 83,101,110,115,111,114, 0, 98, 67,111,110,116, -114,111,108,108,101,114, 0, 98, 74,111,121,115,116,105, 99,107, 83,101,110,115,111,114, 0, 98, 69,120,112,114,101,115,115,105, -111,110, 67,111,110,116, 0, 98, 80,121,116,104,111,110, 67,111,110,116, 0, 98, 65, 99,116,117, 97,116,111,114, 0, 98, 65,100, -100, 79, 98,106,101, 99,116, 65, 99,116,117, 97,116,111,114, 0, 98, 65, 99,116,105,111,110, 65, 99,116,117, 97,116,111,114, 0, - 98, 83,111,117,110,100, 65, 99,116,117, 97,116,111,114, 0, 83,111,117,110,100, 51, 68, 0, 98, 69,100,105,116, 79, 98,106,101, - 99,116, 65, 99,116,117, 97,116,111,114, 0, 98, 83, 99,101,110,101, 65, 99,116,117, 97,116,111,114, 0, 98, 80,114,111,112,101, -114,116,121, 65, 99,116,117, 97,116,111,114, 0, 98, 79, 98,106,101, 99,116, 65, 99,116,117, 97,116,111,114, 0, 98, 73,112,111, - 65, 99,116,117, 97,116,111,114, 0, 98, 67, 97,109,101,114, 97, 65, 99,116,117, 97,116,111,114, 0, 98, 67,111,110,115,116,114, - 97,105,110,116, 65, 99,116,117, 97,116,111,114, 0, 98, 71,114,111,117,112, 65, 99,116,117, 97,116,111,114, 0, 98, 82, 97,110, -100,111,109, 65, 99,116,117, 97,116,111,114, 0, 98, 77,101,115,115, 97,103,101, 65, 99,116,117, 97,116,111,114, 0, 98, 71, 97, -109,101, 65, 99,116,117, 97,116,111,114, 0, 98, 86,105,115,105, 98,105,108,105,116,121, 65, 99,116,117, 97,116,111,114, 0, 98, - 84,119,111, 68, 70,105,108,116,101,114, 65, 99,116,117, 97,116,111,114, 0, 98, 80, 97,114,101,110,116, 65, 99,116,117, 97,116, -111,114, 0, 98, 83,116, 97,116,101, 65, 99,116,117, 97,116,111,114, 0, 98, 65,114,109, 97,116,117,114,101, 65, 99,116,117, 97, -116,111,114, 0, 70,114,101,101, 67, 97,109,101,114, 97, 0, 83,112, 97, 99,101, 83,111,117,110,100, 0, 71,114,111,117,112, 79, - 98,106,101, 99,116, 0, 66,111,110,101, 0, 98, 65,114,109, 97,116,117,114,101, 0, 98, 77,111,116,105,111,110, 80, 97,116,104, - 86,101,114,116, 0, 98, 77,111,116,105,111,110, 80, 97,116,104, 0, 98, 65,110,105,109, 86,105,122, 83,101,116,116,105,110,103, -115, 0, 98, 80,111,115,101, 67,104, 97,110,110,101,108, 0, 98, 73, 75, 80, 97,114, 97,109, 0, 98, 73,116, 97,115, 99, 0, 98, - 65, 99,116,105,111,110, 71,114,111,117,112, 0, 83,112, 97, 99,101, 65, 99,116,105,111,110, 0, 98, 65, 99,116,105,111,110, 67, -104, 97,110,110,101,108, 0, 98, 67,111,110,115,116,114, 97,105,110,116, 67,104, 97,110,110,101,108, 0, 98, 67,111,110,115,116, -114, 97,105,110,116, 0, 98, 67,111,110,115,116,114, 97,105,110,116, 84, 97,114,103,101,116, 0, 98, 80,121,116,104,111,110, 67, -111,110,115,116,114, 97,105,110,116, 0, 98, 75,105,110,101,109, 97,116,105, 99, 67,111,110,115,116,114, 97,105,110,116, 0, 98, - 84,114, 97, 99,107, 84,111, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 82,111,116, 97,116,101, 76,105,107,101, 67,111,110, -115,116,114, 97,105,110,116, 0, 98, 76,111, 99, 97,116,101, 76,105,107,101, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 77, -105,110, 77, 97,120, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83,105,122,101, 76,105,107,101, 67,111,110,115,116,114, 97, -105,110,116, 0, 98, 65, 99,116,105,111,110, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 76,111, 99,107, 84,114, 97, 99,107, - 67,111,110,115,116,114, 97,105,110,116, 0, 98, 68, 97,109,112, 84,114, 97, 99,107, 67,111,110,115,116,114, 97,105,110,116, 0, - 98, 70,111,108,108,111,119, 80, 97,116,104, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83,116,114,101,116, 99,104, 84,111, - 67,111,110,115,116,114, 97,105,110,116, 0, 98, 82,105,103,105,100, 66,111,100,121, 74,111,105,110,116, 67,111,110,115,116,114, - 97,105,110,116, 0, 98, 67,108, 97,109,112, 84,111, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 67,104,105,108,100, 79,102, - 67,111,110,115,116,114, 97,105,110,116, 0, 98, 84,114, 97,110,115,102,111,114,109, 67,111,110,115,116,114, 97,105,110,116, 0, - 98, 76,111, 99, 76,105,109,105,116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 82,111,116, 76,105,109,105,116, 67,111,110, -115,116,114, 97,105,110,116, 0, 98, 83,105,122,101, 76,105,109,105,116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 68,105, -115,116, 76,105,109,105,116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83,104,114,105,110,107,119,114, 97,112, 67,111,110, -115,116,114, 97,105,110,116, 0, 98, 65, 99,116,105,111,110, 77,111,100,105,102,105,101,114, 0, 98, 65, 99,116,105,111,110, 83, -116,114,105,112, 0, 98, 78,111,100,101, 83,116, 97, 99,107, 0, 98, 78,111,100,101, 83,111, 99,107,101,116, 0, 98, 78,111,100, -101, 76,105,110,107, 0, 98, 78,111,100,101, 0, 98, 78,111,100,101, 80,114,101,118,105,101,119, 0,117,105, 66,108,111, 99,107, - 0, 98, 78,111,100,101, 84,121,112,101, 0, 78,111,100,101, 73,109, 97,103,101, 65,110,105,109, 0, 78,111,100,101, 66,108,117, -114, 68, 97,116, 97, 0, 78,111,100,101, 68, 66,108,117,114, 68, 97,116, 97, 0, 78,111,100,101, 66,105,108, 97,116,101,114, 97, -108, 66,108,117,114, 68, 97,116, 97, 0, 78,111,100,101, 72,117,101, 83, 97,116, 0, 78,111,100,101, 73,109, 97,103,101, 70,105, -108,101, 0, 78,111,100,101, 67,104,114,111,109, 97, 0, 78,111,100,101, 84,119,111, 88, 89,115, 0, 78,111,100,101, 84,119,111, - 70,108,111, 97,116,115, 0, 78,111,100,101, 71,101,111,109,101,116,114,121, 0, 78,111,100,101, 86,101,114,116,101,120, 67,111, -108, 0, 78,111,100,101, 68,101,102,111, 99,117,115, 0, 78,111,100,101, 83, 99,114,105,112,116, 68,105, 99,116, 0, 78,111,100, -101, 71,108, 97,114,101, 0, 78,111,100,101, 84,111,110,101,109, 97,112, 0, 78,111,100,101, 76,101,110,115, 68,105,115,116, 0, - 84,101,120, 78,111,100,101, 79,117,116,112,117,116, 0, 67,117,114,118,101, 77, 97,112, 80,111,105,110,116, 0, 67,117,114,118, -101, 77, 97,112, 0, 66,114,117,115,104, 67,108,111,110,101, 0, 67,117,115,116,111,109, 68, 97,116, 97, 76, 97,121,101,114, 0, - 72, 97,105,114, 75,101,121, 0, 80, 97,114,116,105, 99,108,101, 75,101,121, 0, 66,111,105,100, 80, 97,114,116,105, 99,108,101, - 0, 66,111,105,100, 68, 97,116, 97, 0, 67,104,105,108,100, 80, 97,114,116,105, 99,108,101, 0, 80, 97,114,116,105, 99,108,101, - 84, 97,114,103,101,116, 0, 80, 97,114,116,105, 99,108,101, 68,117,112,108,105, 87,101,105,103,104,116, 0, 80, 97,114,116,105, - 99,108,101, 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 83,101,116,116,105,110,103,115, 0, 66,111,105,100, 83,101,116, -116,105,110,103,115, 0, 80, 97,114,116,105, 99,108,101, 67, 97, 99,104,101, 75,101,121, 0, 75, 68, 84,114,101,101, 0, 80, 97, -114,116,105, 99,108,101, 68,114, 97,119, 68, 97,116, 97, 0, 76,105,110,107, 78,111,100,101, 0, 98, 71, 80, 68,115,112,111,105, -110,116, 0, 98, 71, 80, 68,115,116,114,111,107,101, 0, 98, 71, 80, 68,102,114, 97,109,101, 0, 98, 71, 80, 68,108, 97,121,101, -114, 0, 82,101,112,111,114,116, 0, 82,101,112,111,114,116, 76,105,115,116, 0,119,109, 87,105,110,100,111,119, 77, 97,110, 97, -103,101,114, 0,119,109, 87,105,110,100,111,119, 0,119,109, 75,101,121, 67,111,110,102,105,103, 0,119,109, 69,118,101,110,116, - 0,119,109, 83,117, 98, 87,105,110,100,111,119, 0,119,109, 71,101,115,116,117,114,101, 0,119,109, 75,101,121, 77, 97,112, 73, -116,101,109, 0, 80,111,105,110,116,101,114, 82, 78, 65, 0,119,109, 75,101,121, 77, 97,112, 0,119,109, 79,112,101,114, 97,116, -111,114, 84,121,112,101, 0, 70, 77,111,100,105,102,105,101,114, 0, 70, 77,111,100, 95, 71,101,110,101,114, 97,116,111,114, 0, - 70, 77,111,100, 95, 70,117,110, 99,116,105,111,110, 71,101,110,101,114, 97,116,111,114, 0, 70, 67, 77, 95, 69,110,118,101,108, -111,112,101, 68, 97,116, 97, 0, 70, 77,111,100, 95, 69,110,118,101,108,111,112,101, 0, 70, 77,111,100, 95, 67,121, 99,108,101, -115, 0, 70, 77,111,100, 95, 80,121,116,104,111,110, 0, 70, 77,111,100, 95, 76,105,109,105,116,115, 0, 70, 77,111,100, 95, 78, -111,105,115,101, 0, 68,114,105,118,101,114, 84, 97,114,103,101,116, 0, 67,104, 97,110,110,101,108, 68,114,105,118,101,114, 0, - 70, 80,111,105,110,116, 0, 70, 67,117,114,118,101, 0, 65,110,105,109, 77, 97,112, 80, 97,105,114, 0, 65,110,105,109, 77, 97, -112,112,101,114, 0, 78,108, 97, 83,116,114,105,112, 0, 78,108, 97, 84,114, 97, 99,107, 0, 75, 83, 95, 80, 97,116,104, 0, 75, -101,121,105,110,103, 83,101,116, 0, 65,110,105,109, 79,118,101,114,114,105,100,101, 0, 73,100, 65,100,116, 84,101,109,112,108, - 97,116,101, 0, 66,111,105,100, 82,117,108,101, 0, 66,111,105,100, 82,117,108,101, 71,111, 97,108, 65,118,111,105,100, 0, 66, -111,105,100, 82,117,108,101, 65,118,111,105,100, 67,111,108,108,105,115,105,111,110, 0, 66,111,105,100, 82,117,108,101, 70,111, -108,108,111,119, 76,101, 97,100,101,114, 0, 66,111,105,100, 82,117,108,101, 65,118,101,114, 97,103,101, 83,112,101,101,100, 0, - 66,111,105,100, 82,117,108,101, 70,105,103,104,116, 0, 66,111,105,100, 83,116, 97,116,101, 0, 70, 76, 85, 73, 68, 95, 51, 68, - 0, 87, 84, 85, 82, 66, 85, 76, 69, 78, 67, 69, 0, 0, 0, 0, 84, 76, 69, 78, 1, 0, 1, 0, 2, 0, 2, 0, 4, 0, 4, 0, - 4, 0, 4, 0, 8, 0, 0, 0, 16, 0, 24, 0, 16, 0, 4, 0, 8, 0, 8, 0, 16, 0, 12, 0, 12, 0, 24, 0, 16, 0, 16, 0, - 32, 0, 16, 0, 16, 0, 32, 0, 96, 0, 72, 0, 72, 2, 0, 0, 40, 0,144, 0,152, 4,112, 0, 36, 0, 56, 0,112, 0,128, 0, -168, 0, 96, 0, 40, 0, 48, 0,176, 0, 16, 0,152, 0, 40, 0, 0, 6,184, 1, 0, 0, 0, 0, 0, 0, 16, 1,104, 1,120, 1, - 24, 0, 8, 3,200, 0, 0, 0, 96, 0,240, 1, 32, 1,232, 0,136, 0,248, 1, 56, 1, 80, 0, 88, 0, 32, 3,104, 0, 88, 1, - 0, 0,128, 0,104, 0,208, 0, 80, 0, 8, 0, 16, 0,216, 1, 0, 0, 0, 0, 0, 0,144, 1, 20, 0, 48, 0, 64, 0, 24, 0, - 12, 0, 16, 0, 4, 0, 8, 0, 8, 0, 0, 0, 32, 0,112, 0, 48, 0, 8, 0, 16, 0, 8, 0, 8, 0, 4, 0, 4, 0, 0, 1, - 32, 0, 16, 0, 0, 0, 16, 0, 64, 0, 24, 0, 12, 0, 64, 0, 72, 0, 96, 0,112, 0,120, 0, 88, 0,120, 0,152, 0, 88, 0, - 80, 0,128, 0, 80, 0,104, 0,248, 0, 56, 0,192, 0,176, 0,216, 0, 80, 0,112, 0,128, 0,216, 0,128, 0,240, 0, 72, 0, -128, 0, 0, 0,144, 0, 32, 0, 8, 2,152, 0, 0, 0,112, 0, 0, 0, 0, 0, 88, 0, 8, 0, 8, 0, 8, 1,104, 0, 96, 0, - 88, 0, 88, 0, 88, 0,192, 1,136, 0,128, 0, 72, 0,232, 0, 48, 0, 0, 0,144, 0, 88, 0,104, 0,120, 0,152, 0, 32, 1, -224, 0,192, 0, 0, 0, 72, 0,168, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0,216, 1, 40, 0,184, 0,152, 0, 64, 0, 24, 0, - 88, 0, 24, 4, 64, 0, 24, 0, 16, 0, 96, 0, 88, 0, 32, 0, 40, 1, 48, 0, 8, 0,112, 0, 88, 0, 56, 0, 72, 0,120, 1, - 32, 0, 8, 0, 16, 0, 48, 2, 0, 0, 0, 0, 64, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 1, 56, 0,152, 0, - 72, 0,208, 0,248, 0, 32, 0, 0, 1,240, 0,208, 1,104, 0, 0, 0,152, 0, 0, 0, 40, 1, 16, 0, 16, 0,168, 0,224, 0, -144, 2,120, 2, 64, 0,200, 0, 32, 1, 72, 0,208, 2, 40, 0,112, 0, 40, 0, 24, 1, 32, 0,232, 0, 32, 0, 32, 0, 80, 2, - 16, 1, 16, 0,216, 21, 56, 0,160, 11, 32, 0, 40, 0, 88, 1, 0, 0, 0, 0,160, 0, 0, 0, 40, 1, 0, 0, 24, 1, 80, 0, - 48, 0, 16, 0, 8, 0, 52, 0, 0, 1, 32, 1,200, 1, 8, 1, 48, 1, 64, 0, 32, 0, 12, 0, 24, 0, 48, 0, 16, 0, 24, 0, - 24, 0, 32, 0, 72, 1, 0, 0, 64, 0, 64, 0, 48, 0, 8, 0, 48, 0, 72, 0,104, 0, 40, 0, 8, 0, 72, 0, 44, 0, 40, 0, -108, 0, 72, 0, 72, 0, 96, 0,104, 0, 60, 0,128, 0, 80, 0, 80, 0, 16, 0, 96, 0, 72, 0, 32, 0, 88, 0, 24, 0, 80, 0, -112, 0, 84, 0, 32, 0, 96, 0, 56, 0, 56, 0,112, 0,140, 0, 4, 0, 24, 0, 16, 0, 8, 0, 88, 0, 40, 0,224, 0, 40, 0, - 32, 1,176, 0, 16, 0, 24, 0, 24, 0, 0, 2, 4, 0, 40, 0,120, 0, 8, 1, 88, 0, 56, 0, 88, 0,128, 0, 80, 0,120, 0, - 56, 0, 48, 0, 48, 0, 72, 0, 48, 0, 72, 0, 48, 0, 48, 0, 24, 0, 56, 0,104, 0, 16, 0,112, 0, 96, 0, 28, 0, 28, 0, - 28, 0, 56, 0, 24, 0, 72, 0,168, 0, 40, 0,144, 0, 56, 0, 8, 1, 0, 0, 0, 0, 0, 0, 16, 0, 40, 0, 28, 0, 12, 0, - 12, 0, 16, 1, 40, 0, 8, 0, 8, 0, 64, 0, 32, 0, 24, 0, 16, 0, 24, 0, 32, 0, 8, 0, 32, 0, 12, 0, 56, 0, 24, 0, - 72, 0, 24, 0, 56, 0, 56, 0, 20, 0, 64, 0, 40, 0, 32, 0,192, 0, 8, 2,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, - 32, 0, 40, 0,192, 0, 40, 0, 32, 0, 8, 1,224, 0,168, 0, 72, 0, 0, 0, 0, 0,120, 0, 0, 0,120, 0, 0, 0,104, 0, - 24, 0, 24, 0, 16, 0, 24, 0, 8, 0, 16, 0, 24, 0, 20, 0,112, 0, 32, 1, 16, 0,104, 0, 0, 1, 40, 0,200, 0,104, 0, -112, 0,104, 0, 32, 0, 80, 0, 56, 0, 80, 0, 64, 0,104, 0, 72, 0, 64, 0,128, 0, 0, 0, 0, 0, 0, 0, 83, 84, 82, 67, -137, 1, 0, 0, 10, 0, 2, 0, 10, 0, 0, 0, 10, 0, 1, 0, 11, 0, 3, 0, 11, 0, 0, 0, 11, 0, 1, 0, 9, 0, 2, 0, - 12, 0, 2, 0, 9, 0, 3, 0, 9, 0, 4, 0, 13, 0, 2, 0, 2, 0, 5, 0, 2, 0, 6, 0, 14, 0, 2, 0, 4, 0, 5, 0, - 4, 0, 6, 0, 15, 0, 2, 0, 7, 0, 5, 0, 7, 0, 6, 0, 16, 0, 2, 0, 8, 0, 5, 0, 8, 0, 6, 0, 17, 0, 3, 0, - 4, 0, 5, 0, 4, 0, 6, 0, 4, 0, 7, 0, 18, 0, 3, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 19, 0, 3, 0, - 8, 0, 5, 0, 8, 0, 6, 0, 8, 0, 7, 0, 20, 0, 4, 0, 4, 0, 5, 0, 4, 0, 6, 0, 4, 0, 7, 0, 4, 0, 8, 0, - 21, 0, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 7, 0, 8, 0, 22, 0, 4, 0, 8, 0, 5, 0, 8, 0, 6, 0, - 8, 0, 7, 0, 8, 0, 8, 0, 23, 0, 4, 0, 4, 0, 9, 0, 4, 0, 10, 0, 4, 0, 11, 0, 4, 0, 12, 0, 24, 0, 4, 0, - 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0, 25, 0, 4, 0, 9, 0, 13, 0, 12, 0, 14, 0, 4, 0, 15, 0, - 4, 0, 16, 0, 26, 0, 10, 0, 26, 0, 0, 0, 26, 0, 1, 0, 0, 0, 17, 0, 0, 0, 18, 0, 2, 0, 19, 0, 0, 0, 20, 0, - 4, 0, 21, 0, 25, 0, 22, 0, 4, 0, 23, 0, 4, 0, 24, 0, 27, 0, 9, 0, 9, 0, 0, 0, 9, 0, 1, 0, 27, 0, 25, 0, - 28, 0, 26, 0, 0, 0, 27, 0, 2, 0, 28, 0, 2, 0, 19, 0, 4, 0, 29, 0, 26, 0, 30, 0, 28, 0, 8, 0, 27, 0, 31, 0, - 27, 0, 32, 0, 29, 0, 33, 0, 0, 0, 34, 0, 0, 0, 35, 0, 4, 0, 36, 0, 4, 0, 37, 0, 28, 0, 38, 0, 30, 0, 6, 0, - 4, 0, 39, 0, 4, 0, 40, 0, 2, 0, 41, 0, 2, 0, 42, 0, 2, 0, 43, 0, 4, 0, 44, 0, 31, 0, 6, 0, 32, 0, 45, 0, - 2, 0, 46, 0, 2, 0, 47, 0, 2, 0, 17, 0, 2, 0, 19, 0, 0, 0, 48, 0, 33, 0, 21, 0, 33, 0, 0, 0, 33, 0, 1, 0, - 34, 0, 49, 0, 35, 0, 50, 0, 24, 0, 51, 0, 24, 0, 52, 0, 2, 0, 46, 0, 2, 0, 47, 0, 2, 0, 53, 0, 2, 0, 54, 0, - 2, 0, 55, 0, 2, 0, 56, 0, 2, 0, 19, 0, 2, 0, 57, 0, 7, 0, 11, 0, 7, 0, 12, 0, 4, 0, 58, 0, 7, 0, 59, 0, - 7, 0, 60, 0, 7, 0, 61, 0, 31, 0, 62, 0, 36, 0, 7, 0, 27, 0, 31, 0, 12, 0, 63, 0, 24, 0, 64, 0, 2, 0, 46, 0, - 2, 0, 65, 0, 2, 0, 66, 0, 2, 0, 37, 0, 37, 0, 16, 0, 37, 0, 0, 0, 37, 0, 1, 0, 7, 0, 67, 0, 7, 0, 61, 0, - 2, 0, 17, 0, 2, 0, 47, 0, 2, 0, 68, 0, 2, 0, 19, 0, 4, 0, 69, 0, 4, 0, 70, 0, 9, 0, 2, 0, 7, 0, 71, 0, - 0, 0, 20, 0, 0, 0, 72, 0, 7, 0, 73, 0, 7, 0, 74, 0, 38, 0, 13, 0, 27, 0, 31, 0, 39, 0, 75, 0, 37, 0, 76, 0, - 0, 0, 77, 0, 4, 0, 78, 0, 7, 0, 61, 0, 12, 0, 79, 0, 36, 0, 80, 0, 27, 0, 81, 0, 2, 0, 17, 0, 2, 0, 82, 0, - 2, 0, 83, 0, 2, 0, 19, 0, 40, 0, 6, 0, 40, 0, 0, 0, 40, 0, 1, 0, 0, 0, 84, 0, 0, 0, 85, 0, 4, 0, 23, 0, - 4, 0, 86, 0, 41, 0, 10, 0, 41, 0, 0, 0, 41, 0, 1, 0, 4, 0, 87, 0, 4, 0, 88, 0, 4, 0, 89, 0, 4, 0, 43, 0, - 4, 0, 14, 0, 4, 0, 90, 0, 0, 0, 91, 0, 0, 0, 92, 0, 42, 0, 15, 0, 27, 0, 31, 0, 0, 0, 93, 0, 4, 0, 90, 0, - 4, 0, 94, 0, 12, 0, 95, 0, 40, 0, 96, 0, 40, 0, 97, 0, 4, 0, 98, 0, 4, 0, 99, 0, 12, 0,100, 0, 0, 0,101, 0, - 4, 0,102, 0, 4, 0,103, 0, 9, 0,104, 0, 8, 0,105, 0, 43, 0, 3, 0, 4, 0,106, 0, 4, 0,107, 0, 9, 0, 2, 0, - 44, 0, 20, 0, 27, 0, 31, 0, 39, 0, 75, 0, 2, 0, 17, 0, 2, 0, 19, 0, 7, 0,108, 0, 7, 0,109, 0, 7, 0,110, 0, - 7, 0,111, 0, 7, 0,112, 0, 7, 0,113, 0, 7, 0,114, 0, 7, 0,115, 0, 7, 0,116, 0, 7, 0,117, 0, 7, 0,118, 0, - 2, 0,119, 0, 2, 0,120, 0, 7, 0,121, 0, 36, 0, 80, 0, 32, 0,122, 0, 45, 0, 13, 0, 4, 0,123, 0, 4, 0,124, 0, - 4, 0,125, 0, 4, 0,126, 0, 2, 0,127, 0, 2, 0,128, 0, 2, 0, 19, 0, 2, 0,129, 0, 2, 0,130, 0, 2, 0,131, 0, - 2, 0,132, 0, 2, 0,133, 0, 46, 0,134, 0, 47, 0, 32, 0, 27, 0, 31, 0, 0, 0, 34, 0, 12, 0,135, 0, 48, 0,136, 0, - 49, 0,137, 0, 50, 0,138, 0, 2, 0,129, 0, 2, 0, 19, 0, 2, 0,139, 0, 2, 0, 17, 0, 2, 0, 37, 0, 2, 0, 43, 0, - 4, 0,140, 0, 2, 0,141, 0, 2, 0,142, 0, 2, 0,143, 0, 2, 0,144, 0, 2, 0,145, 0, 2, 0,146, 0, 4, 0,147, 0, - 4, 0,148, 0, 43, 0,149, 0, 30, 0,150, 0, 0, 0,151, 0, 7, 0,152, 0, 4, 0,153, 0, 2, 0,154, 0, 2, 0,155, 0, - 2, 0,156, 0, 2, 0,157, 0, 7, 0,158, 0, 7, 0,159, 0, 51, 0, 63, 0, 2, 0,160, 0, 2, 0,161, 0, 2, 0,162, 0, - 2, 0,163, 0, 32, 0,164, 0, 52, 0,165, 0, 0, 0,166, 0, 0, 0,167, 0, 0, 0,168, 0, 0, 0,169, 0, 0, 0,170, 0, - 7, 0,171, 0, 7, 0,172, 0, 7, 0,173, 0, 2, 0,174, 0, 2, 0,175, 0, 2, 0,176, 0, 2, 0,177, 0, 2, 0,178, 0, - 2, 0,179, 0, 0, 0,180, 0, 0, 0,181, 0, 7, 0,182, 0, 7, 0,183, 0, 7, 0,184, 0, 7, 0,185, 0, 7, 0,186, 0, - 7, 0, 57, 0, 7, 0,187, 0, 7, 0,188, 0, 7, 0,189, 0, 7, 0,190, 0, 7, 0,191, 0, 7, 0,192, 0, 7, 0,193, 0, - 7, 0,194, 0, 7, 0,195, 0, 7, 0,196, 0, 7, 0,197, 0, 7, 0,198, 0, 7, 0,199, 0, 7, 0,200, 0, 7, 0,201, 0, - 7, 0,202, 0, 7, 0,203, 0, 7, 0,204, 0, 7, 0,205, 0, 7, 0,206, 0, 7, 0,207, 0, 7, 0,208, 0, 7, 0,209, 0, - 7, 0,210, 0, 7, 0,211, 0, 7, 0,212, 0, 7, 0,213, 0, 7, 0,214, 0, 7, 0,215, 0, 7, 0,216, 0, 7, 0,217, 0, - 7, 0,218, 0, 7, 0,219, 0, 7, 0,220, 0, 7, 0,221, 0, 53, 0, 15, 0, 0, 0,222, 0, 9, 0,223, 0, 0, 0,224, 0, - 0, 0,225, 0, 4, 0,226, 0, 4, 0,227, 0, 9, 0,228, 0, 7, 0,229, 0, 7, 0,230, 0, 7, 0,231, 0, 4, 0,232, 0, - 9, 0,233, 0, 9, 0,234, 0, 4, 0,235, 0, 4, 0, 37, 0, 54, 0, 6, 0, 7, 0,182, 0, 7, 0,183, 0, 7, 0,184, 0, - 7, 0,236, 0, 7, 0, 67, 0, 4, 0, 64, 0, 55, 0, 5, 0, 2, 0, 19, 0, 2, 0, 36, 0, 2, 0, 64, 0, 2, 0,237, 0, - 54, 0,231, 0, 56, 0, 17, 0, 32, 0,164, 0, 47, 0,238, 0, 57, 0,239, 0, 7, 0,240, 0, 7, 0,241, 0, 2, 0, 17, 0, - 2, 0,242, 0, 7, 0,110, 0, 7, 0,111, 0, 7, 0,243, 0, 4, 0,244, 0, 2, 0,245, 0, 2, 0,246, 0, 4, 0,129, 0, - 4, 0,140, 0, 2, 0,247, 0, 2, 0,248, 0, 58, 0, 23, 0, 2, 0, 19, 0, 2, 0,249, 0, 7, 0,250, 0, 7, 0,251, 0, - 2, 0,139, 0, 2, 0,252, 0, 4, 0,253, 0, 4, 0,254, 0, 32, 0,164, 0, 59, 0,255, 0, 2, 0, 0, 1, 2, 0, 1, 1, - 2, 0, 2, 1, 9, 0, 3, 1, 7, 0, 4, 1, 7, 0, 5, 1, 2, 0, 6, 1, 2, 0, 7, 1, 2, 0, 8, 1, 2, 0, 9, 1, - 7, 0, 10, 1, 7, 0, 11, 1, 55, 0, 12, 1, 60, 0, 11, 0, 4, 0, 13, 1, 4, 0, 14, 1, 2, 0, 15, 1, 2, 0, 19, 0, - 2, 0, 16, 1, 2, 0, 37, 0, 32, 0,164, 0, 7, 0, 17, 1, 4, 0, 18, 1, 0, 0, 19, 1, 7, 0, 20, 1, 52, 0, 61, 0, - 27, 0, 31, 0, 39, 0, 75, 0, 7, 0, 21, 1, 7, 0, 22, 1, 7, 0, 23, 1, 7, 0, 24, 1, 7, 0, 25, 1, 7, 0, 26, 1, - 7, 0, 27, 1, 7, 0, 28, 1, 7, 0, 29, 1, 7, 0, 30, 1, 7, 0, 31, 1, 7, 0, 32, 1, 7, 0, 33, 1, 7, 0, 34, 1, - 7, 0, 35, 1, 7, 0, 36, 1, 7, 0, 37, 1, 7, 0, 38, 1, 7, 0, 39, 1, 7, 0, 40, 1, 2, 0, 41, 1, 2, 0, 42, 1, - 2, 0, 43, 1, 2, 0, 44, 1, 2, 0, 45, 1, 2, 0, 46, 1, 2, 0, 47, 1, 2, 0, 19, 0, 2, 0, 17, 0, 2, 0,242, 0, - 7, 0, 48, 1, 7, 0, 49, 1, 7, 0, 50, 1, 7, 0, 51, 1, 4, 0, 52, 1, 4, 0, 53, 1, 2, 0, 54, 1, 2, 0, 55, 1, - 2, 0, 16, 1, 2, 0,127, 0, 4, 0, 23, 0, 4, 0,124, 0, 4, 0,125, 0, 4, 0,126, 0, 7, 0, 56, 1, 7, 0, 57, 1, - 7, 0,189, 0, 45, 0, 58, 1, 61, 0, 59, 1, 36, 0, 80, 0, 47, 0,238, 0, 53, 0, 60, 1, 55, 0, 12, 1, 56, 0, 61, 1, - 30, 0,150, 0, 58, 0, 62, 1, 60, 0, 63, 1, 0, 0, 64, 1, 0, 0,181, 0, 62, 0, 8, 0, 7, 0, 65, 1, 7, 0, 66, 1, - 7, 0,172, 0, 4, 0, 19, 0, 7, 0, 67, 1, 7, 0, 68, 1, 7, 0, 69, 1, 32, 0, 45, 0, 63, 0, 84, 0, 27, 0, 31, 0, - 39, 0, 75, 0, 2, 0, 17, 0, 2, 0, 19, 0, 4, 0, 70, 1, 2, 0,175, 0, 2, 0, 71, 1, 7, 0,182, 0, 7, 0,183, 0, - 7, 0,184, 0, 7, 0,185, 0, 7, 0, 72, 1, 7, 0, 73, 1, 7, 0, 74, 1, 7, 0, 75, 1, 7, 0, 76, 1, 7, 0, 77, 1, - 7, 0, 78, 1, 7, 0, 79, 1, 7, 0, 80, 1, 7, 0, 81, 1, 7, 0, 82, 1, 64, 0, 83, 1, 2, 0,249, 0, 2, 0, 70, 0, - 7, 0,110, 0, 7, 0,111, 0, 7, 0, 84, 1, 7, 0, 85, 1, 7, 0, 86, 1, 7, 0, 87, 1, 7, 0, 88, 1, 2, 0, 89, 1, - 2, 0, 90, 1, 2, 0, 91, 1, 2, 0, 92, 1, 0, 0, 93, 1, 0, 0, 94, 1, 2, 0, 95, 1, 2, 0, 96, 1, 2, 0, 97, 1, - 2, 0, 98, 1, 2, 0, 99, 1, 7, 0,100, 1, 7, 0,101, 1, 7, 0,102, 1, 7, 0,103, 1, 2, 0,104, 1, 2, 0, 43, 0, - 2, 0,105, 1, 2, 0,106, 1, 2, 0,107, 1, 2, 0,108, 1, 7, 0,109, 1, 7, 0,110, 1, 7, 0,111, 1, 7, 0,112, 1, - 7, 0,113, 1, 7, 0,114, 1, 7, 0,115, 1, 7, 0,116, 1, 7, 0,117, 1, 7, 0,118, 1, 7, 0,119, 1, 7, 0,120, 1, - 2, 0,121, 1, 2, 0,122, 1, 4, 0,123, 1, 4, 0,124, 1, 2, 0,125, 1, 2, 0,126, 1, 2, 0,127, 1, 2, 0,128, 1, - 7, 0,129, 1, 7, 0,130, 1, 7, 0,131, 1, 7, 0,132, 1, 2, 0,133, 1, 2, 0,134, 1, 36, 0, 80, 0, 51, 0,135, 1, - 2, 0,136, 1, 2, 0,137, 1, 30, 0,150, 0, 65, 0, 2, 0, 27, 0, 31, 0, 36, 0, 80, 0, 66, 0, 18, 0, 7, 0,138, 1, - 7, 0,139, 1, 7, 0,140, 1, 7, 0,141, 1, 7, 0,142, 1, 7, 0,143, 1, 7, 0,144, 1, 7, 0,145, 1, 7, 0,146, 1, - 7, 0,147, 1, 2, 0,148, 1, 2, 0,149, 1, 2, 0,150, 1, 2, 0,151, 1, 7, 0,152, 1, 7, 0,153, 1, 7, 0,154, 1, - 4, 0,155, 1, 67, 0,124, 0, 27, 0, 31, 0, 39, 0, 75, 0, 2, 0,156, 1, 2, 0, 19, 0, 7, 0,182, 0, 7, 0,183, 0, - 7, 0,184, 0, 7, 0,157, 1, 7, 0,158, 1, 7, 0,159, 1, 7, 0,160, 1, 7, 0,161, 1, 7, 0,162, 1, 7, 0,163, 1, - 7, 0,164, 1, 7, 0,165, 1, 7, 0,166, 1, 7, 0,167, 1, 7, 0,168, 1, 7, 0,169, 1, 7, 0,170, 1, 7, 0,171, 1, - 7, 0,172, 1, 7, 0,173, 1, 7, 0,174, 1, 7, 0,175, 1, 7, 0,176, 1, 66, 0,177, 1, 7, 0,178, 1, 7, 0,179, 1, - 7, 0,180, 1, 7, 0,181, 1, 7, 0,182, 1, 7, 0,183, 1, 7, 0,184, 1, 2, 0,185, 1, 2, 0,186, 1, 2, 0,187, 1, - 0, 0,188, 1, 0, 0,189, 1, 7, 0,190, 1, 7, 0,191, 1, 2, 0,192, 1, 2, 0,193, 1, 7, 0,194, 1, 7, 0,195, 1, - 7, 0,196, 1, 7, 0,197, 1, 2, 0,198, 1, 2, 0,199, 1, 4, 0, 70, 1, 4, 0,200, 1, 2, 0,201, 1, 2, 0,202, 1, - 2, 0,203, 1, 2, 0,204, 1, 7, 0,205, 1, 7, 0,206, 1, 7, 0,207, 1, 7, 0,208, 1, 7, 0,209, 1, 7, 0,210, 1, - 7, 0,211, 1, 7, 0,212, 1, 7, 0,213, 1, 7, 0,214, 1, 0, 0,215, 1, 7, 0,216, 1, 7, 0,217, 1, 7, 0,218, 1, - 4, 0,219, 1, 0, 0,220, 1, 0, 0,105, 1, 0, 0,221, 1, 0, 0, 64, 1, 2, 0,222, 1, 2, 0,223, 1, 2, 0,136, 1, - 2, 0,224, 1, 2, 0,225, 1, 2, 0,226, 1, 7, 0,227, 1, 7, 0,228, 1, 7, 0,229, 1, 7, 0,230, 1, 7, 0,231, 1, - 2, 0,160, 0, 2, 0,161, 0, 55, 0,232, 1, 55, 0,233, 1, 0, 0,234, 1, 0, 0,235, 1, 0, 0,236, 1, 0, 0,237, 1, - 2, 0,238, 1, 2, 0,239, 1, 7, 0,240, 1, 7, 0,241, 1, 51, 0,135, 1, 61, 0, 59, 1, 36, 0, 80, 0, 68, 0,242, 1, - 30, 0,150, 0, 7, 0,243, 1, 7, 0,244, 1, 7, 0,245, 1, 7, 0,246, 1, 7, 0,247, 1, 2, 0,248, 1, 2, 0, 70, 0, - 7, 0,249, 1, 7, 0,250, 1, 7, 0,251, 1, 7, 0,252, 1, 7, 0,253, 1, 7, 0,254, 1, 7, 0,255, 1, 7, 0, 0, 2, - 7, 0, 1, 2, 2, 0, 2, 2, 2, 0, 3, 2, 4, 0, 4, 2, 4, 0,122, 1, 12, 0, 5, 2, 69, 0, 4, 0, 27, 0, 31, 0, - 0, 0, 6, 2, 70, 0, 2, 0, 43, 0,149, 0, 71, 0, 26, 0, 71, 0, 0, 0, 71, 0, 1, 0, 72, 0, 7, 2, 4, 0, 8, 2, - 4, 0, 9, 2, 4, 0, 10, 2, 4, 0, 11, 2, 4, 0, 12, 2, 4, 0, 13, 2, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 14, 2, - 2, 0, 15, 2, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 7, 0, 16, 2, 7, 0, 17, 2, 7, 0, 18, 2, 7, 0, 19, 2, - 7, 0, 20, 2, 7, 0, 21, 2, 7, 0, 22, 2, 7, 0, 23, 0, 7, 0, 23, 2, 7, 0, 24, 2, 73, 0, 20, 0, 27, 0, 31, 0, - 39, 0, 75, 0, 72, 0, 7, 2, 12, 0, 25, 2, 12, 0, 26, 2, 12, 0, 27, 2, 36, 0, 80, 0, 67, 0, 28, 2, 0, 0, 19, 0, - 0, 0, 29, 2, 2, 0, 30, 2, 2, 0,174, 0, 2, 0, 37, 0, 7, 0, 65, 1, 7, 0,172, 0, 7, 0, 66, 1, 7, 0, 31, 2, - 7, 0, 32, 2, 7, 0, 33, 2, 71, 0, 34, 2, 35, 0, 11, 0, 7, 0, 35, 2, 7, 0, 36, 2, 7, 0, 37, 2, 7, 0,251, 0, - 2, 0, 55, 0, 0, 0, 38, 2, 0, 0, 39, 2, 0, 0, 40, 2, 0, 0, 41, 2, 0, 0, 42, 2, 0, 0, 43, 2, 34, 0, 7, 0, - 7, 0, 44, 2, 7, 0, 36, 2, 7, 0, 37, 2, 2, 0, 40, 2, 2, 0, 43, 2, 7, 0,251, 0, 7, 0, 37, 0, 74, 0, 21, 0, - 74, 0, 0, 0, 74, 0, 1, 0, 2, 0, 17, 0, 2, 0, 45, 2, 2, 0, 43, 2, 2, 0, 19, 0, 2, 0, 46, 2, 2, 0, 47, 2, - 2, 0, 48, 2, 2, 0, 49, 2, 2, 0, 50, 2, 2, 0, 51, 2, 2, 0, 52, 2, 2, 0, 53, 2, 7, 0, 54, 2, 7, 0, 55, 2, - 34, 0, 49, 0, 35, 0, 50, 0, 2, 0, 56, 2, 2, 0, 57, 2, 4, 0, 58, 2, 75, 0, 5, 0, 2, 0, 59, 2, 2, 0, 45, 2, - 0, 0, 19, 0, 0, 0, 37, 0, 2, 0, 70, 0, 76, 0, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 8, 0, 7, 0, 60, 2, - 77, 0, 68, 0, 27, 0, 31, 0, 39, 0, 75, 0, 72, 0, 7, 2, 12, 0, 61, 2, 12, 0, 26, 2, 12, 0, 62, 2, 32, 0, 63, 2, - 32, 0, 64, 2, 32, 0, 65, 2, 36, 0, 80, 0, 78, 0, 66, 2, 38, 0, 67, 2, 67, 0, 28, 2, 12, 0, 68, 2, 7, 0, 65, 1, - 7, 0,172, 0, 7, 0, 66, 1, 2, 0,174, 0, 2, 0, 43, 0, 2, 0, 69, 2, 2, 0, 70, 2, 2, 0, 71, 2, 7, 0, 72, 2, - 7, 0, 70, 0, 2, 0, 73, 2, 2, 0, 30, 2, 2, 0, 19, 0, 2, 0, 74, 2, 7, 0, 75, 2, 7, 0, 76, 2, 7, 0, 77, 2, - 2, 0, 48, 2, 2, 0, 49, 2, 2, 0, 78, 2, 2, 0, 79, 2, 4, 0, 80, 2, 34, 0, 81, 2, 2, 0, 23, 0, 2, 0, 95, 0, - 2, 0, 67, 0, 2, 0, 82, 2, 7, 0, 83, 2, 7, 0, 84, 2, 7, 0, 85, 2, 7, 0, 86, 2, 7, 0, 87, 2, 7, 0, 88, 2, - 7, 0, 89, 2, 7, 0, 90, 2, 7, 0, 91, 2, 7, 0, 92, 2, 0, 0, 93, 2, 79, 0, 94, 2, 80, 0, 95, 2, 0, 0, 96, 2, - 69, 0, 97, 2, 69, 0, 98, 2, 69, 0, 99, 2, 69, 0,100, 2, 4, 0,101, 2, 7, 0,102, 2, 4, 0,103, 2, 4, 0,104, 2, - 76, 0,105, 2, 4, 0,106, 2, 4, 0,107, 2, 75, 0,108, 2, 75, 0,109, 2, 81, 0, 40, 0, 27, 0, 31, 0, 72, 0, 7, 2, - 12, 0,110, 2, 36, 0, 80, 0, 38, 0, 67, 2, 67, 0, 28, 2, 82, 0,111, 2, 83, 0,112, 2, 84, 0,113, 2, 85, 0,114, 2, - 86, 0,115, 2, 87, 0,116, 2, 88, 0,117, 2, 89, 0,118, 2, 81, 0,119, 2, 90, 0,120, 2, 91, 0,121, 2, 92, 0,122, 2, - 92, 0,123, 2, 92, 0,124, 2, 4, 0, 54, 0, 4, 0,125, 2, 4, 0,126, 2, 4, 0,127, 2, 4, 0,128, 2, 2, 0,174, 0, - 2, 0,129, 2, 7, 0, 65, 1, 7, 0,172, 0, 7, 0, 66, 1, 7, 0,130, 2, 4, 0, 69, 2, 2, 0,131, 2, 2, 0, 19, 0, - 2, 0,132, 2, 2, 0,133, 2, 2, 0, 30, 2, 2, 0,134, 2, 93, 0,135, 2, 94, 0,136, 2, 84, 0, 8, 0, 9, 0,137, 2, - 7, 0,138, 2, 4, 0,139, 2, 0, 0, 19, 0, 0, 0,140, 2, 2, 0, 70, 1, 2, 0,141, 2, 2, 0,142, 2, 82, 0, 7, 0, - 4, 0,143, 2, 4, 0,144, 2, 4, 0,145, 2, 4, 0,146, 2, 2, 0, 45, 2, 0, 0,147, 2, 0, 0, 19, 0, 86, 0, 5, 0, - 4, 0,143, 2, 4, 0,144, 2, 0, 0,148, 2, 0, 0,149, 2, 2, 0, 19, 0, 95, 0, 2, 0, 4, 0,150, 2, 7, 0, 37, 2, - 87, 0, 3, 0, 95, 0,151, 2, 4, 0,152, 2, 4, 0, 19, 0, 85, 0, 6, 0, 7, 0,153, 2, 2, 0,154, 2, 2, 0, 45, 2, - 0, 0, 19, 0, 0, 0,149, 2, 0, 0, 71, 2, 88, 0, 4, 0, 0, 0,236, 0, 0, 0,182, 0, 0, 0,183, 0, 0, 0,184, 0, - 96, 0, 6, 0, 47, 0,137, 2, 0, 0, 19, 0, 0, 0,140, 2, 2, 0, 70, 1, 2, 0,141, 2, 2, 0,142, 2, 97, 0, 1, 0, - 7, 0,155, 2, 98, 0, 5, 0, 0, 0,236, 0, 0, 0,182, 0, 0, 0,183, 0, 0, 0,184, 0, 4, 0, 37, 0, 89, 0, 1, 0, - 7, 0,156, 2, 90, 0, 2, 0, 4, 0,157, 2, 4, 0, 17, 0, 83, 0, 7, 0, 7, 0,138, 2, 47, 0,137, 2, 0, 0, 19, 0, - 0, 0,140, 2, 2, 0, 70, 1, 2, 0,141, 2, 2, 0,142, 2, 99, 0, 1, 0, 7, 0,158, 2,100, 0, 1, 0, 4, 0,159, 2, -101, 0, 1, 0, 0, 0,160, 2,102, 0, 1, 0, 7, 0,138, 2,103, 0, 3, 0, 4, 0,161, 2, 0, 0, 92, 0, 7, 0,162, 2, -105, 0, 4, 0, 7, 0,236, 0, 7, 0,182, 0, 7, 0,183, 0, 7, 0,184, 0,106, 0, 1, 0,105, 0,139, 2,107, 0, 5, 0, - 4, 0,163, 2, 4, 0,164, 2, 0, 0, 19, 0, 0, 0, 45, 2, 0, 0, 71, 2,108, 0, 2, 0, 4, 0,165, 2, 4, 0,164, 2, -109, 0, 10, 0,109, 0, 0, 0,109, 0, 1, 0,107, 0,166, 2,106, 0,167, 2,108, 0,168, 2, 4, 0, 54, 0, 4, 0,126, 2, - 4, 0,125, 2, 4, 0, 37, 0, 85, 0,169, 2, 93, 0, 14, 0, 12, 0,170, 2, 85, 0,169, 2, 0, 0,171, 2, 0, 0,172, 2, - 0, 0,173, 2, 0, 0,174, 2, 0, 0,175, 2, 0, 0,176, 2, 0, 0,177, 2, 0, 0, 19, 0, 92, 0,122, 2, 92, 0,124, 2, - 2, 0,178, 2, 0, 0,179, 2, 94, 0, 8, 0, 4, 0,180, 2, 4, 0,181, 2, 82, 0,182, 2, 86, 0,183, 2, 4, 0,126, 2, - 4, 0,125, 2, 4, 0, 54, 0, 4, 0, 37, 0,110, 0, 7, 0,110, 0, 0, 0,110, 0, 1, 0, 4, 0, 17, 0, 4, 0, 70, 1, - 0, 0, 20, 0, 46, 0,134, 0, 0, 0,184, 2,111, 0, 7, 0,110, 0,185, 2, 2, 0,186, 2, 2, 0,170, 2, 2, 0,187, 2, - 2, 0, 90, 0, 9, 0,188, 2, 9, 0,189, 2,112, 0, 3, 0,110, 0,185, 2, 32, 0,164, 0, 0, 0, 20, 0,113, 0, 5, 0, -110, 0,185, 2, 32, 0,164, 0, 0, 0, 20, 0, 2, 0,190, 2, 0, 0,191, 2,114, 0, 5, 0,110, 0,185, 2, 7, 0, 88, 0, - 7, 0,192, 2, 4, 0,193, 2, 4, 0,194, 2,115, 0, 5, 0,110, 0,185, 2, 32, 0,195, 2, 0, 0, 72, 0, 4, 0, 70, 1, - 4, 0, 19, 0,116, 0, 13, 0,110, 0,185, 2, 32, 0,196, 2, 32, 0,197, 2, 32, 0,198, 2, 32, 0,199, 2, 7, 0,200, 2, - 7, 0,201, 2, 7, 0,192, 2, 7, 0,202, 2, 4, 0,203, 2, 4, 0,204, 2, 4, 0, 90, 0, 4, 0,205, 2,117, 0, 5, 0, -110, 0,185, 2, 2, 0,206, 2, 2, 0, 19, 0, 7, 0,207, 2, 32, 0,208, 2,118, 0, 3, 0,110, 0,185, 2, 7, 0,209, 2, - 4, 0, 90, 0,119, 0, 10, 0,110, 0,185, 2, 7, 0,210, 2, 4, 0,211, 2, 4, 0, 37, 0, 2, 0, 90, 0, 2, 0,212, 2, - 2, 0,213, 2, 2, 0,214, 2, 7, 0,215, 2, 0, 0,216, 2,120, 0, 3, 0,110, 0,185, 2, 7, 0, 37, 0, 4, 0, 17, 0, -121, 0, 6, 0,110, 0,185, 2,122, 0,217, 2,123, 0,218, 2,124, 0,219, 2, 7, 0,220, 2, 4, 0, 17, 0,125, 0, 11, 0, -110, 0,185, 2, 52, 0,221, 2, 7, 0,222, 2, 4, 0,223, 2, 0, 0,216, 2, 7, 0,224, 2, 4, 0,225, 2, 32, 0,226, 2, - 0, 0,227, 2, 4, 0,228, 2, 4, 0, 37, 0,126, 0, 10, 0,110, 0,185, 2, 32, 0,229, 2, 47, 0,230, 2, 4, 0, 90, 0, - 4, 0,231, 2, 7, 0,232, 2, 7, 0,233, 2, 0, 0,227, 2, 4, 0,228, 2, 4, 0, 37, 0,127, 0, 3, 0,110, 0,185, 2, - 7, 0,234, 2, 4, 0,235, 2,128, 0, 5, 0,110, 0,185, 2, 7, 0,236, 2, 0, 0,216, 2, 2, 0, 19, 0, 2, 0,237, 2, -129, 0, 8, 0,110, 0,185, 2, 32, 0,164, 0, 7, 0,236, 2, 7, 0,251, 0, 7, 0,106, 0, 0, 0,216, 2, 2, 0, 19, 0, - 2, 0, 17, 0,130, 0, 21, 0,110, 0,185, 2, 32, 0,238, 2, 0, 0,216, 2, 52, 0,221, 2, 32, 0,226, 2, 2, 0, 19, 0, - 2, 0, 37, 0, 7, 0,239, 2, 7, 0,240, 2, 7, 0,241, 2, 7, 0, 75, 2, 7, 0,242, 2, 7, 0,243, 2, 7, 0,244, 2, - 7, 0,245, 2, 4, 0,225, 2, 4, 0,228, 2, 0, 0,227, 2, 7, 0,246, 2, 7, 0,247, 2, 7, 0, 43, 0,131, 0, 7, 0, -110, 0,185, 2, 2, 0,248, 2, 2, 0,249, 2, 4, 0, 70, 0, 32, 0,164, 0, 7, 0,250, 2, 0, 0,216, 2,132, 0, 10, 0, -110, 0,185, 2, 32, 0,164, 0, 0, 0,251, 2, 7, 0,252, 2, 7, 0,253, 2, 7, 0,245, 2, 4, 0,254, 2, 4, 0,255, 2, - 7, 0, 0, 3, 0, 0, 20, 0,133, 0, 1, 0,110, 0,185, 2,134, 0, 7, 0,110, 0,185, 2, 46, 0,134, 0,135, 0, 1, 3, -136, 0, 2, 3,137, 0, 3, 3,138, 0, 4, 3, 12, 0, 5, 3,139, 0, 13, 0,110, 0,185, 2, 85, 0, 6, 3, 85, 0, 7, 3, - 85, 0, 8, 3, 85, 0, 9, 3, 85, 0, 10, 3, 85, 0, 11, 3, 82, 0, 12, 3, 4, 0, 13, 3, 4, 0, 14, 3, 7, 0,220, 2, - 7, 0, 37, 0,140, 0, 15, 3,141, 0, 7, 0,110, 0,185, 2, 85, 0, 6, 3, 85, 0, 16, 3,142, 0, 17, 3,143, 0, 15, 3, - 4, 0, 18, 3, 4, 0, 13, 3,144, 0, 4, 0,110, 0,185, 2, 32, 0,164, 0, 4, 0, 19, 3, 4, 0, 37, 0,145, 0, 2, 0, - 4, 0, 20, 3, 7, 0, 37, 2,146, 0, 2, 0, 4, 0,125, 0, 4, 0, 21, 3,147, 0, 20, 0,110, 0,185, 2, 32, 0,164, 0, - 0, 0,216, 2, 2, 0, 22, 3, 2, 0, 23, 3, 2, 0, 19, 0, 2, 0, 37, 0, 7, 0, 24, 3, 7, 0, 25, 3, 4, 0, 54, 0, - 4, 0, 26, 3,146, 0, 27, 3,145, 0, 28, 3, 4, 0, 29, 3, 4, 0, 30, 3, 4, 0, 31, 3, 4, 0, 21, 3, 7, 0, 32, 3, - 7, 0, 33, 3, 7, 0, 34, 3,148, 0, 8, 0,110, 0,185, 2, 59, 0,255, 0,142, 0, 17, 3, 4, 0, 35, 3, 4, 0, 36, 3, - 4, 0, 37, 3, 2, 0, 19, 0, 2, 0, 57, 0,149, 0, 8, 0,110, 0,185, 2, 32, 0, 45, 0, 2, 0, 38, 3, 2, 0, 19, 0, - 2, 0,206, 2, 2, 0, 57, 0, 7, 0, 39, 3, 7, 0, 40, 3,150, 0, 5, 0,110, 0,185, 2, 4, 0, 41, 3, 2, 0, 19, 0, - 2, 0, 42, 3, 7, 0, 43, 3,151, 0, 7, 0,110, 0,185, 2, 85, 0, 44, 3, 4, 0, 45, 3, 0, 0, 46, 3, 0, 0, 47, 3, - 0, 0, 48, 3, 0, 0, 49, 3,152, 0, 3, 0,110, 0,185, 2,153, 0, 50, 3,138, 0, 4, 3,154, 0, 10, 0,110, 0,185, 2, - 32, 0, 51, 3, 32, 0, 52, 3, 0, 0, 53, 3, 7, 0, 54, 3, 2, 0, 55, 3, 2, 0, 56, 3, 0, 0, 57, 3, 0, 0, 58, 3, - 0, 0,191, 2,155, 0, 9, 0,110, 0,185, 2, 32, 0, 59, 3, 0, 0, 53, 3, 7, 0, 60, 3, 7, 0, 61, 3, 0, 0, 70, 1, - 0, 0,206, 2, 0, 0, 62, 3, 0, 0, 37, 0,156, 0, 1, 0,110, 0,185, 2,157, 0, 27, 0, 27, 0, 31, 0, 2, 0, 46, 2, - 2, 0, 47, 2, 2, 0, 63, 3, 2, 0, 19, 0, 2, 0, 64, 3, 2, 0, 65, 3, 2, 0, 66, 3, 2, 0, 70, 0, 0, 0, 67, 3, - 0, 0, 68, 3, 0, 0, 69, 3, 0, 0, 17, 0, 4, 0, 37, 0, 7, 0, 70, 3, 7, 0, 71, 3, 7, 0, 72, 3, 7, 0, 73, 3, - 7, 0, 74, 3, 7, 0, 75, 3, 34, 0, 76, 3, 36, 0, 80, 0, 38, 0, 67, 2, 87, 0,116, 2, 7, 0, 77, 3, 7, 0, 78, 3, -157, 0, 79, 3,158, 0, 3, 0,158, 0, 0, 0,158, 0, 1, 0, 0, 0, 20, 0, 72, 0, 3, 0, 7, 0, 80, 3, 4, 0, 19, 0, - 4, 0, 37, 0, 32, 0,124, 0, 27, 0, 31, 0, 39, 0, 75, 0,159, 0, 81, 3, 2, 0, 17, 0, 2, 0, 82, 3, 4, 0, 83, 3, - 4, 0, 84, 3, 4, 0, 85, 3, 0, 0, 86, 3, 32, 0, 38, 0, 32, 0, 87, 3, 32, 0, 88, 3, 32, 0, 89, 3, 32, 0, 90, 3, - 36, 0, 80, 0, 78, 0, 66, 2, 72, 0, 7, 2,160, 0, 91, 3,160, 0, 92, 3,161, 0, 93, 3, 9, 0, 2, 0,162, 0, 94, 3, - 12, 0, 95, 3, 12, 0,110, 2, 12, 0, 26, 2, 12, 0, 96, 3, 12, 0, 97, 3, 4, 0, 70, 1, 4, 0, 98, 3, 67, 0, 28, 2, - 0, 0, 99, 3, 4, 0, 30, 2, 4, 0,100, 3, 7, 0, 65, 1, 7, 0,101, 3, 7, 0,102, 3, 7, 0,172, 0, 7, 0,103, 3, - 7, 0, 66, 1, 7, 0,104, 3, 7, 0, 16, 2, 7, 0,105, 3, 7, 0,106, 3, 7, 0,107, 3, 7, 0,108, 3, 7, 0,109, 3, - 7, 0,110, 3, 7, 0,252, 2, 7, 0,111, 3, 7, 0,240, 0, 4, 0,112, 3, 2, 0, 19, 0, 2, 0,113, 3, 2, 0,114, 3, - 2, 0,115, 3, 2, 0,116, 3, 2, 0,117, 3, 2, 0,118, 3, 2, 0,119, 3, 2, 0,120, 3, 2, 0,121, 3, 2, 0,122, 3, - 2, 0,123, 3, 4, 0,124, 3, 4, 0,125, 3, 4, 0,126, 3, 4, 0,127, 3, 7, 0,128, 3, 7, 0,102, 2, 7, 0,129, 3, - 7, 0,130, 3, 7, 0,131, 3, 7, 0,132, 3, 7, 0,133, 3, 7, 0,215, 0, 7, 0,134, 3, 7, 0,135, 3, 7, 0,136, 3, - 7, 0,137, 3, 2, 0,138, 3, 0, 0,139, 3, 0, 0,140, 3, 0, 0,141, 3, 0, 0,142, 3, 7, 0,143, 3, 7, 0,144, 3, - 12, 0,145, 3, 12, 0,146, 3, 12, 0,147, 3, 12, 0,148, 3, 7, 0,149, 3, 2, 0,157, 2, 2, 0,150, 3, 7, 0,139, 2, - 4, 0,151, 3, 4, 0,152, 3,163, 0,153, 3, 2, 0,154, 3, 2, 0,247, 0, 7, 0,155, 3, 12, 0,156, 3, 12, 0,157, 3, - 12, 0,158, 3, 12, 0,159, 3,164, 0, 62, 1,165, 0,160, 3, 68, 0,161, 3, 2, 0,162, 3, 2, 0,163, 3, 2, 0,164, 3, - 2, 0,165, 3, 7, 0,131, 2, 2, 0,166, 3, 2, 0,167, 3,153, 0,168, 3,142, 0,169, 3,142, 0,170, 3, 4, 0,171, 3, - 4, 0,172, 3, 4, 0,173, 3, 4, 0, 70, 0, 12, 0,174, 3, 12, 0,175, 3, 12, 0,176, 3,166, 0, 14, 0,166, 0, 0, 0, -166, 0, 1, 0, 32, 0, 38, 0, 7, 0,252, 2, 7, 0, 67, 1, 7, 0,253, 2, 7, 0,245, 2, 0, 0, 20, 0, 4, 0,254, 2, - 4, 0,255, 2, 4, 0,177, 3, 2, 0, 17, 0, 2, 0,178, 3, 7, 0, 0, 3,167, 0, 12, 0,167, 0, 0, 0,167, 0, 1, 0, - 32, 0, 45, 0, 4, 0,179, 3, 4, 0,157, 2, 4, 0,180, 3, 4, 0, 17, 0, 4, 0,181, 3, 7, 0, 67, 1, 7, 0,182, 3, - 7, 0,183, 3, 7, 0,155, 2,164, 0, 40, 0, 4, 0, 19, 0, 2, 0,184, 3, 2, 0,185, 3, 2, 0,245, 2, 2, 0,186, 3, - 2, 0,187, 3, 2, 0,188, 3, 2, 0,189, 3, 2, 0,190, 3, 7, 0,191, 3, 7, 0,192, 3, 7, 0,193, 3, 7, 0,194, 3, - 7, 0,195, 3, 7, 0,196, 3, 7, 0,197, 3, 7, 0,198, 3, 7, 0,199, 3, 7, 0,200, 3, 7, 0,201, 3, 7, 0,202, 3, - 7, 0,203, 3, 7, 0,204, 3, 7, 0,205, 3, 7, 0,206, 3, 7, 0, 37, 0, 7, 0,207, 3, 7, 0,208, 3, 7, 0,209, 3, - 7, 0,210, 3, 7, 0,211, 3, 7, 0,212, 3, 7, 0,213, 3, 7, 0,214, 3, 7, 0,215, 3, 7, 0,216, 3, 52, 0,165, 0, -168, 0,217, 3, 7, 0,218, 3, 4, 0,194, 2,169, 0, 5, 0, 68, 0,242, 1, 7, 0,219, 3, 7, 0,220, 3, 2, 0, 19, 0, - 2, 0,221, 3,170, 0, 9, 0,170, 0, 0, 0,170, 0, 1, 0, 4, 0,222, 3, 4, 0,223, 3, 4, 0,224, 3, 4, 0, 19, 0, - 4, 0,225, 3, 9, 0,226, 3, 9, 0,227, 3,138, 0, 19, 0,138, 0, 0, 0,138, 0, 1, 0, 4, 0, 19, 0, 4, 0,228, 3, - 4, 0,229, 3, 4, 0,230, 3, 4, 0,231, 3, 4, 0,232, 3, 4, 0,233, 3, 4, 0,223, 3, 4, 0,157, 2, 4, 0, 57, 0, - 0, 0,234, 3, 0, 0,235, 3, 0, 0,236, 3, 0, 0,237, 3, 12, 0,238, 3,171, 0,239, 3, 9, 0,240, 3,172, 0, 1, 0, - 7, 0, 44, 2,163, 0, 30, 0, 4, 0, 19, 0, 7, 0,241, 3, 7, 0,242, 3, 7, 0,243, 3, 4, 0,244, 3, 4, 0,245, 3, - 4, 0,246, 3, 4, 0,247, 3, 7, 0,248, 3, 7, 0,249, 3, 7, 0,250, 3, 7, 0,251, 3, 7, 0,252, 3, 7, 0,253, 3, - 7, 0,254, 3, 7, 0,255, 3, 7, 0, 0, 4, 7, 0, 1, 4, 7, 0, 2, 4, 7, 0, 3, 4, 7, 0, 4, 4, 7, 0, 5, 4, - 7, 0, 6, 4, 7, 0, 7, 4, 7, 0, 8, 4, 7, 0, 9, 4, 4, 0, 10, 4, 4, 0, 11, 4, 7, 0, 12, 4, 7, 0,134, 3, -165, 0, 50, 0, 4, 0,223, 3, 4, 0, 13, 4,173, 0, 14, 4,174, 0, 15, 4, 0, 0, 37, 0, 0, 0, 16, 4, 2, 0, 17, 4, - 7, 0, 18, 4, 0, 0, 19, 4, 7, 0, 20, 4, 7, 0, 21, 4, 7, 0, 22, 4, 7, 0, 23, 4, 7, 0, 24, 4, 7, 0, 25, 4, - 7, 0, 26, 4, 7, 0, 27, 4, 7, 0, 28, 4, 2, 0, 29, 4, 0, 0, 30, 4, 2, 0, 31, 4, 7, 0, 32, 4, 7, 0, 33, 4, - 0, 0, 34, 4, 4, 0,126, 0, 4, 0, 35, 4, 4, 0, 36, 4, 2, 0, 37, 4, 2, 0, 38, 4,172, 0, 39, 4, 4, 0, 40, 4, - 4, 0, 82, 0, 7, 0, 41, 4, 7, 0, 42, 4, 7, 0, 43, 4, 7, 0, 44, 4, 2, 0, 45, 4, 2, 0, 46, 4, 2, 0, 47, 4, - 2, 0, 48, 4, 2, 0, 49, 4, 2, 0, 50, 4, 2, 0, 51, 4, 2, 0, 52, 4,175, 0, 53, 4, 7, 0, 54, 4, 7, 0, 55, 4, -138, 0, 56, 4, 12, 0, 5, 3,169, 0, 57, 4,153, 0, 49, 0,152, 0, 58, 4, 2, 0, 17, 0, 2, 0, 59, 4, 2, 0, 60, 4, - 2, 0, 61, 4, 7, 0, 62, 4, 2, 0, 63, 4, 2, 0, 64, 4, 7, 0, 65, 4, 2, 0, 66, 4, 2, 0, 67, 4, 7, 0, 68, 4, - 7, 0, 69, 4, 7, 0, 70, 4, 7, 0, 71, 4, 7, 0, 72, 4, 7, 0, 73, 4, 4, 0, 74, 4, 7, 0, 75, 4, 7, 0, 76, 4, - 7, 0, 77, 4, 81, 0, 78, 4, 81, 0, 79, 4, 81, 0, 80, 4, 0, 0, 81, 4, 7, 0, 82, 4, 7, 0, 83, 4, 36, 0, 80, 0, - 2, 0, 84, 4, 0, 0, 85, 4, 0, 0, 86, 4, 7, 0, 87, 4, 4, 0, 88, 4, 7, 0, 89, 4, 7, 0, 90, 4, 4, 0, 91, 4, - 4, 0, 19, 0, 7, 0, 92, 4, 7, 0, 93, 4, 7, 0, 94, 4, 85, 0, 95, 4, 7, 0, 96, 4, 7, 0, 97, 4, 7, 0, 98, 4, - 7, 0, 99, 4, 7, 0,100, 4, 7, 0,101, 4, 7, 0,102, 4, 4, 0,103, 4,176, 0, 73, 0, 27, 0, 31, 0, 39, 0, 75, 0, - 2, 0,175, 0, 2, 0, 71, 1, 2, 0,105, 1, 2, 0,104, 4, 7, 0,105, 4, 7, 0,106, 4, 7, 0,107, 4, 7, 0,108, 4, - 7, 0,109, 4, 7, 0,110, 4, 7, 0,111, 4, 7, 0,112, 4, 7, 0,163, 1, 7, 0,165, 1, 7, 0,164, 1, 7, 0,113, 4, - 4, 0,114, 4, 7, 0,115, 4, 7, 0,116, 4, 7, 0,117, 4, 7, 0,118, 4, 7, 0,119, 4, 7, 0,120, 4, 7, 0,121, 4, - 2, 0,122, 4, 2, 0, 70, 1, 2, 0,123, 4, 2, 0,124, 4, 2, 0,125, 4, 2, 0,126, 4, 2, 0,127, 4, 2, 0,128, 4, - 7, 0,129, 4, 7, 0,130, 4, 7, 0,131, 4, 7, 0,132, 4, 7, 0,133, 4, 7, 0,134, 4, 7, 0,135, 4, 7, 0,136, 4, - 7, 0,137, 4, 7, 0,138, 4, 7, 0,139, 4, 7, 0,140, 4, 2, 0,141, 4, 2, 0,142, 4, 2, 0,143, 4, 2, 0,144, 4, - 7, 0,145, 4, 7, 0,146, 4, 7, 0,147, 4, 7, 0,148, 4, 2, 0,149, 4, 2, 0,150, 4, 2, 0,151, 4, 2, 0,152, 4, - 7, 0,153, 4, 7, 0,154, 4, 7, 0,155, 4, 7, 0,156, 4, 2, 0,157, 4, 2, 0,158, 4, 2, 0,159, 4, 2, 0, 19, 0, - 7, 0,160, 4, 7, 0,161, 4, 36, 0, 80, 0, 51, 0,135, 1, 2, 0,136, 1, 2, 0,137, 1, 30, 0,150, 0,177, 0, 8, 0, -177, 0, 0, 0,177, 0, 1, 0, 4, 0,112, 3, 4, 0,162, 4, 4, 0, 19, 0, 2, 0,163, 4, 2, 0,164, 4, 32, 0,164, 0, -178, 0, 13, 0, 9, 0,165, 4, 9, 0,166, 4, 4, 0,167, 4, 4, 0,168, 4, 4, 0,169, 4, 4, 0,170, 4, 4, 0,171, 4, - 4, 0,172, 4, 4, 0,173, 4, 4, 0,174, 4, 4, 0,175, 4, 4, 0, 37, 0, 0, 0,176, 4,179, 0, 5, 0, 9, 0,177, 4, - 9, 0,178, 4, 4, 0,179, 4, 4, 0, 70, 0, 0, 0,180, 4,180, 0, 15, 0, 4, 0, 17, 0, 4, 0,181, 4, 4, 0,182, 4, - 4, 0,183, 4, 4, 0,184, 4, 4, 0,185, 4, 7, 0,186, 4, 4, 0,187, 4, 4, 0, 90, 0, 4, 0,188, 4, 4, 0,189, 4, - 4, 0,190, 4, 4, 0,191, 4, 4, 0,192, 4, 26, 0, 30, 0,181, 0, 7, 0, 4, 0,193, 4, 7, 0,194, 4, 7, 0,195, 4, - 7, 0,196, 4, 4, 0,197, 4, 2, 0, 19, 0, 2, 0, 37, 0,182, 0, 11, 0,182, 0, 0, 0,182, 0, 1, 0, 0, 0, 20, 0, - 67, 0,198, 4, 68, 0,199, 4, 4, 0,112, 3, 4, 0,200, 4, 4, 0,201, 4, 4, 0, 37, 0, 4, 0,202, 4, 4, 0,203, 4, -183, 0,134, 0,178, 0,204, 4,179, 0,205, 4,180, 0,206, 4, 4, 0, 18, 3, 4, 0,126, 0, 4, 0, 35, 4, 4, 0,207, 4, - 4, 0,208, 4, 4, 0,209, 4, 4, 0,210, 4, 2, 0, 19, 0, 2, 0,211, 4, 7, 0,102, 2, 7, 0,212, 4, 7, 0,213, 4, - 7, 0,214, 4, 7, 0,215, 4, 7, 0,216, 4, 2, 0,217, 4, 2, 0,218, 4, 2, 0,219, 4, 2, 0,220, 4, 2, 0,246, 0, - 2, 0,221, 4, 2, 0,222, 4, 2, 0,223, 4, 2, 0,224, 4, 2, 0,225, 4, 2, 0, 92, 1, 2, 0,106, 0, 2, 0,226, 4, - 2, 0,227, 4, 2, 0,228, 4, 2, 0,229, 4, 2, 0,230, 4, 2, 0,231, 4, 2, 0,232, 4, 2, 0,233, 4, 2, 0,234, 4, - 2, 0, 93, 1, 2, 0,235, 4, 2, 0,236, 4, 2, 0,237, 4, 2, 0,238, 4, 4, 0,239, 4, 4, 0, 70, 1, 4, 0,240, 4, - 2, 0,241, 4, 2, 0,242, 4, 2, 0,243, 4, 2, 0,122, 1, 2, 0,244, 4, 2, 0,245, 4, 2, 0,246, 4, 2, 0,247, 4, - 24, 0,248, 4, 24, 0,249, 4, 23, 0,250, 4, 12, 0,251, 4, 2, 0,252, 4, 2, 0, 37, 0, 7, 0,253, 4, 7, 0,254, 4, - 7, 0,255, 4, 7, 0, 0, 5, 4, 0, 1, 5, 7, 0, 2, 5, 7, 0, 3, 5, 7, 0, 4, 5, 7, 0, 5, 5, 2, 0, 6, 5, - 2, 0, 7, 5, 2, 0, 8, 5, 2, 0, 9, 5, 2, 0, 10, 5, 2, 0, 11, 5, 7, 0, 12, 5, 7, 0, 13, 5, 7, 0, 14, 5, - 2, 0, 15, 5, 2, 0, 16, 5, 2, 0, 17, 5, 2, 0, 18, 5, 2, 0, 19, 5, 2, 0, 20, 5, 2, 0, 21, 5, 2, 0, 22, 5, - 2, 0, 23, 5, 2, 0, 24, 5, 4, 0, 25, 5, 4, 0, 26, 5, 4, 0, 27, 5, 4, 0, 28, 5, 4, 0, 29, 5, 7, 0, 30, 5, - 4, 0, 31, 5, 4, 0, 32, 5, 4, 0, 33, 5, 4, 0, 34, 5, 7, 0, 35, 5, 7, 0, 36, 5, 7, 0, 37, 5, 7, 0, 38, 5, - 7, 0, 39, 5, 7, 0, 40, 5, 7, 0, 41, 5, 7, 0, 42, 5, 7, 0, 43, 5, 0, 0, 44, 5, 0, 0, 45, 5, 4, 0, 46, 5, - 2, 0, 47, 5, 2, 0,239, 1, 0, 0, 48, 5, 7, 0, 49, 5, 7, 0, 50, 5, 4, 0, 51, 5, 4, 0, 52, 5, 7, 0, 53, 5, - 7, 0, 54, 5, 2, 0, 55, 5, 2, 0, 56, 5, 7, 0, 57, 5, 2, 0, 58, 5, 2, 0, 59, 5, 4, 0, 60, 5, 2, 0, 61, 5, - 2, 0, 62, 5, 2, 0, 63, 5, 2, 0, 64, 5, 7, 0, 65, 5, 7, 0, 70, 0, 42, 0, 66, 5, 0, 0, 67, 5,184, 0, 9, 0, -184, 0, 0, 0,184, 0, 1, 0, 0, 0, 20, 0, 2, 0, 68, 5, 2, 0, 69, 5, 2, 0, 70, 5, 2, 0, 43, 0, 7, 0, 71, 5, - 7, 0, 70, 0,185, 0, 7, 0, 2, 0,211, 2, 2, 0, 70, 1, 2, 0,109, 0, 2, 0, 72, 5, 7, 0, 73, 5, 7, 0, 70, 0, - 42, 0, 74, 5,186, 0, 5, 0, 7, 0, 75, 5, 0, 0, 17, 0, 0, 0, 43, 0, 0, 0, 70, 0, 0, 0,239, 1,187, 0, 26, 0, - 7, 0,120, 4, 7, 0,121, 4, 2, 0, 70, 1, 2, 0, 19, 0, 2, 0, 76, 5, 2, 0,137, 1, 2, 0,123, 4, 2, 0,124, 4, - 2, 0,125, 4, 2, 0,126, 4, 2, 0,127, 4, 2, 0,128, 4,186, 0, 77, 5, 2, 0,217, 4, 2, 0,218, 4, 2, 0,219, 4, - 2, 0,220, 4, 2, 0,246, 0, 2, 0,221, 4, 2, 0,222, 4, 2, 0,223, 4,185, 0, 78, 5, 2, 0, 79, 5, 2, 0,224, 4, - 2, 0,227, 4, 2, 0,228, 4,188, 0, 5, 0,188, 0, 0, 0,188, 0, 1, 0, 4, 0,222, 3, 0, 0,234, 3, 4, 0, 19, 0, -189, 0, 6, 0,190, 0, 80, 5, 4, 0, 81, 5, 4, 0, 82, 5, 9, 0, 83, 5, 0, 0, 84, 5, 4, 0, 37, 0,191, 0, 6, 0, -189, 0, 85, 5, 2, 0, 19, 0, 2, 0, 86, 5, 2, 0, 87, 5, 2, 0, 88, 5, 9, 0, 89, 5,192, 0, 4, 0, 2, 0,106, 0, - 2, 0,222, 2, 2, 0,228, 3, 2, 0, 90, 5,193, 0, 14, 0, 2, 0, 19, 0, 2, 0, 91, 5, 2, 0, 92, 5, 2, 0, 93, 5, -192, 0, 94, 5, 9, 0, 89, 5, 7, 0, 95, 5, 7, 0, 57, 0, 4, 0, 96, 5, 4, 0, 97, 5, 4, 0, 98, 5, 4, 0, 99, 5, - 46, 0,134, 0, 32, 0,164, 0,194, 0, 4, 0,194, 0, 0, 0,194, 0, 1, 0, 0, 0,100, 5, 7, 0,101, 5,195, 0, 6, 0, -189, 0, 85, 5, 7, 0,102, 5, 4, 0, 90, 0, 0, 0,103, 5, 0, 0,104, 5, 0, 0,191, 2,196, 0, 9, 0,189, 0, 85, 5, - 7, 0,105, 5, 7, 0,106, 5, 2, 0, 70, 1, 2, 0, 19, 0, 4, 0, 36, 0, 4, 0,107, 5, 87, 0,108, 5, 9, 0, 89, 5, -197, 0, 74, 0,196, 0,109, 5,196, 0,110, 5,195, 0, 81, 3, 7, 0,111, 5, 2, 0,112, 5, 2, 0,113, 5, 7, 0,114, 5, - 7, 0,115, 5, 2, 0,228, 3, 2, 0,116, 5, 7, 0,117, 5, 7, 0,118, 5, 7, 0,119, 5, 2, 0,120, 5, 2, 0, 96, 5, - 2, 0,121, 5, 2, 0,122, 5, 2, 0,123, 5, 2, 0,124, 5, 7, 0,125, 5, 7, 0,126, 5, 7, 0,127, 5, 2, 0,128, 5, - 2, 0,129, 5, 2, 0,130, 5, 2, 0,131, 5, 2, 0,132, 5, 2, 0,133, 5, 2, 0,134, 5,191, 0,135, 5,193, 0,136, 5, - 7, 0,137, 5, 7, 0,138, 5, 7, 0,139, 5, 2, 0,140, 5, 2, 0,141, 5, 0, 0,142, 5, 0, 0,143, 5, 0, 0,144, 5, - 0, 0,145, 5, 0, 0,146, 5, 0, 0,147, 5, 2, 0,148, 5, 7, 0,149, 5, 7, 0,150, 5, 7, 0,151, 5, 7, 0,152, 5, - 7, 0,153, 5, 7, 0,154, 5, 7, 0,155, 5, 7, 0,156, 5, 7, 0,157, 5, 7, 0,158, 5, 2, 0,159, 5, 0, 0,160, 5, - 0, 0,161, 5, 0, 0,162, 5, 0, 0,163, 5, 32, 0,164, 5, 0, 0,165, 5, 0, 0,166, 5, 0, 0,167, 5, 0, 0,168, 5, - 0, 0,169, 5, 0, 0,170, 5, 0, 0,171, 5, 0, 0,172, 5, 2, 0,173, 5, 2, 0,174, 5, 2, 0,175, 5, 2, 0,176, 5, - 2, 0,177, 5, 4, 0,178, 5, 4, 0,179, 5,198, 0, 8, 0, 4, 0,180, 5, 4, 0,181, 5, 4, 0,182, 5, 4, 0,183, 5, - 4, 0,184, 5, 4, 0,185, 5, 4, 0, 54, 0, 4, 0,126, 2,199, 0, 3, 0, 7, 0,186, 5, 2, 0,187, 5, 2, 0, 19, 0, -200, 0, 2, 0, 7, 0,188, 5, 4, 0, 19, 0, 46, 0, 38, 0, 27, 0, 31, 0, 39, 0, 75, 0, 32, 0,189, 5,176, 0,190, 5, - 46, 0,191, 5, 47, 0,238, 0, 12, 0,192, 5,177, 0,193, 5, 32, 0,194, 5, 7, 0,195, 5, 7, 0,196, 5, 7, 0,197, 5, - 7, 0,198, 5, 4, 0,112, 3, 2, 0, 19, 0, 2, 0, 64, 1, 61, 0, 59, 1,201, 0,199, 5,197, 0,200, 5,202, 0,201, 5, -183, 0,182, 0,181, 0,202, 5, 12, 0,100, 0, 12, 0,203, 5, 12, 0,204, 5,203, 0,205, 5, 2, 0,206, 5, 2, 0,207, 5, - 2, 0,247, 0, 2, 0,208, 5, 4, 0,209, 5, 4, 0,210, 5, 12, 0,211, 5,186, 0, 77, 5,187, 0,212, 5,199, 0,213, 5, -162, 0, 94, 3,200, 0,214, 5,204, 0, 6, 0, 47, 0,238, 0, 45, 0, 58, 1, 7, 0, 90, 2, 7, 0, 91, 2, 7, 0,106, 0, - 7, 0,215, 5,205, 0, 35, 0, 7, 0,216, 5, 7, 0,217, 5, 7, 0,218, 5, 7, 0,219, 5, 7, 0,220, 5, 7, 0,221, 5, - 7, 0,222, 5, 7, 0,223, 5, 7, 0,224, 5, 7, 0, 77, 1, 7, 0,225, 5, 7, 0,226, 5, 7, 0,227, 5, 7, 0,228, 5, - 7, 0,171, 0, 2, 0,229, 5, 2, 0,230, 5, 2, 0, 71, 2, 2, 0,231, 5, 2, 0,232, 5, 2, 0,233, 5, 2, 0,234, 5, - 7, 0,235, 5, 72, 0,236, 5,162, 0, 94, 3,205, 0,237, 5,206, 0,238, 5,207, 0,239, 5,208, 0,240, 5,209, 0,241, 5, -210, 0,242, 5, 7, 0,243, 5, 2, 0,244, 5, 2, 0,245, 5, 4, 0,239, 1,211, 0, 54, 0,212, 0, 0, 0,212, 0, 1, 0, - 12, 0,246, 5, 4, 0,247, 5, 7, 0,248, 5, 2, 0,249, 5, 7, 0,224, 5, 7, 0, 77, 1, 7, 0, 43, 0, 4, 0,250, 5, - 2, 0,233, 5, 2, 0,234, 5, 32, 0,189, 5, 32, 0,251, 5,204, 0,252, 5,211, 0,237, 5, 0, 0,253, 5, 4, 0,112, 3, - 4, 0,254, 5, 2, 0,255, 5, 2, 0, 70, 0, 2, 0, 0, 6, 2, 0, 1, 6, 2, 0,239, 1, 2, 0, 19, 0, 2, 0, 29, 2, - 2, 0, 2, 6, 7, 0,112, 0, 7, 0, 3, 6, 7, 0, 4, 6, 7, 0, 5, 6, 7, 0, 6, 6, 7, 0, 7, 6, 7, 0,171, 0, - 7, 0,195, 5, 2, 0, 8, 6, 2, 0,122, 1, 2, 0, 9, 6, 2, 0, 10, 6, 2, 0, 11, 6, 2, 0, 12, 6, 2, 0, 13, 6, - 2, 0, 14, 6, 2, 0, 15, 6, 2, 0, 16, 6, 4, 0, 17, 6, 12, 0, 18, 6, 2, 0, 19, 6, 2, 0,140, 2, 2, 0, 20, 6, - 0, 0, 21, 6, 0, 0, 22, 6, 9, 0, 23, 6,162, 0, 94, 3,213, 0, 25, 0, 24, 0, 36, 0, 24, 0, 64, 0, 23, 0, 24, 6, - 23, 0, 25, 6, 23, 0, 26, 6, 7, 0, 27, 6, 7, 0, 28, 6, 7, 0, 29, 6, 7, 0, 30, 6, 2, 0, 31, 6, 2, 0, 32, 6, - 2, 0, 33, 6, 2, 0, 34, 6, 2, 0, 35, 6, 2, 0, 19, 0, 2, 0, 36, 6, 2, 0, 37, 6, 2, 0, 38, 6, 2, 0, 39, 6, - 2, 0, 40, 6, 2, 0, 1, 6, 7, 0, 41, 6, 7, 0, 42, 6, 4, 0, 43, 6, 4, 0, 44, 6,212, 0, 6, 0,212, 0, 0, 0, -212, 0, 1, 0, 12, 0,246, 5, 4, 0,247, 5, 7, 0,248, 5, 2, 0,249, 5,214, 0, 8, 0,212, 0, 0, 0,212, 0, 1, 0, - 12, 0,246, 5, 4, 0,247, 5, 7, 0,248, 5, 2, 0,249, 5,215, 0, 45, 6, 46, 0,134, 0,216, 0, 14, 0,212, 0, 0, 0, -212, 0, 1, 0, 12, 0,246, 5, 4, 0,247, 5, 7, 0,248, 5, 2, 0,249, 5,213, 0, 46, 6,217, 0, 47, 6, 12, 0, 48, 6, - 2, 0, 70, 1, 2, 0, 49, 6, 4, 0, 19, 0, 7, 0, 50, 6, 4, 0, 1, 6,218, 0, 20, 0,212, 0, 0, 0,212, 0, 1, 0, - 12, 0,246, 5, 4, 0,247, 5, 7, 0,248, 5, 2, 0,249, 5,206, 0,238, 5,213, 0, 46, 6, 2, 0, 51, 6, 2, 0, 52, 6, - 2, 0, 53, 6, 2, 0, 54, 6, 2, 0, 36, 6, 2, 0, 55, 6, 0, 0, 19, 0, 0, 0,137, 1, 9, 0, 66, 2, 4, 0, 56, 6, - 4, 0, 57, 6, 27, 0, 58, 6,219, 0, 16, 0,212, 0, 0, 0,212, 0, 1, 0, 12, 0,246, 5, 4, 0,247, 5, 7, 0,248, 5, - 2, 0,249, 5,213, 0, 46, 6, 7, 0, 90, 2, 7, 0, 91, 2, 2, 0, 51, 6, 2, 0, 59, 6, 2, 0, 60, 6, 2, 0, 61, 6, - 4, 0, 19, 0, 7, 0, 62, 6,162, 0, 94, 3,220, 0, 16, 0, 0, 0, 63, 6, 0, 0, 64, 6, 0, 0, 65, 6, 0, 0, 66, 6, - 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 67, 6, 2, 0, 68, 6, 2, 0,182, 1, 2, 0, 69, 6, 4, 0, 70, 6, 4, 0, 71, 6, - 2, 0, 72, 6, 2, 0, 73, 6, 0, 0, 74, 6, 0, 0, 75, 6,221, 0, 16, 0,212, 0, 0, 0,212, 0, 1, 0, 12, 0,246, 5, - 4, 0,247, 5, 4, 0, 37, 0,220, 0, 76, 6,222, 0, 77, 6, 12, 0, 78, 6, 12, 0, 79, 6,223, 0, 80, 6,210, 0, 81, 6, -224, 0, 82, 6, 2, 0, 83, 6, 2, 0, 84, 6, 2, 0, 85, 6, 2, 0, 70, 0,225, 0, 17, 0,212, 0, 0, 0,212, 0, 1, 0, - 12, 0,246, 5, 4, 0,247, 5, 7, 0,248, 5, 2, 0,249, 5,213, 0, 46, 6, 12, 0, 86, 6,226, 0, 87, 6, 0, 0, 88, 6, -227, 0, 89, 6, 4, 0, 90, 6, 4, 0, 91, 6, 2, 0, 19, 0, 2, 0, 92, 6, 2, 0, 93, 6, 2, 0, 37, 0,228, 0, 29, 0, -212, 0, 0, 0,212, 0, 1, 0, 12, 0,246, 5, 4, 0,247, 5, 7, 0,248, 5, 2, 0,249, 5, 47, 0,230, 2, 45, 0, 58, 1, - 64, 0, 94, 6, 2, 0,133, 0, 2, 0, 95, 6, 2, 0, 70, 0, 2, 0, 96, 6, 4, 0, 19, 0, 2, 0, 97, 6, 2, 0, 98, 6, - 2, 0, 99, 6, 2, 0,239, 1, 0, 0,100, 6, 0, 0,101, 6, 0, 0,102, 6, 0, 0, 1, 6, 7, 0, 90, 2, 7, 0, 91, 2, - 7, 0, 62, 6, 7, 0,122, 1, 7, 0,103, 6, 7, 0,104, 6,162, 0, 94, 3,229, 0, 11, 0,212, 0, 0, 0,212, 0, 1, 0, - 12, 0,246, 5, 4, 0,247, 5, 7, 0,248, 5, 2, 0,249, 5, 2, 0, 49, 6, 2, 0, 19, 0, 4, 0, 37, 0,217, 0, 47, 6, -213, 0, 46, 6,230, 0, 27, 0,212, 0, 0, 0,212, 0, 1, 0, 12, 0,246, 5, 4, 0,247, 5, 7, 0,248, 5, 2, 0,249, 5, - 42, 0,105, 6, 4, 0,106, 6, 4, 0,107, 6, 2, 0, 90, 0, 2, 0,133, 0, 2, 0,108, 6, 0, 0,109, 6, 0, 0,110, 6, - 4, 0,111, 6, 4, 0,112, 6, 4, 0,113, 6, 4, 0,114, 6, 2, 0,115, 6, 2, 0,116, 6, 7, 0,117, 6, 23, 0,118, 6, - 23, 0,119, 6, 4, 0,120, 6, 4, 0,121, 6, 0, 0,122, 6, 0, 0,123, 6,231, 0, 10, 0, 27, 0, 31, 0, 9, 0,124, 6, - 9, 0,125, 6, 9, 0,126, 6, 9, 0,127, 6, 9, 0,128, 6, 4, 0, 90, 0, 4, 0,129, 6, 0, 0,130, 6, 0, 0,131, 6, -232, 0, 10, 0,212, 0, 0, 0,212, 0, 1, 0, 12, 0,246, 5, 4, 0,247, 5, 7, 0,248, 5,231, 0,132, 6, 2, 0, 90, 0, - 2, 0,133, 0, 4, 0, 43, 0, 9, 0,133, 6,233, 0, 8, 0,212, 0, 0, 0,212, 0, 1, 0, 12, 0,246, 5, 4, 0,247, 5, - 7, 0,248, 5,213, 0, 46, 6, 4, 0, 19, 0, 4, 0,134, 6,234, 0, 23, 0,212, 0, 0, 0,212, 0, 1, 0, 12, 0,246, 5, - 4, 0,247, 5, 7, 0,248, 5, 2, 0,249, 5,213, 0, 46, 6, 27, 0,135, 6, 27, 0, 81, 0, 2, 0, 19, 0, 2, 0,133, 0, - 7, 0,136, 6, 9, 0,137, 6, 7, 0, 90, 2, 7, 0, 91, 2, 7, 0,138, 6, 7, 0,139, 6, 61, 0, 59, 1, 61, 0,140, 6, - 4, 0,141, 6, 2, 0,142, 6, 2, 0, 37, 0,162, 0, 94, 3,235, 0, 10, 0,212, 0, 0, 0,212, 0, 1, 0, 12, 0,246, 5, - 4, 0,247, 5, 7, 0,248, 5, 2, 0,249, 5, 2, 0, 19, 0, 2, 0,121, 3, 4, 0, 37, 0,162, 0, 94, 3,236, 0, 42, 0, -212, 0, 0, 0,212, 0, 1, 0, 12, 0,246, 5, 4, 0,247, 5, 7, 0,248, 5, 2, 0,249, 5,213, 0, 46, 6,222, 0, 77, 6, - 0, 0, 63, 6, 0, 0, 64, 6, 0, 0, 65, 6, 2, 0, 17, 0, 2, 0, 73, 6, 2, 0, 19, 0, 2, 0, 67, 6, 9, 0,137, 6, - 4, 0, 70, 6, 4, 0,143, 6, 4, 0,144, 6, 4, 0, 71, 6, 23, 0,145, 6, 23, 0,146, 6, 7, 0,147, 6, 7, 0,148, 6, - 7, 0,149, 6, 7, 0,136, 6, 2, 0,150, 6, 2, 0,237, 0, 2, 0,182, 1, 2, 0, 69, 6, 2, 0, 37, 0, 2, 0, 43, 0, - 2, 0,151, 6, 2, 0,152, 6, 9, 0,153, 6, 9, 0,154, 6, 9, 0,155, 6, 9, 0,156, 6, 9, 0,157, 6, 2, 0,158, 6, - 0, 0, 75, 6, 57, 0,159, 6,237, 0, 7, 0,237, 0, 0, 0,237, 0, 1, 0, 4, 0,160, 6, 4, 0, 23, 0, 0, 0, 84, 0, - 4, 0,161, 6, 4, 0, 17, 0,238, 0, 13, 0,212, 0, 0, 0,212, 0, 1, 0, 12, 0,246, 5, 4, 0,247, 5, 7, 0,248, 5, - 2, 0,249, 5, 4, 0, 17, 0, 4, 0,162, 6, 4, 0, 19, 0, 4, 0,108, 6, 12, 0,163, 6, 12, 0,164, 6, 0, 0,165, 6, -239, 0, 5, 0,212, 0, 0, 0,212, 0, 1, 0, 12, 0,246, 5, 4, 0,247, 5, 4, 0, 37, 0,240, 0, 7, 0,240, 0, 0, 0, -240, 0, 1, 0, 0, 0,166, 6, 2, 0,167, 6, 2, 0,168, 6, 2, 0,169, 6, 2, 0, 37, 0,241, 0, 12, 0, 2, 0,168, 6, - 2, 0,170, 6, 2, 0,171, 6, 0, 0,191, 2, 2, 0,172, 6, 2, 0,173, 6, 2, 0,174, 6, 2, 0,175, 6, 2, 0,176, 6, - 2, 0, 36, 6, 7, 0,177, 6, 7, 0,178, 6,242, 0, 18, 0,242, 0, 0, 0,242, 0, 1, 0, 0, 0,234, 3,241, 0,179, 6, -241, 0,180, 6,241, 0,181, 6,241, 0,182, 6, 7, 0,183, 6, 2, 0,184, 6, 2, 0,185, 6, 2, 0,186, 6, 2, 0,187, 6, - 2, 0,188, 6, 2, 0,189, 6, 2, 0,190, 6, 2, 0,191, 6, 2, 0,192, 6, 2, 0,193, 6,243, 0, 10, 0, 0, 0,194, 6, - 0, 0,195, 6, 0, 0,196, 6, 0, 0,197, 6, 0, 0,198, 6, 0, 0,199, 6, 2, 0,200, 6, 2, 0,201, 6, 2, 0,202, 6, - 2, 0, 37, 0,244, 0, 8, 0, 0, 0,203, 6, 0, 0,204, 6, 0, 0,205, 6, 0, 0,206, 6, 0, 0,207, 6, 0, 0,208, 6, - 7, 0,215, 5, 7, 0, 37, 0,245, 0, 17, 0,243, 0,209, 6,243, 0,210, 6,243, 0,211, 6,243, 0,212, 6,243, 0,213, 6, -243, 0,214, 6,243, 0,215, 6,243, 0,216, 6,243, 0,217, 6,243, 0,218, 6,243, 0,219, 6,243, 0,220, 6,243, 0,221, 6, -243, 0,222, 6,243, 0,223, 6,244, 0,224, 6, 0, 0,225, 6,246, 0, 71, 0, 0, 0,226, 6, 0, 0,227, 6, 0, 0,198, 6, - 0, 0,228, 6, 0, 0,229, 6, 0, 0,230, 6, 0, 0,231, 6, 0, 0,232, 6, 0, 0,233, 6, 0, 0,234, 6, 0, 0,235, 6, - 0, 0,236, 6, 0, 0,237, 6, 0, 0,238, 6, 0, 0,239, 6, 0, 0,240, 6, 0, 0,241, 6, 0, 0,242, 6, 0, 0,243, 6, - 0, 0,244, 6, 0, 0,245, 6, 0, 0,246, 6, 0, 0,247, 6, 0, 0,248, 6, 0, 0,249, 6, 0, 0,250, 6, 0, 0,251, 6, - 0, 0,252, 6, 0, 0,253, 6, 0, 0,254, 6, 0, 0,255, 6, 0, 0, 0, 7, 0, 0, 1, 7, 0, 0, 2, 7, 0, 0, 3, 7, - 0, 0, 4, 7, 0, 0, 5, 7, 0, 0, 6, 7, 0, 0, 7, 7, 0, 0, 8, 7, 0, 0, 9, 7, 0, 0, 10, 7, 0, 0, 11, 7, - 0, 0, 12, 7, 0, 0, 13, 7, 0, 0, 14, 7, 0, 0, 15, 7, 0, 0, 16, 7, 0, 0, 17, 7, 0, 0, 18, 7, 0, 0, 19, 7, - 0, 0, 20, 7, 0, 0, 21, 7, 0, 0, 22, 7, 0, 0, 23, 7, 0, 0, 24, 7, 0, 0, 25, 7, 0, 0, 26, 7, 0, 0, 27, 7, - 0, 0, 28, 7, 0, 0, 29, 7, 0, 0, 30, 7, 0, 0, 31, 7, 0, 0, 32, 7, 0, 0, 33, 7, 0, 0, 34, 7, 0, 0, 35, 7, - 0, 0, 36, 7, 0, 0, 37, 7, 0, 0, 38, 7, 0, 0, 92, 0,247, 0, 5, 0, 0, 0, 39, 7, 0, 0,250, 6, 0, 0,252, 6, - 2, 0, 19, 0, 2, 0, 37, 0,248, 0, 24, 0,248, 0, 0, 0,248, 0, 1, 0, 0, 0, 20, 0,245, 0, 40, 7,246, 0, 41, 7, -246, 0, 42, 7,246, 0, 43, 7,246, 0, 44, 7,246, 0, 45, 7,246, 0, 46, 7,246, 0, 47, 7,246, 0, 48, 7,246, 0, 49, 7, -246, 0, 50, 7,246, 0, 51, 7,246, 0, 52, 7,246, 0, 53, 7,246, 0, 54, 7,246, 0, 55, 7,246, 0, 56, 7,246, 0, 57, 7, -247, 0, 58, 7, 4, 0, 59, 7, 4, 0, 37, 0,249, 0, 5, 0, 4, 0, 19, 0, 4, 0, 37, 0, 7, 0,139, 2, 7, 0, 60, 7, - 7, 0, 44, 2,250, 0, 73, 0, 4, 0, 19, 0, 4, 0, 61, 7, 4, 0, 62, 7, 0, 0, 63, 7, 0, 0, 64, 7, 0, 0, 65, 7, - 0, 0, 66, 7, 0, 0, 67, 7, 0, 0, 68, 7, 0, 0, 69, 7, 0, 0, 70, 7, 0, 0, 71, 7, 2, 0, 72, 7, 2, 0, 37, 0, - 4, 0, 73, 7, 4, 0, 74, 7, 4, 0, 75, 7, 4, 0, 76, 7, 2, 0, 77, 7, 2, 0, 78, 7, 4, 0, 79, 7, 4, 0, 80, 7, - 4, 0, 81, 7, 4, 0, 82, 7, 4, 0, 83, 7, 4, 0,163, 6, 4, 0, 84, 7, 2, 0, 85, 7, 2, 0, 86, 7, 2, 0, 87, 7, - 2, 0, 88, 7, 12, 0, 89, 7, 12, 0, 90, 7, 12, 0, 91, 7, 12, 0, 92, 7, 0, 0, 93, 7, 2, 0, 94, 7, 2, 0, 95, 7, - 2, 0, 96, 7, 2, 0, 97, 7, 2, 0, 98, 7, 2, 0, 99, 7, 2, 0,100, 7, 2, 0,101, 7,249, 0,102, 7, 2, 0,103, 7, - 2, 0,104, 7, 2, 0,105, 7, 2, 0,106, 7, 2, 0,107, 7, 2, 0,108, 7, 2, 0,109, 7, 2, 0,110, 7, 4, 0,111, 7, - 4, 0,112, 7, 2, 0,113, 7, 2, 0,114, 7, 2, 0,115, 7, 2, 0,116, 7, 2, 0,117, 7, 2, 0,118, 7, 2, 0,119, 7, - 2, 0,120, 7, 2, 0,121, 7, 2, 0,122, 7, 2, 0,123, 7, 2, 0,124, 7, 0, 0,125, 7, 0, 0,126, 7, 7, 0,127, 7, - 2, 0,140, 5, 2, 0,141, 5, 55, 0,128, 7,215, 0, 21, 0, 27, 0, 31, 0, 12, 0,129, 7, 12, 0,130, 7, 12, 0,131, 7, - 12, 0,246, 5, 46, 0,134, 0, 46, 0,132, 7, 2, 0,133, 7, 2, 0,134, 7, 2, 0,135, 7, 2, 0,136, 7, 2, 0,137, 7, - 2, 0,138, 7, 2, 0,139, 7, 2, 0, 37, 0, 2, 0,140, 7, 2, 0,141, 7, 4, 0, 70, 0,210, 0,142, 7, 9, 0,143, 7, - 2, 0,144, 7,251, 0, 5, 0,251, 0, 0, 0,251, 0, 1, 0,251, 0,145, 7, 13, 0,146, 7, 4, 0, 19, 0,252, 0, 7, 0, -252, 0, 0, 0,252, 0, 1, 0,251, 0,147, 7,251, 0,148, 7, 2, 0,249, 4, 2, 0, 19, 0, 4, 0, 37, 0,253, 0, 25, 0, -253, 0, 0, 0,253, 0, 1, 0,254, 0,149, 7,255, 0, 82, 6, 0, 0,150, 7, 0, 0,151, 7, 0, 0,152, 7, 2, 0,153, 7, - 2, 0,154, 7, 2, 0,155, 7, 2, 0,156, 7, 2, 0,157, 7, 2, 0, 37, 0, 2, 0, 19, 0, 2, 0,158, 7, 2, 0,159, 7, - 2, 0,160, 7, 4, 0,161, 7,253, 0,162, 7, 9, 0,163, 7, 4, 0,164, 7, 4, 0,165, 7, 4, 0,166, 7, 4, 0,167, 7, - 0, 0,168, 7, 0, 1, 22, 0, 0, 1, 0, 0, 0, 1, 1, 0,251, 0,147, 7,251, 0,148, 7,251, 0,169, 7,251, 0,170, 7, -215, 0,171, 7, 23, 0, 52, 0, 0, 0,247, 5, 0, 0,172, 7, 2, 0, 37, 6, 2, 0, 38, 6, 2, 0,173, 7, 2, 0, 37, 0, - 2, 0,136, 7, 2, 0,161, 6, 2, 0, 19, 0, 1, 1,149, 7, 12, 0,174, 7, 12, 0,246, 5, 12, 0,175, 7, 12, 0,176, 7, - 2, 1, 21, 0, 2, 1, 0, 0, 2, 1, 1, 0,213, 0, 46, 6, 23, 0,177, 7, 23, 0,178, 7, 2, 0, 37, 6, 2, 0, 38, 6, - 2, 0,179, 7, 2, 0,180, 7, 2, 0,181, 7, 2, 0, 19, 0, 7, 0, 86, 2, 2, 0,135, 7, 2, 0,139, 7, 4, 0, 43, 0, - 3, 1,149, 7, 12, 0,182, 7, 12, 0,183, 7, 12, 0,175, 7, 0, 0,184, 7, 9, 0,185, 7, 4, 1, 12, 0, 0, 0,186, 7, - 2, 0,187, 7, 2, 0,188, 7, 2, 0,189, 7, 2, 0,190, 7, 2, 0,236, 4, 2, 0,231, 4,215, 0,191, 7, 46, 0,192, 7, - 4, 0,193, 7, 4, 0,194, 7, 0, 0, 35, 0, 5, 1, 1, 0, 0, 0,195, 7, 6, 1, 8, 0, 57, 0,196, 7, 57, 0,197, 7, - 6, 1,198, 7, 6, 1,199, 7, 6, 1,200, 7, 2, 0,129, 0, 2, 0, 19, 0, 4, 0,201, 7, 7, 1, 4, 0, 4, 0,106, 6, - 4, 0,202, 7, 4, 0,111, 6, 4, 0,203, 7, 8, 1, 2, 0, 4, 0,204, 7, 4, 0,205, 7, 9, 1, 7, 0, 7, 0,206, 7, - 7, 0,207, 7, 7, 0,208, 7, 4, 0, 19, 0, 4, 0, 37, 0, 7, 0,115, 4, 7, 0,209, 7, 10, 1, 6, 0, 0, 0,210, 7, - 0, 0, 65, 6, 49, 0,137, 0, 2, 0,106, 0, 2, 0,235, 4, 4, 0, 37, 0, 11, 1, 21, 0, 11, 1, 0, 0, 11, 1, 1, 0, - 4, 0, 57, 0, 4, 0, 23, 0, 4, 0, 28, 0, 4, 0,211, 7, 4, 0,212, 7, 4, 0,213, 7, 5, 1,214, 7, 0, 0,210, 7, - 4, 0,215, 7, 4, 0,216, 7, 10, 1, 88, 3, 7, 1,217, 7, 8, 1,218, 7, 9, 1,219, 7, 6, 1,220, 7, 6, 1,221, 7, - 6, 1,222, 7, 57, 0,223, 7, 57, 0,224, 7, 12, 1, 12, 0, 0, 0, 6, 2, 9, 0,223, 0, 0, 0,224, 0, 4, 0,227, 0, - 4, 0,235, 0, 9, 0,228, 0, 7, 0,230, 0, 7, 0,231, 0, 9, 0,225, 7, 9, 0,226, 7, 9, 0,232, 0, 9, 0,234, 0, - 13, 1, 43, 0, 13, 1, 0, 0, 13, 1, 1, 0, 9, 0,227, 7, 9, 0, 26, 0, 0, 0, 27, 0, 4, 0, 19, 0, 4, 0, 17, 0, - 4, 0, 23, 0, 4, 0, 88, 0, 4, 0,228, 7, 4, 0,229, 7, 4, 0,212, 7, 4, 0,213, 7, 4, 0,230, 7, 4, 0,246, 0, - 4, 0,231, 7, 4, 0,232, 7, 7, 0,106, 5, 7, 0,233, 7, 4, 0,126, 0, 4, 0,234, 7, 11, 1,235, 7, 36, 0, 80, 0, - 46, 0,134, 0, 49, 0,137, 0, 7, 0,236, 7, 7, 0,237, 7, 12, 1, 60, 1, 13, 1,238, 7, 13, 1,239, 7, 13, 1,240, 7, - 12, 0,241, 7, 14, 1,242, 7, 15, 1,243, 7, 7, 0,244, 7, 7, 0,245, 7, 4, 0,246, 7, 7, 0,247, 7, 9, 0,248, 7, - 4, 0,249, 7, 4, 0,250, 7, 4, 0,251, 7, 7, 0,252, 7, 16, 1, 4, 0, 16, 1, 0, 0, 16, 1, 1, 0, 12, 0,253, 7, - 13, 1,254, 7,201, 0, 6, 0, 12, 0,255, 7, 12, 0,241, 7, 12, 0, 0, 8, 13, 1, 1, 8, 0, 0, 2, 8, 0, 0, 3, 8, - 17, 1, 4, 0, 7, 0, 4, 8, 7, 0,109, 0, 2, 0, 5, 8, 2, 0, 6, 8, 18, 1, 6, 0, 7, 0, 7, 8, 7, 0, 8, 8, - 7, 0, 9, 8, 7, 0, 10, 8, 4, 0, 11, 8, 4, 0, 12, 8, 19, 1, 12, 0, 7, 0, 13, 8, 7, 0, 14, 8, 7, 0, 15, 8, - 7, 0, 16, 8, 7, 0, 17, 8, 7, 0, 18, 8, 7, 0, 19, 8, 7, 0, 20, 8, 7, 0, 21, 8, 7, 0, 22, 8, 4, 0,234, 2, - 4, 0, 23, 8, 20, 1, 2, 0, 7, 0, 75, 5, 7, 0, 37, 0, 21, 1, 5, 0, 7, 0, 24, 8, 7, 0, 25, 8, 4, 0, 90, 0, - 4, 0,192, 2, 4, 0, 26, 8, 22, 1, 6, 0, 22, 1, 0, 0, 22, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 27, 8, - 2, 0, 57, 0, 23, 1, 8, 0, 23, 1, 0, 0, 23, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 27, 8, 2, 0, 57, 0, - 7, 0, 23, 0, 7, 0,126, 0, 24, 1, 45, 0, 24, 1, 0, 0, 24, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 27, 8, - 2, 0,242, 0, 2, 0, 29, 4, 2, 0, 28, 8, 7, 0, 29, 8, 7, 0, 89, 0, 7, 0,247, 2, 4, 0, 30, 8, 4, 0, 82, 0, - 4, 0,194, 2, 7, 0, 31, 8, 7, 0, 32, 8, 7, 0, 33, 8, 7, 0, 34, 8, 7, 0, 35, 8, 7, 0, 36, 8, 7, 0,244, 2, - 7, 0, 57, 1, 7, 0, 37, 8, 7, 0, 38, 8, 7, 0, 37, 0, 7, 0, 39, 8, 7, 0, 40, 8, 7, 0, 41, 8, 2, 0, 42, 8, - 2, 0, 43, 8, 2, 0, 44, 8, 2, 0, 45, 8, 2, 0, 46, 8, 2, 0, 47, 8, 2, 0, 48, 8, 2, 0, 49, 8, 2, 0, 29, 2, - 2, 0, 50, 8, 2, 0, 26, 2, 2, 0, 51, 8, 0, 0, 52, 8, 0, 0, 53, 8, 7, 0,240, 0, 25, 1, 54, 8, 68, 0,242, 1, - 26, 1, 16, 0, 26, 1, 0, 0, 26, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 27, 8, 2, 0,242, 0, 7, 0,239, 2, - 7, 0,240, 2, 7, 0,241, 2, 7, 0, 75, 2, 7, 0,242, 2, 7, 0,243, 2, 7, 0, 55, 8, 7, 0,244, 2, 7, 0,246, 2, - 7, 0,247, 2,227, 0, 5, 0, 2, 0, 17, 0, 2, 0,201, 7, 2, 0, 19, 0, 2, 0, 56, 8, 27, 0,135, 6,226, 0, 3, 0, - 4, 0, 69, 0, 4, 0, 57, 8,227, 0, 2, 0, 27, 1, 7, 0, 27, 1, 0, 0, 27, 1, 1, 0, 0, 0, 20, 0, 2, 0, 17, 0, - 2, 0, 19, 0, 4, 0, 22, 0, 9, 0, 58, 8, 28, 1, 5, 0, 0, 0, 20, 0, 7, 0, 77, 1, 7, 0, 59, 8, 4, 0, 60, 8, - 4, 0, 37, 0, 29, 1, 4, 0, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 43, 0, 2, 0, 70, 0, 30, 1, 4, 0, 0, 0, 20, 0, - 67, 0, 61, 8, 7, 0, 77, 1, 7, 0, 37, 0, 31, 1, 6, 0, 2, 0, 62, 8, 2, 0, 63, 8, 2, 0, 17, 0, 2, 0, 64, 8, - 0, 0, 65, 8, 0, 0, 66, 8, 32, 1, 5, 0, 4, 0, 17, 0, 4, 0, 37, 0, 0, 0, 20, 0, 0, 0, 67, 8, 0, 0, 68, 8, - 33, 1, 3, 0, 4, 0, 17, 0, 4, 0, 37, 0, 0, 0, 20, 0, 34, 1, 4, 0, 2, 0, 69, 8, 2, 0, 70, 8, 2, 0, 19, 0, - 2, 0, 37, 0, 35, 1, 6, 0, 0, 0, 20, 0, 0, 0, 71, 8, 2, 0, 72, 8, 2, 0,244, 2, 2, 0, 70, 1, 2, 0, 70, 0, - 36, 1, 5, 0, 0, 0, 20, 0, 7, 0,109, 0, 7, 0,117, 4, 2, 0, 19, 0, 2, 0,206, 2, 37, 1, 3, 0, 0, 0, 20, 0, - 4, 0,194, 2, 4, 0, 69, 8, 38, 1, 7, 0, 0, 0, 20, 0, 7, 0,117, 4, 0, 0, 73, 8, 0, 0, 74, 8, 2, 0, 70, 1, - 2, 0, 43, 0, 4, 0, 75, 8, 39, 1, 4, 0, 0, 0, 76, 8, 0, 0, 77, 8, 4, 0, 17, 0, 7, 0,210, 2, 40, 1, 3, 0, - 32, 0, 78, 8, 0, 0, 79, 8, 0, 0, 80, 8, 41, 1, 18, 0, 41, 1, 0, 0, 41, 1, 1, 0, 2, 0, 17, 0, 2, 0, 81, 8, - 2, 0, 19, 0, 2, 0, 82, 8, 2, 0, 83, 8, 2, 0, 84, 8, 2, 0, 43, 0, 2, 0, 70, 0, 0, 0, 20, 0, 9, 0, 2, 0, - 42, 1, 85, 8, 32, 0, 45, 0, 2, 0, 90, 5, 2, 0,244, 7, 2, 0, 86, 8, 2, 0, 37, 0, 43, 1, 11, 0, 0, 0, 20, 0, - 0, 0, 17, 0, 0, 0, 87, 8, 2, 0, 19, 0, 2, 0,206, 2, 2, 0, 88, 8, 4, 0, 89, 8, 4, 0, 90, 8, 4, 0, 91, 8, - 4, 0, 92, 8, 4, 0, 93, 8, 44, 1, 1, 0, 0, 0, 94, 8, 45, 1, 4, 0, 42, 0,105, 6, 0, 0, 95, 8, 4, 0, 70, 1, - 4, 0, 19, 0, 42, 1, 18, 0, 42, 1, 0, 0, 42, 1, 1, 0, 42, 1, 96, 8, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 97, 8, - 2, 0, 84, 8, 2, 0, 81, 8, 2, 0, 98, 8, 2, 0, 70, 0, 2, 0,239, 1, 0, 0, 20, 0, 9, 0, 2, 0, 46, 1, 85, 8, - 41, 1, 99, 8, 2, 0, 15, 0, 2, 0,100, 8, 4, 0,101, 8, 47, 1, 3, 0, 4, 0,220, 2, 4, 0, 37, 0, 32, 0, 45, 0, - 48, 1, 12, 0,160, 0,102, 8, 2, 0, 17, 0, 2, 0, 19, 0, 4, 0, 29, 8, 4, 0, 89, 0, 0, 0, 20, 0, 0, 0,103, 8, - 2, 0,104, 8, 2, 0,105, 8, 2, 0,106, 8, 2, 0,107, 8, 7, 0,108, 8, 49, 1, 13, 0, 2, 0, 19, 0, 2, 0,109, 8, - 4, 0, 29, 8, 4, 0, 89, 0, 2, 0,110, 8, 7, 0,243, 3, 7, 0,111, 8, 14, 1,242, 7, 50, 1,112, 8, 2, 0, 17, 0, - 2, 0,113, 8, 2, 0,114, 8, 2, 0,115, 8, 51, 1, 11, 0, 4, 0,220, 2, 2, 0, 17, 0, 2, 0, 19, 0, 32, 0, 45, 0, - 81, 0,116, 8, 0, 0, 20, 0, 7, 0,117, 8, 7, 0,118, 8, 7, 0,129, 3, 2, 0,119, 8, 2, 0,120, 8, 52, 1, 5, 0, - 2, 0, 17, 0, 2, 0, 19, 0, 4, 0, 37, 0, 46, 0,134, 0, 32, 0,189, 5, 53, 1, 5, 0, 4, 0, 19, 0, 4, 0, 17, 0, - 0, 0, 20, 0, 0, 0, 67, 8, 32, 0, 45, 0, 54, 1, 13, 0, 2, 0, 19, 0, 2, 0, 17, 0, 2, 0, 81, 8, 2, 0,130, 3, - 7, 0,121, 8, 7, 0,122, 8, 7, 0, 65, 1, 7, 0, 66, 1, 7, 0,101, 3, 7, 0,104, 3, 7, 0,123, 8, 7, 0,124, 8, - 32, 0,125, 8, 55, 1, 10, 0, 2, 0, 19, 0, 2, 0, 17, 0, 4, 0, 29, 8, 4, 0, 89, 0, 0, 0, 20, 0, 0, 0,103, 8, - 2, 0, 43, 0, 2, 0, 64, 0, 2, 0,126, 8, 2, 0,127, 8, 56, 1, 8, 0, 32, 0, 45, 0, 7, 0,241, 2, 7, 0,128, 8, - 7, 0,129, 8, 7, 0,236, 2, 2, 0, 19, 0, 2, 0,206, 2, 7, 0,130, 8, 57, 1, 12, 0, 2, 0, 17, 0, 2, 0, 70, 1, - 2, 0, 19, 0, 2, 0,244, 2, 2, 0,220, 2, 2, 0,131, 8, 4, 0, 37, 0, 7, 0,132, 8, 7, 0,133, 8, 7, 0,134, 8, - 7, 0,135, 8, 0, 0,136, 8, 58, 1, 9, 0, 2, 0, 19, 0, 2, 0, 17, 0, 4, 0, 29, 8, 4, 0, 89, 0, 0, 0, 20, 0, - 2, 0,137, 1, 2, 0, 64, 0, 2, 0,126, 8, 2, 0,127, 8, 59, 1, 7, 0, 4, 0,194, 2, 4, 0,137, 8, 4, 0,138, 8, - 4, 0,139, 8, 7, 0,140, 8, 7, 0,141, 8, 0, 0, 73, 8, 60, 1, 7, 0, 0, 0,142, 8, 32, 0,143, 8, 0, 0, 79, 8, - 2, 0,144, 8, 2, 0, 43, 0, 4, 0, 70, 0, 0, 0, 80, 8, 61, 1, 6, 0, 2, 0, 19, 0, 2, 0, 17, 0, 4, 0, 29, 8, - 4, 0, 89, 0, 0, 0,145, 8, 0, 0,146, 8, 62, 1, 1, 0, 4, 0, 19, 0, 63, 1, 6, 0, 0, 0, 92, 0, 2, 0, 17, 0, - 2, 0, 19, 0, 4, 0,147, 8, 7, 0,148, 8, 42, 0,105, 6, 64, 1, 4, 0, 0, 0, 71, 2, 2, 0, 19, 0, 4, 0, 17, 0, - 32, 0, 45, 0, 65, 1, 2, 0, 4, 0, 17, 0, 4, 0, 26, 6, 66, 1, 6, 0, 0, 0, 76, 8, 0, 0, 77, 8, 4, 0, 17, 0, - 7, 0, 37, 2, 32, 0, 51, 3, 32, 0,149, 8, 46, 1, 10, 0, 46, 1, 0, 0, 46, 1, 1, 0, 46, 1, 96, 8, 2, 0, 17, 0, - 2, 0, 19, 0, 2, 0, 81, 8, 2, 0,150, 8, 0, 0, 20, 0, 9, 0, 2, 0, 32, 0, 45, 0, 67, 1, 10, 0, 7, 0,129, 3, - 7, 0,151, 8, 7, 0,152, 8, 7, 0,153, 8, 7, 0,154, 8, 4, 0, 19, 0, 7, 0,131, 8, 7, 0,155, 8, 7, 0,156, 8, - 7, 0, 37, 0, 15, 1, 12, 0, 15, 1, 0, 0, 15, 1, 1, 0, 14, 1,157, 8, 9, 0,223, 0, 4, 0,172, 3, 4, 0,230, 3, - 4, 0,231, 3, 4, 0,158, 8, 4, 0,159, 8, 4, 0,160, 8, 7, 0,243, 3, 7, 0, 37, 0, 50, 1, 8, 0, 7, 0,161, 8, - 7, 0,162, 8, 7, 0,163, 8, 7, 0,164, 8, 7, 0,165, 8, 7, 0,166, 8, 7, 0,167, 8, 7, 0,168, 8, 14, 1, 15, 0, - 27, 0, 31, 0, 0, 0,222, 0, 43, 0,149, 0, 9, 0,223, 0, 43, 0,169, 8, 36, 0, 80, 0, 7, 0,243, 3, 7, 0,170, 8, - 7, 0,111, 8, 7, 0,161, 8, 7, 0,162, 8, 7, 0,171, 8, 4, 0, 90, 0, 4, 0,160, 8, 9, 0,172, 8, 68, 1, 15, 0, -212, 0, 0, 0,212, 0, 1, 0, 12, 0,246, 5, 4, 0,247, 5, 7, 0,248, 5, 0, 1,173, 8,213, 0, 46, 6, 14, 1,242, 7, - 2, 0, 70, 1, 2, 0,109, 8, 2, 0, 90, 2, 2, 0, 91, 2, 2, 0, 19, 0, 2, 0, 98, 6, 4, 0, 70, 0, 69, 1, 6, 0, - 69, 1, 0, 0, 69, 1, 1, 0, 32, 0, 45, 0, 9, 0,174, 8, 4, 0,247, 0, 4, 0, 37, 0, 68, 0, 4, 0, 27, 0, 31, 0, - 12, 0,175, 8, 4, 0,131, 0, 7, 0,176, 8, 70, 1, 26, 0, 70, 1, 0, 0, 70, 1, 1, 0, 26, 0,177, 8, 70, 1, 38, 0, - 12, 0,178, 8, 0, 0, 20, 0, 7, 0,179, 8, 7, 0,180, 8, 7, 0,181, 8, 7, 0,182, 8, 4, 0, 19, 0, 7, 0,183, 8, - 7, 0,184, 8, 7, 0,185, 8, 7, 0, 77, 1, 7, 0, 37, 2, 7, 0,186, 8, 7, 0,192, 2, 7, 0,187, 8, 7, 0,188, 8, - 7, 0,189, 8, 7, 0,190, 8, 7, 0,191, 8, 7, 0,172, 0, 2, 0,131, 0, 2, 0,121, 5, 71, 1, 22, 0, 27, 0, 31, 0, - 39, 0, 75, 0, 12, 0,192, 8, 12, 0,193, 8, 12, 0,194, 8, 9, 0,195, 8, 4, 0, 19, 0, 4, 0,255, 5, 2, 0,248, 2, - 2, 0, 56, 6, 2, 0,131, 0, 2, 0,196, 8, 2, 0,197, 8, 2, 0,198, 8, 2, 0,199, 8, 2, 0,200, 8, 4, 0,201, 8, - 4, 0,202, 8, 4, 0,203, 8, 4, 0,204, 8, 4, 0,205, 8, 4, 0,206, 8, 72, 1, 2, 0, 7, 0,153, 2, 4, 0, 19, 0, - 73, 1, 5, 0, 72, 1,207, 8, 4, 0,192, 2, 4, 0,208, 8, 4, 0,209, 8, 4, 0, 19, 0, 74, 1, 6, 0, 4, 0, 37, 0, - 4, 0, 56, 6, 4, 0,203, 8, 4, 0,204, 8, 4, 0,205, 8, 4, 0,206, 8, 75, 1, 42, 0, 75, 1, 0, 0, 75, 1, 1, 0, - 26, 0,177, 8, 12, 0,156, 3, 0, 0, 20, 0, 2, 0, 19, 0, 2, 0,210, 8, 2, 0,211, 8, 2, 0,212, 8, 2, 0,115, 3, - 2, 0,213, 8, 4, 0, 73, 2, 4, 0,203, 8, 4, 0,204, 8, 70, 1,214, 8, 75, 1, 38, 0, 75, 1,215, 8, 12, 0,216, 8, - 9, 0,217, 8, 9, 0,218, 8, 9, 0,219, 8, 7, 0, 65, 1, 7, 0,172, 0, 7, 0,220, 8, 7, 0, 16, 2, 7, 0,106, 3, - 7, 0,108, 3, 2, 0,138, 3, 2, 0, 37, 0, 7, 0,221, 8, 7, 0,222, 8, 7, 0,111, 3, 7, 0,223, 8, 7, 0,224, 8, - 7, 0,225, 8, 7, 0,226, 8, 7, 0,227, 8, 7, 0,228, 8, 7, 0,229, 8, 7, 0,230, 8, 7, 0, 66, 2, 32, 0,231, 8, -161, 0, 11, 0, 12, 0,232, 8, 2, 0, 19, 0, 2, 0,233, 8, 7, 0,102, 2, 7, 0,234, 8, 7, 0,235, 8, 12, 0,236, 8, - 4, 0,237, 8, 4, 0,238, 8, 9, 0,239, 8, 9, 0,240, 8, 76, 1, 1, 0, 4, 0,238, 8, 77, 1, 12, 0, 4, 0,238, 8, - 7, 0, 93, 8, 2, 0,241, 8, 2, 0,242, 8, 7, 0,243, 8, 7, 0,244, 8, 2, 0,245, 8, 2, 0, 19, 0, 7, 0,246, 8, - 7, 0,247, 8, 7, 0,248, 8, 7, 0,249, 8, 78, 1, 7, 0, 78, 1, 0, 0, 78, 1, 1, 0, 12, 0,250, 8, 4, 0, 19, 0, - 4, 0,251, 8, 0, 0,234, 3,247, 0,252, 8,160, 0, 7, 0, 27, 0, 31, 0, 12, 0,253, 8, 12, 0,232, 8, 12, 0,254, 8, - 12, 0,100, 0, 4, 0, 19, 0, 4, 0,255, 8,217, 0, 4, 0, 27, 0,157, 8, 12, 0,232, 8, 4, 0, 0, 9, 4, 0, 19, 0, - 79, 1, 17, 0,212, 0, 0, 0,212, 0, 1, 0, 12, 0,246, 5, 4, 0,247, 5, 7, 0,248, 5, 2, 0,249, 5,213, 0, 46, 6, -160, 0, 91, 3,217, 0, 1, 9, 0, 0, 70, 1, 0, 0, 49, 6, 2, 0, 19, 0, 2, 0, 2, 9, 2, 0, 99, 6, 2, 0, 98, 6, - 2, 0, 3, 9, 7, 0, 4, 9, 80, 1, 8, 0, 80, 1, 0, 0, 80, 1, 1, 0, 78, 1, 5, 9, 36, 0, 80, 0, 12, 0, 95, 3, - 4, 0, 19, 0, 0, 0, 20, 0, 4, 0, 6, 9, 81, 1, 5, 0, 81, 1, 0, 0, 81, 1, 1, 0, 36, 0, 80, 0, 2, 0, 19, 0, - 0, 0, 7, 9, 82, 1, 14, 0, 82, 1, 0, 0, 82, 1, 1, 0, 9, 0, 2, 0, 2, 0, 17, 0, 2, 0, 19, 0, 0, 0, 8, 9, - 0, 0, 9, 9, 0, 0, 7, 9, 7, 0, 10, 9, 7, 0, 11, 9, 4, 0, 37, 0, 36, 0, 80, 0, 7, 0, 12, 9, 7, 0, 13, 9, - 83, 1, 9, 0, 83, 1, 0, 0, 83, 1, 1, 0, 32, 0, 14, 9, 0, 0,251, 2, 7, 0, 15, 9, 2, 0, 16, 9, 2, 0, 19, 0, - 2, 0, 17, 0, 2, 0, 17, 9, 84, 1, 7, 0, 42, 0,105, 6, 26, 0,177, 8, 4, 0, 19, 0, 4, 0, 18, 9, 12, 0, 19, 9, - 32, 0, 14, 9, 0, 0,251, 2, 85, 1, 15, 0, 32, 0, 14, 9, 2, 0, 20, 9, 2, 0, 19, 0, 2, 0, 21, 9, 2, 0, 22, 9, - 0, 0,251, 2, 32, 0, 23, 9, 0, 0, 24, 9, 7, 0, 25, 9, 7, 0, 37, 2, 7, 0, 26, 9, 7, 0, 27, 9, 2, 0, 17, 0, - 2, 0, 70, 1, 7, 0, 77, 1, 86, 1, 6, 0, 32, 0, 14, 9, 4, 0, 28, 9, 4, 0, 29, 9, 4, 0, 90, 0, 4, 0, 37, 0, - 0, 0,251, 2, 87, 1, 4, 0, 32, 0, 14, 9, 4, 0, 19, 0, 4, 0, 28, 9, 0, 0,251, 2, 88, 1, 4, 0, 32, 0, 14, 9, - 4, 0, 19, 0, 4, 0, 28, 9, 0, 0,251, 2, 89, 1, 10, 0, 32, 0, 14, 9, 4, 0, 30, 9, 7, 0,125, 0, 4, 0, 19, 0, - 2, 0,101, 6, 2, 0, 31, 9, 2, 0, 43, 0, 2, 0, 70, 0, 7, 0, 32, 9, 0, 0,251, 2, 90, 1, 4, 0, 32, 0, 14, 9, - 4, 0, 19, 0, 4, 0, 28, 9, 0, 0,251, 2, 91, 1, 10, 0, 32, 0, 14, 9, 2, 0, 17, 0, 2, 0, 37, 4, 4, 0, 88, 0, - 4, 0, 89, 0, 7, 0,128, 8, 7, 0,129, 8, 4, 0, 37, 0,160, 0,102, 8, 0, 0,251, 2, 92, 1, 4, 0, 32, 0, 14, 9, - 4, 0,116, 3, 4, 0, 33, 9, 0, 0,251, 2, 93, 1, 4, 0, 32, 0, 14, 9, 4, 0,116, 3, 4, 0, 37, 0, 0, 0,251, 2, - 94, 1, 5, 0, 32, 0, 14, 9, 7, 0,125, 0, 4, 0, 34, 9, 4, 0,116, 3, 4, 0,117, 3, 95, 1, 6, 0, 32, 0, 14, 9, - 4, 0, 35, 9, 4, 0, 36, 9, 7, 0, 37, 9, 7, 0, 38, 9, 0, 0,251, 2, 96, 1, 16, 0, 32, 0, 14, 9, 32, 0,215, 8, - 4, 0, 17, 0, 7, 0, 39, 9, 7, 0, 40, 9, 7, 0, 41, 9, 7, 0, 42, 9, 7, 0, 43, 9, 7, 0, 44, 9, 7, 0, 45, 9, - 7, 0, 46, 9, 7, 0, 47, 9, 2, 0, 19, 0, 2, 0, 37, 0, 2, 0, 43, 0, 2, 0, 70, 0, 97, 1, 3, 0, 32, 0, 14, 9, - 4, 0, 19, 0, 4, 0, 29, 2, 98, 1, 5, 0, 32, 0, 14, 9, 4, 0, 19, 0, 4, 0, 37, 0, 7, 0, 48, 9, 0, 0,251, 2, - 99, 1, 10, 0, 32, 0, 14, 9, 0, 0,251, 2, 2, 0, 49, 9, 2, 0, 50, 9, 0, 0, 51, 9, 0, 0, 52, 9, 7, 0, 53, 9, - 7, 0, 54, 9, 7, 0, 55, 9, 7, 0, 56, 9,100, 1, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0, - 7, 0, 57, 9, 7, 0, 58, 9, 2, 0, 19, 0, 2, 0, 29, 2,101, 1, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, - 7, 0, 12, 0, 7, 0, 57, 9, 7, 0, 58, 9, 2, 0, 19, 0, 2, 0, 29, 2,102, 1, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, - 7, 0, 11, 0, 7, 0, 12, 0, 7, 0, 57, 9, 7, 0, 58, 9, 2, 0, 19, 0, 2, 0, 29, 2,103, 1, 7, 0, 32, 0, 14, 9, - 0, 0,251, 2, 7, 0, 77, 1, 7, 0, 86, 1, 2, 0, 19, 0, 2, 0, 70, 1, 4, 0, 37, 0,104, 1, 5, 0, 32, 0, 51, 3, - 7, 0, 77, 1, 2, 0, 55, 3, 0, 0, 57, 3, 0, 0, 59, 9,105, 1, 10, 0,105, 1, 0, 0,105, 1, 1, 0, 2, 0, 17, 0, - 2, 0, 19, 0, 0, 0, 60, 9, 7, 0, 21, 1, 7, 0, 22, 1, 2, 0,250, 8, 2, 0, 61, 9, 32, 0, 45, 0,106, 1, 22, 0, -106, 1, 0, 0,106, 1, 1, 0, 2, 0, 19, 0, 2, 0, 70, 1, 2, 0, 62, 9, 2, 0, 63, 9, 36, 0, 80, 0,160, 0,102, 8, - 32, 0,164, 0, 7, 0, 88, 0, 7, 0, 89, 0, 7, 0, 64, 9, 7, 0, 65, 9, 7, 0, 66, 9, 7, 0, 67, 9, 7, 0,237, 2, - 7, 0, 68, 9, 7, 0,104, 8, 7, 0, 69, 9, 0, 0, 70, 9, 0, 0, 71, 9, 12, 0, 97, 3,107, 1, 8, 0, 7, 0, 44, 2, - 7, 0,128, 8, 7, 0,129, 8, 9, 0, 2, 0, 2, 0, 72, 9, 2, 0, 73, 9, 2, 0, 74, 9, 2, 0, 75, 9,108, 1, 18, 0, -108, 1, 0, 0,108, 1, 1, 0,108, 1, 76, 9, 0, 0, 20, 0,107, 1, 77, 9, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 78, 9, - 2, 0, 79, 9, 2, 0, 80, 9, 2, 0, 81, 9, 4, 0, 43, 0, 7, 0, 82, 9, 7, 0, 83, 9, 4, 0, 84, 9, 4, 0, 85, 9, -108, 1, 86, 9,109, 1, 87, 9,110, 1, 34, 0,110, 1, 0, 0,110, 1, 1, 0,110, 1, 88, 9, 0, 0, 20, 0, 0, 0, 89, 9, - 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,211, 7, 2, 0,244, 7, 2, 0, 90, 9, 2, 0,133, 0, 2, 0, 79, 9, 2, 0,201, 7, - 12, 0, 97, 8, 12, 0, 91, 9, 27, 0,135, 6, 9, 0, 92, 9, 7, 0, 82, 9, 7, 0, 83, 9, 7, 0, 75, 2, 7, 0, 93, 9, - 2, 0, 94, 9, 2, 0, 95, 9, 7, 0, 96, 9, 7, 0, 97, 9, 2, 0, 98, 9, 2, 0, 99, 9, 9, 0,100, 9, 24, 0,101, 9, - 24, 0,102, 9, 24, 0,103, 9,111, 1,150, 0,112, 1,104, 9,113, 1,105, 9,109, 1, 8, 0,109, 1, 0, 0,109, 1, 1, 0, -110, 1,106, 9,110, 1,107, 9,108, 1,108, 9,108, 1, 86, 9, 4, 0, 19, 0, 4, 0, 37, 0, 61, 0, 20, 0, 27, 0, 31, 0, - 39, 0, 75, 0, 12, 0,109, 9, 12, 0,110, 9,107, 1,111, 9, 12, 0,112, 9, 4, 0, 17, 0, 4, 0,113, 9, 4, 0,114, 9, - 4, 0,115, 9, 12, 0,116, 9,113, 1,117, 9,108, 1,118, 9,108, 1,119, 9, 9, 0,120, 9, 9, 0,121, 9, 4, 0,122, 9, - 9, 0,123, 9, 9, 0,124, 9, 9, 0,125, 9,114, 1, 6, 0, 4, 0,124, 0, 4, 0,126, 0, 4, 0,201, 7, 0, 0,126, 9, - 0, 0,127, 9, 2, 0, 37, 0,115, 1, 16, 0, 2, 0,155, 7, 2, 0,156, 7, 2, 0,128, 9, 2, 0,152, 8, 2, 0,129, 9, - 2, 0, 68, 0, 7, 0,236, 2, 7, 0,130, 9, 7, 0,131, 9, 2, 0, 92, 1, 0, 0,132, 9, 0, 0,105, 5, 2, 0,133, 9, - 2, 0, 37, 0, 4, 0,134, 9, 4, 0,135, 9,116, 1, 9, 0, 7, 0,136, 9, 7, 0,137, 9, 7, 0,171, 8, 7, 0,109, 0, - 7, 0,138, 9, 7, 0, 62, 6, 2, 0,139, 9, 0, 0,140, 9, 0, 0, 37, 0,117, 1, 4, 0, 7, 0,141, 9, 7, 0,142, 9, - 2, 0,139, 9, 2, 0, 37, 0,118, 1, 3, 0, 7, 0,143, 9, 7, 0,144, 9, 7, 0, 15, 0,119, 1, 7, 0, 0, 0, 6, 2, - 2, 0,233, 4, 2, 0,234, 4, 2, 0,235, 4, 2, 0,181, 4, 4, 0,126, 0, 4, 0, 35, 4,120, 1, 7, 0, 7, 0,145, 9, - 7, 0,146, 9, 7, 0,147, 9, 7, 0, 86, 2, 7, 0,148, 9, 7, 0,149, 9, 7, 0,150, 9,121, 1, 4, 0, 2, 0,151, 9, - 2, 0,152, 9, 2, 0,153, 9, 2, 0,154, 9,122, 1, 2, 0, 7, 0, 5, 0, 7, 0, 6, 0,123, 1, 2, 0, 0, 0,166, 0, - 0, 0,155, 9,124, 1, 1, 0, 0, 0, 20, 0,125, 1, 10, 0, 0, 0,156, 9, 0, 0,157, 9, 0, 0, 55, 6, 0, 0,158, 9, - 2, 0,128, 9, 2, 0,159, 9, 7, 0,160, 9, 7, 0,161, 9, 7, 0,162, 9, 7, 0, 68, 9,126, 1, 2, 0, 9, 0,163, 9, - 9, 0,164, 9,127, 1, 11, 0, 0, 0,235, 4, 0, 0, 17, 0, 0, 0,139, 9, 0, 0,109, 0, 0, 0,165, 9, 0, 0,106, 0, - 0, 0, 71, 2, 7, 0,166, 9, 7, 0,167, 9, 7, 0,168, 9, 7, 0,169, 9,128, 1, 8, 0, 7, 0, 62, 8, 7, 0,125, 0, - 7, 0,105, 5, 7, 0,158, 2, 7, 0,170, 9, 7, 0,236, 0, 7, 0,171, 9, 4, 0, 17, 0,129, 1, 4, 0, 2, 0,172, 9, - 2, 0,173, 9, 2, 0,174, 9, 2, 0, 37, 0,130, 1, 1, 0, 0, 0, 20, 0,131, 1, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, - 2, 0, 19, 0, 2, 0,175, 9,132, 1, 10, 0, 2, 0,223, 3, 2, 0, 19, 0, 7, 0,117, 4, 7, 0,176, 9, 7, 0,177, 9, - 7, 0,178, 9, 7, 0,179, 9,131, 1,180, 9,131, 1,181, 9,131, 1,182, 9, 64, 0, 9, 0, 4, 0, 19, 0, 4, 0, 64, 0, - 24, 0,183, 9, 24, 0,184, 9,132, 1,185, 9, 7, 0,186, 9, 7, 0,187, 9, 7, 0,188, 9, 7, 0,189, 9,133, 1, 4, 0, - 47, 0,230, 2, 7, 0,190, 9, 7, 0,171, 1, 7, 0, 37, 0,190, 0, 17, 0, 27, 0, 31, 0,133, 1,191, 9, 64, 0,180, 9, - 51, 0,135, 1, 2, 0, 19, 0, 2, 0,215, 5, 4, 0,106, 0, 7, 0,192, 9, 7, 0, 83, 2, 4, 0,193, 9, 7, 0,194, 9, - 7, 0,195, 9, 7, 0,196, 9, 7, 0,171, 1, 2, 0,105, 1, 0, 0,197, 9, 0, 0,193, 6,134, 1, 10, 0, 4, 0, 17, 0, - 4, 0,125, 0, 4, 0, 19, 0, 4, 0,178, 3, 4, 0,198, 9, 4, 0,199, 9, 4, 0,200, 9, 0, 0, 92, 0, 0, 0, 20, 0, - 9, 0, 2, 0, 92, 0, 6, 0,134, 1,201, 9, 4, 0,202, 9, 4, 0,203, 9, 4, 0,204, 9, 4, 0, 37, 0, 9, 0,205, 9, -135, 1, 5, 0, 7, 0,153, 2, 7, 0,220, 2, 7, 0, 37, 2, 2, 0,129, 2, 2, 0, 37, 0,136, 1, 5, 0, 7, 0,153, 2, - 7, 0,206, 9, 7, 0,207, 9, 7, 0,208, 9, 7, 0,220, 2,137, 1, 5, 0, 32, 0,209, 9,138, 1, 22, 0, 7, 0,188, 5, - 7, 0,210, 9, 7, 0, 57, 0,139, 1, 7, 0, 4, 0,211, 9, 4, 0,212, 9, 4, 0,213, 9, 7, 0,214, 9, 7, 0,215, 9, - 7, 0,216, 9, 7, 0, 57, 0,140, 1, 8, 0,140, 1, 0, 0,140, 1, 1, 0, 32, 0, 45, 0, 4, 0, 38, 3, 2, 0, 19, 0, - 2, 0, 70, 1, 7, 0,220, 2, 7, 0, 70, 8,141, 1, 6, 0,141, 1, 0, 0,141, 1, 1, 0, 32, 0, 45, 0, 2, 0,205, 2, - 2, 0, 19, 0, 2, 0,217, 9,142, 1, 18, 0,136, 1,172, 3,136, 1,218, 9,135, 1,219, 9,136, 1, 54, 8,137, 1,220, 9, - 4, 0, 82, 0, 7, 0,220, 2, 7, 0,247, 2, 7, 0,221, 9, 4, 0,211, 9, 4, 0,222, 9, 7, 0,215, 9, 7, 0,216, 9, - 7, 0,106, 0, 2, 0, 19, 0, 2, 0,223, 9, 2, 0,224, 9, 2, 0,225, 9,143, 1,110, 0, 27, 0, 31, 0, 39, 0, 75, 0, -144, 1,226, 9,169, 0, 57, 4, 4, 0, 19, 0, 2, 0, 17, 0, 2, 0, 49, 9, 2, 0,227, 9, 2, 0,228, 9, 2, 0,138, 3, - 2, 0,229, 9, 2, 0,230, 9, 2, 0,231, 9, 2, 0,232, 9, 2, 0,233, 9, 2, 0,234, 9, 2, 0,235, 9, 2, 0,223, 4, - 2, 0, 98, 5, 2, 0,236, 9, 2, 0,237, 9, 2, 0,238, 9, 2, 0,239, 9, 2, 0,240, 9, 2, 0, 26, 2, 2, 0, 47, 8, - 2, 0, 23, 8, 2, 0,241, 9, 2, 0,242, 9, 2, 0,188, 3, 2, 0,189, 3, 2, 0,243, 9, 2, 0,244, 9, 2, 0,245, 9, - 2, 0,246, 9, 7, 0,247, 9, 7, 0,248, 9, 7, 0,249, 9, 2, 0,250, 9, 2, 0,251, 9, 7, 0,252, 9, 7, 0,253, 9, - 7, 0,254, 9, 7, 0, 29, 8, 7, 0, 89, 0, 7, 0,247, 2, 7, 0, 35, 8, 7, 0,255, 9, 7, 0, 0, 10, 7, 0, 1, 10, - 4, 0, 30, 8, 4, 0, 28, 8, 4, 0, 2, 10, 7, 0, 31, 8, 7, 0, 32, 8, 7, 0, 33, 8, 7, 0, 3, 10, 7, 0, 4, 10, - 7, 0, 5, 10, 7, 0, 6, 10, 7, 0, 7, 10, 7, 0, 57, 0, 7, 0, 8, 10, 7, 0, 9, 10, 7, 0, 10, 10, 7, 0, 11, 10, - 7, 0,129, 3, 7, 0,106, 0, 7, 0, 12, 10, 7, 0, 13, 10, 7, 0, 14, 10, 7, 0, 15, 10, 7, 0, 16, 10, 7, 0, 17, 10, - 7, 0, 18, 10, 4, 0, 19, 10, 4, 0, 20, 10, 7, 0, 21, 10, 7, 0, 22, 10, 7, 0, 23, 10, 7, 0, 24, 10, 7, 0, 25, 10, - 7, 0,210, 0, 7, 0, 26, 10, 7, 0,214, 3, 7, 0,212, 3, 7, 0,213, 3, 7, 0, 27, 10, 7, 0, 28, 10, 7, 0, 29, 10, - 7, 0, 30, 10, 7, 0, 31, 10, 7, 0, 32, 10, 7, 0, 33, 10, 7, 0, 34, 10, 7, 0, 35, 10, 7, 0, 36, 10, 7, 0, 37, 10, - 7, 0, 38, 10, 7, 0, 39, 10, 4, 0, 40, 10, 4, 0, 41, 10, 68, 0,161, 3, 12, 0, 42, 10, 68, 0, 43, 10, 32, 0, 44, 10, - 32, 0, 45, 10, 36, 0, 80, 0,164, 0, 62, 1,164, 0, 46, 10, 59, 0, 44, 0, 59, 0, 0, 0, 59, 0, 1, 0,143, 1, 47, 10, -142, 1, 48, 10,139, 1,215, 8,171, 0,239, 3, 9, 0,240, 3,145, 1, 49, 10,145, 1, 50, 10, 12, 0, 51, 10, 12, 0, 52, 10, -134, 0, 53, 10,142, 0, 54, 10,142, 0, 55, 10, 32, 0, 56, 10, 32, 0, 57, 10, 32, 0, 38, 0, 12, 0, 19, 9, 0, 0, 20, 0, - 7, 0,240, 0, 7, 0, 18, 3, 7, 0, 58, 10, 4, 0,194, 2, 4, 0, 57, 0, 4, 0, 19, 0, 4, 0, 30, 8, 4, 0, 59, 10, - 4, 0, 60, 10, 4, 0, 61, 10, 2, 0,247, 0, 2, 0, 62, 10, 2, 0, 63, 10, 2, 0, 64, 10, 0, 0, 65, 10, 2, 0, 66, 10, - 2, 0, 67, 10, 2, 0, 68, 10, 9, 0, 69, 10,138, 0, 56, 4, 12, 0, 5, 3, 12, 0, 70, 10,146, 1, 71, 10,147, 1, 72, 10, - 7, 0, 73, 10,136, 0, 35, 0,148, 1,172, 8, 7, 0, 26, 4, 7, 0, 74, 10, 7, 0, 75, 10, 7, 0,120, 4, 7, 0, 76, 10, - 7, 0,139, 3, 7, 0,129, 3, 7, 0, 77, 10, 7, 0, 85, 2, 7, 0, 78, 10, 7, 0, 79, 10, 7, 0, 80, 10, 7, 0, 81, 10, - 7, 0, 82, 10, 7, 0, 83, 10, 7, 0, 27, 4, 7, 0, 84, 10, 7, 0, 85, 10, 7, 0, 86, 10, 7, 0, 28, 4, 7, 0, 24, 4, - 7, 0, 25, 4, 7, 0, 87, 10, 4, 0, 88, 10, 4, 0, 90, 0, 4, 0, 89, 10, 4, 0, 90, 10, 2, 0, 91, 10, 2, 0, 92, 10, - 2, 0, 93, 10, 2, 0, 94, 10, 2, 0, 95, 10, 2, 0, 37, 0,169, 0, 57, 4,137, 0, 8, 0,148, 1, 96, 10, 7, 0, 97, 10, - 7, 0, 98, 10, 7, 0,243, 1, 7, 0, 99, 10, 4, 0, 90, 0, 2, 0,100, 10, 2, 0,101, 10,149, 1, 4, 0, 7, 0, 5, 0, - 7, 0, 6, 0, 7, 0, 7, 0, 7, 0,102, 10,150, 1, 6, 0,150, 1, 0, 0,150, 1, 1, 0,149, 1,207, 8, 4, 0,253, 0, - 2, 0,103, 10, 2, 0, 19, 0,151, 1, 5, 0,151, 1, 0, 0,151, 1, 1, 0, 12, 0,104, 10, 4, 0,105, 10, 4, 0, 19, 0, -152, 1, 9, 0,152, 1, 0, 0,152, 1, 1, 0, 12, 0,124, 0,151, 1,106, 10, 4, 0, 19, 0, 2, 0,103, 10, 2, 0,107, 10, - 7, 0, 91, 0, 0, 0,108, 10,162, 0, 6, 0, 27, 0, 31, 0, 12, 0,251, 4, 4, 0, 19, 0, 2, 0,109, 10, 2, 0,110, 10, - 9, 0,111, 10,153, 1, 7, 0,153, 1, 0, 0,153, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, 4, 0, 23, 0, 0, 0,112, 10, - 0, 0,113, 10,154, 1, 5, 0, 12, 0,114, 10, 4, 0,115, 10, 4, 0,116, 10, 4, 0, 19, 0, 4, 0, 37, 0,155, 1, 18, 0, - 27, 0, 31, 0,156, 1,117, 10,156, 1,118, 10, 12, 0,119, 10, 4, 0,120, 10, 2, 0,121, 10, 2, 0, 37, 0, 12, 0,122, 10, - 12, 0,123, 10,154, 1,124, 10, 12, 0,125, 10, 12, 0,126, 10, 12, 0,127, 10,157, 1,128, 10, 4, 0,129, 10, 4, 0, 70, 0, - 12, 0,130, 10,210, 0,131, 10,156, 1, 30, 0,156, 1, 0, 0,156, 1, 1, 0, 9, 0,132, 10, 4, 0,134, 7, 4, 0, 37, 0, -215, 0, 45, 6,215, 0,133, 10, 0, 0,134, 10, 2, 0,135, 10, 2, 0,136, 10, 2, 0,155, 7, 2, 0,156, 7, 2, 0,137, 10, - 2, 0,138, 10, 2, 0,178, 3, 2, 0,161, 6, 2, 0,139, 10, 2, 0,140, 10, 4, 0,239, 1,158, 1,141, 10,159, 1,142, 10, -160, 1,143, 10, 4, 0,144, 10, 4, 0,145, 10, 9, 0,146, 10, 12, 0,123, 10, 12, 0,175, 7, 12, 0,147, 10, 12, 0,148, 10, - 12, 0,149, 10,161, 1, 16, 0,161, 1, 0, 0,161, 1, 1, 0, 0, 0,150, 10, 26, 0, 30, 0, 2, 0,151, 10, 2, 0, 17, 0, - 2, 0, 15, 0, 2, 0,152, 10, 2, 0,153, 10, 2, 0,154, 10, 2, 0,155, 10, 2, 0,156, 10, 2, 0, 19, 0, 2, 0,157, 10, - 2, 0, 71, 2,162, 1,158, 10,163, 1, 10, 0,163, 1, 0, 0,163, 1, 1, 0, 12, 0,159, 10, 0, 0,150, 10, 2, 0,160, 10, - 2, 0,161, 10, 2, 0, 19, 0, 2, 0, 37, 0, 4, 0,162, 10, 9, 0,163, 10,157, 1, 7, 0,157, 1, 0, 0,157, 1, 1, 0, - 0, 0,150, 10, 0, 0,164, 10, 12, 0, 92, 7, 4, 0,165, 10, 4, 0, 19, 0,223, 0, 12, 0,223, 0, 0, 0,223, 0, 1, 0, - 0, 0,150, 10, 26, 0, 30, 0,164, 1,149, 7, 9, 0,166, 10,162, 1,158, 10,154, 1,167, 10, 12, 0,168, 10,223, 0,169, 10, - 2, 0, 19, 0, 2, 0,137, 1,158, 1, 23, 0,158, 1, 0, 0,158, 1, 1, 0, 2, 0, 17, 0, 2, 0, 15, 0, 2, 0, 5, 0, - 2, 0, 6, 0, 2, 0,170, 10, 2, 0,171, 10, 2, 0,172, 10, 2, 0,173, 10, 0, 0,174, 10, 0, 0, 37, 0, 2, 0,152, 10, - 2, 0,153, 10, 2, 0,154, 10, 2, 0,155, 10, 2, 0,156, 10, 2, 0, 43, 0, 0, 0,175, 10, 2, 0,176, 10, 2, 0,177, 10, - 4, 0, 70, 0, 9, 0,166, 10,165, 1, 8, 0,165, 1, 0, 0,165, 1, 1, 0, 9, 0, 2, 0, 9, 0,178, 10, 0, 0,234, 3, - 2, 0, 17, 0, 2, 0, 19, 0, 7, 0,179, 10,166, 1, 5, 0, 7, 0,180, 10, 4, 0,181, 10, 4, 0,182, 10, 4, 0, 70, 1, - 4, 0, 19, 0,167, 1, 6, 0, 7, 0,183, 10, 7, 0,184, 10, 7, 0,185, 10, 7, 0,186, 10, 4, 0, 17, 0, 4, 0, 19, 0, -168, 1, 5, 0, 7, 0,128, 8, 7, 0,129, 8, 7, 0,220, 2, 2, 0, 40, 2, 2, 0, 41, 2,169, 1, 5, 0,168, 1, 2, 0, - 4, 0, 54, 0, 7, 0,187, 10, 7, 0,128, 8, 7, 0,129, 8,170, 1, 4, 0, 2, 0,188, 10, 2, 0,189, 10, 2, 0,190, 10, - 2, 0,191, 10,171, 1, 2, 0, 42, 0,132, 6, 26, 0,177, 8,172, 1, 3, 0, 24, 0,192, 10, 4, 0, 19, 0, 4, 0, 37, 0, -173, 1, 6, 0, 7, 0,106, 0, 7, 0,222, 2, 7, 0,193, 10, 7, 0, 37, 0, 2, 0,246, 0, 2, 0,194, 10,174, 1, 9, 0, -174, 1, 0, 0,174, 1, 1, 0, 27, 0,135, 6, 0, 0,195, 10, 4, 0,196, 10, 4, 0,197, 10, 4, 0, 90, 0, 4, 0, 37, 0, - 0, 0,234, 3,175, 1, 6, 0, 12, 0, 19, 9, 0, 0,198, 10, 7, 0, 61, 0, 7, 0,179, 10, 4, 0, 17, 0, 4, 0, 19, 0, -176, 1, 3, 0, 7, 0,199, 10, 4, 0, 19, 0, 4, 0, 37, 0,177, 1, 15, 0,177, 1, 0, 0,177, 1, 1, 0, 78, 1, 5, 9, -175, 1, 62, 0, 12, 0, 97, 3, 35, 0, 50, 0,176, 1,200, 10, 4, 0, 54, 0, 7, 0, 61, 0, 2, 0, 19, 0, 2, 0, 16, 1, - 4, 0,196, 10, 0, 0,195, 10, 4, 0,201, 10, 7, 0,202, 10,178, 1, 2, 0, 0, 0,203, 10, 0, 0,204, 10,179, 1, 4, 0, -179, 1, 0, 0,179, 1, 1, 0,160, 0, 51, 3, 12, 0,205, 10,180, 1, 24, 0,180, 1, 0, 0,180, 1, 1, 0, 12, 0,206, 10, -160, 0,102, 8,179, 1,207, 10, 12, 0,208, 10, 12, 0, 97, 3, 0, 0,234, 3, 7, 0,179, 10, 7, 0,209, 10, 7, 0, 88, 0, - 7, 0, 89, 0, 7, 0, 64, 9, 7, 0, 65, 9, 7, 0,237, 2, 7, 0, 68, 9, 7, 0,104, 8, 7, 0, 69, 9, 2, 0,210, 10, - 2, 0,211, 10, 2, 0, 43, 0, 2, 0, 17, 0, 4, 0, 19, 0, 4, 0, 70, 0,181, 1, 6, 0,181, 1, 0, 0,181, 1, 1, 0, - 12, 0,206, 10, 4, 0, 19, 0, 4, 0,157, 2, 0, 0,234, 3,182, 1, 10, 0,182, 1, 0, 0,182, 1, 1, 0, 27, 0,135, 6, - 0, 0,212, 10, 4, 0,197, 10, 4, 0,213, 10, 0, 0,195, 10, 4, 0,196, 10, 2, 0, 19, 0, 2, 0,214, 10,183, 1, 7, 0, -183, 1, 0, 0,183, 1, 1, 0, 12, 0,215, 10, 0, 0,234, 3, 2, 0, 19, 0, 2, 0,216, 10, 4, 0,217, 10,184, 1, 5, 0, -184, 1, 0, 0,184, 1, 1, 0, 0, 0,195, 10, 4, 0,196, 10, 7, 0,210, 2, 39, 0, 12, 0,160, 0, 91, 3,160, 0,218, 10, -179, 1,207, 10, 12, 0,219, 10,180, 1,220, 10, 12, 0,221, 10, 12, 0,222, 10, 4, 0, 19, 0, 4, 0,247, 0, 2, 0,223, 10, - 2, 0,224, 10, 7, 0,225, 10,185, 1, 2, 0, 27, 0, 31, 0, 39, 0, 75, 0,186, 1, 5, 0,186, 1, 0, 0,186, 1, 1, 0, - 4, 0, 17, 0, 4, 0, 19, 0, 0, 0, 20, 0,187, 1, 6, 0,186, 1,226, 10, 32, 0, 45, 0, 4, 0,227, 10, 7, 0,228, 10, - 4, 0,229, 10, 4, 0,250, 8,188, 1, 3, 0,186, 1,226, 10, 4, 0,227, 10, 7, 0,230, 10,189, 1, 8, 0,186, 1,226, 10, - 32, 0, 45, 0, 7, 0, 65, 1, 7, 0,231, 10, 7, 0, 18, 3, 7, 0,171, 8, 4, 0,227, 10, 4, 0,232, 10,190, 1, 5, 0, -186, 1,226, 10, 7, 0,233, 10, 7, 0,244, 7, 7, 0,243, 2, 7, 0, 57, 0,191, 1, 3, 0,186, 1,226, 10, 7, 0,171, 8, - 7, 0,234, 10,138, 1, 4, 0, 7, 0,235, 10, 7, 0, 14, 10, 2, 0,236, 10, 2, 0, 70, 1,192, 1, 14, 0,192, 1, 0, 0, -192, 1, 1, 0, 12, 0,237, 10, 12, 0,238, 10, 12, 0,239, 10, 0, 0, 20, 0, 4, 0, 31, 0, 4, 0, 19, 0, 4, 0,240, 10, - 7, 0,241, 10, 4, 0,229, 10, 4, 0,250, 8, 7, 0,243, 3, 7, 0,245, 2,144, 1, 23, 0, 4, 0,227, 10, 4, 0,242, 10, - 7, 0,243, 10, 7, 0, 57, 0, 7, 0,244, 10, 7, 0,241, 2, 7, 0,235, 10, 7, 0,245, 10, 7, 0,222, 2, 7, 0,246, 10, - 7, 0,117, 4, 7, 0,247, 10, 7, 0,248, 10, 7, 0,249, 10, 7, 0,250, 10, 7, 0,251, 10, 7, 0,252, 10, 7, 0,253, 10, - 7, 0,254, 10, 7, 0,255, 10, 7, 0, 0, 11, 7, 0, 1, 11, 12, 0, 2, 11,122, 0, 34, 0,121, 0, 3, 11,193, 1, 4, 11, - 68, 0, 5, 11, 68, 0, 43, 10, 68, 0, 6, 11,194, 1, 7, 11, 48, 0,165, 0, 48, 0, 8, 11, 48, 0, 9, 11, 7, 0, 10, 11, - 7, 0, 11, 11, 7, 0, 12, 11, 7, 0, 13, 11, 7, 0, 14, 11, 7, 0, 6, 9, 7, 0, 15, 11, 7, 0,171, 1, 7, 0, 16, 11, - 4, 0, 17, 11, 4, 0, 18, 11, 4, 0, 19, 11, 4, 0, 90, 0, 4, 0, 37, 0, 4, 0, 20, 11, 2, 0, 21, 11, 2, 0, 22, 11, - 4, 0, 23, 11, 7, 0,222, 2, 4, 0, 24, 11, 7, 0, 25, 11, 4, 0, 26, 11,138, 0, 27, 11, 12, 0, 28, 11,169, 0, 57, 4, -123, 0, 11, 0,121, 0, 3, 11, 59, 0,255, 0, 7, 0,138, 1, 7, 0, 6, 9, 7, 0, 29, 11, 7, 0, 30, 11, 2, 0, 31, 11, - 2, 0, 32, 11, 2, 0, 33, 11, 2, 0, 17, 0, 4, 0, 37, 0,124, 0, 13, 0,121, 0, 3, 11,140, 0, 15, 3,142, 0, 17, 3, - 7, 0,207, 8, 7, 0, 34, 11, 7, 0, 35, 11, 7, 0, 67, 1, 7, 0, 36, 11, 4, 0, 37, 11, 4, 0, 13, 3, 2, 0, 17, 0, + 69,110,118, 77, 97,112, 0, 73,109, 66,117,102, 0, 80,111,105,110,116, 68,101,110,115,105,116,121, 0, 86,111,120,101,108, 68, + 97,116, 97, 0, 98, 78,111,100,101, 84,114,101,101, 0, 84,101,120, 77, 97,112,112,105,110,103, 0, 76, 97,109,112, 0, 67,117, +114,118,101, 77, 97,112,112,105,110,103, 0, 87, 97,118,101, 0, 86,111,108,117,109,101, 83,101,116,116,105,110,103,115, 0, 77, + 97,116,101,114,105, 97,108, 0, 71,114,111,117,112, 0, 86, 70,111,110,116, 0, 86, 70,111,110,116, 68, 97,116, 97, 0, 77,101, +116, 97, 69,108,101,109, 0, 66,111,117,110,100, 66,111,120, 0, 77,101,116, 97, 66, 97,108,108, 0, 78,117,114, 98, 0, 67,104, + 97,114, 73,110,102,111, 0, 84,101,120,116, 66,111,120, 0, 67,117,114,118,101, 0, 80, 97,116,104, 0, 83,101,108, 66,111,120, + 0, 69,100,105,116, 70,111,110,116, 0, 77,101,115,104, 0, 77, 70, 97, 99,101, 0, 77, 84, 70, 97, 99,101, 0, 84, 70, 97, 99, +101, 0, 77, 86,101,114,116, 0, 77, 69,100,103,101, 0, 77, 68,101,102,111,114,109, 86,101,114,116, 0, 77, 67,111,108, 0, 77, + 83,116,105, 99,107,121, 0, 77, 83,101,108,101, 99,116, 0, 69,100,105,116, 77,101,115,104, 0, 67,117,115,116,111,109, 68, 97, +116, 97, 0, 77,117,108,116,105,114,101,115, 0, 80, 97,114,116,105, 97,108, 86,105,115,105, 98,105,108,105,116,121, 0, 77, 68, +101,102,111,114,109, 87,101,105,103,104,116, 0, 77, 84,101,120, 80,111,108,121, 0, 77, 76,111,111,112, 85, 86, 0, 77, 76,111, +111,112, 67,111,108, 0, 77, 70,108,111, 97,116, 80,114,111,112,101,114,116,121, 0, 77, 73,110,116, 80,114,111,112,101,114,116, +121, 0, 77, 83,116,114,105,110,103, 80,114,111,112,101,114,116,121, 0, 79,114,105,103, 83,112, 97, 99,101, 70, 97, 99,101, 0, + 77, 68,105,115,112,115, 0, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 68, 71, 69, 68, 82, 65, 87, 32, 40, 49, 60, 60, + 49, 41, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 69, 65, 77, 32, 40, 49, 60, 60, 50, 41, 32, 35,100,101,102,105,110, +101, 32, 77, 69, 95, 70, 71, 79, 78, 32, 40, 49, 60, 60, 51, 41, 32, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 68, 71, + 69, 82, 69, 78, 68, 69, 82, 32, 40, 49, 60, 60, 53, 41, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 76, 79, 79, 83, 69, 69, + 68, 71, 69, 32, 40, 49, 60, 60, 55, 41, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 69, 65, 77, 95, 76, 65, 83, 84, 32, + 40, 49, 60, 60, 56, 41, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 72, 65, 82, 80, 32, 40, 49, 60, 60, 57, 41, 32, 32, + 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 49, 32, 49, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, + 70, 76, 73, 80, 86, 50, 32, 50, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 51, 32, 52, 32, 35,100,101, +102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 52, 32, 56, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, + 88, 89, 32, 49, 54, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 88, 90, 32, 51, 50, 32, 35,100,101,102,105, +110,101, 32, 77, 69, 95, 80, 82, 79, 74, 89, 90, 32, 54, 52, 32, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 49, 86, 50, + 32, 49, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 50, 86, 51, 32, 50, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, + 86, 51, 86, 49, 32, 52, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 51, 86, 52, 32, 52, 32, 35,100,101,102,105,110,101, + 32, 77, 69, 95, 86, 52, 86, 49, 32, 56, 32, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 77, 79, 79, 84, 72, 32, 49, 32, + 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 65, 67, 69, 95, 83, 69, 76, 32, 50, 32, 32, 32, 35,100,101,102,105,110,101, 32, + 77, 69, 95, 86, 83, 69,108, 32, 48, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 83, 69,108, 32, 49, 32, 35,100,101,102, +105,110,101, 32, 77, 69, 95, 70, 83, 69, 76, 32, 50, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 69, 67, 84, + 32, 49, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 67, 84, 73, 86, 69, 32, 50, 32, 32, 35,100,101,102,105,110,101, + 32, 84, 70, 95, 83, 69, 76, 49, 32, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 50, 32, 56, 32, 35,100,101, +102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 51, 32, 49, 54, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 52, 32, + 51, 50, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 72, 73, 68, 69, 32, 54, 52, 32, 32, 32, 35,100,101,102,105,110,101, 32, + 84, 70, 95, 68, 89, 78, 65, 77, 73, 67, 32, 49, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 76, 80, 72, 65, 83, 79, 82, + 84, 32, 50, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 84, 69, 88, 32, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, + 83, 72, 65, 82, 69, 68, 86, 69, 82, 84, 32, 56, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 76, 73, 71, 72, 84, 32, 49, 54, + 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 72, 65, 82, 69, 68, 67, 79, 76, 32, 54, 52, 32, 35,100,101,102,105,110,101, + 32, 84, 70, 95, 84, 73, 76, 69, 83, 32, 49, 50, 56, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, + 65, 82, 68, 32, 50, 53, 54, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 84, 87, 79, 83, 73, 68, 69, 32, 53, 49, 50, 32, 35, +100,101,102,105,110,101, 32, 84, 70, 95, 73, 78, 86, 73, 83, 73, 66, 76, 69, 32, 49, 48, 50, 52, 32, 35,100,101,102,105,110,101, + 32, 84, 70, 95, 79, 66, 67, 79, 76, 32, 50, 48, 52, 56, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, + 65, 82, 68, 50, 32, 52, 48, 57, 54, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 72, 65, 68, 79, 87, 32, 56, 49, 57, + 50, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 66, 77, 70, 79, 78, 84, 32, 49, 54, 51, 56, 52, 32, 32, 35,100,101,102,105, +110,101, 32, 84, 70, 95, 83, 79, 76, 73, 68, 32, 48, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 68, 68, 32, 49, 32, 35, +100,101,102,105,110,101, 32, 84, 70, 95, 65, 76, 80, 72, 65, 32, 50, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 67, 76, 73, + 80, 32, 52, 32, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 85, 66, 32, 51, 32, 32, 35,100,101,102,105,110,101, 32, + 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 49, 32, 49, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, + 69, 67, 65, 84, 69, 68, 50, 32, 50, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 51, + 32, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 52, 32, 56, 32, 35,100,101,102, +105,110,101, 32, 84, 70, 95, 80, 73, 78, 49, 32, 49, 54, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 50, 32, 51, + 50, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 51, 32, 54, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, + 80, 73, 78, 52, 32, 49, 50, 56, 32, 35,101,110,100,105,102, 32, 32, 99,104, 97,114, 32,117,115,101, 95, 99,111,108, 44, 32,102, +108, 97,103, 59, 10, 10, 9, 47, 42, 32, 83,112,101, 99,105, 97,108, 32,108,101,118,101,108, 32, 49, 32,100, 97,116, 97, 32,116, +104, 97,116, 32, 99, 97,110,110,111,116, 32, 98,101, 32,109,111,100,105,102,105,101,100, 32,102,114,111,109, 32,111,116,104,101, +114, 32,108,101,118,101,108,115, 32, 42, 47, 10, 9, 67,117,115,116,111,109, 68, 97,116, 97, 32,118,100, 97,116, 97, 59, 10, 9, + 67,117,115,116,111,109, 68, 97,116, 97, 32,102,100, 97,116, 97, 59, 10, 9,115,104,111,114,116, 32, 42,101,100,103,101, 95,102, +108, 97,103,115, 59, 10, 9, 99,104, 97,114, 32, 42,101,100,103,101, 95, 99,114,101, 97,115,101,115, 59, 10,125, 32, 77,117,108, +116,105,114,101,115, 59, 10, 10, 47, 42, 42, 32, 69,110,100, 32, 77,117,108,116,105,114,101,115, 32, 42, 42, 47, 10, 10,116,121, +112,101,100,101,102, 32,115,116,114,117, 99,116, 32, 80, 97,114,116,105, 97,108, 86,105,115,105, 98,105,108,105,116,121, 32,123, + 10, 9,117,110,115,105,103,110,101,100, 32,105,110,116, 32, 42,118,101,114,116, 95,109, 97,112, 59, 32, 47, 42, 32,118,101,114, +116, 95,109, 97,112, 91, 79,108,100, 32, 73,110,100,101,120, 93, 61, 32, 78,101,119, 32, 73,110,100,101,120, 32, 42, 47, 10, 9, +105,110,116, 32, 42,101,100,103,101, 95,109, 97,112, 59, 32, 47, 42, 32,101,100,103,101, 95,109, 97,112, 91, 79,108,100, 32, 73, +110,100,101,120, 93, 61, 32, 78,101,119, 32, 73,110,100,101,120, 44, 32, 45, 49, 61, 32,104,105,100,100,101,110, 32, 42, 47, 10, + 9, 77, 70, 97, 99,101, 32, 42,111,108,100, 95,102, 97, 99,101,115, 59, 10, 9, 77, 69,100,103,101, 32, 42,111,108,100, 95,101, +100,103,101,115, 59, 10, 9,117,110,115,105,103,110,101,100, 32,105,110,116, 32,116,111,116,102, 97, 99,101, 44, 32,116,111,116, +101,100,103,101, 44, 32,116,111,116,118,101,114,116, 44, 32,112, 97,100, 59, 10,125, 32, 80, 97,114,116,105, 97,108, 86,105,115, +105, 98,105,108,105,116,121, 59, 10, 10, 47, 42, 32,109,118,101,114,116, 45, 62,102,108, 97,103, 32, 40, 49, 61, 83, 69, 76, 69, + 67, 84, 41, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 80, 72, 69, 82, 69, 84, 69, 83, 84, 9, 50, 10, 35, +100,101,102,105,110,101, 32, 77, 69, 95, 83, 80, 72, 69, 82, 69, 84, 69, 77, 80, 9, 52, 10, 35,100,101,102,105,110,101, 32, 77, + 69, 95, 72, 73, 68, 69, 9, 9, 9, 49, 54, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 69, 82, 84, 95, 77, 69, 82, 71, + 69, 68, 9, 9, 40, 49, 60, 60, 54, 41, 10, 10, 47, 42, 32,109,101,100,103,101, 45, 62,102,108, 97,103, 32, 40, 49, 61, 83, 69, + 76, 69, 67, 84, 41, 42, 47, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 68, 71, 69, 68, 82, 65, 87, 9, 9, 9, 40, 49, + 60, 60, 49, 41, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 69, 65, 77, 9, 9, 9, 9, 40, 49, 60, 60, 50, 41, 10, 35, +100,101,102,105,110,101, 32, 77, 69, 95, 70, 71, 79, 78, 9, 9, 9, 9, 40, 49, 60, 60, 51, 41, 10, 9, 9, 9, 9, 9, 9, 47, + 42, 32,114,101,115,101,114,118,101, 32, 49, 54, 32,102,111,114, 32, 77, 69, 95, 72, 73, 68, 69, 32, 42, 47, 10, 35,100,101,102, +105,110,101, 32, 77, 69, 95, 69, 68, 71, 69, 82, 69, 78, 68, 69, 82, 9, 9, 40, 49, 60, 60, 53, 41, 10, 35,100,101,102,105,110, +101, 32, 77, 69, 95, 76, 79, 79, 83, 69, 69, 68, 71, 69, 9, 9, 40, 49, 60, 60, 55, 41, 10, 35,100,101,102,105,110,101, 32, 77, + 69, 95, 83, 69, 65, 77, 95, 76, 65, 83, 84, 9, 9, 40, 49, 60, 60, 56, 41, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, + 72, 65, 82, 80, 9, 9, 9, 40, 49, 60, 60, 57, 41, 10, 10, 47, 42, 32,112,117,110,111, 32, 61, 32,118,101,114,116,101,120,110, +111,114,109, 97,108, 32, 40,109,102, 97, 99,101, 41, 32, 42, 47, 10, 47, 42, 32,114,101,110,100,101,114, 32, 97,115,115,117,109, +101,115, 32,102,108,105,112,115, 32,116,111, 32, 98,101, 32,111,114,100,101,114,101,100, 32,108,105,107,101, 32,116,104,105,115, + 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 49, 9, 9, 49, 10, 35,100,101,102,105,110,101, + 32, 77, 69, 95, 70, 76, 73, 80, 86, 50, 9, 9, 50, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 51, 9, + 9, 52, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 52, 9, 9, 56, 10, 35,100,101,102,105,110,101, 32, + 77, 69, 95, 80, 82, 79, 74, 88, 89, 9, 9, 49, 54, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 88, 90, 9, + 9, 51, 50, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 89, 90, 9, 9, 54, 52, 10, 10, 47, 42, 32,101,100, + 99,111,100,101, 32, 40,109,102, 97, 99,101, 41, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 49, 86, 50, 9, + 9, 9, 49, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 50, 86, 51, 9, 9, 9, 50, 10, 35,100,101,102,105,110,101, 32, + 77, 69, 95, 86, 51, 86, 49, 9, 9, 9, 52, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 51, 86, 52, 9, 9, 9, 52, 10, + 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 52, 86, 49, 9, 9, 9, 56, 10, 10, 47, 42, 32,102,108, 97,103, 32, 40,109,102, + 97, 99,101, 41, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 77, 79, 79, 84, 72, 9, 9, 9, 49, 10, 35,100, +101,102,105,110,101, 32, 77, 69, 95, 70, 65, 67, 69, 95, 83, 69, 76, 9, 9, 9, 50, 10, 9, 9, 9, 9, 9, 9, 47, 42, 32,102, +108, 97,103, 32, 77, 69, 95, 72, 73, 68, 69, 61, 61, 49, 54, 32,105,115, 32,117,115,101,100, 32,104,101,114,101, 32,116,111,111, + 32, 42, 47, 32, 10, 47, 42, 32,109,115,101,108,101, 99,116, 45, 62,116,121,112,101, 32, 42, 47, 10, 35,100,101,102,105,110,101, + 32, 77, 69, 95, 86, 83, 69,108, 9, 48, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 83, 69,108, 32, 49, 10, 35,100,101, +102,105,110,101, 32, 77, 69, 95, 70, 83, 69, 76, 32, 50, 10, 10, 47, 42, 32,109,116,102, 97, 99,101, 45, 62,102,108, 97,103, 32, + 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 69, 67, 84, 9, 49, 32, 47, 42, 32,117,115,101, 32, 77, 70, + 97, 99,101, 32,104,105,100,101, 32,102,108, 97,103, 32, 40, 97,102,116,101,114, 32, 50, 46, 52, 51, 41, 44, 32,115,104,111,117, +108,100, 32, 98,101, 32, 97, 98,108,101, 32,116,111, 32,114,101,117,115,101, 32, 97,102,116,101,114, 32, 50, 46, 52, 52, 32, 42, + 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 67, 84, 73, 86, 69, 9, 50, 32, 47, 42, 32,100,101,112,114,101, 99, 97, +116,101,100, 33, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 49, 9, 9, 52, 10, 35,100,101,102,105, +110,101, 32, 84, 70, 95, 83, 69, 76, 50, 9, 9, 56, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 51, 9, 9, 49, + 54, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 52, 9, 9, 51, 50, 10, 35,100,101,102,105,110,101, 32, 84, 70, + 95, 72, 73, 68, 69, 9, 9, 54, 52, 32, 47, 42, 32,117,110,117,115,101,100, 44, 32,115, 97,109,101, 32, 97,115, 32, 84, 70, 95, + 83, 69, 76, 69, 67, 84, 32, 42, 47, 10, 10, 47, 42, 32,109,116,102, 97, 99,101, 45, 62,109,111,100,101, 32, 42, 47, 10, 35,100, +101,102,105,110,101, 32, 84, 70, 95, 68, 89, 78, 65, 77, 73, 67, 9, 9, 49, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, + 76, 80, 72, 65, 83, 79, 82, 84, 9, 50, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 84, 69, 88, 9, 9, 9, 52, 10, 35,100, +101,102,105,110,101, 32, 84, 70, 95, 83, 72, 65, 82, 69, 68, 86, 69, 82, 84, 9, 56, 10, 35,100,101,102,105,110,101, 32, 84, 70, + 95, 76, 73, 71, 72, 84, 9, 9, 49, 54, 10, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 72, 65, 82, 69, 68, 67, 79, 76, + 9, 54, 52, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 84, 73, 76, 69, 83, 9, 9, 49, 50, 56, 9, 9, 47, 42, 32,100,101, +112,114,101, 99, 97,116,101,100, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, 65, 82, 68, + 9, 50, 53, 54, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 84, 87, 79, 83, 73, 68, 69, 9, 9, 53, 49, 50, 10, 35,100,101, +102,105,110,101, 32, 84, 70, 95, 73, 78, 86, 73, 83, 73, 66, 76, 69, 9, 49, 48, 50, 52, 10, 10, 35,100,101,102,105,110,101, 32, + 84, 70, 95, 79, 66, 67, 79, 76, 9, 9, 50, 48, 52, 56, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, + 65, 82, 68, 50, 9, 52, 48, 57, 54, 9, 47, 42, 32,119,105,116,104, 32, 90, 32, 97,120,105,115, 32, 99,111,110,115,116,114, 97, +105,110,116, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 72, 65, 68, 79, 87, 9, 9, 56, 49, 57, 50, 10, 35, +100,101,102,105,110,101, 32, 84, 70, 95, 66, 77, 70, 79, 78, 84, 9, 9, 49, 54, 51, 56, 52, 10, 10, 47, 42, 32,109,116,102, 97, + 99,101, 45, 62,116,114, 97,110,115,112, 44, 32,118, 97,108,117,101,115, 32, 49, 45, 52, 32, 97,114,101, 32,117,115,101,100, 32, + 97,115, 32,102,108, 97,103,115, 32,105,110, 32,116,104,101, 32, 71, 76, 44, 32, 87, 65, 82, 78, 73, 78, 71, 44, 32, 84, 70, 95, + 83, 85, 66, 32, 99, 97,110,116, 32,119,111,114,107, 32,119,105,116,104, 32,116,104,105,115, 32, 42, 47, 10, 35,100,101,102,105, +110,101, 32, 84, 70, 95, 83, 79, 76, 73, 68, 9, 48, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 68, 68, 9, 9, 49, 10, + 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 76, 80, 72, 65, 9, 50, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 67, 76, + 73, 80, 9, 9, 52, 32, 47, 42, 32, 99,108,105,112,109, 97,112, 32, 97,108,112,104, 97, 47, 98,105,110, 97,114,121, 32, 97,108, +112,104, 97, 32, 97,108,108, 32,111,114, 32,110,111,116,104,105,110,103, 33, 32, 42, 47, 10, 10, 47, 42, 32,115,117, 98, 32,105, +115, 32,110,111,116, 32, 97,118, 97,105,108, 97, 98,108,101, 32,105,110, 32,116,104,101, 32,117,115,101,114, 32,105,110,116,101, +114,102, 97, 99,101, 32, 97,110,121,109,111,114,101, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 85, 66, 9, + 9, 51, 10, 10, 10, 47, 42, 32,109,116,102, 97, 99,101, 45, 62,117,110,119,114, 97,112, 32, 42, 47, 10, 35,100,101,102,105,110, +101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 49, 9, 49, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, + 80, 82, 69, 67, 65, 84, 69, 68, 50, 9, 50, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, + 68, 51, 9, 52, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 52, 9, 56, 10, 35,100, +101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 49, 9, 9, 32, 32, 32, 32, 49, 54, 10, 35,100,101,102,105,110,101, 32, 84, 70, + 95, 80, 73, 78, 50, 9, 9, 32, 32, 32, 32, 51, 50, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 51, 9, 32, 32, + 32, 9, 9, 54, 52, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 52, 9, 32, 32, 32, 32, 9, 49, 50, 56, 10, 10, + 35,101,110,100,105,102, 10, 39,115, 79, 67, 75, 33, 32,116,101,120,116,117,114,101, 32,104,101,114,193,109, 0, 77,117,108,116, +105,114,101,115, 67,111,108, 0, 77,117,108,116,105,114,101,115, 67,111,108, 70, 97, 99,101, 0, 77,117,108,116,105,114,101,115, + 70, 97, 99,101, 0, 77,117,108,116,105,114,101,115, 69,100,103,101, 0, 77,117,108,116,105,114,101,115, 76,101,118,101,108, 0, + 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,117, 98,115,117,114,102, 77,111,100,105,102,105,101,114, 68, 97,116, 97, + 0, 76, 97,116,116,105, 99,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 67,117,114,118,101, 77,111,100,105,102,105, +101,114, 68, 97,116, 97, 0, 66,117,105,108,100, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 77, 97,115,107, 77,111,100, +105,102,105,101,114, 68, 97,116, 97, 0, 65,114,114, 97,121, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 77,105,114,114, +111,114, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 69,100,103,101, 83,112,108,105,116, 77,111,100,105,102,105,101,114, + 68, 97,116, 97, 0, 66,101,118,101,108, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 66, 77,101,115,104, 77,111,100,105, +102,105,101,114, 68, 97,116, 97, 0, 83,109,111,107,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,109,111,107,101, + 68,111,109, 97,105,110, 83,101,116,116,105,110,103,115, 0, 83,109,111,107,101, 70,108,111,119, 83,101,116,116,105,110,103,115, + 0, 83,109,111,107,101, 67,111,108,108, 83,101,116,116,105,110,103,115, 0, 68,105,115,112,108, 97, 99,101, 77,111,100,105,102, +105,101,114, 68, 97,116, 97, 0, 85, 86, 80,114,111,106,101, 99,116, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 68,101, + 99,105,109, 97,116,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,109,111,111,116,104, 77,111,100,105,102,105,101, +114, 68, 97,116, 97, 0, 67, 97,115,116, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 87, 97,118,101, 77,111,100,105,102, +105,101,114, 68, 97,116, 97, 0, 65,114,109, 97,116,117,114,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 72,111,111, +107, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,111,102,116, 98,111,100,121, 77,111,100,105,102,105,101,114, 68, 97, +116, 97, 0, 67,108,111,116,104, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 67,108,111,116,104, 0, 67,108,111,116,104, + 83,105,109, 83,101,116,116,105,110,103,115, 0, 67,108,111,116,104, 67,111,108,108, 83,101,116,116,105,110,103,115, 0, 80,111, +105,110,116, 67, 97, 99,104,101, 0, 67,111,108,108,105,115,105,111,110, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 66, + 86, 72, 84,114,101,101, 0, 83,117,114,102, 97, 99,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 68,101,114,105,118, +101,100, 77,101,115,104, 0, 66, 86, 72, 84,114,101,101, 70,114,111,109, 77,101,115,104, 0, 66,111,111,108,101, 97,110, 77,111, +100,105,102,105,101,114, 68, 97,116, 97, 0, 77, 68,101,102, 73,110,102,108,117,101,110, 99,101, 0, 77, 68,101,102, 67,101,108, +108, 0, 77,101,115,104, 68,101,102,111,114,109, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108, +101, 83,121,115,116,101,109, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 83,121,115,116, +101,109, 0, 80, 97,114,116,105, 99,108,101, 73,110,115,116, 97,110, 99,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, + 69,120,112,108,111,100,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 77,117,108,116,105,114,101,115, 77,111,100,105, +102,105,101,114, 68, 97,116, 97, 0, 70,108,117,105,100,115,105,109, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 70,108, +117,105,100,115,105,109, 83,101,116,116,105,110,103,115, 0, 83,104,114,105,110,107,119,114, 97,112, 77,111,100,105,102,105,101, +114, 68, 97,116, 97, 0, 83,105,109,112,108,101, 68,101,102,111,114,109, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83, +104, 97,112,101, 75,101,121, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 76, 97,116,116,105, 99,101, 0, 98, 68,101,102, +111,114,109, 71,114,111,117,112, 0, 83, 99,117,108,112,116, 83,101,115,115,105,111,110, 0, 98, 65, 99,116,105,111,110, 0, 98, + 80,111,115,101, 0, 98, 71, 80,100, 97,116, 97, 0, 66,117,108,108,101,116, 83,111,102,116, 66,111,100,121, 0, 80, 97,114,116, + 68,101,102,108,101, 99,116, 0, 83,111,102,116, 66,111,100,121, 0, 79, 98, 72,111,111,107, 0, 68,117,112,108,105, 79, 98,106, +101, 99,116, 0, 82, 78, 71, 0, 69,102,102,101, 99,116,111,114, 87,101,105,103,104,116,115, 0, 80, 84, 67, 97, 99,104,101, 77, +101,109, 0, 80, 84, 67, 97, 99,104,101, 69,100,105,116, 0, 83, 66, 86,101,114,116,101,120, 0, 66,111,100,121, 80,111,105,110, +116, 0, 66,111,100,121, 83,112,114,105,110,103, 0, 83, 66, 83, 99,114, 97,116, 99,104, 0, 87,111,114,108,100, 0, 66, 97,115, +101, 0, 65,118,105, 67,111,100,101, 99, 68, 97,116, 97, 0, 81,117,105, 99,107,116,105,109,101, 67,111,100,101, 99, 68, 97,116, + 97, 0, 70, 70, 77,112,101,103, 67,111,100,101, 99, 68, 97,116, 97, 0, 65,117,100,105,111, 68, 97,116, 97, 0, 83, 99,101,110, +101, 82,101,110,100,101,114, 76, 97,121,101,114, 0, 82,101,110,100,101,114, 68, 97,116, 97, 0, 82,101,110,100,101,114, 80,114, +111,102,105,108,101, 0, 71, 97,109,101, 68,111,109,101, 0, 71, 97,109,101, 70,114, 97,109,105,110,103, 0, 71, 97,109,101, 68, + 97,116, 97, 0, 84,105,109,101, 77, 97,114,107,101,114, 0, 80, 97,105,110,116, 0, 66,114,117,115,104, 0, 73,109, 97,103,101, + 80, 97,105,110,116, 83,101,116,116,105,110,103,115, 0, 80, 97,114,116,105, 99,108,101, 66,114,117,115,104, 68, 97,116, 97, 0, + 80, 97,114,116,105, 99,108,101, 69,100,105,116, 83,101,116,116,105,110,103,115, 0, 84,114, 97,110,115,102,111,114,109, 79,114, +105,101,110,116, 97,116,105,111,110, 0, 83, 99,117,108,112,116, 0, 86, 80, 97,105,110,116, 0, 84,111,111,108, 83,101,116,116, +105,110,103,115, 0, 98, 83,116, 97,116,115, 0, 85,110,105,116, 83,101,116,116,105,110,103,115, 0, 80,104,121,115,105, 99,115, + 83,101,116,116,105,110,103,115, 0, 69,100,105,116,105,110,103, 0, 83, 99,101,110,101, 83,116, 97,116,115, 0, 68, 97,103, 70, +111,114,101,115,116, 0, 66, 71,112,105, 99, 0, 82,101,103,105,111,110, 86,105,101,119, 51, 68, 0, 82,101,110,100,101,114, 73, +110,102,111, 0, 82,101,116,111,112,111, 86,105,101,119, 68, 97,116, 97, 0, 86,105,101,119, 68,101,112,116,104,115, 0, 83,109, +111,111,116,104, 86,105,101,119, 83,116,111,114,101, 0,119,109, 84,105,109,101,114, 0, 86,105,101,119, 51, 68, 0, 83,112, 97, + 99,101, 76,105,110,107, 0, 86,105,101,119, 50, 68, 0, 83,112, 97, 99,101, 73,110,102,111, 0, 98, 83, 99,114,101,101,110, 0, + 83,112, 97, 99,101, 73,112,111, 0, 98, 68,111,112,101, 83,104,101,101,116, 0, 83,112, 97, 99,101, 66,117,116,115, 0, 83,112, + 97, 99,101, 83,101,113, 0, 70,105,108,101, 83,101,108,101, 99,116, 80, 97,114, 97,109,115, 0, 83,112, 97, 99,101, 70,105,108, +101, 0, 70,105,108,101, 76,105,115,116, 0,119,109, 79,112,101,114, 97,116,111,114, 0, 70,105,108,101, 76, 97,121,111,117,116, + 0, 83,112, 97, 99,101, 79,111,112,115, 0, 84,114,101,101, 83,116,111,114,101, 0, 84,114,101,101, 83,116,111,114,101, 69,108, +101,109, 0, 83,112, 97, 99,101, 73,109, 97,103,101, 0, 83,112, 97, 99,101, 78,108, 97, 0, 83,112, 97, 99,101, 84,101,120,116, + 0, 83, 99,114,105,112,116, 0, 83,112, 97, 99,101, 83, 99,114,105,112,116, 0, 83,112, 97, 99,101, 84,105,109,101, 0, 83,112, + 97, 99,101, 78,111,100,101, 0, 83,112, 97, 99,101, 76,111,103,105, 99, 0, 83,112, 97, 99,101, 73,109, 97, 83,101,108, 0, 67, +111,110,115,111,108,101, 76,105,110,101, 0, 83,112, 97, 99,101, 67,111,110,115,111,108,101, 0, 83,112, 97, 99,101, 85,115,101, +114, 80,114,101,102, 0,117,105, 70,111,110,116, 0,117,105, 70,111,110,116, 83,116,121,108,101, 0,117,105, 83,116,121,108,101, + 0,117,105, 87,105,100,103,101,116, 67,111,108,111,114,115, 0,117,105, 87,105,100,103,101,116, 83,116, 97,116,101, 67,111,108, +111,114,115, 0, 84,104,101,109,101, 85, 73, 0, 84,104,101,109,101, 83,112, 97, 99,101, 0, 84,104,101,109,101, 87,105,114,101, + 67,111,108,111,114, 0, 98, 84,104,101,109,101, 0, 83,111,108,105,100, 76,105,103,104,116, 0, 85,115,101,114, 68,101,102, 0, + 83, 99,114, 86,101,114,116, 0, 83, 99,114, 69,100,103,101, 0, 80, 97,110,101,108, 0, 80, 97,110,101,108, 84,121,112,101, 0, +117,105, 76, 97,121,111,117,116, 0, 83, 99,114, 65,114,101, 97, 0, 83,112, 97, 99,101, 84,121,112,101, 0, 65, 82,101,103,105, +111,110, 0, 65, 82,101,103,105,111,110, 84,121,112,101, 0, 70,105,108,101, 71,108,111, 98, 97,108, 0, 83,116,114,105,112, 69, +108,101,109, 0, 84, 83,116,114,105,112, 69,108,101,109, 0, 83,116,114,105,112, 67,114,111,112, 0, 83,116,114,105,112, 84,114, + 97,110,115,102,111,114,109, 0, 83,116,114,105,112, 67,111,108,111,114, 66, 97,108, 97,110, 99,101, 0, 83,116,114,105,112, 80, +114,111,120,121, 0, 83,116,114,105,112, 0, 80,108,117,103,105,110, 83,101,113, 0, 83,101,113,117,101,110, 99,101, 0, 98, 83, +111,117,110,100, 0, 83,111,117,110,100, 72, 97,110,100,108,101, 0, 77,101,116, 97, 83,116, 97, 99,107, 0, 87,105,112,101, 86, + 97,114,115, 0, 71,108,111,119, 86, 97,114,115, 0, 84,114, 97,110,115,102,111,114,109, 86, 97,114,115, 0, 83,111,108,105,100, + 67,111,108,111,114, 86, 97,114,115, 0, 83,112,101,101,100, 67,111,110,116,114,111,108, 86, 97,114,115, 0, 69,102,102,101, 99, +116, 0, 66,117,105,108,100, 69,102,102, 0, 80, 97,114,116, 69,102,102, 0, 80, 97,114,116,105, 99,108,101, 0, 87, 97,118,101, + 69,102,102, 0, 98, 80,114,111,112,101,114,116,121, 0, 98, 78,101, 97,114, 83,101,110,115,111,114, 0, 98, 77,111,117,115,101, + 83,101,110,115,111,114, 0, 98, 84,111,117, 99,104, 83,101,110,115,111,114, 0, 98, 75,101,121, 98,111, 97,114,100, 83,101,110, +115,111,114, 0, 98, 80,114,111,112,101,114,116,121, 83,101,110,115,111,114, 0, 98, 65, 99,116,117, 97,116,111,114, 83,101,110, +115,111,114, 0, 98, 68,101,108, 97,121, 83,101,110,115,111,114, 0, 98, 67,111,108,108,105,115,105,111,110, 83,101,110,115,111, +114, 0, 98, 82, 97,100, 97,114, 83,101,110,115,111,114, 0, 98, 82, 97,110,100,111,109, 83,101,110,115,111,114, 0, 98, 82, 97, +121, 83,101,110,115,111,114, 0, 98, 65,114,109, 97,116,117,114,101, 83,101,110,115,111,114, 0, 98, 77,101,115,115, 97,103,101, + 83,101,110,115,111,114, 0, 98, 83,101,110,115,111,114, 0, 98, 67,111,110,116,114,111,108,108,101,114, 0, 98, 74,111,121,115, +116,105, 99,107, 83,101,110,115,111,114, 0, 98, 69,120,112,114,101,115,115,105,111,110, 67,111,110,116, 0, 98, 80,121,116,104, +111,110, 67,111,110,116, 0, 98, 65, 99,116,117, 97,116,111,114, 0, 98, 65,100,100, 79, 98,106,101, 99,116, 65, 99,116,117, 97, +116,111,114, 0, 98, 65, 99,116,105,111,110, 65, 99,116,117, 97,116,111,114, 0, 98, 83,111,117,110,100, 65, 99,116,117, 97,116, +111,114, 0, 83,111,117,110,100, 51, 68, 0, 98, 69,100,105,116, 79, 98,106,101, 99,116, 65, 99,116,117, 97,116,111,114, 0, 98, + 83, 99,101,110,101, 65, 99,116,117, 97,116,111,114, 0, 98, 80,114,111,112,101,114,116,121, 65, 99,116,117, 97,116,111,114, 0, + 98, 79, 98,106,101, 99,116, 65, 99,116,117, 97,116,111,114, 0, 98, 73,112,111, 65, 99,116,117, 97,116,111,114, 0, 98, 67, 97, +109,101,114, 97, 65, 99,116,117, 97,116,111,114, 0, 98, 67,111,110,115,116,114, 97,105,110,116, 65, 99,116,117, 97,116,111,114, + 0, 98, 71,114,111,117,112, 65, 99,116,117, 97,116,111,114, 0, 98, 82, 97,110,100,111,109, 65, 99,116,117, 97,116,111,114, 0, + 98, 77,101,115,115, 97,103,101, 65, 99,116,117, 97,116,111,114, 0, 98, 71, 97,109,101, 65, 99,116,117, 97,116,111,114, 0, 98, + 86,105,115,105, 98,105,108,105,116,121, 65, 99,116,117, 97,116,111,114, 0, 98, 84,119,111, 68, 70,105,108,116,101,114, 65, 99, +116,117, 97,116,111,114, 0, 98, 80, 97,114,101,110,116, 65, 99,116,117, 97,116,111,114, 0, 98, 83,116, 97,116,101, 65, 99,116, +117, 97,116,111,114, 0, 98, 65,114,109, 97,116,117,114,101, 65, 99,116,117, 97,116,111,114, 0, 70,114,101,101, 67, 97,109,101, +114, 97, 0, 83,112, 97, 99,101, 83,111,117,110,100, 0, 71,114,111,117,112, 79, 98,106,101, 99,116, 0, 66,111,110,101, 0, 98, + 65,114,109, 97,116,117,114,101, 0, 98, 77,111,116,105,111,110, 80, 97,116,104, 86,101,114,116, 0, 98, 77,111,116,105,111,110, + 80, 97,116,104, 0, 98, 65,110,105,109, 86,105,122, 83,101,116,116,105,110,103,115, 0, 98, 80,111,115,101, 67,104, 97,110,110, +101,108, 0, 98, 73, 75, 80, 97,114, 97,109, 0, 98, 73,116, 97,115, 99, 0, 98, 65, 99,116,105,111,110, 71,114,111,117,112, 0, + 83,112, 97, 99,101, 65, 99,116,105,111,110, 0, 98, 65, 99,116,105,111,110, 67,104, 97,110,110,101,108, 0, 98, 67,111,110,115, +116,114, 97,105,110,116, 67,104, 97,110,110,101,108, 0, 98, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 67,111,110,115,116, +114, 97,105,110,116, 84, 97,114,103,101,116, 0, 98, 80,121,116,104,111,110, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 75, +105,110,101,109, 97,116,105, 99, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83,112,108,105,110,101, 73, 75, 67,111,110,115, +116,114, 97,105,110,116, 0, 98, 84,114, 97, 99,107, 84,111, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 82,111,116, 97,116, +101, 76,105,107,101, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 76,111, 99, 97,116,101, 76,105,107,101, 67,111,110,115,116, +114, 97,105,110,116, 0, 98, 77,105,110, 77, 97,120, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83,105,122,101, 76,105,107, +101, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 65, 99,116,105,111,110, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 76, +111, 99,107, 84,114, 97, 99,107, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 68, 97,109,112, 84,114, 97, 99,107, 67,111,110, +115,116,114, 97,105,110,116, 0, 98, 70,111,108,108,111,119, 80, 97,116,104, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83, +116,114,101,116, 99,104, 84,111, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 82,105,103,105,100, 66,111,100,121, 74,111,105, +110,116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 67,108, 97,109,112, 84,111, 67,111,110,115,116,114, 97,105,110,116, 0, + 98, 67,104,105,108,100, 79,102, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 84,114, 97,110,115,102,111,114,109, 67,111,110, +115,116,114, 97,105,110,116, 0, 98, 76,111, 99, 76,105,109,105,116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 82,111,116, + 76,105,109,105,116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83,105,122,101, 76,105,109,105,116, 67,111,110,115,116,114, + 97,105,110,116, 0, 98, 68,105,115,116, 76,105,109,105,116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83,104,114,105,110, +107,119,114, 97,112, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 65, 99,116,105,111,110, 77,111,100,105,102,105,101,114, 0, + 98, 65, 99,116,105,111,110, 83,116,114,105,112, 0, 98, 78,111,100,101, 83,116, 97, 99,107, 0, 98, 78,111,100,101, 83,111, 99, +107,101,116, 0, 98, 78,111,100,101, 76,105,110,107, 0, 98, 78,111,100,101, 0, 98, 78,111,100,101, 80,114,101,118,105,101,119, + 0,117,105, 66,108,111, 99,107, 0, 98, 78,111,100,101, 84,121,112,101, 0, 78,111,100,101, 73,109, 97,103,101, 65,110,105,109, + 0, 78,111,100,101, 66,108,117,114, 68, 97,116, 97, 0, 78,111,100,101, 68, 66,108,117,114, 68, 97,116, 97, 0, 78,111,100,101, + 66,105,108, 97,116,101,114, 97,108, 66,108,117,114, 68, 97,116, 97, 0, 78,111,100,101, 72,117,101, 83, 97,116, 0, 78,111,100, +101, 73,109, 97,103,101, 70,105,108,101, 0, 78,111,100,101, 67,104,114,111,109, 97, 0, 78,111,100,101, 84,119,111, 88, 89,115, + 0, 78,111,100,101, 84,119,111, 70,108,111, 97,116,115, 0, 78,111,100,101, 71,101,111,109,101,116,114,121, 0, 78,111,100,101, + 86,101,114,116,101,120, 67,111,108, 0, 78,111,100,101, 68,101,102,111, 99,117,115, 0, 78,111,100,101, 83, 99,114,105,112,116, + 68,105, 99,116, 0, 78,111,100,101, 71,108, 97,114,101, 0, 78,111,100,101, 84,111,110,101,109, 97,112, 0, 78,111,100,101, 76, +101,110,115, 68,105,115,116, 0, 84,101,120, 78,111,100,101, 79,117,116,112,117,116, 0, 67,117,114,118,101, 77, 97,112, 80,111, +105,110,116, 0, 67,117,114,118,101, 77, 97,112, 0, 66,114,117,115,104, 67,108,111,110,101, 0, 67,117,115,116,111,109, 68, 97, +116, 97, 76, 97,121,101,114, 0, 72, 97,105,114, 75,101,121, 0, 80, 97,114,116,105, 99,108,101, 75,101,121, 0, 66,111,105,100, + 80, 97,114,116,105, 99,108,101, 0, 66,111,105,100, 68, 97,116, 97, 0, 67,104,105,108,100, 80, 97,114,116,105, 99,108,101, 0, + 80, 97,114,116,105, 99,108,101, 84, 97,114,103,101,116, 0, 80, 97,114,116,105, 99,108,101, 68,117,112,108,105, 87,101,105,103, +104,116, 0, 80, 97,114,116,105, 99,108,101, 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 83,101,116,116,105,110,103,115, + 0, 66,111,105,100, 83,101,116,116,105,110,103,115, 0, 80, 97,114,116,105, 99,108,101, 67, 97, 99,104,101, 75,101,121, 0, 75, + 68, 84,114,101,101, 0, 80, 97,114,116,105, 99,108,101, 68,114, 97,119, 68, 97,116, 97, 0, 76,105,110,107, 78,111,100,101, 0, + 98, 71, 80, 68,115,112,111,105,110,116, 0, 98, 71, 80, 68,115,116,114,111,107,101, 0, 98, 71, 80, 68,102,114, 97,109,101, 0, + 98, 71, 80, 68,108, 97,121,101,114, 0, 82,101,112,111,114,116, 0, 82,101,112,111,114,116, 76,105,115,116, 0,119,109, 87,105, +110,100,111,119, 77, 97,110, 97,103,101,114, 0,119,109, 87,105,110,100,111,119, 0,119,109, 75,101,121, 67,111,110,102,105,103, + 0,119,109, 69,118,101,110,116, 0,119,109, 83,117, 98, 87,105,110,100,111,119, 0,119,109, 71,101,115,116,117,114,101, 0,119, +109, 75,101,121, 77, 97,112, 73,116,101,109, 0, 80,111,105,110,116,101,114, 82, 78, 65, 0,119,109, 75,101,121, 77, 97,112, 0, +119,109, 79,112,101,114, 97,116,111,114, 84,121,112,101, 0, 70, 77,111,100,105,102,105,101,114, 0, 70, 77,111,100, 95, 71,101, +110,101,114, 97,116,111,114, 0, 70, 77,111,100, 95, 70,117,110, 99,116,105,111,110, 71,101,110,101,114, 97,116,111,114, 0, 70, + 67, 77, 95, 69,110,118,101,108,111,112,101, 68, 97,116, 97, 0, 70, 77,111,100, 95, 69,110,118,101,108,111,112,101, 0, 70, 77, +111,100, 95, 67,121, 99,108,101,115, 0, 70, 77,111,100, 95, 80,121,116,104,111,110, 0, 70, 77,111,100, 95, 76,105,109,105,116, +115, 0, 70, 77,111,100, 95, 78,111,105,115,101, 0, 68,114,105,118,101,114, 84, 97,114,103,101,116, 0, 67,104, 97,110,110,101, +108, 68,114,105,118,101,114, 0, 70, 80,111,105,110,116, 0, 70, 67,117,114,118,101, 0, 65,110,105,109, 77, 97,112, 80, 97,105, +114, 0, 65,110,105,109, 77, 97,112,112,101,114, 0, 78,108, 97, 83,116,114,105,112, 0, 78,108, 97, 84,114, 97, 99,107, 0, 75, + 83, 95, 80, 97,116,104, 0, 75,101,121,105,110,103, 83,101,116, 0, 65,110,105,109, 79,118,101,114,114,105,100,101, 0, 73,100, + 65,100,116, 84,101,109,112,108, 97,116,101, 0, 66,111,105,100, 82,117,108,101, 0, 66,111,105,100, 82,117,108,101, 71,111, 97, +108, 65,118,111,105,100, 0, 66,111,105,100, 82,117,108,101, 65,118,111,105,100, 67,111,108,108,105,115,105,111,110, 0, 66,111, +105,100, 82,117,108,101, 70,111,108,108,111,119, 76,101, 97,100,101,114, 0, 66,111,105,100, 82,117,108,101, 65,118,101,114, 97, +103,101, 83,112,101,101,100, 0, 66,111,105,100, 82,117,108,101, 70,105,103,104,116, 0, 66,111,105,100, 83,116, 97,116,101, 0, + 70, 76, 85, 73, 68, 95, 51, 68, 0, 87, 84, 85, 82, 66, 85, 76, 69, 78, 67, 69, 0, 0, 0, 0, 84, 76, 69, 78, 1, 0, 1, 0, + 2, 0, 2, 0, 4, 0, 4, 0, 4, 0, 4, 0, 8, 0, 0, 0, 16, 0, 24, 0, 16, 0, 4, 0, 8, 0, 8, 0, 16, 0, 12, 0, + 12, 0, 24, 0, 16, 0, 16, 0, 32, 0, 16, 0, 16, 0, 32, 0, 96, 0, 72, 0, 72, 2, 0, 0, 40, 0,144, 0,152, 4,112, 0, + 36, 0, 56, 0,112, 0,128, 0,168, 0, 96, 0, 40, 0, 48, 0,176, 0, 16, 0,152, 0, 40, 0, 0, 6,184, 1, 0, 0, 0, 0, + 0, 0, 16, 1,104, 1,120, 1, 24, 0, 8, 3,200, 0, 0, 0, 88, 0, 32, 1,232, 0,136, 0,248, 1, 56, 1, 80, 0, 88, 0, + 32, 3,104, 0, 88, 1, 0, 0,128, 0,104, 0,208, 0, 80, 0, 8, 0, 16, 0,216, 1, 0, 0, 0, 0, 0, 0,144, 1, 20, 0, + 48, 0, 64, 0, 24, 0, 12, 0, 16, 0, 4, 0, 8, 0, 8, 0, 0, 0, 32, 0,112, 0, 48, 0, 8, 0, 16, 0, 8, 0, 8, 0, + 4, 0, 4, 0, 0, 1, 32, 0, 16, 0, 0, 0, 16, 0, 64, 0, 24, 0, 12, 0, 64, 0, 72, 0, 96, 0,112, 0,120, 0, 88, 0, +120, 0,152, 0, 88, 0, 80, 0,128, 0, 80, 0,104, 0,248, 0, 56, 0,192, 0,176, 0,216, 0, 80, 0,112, 0,128, 0,216, 0, +128, 0,240, 0, 72, 0,128, 0, 0, 0,144, 0, 32, 0, 8, 2,152, 0, 0, 0,112, 0, 0, 0, 0, 0, 88, 0, 8, 0, 8, 0, + 16, 1,104, 0,240, 1, 96, 0, 88, 0, 88, 0, 88, 0,192, 1,136, 0,128, 0, 72, 0,232, 0, 48, 0, 0, 0,144, 0, 88, 0, +104, 0,120, 0,152, 0, 32, 1,224, 0,192, 0, 0, 0, 72, 0,168, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0,216, 1, 40, 0, +184, 0,152, 0, 64, 0, 24, 0, 88, 0, 24, 4, 64, 0, 24, 0, 16, 0, 96, 0, 88, 0, 32, 0, 40, 1, 48, 0, 8, 0,112, 0, + 88, 0, 56, 0, 72, 0,120, 1, 32, 0, 8, 0, 16, 0, 48, 2, 0, 0, 0, 0, 64, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 32, 1, 56, 0,152, 0, 72, 0,208, 0,248, 0, 32, 0, 0, 1,240, 0,208, 1,104, 0, 0, 0,152, 0, 0, 0, 40, 1, + 16, 0, 16, 0,168, 0,224, 0,144, 2,120, 2, 64, 0,200, 0, 32, 1, 72, 0,208, 2, 40, 0,112, 0, 40, 0, 24, 1, 32, 0, +232, 0, 32, 0, 32, 0, 80, 2, 16, 1, 16, 0,216, 21, 56, 0,160, 11, 32, 0, 40, 0, 88, 1, 0, 0, 0, 0,160, 0, 0, 0, + 40, 1, 0, 0, 24, 1, 80, 0, 48, 0, 16, 0, 8, 0, 52, 0, 0, 1, 32, 1,200, 1, 8, 1, 48, 1, 64, 0, 32, 0, 12, 0, + 24, 0, 48, 0, 16, 0, 24, 0, 24, 0, 32, 0, 72, 1, 0, 0, 64, 0, 64, 0, 48, 0, 8, 0, 48, 0, 72, 0,104, 0, 40, 0, + 8, 0, 72, 0, 44, 0, 40, 0,108, 0, 72, 0, 72, 0, 96, 0,104, 0, 60, 0,128, 0, 80, 0, 80, 0, 16, 0, 96, 0, 72, 0, + 32, 0, 88, 0, 24, 0, 80, 0,112, 0, 84, 0, 32, 0, 96, 0, 56, 0, 56, 0,112, 0,140, 0, 4, 0, 24, 0, 16, 0, 8, 0, + 88, 0, 40, 0,224, 0, 40, 0, 32, 1,176, 0, 16, 0, 24, 0, 24, 0, 0, 2, 4, 0, 40, 0,120, 0, 8, 1, 88, 0, 56, 0, + 88, 0,128, 0, 80, 0,120, 0, 24, 0, 56, 0, 48, 0, 48, 0, 72, 0, 48, 0, 72, 0, 48, 0, 48, 0, 24, 0, 56, 0,104, 0, + 16, 0,112, 0, 96, 0, 28, 0, 28, 0, 28, 0, 56, 0, 24, 0, 72, 0,168, 0, 40, 0,144, 0, 56, 0, 8, 1, 0, 0, 0, 0, + 0, 0, 16, 0, 40, 0, 28, 0, 12, 0, 12, 0, 16, 1, 40, 0, 8, 0, 8, 0, 64, 0, 32, 0, 24, 0, 16, 0, 24, 0, 32, 0, + 8, 0, 32, 0, 12, 0, 56, 0, 24, 0, 72, 0, 24, 0, 56, 0, 56, 0, 20, 0, 64, 0, 40, 0, 32, 0,192, 0, 8, 2,104, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 32, 0, 40, 0,192, 0, 40, 0, 32, 0, 8, 1,224, 0,168, 0, 72, 0, 0, 0, 0, 0, +120, 0, 0, 0,120, 0, 0, 0,104, 0, 24, 0, 24, 0, 16, 0, 24, 0, 8, 0, 16, 0, 24, 0, 20, 0,112, 0, 32, 1, 16, 0, +104, 0, 0, 1, 40, 0,200, 0,104, 0,112, 0,104, 0, 32, 0, 80, 0, 56, 0, 80, 0, 64, 0,104, 0, 72, 0, 64, 0,128, 0, + 0, 0, 0, 0, 83, 84, 82, 67,138, 1, 0, 0, 10, 0, 2, 0, 10, 0, 0, 0, 10, 0, 1, 0, 11, 0, 3, 0, 11, 0, 0, 0, + 11, 0, 1, 0, 9, 0, 2, 0, 12, 0, 2, 0, 9, 0, 3, 0, 9, 0, 4, 0, 13, 0, 2, 0, 2, 0, 5, 0, 2, 0, 6, 0, + 14, 0, 2, 0, 4, 0, 5, 0, 4, 0, 6, 0, 15, 0, 2, 0, 7, 0, 5, 0, 7, 0, 6, 0, 16, 0, 2, 0, 8, 0, 5, 0, + 8, 0, 6, 0, 17, 0, 3, 0, 4, 0, 5, 0, 4, 0, 6, 0, 4, 0, 7, 0, 18, 0, 3, 0, 7, 0, 5, 0, 7, 0, 6, 0, + 7, 0, 7, 0, 19, 0, 3, 0, 8, 0, 5, 0, 8, 0, 6, 0, 8, 0, 7, 0, 20, 0, 4, 0, 4, 0, 5, 0, 4, 0, 6, 0, + 4, 0, 7, 0, 4, 0, 8, 0, 21, 0, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 7, 0, 8, 0, 22, 0, 4, 0, + 8, 0, 5, 0, 8, 0, 6, 0, 8, 0, 7, 0, 8, 0, 8, 0, 23, 0, 4, 0, 4, 0, 9, 0, 4, 0, 10, 0, 4, 0, 11, 0, + 4, 0, 12, 0, 24, 0, 4, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0, 25, 0, 4, 0, 9, 0, 13, 0, + 12, 0, 14, 0, 4, 0, 15, 0, 4, 0, 16, 0, 26, 0, 10, 0, 26, 0, 0, 0, 26, 0, 1, 0, 0, 0, 17, 0, 0, 0, 18, 0, + 2, 0, 19, 0, 0, 0, 20, 0, 4, 0, 21, 0, 25, 0, 22, 0, 4, 0, 23, 0, 4, 0, 24, 0, 27, 0, 9, 0, 9, 0, 0, 0, + 9, 0, 1, 0, 27, 0, 25, 0, 28, 0, 26, 0, 0, 0, 27, 0, 2, 0, 28, 0, 2, 0, 19, 0, 4, 0, 29, 0, 26, 0, 30, 0, + 28, 0, 8, 0, 27, 0, 31, 0, 27, 0, 32, 0, 29, 0, 33, 0, 0, 0, 34, 0, 0, 0, 35, 0, 4, 0, 36, 0, 4, 0, 37, 0, + 28, 0, 38, 0, 30, 0, 6, 0, 4, 0, 39, 0, 4, 0, 40, 0, 2, 0, 41, 0, 2, 0, 42, 0, 2, 0, 43, 0, 4, 0, 44, 0, + 31, 0, 6, 0, 32, 0, 45, 0, 2, 0, 46, 0, 2, 0, 47, 0, 2, 0, 17, 0, 2, 0, 19, 0, 0, 0, 48, 0, 33, 0, 21, 0, + 33, 0, 0, 0, 33, 0, 1, 0, 34, 0, 49, 0, 35, 0, 50, 0, 24, 0, 51, 0, 24, 0, 52, 0, 2, 0, 46, 0, 2, 0, 47, 0, + 2, 0, 53, 0, 2, 0, 54, 0, 2, 0, 55, 0, 2, 0, 56, 0, 2, 0, 19, 0, 2, 0, 57, 0, 7, 0, 11, 0, 7, 0, 12, 0, + 4, 0, 58, 0, 7, 0, 59, 0, 7, 0, 60, 0, 7, 0, 61, 0, 31, 0, 62, 0, 36, 0, 7, 0, 27, 0, 31, 0, 12, 0, 63, 0, + 24, 0, 64, 0, 2, 0, 46, 0, 2, 0, 65, 0, 2, 0, 66, 0, 2, 0, 37, 0, 37, 0, 16, 0, 37, 0, 0, 0, 37, 0, 1, 0, + 7, 0, 67, 0, 7, 0, 61, 0, 2, 0, 17, 0, 2, 0, 47, 0, 2, 0, 68, 0, 2, 0, 19, 0, 4, 0, 69, 0, 4, 0, 70, 0, + 9, 0, 2, 0, 7, 0, 71, 0, 0, 0, 20, 0, 0, 0, 72, 0, 7, 0, 73, 0, 7, 0, 74, 0, 38, 0, 13, 0, 27, 0, 31, 0, + 39, 0, 75, 0, 37, 0, 76, 0, 0, 0, 77, 0, 4, 0, 78, 0, 7, 0, 61, 0, 12, 0, 79, 0, 36, 0, 80, 0, 27, 0, 81, 0, + 2, 0, 17, 0, 2, 0, 82, 0, 2, 0, 83, 0, 2, 0, 19, 0, 40, 0, 6, 0, 40, 0, 0, 0, 40, 0, 1, 0, 0, 0, 84, 0, + 0, 0, 85, 0, 4, 0, 23, 0, 4, 0, 86, 0, 41, 0, 10, 0, 41, 0, 0, 0, 41, 0, 1, 0, 4, 0, 87, 0, 4, 0, 88, 0, + 4, 0, 89, 0, 4, 0, 43, 0, 4, 0, 14, 0, 4, 0, 90, 0, 0, 0, 91, 0, 0, 0, 92, 0, 42, 0, 15, 0, 27, 0, 31, 0, + 0, 0, 93, 0, 4, 0, 90, 0, 4, 0, 94, 0, 12, 0, 95, 0, 40, 0, 96, 0, 40, 0, 97, 0, 4, 0, 98, 0, 4, 0, 99, 0, + 12, 0,100, 0, 0, 0,101, 0, 4, 0,102, 0, 4, 0,103, 0, 9, 0,104, 0, 8, 0,105, 0, 43, 0, 3, 0, 4, 0,106, 0, + 4, 0,107, 0, 9, 0, 2, 0, 44, 0, 20, 0, 27, 0, 31, 0, 39, 0, 75, 0, 2, 0, 17, 0, 2, 0, 19, 0, 7, 0,108, 0, + 7, 0,109, 0, 7, 0,110, 0, 7, 0,111, 0, 7, 0,112, 0, 7, 0,113, 0, 7, 0,114, 0, 7, 0,115, 0, 7, 0,116, 0, + 7, 0,117, 0, 7, 0,118, 0, 2, 0,119, 0, 2, 0,120, 0, 7, 0,121, 0, 36, 0, 80, 0, 32, 0,122, 0, 45, 0, 13, 0, + 4, 0,123, 0, 4, 0,124, 0, 4, 0,125, 0, 4, 0,126, 0, 2, 0,127, 0, 2, 0,128, 0, 2, 0, 19, 0, 2, 0,129, 0, + 2, 0,130, 0, 2, 0,131, 0, 2, 0,132, 0, 2, 0,133, 0, 46, 0,134, 0, 47, 0, 32, 0, 27, 0, 31, 0, 0, 0, 34, 0, + 12, 0,135, 0, 48, 0,136, 0, 49, 0,137, 0, 50, 0,138, 0, 2, 0,129, 0, 2, 0, 19, 0, 2, 0,139, 0, 2, 0, 17, 0, + 2, 0, 37, 0, 2, 0, 43, 0, 4, 0,140, 0, 2, 0,141, 0, 2, 0,142, 0, 2, 0,143, 0, 2, 0,144, 0, 2, 0,145, 0, + 2, 0,146, 0, 4, 0,147, 0, 4, 0,148, 0, 43, 0,149, 0, 30, 0,150, 0, 0, 0,151, 0, 7, 0,152, 0, 4, 0,153, 0, + 2, 0,154, 0, 2, 0,155, 0, 2, 0,156, 0, 2, 0,157, 0, 7, 0,158, 0, 7, 0,159, 0, 51, 0, 63, 0, 2, 0,160, 0, + 2, 0,161, 0, 2, 0,162, 0, 2, 0,163, 0, 32, 0,164, 0, 52, 0,165, 0, 0, 0,166, 0, 0, 0,167, 0, 0, 0,168, 0, + 0, 0,169, 0, 0, 0,170, 0, 7, 0,171, 0, 7, 0,172, 0, 7, 0,173, 0, 2, 0,174, 0, 2, 0,175, 0, 2, 0,176, 0, + 2, 0,177, 0, 2, 0,178, 0, 2, 0,179, 0, 0, 0,180, 0, 0, 0,181, 0, 7, 0,182, 0, 7, 0,183, 0, 7, 0,184, 0, + 7, 0,185, 0, 7, 0,186, 0, 7, 0, 57, 0, 7, 0,187, 0, 7, 0,188, 0, 7, 0,189, 0, 7, 0,190, 0, 7, 0,191, 0, + 7, 0,192, 0, 7, 0,193, 0, 7, 0,194, 0, 7, 0,195, 0, 7, 0,196, 0, 7, 0,197, 0, 7, 0,198, 0, 7, 0,199, 0, + 7, 0,200, 0, 7, 0,201, 0, 7, 0,202, 0, 7, 0,203, 0, 7, 0,204, 0, 7, 0,205, 0, 7, 0,206, 0, 7, 0,207, 0, + 7, 0,208, 0, 7, 0,209, 0, 7, 0,210, 0, 7, 0,211, 0, 7, 0,212, 0, 7, 0,213, 0, 7, 0,214, 0, 7, 0,215, 0, + 7, 0,216, 0, 7, 0,217, 0, 7, 0,218, 0, 7, 0,219, 0, 7, 0,220, 0, 7, 0,221, 0, 53, 0, 15, 0, 0, 0,222, 0, + 9, 0,223, 0, 0, 0,224, 0, 0, 0,225, 0, 4, 0,226, 0, 4, 0,227, 0, 9, 0,228, 0, 7, 0,229, 0, 7, 0,230, 0, + 7, 0,231, 0, 4, 0,232, 0, 9, 0,233, 0, 9, 0,234, 0, 4, 0,235, 0, 4, 0, 37, 0, 54, 0, 6, 0, 7, 0,182, 0, + 7, 0,183, 0, 7, 0,184, 0, 7, 0,236, 0, 7, 0, 67, 0, 4, 0, 64, 0, 55, 0, 5, 0, 2, 0, 19, 0, 2, 0, 36, 0, + 2, 0, 64, 0, 2, 0,237, 0, 54, 0,231, 0, 56, 0, 17, 0, 32, 0,164, 0, 47, 0,238, 0, 57, 0,239, 0, 7, 0,240, 0, + 7, 0,241, 0, 2, 0, 17, 0, 2, 0,242, 0, 7, 0,110, 0, 7, 0,111, 0, 7, 0,243, 0, 4, 0,244, 0, 2, 0,245, 0, + 2, 0,246, 0, 4, 0,129, 0, 4, 0,140, 0, 2, 0,247, 0, 2, 0,248, 0, 58, 0, 22, 0, 2, 0, 19, 0, 2, 0,249, 0, + 7, 0,250, 0, 7, 0,251, 0, 2, 0,139, 0, 2, 0,252, 0, 4, 0,253, 0, 4, 0,254, 0, 32, 0,164, 0, 4, 0,255, 0, + 2, 0, 0, 1, 2, 0, 1, 1, 9, 0, 2, 1, 7, 0, 3, 1, 7, 0, 4, 1, 2, 0, 5, 1, 2, 0, 6, 1, 2, 0, 7, 1, + 2, 0, 8, 1, 7, 0, 9, 1, 7, 0, 10, 1, 55, 0, 11, 1, 59, 0, 11, 0, 4, 0, 12, 1, 4, 0, 13, 1, 2, 0, 14, 1, + 2, 0, 19, 0, 2, 0, 15, 1, 2, 0, 37, 0, 32, 0,164, 0, 7, 0, 16, 1, 4, 0, 17, 1, 0, 0, 18, 1, 7, 0, 19, 1, + 52, 0, 61, 0, 27, 0, 31, 0, 39, 0, 75, 0, 7, 0, 20, 1, 7, 0, 21, 1, 7, 0, 22, 1, 7, 0, 23, 1, 7, 0, 24, 1, + 7, 0, 25, 1, 7, 0, 26, 1, 7, 0, 27, 1, 7, 0, 28, 1, 7, 0, 29, 1, 7, 0, 30, 1, 7, 0, 31, 1, 7, 0, 32, 1, + 7, 0, 33, 1, 7, 0, 34, 1, 7, 0, 35, 1, 7, 0, 36, 1, 7, 0, 37, 1, 7, 0, 38, 1, 7, 0, 39, 1, 2, 0, 40, 1, + 2, 0, 41, 1, 2, 0, 42, 1, 2, 0, 43, 1, 2, 0, 44, 1, 2, 0, 45, 1, 2, 0, 46, 1, 2, 0, 19, 0, 2, 0, 17, 0, + 2, 0,242, 0, 7, 0, 47, 1, 7, 0, 48, 1, 7, 0, 49, 1, 7, 0, 50, 1, 4, 0, 51, 1, 4, 0, 52, 1, 2, 0, 53, 1, + 2, 0, 54, 1, 2, 0, 15, 1, 2, 0,127, 0, 4, 0, 23, 0, 4, 0,124, 0, 4, 0,125, 0, 4, 0,126, 0, 7, 0, 55, 1, + 7, 0, 56, 1, 7, 0,189, 0, 45, 0, 57, 1, 60, 0, 58, 1, 36, 0, 80, 0, 47, 0,238, 0, 53, 0, 59, 1, 55, 0, 11, 1, + 56, 0, 60, 1, 30, 0,150, 0, 58, 0, 61, 1, 59, 0, 62, 1, 0, 0, 63, 1, 0, 0,181, 0, 61, 0, 8, 0, 7, 0, 64, 1, + 7, 0, 65, 1, 7, 0,172, 0, 4, 0, 19, 0, 7, 0, 66, 1, 7, 0, 67, 1, 7, 0, 68, 1, 32, 0, 45, 0, 62, 0, 84, 0, + 27, 0, 31, 0, 39, 0, 75, 0, 2, 0, 17, 0, 2, 0, 19, 0, 4, 0, 69, 1, 2, 0,175, 0, 2, 0, 70, 1, 7, 0,182, 0, + 7, 0,183, 0, 7, 0,184, 0, 7, 0,185, 0, 7, 0, 71, 1, 7, 0, 72, 1, 7, 0, 73, 1, 7, 0, 74, 1, 7, 0, 75, 1, + 7, 0, 76, 1, 7, 0, 77, 1, 7, 0, 78, 1, 7, 0, 79, 1, 7, 0, 80, 1, 7, 0, 81, 1, 63, 0, 82, 1, 2, 0,249, 0, + 2, 0, 70, 0, 7, 0,110, 0, 7, 0,111, 0, 7, 0, 83, 1, 7, 0, 84, 1, 7, 0, 85, 1, 7, 0, 86, 1, 7, 0, 87, 1, + 2, 0, 88, 1, 2, 0, 89, 1, 2, 0, 90, 1, 2, 0, 91, 1, 0, 0, 92, 1, 0, 0, 93, 1, 2, 0, 94, 1, 2, 0, 95, 1, + 2, 0, 96, 1, 2, 0, 97, 1, 2, 0, 98, 1, 7, 0, 99, 1, 7, 0,100, 1, 7, 0,101, 1, 7, 0,102, 1, 2, 0,103, 1, + 2, 0, 43, 0, 2, 0,104, 1, 2, 0,105, 1, 2, 0,106, 1, 2, 0,107, 1, 7, 0,108, 1, 7, 0,109, 1, 7, 0,110, 1, + 7, 0,111, 1, 7, 0,112, 1, 7, 0,113, 1, 7, 0,114, 1, 7, 0,115, 1, 7, 0,116, 1, 7, 0,117, 1, 7, 0,118, 1, + 7, 0,119, 1, 2, 0,120, 1, 2, 0,121, 1, 4, 0,122, 1, 4, 0,123, 1, 2, 0,124, 1, 2, 0,125, 1, 2, 0,126, 1, + 2, 0,127, 1, 7, 0,128, 1, 7, 0,129, 1, 7, 0,130, 1, 7, 0,131, 1, 2, 0,132, 1, 2, 0,133, 1, 36, 0, 80, 0, + 51, 0,134, 1, 2, 0,135, 1, 2, 0,136, 1, 30, 0,150, 0, 64, 0, 2, 0, 27, 0, 31, 0, 36, 0, 80, 0, 65, 0, 18, 0, + 7, 0,137, 1, 7, 0,138, 1, 7, 0,139, 1, 7, 0,140, 1, 7, 0,141, 1, 7, 0,142, 1, 7, 0,143, 1, 7, 0,144, 1, + 7, 0,145, 1, 7, 0,146, 1, 2, 0,147, 1, 2, 0,148, 1, 2, 0,149, 1, 2, 0,150, 1, 7, 0,151, 1, 7, 0,152, 1, + 7, 0,153, 1, 4, 0,154, 1, 66, 0,124, 0, 27, 0, 31, 0, 39, 0, 75, 0, 2, 0,155, 1, 2, 0, 19, 0, 7, 0,182, 0, + 7, 0,183, 0, 7, 0,184, 0, 7, 0,156, 1, 7, 0,157, 1, 7, 0,158, 1, 7, 0,159, 1, 7, 0,160, 1, 7, 0,161, 1, + 7, 0,162, 1, 7, 0,163, 1, 7, 0,164, 1, 7, 0,165, 1, 7, 0,166, 1, 7, 0,167, 1, 7, 0,168, 1, 7, 0,169, 1, + 7, 0,170, 1, 7, 0,171, 1, 7, 0,172, 1, 7, 0,173, 1, 7, 0,174, 1, 7, 0,175, 1, 65, 0,176, 1, 7, 0,177, 1, + 7, 0,178, 1, 7, 0,179, 1, 7, 0,180, 1, 7, 0,181, 1, 7, 0,182, 1, 7, 0,183, 1, 2, 0,184, 1, 2, 0,185, 1, + 2, 0,186, 1, 0, 0,187, 1, 0, 0,188, 1, 7, 0,189, 1, 7, 0,190, 1, 2, 0,191, 1, 2, 0,192, 1, 7, 0,193, 1, + 7, 0,194, 1, 7, 0,195, 1, 7, 0,196, 1, 2, 0,197, 1, 2, 0,198, 1, 4, 0, 69, 1, 4, 0,199, 1, 2, 0,200, 1, + 2, 0,201, 1, 2, 0,202, 1, 2, 0,203, 1, 7, 0,204, 1, 7, 0,205, 1, 7, 0,206, 1, 7, 0,207, 1, 7, 0,208, 1, + 7, 0,209, 1, 7, 0,210, 1, 7, 0,211, 1, 7, 0,212, 1, 7, 0,213, 1, 0, 0,214, 1, 7, 0,215, 1, 7, 0,216, 1, + 7, 0,217, 1, 4, 0,218, 1, 0, 0,219, 1, 0, 0,104, 1, 0, 0,220, 1, 0, 0, 63, 1, 2, 0,221, 1, 2, 0,222, 1, + 2, 0,135, 1, 2, 0,223, 1, 2, 0,224, 1, 2, 0,225, 1, 7, 0,226, 1, 7, 0,227, 1, 7, 0,228, 1, 7, 0,229, 1, + 7, 0,230, 1, 2, 0,160, 0, 2, 0,161, 0, 55, 0,231, 1, 55, 0,232, 1, 0, 0,233, 1, 0, 0,234, 1, 0, 0,235, 1, + 0, 0,236, 1, 2, 0,237, 1, 2, 0,238, 1, 7, 0,239, 1, 7, 0,240, 1, 51, 0,134, 1, 60, 0, 58, 1, 36, 0, 80, 0, + 67, 0,241, 1, 30, 0,150, 0, 7, 0,242, 1, 7, 0,243, 1, 7, 0,244, 1, 7, 0,245, 1, 7, 0,246, 1, 2, 0,247, 1, + 2, 0, 70, 0, 7, 0,248, 1, 7, 0,249, 1, 7, 0,250, 1, 7, 0,251, 1, 7, 0,252, 1, 7, 0,253, 1, 7, 0,254, 1, + 7, 0,255, 1, 7, 0, 0, 2, 2, 0, 1, 2, 2, 0, 2, 2, 4, 0, 3, 2, 4, 0,121, 1, 12, 0, 4, 2, 68, 0, 4, 0, + 27, 0, 31, 0, 0, 0, 5, 2, 69, 0, 2, 0, 43, 0,149, 0, 70, 0, 26, 0, 70, 0, 0, 0, 70, 0, 1, 0, 71, 0, 6, 2, + 4, 0, 7, 2, 4, 0, 8, 2, 4, 0, 9, 2, 4, 0, 10, 2, 4, 0, 11, 2, 4, 0, 12, 2, 2, 0, 17, 0, 2, 0, 19, 0, + 2, 0, 13, 2, 2, 0, 14, 2, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 7, 0, 15, 2, 7, 0, 16, 2, 7, 0, 17, 2, + 7, 0, 18, 2, 7, 0, 19, 2, 7, 0, 20, 2, 7, 0, 21, 2, 7, 0, 23, 0, 7, 0, 22, 2, 7, 0, 23, 2, 72, 0, 20, 0, + 27, 0, 31, 0, 39, 0, 75, 0, 71, 0, 6, 2, 12, 0, 24, 2, 12, 0, 25, 2, 12, 0, 26, 2, 36, 0, 80, 0, 66, 0, 27, 2, + 0, 0, 19, 0, 0, 0, 28, 2, 2, 0, 29, 2, 2, 0,174, 0, 2, 0, 37, 0, 7, 0, 64, 1, 7, 0,172, 0, 7, 0, 65, 1, + 7, 0, 30, 2, 7, 0, 31, 2, 7, 0, 32, 2, 70, 0, 33, 2, 35, 0, 11, 0, 7, 0, 34, 2, 7, 0, 35, 2, 7, 0, 36, 2, + 7, 0,251, 0, 2, 0, 55, 0, 0, 0, 37, 2, 0, 0, 38, 2, 0, 0, 39, 2, 0, 0, 40, 2, 0, 0, 41, 2, 0, 0, 42, 2, + 34, 0, 7, 0, 7, 0, 43, 2, 7, 0, 35, 2, 7, 0, 36, 2, 2, 0, 39, 2, 2, 0, 42, 2, 7, 0,251, 0, 7, 0, 37, 0, + 73, 0, 21, 0, 73, 0, 0, 0, 73, 0, 1, 0, 2, 0, 17, 0, 2, 0, 44, 2, 2, 0, 42, 2, 2, 0, 19, 0, 2, 0, 45, 2, + 2, 0, 46, 2, 2, 0, 47, 2, 2, 0, 48, 2, 2, 0, 49, 2, 2, 0, 50, 2, 2, 0, 51, 2, 2, 0, 52, 2, 7, 0, 53, 2, + 7, 0, 54, 2, 34, 0, 49, 0, 35, 0, 50, 0, 2, 0, 55, 2, 2, 0, 56, 2, 4, 0, 57, 2, 74, 0, 5, 0, 2, 0, 58, 2, + 2, 0, 44, 2, 0, 0, 19, 0, 0, 0, 37, 0, 2, 0, 70, 0, 75, 0, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 8, 0, + 7, 0, 59, 2, 76, 0, 68, 0, 27, 0, 31, 0, 39, 0, 75, 0, 71, 0, 6, 2, 12, 0, 60, 2, 12, 0, 25, 2, 12, 0, 61, 2, + 32, 0, 62, 2, 32, 0, 63, 2, 32, 0, 64, 2, 36, 0, 80, 0, 77, 0, 65, 2, 38, 0, 66, 2, 66, 0, 27, 2, 12, 0, 67, 2, + 7, 0, 64, 1, 7, 0,172, 0, 7, 0, 65, 1, 2, 0,174, 0, 2, 0, 43, 0, 2, 0, 68, 2, 2, 0, 69, 2, 2, 0, 70, 2, + 7, 0, 71, 2, 7, 0, 70, 0, 2, 0, 72, 2, 2, 0, 29, 2, 2, 0, 19, 0, 2, 0, 73, 2, 7, 0, 74, 2, 7, 0, 75, 2, + 7, 0, 76, 2, 2, 0, 47, 2, 2, 0, 48, 2, 2, 0, 77, 2, 2, 0, 78, 2, 4, 0, 79, 2, 34, 0, 80, 2, 2, 0, 23, 0, + 2, 0, 95, 0, 2, 0, 67, 0, 2, 0, 81, 2, 7, 0, 82, 2, 7, 0, 83, 2, 7, 0, 84, 2, 7, 0, 85, 2, 7, 0, 86, 2, + 7, 0, 87, 2, 7, 0, 88, 2, 7, 0, 89, 2, 7, 0, 90, 2, 7, 0, 91, 2, 0, 0, 92, 2, 78, 0, 93, 2, 79, 0, 94, 2, + 0, 0, 95, 2, 68, 0, 96, 2, 68, 0, 97, 2, 68, 0, 98, 2, 68, 0, 99, 2, 4, 0,100, 2, 7, 0,101, 2, 4, 0,102, 2, + 4, 0,103, 2, 75, 0,104, 2, 4, 0,105, 2, 4, 0,106, 2, 74, 0,107, 2, 74, 0,108, 2, 80, 0, 40, 0, 27, 0, 31, 0, + 71, 0, 6, 2, 12, 0,109, 2, 36, 0, 80, 0, 38, 0, 66, 2, 66, 0, 27, 2, 81, 0,110, 2, 82, 0,111, 2, 83, 0,112, 2, + 84, 0,113, 2, 85, 0,114, 2, 86, 0,115, 2, 87, 0,116, 2, 88, 0,117, 2, 80, 0,118, 2, 89, 0,119, 2, 90, 0,120, 2, + 91, 0,121, 2, 91, 0,122, 2, 91, 0,123, 2, 4, 0, 54, 0, 4, 0,124, 2, 4, 0,125, 2, 4, 0,126, 2, 4, 0,127, 2, + 2, 0,174, 0, 2, 0,128, 2, 7, 0, 64, 1, 7, 0,172, 0, 7, 0, 65, 1, 7, 0,129, 2, 4, 0, 68, 2, 2, 0,130, 2, + 2, 0, 19, 0, 2, 0,131, 2, 2, 0,132, 2, 2, 0, 29, 2, 2, 0,133, 2, 92, 0,134, 2, 93, 0,135, 2, 83, 0, 8, 0, + 9, 0,136, 2, 7, 0,137, 2, 4, 0,138, 2, 0, 0, 19, 0, 0, 0,139, 2, 2, 0, 69, 1, 2, 0,140, 2, 2, 0,141, 2, + 81, 0, 7, 0, 4, 0,142, 2, 4, 0,143, 2, 4, 0,144, 2, 4, 0,145, 2, 2, 0, 44, 2, 0, 0,146, 2, 0, 0, 19, 0, + 85, 0, 5, 0, 4, 0,142, 2, 4, 0,143, 2, 0, 0,147, 2, 0, 0,148, 2, 2, 0, 19, 0, 94, 0, 2, 0, 4, 0,149, 2, + 7, 0, 36, 2, 86, 0, 3, 0, 94, 0,150, 2, 4, 0,151, 2, 4, 0, 19, 0, 84, 0, 6, 0, 7, 0,152, 2, 2, 0,153, 2, + 2, 0, 44, 2, 0, 0, 19, 0, 0, 0,148, 2, 0, 0, 70, 2, 87, 0, 4, 0, 0, 0,236, 0, 0, 0,182, 0, 0, 0,183, 0, + 0, 0,184, 0, 95, 0, 6, 0, 47, 0,136, 2, 0, 0, 19, 0, 0, 0,139, 2, 2, 0, 69, 1, 2, 0,140, 2, 2, 0,141, 2, + 96, 0, 1, 0, 7, 0,154, 2, 97, 0, 5, 0, 0, 0,236, 0, 0, 0,182, 0, 0, 0,183, 0, 0, 0,184, 0, 4, 0, 37, 0, + 88, 0, 1, 0, 7, 0,155, 2, 89, 0, 2, 0, 4, 0,156, 2, 4, 0, 17, 0, 82, 0, 7, 0, 7, 0,137, 2, 47, 0,136, 2, + 0, 0, 19, 0, 0, 0,139, 2, 2, 0, 69, 1, 2, 0,140, 2, 2, 0,141, 2, 98, 0, 1, 0, 7, 0,157, 2, 99, 0, 1, 0, + 4, 0,158, 2,100, 0, 1, 0, 0, 0,159, 2,101, 0, 1, 0, 7, 0,137, 2,102, 0, 3, 0, 4, 0,160, 2, 0, 0, 92, 0, + 7, 0,161, 2,104, 0, 4, 0, 7, 0,236, 0, 7, 0,182, 0, 7, 0,183, 0, 7, 0,184, 0,105, 0, 1, 0,104, 0,138, 2, +106, 0, 5, 0, 4, 0,162, 2, 4, 0,163, 2, 0, 0, 19, 0, 0, 0, 44, 2, 0, 0, 70, 2,107, 0, 2, 0, 4, 0,164, 2, + 4, 0,163, 2,108, 0, 10, 0,108, 0, 0, 0,108, 0, 1, 0,106, 0,165, 2,105, 0,166, 2,107, 0,167, 2, 4, 0, 54, 0, + 4, 0,125, 2, 4, 0,124, 2, 4, 0, 37, 0, 84, 0,168, 2, 92, 0, 14, 0, 12, 0,169, 2, 84, 0,168, 2, 0, 0,170, 2, + 0, 0,171, 2, 0, 0,172, 2, 0, 0,173, 2, 0, 0,174, 2, 0, 0,175, 2, 0, 0,176, 2, 0, 0, 19, 0, 91, 0,121, 2, + 91, 0,123, 2, 2, 0,177, 2, 0, 0,178, 2, 93, 0, 8, 0, 4, 0,179, 2, 4, 0,180, 2, 81, 0,181, 2, 85, 0,182, 2, + 4, 0,125, 2, 4, 0,124, 2, 4, 0, 54, 0, 4, 0, 37, 0,109, 0, 7, 0,109, 0, 0, 0,109, 0, 1, 0, 4, 0, 17, 0, + 4, 0, 69, 1, 0, 0, 20, 0, 46, 0,134, 0, 0, 0,183, 2,110, 0, 7, 0,109, 0,184, 2, 2, 0,185, 2, 2, 0,169, 2, + 2, 0,186, 2, 2, 0, 90, 0, 9, 0,187, 2, 9, 0,188, 2,111, 0, 3, 0,109, 0,184, 2, 32, 0,164, 0, 0, 0, 20, 0, +112, 0, 5, 0,109, 0,184, 2, 32, 0,164, 0, 0, 0, 20, 0, 2, 0,189, 2, 0, 0,190, 2,113, 0, 5, 0,109, 0,184, 2, + 7, 0, 88, 0, 7, 0,191, 2, 4, 0,192, 2, 4, 0,193, 2,114, 0, 5, 0,109, 0,184, 2, 32, 0,194, 2, 0, 0, 72, 0, + 4, 0, 69, 1, 4, 0, 19, 0,115, 0, 13, 0,109, 0,184, 2, 32, 0,195, 2, 32, 0,196, 2, 32, 0,197, 2, 32, 0,198, 2, + 7, 0,199, 2, 7, 0,200, 2, 7, 0,191, 2, 7, 0,201, 2, 4, 0,202, 2, 4, 0,203, 2, 4, 0, 90, 0, 4, 0,204, 2, +116, 0, 5, 0,109, 0,184, 2, 2, 0,205, 2, 2, 0, 19, 0, 7, 0,206, 2, 32, 0,207, 2,117, 0, 3, 0,109, 0,184, 2, + 7, 0,208, 2, 4, 0, 90, 0,118, 0, 10, 0,109, 0,184, 2, 7, 0,209, 2, 4, 0,210, 2, 4, 0, 37, 0, 2, 0, 90, 0, + 2, 0,211, 2, 2, 0,212, 2, 2, 0,213, 2, 7, 0,214, 2, 0, 0,215, 2,119, 0, 3, 0,109, 0,184, 2, 7, 0, 37, 0, + 4, 0, 17, 0,120, 0, 6, 0,109, 0,184, 2,121, 0,216, 2,122, 0,217, 2,123, 0,218, 2, 7, 0,219, 2, 4, 0, 17, 0, +124, 0, 11, 0,109, 0,184, 2, 52, 0,220, 2, 7, 0,221, 2, 4, 0,222, 2, 0, 0,215, 2, 7, 0,223, 2, 4, 0,224, 2, + 32, 0,225, 2, 0, 0,226, 2, 4, 0,227, 2, 4, 0, 37, 0,125, 0, 10, 0,109, 0,184, 2, 32, 0,228, 2, 47, 0,229, 2, + 4, 0, 90, 0, 4, 0,230, 2, 7, 0,231, 2, 7, 0,232, 2, 0, 0,226, 2, 4, 0,227, 2, 4, 0, 37, 0,126, 0, 3, 0, +109, 0,184, 2, 7, 0,233, 2, 4, 0,234, 2,127, 0, 5, 0,109, 0,184, 2, 7, 0,235, 2, 0, 0,215, 2, 2, 0, 19, 0, + 2, 0,236, 2,128, 0, 8, 0,109, 0,184, 2, 32, 0,164, 0, 7, 0,235, 2, 7, 0,251, 0, 7, 0,106, 0, 0, 0,215, 2, + 2, 0, 19, 0, 2, 0, 17, 0,129, 0, 21, 0,109, 0,184, 2, 32, 0,237, 2, 0, 0,215, 2, 52, 0,220, 2, 32, 0,225, 2, + 2, 0, 19, 0, 2, 0, 37, 0, 7, 0,238, 2, 7, 0,239, 2, 7, 0,240, 2, 7, 0, 74, 2, 7, 0,241, 2, 7, 0,242, 2, + 7, 0,243, 2, 7, 0,244, 2, 4, 0,224, 2, 4, 0,227, 2, 0, 0,226, 2, 7, 0,245, 2, 7, 0,246, 2, 7, 0, 43, 0, +130, 0, 7, 0,109, 0,184, 2, 2, 0,247, 2, 2, 0,248, 2, 4, 0, 70, 0, 32, 0,164, 0, 7, 0,249, 2, 0, 0,215, 2, +131, 0, 10, 0,109, 0,184, 2, 32, 0,164, 0, 0, 0,250, 2, 7, 0,251, 2, 7, 0,252, 2, 7, 0,244, 2, 4, 0,253, 2, + 4, 0,254, 2, 7, 0,255, 2, 0, 0, 20, 0,132, 0, 1, 0,109, 0,184, 2,133, 0, 7, 0,109, 0,184, 2, 46, 0,134, 0, +134, 0, 0, 3,135, 0, 1, 3,136, 0, 2, 3,137, 0, 3, 3, 12, 0, 4, 3,138, 0, 13, 0,109, 0,184, 2, 84, 0, 5, 3, + 84, 0, 6, 3, 84, 0, 7, 3, 84, 0, 8, 3, 84, 0, 9, 3, 84, 0, 10, 3, 81, 0, 11, 3, 4, 0, 12, 3, 4, 0, 13, 3, + 7, 0,219, 2, 7, 0, 37, 0,139, 0, 14, 3,140, 0, 7, 0,109, 0,184, 2, 84, 0, 5, 3, 84, 0, 15, 3,141, 0, 16, 3, +142, 0, 14, 3, 4, 0, 17, 3, 4, 0, 12, 3,143, 0, 4, 0,109, 0,184, 2, 32, 0,164, 0, 4, 0, 18, 3, 4, 0, 37, 0, +144, 0, 2, 0, 4, 0, 19, 3, 7, 0, 36, 2,145, 0, 2, 0, 4, 0,125, 0, 4, 0, 20, 3,146, 0, 20, 0,109, 0,184, 2, + 32, 0,164, 0, 0, 0,215, 2, 2, 0, 21, 3, 2, 0, 19, 0, 2, 0, 70, 2, 7, 0, 22, 3, 7, 0, 23, 3, 4, 0, 54, 0, + 4, 0, 24, 3,145, 0, 25, 3,144, 0, 26, 3, 4, 0, 27, 3, 4, 0, 28, 3, 4, 0, 29, 3, 4, 0, 20, 3, 7, 0, 30, 3, + 7, 0, 31, 3, 7, 0, 32, 3, 9, 0, 33, 3,147, 0, 8, 0,109, 0,184, 2,148, 0, 34, 3,141, 0, 16, 3, 4, 0, 35, 3, + 4, 0, 36, 3, 4, 0, 37, 3, 2, 0, 19, 0, 2, 0, 57, 0,149, 0, 8, 0,109, 0,184, 2, 32, 0, 45, 0, 2, 0,255, 0, + 2, 0, 19, 0, 2, 0,205, 2, 2, 0, 57, 0, 7, 0, 38, 3, 7, 0, 39, 3,150, 0, 5, 0,109, 0,184, 2, 4, 0, 40, 3, + 2, 0, 19, 0, 2, 0, 41, 3, 7, 0, 42, 3,151, 0, 7, 0,109, 0,184, 2, 84, 0, 43, 3, 4, 0, 44, 3, 0, 0, 45, 3, + 0, 0, 46, 3, 0, 0, 47, 3, 0, 0, 48, 3,152, 0, 3, 0,109, 0,184, 2,153, 0, 49, 3,137, 0, 3, 3,154, 0, 10, 0, +109, 0,184, 2, 32, 0, 50, 3, 32, 0, 51, 3, 0, 0, 52, 3, 7, 0, 53, 3, 2, 0, 54, 3, 2, 0, 55, 3, 0, 0, 56, 3, + 0, 0, 57, 3, 0, 0,190, 2,155, 0, 9, 0,109, 0,184, 2, 32, 0, 58, 3, 0, 0, 52, 3, 7, 0, 59, 3, 7, 0, 60, 3, + 0, 0, 69, 1, 0, 0,205, 2, 0, 0, 61, 3, 0, 0, 37, 0,156, 0, 1, 0,109, 0,184, 2,157, 0, 27, 0, 27, 0, 31, 0, + 2, 0, 45, 2, 2, 0, 46, 2, 2, 0, 62, 3, 2, 0, 19, 0, 2, 0, 63, 3, 2, 0, 64, 3, 2, 0, 65, 3, 2, 0, 70, 0, + 0, 0, 66, 3, 0, 0, 67, 3, 0, 0, 68, 3, 0, 0, 17, 0, 4, 0, 37, 0, 7, 0, 69, 3, 7, 0, 70, 3, 7, 0, 71, 3, + 7, 0, 72, 3, 7, 0, 73, 3, 7, 0, 74, 3, 34, 0, 75, 3, 36, 0, 80, 0, 38, 0, 66, 2, 86, 0,115, 2, 7, 0, 76, 3, + 7, 0, 77, 3,157, 0, 78, 3,158, 0, 3, 0,158, 0, 0, 0,158, 0, 1, 0, 0, 0, 20, 0, 71, 0, 3, 0, 7, 0, 79, 3, + 4, 0, 19, 0, 4, 0, 37, 0, 32, 0,124, 0, 27, 0, 31, 0, 39, 0, 75, 0,159, 0, 80, 3, 2, 0, 17, 0, 2, 0, 81, 3, + 4, 0, 82, 3, 4, 0, 83, 3, 4, 0, 84, 3, 0, 0, 85, 3, 32, 0, 38, 0, 32, 0, 86, 3, 32, 0, 87, 3, 32, 0, 88, 3, + 32, 0, 89, 3, 36, 0, 80, 0, 77, 0, 65, 2, 71, 0, 6, 2,160, 0, 90, 3,160, 0, 91, 3,161, 0, 92, 3, 9, 0, 2, 0, +162, 0, 93, 3, 12, 0, 94, 3, 12, 0,109, 2, 12, 0, 25, 2, 12, 0, 95, 3, 12, 0, 96, 3, 4, 0, 69, 1, 4, 0, 97, 3, + 66, 0, 27, 2, 0, 0, 98, 3, 4, 0, 29, 2, 4, 0, 99, 3, 7, 0, 64, 1, 7, 0,100, 3, 7, 0,101, 3, 7, 0,172, 0, + 7, 0,102, 3, 7, 0, 65, 1, 7, 0,103, 3, 7, 0, 15, 2, 7, 0,104, 3, 7, 0,105, 3, 7, 0,106, 3, 7, 0,107, 3, + 7, 0,108, 3, 7, 0,109, 3, 7, 0,251, 2, 7, 0,110, 3, 7, 0,240, 0, 4, 0,111, 3, 2, 0, 19, 0, 2, 0,112, 3, + 2, 0,113, 3, 2, 0,114, 3, 2, 0,115, 3, 2, 0,116, 3, 2, 0,117, 3, 2, 0,118, 3, 2, 0,119, 3, 2, 0,120, 3, + 2, 0,121, 3, 2, 0,122, 3, 4, 0,123, 3, 4, 0,124, 3, 4, 0,125, 3, 4, 0,126, 3, 7, 0,127, 3, 7, 0,101, 2, + 7, 0,128, 3, 7, 0,129, 3, 7, 0,130, 3, 7, 0,131, 3, 7, 0,132, 3, 7, 0,215, 0, 7, 0,133, 3, 7, 0,134, 3, + 7, 0,135, 3, 7, 0,136, 3, 2, 0,137, 3, 0, 0,138, 3, 0, 0,139, 3, 0, 0,140, 3, 0, 0,141, 3, 7, 0,142, 3, + 7, 0,143, 3, 12, 0,144, 3, 12, 0,145, 3, 12, 0,146, 3, 12, 0,147, 3, 7, 0,148, 3, 2, 0,156, 2, 2, 0,149, 3, + 7, 0,138, 2, 4, 0,150, 3, 4, 0,151, 3,163, 0,152, 3, 2, 0,153, 3, 2, 0,247, 0, 7, 0,154, 3, 12, 0,155, 3, + 12, 0,156, 3, 12, 0,157, 3, 12, 0,158, 3,164, 0, 61, 1,165, 0,159, 3, 67, 0,160, 3, 2, 0,161, 3, 2, 0,162, 3, + 2, 0,163, 3, 2, 0,164, 3, 7, 0,130, 2, 2, 0,165, 3, 2, 0,166, 3,153, 0,167, 3,141, 0,168, 3,141, 0,169, 3, + 4, 0,170, 3, 4, 0,171, 3, 4, 0,172, 3, 4, 0, 70, 0, 12, 0,173, 3, 12, 0,174, 3, 12, 0,175, 3,166, 0, 14, 0, +166, 0, 0, 0,166, 0, 1, 0, 32, 0, 38, 0, 7, 0,251, 2, 7, 0, 66, 1, 7, 0,252, 2, 7, 0,244, 2, 0, 0, 20, 0, + 4, 0,253, 2, 4, 0,254, 2, 4, 0,176, 3, 2, 0, 17, 0, 2, 0,177, 3, 7, 0,255, 2,167, 0, 12, 0,167, 0, 0, 0, +167, 0, 1, 0, 32, 0, 45, 0, 4, 0,178, 3, 4, 0,156, 2, 4, 0,179, 3, 4, 0, 17, 0, 4, 0,180, 3, 7, 0, 66, 1, + 7, 0,181, 3, 7, 0,182, 3, 7, 0,154, 2,164, 0, 40, 0, 4, 0, 19, 0, 2, 0,183, 3, 2, 0,184, 3, 2, 0,244, 2, + 2, 0,185, 3, 2, 0,186, 3, 2, 0,187, 3, 2, 0,188, 3, 2, 0,189, 3, 7, 0,190, 3, 7, 0,191, 3, 7, 0,192, 3, + 7, 0,193, 3, 7, 0,194, 3, 7, 0,195, 3, 7, 0,196, 3, 7, 0,197, 3, 7, 0,198, 3, 7, 0,199, 3, 7, 0,200, 3, + 7, 0,201, 3, 7, 0,202, 3, 7, 0,203, 3, 7, 0,204, 3, 7, 0,205, 3, 7, 0, 37, 0, 7, 0,206, 3, 7, 0,207, 3, + 7, 0,208, 3, 7, 0,209, 3, 7, 0,210, 3, 7, 0,211, 3, 7, 0,212, 3, 7, 0,213, 3, 7, 0,214, 3, 7, 0,215, 3, + 52, 0,165, 0,168, 0,216, 3, 7, 0,217, 3, 4, 0,193, 2,169, 0, 5, 0, 67, 0,241, 1, 7, 0,218, 3, 7, 0,219, 3, + 2, 0, 19, 0, 2, 0,220, 3,170, 0, 9, 0,170, 0, 0, 0,170, 0, 1, 0, 4, 0,221, 3, 4, 0,222, 3, 4, 0,223, 3, + 4, 0, 19, 0, 4, 0,224, 3, 9, 0,225, 3, 9, 0,226, 3,137, 0, 19, 0,137, 0, 0, 0,137, 0, 1, 0, 4, 0, 19, 0, + 4, 0,227, 3, 4, 0,228, 3, 4, 0,229, 3, 4, 0,230, 3, 4, 0,231, 3, 4, 0,232, 3, 4, 0,222, 3, 4, 0,156, 2, + 4, 0, 57, 0, 0, 0,233, 3, 0, 0,234, 3, 0, 0,235, 3, 0, 0,236, 3, 12, 0,237, 3,171, 0,238, 3, 9, 0,239, 3, +172, 0, 1, 0, 7, 0, 43, 2,163, 0, 30, 0, 4, 0, 19, 0, 7, 0,240, 3, 7, 0,241, 3, 7, 0,242, 3, 4, 0,243, 3, + 4, 0,244, 3, 4, 0,245, 3, 4, 0,246, 3, 7, 0,247, 3, 7, 0,248, 3, 7, 0,249, 3, 7, 0,250, 3, 7, 0,251, 3, + 7, 0,252, 3, 7, 0,253, 3, 7, 0,254, 3, 7, 0,255, 3, 7, 0, 0, 4, 7, 0, 1, 4, 7, 0, 2, 4, 7, 0, 3, 4, + 7, 0, 4, 4, 7, 0, 5, 4, 7, 0, 6, 4, 7, 0, 7, 4, 7, 0, 8, 4, 4, 0, 9, 4, 4, 0, 10, 4, 7, 0, 11, 4, + 7, 0,133, 3,165, 0, 50, 0, 4, 0,222, 3, 4, 0, 12, 4,173, 0, 13, 4,174, 0, 14, 4, 0, 0, 37, 0, 0, 0, 15, 4, + 2, 0, 16, 4, 7, 0, 17, 4, 0, 0, 18, 4, 7, 0, 19, 4, 7, 0, 20, 4, 7, 0, 21, 4, 7, 0, 22, 4, 7, 0, 23, 4, + 7, 0, 24, 4, 7, 0, 25, 4, 7, 0, 26, 4, 7, 0, 27, 4, 2, 0, 28, 4, 0, 0, 29, 4, 2, 0, 30, 4, 7, 0, 31, 4, + 7, 0, 32, 4, 0, 0, 33, 4, 4, 0,126, 0, 4, 0, 34, 4, 4, 0, 35, 4, 2, 0, 36, 4, 2, 0, 37, 4,172, 0, 38, 4, + 4, 0, 39, 4, 4, 0, 82, 0, 7, 0, 40, 4, 7, 0, 41, 4, 7, 0, 42, 4, 7, 0, 43, 4, 2, 0, 44, 4, 2, 0, 45, 4, + 2, 0, 46, 4, 2, 0, 47, 4, 2, 0, 48, 4, 2, 0, 49, 4, 2, 0, 50, 4, 2, 0, 51, 4,175, 0, 52, 4, 7, 0, 53, 4, + 7, 0, 54, 4,137, 0, 55, 4, 12, 0, 4, 3,169, 0, 56, 4,153, 0, 49, 0,152, 0, 57, 4, 2, 0, 17, 0, 2, 0, 58, 4, + 2, 0, 59, 4, 2, 0, 60, 4, 7, 0, 61, 4, 2, 0, 62, 4, 2, 0, 63, 4, 7, 0, 64, 4, 2, 0, 65, 4, 2, 0, 66, 4, + 7, 0, 67, 4, 7, 0, 68, 4, 7, 0, 69, 4, 7, 0, 70, 4, 7, 0, 71, 4, 7, 0, 72, 4, 4, 0, 73, 4, 7, 0, 74, 4, + 7, 0, 75, 4, 7, 0, 76, 4, 80, 0, 77, 4, 80, 0, 78, 4, 80, 0, 79, 4, 0, 0, 80, 4, 7, 0, 81, 4, 7, 0, 82, 4, + 36, 0, 80, 0, 2, 0, 83, 4, 0, 0, 84, 4, 0, 0, 85, 4, 7, 0, 86, 4, 4, 0, 87, 4, 7, 0, 88, 4, 7, 0, 89, 4, + 4, 0, 90, 4, 4, 0, 19, 0, 7, 0, 91, 4, 7, 0, 92, 4, 7, 0, 93, 4, 84, 0, 94, 4, 7, 0, 95, 4, 7, 0, 96, 4, + 7, 0, 97, 4, 7, 0, 98, 4, 7, 0, 99, 4, 7, 0,100, 4, 7, 0,101, 4, 4, 0,102, 4,176, 0, 73, 0, 27, 0, 31, 0, + 39, 0, 75, 0, 2, 0,175, 0, 2, 0, 70, 1, 2, 0,104, 1, 2, 0,103, 4, 7, 0,104, 4, 7, 0,105, 4, 7, 0,106, 4, + 7, 0,107, 4, 7, 0,108, 4, 7, 0,109, 4, 7, 0,110, 4, 7, 0,111, 4, 7, 0,162, 1, 7, 0,164, 1, 7, 0,163, 1, + 7, 0,112, 4, 4, 0,113, 4, 7, 0,114, 4, 7, 0,115, 4, 7, 0,116, 4, 7, 0,117, 4, 7, 0,118, 4, 7, 0,119, 4, + 7, 0,120, 4, 2, 0,121, 4, 2, 0, 69, 1, 2, 0,122, 4, 2, 0,123, 4, 2, 0,124, 4, 2, 0,125, 4, 2, 0,126, 4, + 2, 0,127, 4, 7, 0,128, 4, 7, 0,129, 4, 7, 0,130, 4, 7, 0,131, 4, 7, 0,132, 4, 7, 0,133, 4, 7, 0,134, 4, + 7, 0,135, 4, 7, 0,136, 4, 7, 0,137, 4, 7, 0,138, 4, 7, 0,139, 4, 2, 0,140, 4, 2, 0,141, 4, 2, 0,142, 4, + 2, 0,143, 4, 7, 0,144, 4, 7, 0,145, 4, 7, 0,146, 4, 7, 0,147, 4, 2, 0,148, 4, 2, 0,149, 4, 2, 0,150, 4, + 2, 0,151, 4, 7, 0,152, 4, 7, 0,153, 4, 7, 0,154, 4, 7, 0,155, 4, 2, 0,156, 4, 2, 0,157, 4, 2, 0,158, 4, + 2, 0, 19, 0, 7, 0,159, 4, 7, 0,160, 4, 36, 0, 80, 0, 51, 0,134, 1, 2, 0,135, 1, 2, 0,136, 1, 30, 0,150, 0, +177, 0, 8, 0,177, 0, 0, 0,177, 0, 1, 0, 4, 0,111, 3, 4, 0,161, 4, 4, 0, 19, 0, 2, 0,162, 4, 2, 0,163, 4, + 32, 0,164, 0,178, 0, 13, 0, 9, 0,164, 4, 9, 0,165, 4, 4, 0,166, 4, 4, 0,167, 4, 4, 0,168, 4, 4, 0,169, 4, + 4, 0,170, 4, 4, 0,171, 4, 4, 0,172, 4, 4, 0,173, 4, 4, 0,174, 4, 4, 0, 37, 0, 0, 0,175, 4,179, 0, 5, 0, + 9, 0,176, 4, 9, 0,177, 4, 4, 0,178, 4, 4, 0, 70, 0, 0, 0,179, 4,180, 0, 15, 0, 4, 0, 17, 0, 4, 0,180, 4, + 4, 0,181, 4, 4, 0,182, 4, 4, 0,183, 4, 4, 0,184, 4, 7, 0,185, 4, 4, 0,186, 4, 4, 0, 90, 0, 4, 0,187, 4, + 4, 0,188, 4, 4, 0,189, 4, 4, 0,190, 4, 4, 0,191, 4, 26, 0, 30, 0,181, 0, 7, 0, 4, 0,192, 4, 7, 0,193, 4, + 7, 0,194, 4, 7, 0,195, 4, 4, 0,196, 4, 2, 0, 19, 0, 2, 0, 37, 0,182, 0, 11, 0,182, 0, 0, 0,182, 0, 1, 0, + 0, 0, 20, 0, 66, 0,197, 4, 67, 0,198, 4, 4, 0,111, 3, 4, 0,199, 4, 4, 0,200, 4, 4, 0, 37, 0, 4, 0,201, 4, + 4, 0,202, 4,183, 0,134, 0,178, 0,203, 4,179, 0,204, 4,180, 0,205, 4, 4, 0, 17, 3, 4, 0,126, 0, 4, 0, 34, 4, + 4, 0,206, 4, 4, 0,207, 4, 4, 0,208, 4, 4, 0,209, 4, 2, 0, 19, 0, 2, 0,210, 4, 7, 0,101, 2, 7, 0,211, 4, + 7, 0,212, 4, 7, 0,213, 4, 7, 0,214, 4, 7, 0,215, 4, 2, 0,216, 4, 2, 0,217, 4, 2, 0,218, 4, 2, 0,219, 4, + 2, 0,246, 0, 2, 0,220, 4, 2, 0,221, 4, 2, 0,222, 4, 2, 0,223, 4, 2, 0,224, 4, 2, 0, 91, 1, 2, 0,106, 0, + 2, 0,225, 4, 2, 0,226, 4, 2, 0,227, 4, 2, 0,228, 4, 2, 0,229, 4, 2, 0,230, 4, 2, 0,231, 4, 2, 0,232, 4, + 2, 0,233, 4, 2, 0, 92, 1, 2, 0,234, 4, 2, 0,235, 4, 2, 0,236, 4, 2, 0,237, 4, 4, 0,238, 4, 4, 0, 69, 1, + 4, 0,239, 4, 2, 0,240, 4, 2, 0,241, 4, 2, 0,242, 4, 2, 0,121, 1, 2, 0,243, 4, 2, 0,244, 4, 2, 0,245, 4, + 2, 0,246, 4, 24, 0,247, 4, 24, 0,248, 4, 23, 0,249, 4, 12, 0,250, 4, 2, 0,251, 4, 2, 0, 37, 0, 7, 0,252, 4, + 7, 0,253, 4, 7, 0,254, 4, 7, 0,255, 4, 4, 0, 0, 5, 7, 0, 1, 5, 7, 0, 2, 5, 7, 0, 3, 5, 7, 0, 4, 5, + 2, 0, 5, 5, 2, 0, 6, 5, 2, 0, 7, 5, 2, 0, 8, 5, 2, 0, 9, 5, 2, 0, 10, 5, 7, 0, 11, 5, 7, 0, 12, 5, + 7, 0, 13, 5, 2, 0, 14, 5, 2, 0, 15, 5, 2, 0, 16, 5, 2, 0, 17, 5, 2, 0, 18, 5, 2, 0, 19, 5, 2, 0, 20, 5, + 2, 0, 21, 5, 2, 0, 22, 5, 2, 0, 23, 5, 4, 0, 24, 5, 4, 0, 25, 5, 4, 0, 26, 5, 4, 0, 27, 5, 4, 0, 28, 5, + 7, 0, 29, 5, 4, 0, 30, 5, 4, 0, 31, 5, 4, 0, 32, 5, 4, 0, 33, 5, 7, 0, 34, 5, 7, 0, 35, 5, 7, 0, 36, 5, + 7, 0, 37, 5, 7, 0, 38, 5, 7, 0, 39, 5, 7, 0, 40, 5, 7, 0, 41, 5, 7, 0, 42, 5, 0, 0, 43, 5, 0, 0, 44, 5, + 4, 0, 45, 5, 2, 0, 46, 5, 2, 0,238, 1, 0, 0, 47, 5, 7, 0, 48, 5, 7, 0, 49, 5, 4, 0, 50, 5, 4, 0, 51, 5, + 7, 0, 52, 5, 7, 0, 53, 5, 2, 0, 54, 5, 2, 0, 55, 5, 7, 0, 56, 5, 2, 0, 57, 5, 2, 0, 58, 5, 4, 0, 59, 5, + 2, 0, 60, 5, 2, 0, 61, 5, 2, 0, 62, 5, 2, 0, 63, 5, 7, 0, 64, 5, 7, 0, 70, 0, 42, 0, 65, 5, 0, 0, 66, 5, +184, 0, 9, 0,184, 0, 0, 0,184, 0, 1, 0, 0, 0, 20, 0, 2, 0, 67, 5, 2, 0, 68, 5, 2, 0, 69, 5, 2, 0, 43, 0, + 7, 0, 70, 5, 7, 0, 70, 0,185, 0, 7, 0, 2, 0,210, 2, 2, 0, 69, 1, 2, 0,109, 0, 2, 0, 71, 5, 7, 0, 72, 5, + 7, 0, 70, 0, 42, 0, 73, 5,186, 0, 5, 0, 7, 0, 74, 5, 0, 0, 17, 0, 0, 0, 43, 0, 0, 0, 70, 0, 0, 0,238, 1, +187, 0, 26, 0, 7, 0,119, 4, 7, 0,120, 4, 2, 0, 69, 1, 2, 0, 19, 0, 2, 0, 75, 5, 2, 0,136, 1, 2, 0,122, 4, + 2, 0,123, 4, 2, 0,124, 4, 2, 0,125, 4, 2, 0,126, 4, 2, 0,127, 4,186, 0, 76, 5, 2, 0,216, 4, 2, 0,217, 4, + 2, 0,218, 4, 2, 0,219, 4, 2, 0,246, 0, 2, 0,220, 4, 2, 0,221, 4, 2, 0,222, 4,185, 0, 77, 5, 2, 0, 78, 5, + 2, 0,223, 4, 2, 0,226, 4, 2, 0,227, 4,188, 0, 5, 0,188, 0, 0, 0,188, 0, 1, 0, 4, 0,221, 3, 0, 0,233, 3, + 4, 0, 19, 0,189, 0, 6, 0,190, 0, 79, 5, 4, 0, 80, 5, 4, 0, 81, 5, 9, 0, 82, 5, 0, 0, 83, 5, 4, 0, 37, 0, +191, 0, 6, 0,189, 0, 84, 5, 2, 0, 19, 0, 2, 0, 85, 5, 2, 0, 86, 5, 2, 0, 87, 5, 9, 0, 88, 5,192, 0, 4, 0, + 2, 0,106, 0, 2, 0,221, 2, 2, 0,227, 3, 2, 0, 89, 5,193, 0, 14, 0, 2, 0, 19, 0, 2, 0, 90, 5, 2, 0, 91, 5, + 2, 0, 92, 5,192, 0, 93, 5, 9, 0, 88, 5, 7, 0, 94, 5, 7, 0, 57, 0, 4, 0, 95, 5, 4, 0, 96, 5, 4, 0, 97, 5, + 4, 0, 98, 5, 46, 0,134, 0, 32, 0,164, 0,194, 0, 4, 0,194, 0, 0, 0,194, 0, 1, 0, 0, 0, 99, 5, 7, 0,100, 5, +195, 0, 6, 0,189, 0, 84, 5, 7, 0,101, 5, 4, 0, 90, 0, 0, 0,102, 5, 0, 0,103, 5, 0, 0,190, 2,196, 0, 9, 0, +189, 0, 84, 5, 7, 0,104, 5, 7, 0,105, 5, 2, 0, 69, 1, 2, 0, 19, 0, 4, 0, 36, 0, 4, 0,106, 5, 86, 0,107, 5, + 9, 0, 88, 5,197, 0, 74, 0,196, 0,108, 5,196, 0,109, 5,195, 0, 80, 3, 7, 0,110, 5, 2, 0,111, 5, 2, 0,112, 5, + 7, 0,113, 5, 7, 0,114, 5, 2, 0,227, 3, 2, 0,115, 5, 7, 0,116, 5, 7, 0,117, 5, 7, 0,118, 5, 2, 0,119, 5, + 2, 0, 95, 5, 2, 0,120, 5, 2, 0,121, 5, 2, 0,122, 5, 2, 0,123, 5, 7, 0,124, 5, 7, 0,125, 5, 7, 0,126, 5, + 2, 0,127, 5, 2, 0,128, 5, 2, 0,129, 5, 2, 0,130, 5, 2, 0,131, 5, 2, 0,132, 5, 2, 0,133, 5,191, 0,134, 5, +193, 0,135, 5, 7, 0,136, 5, 7, 0,137, 5, 7, 0,138, 5, 2, 0,139, 5, 2, 0,140, 5, 0, 0,141, 5, 0, 0,142, 5, + 0, 0,143, 5, 0, 0,144, 5, 0, 0,145, 5, 0, 0,146, 5, 2, 0,147, 5, 7, 0,148, 5, 7, 0,149, 5, 7, 0,150, 5, + 7, 0,151, 5, 7, 0,152, 5, 7, 0,153, 5, 7, 0,154, 5, 7, 0,155, 5, 7, 0,156, 5, 7, 0,157, 5, 2, 0,158, 5, + 0, 0,159, 5, 0, 0,160, 5, 0, 0,161, 5, 0, 0,162, 5, 32, 0,163, 5, 0, 0,164, 5, 0, 0,165, 5, 0, 0,166, 5, + 0, 0,167, 5, 0, 0,168, 5, 0, 0,169, 5, 0, 0,170, 5, 0, 0,171, 5, 2, 0,172, 5, 2, 0,173, 5, 2, 0,174, 5, + 2, 0,175, 5, 2, 0,176, 5, 4, 0,177, 5, 4, 0,178, 5,198, 0, 8, 0, 4, 0,179, 5, 4, 0,180, 5, 4, 0,181, 5, + 4, 0,182, 5, 4, 0,183, 5, 4, 0,184, 5, 4, 0, 54, 0, 4, 0,125, 2,199, 0, 3, 0, 7, 0,185, 5, 2, 0,186, 5, + 2, 0, 19, 0,200, 0, 2, 0, 7, 0,187, 5, 4, 0, 19, 0, 46, 0, 38, 0, 27, 0, 31, 0, 39, 0, 75, 0, 32, 0,188, 5, +176, 0,189, 5, 46, 0,190, 5, 47, 0,238, 0, 12, 0,191, 5,177, 0,192, 5, 32, 0,193, 5, 7, 0,194, 5, 7, 0,195, 5, + 7, 0,196, 5, 7, 0,197, 5, 4, 0,111, 3, 2, 0, 19, 0, 2, 0, 63, 1, 60, 0, 58, 1,201, 0,198, 5,197, 0,199, 5, +202, 0,200, 5,183, 0,182, 0,181, 0,201, 5, 12, 0,100, 0, 12, 0,202, 5, 12, 0,203, 5,203, 0,204, 5, 2, 0,205, 5, + 2, 0,206, 5, 2, 0,247, 0, 2, 0,207, 5, 4, 0,208, 5, 4, 0,209, 5, 12, 0,210, 5,186, 0, 76, 5,187, 0,211, 5, +199, 0,212, 5,162, 0, 93, 3,200, 0,213, 5,204, 0, 6, 0, 47, 0,238, 0, 45, 0, 57, 1, 7, 0, 89, 2, 7, 0, 90, 2, + 7, 0,106, 0, 7, 0,214, 5,205, 0, 35, 0, 7, 0,215, 5, 7, 0,216, 5, 7, 0,217, 5, 7, 0,218, 5, 7, 0,219, 5, + 7, 0,220, 5, 7, 0,221, 5, 7, 0,222, 5, 7, 0,223, 5, 7, 0, 76, 1, 7, 0,224, 5, 7, 0,225, 5, 7, 0,226, 5, + 7, 0,227, 5, 7, 0,171, 0, 2, 0,228, 5, 2, 0,229, 5, 2, 0, 70, 2, 2, 0,230, 5, 2, 0,231, 5, 2, 0,232, 5, + 2, 0,233, 5, 7, 0,234, 5, 71, 0,235, 5,162, 0, 93, 3,205, 0,236, 5,206, 0,237, 5,207, 0,238, 5,208, 0,239, 5, +209, 0,240, 5,210, 0,241, 5, 7, 0,242, 5, 2, 0,243, 5, 2, 0,244, 5, 4, 0,238, 1,211, 0, 54, 0,212, 0, 0, 0, +212, 0, 1, 0, 12, 0,245, 5, 4, 0,246, 5, 7, 0,247, 5, 2, 0,248, 5, 7, 0,223, 5, 7, 0, 76, 1, 7, 0, 43, 0, + 4, 0,249, 5, 2, 0,232, 5, 2, 0,233, 5, 32, 0,188, 5, 32, 0,250, 5,204, 0,251, 5,211, 0,236, 5, 0, 0,252, 5, + 4, 0,111, 3, 4, 0,253, 5, 2, 0,254, 5, 2, 0, 70, 0, 2, 0,255, 5, 2, 0, 0, 6, 2, 0,238, 1, 2, 0, 19, 0, + 2, 0, 28, 2, 2, 0, 1, 6, 7, 0,112, 0, 7, 0, 2, 6, 7, 0, 3, 6, 7, 0, 4, 6, 7, 0, 5, 6, 7, 0, 6, 6, + 7, 0,171, 0, 7, 0,194, 5, 2, 0, 7, 6, 2, 0,121, 1, 2, 0, 8, 6, 2, 0, 9, 6, 2, 0, 10, 6, 2, 0, 11, 6, + 2, 0, 12, 6, 2, 0, 13, 6, 2, 0, 14, 6, 2, 0, 15, 6, 4, 0, 16, 6, 12, 0, 17, 6, 2, 0, 18, 6, 2, 0,139, 2, + 2, 0, 19, 6, 0, 0, 20, 6, 0, 0, 21, 6, 9, 0, 22, 6,162, 0, 93, 3,213, 0, 25, 0, 24, 0, 36, 0, 24, 0, 64, 0, + 23, 0, 23, 6, 23, 0, 24, 6, 23, 0, 25, 6, 7, 0, 26, 6, 7, 0, 27, 6, 7, 0, 28, 6, 7, 0, 29, 6, 2, 0, 30, 6, + 2, 0, 31, 6, 2, 0, 32, 6, 2, 0, 33, 6, 2, 0, 34, 6, 2, 0, 19, 0, 2, 0, 35, 6, 2, 0, 36, 6, 2, 0, 37, 6, + 2, 0, 38, 6, 2, 0, 39, 6, 2, 0, 0, 6, 7, 0, 40, 6, 7, 0, 41, 6, 4, 0, 42, 6, 4, 0, 43, 6,212, 0, 6, 0, +212, 0, 0, 0,212, 0, 1, 0, 12, 0,245, 5, 4, 0,246, 5, 7, 0,247, 5, 2, 0,248, 5,214, 0, 8, 0,212, 0, 0, 0, +212, 0, 1, 0, 12, 0,245, 5, 4, 0,246, 5, 7, 0,247, 5, 2, 0,248, 5,215, 0, 44, 6, 46, 0,134, 0,216, 0, 14, 0, +212, 0, 0, 0,212, 0, 1, 0, 12, 0,245, 5, 4, 0,246, 5, 7, 0,247, 5, 2, 0,248, 5,213, 0, 45, 6,217, 0, 46, 6, + 12, 0, 47, 6, 2, 0, 69, 1, 2, 0, 48, 6, 4, 0, 19, 0, 7, 0, 49, 6, 4, 0, 0, 6,218, 0, 20, 0,212, 0, 0, 0, +212, 0, 1, 0, 12, 0,245, 5, 4, 0,246, 5, 7, 0,247, 5, 2, 0,248, 5,206, 0,237, 5,213, 0, 45, 6, 2, 0, 50, 6, + 2, 0, 51, 6, 2, 0, 52, 6, 2, 0, 53, 6, 2, 0, 35, 6, 2, 0, 54, 6, 0, 0, 19, 0, 0, 0,136, 1, 9, 0, 65, 2, + 4, 0, 55, 6, 4, 0, 56, 6, 27, 0, 57, 6,219, 0, 16, 0,212, 0, 0, 0,212, 0, 1, 0, 12, 0,245, 5, 4, 0,246, 5, + 7, 0,247, 5, 2, 0,248, 5,213, 0, 45, 6, 7, 0, 89, 2, 7, 0, 90, 2, 2, 0, 50, 6, 2, 0, 58, 6, 2, 0, 59, 6, + 2, 0, 60, 6, 4, 0, 19, 0, 7, 0, 61, 6,162, 0, 93, 3,220, 0, 16, 0, 0, 0, 62, 6, 0, 0, 63, 6, 0, 0, 64, 6, + 0, 0, 65, 6, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 66, 6, 2, 0, 67, 6, 2, 0,181, 1, 2, 0, 68, 6, 4, 0, 69, 6, + 4, 0, 70, 6, 2, 0, 71, 6, 2, 0, 72, 6, 0, 0, 73, 6, 0, 0, 74, 6,221, 0, 16, 0,212, 0, 0, 0,212, 0, 1, 0, + 12, 0,245, 5, 4, 0,246, 5, 4, 0, 37, 0,220, 0, 75, 6,222, 0, 76, 6, 12, 0, 77, 6, 12, 0, 78, 6,223, 0, 79, 6, +210, 0, 80, 6,224, 0, 81, 6, 2, 0, 82, 6, 2, 0, 83, 6, 2, 0, 84, 6, 2, 0, 70, 0,225, 0, 17, 0,212, 0, 0, 0, +212, 0, 1, 0, 12, 0,245, 5, 4, 0,246, 5, 7, 0,247, 5, 2, 0,248, 5,213, 0, 45, 6, 12, 0, 85, 6,226, 0, 86, 6, + 0, 0, 87, 6,227, 0, 88, 6, 4, 0, 89, 6, 4, 0, 90, 6, 2, 0, 19, 0, 2, 0, 91, 6, 2, 0, 92, 6, 2, 0, 37, 0, +228, 0, 29, 0,212, 0, 0, 0,212, 0, 1, 0, 12, 0,245, 5, 4, 0,246, 5, 7, 0,247, 5, 2, 0,248, 5, 47, 0,229, 2, + 45, 0, 57, 1, 63, 0, 93, 6, 2, 0,133, 0, 2, 0, 94, 6, 2, 0, 70, 0, 2, 0, 95, 6, 4, 0, 19, 0, 2, 0, 96, 6, + 2, 0, 97, 6, 2, 0, 98, 6, 2, 0,238, 1, 0, 0, 99, 6, 0, 0,100, 6, 0, 0,101, 6, 0, 0, 0, 6, 7, 0, 89, 2, + 7, 0, 90, 2, 7, 0, 61, 6, 7, 0,121, 1, 7, 0,102, 6, 7, 0,103, 6,162, 0, 93, 3,229, 0, 11, 0,212, 0, 0, 0, +212, 0, 1, 0, 12, 0,245, 5, 4, 0,246, 5, 7, 0,247, 5, 2, 0,248, 5, 2, 0, 48, 6, 2, 0, 19, 0, 4, 0, 37, 0, +217, 0, 46, 6,213, 0, 45, 6,230, 0, 27, 0,212, 0, 0, 0,212, 0, 1, 0, 12, 0,245, 5, 4, 0,246, 5, 7, 0,247, 5, + 2, 0,248, 5, 42, 0,104, 6, 4, 0,105, 6, 4, 0,106, 6, 2, 0, 90, 0, 2, 0,133, 0, 2, 0,107, 6, 0, 0,108, 6, + 0, 0,109, 6, 4, 0,110, 6, 4, 0,111, 6, 4, 0,112, 6, 4, 0,113, 6, 2, 0,114, 6, 2, 0,115, 6, 7, 0,116, 6, + 23, 0,117, 6, 23, 0,118, 6, 4, 0,119, 6, 4, 0,120, 6, 0, 0,121, 6, 0, 0,122, 6,231, 0, 10, 0, 27, 0, 31, 0, + 9, 0,123, 6, 9, 0,124, 6, 9, 0,125, 6, 9, 0,126, 6, 9, 0,127, 6, 4, 0, 90, 0, 4, 0,128, 6, 0, 0,129, 6, + 0, 0,130, 6,232, 0, 10, 0,212, 0, 0, 0,212, 0, 1, 0, 12, 0,245, 5, 4, 0,246, 5, 7, 0,247, 5,231, 0,131, 6, + 2, 0, 90, 0, 2, 0,133, 0, 4, 0, 43, 0, 9, 0,132, 6,233, 0, 8, 0,212, 0, 0, 0,212, 0, 1, 0, 12, 0,245, 5, + 4, 0,246, 5, 7, 0,247, 5,213, 0, 45, 6, 4, 0, 19, 0, 4, 0,133, 6,234, 0, 23, 0,212, 0, 0, 0,212, 0, 1, 0, + 12, 0,245, 5, 4, 0,246, 5, 7, 0,247, 5, 2, 0,248, 5,213, 0, 45, 6, 27, 0,134, 6, 27, 0, 81, 0, 2, 0, 19, 0, + 2, 0,133, 0, 7, 0,135, 6, 9, 0,136, 6, 7, 0, 89, 2, 7, 0, 90, 2, 7, 0,137, 6, 7, 0,138, 6, 60, 0, 58, 1, + 60, 0,139, 6, 4, 0,140, 6, 2, 0,141, 6, 2, 0, 37, 0,162, 0, 93, 3,235, 0, 10, 0,212, 0, 0, 0,212, 0, 1, 0, + 12, 0,245, 5, 4, 0,246, 5, 7, 0,247, 5, 2, 0,248, 5, 2, 0, 19, 0, 2, 0,120, 3, 4, 0, 37, 0,162, 0, 93, 3, +236, 0, 42, 0,212, 0, 0, 0,212, 0, 1, 0, 12, 0,245, 5, 4, 0,246, 5, 7, 0,247, 5, 2, 0,248, 5,213, 0, 45, 6, +222, 0, 76, 6, 0, 0, 62, 6, 0, 0, 63, 6, 0, 0, 64, 6, 2, 0, 17, 0, 2, 0, 72, 6, 2, 0, 19, 0, 2, 0, 66, 6, + 9, 0,136, 6, 4, 0, 69, 6, 4, 0,142, 6, 4, 0,143, 6, 4, 0, 70, 6, 23, 0,144, 6, 23, 0,145, 6, 7, 0,146, 6, + 7, 0,147, 6, 7, 0,148, 6, 7, 0,135, 6, 2, 0,149, 6, 2, 0,237, 0, 2, 0,181, 1, 2, 0, 68, 6, 2, 0, 37, 0, + 2, 0, 43, 0, 2, 0,150, 6, 2, 0,151, 6, 9, 0,152, 6, 9, 0,153, 6, 9, 0,154, 6, 9, 0,155, 6, 9, 0,156, 6, + 2, 0,157, 6, 0, 0, 74, 6, 57, 0,158, 6,237, 0, 7, 0,237, 0, 0, 0,237, 0, 1, 0, 4, 0,159, 6, 4, 0, 23, 0, + 0, 0, 84, 0, 4, 0,160, 6, 4, 0, 17, 0,238, 0, 13, 0,212, 0, 0, 0,212, 0, 1, 0, 12, 0,245, 5, 4, 0,246, 5, + 7, 0,247, 5, 2, 0,248, 5, 4, 0, 17, 0, 4, 0,161, 6, 4, 0, 19, 0, 4, 0,107, 6, 12, 0,162, 6, 12, 0,163, 6, + 0, 0,164, 6,239, 0, 5, 0,212, 0, 0, 0,212, 0, 1, 0, 12, 0,245, 5, 4, 0,246, 5, 4, 0, 37, 0,240, 0, 7, 0, +240, 0, 0, 0,240, 0, 1, 0, 0, 0,165, 6, 2, 0,166, 6, 2, 0,167, 6, 2, 0,168, 6, 2, 0, 37, 0,241, 0, 12, 0, + 2, 0,167, 6, 2, 0,169, 6, 2, 0,170, 6, 0, 0,190, 2, 2, 0,171, 6, 2, 0,172, 6, 2, 0,173, 6, 2, 0,174, 6, + 2, 0,175, 6, 2, 0, 35, 6, 7, 0,176, 6, 7, 0,177, 6,242, 0, 18, 0,242, 0, 0, 0,242, 0, 1, 0, 0, 0,233, 3, +241, 0,178, 6,241, 0,179, 6,241, 0,180, 6,241, 0,181, 6, 7, 0,182, 6, 2, 0,183, 6, 2, 0,184, 6, 2, 0,185, 6, + 2, 0,186, 6, 2, 0,187, 6, 2, 0,188, 6, 2, 0,189, 6, 2, 0,190, 6, 2, 0,191, 6, 2, 0,192, 6,243, 0, 10, 0, + 0, 0,193, 6, 0, 0,194, 6, 0, 0,195, 6, 0, 0,196, 6, 0, 0,197, 6, 0, 0,198, 6, 2, 0,199, 6, 2, 0,200, 6, + 2, 0,201, 6, 2, 0, 37, 0,244, 0, 8, 0, 0, 0,202, 6, 0, 0,203, 6, 0, 0,204, 6, 0, 0,205, 6, 0, 0,206, 6, + 0, 0,207, 6, 7, 0,214, 5, 7, 0, 37, 0,245, 0, 17, 0,243, 0,208, 6,243, 0,209, 6,243, 0,210, 6,243, 0,211, 6, +243, 0,212, 6,243, 0,213, 6,243, 0,214, 6,243, 0,215, 6,243, 0,216, 6,243, 0,217, 6,243, 0,218, 6,243, 0,219, 6, +243, 0,220, 6,243, 0,221, 6,243, 0,222, 6,244, 0,223, 6, 0, 0,224, 6,246, 0, 71, 0, 0, 0,225, 6, 0, 0,226, 6, + 0, 0,197, 6, 0, 0,227, 6, 0, 0,228, 6, 0, 0,229, 6, 0, 0,230, 6, 0, 0,231, 6, 0, 0,232, 6, 0, 0,233, 6, + 0, 0,234, 6, 0, 0,235, 6, 0, 0,236, 6, 0, 0,237, 6, 0, 0,238, 6, 0, 0,239, 6, 0, 0,240, 6, 0, 0,241, 6, + 0, 0,242, 6, 0, 0,243, 6, 0, 0,244, 6, 0, 0,245, 6, 0, 0,246, 6, 0, 0,247, 6, 0, 0,248, 6, 0, 0,249, 6, + 0, 0,250, 6, 0, 0,251, 6, 0, 0,252, 6, 0, 0,253, 6, 0, 0,254, 6, 0, 0,255, 6, 0, 0, 0, 7, 0, 0, 1, 7, + 0, 0, 2, 7, 0, 0, 3, 7, 0, 0, 4, 7, 0, 0, 5, 7, 0, 0, 6, 7, 0, 0, 7, 7, 0, 0, 8, 7, 0, 0, 9, 7, + 0, 0, 10, 7, 0, 0, 11, 7, 0, 0, 12, 7, 0, 0, 13, 7, 0, 0, 14, 7, 0, 0, 15, 7, 0, 0, 16, 7, 0, 0, 17, 7, + 0, 0, 18, 7, 0, 0, 19, 7, 0, 0, 20, 7, 0, 0, 21, 7, 0, 0, 22, 7, 0, 0, 23, 7, 0, 0, 24, 7, 0, 0, 25, 7, + 0, 0, 26, 7, 0, 0, 27, 7, 0, 0, 28, 7, 0, 0, 29, 7, 0, 0, 30, 7, 0, 0, 31, 7, 0, 0, 32, 7, 0, 0, 33, 7, + 0, 0, 34, 7, 0, 0, 35, 7, 0, 0, 36, 7, 0, 0, 37, 7, 0, 0, 92, 0,247, 0, 5, 0, 0, 0, 38, 7, 0, 0,249, 6, + 0, 0,251, 6, 2, 0, 19, 0, 2, 0, 37, 0,248, 0, 24, 0,248, 0, 0, 0,248, 0, 1, 0, 0, 0, 20, 0,245, 0, 39, 7, +246, 0, 40, 7,246, 0, 41, 7,246, 0, 42, 7,246, 0, 43, 7,246, 0, 44, 7,246, 0, 45, 7,246, 0, 46, 7,246, 0, 47, 7, +246, 0, 48, 7,246, 0, 49, 7,246, 0, 50, 7,246, 0, 51, 7,246, 0, 52, 7,246, 0, 53, 7,246, 0, 54, 7,246, 0, 55, 7, +246, 0, 56, 7,247, 0, 57, 7, 4, 0, 58, 7, 4, 0, 37, 0,249, 0, 5, 0, 4, 0, 19, 0, 4, 0, 37, 0, 7, 0,138, 2, + 7, 0, 59, 7, 7, 0, 43, 2,250, 0, 73, 0, 4, 0, 19, 0, 4, 0, 60, 7, 4, 0, 61, 7, 0, 0, 62, 7, 0, 0, 63, 7, + 0, 0, 64, 7, 0, 0, 65, 7, 0, 0, 66, 7, 0, 0, 67, 7, 0, 0, 68, 7, 0, 0, 69, 7, 0, 0, 70, 7, 2, 0, 71, 7, + 2, 0, 37, 0, 4, 0, 72, 7, 4, 0, 73, 7, 4, 0, 74, 7, 4, 0, 75, 7, 2, 0, 76, 7, 2, 0, 77, 7, 4, 0, 78, 7, + 4, 0, 79, 7, 4, 0, 80, 7, 4, 0, 81, 7, 4, 0, 82, 7, 4, 0,162, 6, 4, 0, 83, 7, 2, 0, 84, 7, 2, 0, 85, 7, + 2, 0, 86, 7, 2, 0, 87, 7, 12, 0, 88, 7, 12, 0, 89, 7, 12, 0, 90, 7, 12, 0, 91, 7, 0, 0, 92, 7, 2, 0, 93, 7, + 2, 0, 94, 7, 2, 0, 95, 7, 2, 0, 96, 7, 2, 0, 97, 7, 2, 0, 98, 7, 2, 0, 99, 7, 2, 0,100, 7,249, 0,101, 7, + 2, 0,102, 7, 2, 0,103, 7, 2, 0,104, 7, 2, 0,105, 7, 2, 0,106, 7, 2, 0,107, 7, 2, 0,108, 7, 2, 0,109, 7, + 4, 0,110, 7, 4, 0,111, 7, 2, 0,112, 7, 2, 0,113, 7, 2, 0,114, 7, 2, 0,115, 7, 2, 0,116, 7, 2, 0,117, 7, + 2, 0,118, 7, 2, 0,119, 7, 2, 0,120, 7, 2, 0,121, 7, 2, 0,122, 7, 2, 0,123, 7, 0, 0,124, 7, 0, 0,125, 7, + 7, 0,126, 7, 2, 0,139, 5, 2, 0,140, 5, 55, 0,127, 7,215, 0, 21, 0, 27, 0, 31, 0, 12, 0,128, 7, 12, 0,129, 7, + 12, 0,130, 7, 12, 0,245, 5, 46, 0,134, 0, 46, 0,131, 7, 2, 0,132, 7, 2, 0,133, 7, 2, 0,134, 7, 2, 0,135, 7, + 2, 0,136, 7, 2, 0,137, 7, 2, 0,138, 7, 2, 0, 37, 0, 2, 0,139, 7, 2, 0,140, 7, 4, 0, 70, 0,210, 0,141, 7, + 9, 0,142, 7, 2, 0,143, 7,251, 0, 5, 0,251, 0, 0, 0,251, 0, 1, 0,251, 0,144, 7, 13, 0,145, 7, 4, 0, 19, 0, +252, 0, 7, 0,252, 0, 0, 0,252, 0, 1, 0,251, 0,146, 7,251, 0,147, 7, 2, 0,248, 4, 2, 0, 19, 0, 4, 0, 37, 0, +253, 0, 25, 0,253, 0, 0, 0,253, 0, 1, 0,254, 0,148, 7,255, 0, 81, 6, 0, 0,149, 7, 0, 0,150, 7, 0, 0,151, 7, + 2, 0,152, 7, 2, 0,153, 7, 2, 0,154, 7, 2, 0,155, 7, 2, 0,156, 7, 2, 0, 37, 0, 2, 0, 19, 0, 2, 0,157, 7, + 2, 0,158, 7, 2, 0,159, 7, 4, 0,160, 7,253, 0,161, 7, 9, 0,162, 7, 4, 0,163, 7, 4, 0,164, 7, 4, 0,165, 7, + 4, 0,166, 7, 0, 0,167, 7, 0, 1, 22, 0, 0, 1, 0, 0, 0, 1, 1, 0,251, 0,146, 7,251, 0,147, 7,251, 0,168, 7, +251, 0,169, 7,215, 0,170, 7, 23, 0, 52, 0, 0, 0,246, 5, 0, 0,171, 7, 2, 0, 36, 6, 2, 0, 37, 6, 2, 0,172, 7, + 2, 0, 37, 0, 2, 0,135, 7, 2, 0,160, 6, 2, 0, 19, 0, 1, 1,148, 7, 12, 0,173, 7, 12, 0,245, 5, 12, 0,174, 7, + 12, 0,175, 7, 2, 1, 21, 0, 2, 1, 0, 0, 2, 1, 1, 0,213, 0, 45, 6, 23, 0,176, 7, 23, 0,177, 7, 2, 0, 36, 6, + 2, 0, 37, 6, 2, 0,178, 7, 2, 0,179, 7, 2, 0,180, 7, 2, 0, 19, 0, 7, 0, 85, 2, 2, 0,134, 7, 2, 0,138, 7, + 4, 0, 43, 0, 3, 1,148, 7, 12, 0,181, 7, 12, 0,182, 7, 12, 0,174, 7, 0, 0,183, 7, 9, 0,184, 7, 4, 1, 12, 0, + 0, 0,185, 7, 2, 0,186, 7, 2, 0,187, 7, 2, 0,188, 7, 2, 0,189, 7, 2, 0,235, 4, 2, 0,230, 4,215, 0,190, 7, + 46, 0,191, 7, 4, 0,192, 7, 4, 0,193, 7, 0, 0, 35, 0, 5, 1, 1, 0, 0, 0,194, 7, 6, 1, 8, 0, 57, 0,195, 7, + 57, 0,196, 7, 6, 1,197, 7, 6, 1,198, 7, 6, 1,199, 7, 2, 0,129, 0, 2, 0, 19, 0, 4, 0,200, 7, 7, 1, 4, 0, + 4, 0,105, 6, 4, 0,201, 7, 4, 0,110, 6, 4, 0,202, 7, 8, 1, 2, 0, 4, 0,203, 7, 4, 0,204, 7, 9, 1, 7, 0, + 7, 0,205, 7, 7, 0,206, 7, 7, 0,207, 7, 4, 0, 19, 0, 4, 0, 37, 0, 7, 0,114, 4, 7, 0,208, 7, 10, 1, 6, 0, + 0, 0,209, 7, 0, 0, 64, 6, 49, 0,137, 0, 2, 0,106, 0, 2, 0,234, 4, 4, 0, 37, 0, 11, 1, 21, 0, 11, 1, 0, 0, + 11, 1, 1, 0, 4, 0, 57, 0, 4, 0, 23, 0, 4, 0, 28, 0, 4, 0,210, 7, 4, 0,211, 7, 4, 0,212, 7, 5, 1,213, 7, + 0, 0,209, 7, 4, 0,214, 7, 4, 0,215, 7, 10, 1, 87, 3, 7, 1,216, 7, 8, 1,217, 7, 9, 1,218, 7, 6, 1,219, 7, + 6, 1,220, 7, 6, 1,221, 7, 57, 0,222, 7, 57, 0,223, 7, 12, 1, 12, 0, 0, 0, 5, 2, 9, 0,223, 0, 0, 0,224, 0, + 4, 0,227, 0, 4, 0,235, 0, 9, 0,228, 0, 7, 0,230, 0, 7, 0,231, 0, 9, 0,224, 7, 9, 0,225, 7, 9, 0,232, 0, + 9, 0,234, 0, 13, 1, 43, 0, 13, 1, 0, 0, 13, 1, 1, 0, 9, 0,226, 7, 9, 0, 26, 0, 0, 0, 27, 0, 4, 0, 19, 0, + 4, 0, 17, 0, 4, 0, 23, 0, 4, 0, 88, 0, 4, 0,227, 7, 4, 0,228, 7, 4, 0,211, 7, 4, 0,212, 7, 4, 0,229, 7, + 4, 0,246, 0, 4, 0,230, 7, 4, 0,231, 7, 7, 0,105, 5, 7, 0,232, 7, 4, 0,126, 0, 4, 0,233, 7, 11, 1,234, 7, + 36, 0, 80, 0, 46, 0,134, 0, 49, 0,137, 0, 7, 0,235, 7, 7, 0,236, 7, 12, 1, 59, 1, 13, 1,237, 7, 13, 1,238, 7, + 13, 1,239, 7, 12, 0,240, 7, 14, 1,241, 7, 15, 1,242, 7, 7, 0,243, 7, 7, 0,244, 7, 4, 0,245, 7, 7, 0,246, 7, + 9, 0,247, 7, 4, 0,248, 7, 4, 0,249, 7, 4, 0,250, 7, 7, 0,251, 7, 16, 1, 4, 0, 16, 1, 0, 0, 16, 1, 1, 0, + 12, 0,252, 7, 13, 1,253, 7,201, 0, 6, 0, 12, 0,254, 7, 12, 0,240, 7, 12, 0,255, 7, 13, 1, 0, 8, 0, 0, 1, 8, + 0, 0, 2, 8, 17, 1, 4, 0, 7, 0, 3, 8, 7, 0,109, 0, 2, 0, 4, 8, 2, 0, 5, 8, 18, 1, 6, 0, 7, 0, 6, 8, + 7, 0, 7, 8, 7, 0, 8, 8, 7, 0, 9, 8, 4, 0, 10, 8, 4, 0, 11, 8, 19, 1, 12, 0, 7, 0, 12, 8, 7, 0, 13, 8, + 7, 0, 14, 8, 7, 0, 15, 8, 7, 0, 16, 8, 7, 0, 17, 8, 7, 0, 18, 8, 7, 0, 19, 8, 7, 0, 20, 8, 7, 0, 21, 8, + 4, 0,233, 2, 4, 0, 22, 8, 20, 1, 2, 0, 7, 0, 74, 5, 7, 0, 37, 0, 21, 1, 5, 0, 7, 0, 23, 8, 7, 0, 24, 8, + 4, 0, 90, 0, 4, 0,191, 2, 4, 0, 25, 8, 22, 1, 6, 0, 22, 1, 0, 0, 22, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, + 2, 0, 26, 8, 2, 0, 57, 0, 23, 1, 8, 0, 23, 1, 0, 0, 23, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 26, 8, + 2, 0, 57, 0, 7, 0, 23, 0, 7, 0,126, 0, 24, 1, 45, 0, 24, 1, 0, 0, 24, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, + 2, 0, 26, 8, 2, 0,242, 0, 2, 0, 28, 4, 2, 0, 27, 8, 7, 0, 28, 8, 7, 0, 89, 0, 7, 0,246, 2, 4, 0, 29, 8, + 4, 0, 82, 0, 4, 0,193, 2, 7, 0, 30, 8, 7, 0, 31, 8, 7, 0, 32, 8, 7, 0, 33, 8, 7, 0, 34, 8, 7, 0, 35, 8, + 7, 0,243, 2, 7, 0, 56, 1, 7, 0, 36, 8, 7, 0, 37, 8, 7, 0, 37, 0, 7, 0, 38, 8, 7, 0, 39, 8, 7, 0, 40, 8, + 2, 0, 41, 8, 2, 0, 42, 8, 2, 0, 43, 8, 2, 0, 44, 8, 2, 0, 45, 8, 2, 0, 46, 8, 2, 0, 47, 8, 2, 0, 48, 8, + 2, 0, 28, 2, 2, 0, 49, 8, 2, 0, 25, 2, 2, 0, 50, 8, 0, 0, 51, 8, 0, 0, 52, 8, 7, 0,240, 0, 25, 1, 53, 8, + 67, 0,241, 1, 26, 1, 16, 0, 26, 1, 0, 0, 26, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 26, 8, 2, 0,242, 0, + 7, 0,238, 2, 7, 0,239, 2, 7, 0,240, 2, 7, 0, 74, 2, 7, 0,241, 2, 7, 0,242, 2, 7, 0, 54, 8, 7, 0,243, 2, + 7, 0,245, 2, 7, 0,246, 2,227, 0, 5, 0, 2, 0, 17, 0, 2, 0,200, 7, 2, 0, 19, 0, 2, 0, 55, 8, 27, 0,134, 6, +226, 0, 3, 0, 4, 0, 69, 0, 4, 0, 56, 8,227, 0, 2, 0, 27, 1, 7, 0, 27, 1, 0, 0, 27, 1, 1, 0, 0, 0, 20, 0, + 2, 0, 17, 0, 2, 0, 19, 0, 4, 0, 22, 0, 9, 0, 57, 8, 28, 1, 5, 0, 0, 0, 20, 0, 7, 0, 76, 1, 7, 0, 58, 8, + 4, 0, 59, 8, 4, 0, 37, 0, 29, 1, 4, 0, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 43, 0, 2, 0, 70, 0, 30, 1, 4, 0, + 0, 0, 20, 0, 66, 0, 60, 8, 7, 0, 76, 1, 7, 0, 37, 0, 31, 1, 6, 0, 2, 0, 61, 8, 2, 0, 62, 8, 2, 0, 17, 0, + 2, 0, 63, 8, 0, 0, 64, 8, 0, 0, 65, 8, 32, 1, 5, 0, 4, 0, 17, 0, 4, 0, 37, 0, 0, 0, 20, 0, 0, 0, 66, 8, + 0, 0, 67, 8, 33, 1, 3, 0, 4, 0, 17, 0, 4, 0, 37, 0, 0, 0, 20, 0, 34, 1, 4, 0, 2, 0, 68, 8, 2, 0, 69, 8, + 2, 0, 19, 0, 2, 0, 37, 0, 35, 1, 6, 0, 0, 0, 20, 0, 0, 0, 70, 8, 2, 0, 71, 8, 2, 0,243, 2, 2, 0, 69, 1, + 2, 0, 70, 0, 36, 1, 5, 0, 0, 0, 20, 0, 7, 0,109, 0, 7, 0,116, 4, 2, 0, 19, 0, 2, 0,205, 2, 37, 1, 3, 0, + 0, 0, 20, 0, 4, 0,193, 2, 4, 0, 68, 8, 38, 1, 7, 0, 0, 0, 20, 0, 7, 0,116, 4, 0, 0, 72, 8, 0, 0, 73, 8, + 2, 0, 69, 1, 2, 0, 43, 0, 4, 0, 74, 8, 39, 1, 4, 0, 0, 0, 75, 8, 0, 0, 76, 8, 4, 0, 17, 0, 7, 0,209, 2, + 40, 1, 3, 0, 32, 0, 77, 8, 0, 0, 78, 8, 0, 0, 79, 8, 41, 1, 18, 0, 41, 1, 0, 0, 41, 1, 1, 0, 2, 0, 17, 0, + 2, 0, 80, 8, 2, 0, 19, 0, 2, 0, 81, 8, 2, 0, 82, 8, 2, 0, 83, 8, 2, 0, 43, 0, 2, 0, 70, 0, 0, 0, 20, 0, + 9, 0, 2, 0, 42, 1, 84, 8, 32, 0, 45, 0, 2, 0, 89, 5, 2, 0,243, 7, 2, 0, 85, 8, 2, 0, 37, 0, 43, 1, 11, 0, + 0, 0, 20, 0, 0, 0, 17, 0, 0, 0, 86, 8, 2, 0, 19, 0, 2, 0,205, 2, 2, 0, 87, 8, 4, 0, 88, 8, 4, 0, 89, 8, + 4, 0, 90, 8, 4, 0, 91, 8, 4, 0, 92, 8, 44, 1, 1, 0, 0, 0, 93, 8, 45, 1, 4, 0, 42, 0,104, 6, 0, 0, 94, 8, + 4, 0, 69, 1, 4, 0, 19, 0, 42, 1, 18, 0, 42, 1, 0, 0, 42, 1, 1, 0, 42, 1, 95, 8, 2, 0, 17, 0, 2, 0, 19, 0, + 2, 0, 96, 8, 2, 0, 83, 8, 2, 0, 80, 8, 2, 0, 97, 8, 2, 0, 70, 0, 2, 0,238, 1, 0, 0, 20, 0, 9, 0, 2, 0, + 46, 1, 84, 8, 41, 1, 98, 8, 2, 0, 15, 0, 2, 0, 99, 8, 4, 0,100, 8, 47, 1, 3, 0, 4, 0,219, 2, 4, 0, 37, 0, + 32, 0, 45, 0, 48, 1, 12, 0,160, 0,101, 8, 2, 0, 17, 0, 2, 0, 19, 0, 4, 0, 28, 8, 4, 0, 89, 0, 0, 0, 20, 0, + 0, 0,102, 8, 2, 0,103, 8, 2, 0,104, 8, 2, 0,105, 8, 2, 0,106, 8, 7, 0,107, 8, 49, 1, 13, 0, 2, 0, 19, 0, + 2, 0,108, 8, 4, 0, 28, 8, 4, 0, 89, 0, 2, 0,109, 8, 7, 0,242, 3, 7, 0,110, 8, 14, 1,241, 7, 50, 1,111, 8, + 2, 0, 17, 0, 2, 0,112, 8, 2, 0,113, 8, 2, 0,114, 8, 51, 1, 11, 0, 4, 0,219, 2, 2, 0, 17, 0, 2, 0, 19, 0, + 32, 0, 45, 0, 80, 0,115, 8, 0, 0, 20, 0, 7, 0,116, 8, 7, 0,117, 8, 7, 0,128, 3, 2, 0,118, 8, 2, 0,119, 8, + 52, 1, 5, 0, 2, 0, 17, 0, 2, 0, 19, 0, 4, 0, 37, 0, 46, 0,134, 0, 32, 0,188, 5, 53, 1, 5, 0, 4, 0, 19, 0, + 4, 0, 17, 0, 0, 0, 20, 0, 0, 0, 66, 8, 32, 0, 45, 0, 54, 1, 13, 0, 2, 0, 19, 0, 2, 0, 17, 0, 2, 0, 80, 8, + 2, 0,129, 3, 7, 0,120, 8, 7, 0,121, 8, 7, 0, 64, 1, 7, 0, 65, 1, 7, 0,100, 3, 7, 0,103, 3, 7, 0,122, 8, + 7, 0,123, 8, 32, 0,124, 8, 55, 1, 10, 0, 2, 0, 19, 0, 2, 0, 17, 0, 4, 0, 28, 8, 4, 0, 89, 0, 0, 0, 20, 0, + 0, 0,102, 8, 2, 0, 43, 0, 2, 0, 64, 0, 2, 0,125, 8, 2, 0,126, 8, 56, 1, 8, 0, 32, 0, 45, 0, 7, 0,240, 2, + 7, 0,127, 8, 7, 0,128, 8, 7, 0,235, 2, 2, 0, 19, 0, 2, 0,205, 2, 7, 0,129, 8, 57, 1, 12, 0, 2, 0, 17, 0, + 2, 0, 69, 1, 2, 0, 19, 0, 2, 0,243, 2, 2, 0,219, 2, 2, 0,130, 8, 4, 0, 37, 0, 7, 0,131, 8, 7, 0,132, 8, + 7, 0,133, 8, 7, 0,134, 8, 0, 0,135, 8, 58, 1, 9, 0, 2, 0, 19, 0, 2, 0, 17, 0, 4, 0, 28, 8, 4, 0, 89, 0, + 0, 0, 20, 0, 2, 0,136, 1, 2, 0, 64, 0, 2, 0,125, 8, 2, 0,126, 8, 59, 1, 7, 0, 4, 0,193, 2, 4, 0,136, 8, + 4, 0,137, 8, 4, 0,138, 8, 7, 0,139, 8, 7, 0,140, 8, 0, 0, 72, 8, 60, 1, 7, 0, 0, 0,141, 8, 32, 0,142, 8, + 0, 0, 78, 8, 2, 0,143, 8, 2, 0, 43, 0, 4, 0, 70, 0, 0, 0, 79, 8, 61, 1, 6, 0, 2, 0, 19, 0, 2, 0, 17, 0, + 4, 0, 28, 8, 4, 0, 89, 0, 0, 0,144, 8, 0, 0,145, 8, 62, 1, 1, 0, 4, 0, 19, 0, 63, 1, 6, 0, 0, 0, 92, 0, + 2, 0, 17, 0, 2, 0, 19, 0, 4, 0,146, 8, 7, 0,147, 8, 42, 0,104, 6, 64, 1, 4, 0, 0, 0, 70, 2, 2, 0, 19, 0, + 4, 0, 17, 0, 32, 0, 45, 0, 65, 1, 2, 0, 4, 0, 17, 0, 4, 0, 25, 6, 66, 1, 6, 0, 0, 0, 75, 8, 0, 0, 76, 8, + 4, 0, 17, 0, 7, 0, 36, 2, 32, 0, 50, 3, 32, 0,148, 8, 46, 1, 10, 0, 46, 1, 0, 0, 46, 1, 1, 0, 46, 1, 95, 8, + 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 80, 8, 2, 0,149, 8, 0, 0, 20, 0, 9, 0, 2, 0, 32, 0, 45, 0, 67, 1, 10, 0, + 7, 0,128, 3, 7, 0,150, 8, 7, 0,151, 8, 7, 0,152, 8, 7, 0,153, 8, 4, 0, 19, 0, 7, 0,130, 8, 7, 0,154, 8, + 7, 0,155, 8, 7, 0, 37, 0, 15, 1, 12, 0, 15, 1, 0, 0, 15, 1, 1, 0, 14, 1,156, 8, 9, 0,223, 0, 4, 0,171, 3, + 4, 0,229, 3, 4, 0,230, 3, 4, 0,157, 8, 4, 0,158, 8, 4, 0,159, 8, 7, 0,242, 3, 7, 0, 37, 0, 50, 1, 8, 0, + 7, 0,160, 8, 7, 0,161, 8, 7, 0,162, 8, 7, 0,163, 8, 7, 0,164, 8, 7, 0,165, 8, 7, 0,166, 8, 7, 0,167, 8, + 14, 1, 15, 0, 27, 0, 31, 0, 0, 0,222, 0, 43, 0,149, 0, 9, 0,223, 0, 43, 0,168, 8, 36, 0, 80, 0, 7, 0,242, 3, + 7, 0,169, 8, 7, 0,110, 8, 7, 0,160, 8, 7, 0,161, 8, 7, 0,170, 8, 4, 0, 90, 0, 4, 0,159, 8, 9, 0,171, 8, + 68, 1, 15, 0,212, 0, 0, 0,212, 0, 1, 0, 12, 0,245, 5, 4, 0,246, 5, 7, 0,247, 5, 0, 1,172, 8,213, 0, 45, 6, + 14, 1,241, 7, 2, 0, 69, 1, 2, 0,108, 8, 2, 0, 89, 2, 2, 0, 90, 2, 2, 0, 19, 0, 2, 0, 97, 6, 4, 0, 70, 0, + 69, 1, 6, 0, 69, 1, 0, 0, 69, 1, 1, 0, 32, 0, 45, 0, 9, 0,173, 8, 4, 0,247, 0, 4, 0, 37, 0, 67, 0, 4, 0, + 27, 0, 31, 0, 12, 0,174, 8, 4, 0,131, 0, 7, 0,175, 8, 70, 1, 26, 0, 70, 1, 0, 0, 70, 1, 1, 0, 26, 0,176, 8, + 70, 1, 38, 0, 12, 0,177, 8, 0, 0, 20, 0, 7, 0,178, 8, 7, 0,179, 8, 7, 0,180, 8, 7, 0,181, 8, 4, 0, 19, 0, + 7, 0,182, 8, 7, 0,183, 8, 7, 0,184, 8, 7, 0, 76, 1, 7, 0, 36, 2, 7, 0,185, 8, 7, 0,191, 2, 7, 0,186, 8, + 7, 0,187, 8, 7, 0,188, 8, 7, 0,189, 8, 7, 0,190, 8, 7, 0,172, 0, 2, 0,131, 0, 2, 0,120, 5, 71, 1, 22, 0, + 27, 0, 31, 0, 39, 0, 75, 0, 12, 0,191, 8, 12, 0,192, 8, 12, 0,193, 8, 9, 0,194, 8, 4, 0, 19, 0, 4, 0,254, 5, + 2, 0,247, 2, 2, 0, 55, 6, 2, 0,131, 0, 2, 0,195, 8, 2, 0,196, 8, 2, 0,197, 8, 2, 0,198, 8, 2, 0,199, 8, + 4, 0,200, 8, 4, 0,201, 8, 4, 0,202, 8, 4, 0,203, 8, 4, 0,204, 8, 4, 0,205, 8, 72, 1, 2, 0, 7, 0,152, 2, + 4, 0, 19, 0, 73, 1, 5, 0, 72, 1,206, 8, 4, 0,191, 2, 4, 0,207, 8, 4, 0,208, 8, 4, 0, 19, 0, 74, 1, 6, 0, + 4, 0, 37, 0, 4, 0, 55, 6, 4, 0,202, 8, 4, 0,203, 8, 4, 0,204, 8, 4, 0,205, 8, 75, 1, 42, 0, 75, 1, 0, 0, + 75, 1, 1, 0, 26, 0,176, 8, 12, 0,155, 3, 0, 0, 20, 0, 2, 0, 19, 0, 2, 0,209, 8, 2, 0,210, 8, 2, 0,211, 8, + 2, 0,114, 3, 2, 0,212, 8, 4, 0, 72, 2, 4, 0,202, 8, 4, 0,203, 8, 70, 1,213, 8, 75, 1, 38, 0, 75, 1,214, 8, + 12, 0,215, 8, 9, 0,216, 8, 9, 0,217, 8, 9, 0,218, 8, 7, 0, 64, 1, 7, 0,172, 0, 7, 0,219, 8, 7, 0, 15, 2, + 7, 0,105, 3, 7, 0,107, 3, 2, 0,137, 3, 2, 0, 37, 0, 7, 0,220, 8, 7, 0,221, 8, 7, 0,110, 3, 7, 0,222, 8, + 7, 0,223, 8, 7, 0,224, 8, 7, 0,225, 8, 7, 0,226, 8, 7, 0,227, 8, 7, 0,228, 8, 7, 0,229, 8, 7, 0, 65, 2, + 32, 0,230, 8,161, 0, 11, 0, 12, 0,231, 8, 2, 0, 19, 0, 2, 0,232, 8, 7, 0,101, 2, 7, 0,233, 8, 7, 0,234, 8, + 12, 0,235, 8, 4, 0,236, 8, 4, 0,237, 8, 9, 0,238, 8, 9, 0,239, 8, 76, 1, 1, 0, 4, 0,237, 8, 77, 1, 12, 0, + 4, 0,237, 8, 7, 0, 92, 8, 2, 0,240, 8, 2, 0,241, 8, 7, 0,242, 8, 7, 0,243, 8, 2, 0,244, 8, 2, 0, 19, 0, + 7, 0,245, 8, 7, 0,246, 8, 7, 0,247, 8, 7, 0,248, 8, 78, 1, 7, 0, 78, 1, 0, 0, 78, 1, 1, 0, 12, 0,249, 8, + 4, 0, 19, 0, 4, 0,250, 8, 0, 0,233, 3,247, 0,251, 8,160, 0, 7, 0, 27, 0, 31, 0, 12, 0,252, 8, 12, 0,231, 8, + 12, 0,253, 8, 12, 0,100, 0, 4, 0, 19, 0, 4, 0,254, 8,217, 0, 4, 0, 27, 0,156, 8, 12, 0,231, 8, 4, 0,255, 8, + 4, 0, 19, 0, 79, 1, 17, 0,212, 0, 0, 0,212, 0, 1, 0, 12, 0,245, 5, 4, 0,246, 5, 7, 0,247, 5, 2, 0,248, 5, +213, 0, 45, 6,160, 0, 90, 3,217, 0, 0, 9, 0, 0, 69, 1, 0, 0, 48, 6, 2, 0, 19, 0, 2, 0, 1, 9, 2, 0, 98, 6, + 2, 0, 97, 6, 2, 0, 2, 9, 7, 0, 3, 9, 80, 1, 8, 0, 80, 1, 0, 0, 80, 1, 1, 0, 78, 1, 4, 9, 36, 0, 80, 0, + 12, 0, 94, 3, 4, 0, 19, 0, 0, 0, 20, 0, 4, 0, 5, 9, 81, 1, 5, 0, 81, 1, 0, 0, 81, 1, 1, 0, 36, 0, 80, 0, + 2, 0, 19, 0, 0, 0, 6, 9, 82, 1, 14, 0, 82, 1, 0, 0, 82, 1, 1, 0, 9, 0, 2, 0, 2, 0, 17, 0, 2, 0, 19, 0, + 0, 0, 7, 9, 0, 0, 8, 9, 0, 0, 6, 9, 7, 0, 9, 9, 7, 0, 10, 9, 4, 0, 37, 0, 36, 0, 80, 0, 7, 0, 11, 9, + 7, 0, 12, 9, 83, 1, 9, 0, 83, 1, 0, 0, 83, 1, 1, 0, 32, 0, 13, 9, 0, 0,250, 2, 7, 0, 14, 9, 2, 0, 15, 9, + 2, 0, 19, 0, 2, 0, 17, 0, 2, 0, 16, 9, 84, 1, 7, 0, 42, 0,104, 6, 26, 0,176, 8, 4, 0, 19, 0, 4, 0, 17, 9, + 12, 0, 18, 9, 32, 0, 13, 9, 0, 0,250, 2, 85, 1, 15, 0, 32, 0, 13, 9, 2, 0, 19, 9, 2, 0, 19, 0, 2, 0, 20, 9, + 2, 0, 21, 9, 0, 0,250, 2, 32, 0, 22, 9, 0, 0, 23, 9, 7, 0, 24, 9, 7, 0, 36, 2, 7, 0, 25, 9, 7, 0, 26, 9, + 2, 0, 17, 0, 2, 0, 69, 1, 7, 0, 76, 1, 86, 1, 6, 0, 32, 0, 13, 9, 7, 0,206, 8, 2, 0, 27, 9, 2, 0, 28, 9, + 2, 0, 19, 0, 2, 0, 29, 9, 87, 1, 6, 0, 32, 0, 13, 9, 4, 0, 30, 9, 4, 0, 31, 9, 4, 0, 90, 0, 4, 0, 37, 0, + 0, 0,250, 2, 88, 1, 4, 0, 32, 0, 13, 9, 4, 0, 19, 0, 4, 0, 30, 9, 0, 0,250, 2, 89, 1, 4, 0, 32, 0, 13, 9, + 4, 0, 19, 0, 4, 0, 30, 9, 0, 0,250, 2, 90, 1, 10, 0, 32, 0, 13, 9, 4, 0, 32, 9, 7, 0,125, 0, 4, 0, 19, 0, + 2, 0,100, 6, 2, 0, 33, 9, 2, 0, 43, 0, 2, 0, 70, 0, 7, 0, 34, 9, 0, 0,250, 2, 91, 1, 4, 0, 32, 0, 13, 9, + 4, 0, 19, 0, 4, 0, 30, 9, 0, 0,250, 2, 92, 1, 10, 0, 32, 0, 13, 9, 2, 0, 17, 0, 2, 0, 36, 4, 4, 0, 88, 0, + 4, 0, 89, 0, 7, 0,127, 8, 7, 0,128, 8, 4, 0, 37, 0,160, 0,101, 8, 0, 0,250, 2, 93, 1, 4, 0, 32, 0, 13, 9, + 4, 0,115, 3, 4, 0, 35, 9, 0, 0,250, 2, 94, 1, 4, 0, 32, 0, 13, 9, 4, 0,115, 3, 4, 0, 37, 0, 0, 0,250, 2, + 95, 1, 5, 0, 32, 0, 13, 9, 7, 0,125, 0, 4, 0, 36, 9, 4, 0,115, 3, 4, 0,116, 3, 96, 1, 6, 0, 32, 0, 13, 9, + 4, 0, 37, 9, 4, 0, 38, 9, 7, 0, 39, 9, 7, 0, 40, 9, 0, 0,250, 2, 97, 1, 16, 0, 32, 0, 13, 9, 32, 0,214, 8, + 4, 0, 17, 0, 7, 0, 41, 9, 7, 0, 42, 9, 7, 0, 43, 9, 7, 0, 44, 9, 7, 0, 45, 9, 7, 0, 46, 9, 7, 0, 47, 9, + 7, 0, 48, 9, 7, 0, 49, 9, 2, 0, 19, 0, 2, 0, 37, 0, 2, 0, 43, 0, 2, 0, 70, 0, 98, 1, 3, 0, 32, 0, 13, 9, + 4, 0, 19, 0, 4, 0, 28, 2, 99, 1, 5, 0, 32, 0, 13, 9, 4, 0, 19, 0, 4, 0, 37, 0, 7, 0, 50, 9, 0, 0,250, 2, +100, 1, 10, 0, 32, 0, 13, 9, 0, 0,250, 2, 2, 0, 51, 9, 2, 0, 52, 9, 0, 0, 53, 9, 0, 0, 54, 9, 7, 0, 55, 9, + 7, 0, 56, 9, 7, 0, 57, 9, 7, 0, 58, 9,101, 1, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0, + 7, 0, 59, 9, 7, 0, 60, 9, 2, 0, 19, 0, 2, 0, 28, 2,102, 1, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, + 7, 0, 12, 0, 7, 0, 59, 9, 7, 0, 60, 9, 2, 0, 19, 0, 2, 0, 28, 2,103, 1, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, + 7, 0, 11, 0, 7, 0, 12, 0, 7, 0, 59, 9, 7, 0, 60, 9, 2, 0, 19, 0, 2, 0, 28, 2,104, 1, 7, 0, 32, 0, 13, 9, + 0, 0,250, 2, 7, 0, 76, 1, 7, 0, 85, 1, 2, 0, 19, 0, 2, 0, 69, 1, 4, 0, 37, 0,105, 1, 5, 0, 32, 0, 50, 3, + 7, 0, 76, 1, 2, 0, 54, 3, 0, 0, 56, 3, 0, 0, 61, 9,106, 1, 10, 0,106, 1, 0, 0,106, 1, 1, 0, 2, 0, 17, 0, + 2, 0, 19, 0, 0, 0, 62, 9, 7, 0, 20, 1, 7, 0, 21, 1, 2, 0,249, 8, 2, 0, 63, 9, 32, 0, 45, 0,107, 1, 22, 0, +107, 1, 0, 0,107, 1, 1, 0, 2, 0, 19, 0, 2, 0, 69, 1, 2, 0, 64, 9, 2, 0, 65, 9, 36, 0, 80, 0,160, 0,101, 8, + 32, 0,164, 0, 7, 0, 88, 0, 7, 0, 89, 0, 7, 0, 66, 9, 7, 0, 67, 9, 7, 0, 68, 9, 7, 0, 69, 9, 7, 0,236, 2, + 7, 0, 70, 9, 7, 0,103, 8, 7, 0, 71, 9, 0, 0, 72, 9, 0, 0, 73, 9, 12, 0, 96, 3,108, 1, 8, 0, 7, 0, 43, 2, + 7, 0,127, 8, 7, 0,128, 8, 9, 0, 2, 0, 2, 0, 74, 9, 2, 0, 75, 9, 2, 0, 76, 9, 2, 0, 77, 9,109, 1, 18, 0, +109, 1, 0, 0,109, 1, 1, 0,109, 1, 78, 9, 0, 0, 20, 0,108, 1, 79, 9, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 80, 9, + 2, 0, 81, 9, 2, 0, 82, 9, 2, 0, 83, 9, 4, 0, 43, 0, 7, 0, 84, 9, 7, 0, 85, 9, 4, 0, 86, 9, 4, 0, 87, 9, +109, 1, 88, 9,110, 1, 89, 9,111, 1, 34, 0,111, 1, 0, 0,111, 1, 1, 0,111, 1, 90, 9, 0, 0, 20, 0, 0, 0, 91, 9, + 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,210, 7, 2, 0,243, 7, 2, 0, 92, 9, 2, 0,133, 0, 2, 0, 81, 9, 2, 0,200, 7, + 12, 0, 96, 8, 12, 0, 93, 9, 27, 0,134, 6, 9, 0, 94, 9, 7, 0, 84, 9, 7, 0, 85, 9, 7, 0, 74, 2, 7, 0, 95, 9, + 2, 0, 96, 9, 2, 0, 97, 9, 7, 0, 98, 9, 7, 0, 99, 9, 2, 0,100, 9, 2, 0,101, 9, 9, 0,102, 9, 24, 0,103, 9, + 24, 0,104, 9, 24, 0,105, 9,112, 1,150, 0,113, 1,106, 9,114, 1,107, 9,110, 1, 8, 0,110, 1, 0, 0,110, 1, 1, 0, +111, 1,108, 9,111, 1,109, 9,109, 1,110, 9,109, 1, 88, 9, 4, 0, 19, 0, 4, 0, 37, 0, 60, 0, 20, 0, 27, 0, 31, 0, + 39, 0, 75, 0, 12, 0,111, 9, 12, 0,112, 9,108, 1,113, 9, 12, 0,114, 9, 4, 0, 17, 0, 4, 0,115, 9, 4, 0,116, 9, + 4, 0,117, 9, 12, 0,118, 9,114, 1,119, 9,109, 1,120, 9,109, 1,121, 9, 9, 0,122, 9, 9, 0,123, 9, 4, 0,124, 9, + 9, 0,125, 9, 9, 0,126, 9, 9, 0,127, 9,115, 1, 6, 0, 4, 0,124, 0, 4, 0,126, 0, 4, 0,200, 7, 0, 0,128, 9, + 0, 0,129, 9, 2, 0, 37, 0,116, 1, 16, 0, 2, 0,154, 7, 2, 0,155, 7, 2, 0,130, 9, 2, 0,151, 8, 2, 0,131, 9, + 2, 0, 68, 0, 7, 0,235, 2, 7, 0,132, 9, 7, 0,133, 9, 2, 0, 91, 1, 0, 0,134, 9, 0, 0,104, 5, 2, 0,135, 9, + 2, 0, 37, 0, 4, 0,136, 9, 4, 0,137, 9,117, 1, 9, 0, 7, 0,138, 9, 7, 0,139, 9, 7, 0,170, 8, 7, 0,109, 0, + 7, 0,140, 9, 7, 0, 61, 6, 2, 0,141, 9, 0, 0,142, 9, 0, 0, 37, 0,118, 1, 4, 0, 7, 0,143, 9, 7, 0,144, 9, + 2, 0,141, 9, 2, 0, 37, 0,119, 1, 3, 0, 7, 0,145, 9, 7, 0,146, 9, 7, 0, 15, 0,120, 1, 7, 0, 0, 0, 5, 2, + 2, 0,232, 4, 2, 0,233, 4, 2, 0,234, 4, 2, 0,180, 4, 4, 0,126, 0, 4, 0, 34, 4,121, 1, 7, 0, 7, 0,147, 9, + 7, 0,148, 9, 7, 0,149, 9, 7, 0, 85, 2, 7, 0,150, 9, 7, 0,151, 9, 7, 0,152, 9,122, 1, 4, 0, 2, 0,153, 9, + 2, 0,154, 9, 2, 0,155, 9, 2, 0,156, 9,123, 1, 2, 0, 7, 0, 5, 0, 7, 0, 6, 0,124, 1, 2, 0, 0, 0,166, 0, + 0, 0,157, 9,125, 1, 1, 0, 0, 0, 20, 0,126, 1, 10, 0, 0, 0,158, 9, 0, 0,159, 9, 0, 0, 54, 6, 0, 0,160, 9, + 2, 0,130, 9, 2, 0,161, 9, 7, 0,162, 9, 7, 0,163, 9, 7, 0,164, 9, 7, 0, 70, 9,127, 1, 2, 0, 9, 0,165, 9, + 9, 0,166, 9,128, 1, 11, 0, 0, 0,234, 4, 0, 0, 17, 0, 0, 0,141, 9, 0, 0,109, 0, 0, 0,167, 9, 0, 0,106, 0, + 0, 0, 70, 2, 7, 0,168, 9, 7, 0,169, 9, 7, 0,170, 9, 7, 0,171, 9,129, 1, 8, 0, 7, 0, 61, 8, 7, 0,125, 0, + 7, 0,104, 5, 7, 0,157, 2, 7, 0,172, 9, 7, 0,236, 0, 7, 0,173, 9, 4, 0, 17, 0,130, 1, 4, 0, 2, 0,174, 9, + 2, 0,175, 9, 2, 0,176, 9, 2, 0, 37, 0,131, 1, 1, 0, 0, 0, 20, 0,132, 1, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, + 2, 0, 19, 0, 2, 0,177, 9,133, 1, 10, 0, 2, 0,222, 3, 2, 0, 19, 0, 7, 0,116, 4, 7, 0,178, 9, 7, 0,179, 9, + 7, 0,180, 9, 7, 0,181, 9,132, 1,182, 9,132, 1,183, 9,132, 1,184, 9, 63, 0, 9, 0, 4, 0, 19, 0, 4, 0, 64, 0, + 24, 0,185, 9, 24, 0,186, 9,133, 1,187, 9, 7, 0,188, 9, 7, 0,189, 9, 7, 0,190, 9, 7, 0,191, 9,134, 1, 4, 0, + 47, 0,229, 2, 7, 0,192, 9, 7, 0,170, 1, 7, 0, 37, 0,190, 0, 17, 0, 27, 0, 31, 0,134, 1,193, 9, 63, 0,182, 9, + 51, 0,134, 1, 2, 0, 19, 0, 2, 0,214, 5, 4, 0,106, 0, 7, 0,194, 9, 7, 0, 82, 2, 4, 0,195, 9, 7, 0,196, 9, + 7, 0,197, 9, 7, 0,198, 9, 7, 0,170, 1, 2, 0,104, 1, 0, 0,199, 9, 0, 0,192, 6,135, 1, 10, 0, 4, 0, 17, 0, + 4, 0,125, 0, 4, 0, 19, 0, 4, 0,177, 3, 4, 0,200, 9, 4, 0,201, 9, 4, 0,202, 9, 0, 0, 92, 0, 0, 0, 20, 0, + 9, 0, 2, 0, 91, 0, 6, 0,135, 1,203, 9, 4, 0,204, 9, 4, 0,205, 9, 4, 0,206, 9, 4, 0, 37, 0, 9, 0,207, 9, +136, 1, 5, 0, 7, 0,152, 2, 7, 0,219, 2, 7, 0, 36, 2, 2, 0,128, 2, 2, 0, 37, 0,137, 1, 5, 0, 7, 0,152, 2, + 7, 0,208, 9, 7, 0,209, 9, 7, 0,210, 9, 7, 0,219, 2,138, 1, 5, 0, 32, 0,211, 9,139, 1, 22, 0, 7, 0,187, 5, + 7, 0,212, 9, 7, 0, 57, 0,140, 1, 7, 0, 4, 0,213, 9, 4, 0,214, 9, 4, 0,215, 9, 7, 0,216, 9, 7, 0,217, 9, + 7, 0,218, 9, 7, 0, 57, 0,141, 1, 8, 0,141, 1, 0, 0,141, 1, 1, 0, 32, 0, 45, 0, 4, 0,255, 0, 2, 0, 19, 0, + 2, 0, 69, 1, 7, 0,219, 2, 7, 0, 69, 8,142, 1, 6, 0,142, 1, 0, 0,142, 1, 1, 0, 32, 0, 45, 0, 2, 0,204, 2, + 2, 0, 19, 0, 2, 0,219, 9,143, 1, 18, 0,137, 1,171, 3,137, 1,220, 9,136, 1,221, 9,137, 1, 53, 8,138, 1,222, 9, + 4, 0, 82, 0, 7, 0,219, 2, 7, 0,246, 2, 7, 0,223, 9, 4, 0,213, 9, 4, 0,224, 9, 7, 0,217, 9, 7, 0,218, 9, + 7, 0,106, 0, 2, 0, 19, 0, 2, 0,225, 9, 2, 0,226, 9, 2, 0,227, 9,144, 1,110, 0, 27, 0, 31, 0, 39, 0, 75, 0, +145, 1,228, 9,169, 0, 56, 4, 4, 0, 19, 0, 2, 0, 17, 0, 2, 0, 51, 9, 2, 0,229, 9, 2, 0,230, 9, 2, 0,137, 3, + 2, 0,231, 9, 2, 0,232, 9, 2, 0,233, 9, 2, 0,234, 9, 2, 0,235, 9, 2, 0,236, 9, 2, 0,237, 9, 2, 0,222, 4, + 2, 0, 97, 5, 2, 0,238, 9, 2, 0,239, 9, 2, 0,240, 9, 2, 0,241, 9, 2, 0,242, 9, 2, 0, 25, 2, 2, 0, 46, 8, + 2, 0, 22, 8, 2, 0,243, 9, 2, 0,244, 9, 2, 0,187, 3, 2, 0,188, 3, 2, 0,245, 9, 2, 0,246, 9, 2, 0,247, 9, + 2, 0,248, 9, 7, 0,249, 9, 7, 0,250, 9, 7, 0,251, 9, 2, 0,252, 9, 2, 0,253, 9, 7, 0,254, 9, 7, 0,255, 9, + 7, 0, 0, 10, 7, 0, 28, 8, 7, 0, 89, 0, 7, 0,246, 2, 7, 0, 34, 8, 7, 0, 1, 10, 7, 0, 2, 10, 7, 0, 3, 10, + 4, 0, 29, 8, 4, 0, 27, 8, 4, 0, 4, 10, 7, 0, 30, 8, 7, 0, 31, 8, 7, 0, 32, 8, 7, 0, 5, 10, 7, 0, 6, 10, + 7, 0, 7, 10, 7, 0, 8, 10, 7, 0, 9, 10, 7, 0, 57, 0, 7, 0, 10, 10, 7, 0, 11, 10, 7, 0, 12, 10, 7, 0, 13, 10, + 7, 0,128, 3, 7, 0,106, 0, 7, 0, 14, 10, 7, 0, 15, 10, 7, 0, 16, 10, 7, 0, 17, 10, 7, 0, 18, 10, 7, 0, 19, 10, + 7, 0, 20, 10, 4, 0, 21, 10, 4, 0, 22, 10, 7, 0, 23, 10, 7, 0, 24, 10, 7, 0, 25, 10, 7, 0, 26, 10, 7, 0, 27, 10, + 7, 0,210, 0, 7, 0, 28, 10, 7, 0,213, 3, 7, 0,211, 3, 7, 0,212, 3, 7, 0, 29, 10, 7, 0, 30, 10, 7, 0, 31, 10, + 7, 0, 32, 10, 7, 0, 33, 10, 7, 0, 34, 10, 7, 0, 35, 10, 7, 0, 36, 10, 7, 0, 37, 10, 7, 0, 38, 10, 7, 0, 39, 10, + 7, 0, 40, 10, 7, 0, 41, 10, 4, 0, 42, 10, 4, 0, 43, 10, 67, 0,160, 3, 12, 0, 44, 10, 67, 0, 45, 10, 32, 0, 46, 10, + 32, 0, 47, 10, 36, 0, 80, 0,164, 0, 61, 1,164, 0, 48, 10,148, 0, 44, 0,148, 0, 0, 0,148, 0, 1, 0,144, 1, 49, 10, +143, 1, 50, 10,140, 1,214, 8,171, 0,238, 3, 9, 0,239, 3,146, 1, 51, 10,146, 1, 52, 10, 12, 0, 53, 10, 12, 0, 54, 10, +133, 0, 55, 10,141, 0, 56, 10,141, 0, 57, 10, 32, 0, 58, 10, 32, 0, 59, 10, 32, 0, 38, 0, 12, 0, 18, 9, 0, 0, 20, 0, + 7, 0,240, 0, 7, 0, 17, 3, 7, 0, 60, 10, 4, 0,193, 2, 4, 0, 57, 0, 4, 0, 19, 0, 4, 0, 29, 8, 4, 0, 61, 10, + 4, 0, 62, 10, 4, 0, 63, 10, 2, 0,247, 0, 2, 0, 64, 10, 2, 0, 65, 10, 2, 0, 66, 10, 0, 0, 67, 10, 2, 0, 68, 10, + 2, 0, 69, 10, 2, 0, 70, 10, 9, 0, 71, 10,137, 0, 55, 4, 12, 0, 4, 3, 12, 0, 72, 10,147, 1, 73, 10,148, 1, 74, 10, + 7, 0, 75, 10,135, 0, 35, 0,149, 1,171, 8, 7, 0, 25, 4, 7, 0, 76, 10, 7, 0, 77, 10, 7, 0,119, 4, 7, 0, 78, 10, + 7, 0,138, 3, 7, 0,128, 3, 7, 0, 79, 10, 7, 0, 84, 2, 7, 0, 80, 10, 7, 0, 81, 10, 7, 0, 82, 10, 7, 0, 83, 10, + 7, 0, 84, 10, 7, 0, 85, 10, 7, 0, 26, 4, 7, 0, 86, 10, 7, 0, 87, 10, 7, 0, 88, 10, 7, 0, 27, 4, 7, 0, 23, 4, + 7, 0, 24, 4, 7, 0, 89, 10, 4, 0, 90, 10, 4, 0, 90, 0, 4, 0, 91, 10, 4, 0, 92, 10, 2, 0, 93, 10, 2, 0, 94, 10, + 2, 0, 95, 10, 2, 0, 96, 10, 2, 0, 97, 10, 2, 0, 37, 0,169, 0, 56, 4,136, 0, 8, 0,149, 1, 98, 10, 7, 0, 99, 10, + 7, 0,100, 10, 7, 0,242, 1, 7, 0,101, 10, 4, 0, 90, 0, 2, 0,102, 10, 2, 0,103, 10,150, 1, 4, 0, 7, 0, 5, 0, + 7, 0, 6, 0, 7, 0, 7, 0, 7, 0,104, 10,151, 1, 6, 0,151, 1, 0, 0,151, 1, 1, 0,150, 1,206, 8, 4, 0,253, 0, + 2, 0,105, 10, 2, 0, 19, 0,152, 1, 5, 0,152, 1, 0, 0,152, 1, 1, 0, 12, 0,106, 10, 4, 0,107, 10, 4, 0, 19, 0, +153, 1, 9, 0,153, 1, 0, 0,153, 1, 1, 0, 12, 0,124, 0,152, 1,108, 10, 4, 0, 19, 0, 2, 0,105, 10, 2, 0,109, 10, + 7, 0, 91, 0, 0, 0,110, 10,162, 0, 6, 0, 27, 0, 31, 0, 12, 0,250, 4, 4, 0, 19, 0, 2, 0,111, 10, 2, 0,112, 10, + 9, 0,113, 10,154, 1, 7, 0,154, 1, 0, 0,154, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, 4, 0, 23, 0, 0, 0,114, 10, + 0, 0,115, 10,155, 1, 5, 0, 12, 0,116, 10, 4, 0,117, 10, 4, 0,118, 10, 4, 0, 19, 0, 4, 0, 37, 0,156, 1, 18, 0, + 27, 0, 31, 0,157, 1,119, 10,157, 1,120, 10, 12, 0,121, 10, 4, 0,122, 10, 2, 0,123, 10, 2, 0, 37, 0, 12, 0,124, 10, + 12, 0,125, 10,155, 1,126, 10, 12, 0,127, 10, 12, 0,128, 10, 12, 0,129, 10,158, 1,130, 10, 4, 0,131, 10, 4, 0, 70, 0, + 12, 0,132, 10,210, 0,133, 10,157, 1, 30, 0,157, 1, 0, 0,157, 1, 1, 0, 9, 0,134, 10, 4, 0,133, 7, 4, 0, 37, 0, +215, 0, 44, 6,215, 0,135, 10, 0, 0,136, 10, 2, 0,137, 10, 2, 0,138, 10, 2, 0,154, 7, 2, 0,155, 7, 2, 0,139, 10, + 2, 0,140, 10, 2, 0,177, 3, 2, 0,160, 6, 2, 0,141, 10, 2, 0,142, 10, 4, 0,238, 1,159, 1,143, 10,160, 1,144, 10, +161, 1,145, 10, 4, 0,146, 10, 4, 0,147, 10, 9, 0,148, 10, 12, 0,125, 10, 12, 0,174, 7, 12, 0,149, 10, 12, 0,150, 10, + 12, 0,151, 10,162, 1, 16, 0,162, 1, 0, 0,162, 1, 1, 0, 0, 0,152, 10, 26, 0, 30, 0, 2, 0,153, 10, 2, 0, 17, 0, + 2, 0, 15, 0, 2, 0,154, 10, 2, 0,155, 10, 2, 0,156, 10, 2, 0,157, 10, 2, 0,158, 10, 2, 0, 19, 0, 2, 0,159, 10, + 2, 0, 70, 2,163, 1,160, 10,164, 1, 10, 0,164, 1, 0, 0,164, 1, 1, 0, 12, 0,161, 10, 0, 0,152, 10, 2, 0,162, 10, + 2, 0,163, 10, 2, 0, 19, 0, 2, 0, 37, 0, 4, 0,164, 10, 9, 0,165, 10,158, 1, 7, 0,158, 1, 0, 0,158, 1, 1, 0, + 0, 0,152, 10, 0, 0,166, 10, 12, 0, 91, 7, 4, 0,167, 10, 4, 0, 19, 0,223, 0, 12, 0,223, 0, 0, 0,223, 0, 1, 0, + 0, 0,152, 10, 26, 0, 30, 0,165, 1,148, 7, 9, 0,168, 10,163, 1,160, 10,155, 1,169, 10, 12, 0,170, 10,223, 0,171, 10, + 2, 0, 19, 0, 2, 0,136, 1,159, 1, 23, 0,159, 1, 0, 0,159, 1, 1, 0, 2, 0, 17, 0, 2, 0, 15, 0, 2, 0, 5, 0, + 2, 0, 6, 0, 2, 0,172, 10, 2, 0,173, 10, 2, 0,174, 10, 2, 0,175, 10, 0, 0,176, 10, 0, 0, 37, 0, 2, 0,154, 10, + 2, 0,155, 10, 2, 0,156, 10, 2, 0,157, 10, 2, 0,158, 10, 2, 0, 43, 0, 0, 0,177, 10, 2, 0,178, 10, 2, 0,179, 10, + 4, 0, 70, 0, 9, 0,168, 10,166, 1, 8, 0,166, 1, 0, 0,166, 1, 1, 0, 9, 0, 2, 0, 9, 0,180, 10, 0, 0,233, 3, + 2, 0, 17, 0, 2, 0, 19, 0, 7, 0,181, 10,167, 1, 5, 0, 7, 0,182, 10, 4, 0,183, 10, 4, 0,184, 10, 4, 0, 69, 1, + 4, 0, 19, 0,168, 1, 6, 0, 7, 0,185, 10, 7, 0,186, 10, 7, 0,187, 10, 7, 0,188, 10, 4, 0, 17, 0, 4, 0, 19, 0, +169, 1, 5, 0, 7, 0,127, 8, 7, 0,128, 8, 7, 0,219, 2, 2, 0, 39, 2, 2, 0, 40, 2,170, 1, 5, 0,169, 1, 2, 0, + 4, 0, 54, 0, 7, 0,189, 10, 7, 0,127, 8, 7, 0,128, 8,171, 1, 4, 0, 2, 0,190, 10, 2, 0,191, 10, 2, 0,192, 10, + 2, 0,193, 10,172, 1, 2, 0, 42, 0,131, 6, 26, 0,176, 8,173, 1, 3, 0, 24, 0,194, 10, 4, 0, 19, 0, 4, 0, 37, 0, +174, 1, 6, 0, 7, 0,106, 0, 7, 0,221, 2, 7, 0,195, 10, 7, 0, 37, 0, 2, 0,246, 0, 2, 0,196, 10,175, 1, 9, 0, +175, 1, 0, 0,175, 1, 1, 0, 27, 0,134, 6, 0, 0,197, 10, 4, 0,198, 10, 4, 0,199, 10, 4, 0, 90, 0, 4, 0, 37, 0, + 0, 0,233, 3,176, 1, 6, 0, 12, 0, 18, 9, 0, 0,200, 10, 7, 0, 61, 0, 7, 0,181, 10, 4, 0, 17, 0, 4, 0, 19, 0, +177, 1, 3, 0, 7, 0,201, 10, 4, 0, 19, 0, 4, 0, 37, 0,178, 1, 15, 0,178, 1, 0, 0,178, 1, 1, 0, 78, 1, 4, 9, +176, 1, 62, 0, 12, 0, 96, 3, 35, 0, 50, 0,177, 1,202, 10, 4, 0, 54, 0, 7, 0, 61, 0, 2, 0, 19, 0, 2, 0, 15, 1, + 4, 0,198, 10, 0, 0,197, 10, 4, 0,203, 10, 7, 0,204, 10,179, 1, 2, 0, 0, 0,205, 10, 0, 0,206, 10,180, 1, 4, 0, +180, 1, 0, 0,180, 1, 1, 0,160, 0, 50, 3, 12, 0,207, 10,181, 1, 24, 0,181, 1, 0, 0,181, 1, 1, 0, 12, 0,208, 10, +160, 0,101, 8,180, 1,209, 10, 12, 0,210, 10, 12, 0, 96, 3, 0, 0,233, 3, 7, 0,181, 10, 7, 0,211, 10, 7, 0, 88, 0, + 7, 0, 89, 0, 7, 0, 66, 9, 7, 0, 67, 9, 7, 0,236, 2, 7, 0, 70, 9, 7, 0,103, 8, 7, 0, 71, 9, 2, 0,212, 10, + 2, 0,213, 10, 2, 0, 43, 0, 2, 0, 17, 0, 4, 0, 19, 0, 4, 0, 70, 0,182, 1, 6, 0,182, 1, 0, 0,182, 1, 1, 0, + 12, 0,208, 10, 4, 0, 19, 0, 4, 0,156, 2, 0, 0,233, 3,183, 1, 10, 0,183, 1, 0, 0,183, 1, 1, 0, 27, 0,134, 6, + 0, 0,214, 10, 4, 0,199, 10, 4, 0,215, 10, 0, 0,197, 10, 4, 0,198, 10, 2, 0, 19, 0, 2, 0,216, 10,184, 1, 7, 0, +184, 1, 0, 0,184, 1, 1, 0, 12, 0,217, 10, 0, 0,233, 3, 2, 0, 19, 0, 2, 0,218, 10, 4, 0,219, 10,185, 1, 5, 0, +185, 1, 0, 0,185, 1, 1, 0, 0, 0,197, 10, 4, 0,198, 10, 7, 0,209, 2, 39, 0, 12, 0,160, 0, 90, 3,160, 0,220, 10, +180, 1,209, 10, 12, 0,221, 10,181, 1,222, 10, 12, 0,223, 10, 12, 0,224, 10, 4, 0, 19, 0, 4, 0,247, 0, 2, 0,225, 10, + 2, 0,226, 10, 7, 0,227, 10,186, 1, 2, 0, 27, 0, 31, 0, 39, 0, 75, 0,187, 1, 5, 0,187, 1, 0, 0,187, 1, 1, 0, + 4, 0, 17, 0, 4, 0, 19, 0, 0, 0, 20, 0,188, 1, 6, 0,187, 1,228, 10, 32, 0, 45, 0, 4, 0,229, 10, 7, 0,230, 10, + 4, 0,231, 10, 4, 0,249, 8,189, 1, 3, 0,187, 1,228, 10, 4, 0,229, 10, 7, 0,232, 10,190, 1, 8, 0,187, 1,228, 10, + 32, 0, 45, 0, 7, 0, 64, 1, 7, 0,233, 10, 7, 0, 17, 3, 7, 0,170, 8, 4, 0,229, 10, 4, 0,234, 10,191, 1, 5, 0, +187, 1,228, 10, 7, 0,235, 10, 7, 0,243, 7, 7, 0,242, 2, 7, 0, 57, 0,192, 1, 3, 0,187, 1,228, 10, 7, 0,170, 8, + 7, 0,236, 10,139, 1, 4, 0, 7, 0,237, 10, 7, 0, 16, 10, 2, 0,238, 10, 2, 0, 69, 1,193, 1, 14, 0,193, 1, 0, 0, +193, 1, 1, 0, 12, 0,239, 10, 12, 0,240, 10, 12, 0,241, 10, 0, 0, 20, 0, 4, 0, 31, 0, 4, 0, 19, 0, 4, 0,242, 10, + 7, 0,243, 10, 4, 0,231, 10, 4, 0,249, 8, 7, 0,242, 3, 7, 0,244, 2,145, 1, 23, 0, 4, 0,229, 10, 4, 0,244, 10, + 7, 0,245, 10, 7, 0, 57, 0, 7, 0,246, 10, 7, 0,240, 2, 7, 0,237, 10, 7, 0,247, 10, 7, 0,221, 2, 7, 0,248, 10, + 7, 0,116, 4, 7, 0,249, 10, 7, 0,250, 10, 7, 0,251, 10, 7, 0,252, 10, 7, 0,253, 10, 7, 0,254, 10, 7, 0,255, 10, + 7, 0, 0, 11, 7, 0, 1, 11, 7, 0, 2, 11, 7, 0, 3, 11, 12, 0, 4, 11,121, 0, 34, 0,120, 0, 5, 11,194, 1, 6, 11, + 67, 0, 7, 11, 67, 0, 45, 10, 67, 0, 8, 11,195, 1, 9, 11, 48, 0,165, 0, 48, 0, 10, 11, 48, 0, 11, 11, 7, 0, 12, 11, + 7, 0, 13, 11, 7, 0, 14, 11, 7, 0, 15, 11, 7, 0, 16, 11, 7, 0, 5, 9, 7, 0, 17, 11, 7, 0,170, 1, 7, 0, 18, 11, + 4, 0, 19, 11, 4, 0, 20, 11, 4, 0, 21, 11, 4, 0, 90, 0, 4, 0, 37, 0, 4, 0, 22, 11, 2, 0, 23, 11, 2, 0, 24, 11, + 4, 0, 25, 11, 7, 0,221, 2, 4, 0, 26, 11, 7, 0, 27, 11, 4, 0, 28, 11,137, 0, 29, 11, 12, 0, 30, 11,169, 0, 56, 4, +122, 0, 11, 0,120, 0, 5, 11,148, 0, 34, 3, 7, 0,137, 1, 7, 0, 5, 9, 7, 0, 31, 11, 7, 0, 32, 11, 2, 0, 33, 11, + 2, 0, 34, 11, 2, 0, 35, 11, 2, 0, 17, 0, 4, 0, 37, 0,123, 0, 13, 0,120, 0, 5, 11,139, 0, 14, 3,141, 0, 16, 3, + 7, 0,206, 8, 7, 0, 36, 11, 7, 0, 37, 11, 7, 0, 66, 1, 7, 0, 38, 11, 4, 0, 27, 9, 4, 0, 12, 3, 2, 0, 17, 0, 2, 0, 37, 0, 4, 0, 70, 0, 69, 78, 68, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; diff --git a/source/blender/editors/gpencil/drawgpencil.c b/source/blender/editors/gpencil/drawgpencil.c index 81ee2378717..6651c7745bb 100644 --- a/source/blender/editors/gpencil/drawgpencil.c +++ b/source/blender/editors/gpencil/drawgpencil.c @@ -37,7 +37,7 @@ #include "IMB_imbuf.h" #include "IMB_imbuf_types.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "DNA_gpencil_types.h" @@ -326,7 +326,7 @@ static void gp_draw_stroke (bGPDspoint *points, int totpoints, short thickness, /* calculate gradient and normal - 'angle'=(ny/nx) */ m1[1]= s1[1] - s0[1]; m1[0]= s1[0] - s0[0]; - Normalize2(m1); + normalize_v2(m1); m2[1]= -m1[0]; m2[0]= m1[1]; @@ -374,7 +374,7 @@ static void gp_draw_stroke (bGPDspoint *points, int totpoints, short thickness, /* calculate gradient of bisector (as average of normals) */ mb[0]= (pm[0] + m2[0]) / 2; mb[1]= (pm[1] + m2[1]) / 2; - Normalize2(mb); + normalize_v2(mb); /* calculate gradient to apply * - as basis, use just pthick * bisector gradient @@ -382,7 +382,7 @@ static void gp_draw_stroke (bGPDspoint *points, int totpoints, short thickness, */ mt[0]= mb[0] * pthick; mt[1]= mb[1] * pthick; - athick= Vec2Length(mt); + athick= len_v2(mt); dfac= pthick - (athick * 2); if ( ((athick * 2) < pthick) && (IS_EQ(athick, pthick)==0) ) { @@ -442,7 +442,7 @@ static void gp_draw_stroke (bGPDspoint *points, int totpoints, short thickness, } /* store stroke's 'natural' normal for next stroke to use */ - Vec2Copyf(pm, m2); + copy_v2_v2(pm, m2); } glEnd(); @@ -744,47 +744,25 @@ void draw_gpencil_2dview (bContext *C, short onlyv2d) /* draw grease-pencil sketches to specified 3d-view assuming that matrices are already set correctly * Note: this gets called twice - first time with only3d=1 to draw 3d-strokes, second time with only3d=0 for screen-aligned strokes */ -void draw_gpencil_3dview (bContext *C, short only3d) +void draw_gpencil_3dview_ext (Scene *scene, ARegion *ar, short only3d) { - ARegion *ar= CTX_wm_region(C); - Scene *scene= CTX_data_scene(C); bGPdata *gpd; int dflag = 0; - + /* check that we have grease-pencil stuff to draw */ - gpd= gpencil_data_get_active(C); // XXX - if (gpd == NULL) return; - + gpd= gpencil_data_get_active_v3d(scene); // XXX + if(gpd == NULL) return; + /* draw it! */ if (only3d) dflag |= (GP_DRAWDATA_ONLY3D|GP_DRAWDATA_NOSTATUS); gp_draw_data(gpd, 0, 0, ar->winx, ar->winy, CFRA, dflag); } -/* draw grease-pencil sketches to opengl render window assuming that matrices are already set correctly */ -// XXX porting note, ogl render will probably be a window with one 3d region -void draw_gpencil_oglrender (bContext *C) +void draw_gpencil_3dview (bContext *C, short only3d) { - ScrArea *sa= CTX_wm_area(C); - View3D *v3d= (View3D *)sa->spacedata.first; ARegion *ar= CTX_wm_region(C); Scene *scene= CTX_data_scene(C); - bGPdata *gpd; - - /* assume gpencil data comes from v3d */ - if (v3d == NULL) return; - gpd= gpencil_data_get_active(C); - if (gpd == NULL) return; - - /* pass 1: draw 3d-strokes ------------ > */ - gp_draw_data(gpd, 0, 0, ar->winx, ar->winy, CFRA, (GP_DRAWDATA_NOSTATUS|GP_DRAWDATA_ONLY3D)); - - /* pass 2: draw 2d-strokes ------------ > */ - /* adjust view matrices */ - wmOrtho2(-0.375f, (float)(ar->winx)-0.375f, -0.375f, (float)(ar->winy)-0.375f); // XXX may not be correct anymore - glLoadIdentity(); - - /* draw it! */ - gp_draw_data(gpd, 0, 0, ar->winx, ar->winy, CFRA, GP_DRAWDATA_NOSTATUS); + draw_gpencil_3dview_ext(scene, ar, only3d); } /* ************************************************** */ diff --git a/source/blender/editors/gpencil/editaction_gpencil.c b/source/blender/editors/gpencil/editaction_gpencil.c index beb4ed06810..88ceba88827 100644 --- a/source/blender/editors/gpencil/editaction_gpencil.c +++ b/source/blender/editors/gpencil/editaction_gpencil.c @@ -33,7 +33,7 @@ #include "MEM_guardedalloc.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "DNA_listBase.h" diff --git a/source/blender/editors/gpencil/gpencil_buttons.c b/source/blender/editors/gpencil/gpencil_buttons.c index b25de4d5f1d..4da5ec02ddc 100644 --- a/source/blender/editors/gpencil/gpencil_buttons.c +++ b/source/blender/editors/gpencil/gpencil_buttons.c @@ -32,7 +32,7 @@ #include "MEM_guardedalloc.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "DNA_gpencil_types.h" diff --git a/source/blender/editors/gpencil/gpencil_edit.c b/source/blender/editors/gpencil/gpencil_edit.c index 8cf1affa8c6..c2b9a1a4bb9 100644 --- a/source/blender/editors/gpencil/gpencil_edit.c +++ b/source/blender/editors/gpencil/gpencil_edit.c @@ -37,7 +37,7 @@ #include "IMB_imbuf.h" #include "IMB_imbuf_types.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "DNA_listBase.h" @@ -45,6 +45,7 @@ #include "DNA_curve_types.h" #include "DNA_gpencil_types.h" #include "DNA_object_types.h" +#include "DNA_node_types.h" #include "DNA_scene_types.h" #include "DNA_screen_types.h" #include "DNA_space_types.h" @@ -113,9 +114,18 @@ bGPdata **gpencil_data_get_pointers (bContext *C, PointerRNA *ptr) case SPACE_NODE: /* Nodes Editor */ { - //SpaceNode *snode= (SpaceNode *)CTX_wm_space_data(C); + SpaceNode *snode= (SpaceNode *)CTX_wm_space_data(C); /* return the GP data for the active node block/node */ + if (snode && snode->nodetree) { + /* for now, as long as there's an active node tree, default to using that in the Nodes Editor */ + if (ptr) RNA_id_pointer_create(&snode->nodetree->id, ptr); + return &snode->nodetree->gpd; + } + else { + /* even when there is no node-tree, don't allow this to flow to scene */ + return NULL; + } } break; @@ -155,6 +165,13 @@ bGPdata *gpencil_data_get_active (bContext *C) return (gpd_ptr) ? *(gpd_ptr) : NULL; } +/* needed for offscreen rendering */ +bGPdata *gpencil_data_get_active_v3d (Scene *scene) +{ + bGPdata *gpd= scene->basact ? scene->basact->object->gpd : NULL; + return gpd ? gpd : scene->gpd; +} + /* ************************************************ */ /* Panel Operators */ @@ -361,7 +378,7 @@ static void gp_strokepoint_convertcoords (bContext *C, bGPDstroke *gps, bGPDspoi if (gps->flag & GP_STROKE_3DSPACE) { /* directly use 3d-coordinates */ - VecCopyf(p3d, &pt->x); + copy_v3_v3(p3d, &pt->x); } else { float *fp= give_cursor(scene, v3d); @@ -386,7 +403,7 @@ static void gp_strokepoint_convertcoords (bContext *C, bGPDstroke *gps, bGPDspoi */ project_short_noclip(ar, fp, mval); window_to_3d(ar, dvec, mval[0]-mx, mval[1]-my); - VecSubf(p3d, fp, dvec); + sub_v3_v3v3(p3d, fp, dvec); } } @@ -417,7 +434,7 @@ static void gp_stroke_to_path (bContext *C, bGPDlayer *gpl, bGPDstroke *gps, Cur /* get coordinates to add at */ gp_strokepoint_convertcoords(C, gps, pt, p3d); - VecCopyf(bp->vec, p3d); + copy_v3_v3(bp->vec, p3d); /* set settings */ bp->f1= SELECT; @@ -453,9 +470,9 @@ static void gp_stroke_to_bezier (bContext *C, bGPDlayer *gpl, bGPDstroke *gps, C gp_strokepoint_convertcoords(C, gps, pt, p3d); /* TODO: maybe in future the handles shouldn't be in same place */ - VecCopyf(bezt->vec[0], p3d); - VecCopyf(bezt->vec[1], p3d); - VecCopyf(bezt->vec[2], p3d); + copy_v3_v3(bezt->vec[0], p3d); + copy_v3_v3(bezt->vec[1], p3d); + copy_v3_v3(bezt->vec[2], p3d); /* set settings */ bezt->h1= bezt->h2= HD_FREE; diff --git a/source/blender/editors/gpencil/gpencil_paint.c b/source/blender/editors/gpencil/gpencil_paint.c index 92ae2400666..4229c66353c 100644 --- a/source/blender/editors/gpencil/gpencil_paint.c +++ b/source/blender/editors/gpencil/gpencil_paint.c @@ -34,7 +34,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BKE_gpencil.h" #include "BKE_context.h" @@ -169,11 +169,11 @@ static void gp_get_3d_reference (tGPsdata *p, float *vec) /* active Object * - use relative distance of 3D-cursor from object center */ - VecSubf(vec, fp, ob->loc); + sub_v3_v3v3(vec, fp, ob->loc); } else { /* use 3D-cursor */ - VecCopyf(vec, fp); + copy_v3_v3(vec, fp); } } @@ -228,7 +228,7 @@ static void gp_stroke_convertcoords (tGPsdata *p, short mval[], float out[]) /* method taken from editview.c - mouse_cursor() */ project_short_noclip(p->ar, rvec, mval); window_to_3d_delta(p->ar, dvec, mval[0]-mx, mval[1]-my); - VecSubf(out, rvec, dvec); + sub_v3_v3v3(out, rvec, dvec); } /* 2d - on 'canvas' (assume that p->v2d is set) */ @@ -808,16 +808,17 @@ static tGPsdata *gp_session_initpaint (bContext *C) #endif } break; -#if 0 // XXX these other spaces will come over time... + case SPACE_NODE: { - SpaceNode *snode= curarea->spacedata.first; + //SpaceNode *snode= curarea->spacedata.first; /* set current area */ p->sa= curarea; p->ar= ar; p->v2d= &ar->v2d; +#if 0 // XXX will this sort of antiquated stuff be restored? /* check that gpencil data is allowed to be drawn */ if ((snode->flag & SNODE_DISPGP)==0) { p->status= GP_STATUS_ERROR; @@ -825,8 +826,10 @@ static tGPsdata *gp_session_initpaint (bContext *C) printf("Error: In active view, Grease Pencil not shown \n"); return; } +#endif } break; +#if 0 // XXX these other spaces will come over time... case SPACE_SEQ: { SpaceSeq *sseq= curarea->spacedata.first; @@ -983,12 +986,13 @@ static void gp_paint_initstroke (tGPsdata *p, short paintmode) p->gpd->sbuffer_sflag |= GP_STROKE_3DSPACE; } break; -#if 0 // XXX other spacetypes to be restored in due course + case SPACE_NODE: { p->gpd->sbuffer_sflag |= GP_STROKE_2DSPACE; } break; +#if 0 // XXX other spacetypes to be restored in due course case SPACE_SEQ: { SpaceSeq *sseq= (SpaceSeq *)p->sa->spacedata.first; @@ -1298,12 +1302,15 @@ static int gpencil_draw_invoke (bContext *C, wmOperator *op, wmEvent *event) tGPsdata *p = NULL; wmWindow *win= CTX_wm_window(C); - //printf("GPencil - Starting Drawing \n"); + if (G.f & G_DEBUG) + printf("GPencil - Starting Drawing \n"); /* try to initialise context data needed while drawing */ if (!gpencil_draw_init(C, op)) { - if (op->customdata) MEM_freeN(op->customdata); - printf("\tGP - no valid data \n"); + if (op->customdata) + MEM_freeN(op->customdata); + if (G.f & G_DEBUG) + printf("\tGP - no valid data \n"); return OPERATOR_CANCELLED; } else diff --git a/source/blender/editors/include/ED_anim_api.h b/source/blender/editors/include/ED_anim_api.h index 316f1b58d33..5c83d685362 100644 --- a/source/blender/editors/include/ED_anim_api.h +++ b/source/blender/editors/include/ED_anim_api.h @@ -140,6 +140,7 @@ typedef enum eAnim_ChannelType { ANIMTYPE_DSCUR, ANIMTYPE_DSSKEY, ANIMTYPE_DSWOR, + ANIMTYPE_DSNTREE, ANIMTYPE_DSPART, ANIMTYPE_DSMBALL, ANIMTYPE_DSARM, @@ -202,6 +203,7 @@ typedef enum eAnimFilter_Flags { #define EXPANDED_SCEC(sce) ((sce->flag & SCE_DS_COLLAPSED)==0) /* 'Sub-Scene' channels (flags stored in Data block) */ #define FILTER_WOR_SCED(wo) ((wo->flag & WO_DS_EXPAND)) +#define FILTER_NTREE_SCED(ntree) ((ntree->flag & NTREE_DS_EXPAND)) /* 'Object' channels */ #define SEL_OBJC(base) ((base->flag & SELECT)) #define EXPANDED_OBJC(ob) ((ob->nlaflag & OB_ADS_COLLAPSED)==0) @@ -424,12 +426,8 @@ void ANIM_uiTemplate_fmodifier_draw(struct uiLayout *layout, struct ID *id, List /* ------------ Animation F-Curves <-> Icons/Names Mapping ------------ */ /* anim_ipo_utils.c */ -/* Get icon for type of setting F-Curve is for */ -// XXX include this in the getname() method via RNA? -int geticon_anim_blocktype(short blocktype); - -/* Get name for channel-list displays for F-Curve */ -void getname_anim_fcurve(char *name, struct ID *id, struct FCurve *fcu); +/* Get icon + name for channel-list displays for F-Curve */ +int getname_anim_fcurve(char *name, struct ID *id, struct FCurve *fcu); /* Automatically determine a color for the nth F-Curve */ void ipo_rainbow(int cur, int tot, float *out); diff --git a/source/blender/editors/include/ED_armature.h b/source/blender/editors/include/ED_armature.h index 4898f70201e..1836729e419 100644 --- a/source/blender/editors/include/ED_armature.h +++ b/source/blender/editors/include/ED_armature.h @@ -42,6 +42,7 @@ struct ViewContext; struct RegionView3D; struct SK_Sketch; struct IDProperty; +struct MeshDeformModifierData; typedef struct EditBone { @@ -112,6 +113,7 @@ struct Bone *get_indexed_bone (struct Object *ob, int index); float ED_rollBoneToVector(EditBone *bone, float new_up_axis[3]); EditBone *ED_armature_bone_get_mirrored(struct ListBase *edbo, EditBone *ebo); // XXX this is needed for populating the context iterators void ED_armature_sync_selection(struct ListBase *edbo); +void ED_armature_validate_active(struct bArmature *arm); void add_primitive_bone(struct Scene *scene, struct View3D *v3d, struct RegionView3D *rv3d); EditBone *addEditBone(struct bArmature *arm, char *name); /* used by COLLADA importer */ @@ -162,6 +164,10 @@ char * BIF_nameBoneTemplate(const struct bContext *C); void BDR_drawSketch(const struct bContext *vc); int BDR_drawSketchNames(struct ViewContext *vc); +/* meshlaplacian.c */ +void harmonic_coordinates_bind(struct Scene *scene, struct MeshDeformModifierData *mmd, + float *vertexcos, int totvert, float cagemat[][4]); + #endif /* ED_ARMATURE_H */ diff --git a/source/blender/editors/include/ED_gpencil.h b/source/blender/editors/include/ED_gpencil.h index ff95f8ce6eb..ef5169465ab 100644 --- a/source/blender/editors/include/ED_gpencil.h +++ b/source/blender/editors/include/ED_gpencil.h @@ -59,6 +59,7 @@ typedef struct tGPspoint { struct bGPdata **gpencil_data_get_pointers(struct bContext *C, struct PointerRNA *ptr); struct bGPdata *gpencil_data_get_active(struct bContext *C); +struct bGPdata *gpencil_data_get_active_v3d(struct Scene *scene); /* for offscreen rendering */ /* ----------- Grease Pencil Operators ----------------- */ @@ -71,7 +72,7 @@ void ED_operatortypes_gpencil(void); void draw_gpencil_2dimage(struct bContext *C, struct ImBuf *ibuf); void draw_gpencil_2dview(struct bContext *C, short onlyv2d); void draw_gpencil_3dview(struct bContext *C, short only3d); -void draw_gpencil_oglrender(struct bContext *C); +void draw_gpencil_3dview_ext(struct Scene *scene, struct ARegion *ar, short only3d); void gpencil_panel_standard(const struct bContext *C, struct Panel *pa); diff --git a/source/blender/editors/include/ED_object.h b/source/blender/editors/include/ED_object.h index 3d445016d98..b2d92869a2f 100644 --- a/source/blender/editors/include/ED_object.h +++ b/source/blender/editors/include/ED_object.h @@ -74,6 +74,7 @@ void ED_object_toggle_modes(struct bContext *C, int mode); #define EM_FREEUNDO 2 #define EM_WAITCURSOR 4 #define EM_DO_UNDO 8 +#define EM_IGNORE_LAYER 16 void ED_object_exit_editmode(struct bContext *C, int flag); void ED_object_enter_editmode(struct bContext *C, int flag); diff --git a/source/blender/editors/include/ED_transform.h b/source/blender/editors/include/ED_transform.h index e07cbff429a..0f17599daae 100644 --- a/source/blender/editors/include/ED_transform.h +++ b/source/blender/editors/include/ED_transform.h @@ -122,6 +122,8 @@ int BIF_menuselectTransformOrientation(void); void BIF_selectTransformOrientation(struct bContext *C, struct TransformOrientation *ts); void BIF_selectTransformOrientationValue(struct bContext *C, int orientation); +void ED_getTransformOrientationMatrix(const struct bContext *C, float orientation_mat[][3], int activeOnly); + struct EnumPropertyItem *BIF_enumTransformOrientation(struct bContext *C); char * BIF_menustringTransformOrientation(const struct bContext *C, char *title); /* the returned value was allocated and needs to be freed after use */ int BIF_countTransformOrientation(const struct bContext *C); diff --git a/source/blender/editors/include/UI_icons.h b/source/blender/editors/include/UI_icons.h index ee1a23f242b..a3dd6426f99 100644 --- a/source/blender/editors/include/UI_icons.h +++ b/source/blender/editors/include/UI_icons.h @@ -54,8 +54,8 @@ DEF_ICON(ICON_BLANK005) DEF_ICON(ICON_GO_LEFT) DEF_ICON(ICON_PLUG) DEF_ICON(ICON_UI) -DEF_ICON(ICON_TEXNODE) -DEF_ICON(ICON_TEXNODE_SEL) +DEF_ICON(ICON_NODE) +DEF_ICON(ICON_NODE_SEL) /* ui */ DEF_ICON(ICON_FULLSCREEN) @@ -157,7 +157,7 @@ DEF_ICON(ICON_ACTION) DEF_ICON(ICON_NLA) DEF_ICON(ICON_SCRIPTWIN) DEF_ICON(ICON_TIME) -DEF_ICON(ICON_NODE) +DEF_ICON(ICON_NODETREE) DEF_ICON(ICON_LOGIC) DEF_ICON(ICON_CONSOLE) DEF_ICON(ICON_PREFERENCES) diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c index fcc41e4f533..51c38ee859f 100644 --- a/source/blender/editors/interface/interface.c +++ b/source/blender/editors/interface/interface.c @@ -38,7 +38,7 @@ #include "DNA_texture_types.h" #include "DNA_userdef_types.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_dynstr.h" @@ -988,7 +988,7 @@ static void ui_do_active_linklines(uiBlock *block, short *mval) v3[0]= line->to->x1; v3[1]= (line->to->y1+line->to->y2)/2.0; - fac= PdistVL2Dfl(v1, v2, v3); + fac= dist_to_line_segment_v2(v1, v2, v3); if(fac < mindist) { mindist= fac; act= line; diff --git a/source/blender/editors/interface/interface_draw.c b/source/blender/editors/interface/interface_draw.c index cded4753f61..a233a84e6c8 100644 --- a/source/blender/editors/interface/interface_draw.c +++ b/source/blender/editors/interface/interface_draw.c @@ -37,7 +37,7 @@ #include "DNA_texture_types.h" #include "DNA_userdef_types.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BKE_colortools.h" #include "BKE_texture.h" @@ -656,6 +656,7 @@ void ui_draw_but_COLORBAND(uiBut *but, uiWidgetColors *wcol, rcti *rect) float x1, y1, sizex, sizey; float dx, v3[2], v1[2], v2[2], v1a[2], v2a[2]; int a; + float pos, colf[4]; coba= (ColorBand *)(but->editcoba? but->editcoba: but->poin); if(coba==NULL) return; @@ -676,7 +677,7 @@ void ui_draw_but_COLORBAND(uiBut *but, uiWidgetColors *wcol, rcti *rect) v1[0]+= dx; } - glShadeModel(GL_SMOOTH); + glShadeModel(GL_FLAT); glEnable(GL_BLEND); cbd= coba->data; @@ -690,17 +691,16 @@ void ui_draw_but_COLORBAND(uiBut *but, uiWidgetColors *wcol, rcti *rect) glColor4fv( &cbd->r ); glVertex2fv(v1); glVertex2fv(v2); - for(a=0; a<coba->tot; a++, cbd++) { + for( a = 1; a < sizex; a++ ) { + pos = ((float)a) / (sizex-1); + do_colorband( coba, pos, colf ); - v1[0]=v2[0]= x1+ cbd->pos*sizex; + v1[0]=v2[0]= x1 + a; - glColor4fv( &cbd->r ); + glColor4fv( colf ); glVertex2fv(v1); glVertex2fv(v2); } - v1[0]=v2[0]= x1+ sizex; - glVertex2fv(v1); glVertex2fv(v2); - glEnd(); glShadeModel(GL_FLAT); glDisable(GL_BLEND); diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index 5cdf3b9dcc8..6adee174400 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -38,7 +38,7 @@ #include "DNA_userdef_types.h" #include "DNA_windowmanager_types.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "PIL_time.h" @@ -2652,7 +2652,7 @@ static int ui_numedit_but_NORMAL(uiBut *but, uiHandleButtonData *data, int mx, i fp[2]= -sqrt( radsq-dx*dx-dy*dy ); } } - Normalize(fp); + normalize_v3(fp); data->draglastx= mx; data->draglasty= my; @@ -4486,14 +4486,14 @@ static int ui_mouse_motion_towards_check(uiBlock *block, uiPopupBlockHandle *men newp[0]= mx; newp[1]= my; - if(Vec2Lenf(oldp, newp) < 4.0f) + if(len_v2v2(oldp, newp) < 4.0f) return menu->dotowards; closer= 0; - closer |= IsectPT2Df(newp, oldp, p1, p2); - closer |= IsectPT2Df(newp, oldp, p2, p3); - closer |= IsectPT2Df(newp, oldp, p3, p4); - closer |= IsectPT2Df(newp, oldp, p4, p1); + closer |= isect_point_tri_v2(newp, oldp, p1, p2); + closer |= isect_point_tri_v2(newp, oldp, p2, p3); + closer |= isect_point_tri_v2(newp, oldp, p3, p4); + closer |= isect_point_tri_v2(newp, oldp, p4, p1); if(!closer) menu->dotowards= 0; @@ -4578,7 +4578,8 @@ int ui_handle_menu_event(bContext *C, wmEvent *event, uiPopupBlockHandle *menu, case WHEELUPMOUSE: case WHEELDOWNMOUSE: /* arrowkeys: only handle for block_loop blocks */ - if(inside || (block->flag & UI_BLOCK_LOOP)) { + if(event->alt || event->shift || event->ctrl || event->oskey); + else if(inside || (block->flag & UI_BLOCK_LOOP)) { if(event->val==KM_PRESS) { but= ui_but_find_activated(ar); if(but) { @@ -4601,9 +4602,10 @@ int ui_handle_menu_event(bContext *C, wmEvent *event, uiPopupBlockHandle *menu, ui_handle_button_activate(C, ar, bt, BUTTON_ACTIVATE); } } + + retval= WM_UI_HANDLER_BREAK; } - retval= WM_UI_HANDLER_BREAK; break; case ONEKEY: case PAD1: @@ -4650,9 +4652,10 @@ int ui_handle_menu_event(bContext *C, wmEvent *event, uiPopupBlockHandle *menu, break; } } + + retval= WM_UI_HANDLER_BREAK; } - retval= WM_UI_HANDLER_BREAK; break; } } diff --git a/source/blender/editors/interface/interface_icons.c b/source/blender/editors/interface/interface_icons.c index ad96796213d..23a0ff7d223 100644 --- a/source/blender/editors/interface/interface_icons.c +++ b/source/blender/editors/interface/interface_icons.c @@ -40,7 +40,7 @@ #include "GPU_extensions.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_storage_types.h" @@ -705,7 +705,7 @@ int UI_icon_get_width(int icon_id) } if (di) - return ICON_DEFAULT_HEIGHT; + return ICON_DEFAULT_WIDTH; return 0; } diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c index 5c7c1b130e4..53ccc253b99 100644 --- a/source/blender/editors/interface/interface_layout.c +++ b/source/blender/editors/interface/interface_layout.c @@ -336,7 +336,7 @@ static void ui_layer_but_cb(bContext *C, void *arg_but, void *arg_index) } /* create buttons for an item with an RNA array */ -static void ui_item_array(uiLayout *layout, uiBlock *block, char *name, int icon, PointerRNA *ptr, PropertyRNA *prop, int len, int x, int y, int w, int h, int expand, int slider) +static void ui_item_array(uiLayout *layout, uiBlock *block, char *name, int icon, PointerRNA *ptr, PropertyRNA *prop, int len, int x, int y, int w, int h, int expand, int slider, int toggle, int icon_only) { uiStyle *style= layout->root->style; uiBut *but; @@ -420,7 +420,10 @@ static void ui_item_array(uiLayout *layout, uiBlock *block, char *name, int icon str[0]= RNA_property_array_item_char(prop, a); if(str[0]) { - if(type == PROP_BOOLEAN) { + if (icon_only) { + str[0] = '\0'; + } + else if(type == PROP_BOOLEAN) { str[1]= '\0'; } else { @@ -429,9 +432,11 @@ static void ui_item_array(uiLayout *layout, uiBlock *block, char *name, int icon } } - but= uiDefAutoButR(block, ptr, prop, a, str, 0, 0, 0, w, UI_UNIT_Y); + but= uiDefAutoButR(block, ptr, prop, a, str, icon, 0, 0, w, UI_UNIT_Y); if(slider && but->type==NUM) but->type= NUMSLI; + if(toggle && but->type==OPTION) + but->type= TOG; } } else if(ELEM(subtype, PROP_COLOR, PROP_RGB) && len == 4) { @@ -909,7 +914,7 @@ void uiItemFullR(uiLayout *layout, char *name, int icon, PointerRNA *ptr, Proper /* array property */ if(index == RNA_NO_INDEX && len > 0) - ui_item_array(layout, block, name, icon, ptr, prop, len, 0, 0, w, h, expand, slider); + ui_item_array(layout, block, name, icon, ptr, prop, len, 0, 0, w, h, expand, slider, toggle, icon_only); /* enum item */ else if(type == PROP_ENUM && index == RNA_ENUM_VALUE) { char *identifier= (char*)RNA_property_identifier(prop); diff --git a/source/blender/editors/interface/interface_panel.c b/source/blender/editors/interface/interface_panel.c index 20cd6ebf971..e73a4fbe977 100644 --- a/source/blender/editors/interface/interface_panel.c +++ b/source/blender/editors/interface/interface_panel.c @@ -37,7 +37,7 @@ #include "PIL_time.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "DNA_screen_types.h" #include "DNA_space_types.h" diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c index e3b7d173961..388b83cff11 100644 --- a/source/blender/editors/interface/interface_regions.c +++ b/source/blender/editors/interface/interface_regions.c @@ -35,7 +35,7 @@ #include "DNA_userdef_types.h" #include "DNA_windowmanager_types.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_dynstr.h" #include "BLI_ghash.h" diff --git a/source/blender/editors/interface/interface_style.c b/source/blender/editors/interface/interface_style.c index 5c058889107..2e8d2a8cb2b 100644 --- a/source/blender/editors/interface/interface_style.c +++ b/source/blender/editors/interface/interface_style.c @@ -35,7 +35,7 @@ #include "DNA_userdef_types.h" #include "DNA_windowmanager_types.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_listbase.h" #include "BLI_rect.h" #include "BLI_string.h" diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c index a35da38ea66..dbf5eb1d0ea 100644 --- a/source/blender/editors/interface/interface_templates.c +++ b/source/blender/editors/interface/interface_templates.c @@ -110,7 +110,7 @@ static void id_search_cb(const bContext *C, void *arg_template, char *str, uiSea } /* ID Search browse menu, open */ -static uiBlock *search_menu(bContext *C, ARegion *ar, void *arg_litem) +static uiBlock *id_search_menu(bContext *C, ARegion *ar, void *arg_litem) { static char search[256]; static TemplateID template; @@ -262,7 +262,7 @@ static void template_ID(bContext *C, uiBlock *block, TemplateID *template, Struc type= idptr.type; if(flag & UI_ID_BROWSE) { - but= uiDefBlockButN(block, search_menu, MEM_dupallocN(template), "", 0, 0, UI_UNIT_X*1.6, UI_UNIT_Y, "Browse ID data"); + but= uiDefBlockButN(block, id_search_menu, MEM_dupallocN(template), "", 0, 0, UI_UNIT_X*1.6, UI_UNIT_Y, "Browse ID data"); if(type) { but->icon= RNA_struct_ui_icon(type); but->flag|= UI_HAS_ICON; @@ -448,6 +448,8 @@ void uiTemplateAnyID(uiLayout *layout, bContext *C, PointerRNA *ptr, char *propn /********************* RNA Path Builder Template ********************/ +/* ---------- */ + /* This is creating/editing RNA-Paths * * - ptr: struct which holds the path property @@ -497,7 +499,7 @@ void uiTemplatePathBuilder(uiLayout *layout, bContext *C, PointerRNA *ptr, char #include "UI_resources.h" #include "ED_util.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_listbase.h" #include "ED_object.h" diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c index 65f1f9a2f70..7e403e965d7 100644 --- a/source/blender/editors/interface/interface_widgets.c +++ b/source/blender/editors/interface/interface_widgets.c @@ -35,7 +35,7 @@ #include "DNA_userdef_types.h" #include "DNA_windowmanager_types.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_listbase.h" #include "BLI_rect.h" @@ -1666,7 +1666,6 @@ static void widget_numbut(uiWidgetColors *wcol, rcti *rect, int state, int round { uiWidgetBase wtb; float rad= 0.5f*(rect->ymax - rect->ymin); - int textoffs; widget_init(&wtb); @@ -1681,15 +1680,8 @@ static void widget_numbut(uiWidgetColors *wcol, rcti *rect, int state, int round widgetbase_draw(&wtb, wcol); /* text space */ - if(!(state & UI_TEXTINPUT)) { - rect->xmin += (rect->ymax-rect->ymin); - rect->xmax -= (rect->ymax-rect->ymin); - } - else { - textoffs= rad; - rect->xmin += textoffs; - rect->xmax -= textoffs; - } + rect->xmin += rad*0.75f; + rect->xmax -= rad*0.75f; } diff --git a/source/blender/editors/mesh/editface.c b/source/blender/editors/mesh/editface.c index 0042ad9483b..5d94fb32438 100644 --- a/source/blender/editors/mesh/editface.c +++ b/source/blender/editors/mesh/editface.c @@ -32,7 +32,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_heap.h" #include "BLI_edgehash.h" #include "BLI_editVert.h" @@ -453,7 +453,7 @@ int minmax_tface(Scene *scene, float *min, float *max) me= get_mesh(ob); if(me==0 || me->mtface==0) return ok; - Mat3CpyMat4(bmat, ob->obmat); + copy_m3_m4(bmat, ob->obmat); mv= me->mvert; mf= me->mface; @@ -463,24 +463,24 @@ int minmax_tface(Scene *scene, float *min, float *max) continue; VECCOPY(vec, (mv+mf->v1)->co); - Mat3MulVecfl(bmat, vec); - VecAddf(vec, vec, ob->obmat[3]); + mul_m3_v3(bmat, vec); + add_v3_v3v3(vec, vec, ob->obmat[3]); DO_MINMAX(vec, min, max); VECCOPY(vec, (mv+mf->v2)->co); - Mat3MulVecfl(bmat, vec); - VecAddf(vec, vec, ob->obmat[3]); + mul_m3_v3(bmat, vec); + add_v3_v3v3(vec, vec, ob->obmat[3]); DO_MINMAX(vec, min, max); VECCOPY(vec, (mv+mf->v3)->co); - Mat3MulVecfl(bmat, vec); - VecAddf(vec, vec, ob->obmat[3]); + mul_m3_v3(bmat, vec); + add_v3_v3v3(vec, vec, ob->obmat[3]); DO_MINMAX(vec, min, max); if (mf->v4) { VECCOPY(vec, (mv+mf->v4)->co); - Mat3MulVecfl(bmat, vec); - VecAddf(vec, vec, ob->obmat[3]); + mul_m3_v3(bmat, vec); + add_v3_v3v3(vec, vec, ob->obmat[3]); DO_MINMAX(vec, min, max); } ok= 1; @@ -500,11 +500,11 @@ static float edgetag_cut_cost(EditMesh *em, int e1, int e2, int vert) EditVert *v2 = EM_get_vert_for_index( (eed2->v1->tmp.l == vert)? eed2->v2->tmp.l: eed2->v1->tmp.l ); float cost, d1[3], d2[3]; - cost = VecLenf(v1->co, v->co); - cost += VecLenf(v->co, v2->co); + cost = len_v3v3(v1->co, v->co); + cost += len_v3v3(v->co, v2->co); - VecSubf(d1, v->co, v1->co); - VecSubf(d2, v2->co, v->co); + sub_v3_v3v3(d1, v->co, v1->co); + sub_v3_v3v3(d2, v2->co, v->co); cost = cost + 0.5f*cost*(2.0f - fabs(d1[0]*d2[0] + d1[1]*d2[1] + d1[2]*d2[2])); diff --git a/source/blender/editors/mesh/editmesh.c b/source/blender/editors/mesh/editmesh.c index 8b9de0f6348..bdb1df3b5c1 100644 --- a/source/blender/editors/mesh/editmesh.c +++ b/source/blender/editors/mesh/editmesh.c @@ -49,7 +49,7 @@ #include "DNA_userdef_types.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_editVert.h" #include "BLI_dynstr.h" #include "BLI_rand.h" @@ -411,12 +411,12 @@ EditFace *addfacelist(EditMesh *em, EditVert *v1, EditVert *v2, EditVert *v3, Ed em->totface++; if(efa->v4) { - CalcNormFloat4(efa->v1->co, efa->v2->co, efa->v3->co, efa->v4->co, efa->n); - CalcCent4f(efa->cent, efa->v1->co, efa->v2->co, efa->v3->co, efa->v4->co); + normal_quad_v3( efa->n,efa->v1->co, efa->v2->co, efa->v3->co, efa->v4->co); + cent_quad_v3(efa->cent, efa->v1->co, efa->v2->co, efa->v3->co, efa->v4->co); } else { - CalcNormFloat(efa->v1->co, efa->v2->co, efa->v3->co, efa->n); - CalcCent3f(efa->cent, efa->v1->co, efa->v2->co, efa->v3->co); + normal_tri_v3( efa->n,efa->v1->co, efa->v2->co, efa->v3->co); + cent_tri_v3(efa->cent, efa->v1->co, efa->v2->co, efa->v3->co); } return efa; @@ -614,13 +614,13 @@ static void edge_normal_compare(EditEdge *eed, EditFace *efa1) inp= efa1->n[0]*efa2->n[0] + efa1->n[1]*efa2->n[1] + efa1->n[2]*efa2->n[2]; if(inp<0.999 && inp >-0.999) eed->f2= 1; - if(efa1->v4) CalcCent4f(cent1, efa1->v1->co, efa1->v2->co, efa1->v3->co, efa1->v4->co); - else CalcCent3f(cent1, efa1->v1->co, efa1->v2->co, efa1->v3->co); - if(efa2->v4) CalcCent4f(cent2, efa2->v1->co, efa2->v2->co, efa2->v3->co, efa2->v4->co); - else CalcCent3f(cent2, efa2->v1->co, efa2->v2->co, efa2->v3->co); + if(efa1->v4) cent_quad_v3(cent1, efa1->v1->co, efa1->v2->co, efa1->v3->co, efa1->v4->co); + else cent_tri_v3(cent1, efa1->v1->co, efa1->v2->co, efa1->v3->co); + if(efa2->v4) cent_quad_v3(cent2, efa2->v1->co, efa2->v2->co, efa2->v3->co, efa2->v4->co); + else cent_tri_v3(cent2, efa2->v1->co, efa2->v2->co, efa2->v3->co); - VecSubf(cent1, cent2, cent1); - Normalize(cent1); + sub_v3_v3v3(cent1, cent2, cent1); + normalize_v3(cent1); inp= cent1[0]*efa1->n[0] + cent1[1]*efa1->n[1] + cent1[2]*efa1->n[2]; if(inp < -0.001 ) eed->f1= 1; @@ -777,6 +777,9 @@ void make_editMesh(Scene *scene, Object *ob) return; } + if(ob->actcol > 0) + em->mat_nr= ob->actcol-1; + /* initialize fastmalloc for editmesh */ init_editmesh_fastmalloc(em, me->totvert, me->totedge, me->totface); @@ -990,8 +993,6 @@ void load_editMesh(Scene *scene, Object *ob) CustomData_add_layer(&me->fdata, CD_MFACE, CD_ASSIGN, mface, me->totface); mesh_update_customdata_pointers(me); - em->mat_nr= ob->actcol-1; - /* the vertices, use ->tmp.l as counter */ eve= em->verts.first; a= 0; @@ -1003,7 +1004,7 @@ void load_editMesh(Scene *scene, Object *ob) /* vertex normal */ VECCOPY(nor, eve->no); - VecMulf(nor, 32767.0); + mul_v3_fl(nor, 32767.0); VECCOPY(mvert->no, nor); /* note: it used to remove me->dvert when it was not in use, cancelled diff --git a/source/blender/editors/mesh/editmesh_add.c b/source/blender/editors/mesh/editmesh_add.c index 85c3558c2ef..fbe72a54e70 100644 --- a/source/blender/editors/mesh/editmesh_add.c +++ b/source/blender/editors/mesh/editmesh_add.c @@ -49,7 +49,7 @@ #include "RNA_access.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_editVert.h" #include "BKE_context.h" @@ -147,40 +147,40 @@ static int dupli_extrude_cursor(bContext *C, wmOperator *op, wmEvent *event) done= 0; for(eed= vc.em->edges.first; eed; eed= eed->next) { if( (eed->v1->f & SELECT)+(eed->v2->f & SELECT) == SELECT ) { - if(eed->v1->f & SELECT) VecSubf(vec, eed->v1->co, eed->v2->co); - else VecSubf(vec, eed->v2->co, eed->v1->co); - VecAddf(nor, nor, vec); + if(eed->v1->f & SELECT) sub_v3_v3v3(vec, eed->v1->co, eed->v2->co); + else sub_v3_v3v3(vec, eed->v2->co, eed->v1->co); + add_v3_v3v3(nor, nor, vec); done= 1; } } - if(done) Normalize(nor); + if(done) normalize_v3(nor); /* center */ - VecAddf(cent, min, max); - VecMulf(cent, 0.5f); + add_v3_v3v3(cent, min, max); + mul_v3_fl(cent, 0.5f); VECCOPY(min, cent); - Mat4MulVecfl(vc.obedit->obmat, min); // view space + mul_m4_v3(vc.obedit->obmat, min); // view space view3d_get_view_aligned_coordinate(&vc, min, event->mval); - Mat4Invert(vc.obedit->imat, vc.obedit->obmat); - Mat4MulVecfl(vc.obedit->imat, min); // back in object space + invert_m4_m4(vc.obedit->imat, vc.obedit->obmat); + mul_m4_v3(vc.obedit->imat, min); // back in object space - VecSubf(min, min, cent); + sub_v3_v3v3(min, min, cent); /* calculate rotation */ - Mat3One(mat); + unit_m3(mat); if(done) { float dot; VECCOPY(vec, min); - Normalize(vec); + normalize_v3(vec); dot= INPR(vec, nor); if( fabs(dot)<0.999) { float cross[3], si, q1[4]; - Crossf(cross, nor, vec); - Normalize(cross); + cross_v3_v3v3(cross, nor, vec); + normalize_v3(cross); dot= 0.5f*saacos(dot); si= (float)sin(dot); q1[0]= (float)cos(dot); @@ -188,7 +188,7 @@ static int dupli_extrude_cursor(bContext *C, wmOperator *op, wmEvent *event) q1[2]= cross[1]*si; q1[3]= cross[2]*si; - QuatToMat3(q1, mat); + quat_to_mat3( mat,q1); } } @@ -207,12 +207,12 @@ static int dupli_extrude_cursor(bContext *C, wmOperator *op, wmEvent *event) eve= addvertlist(vc.em, 0, NULL); - Mat3CpyMat4(mat, vc.obedit->obmat); - Mat3Inv(imat, mat); + copy_m3_m4(mat, vc.obedit->obmat); + invert_m3_m3(imat, mat); VECCOPY(eve->co, min); - Mat3MulVecfl(imat, eve->co); - VecSubf(eve->co, eve->co, vc.obedit->obmat[3]); + mul_m3_v3(imat, eve->co); + sub_v3_v3v3(eve->co, eve->co, vc.obedit->obmat[3]); eve->f= SELECT; } @@ -1011,7 +1011,7 @@ static void make_prim(Object *obedit, int type, float mat[4][4], int tot, int se vec[0]= dia*phi; vec[1]= - dia; vec[2]= 0.0f; - Mat4MulVecfl(mat,vec); + mul_m4_v3(mat,vec); eve= addvertlist(em, vec, NULL); eve->f= 1+2+4; if (a) { @@ -1022,7 +1022,7 @@ static void make_prim(Object *obedit, int type, float mat[4][4], int tot, int se /* extrude and translate */ vec[0]= vec[2]= 0.0; vec[1]= dia*phid; - Mat4Mul3Vecfl(mat, vec); + mul_mat3_m4_v3(mat, vec); for(a=0;a<seg-1;a++) { extrudeflag_vert(obedit, em, 2, nor); // nor unused @@ -1057,7 +1057,7 @@ static void make_prim(Object *obedit, int type, float mat[4][4], int tot, int se q[0]= cos(phi); q[3]= sin(phi); q[1]=q[2]= 0; - QuatToMat3(q, cmat); + quat_to_mat3( cmat,q); for(a=0; a<seg; a++) { extrudeflag_vert(obedit, em, 2, nor); // nor unused @@ -1070,7 +1070,7 @@ static void make_prim(Object *obedit, int type, float mat[4][4], int tot, int se eve= em->verts.first; while(eve) { if(eve->f & SELECT) { - Mat4MulVecfl(mat,eve->co); + mul_m4_v3(mat,eve->co); } eve= eve->next; } @@ -1111,7 +1111,7 @@ static void make_prim(Object *obedit, int type, float mat[4][4], int tot, int se eve= em->verts.first; while(eve) { if(eve->f & 2) { - Mat4MulVecfl(mat,eve->co); + mul_m4_v3(mat,eve->co); } eve= eve->next; } @@ -1150,7 +1150,7 @@ static void make_prim(Object *obedit, int type, float mat[4][4], int tot, int se /* and now do imat */ for(eve= em->verts.first; eve; eve= eve->next) { if(eve->f & SELECT) { - Mat4MulVecfl(mat,eve->co); + mul_m4_v3(mat,eve->co); } } recalc_editnormals(em); @@ -1170,7 +1170,7 @@ static void make_prim(Object *obedit, int type, float mat[4][4], int tot, int se vec[1]= dia*cos(phi); vec[2]= b?depth:-depth; - Mat4MulVecfl(mat, vec); + mul_m4_v3(mat, vec); eve= addvertlist(em, vec, NULL); eve->f= SELECT; if(a==0) { @@ -1187,12 +1187,12 @@ static void make_prim(Object *obedit, int type, float mat[4][4], int tot, int se if(type == PRIM_CONE || (fill && !ELEM(type, PRIM_PLANE, PRIM_CUBE))) { vec[0]= vec[1]= 0.0f; vec[2]= type==PRIM_CONE ? depth : -depth; - Mat4MulVecfl(mat, vec); + mul_m4_v3(mat, vec); vdown= addvertlist(em, vec, NULL); if((ext || type==PRIM_CONE) && fill) { vec[0]= vec[1]= 0.0f; vec[2]= type==PRIM_CONE ? -depth : depth; - Mat4MulVecfl(mat,vec); + mul_m4_v3(mat,vec); vtop= addvertlist(em, vec, NULL); } } else { @@ -1281,25 +1281,25 @@ static float new_primitive_matrix(bContext *C, int view_align, float primmat[][4 RegionView3D *rv3d= ED_view3d_context_rv3d(C); float *curs, mat[3][3], vmat[3][3], cmat[3][3], imat[3][3]; - Mat4One(primmat); + unit_m4(primmat); if(rv3d && view_align) { - Mat3CpyMat4(vmat, rv3d->viewmat); + copy_m3_m4(vmat, rv3d->viewmat); } else - Mat3One(vmat); + unit_m3(vmat); /* inverse transform for view and object */ - Mat3CpyMat4(mat, obedit->obmat); - Mat3MulMat3(cmat, vmat, mat); - Mat3Inv(imat, cmat); - Mat4CpyMat3(primmat, imat); + copy_m3_m4(mat, obedit->obmat); + mul_m3_m3m3(cmat, vmat, mat); + invert_m3_m3(imat, cmat); + copy_m4_m3(primmat, imat); /* center */ curs= give_cursor(scene, v3d); VECCOPY(primmat[3], curs); VECSUB(primmat[3], primmat[3], obedit->obmat[3]); - Mat3Inv(imat, mat); - Mat3MulVecfl(imat, primmat[3]); + invert_m3_m3(imat, mat); + mul_m3_v3(imat, primmat[3]); if(v3d) return v3d->grid; return 1.0f; @@ -1317,9 +1317,8 @@ static void make_prim_ext(bContext *C, int view_align, int enter_editmode, if(obedit==NULL || obedit->type!=OB_MESH) { /* create editmode */ - ED_object_add_type(C, OB_MESH, view_align, FALSE); - ED_object_enter_editmode(C, EM_DO_UNDO); - obedit= CTX_data_edit_object(C); + obedit= ED_object_add_type(C, OB_MESH, view_align, FALSE); + ED_object_enter_editmode(C, EM_DO_UNDO|EM_IGNORE_LAYER); /* rare cases the active layer is messed up */ newob = 1; } else DAG_id_flush_update(&obedit->id, OB_RECALC_DATA); diff --git a/source/blender/editors/mesh/editmesh_lib.c b/source/blender/editors/mesh/editmesh_lib.c index e1b63022dd4..544dd790dc8 100644 --- a/source/blender/editors/mesh/editmesh_lib.c +++ b/source/blender/editors/mesh/editmesh_lib.c @@ -47,7 +47,7 @@ editmesh_lib: generic (no UI, no menus) operations/evaluators for editmesh data #include "DNA_windowmanager_types.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_editVert.h" #include "BKE_customdata.h" @@ -272,14 +272,14 @@ void EM_editselection_center(float *center, EditSelection *ese) { if (ese->type==EDITVERT) { EditVert *eve= ese->data; - VecCopyf(center, eve->co); + copy_v3_v3(center, eve->co); } else if (ese->type==EDITEDGE) { EditEdge *eed= ese->data; - VecAddf(center, eed->v1->co, eed->v2->co); - VecMulf(center, 0.5); + add_v3_v3v3(center, eed->v1->co, eed->v2->co); + mul_v3_fl(center, 0.5); } else if (ese->type==EDITFACE) { EditFace *efa= ese->data; - VecCopyf(center, efa->cent); + copy_v3_v3(center, efa->cent); } } @@ -287,26 +287,26 @@ void EM_editselection_normal(float *normal, EditSelection *ese) { if (ese->type==EDITVERT) { EditVert *eve= ese->data; - VecCopyf(normal, eve->no); + copy_v3_v3(normal, eve->no); } else if (ese->type==EDITEDGE) { EditEdge *eed= ese->data; float plane[3]; /* need a plane to correct the normal */ float vec[3]; /* temp vec storage */ - VecAddf(normal, eed->v1->no, eed->v2->no); - VecSubf(plane, eed->v2->co, eed->v1->co); + add_v3_v3v3(normal, eed->v1->no, eed->v2->no); + sub_v3_v3v3(plane, eed->v2->co, eed->v1->co); /* the 2 vertex normals will be close but not at rightangles to the edge for rotate about edge we want them to be at right angles, so we need to do some extra colculation to correct the vert normals, we need the plane for this */ - Crossf(vec, normal, plane); - Crossf(normal, plane, vec); - Normalize(normal); + cross_v3_v3v3(vec, normal, plane); + cross_v3_v3v3(normal, plane, vec); + normalize_v3(normal); } else if (ese->type==EDITFACE) { EditFace *efa= ese->data; - VecCopyf(normal, efa->n); + copy_v3_v3(normal, efa->n); } } @@ -321,7 +321,7 @@ void EM_editselection_plane(float *plane, EditSelection *ese) if (ese->prev) { /*use previously selected data to make a usefull vertex plane */ EM_editselection_center(vec, ese->prev); - VecSubf(plane, vec, eve->co); + sub_v3_v3v3(plane, vec, eve->co); } else { /* make a fake plane thats at rightangles to the normal we cant make a crossvec from a vec thats the same as the vec @@ -330,7 +330,7 @@ void EM_editselection_plane(float *plane, EditSelection *ese) if (eve->no[0]<0.5) vec[0]=1; else if (eve->no[1]<0.5) vec[1]=1; else vec[2]=1; - Crossf(plane, eve->no, vec); + cross_v3_v3v3(plane, eve->no, vec); } } else if (ese->type==EDITEDGE) { EditEdge *eed= ese->data; @@ -341,41 +341,41 @@ void EM_editselection_plane(float *plane, EditSelection *ese) (running along the edge).. to flip less often. at least its more pradictable */ if (eed->v2->co[1] > eed->v1->co[1]) /*check which to do first */ - VecSubf(plane, eed->v2->co, eed->v1->co); + sub_v3_v3v3(plane, eed->v2->co, eed->v1->co); else - VecSubf(plane, eed->v1->co, eed->v2->co); + sub_v3_v3v3(plane, eed->v1->co, eed->v2->co); } else if (ese->type==EDITFACE) { EditFace *efa= ese->data; float vec[3]; if (efa->v4) { /*if its a quad- set the plane along the 2 longest edges.*/ float vecA[3], vecB[3]; - VecSubf(vecA, efa->v4->co, efa->v3->co); - VecSubf(vecB, efa->v1->co, efa->v2->co); - VecAddf(plane, vecA, vecB); + sub_v3_v3v3(vecA, efa->v4->co, efa->v3->co); + sub_v3_v3v3(vecB, efa->v1->co, efa->v2->co); + add_v3_v3v3(plane, vecA, vecB); - VecSubf(vecA, efa->v1->co, efa->v4->co); - VecSubf(vecB, efa->v2->co, efa->v3->co); - VecAddf(vec, vecA, vecB); + sub_v3_v3v3(vecA, efa->v1->co, efa->v4->co); + sub_v3_v3v3(vecB, efa->v2->co, efa->v3->co); + add_v3_v3v3(vec, vecA, vecB); /*use the biggest edge length*/ if (plane[0]*plane[0]+plane[1]*plane[1]+plane[2]*plane[2] < vec[0]*vec[0]+vec[1]*vec[1]+vec[2]*vec[2]) - VecCopyf(plane, vec); + copy_v3_v3(plane, vec); } else { /*start with v1-2 */ - VecSubf(plane, efa->v1->co, efa->v2->co); + sub_v3_v3v3(plane, efa->v1->co, efa->v2->co); /*test the edge between v2-3, use if longer */ - VecSubf(vec, efa->v2->co, efa->v3->co); + sub_v3_v3v3(vec, efa->v2->co, efa->v3->co); if (plane[0]*plane[0]+plane[1]*plane[1]+plane[2]*plane[2] < vec[0]*vec[0]+vec[1]*vec[1]+vec[2]*vec[2]) - VecCopyf(plane, vec); + copy_v3_v3(plane, vec); /*test the edge between v1-3, use if longer */ - VecSubf(vec, efa->v3->co, efa->v1->co); + sub_v3_v3v3(vec, efa->v3->co, efa->v1->co); if (plane[0]*plane[0]+plane[1]*plane[1]+plane[2]*plane[2] < vec[0]*vec[0]+vec[1]*vec[1]+vec[2]*vec[2]) - VecCopyf(plane, vec); + copy_v3_v3(plane, vec); } } - Normalize(plane); + normalize_v3(plane); } @@ -908,9 +908,9 @@ void EM_free_data_layer(EditMesh *em, CustomData *data, int type) static void add_normal_aligned(float *nor, float *add) { if( INPR(nor, add) < -0.9999f) - VecSubf(nor, nor, add); + sub_v3_v3v3(nor, nor, add); else - VecAddf(nor, nor, add); + add_v3_v3v3(nor, nor, add); } static void set_edge_directions_f2(EditMesh *em, int val) @@ -1097,7 +1097,7 @@ short extrudeflag_edges_indiv(EditMesh *em, short flag, float *nor) } } } - Normalize(nor); + normalize_v3(nor); /* set correct selection */ EM_clear_flag_all(em, SELECT); @@ -1216,20 +1216,20 @@ static short extrudeflag_edge(Object *obedit, EditMesh *em, short flag, float *n float mtx[4][4]; if (mmd->mirror_ob) { float imtx[4][4]; - Mat4Invert(imtx, mmd->mirror_ob->obmat); - Mat4MulMat4(mtx, obedit->obmat, imtx); + invert_m4_m4(imtx, mmd->mirror_ob->obmat); + mul_m4_m4m4(mtx, obedit->obmat, imtx); } for (eed= em->edges.first; eed; eed= eed->next) { if(eed->f2 == 1) { float co1[3], co2[3]; - VecCopyf(co1, eed->v1->co); - VecCopyf(co2, eed->v2->co); + copy_v3_v3(co1, eed->v1->co); + copy_v3_v3(co2, eed->v2->co); if (mmd->mirror_ob) { - VecMat4MulVecfl(co1, mtx, co1); - VecMat4MulVecfl(co2, mtx, co2); + mul_v3_m4v3(co1, mtx, co1); + mul_v3_m4v3(co2, mtx, co2); } if (mmd->flag & MOD_MIR_AXIS_X) @@ -1380,7 +1380,7 @@ static short extrudeflag_edge(Object *obedit, EditMesh *em, short flag, float *n } } - Normalize(nor); // translation normal grab + normalize_v3(nor); // translation normal grab /* step 7: redo selection */ EM_clear_flag_all(em, SELECT); @@ -1503,20 +1503,20 @@ short extrudeflag_vert(Object *obedit, EditMesh *em, short flag, float *nor) float mtx[4][4]; if (mmd->mirror_ob) { float imtx[4][4]; - Mat4Invert(imtx, mmd->mirror_ob->obmat); - Mat4MulMat4(mtx, obedit->obmat, imtx); + invert_m4_m4(imtx, mmd->mirror_ob->obmat); + mul_m4_m4m4(mtx, obedit->obmat, imtx); } for (eed= em->edges.first; eed; eed= eed->next) { if(eed->f2 == 2) { float co1[3], co2[3]; - VecCopyf(co1, eed->v1->co); - VecCopyf(co2, eed->v2->co); + copy_v3_v3(co1, eed->v1->co); + copy_v3_v3(co2, eed->v2->co); if (mmd->mirror_ob) { - VecMat4MulVecfl(co1, mtx, co1); - VecMat4MulVecfl(co2, mtx, co2); + mul_v3_m4v3(co1, mtx, co1); + mul_v3_m4v3(co2, mtx, co2); } if (mmd->flag & MOD_MIR_AXIS_X) @@ -1652,7 +1652,7 @@ short extrudeflag_vert(Object *obedit, EditMesh *em, short flag, float *nor) efa= nextvl; } - Normalize(nor); // for grab + normalize_v3(nor); // for grab /* for all vertices with eve->tmp.v!=0 if eve->f1==1: make edge @@ -1704,7 +1704,7 @@ void rotateflag(EditMesh *em, short flag, float *cent, float rotmat[][3]) eve->co[0]-=cent[0]; eve->co[1]-=cent[1]; eve->co[2]-=cent[2]; - Mat3MulVecfl(rotmat,eve->co); + mul_m3_v3(rotmat,eve->co); eve->co[0]+=cent[0]; eve->co[1]+=cent[1]; eve->co[2]+=cent[2]; @@ -1913,24 +1913,24 @@ void recalc_editnormals(EditMesh *em) for(efa= em->faces.first; efa; efa=efa->next) { if(efa->v4) { - CalcNormFloat4(efa->v1->co, efa->v2->co, efa->v3->co, efa->v4->co, efa->n); - CalcCent4f(efa->cent, efa->v1->co, efa->v2->co, efa->v3->co, efa->v4->co); - VecAddf(efa->v4->no, efa->v4->no, efa->n); + normal_quad_v3( efa->n,efa->v1->co, efa->v2->co, efa->v3->co, efa->v4->co); + cent_quad_v3(efa->cent, efa->v1->co, efa->v2->co, efa->v3->co, efa->v4->co); + add_v3_v3v3(efa->v4->no, efa->v4->no, efa->n); } else { - CalcNormFloat(efa->v1->co, efa->v2->co, efa->v3->co, efa->n); - CalcCent3f(efa->cent, efa->v1->co, efa->v2->co, efa->v3->co); + normal_tri_v3( efa->n,efa->v1->co, efa->v2->co, efa->v3->co); + cent_tri_v3(efa->cent, efa->v1->co, efa->v2->co, efa->v3->co); } - VecAddf(efa->v1->no, efa->v1->no, efa->n); - VecAddf(efa->v2->no, efa->v2->no, efa->n); - VecAddf(efa->v3->no, efa->v3->no, efa->n); + add_v3_v3v3(efa->v1->no, efa->v1->no, efa->n); + add_v3_v3v3(efa->v2->no, efa->v2->no, efa->n); + add_v3_v3v3(efa->v3->no, efa->v3->no, efa->n); } /* following Mesh convention; we use vertex coordinate itself for normal in this case */ for(eve= em->verts.first; eve; eve=eve->next) { - if (Normalize(eve->no)==0.0) { + if (normalize_v3(eve->no)==0.0) { VECCOPY(eve->no, eve->co); - Normalize(eve->no); + normalize_v3(eve->no); } } } @@ -1996,8 +1996,8 @@ int convex(float *v1, float *v2, float *v3, float *v4) float nor[3], nor1[3], nor2[3], vec[4][2]; /* define projection, do both trias apart, quad is undefined! */ - CalcNormFloat(v1, v2, v3, nor1); - CalcNormFloat(v1, v3, v4, nor2); + normal_tri_v3( nor1,v1, v2, v3); + normal_tri_v3( nor2,v1, v3, v4); nor[0]= ABS(nor1[0]) + ABS(nor2[0]); nor[1]= ABS(nor1[1]) + ABS(nor2[1]); nor[2]= ABS(nor1[2]) + ABS(nor2[2]); @@ -2022,7 +2022,7 @@ int convex(float *v1, float *v2, float *v3, float *v4) } /* linetests, the 2 diagonals have to instersect to be convex */ - if( IsectLL2Df(vec[0], vec[2], vec[1], vec[3]) > 0 ) return 1; + if( isect_line_line_v2(vec[0], vec[2], vec[1], vec[3]) > 0 ) return 1; return 0; } @@ -2037,22 +2037,22 @@ int convex(float *v1, float *v2, float *v3, float *v4) float EM_face_area(EditFace *efa) { - if(efa->v4) return AreaQ3Dfl(efa->v1->co, efa->v2->co, efa->v3->co, efa->v4->co); - else return AreaT3Dfl(efa->v1->co, efa->v2->co, efa->v3->co); + if(efa->v4) return area_quad_v3(efa->v1->co, efa->v2->co, efa->v3->co, efa->v4->co); + else return area_tri_v3(efa->v1->co, efa->v2->co, efa->v3->co); } float EM_face_perimeter(EditFace *efa) { if(efa->v4) return - VecLenf(efa->v1->co, efa->v2->co)+ - VecLenf(efa->v2->co, efa->v3->co)+ - VecLenf(efa->v3->co, efa->v4->co)+ - VecLenf(efa->v4->co, efa->v1->co); + len_v3v3(efa->v1->co, efa->v2->co)+ + len_v3v3(efa->v2->co, efa->v3->co)+ + len_v3v3(efa->v3->co, efa->v4->co)+ + len_v3v3(efa->v4->co, efa->v1->co); else return - VecLenf(efa->v1->co, efa->v2->co)+ - VecLenf(efa->v2->co, efa->v3->co)+ - VecLenf(efa->v3->co, efa->v1->co); + len_v3v3(efa->v1->co, efa->v2->co)+ + len_v3v3(efa->v2->co, efa->v3->co)+ + len_v3v3(efa->v3->co, efa->v1->co); } void EM_fgon_flags(EditMesh *em) @@ -2240,7 +2240,7 @@ UvVertMap *EM_make_uv_vert_map(EditMesh *em, int selected, int do_face_idx_array tf = CustomData_em_get(&em->fdata, efa->data, CD_MTFACE); uv2 = tf->uv[iterv->tfindex]; - Vec2Subf(uvdiff, uv2, uv); + sub_v2_v2v2(uvdiff, uv2, uv); if(fabs(uv[0]-uv2[0]) < limit[0] && fabs(uv[1]-uv2[1]) < limit[1]) { if(lastv) lastv->next= next; diff --git a/source/blender/editors/mesh/editmesh_loop.c b/source/blender/editors/mesh/editmesh_loop.c index 3dc9c81a213..fd665f07767 100644 --- a/source/blender/editors/mesh/editmesh_loop.c +++ b/source/blender/editors/mesh/editmesh_loop.c @@ -49,7 +49,7 @@ editmesh_loop: tools with own drawing subloops, select, knife, subdiv #include "DNA_windowmanager_types.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_editVert.h" #include "BLI_ghash.h" @@ -672,7 +672,7 @@ static int knife_cut_exec(bContext *C, wmOperator *op) scr = MEM_mallocN(sizeof(float)*2, "Vertex Screen Coordinates"); VECCOPY(co, eve->co); co[3]= 1.0; - Mat4MulVec4fl(obedit->obmat, co); + mul_m4_v4(obedit->obmat, co); project_float(ar, co, scr); BLI_ghash_insert(gh, eve, scr); eve->f1 = 0; /*store vertex intersection flag here*/ diff --git a/source/blender/editors/mesh/editmesh_mods.c b/source/blender/editors/mesh/editmesh_mods.c index 737f658d46f..93bfdb37581 100644 --- a/source/blender/editors/mesh/editmesh_mods.c +++ b/source/blender/editors/mesh/editmesh_mods.c @@ -53,7 +53,7 @@ editmesh_mods.c, UI level access, no geometry changes #include "DNA_view3d_types.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_editVert.h" #include "BLI_rand.h" @@ -488,7 +488,7 @@ static void findnearestedge__doClosest(void *userData, EditEdge *eed, int x0, in v2[0] = x1; v2[1] = y1; - distance= PdistVL2Dfl(data->mval, v1, v2); + distance= dist_to_line_segment_v2(data->mval, v1, v2); if(eed->f & SELECT) distance+=5; if(distance < data->dist) { @@ -499,7 +499,7 @@ static void findnearestedge__doClosest(void *userData, EditEdge *eed, int x0, in vec[0]= eed->v1->co[0] + labda*(eed->v2->co[0] - eed->v1->co[0]); vec[1]= eed->v1->co[1] + labda*(eed->v2->co[1] - eed->v1->co[1]); vec[2]= eed->v1->co[2] + labda*(eed->v2->co[2] - eed->v1->co[2]); - Mat4MulVecfl(data->vc.obedit->obmat, vec); + mul_m4_v3(data->vc.obedit->obmat, vec); if(view3d_test_clipping(data->vc.rv3d, vec)==0) { data->dist = distance; @@ -825,7 +825,7 @@ static int similar_face_select__internal(Scene *scene, EditMesh *em, int mode) float angle; for(efa= em->faces.first; efa; efa= efa->next) { if (!(efa->f & SELECT) && !efa->h) { - angle= RAD2DEG(VecAngle2(base_efa->n, efa->n)); + angle= RAD2DEG(angle_v2v2(base_efa->n, efa->n)); if (angle/180.0<=thresh) { EM_select_face(efa, 1); selcount++; @@ -837,12 +837,12 @@ static int similar_face_select__internal(Scene *scene, EditMesh *em, int mode) } } else if (mode==SIMFACE_COPLANAR) { /* same planer */ float angle, base_dot, dot; - base_dot= Inpf(base_efa->cent, base_efa->n); + base_dot= dot_v3v3(base_efa->cent, base_efa->n); for(efa= em->faces.first; efa; efa= efa->next) { if (!(efa->f & SELECT) && !efa->h) { - angle= RAD2DEG(VecAngle2(base_efa->n, efa->n)); + angle= RAD2DEG(angle_v2v2(base_efa->n, efa->n)); if (angle/180.0<=thresh) { - dot=Inpf(efa->cent, base_efa->n); + dot=dot_v3v3(efa->cent, base_efa->n); if (fabs(base_dot-dot) <= thresh) { EM_select_face(efa, 1); selcount++; @@ -916,7 +916,7 @@ static int similar_edge_select__internal(ToolSettings *ts, EditMesh *em, int mod if (mode==SIMEDGE_LENGTH) { /*store length*/ for(eed= em->edges.first; eed; eed= eed->next) { if (!eed->h) /* dont calc data for hidden edges*/ - eed->tmp.fp= VecLenf(eed->v1->co, eed->v2->co); + eed->tmp.fp= len_v3v3(eed->v1->co, eed->v2->co); } } else if (mode==SIMEDGE_FACE) { /*store face users*/ EditFace *efa; @@ -959,7 +959,7 @@ static int similar_edge_select__internal(ToolSettings *ts, EditMesh *em, int mod else if (eed->f2==0) /* first access, assign the face */ eed->tmp.f= efa; else if (eed->f2==1) /* second, we assign the angle*/ - eed->tmp.fp= RAD2DEG(VecAngle2(eed->tmp.f->n, efa->n))/180; + eed->tmp.fp= RAD2DEG(angle_v2v2(eed->tmp.f->n, efa->n))/180; eed->f2++; /* f2==0 no face assigned. f2==1 one face found. f2==2 angle calculated.*/ } j++; @@ -985,11 +985,11 @@ static int similar_edge_select__internal(ToolSettings *ts, EditMesh *em, int mod } } else if (mode==SIMEDGE_DIR) { /* same direction */ float base_dir[3], dir[3], angle; - VecSubf(base_dir, base_eed->v1->co, base_eed->v2->co); + sub_v3_v3v3(base_dir, base_eed->v1->co, base_eed->v2->co); for(eed= em->edges.first; eed; eed= eed->next) { if (!(eed->f & SELECT) && !eed->h) { - VecSubf(dir, eed->v1->co, eed->v2->co); - angle= RAD2DEG(VecAngle2(base_dir, dir)); + sub_v3_v3v3(dir, eed->v1->co, eed->v2->co); + angle= RAD2DEG(angle_v2v2(base_dir, dir)); if (angle>90) /* use the smallest angle between the edges */ angle= fabs(angle-180.0f); @@ -1161,7 +1161,7 @@ static int similar_vert_select_exec(bContext *C, wmOperator *op) float angle; for(eve= em->verts.first; eve; eve= eve->next) { if (!(eve->f & SELECT) && !eve->h) { - angle= RAD2DEG(VecAngle2(base_eve->no, eve->no)); + angle= RAD2DEG(angle_v2v2(base_eve->no, eve->no)); if (angle/180.0<=thresh) { eve->f |= SELECT; selcount++; @@ -1388,34 +1388,34 @@ void EM_mesh_copy_edge(EditMesh *em, short type) break; case 3: /* copy length */ - eed_len_act = VecLenf(eed_act->v1->co, eed_act->v2->co); + eed_len_act = len_v3v3(eed_act->v1->co, eed_act->v2->co); for(eed=em->edges.first; eed; eed=eed->next) { if (eed->f & SELECT && eed != eed_act) { - eed_len = VecLenf(eed->v1->co, eed->v2->co); + eed_len = len_v3v3(eed->v1->co, eed->v2->co); if (eed_len == eed_len_act) continue; /* if this edge is zero length we cont do anything with it*/ if (eed_len == 0.0f) continue; if (eed_len_act == 0.0f) { - VecAddf(vec_mid, eed->v1->co, eed->v2->co); - VecMulf(vec_mid, 0.5); + add_v3_v3v3(vec_mid, eed->v1->co, eed->v2->co); + mul_v3_fl(vec_mid, 0.5); VECCOPY(eed->v1->co, vec_mid); VECCOPY(eed->v2->co, vec_mid); } else { /* copy the edge length */ - VecAddf(vec_mid, eed->v1->co, eed->v2->co); - VecMulf(vec_mid, 0.5); + add_v3_v3v3(vec_mid, eed->v1->co, eed->v2->co); + mul_v3_fl(vec_mid, 0.5); /* SCALE 1 */ - VecSubf(vec, eed->v1->co, vec_mid); - VecMulf(vec, eed_len_act/eed_len); - VecAddf(eed->v1->co, vec, vec_mid); + sub_v3_v3v3(vec, eed->v1->co, vec_mid); + mul_v3_fl(vec, eed_len_act/eed_len); + add_v3_v3v3(eed->v1->co, vec, vec_mid); /* SCALE 2 */ - VecSubf(vec, eed->v2->co, vec_mid); - VecMulf(vec, eed_len_act/eed_len); - VecAddf(eed->v2->co, vec, vec_mid); + sub_v3_v3v3(vec, eed->v2->co, vec_mid); + mul_v3_fl(vec, eed_len_act/eed_len); + add_v3_v3v3(eed->v2->co, vec, vec_mid); } change = 1; } @@ -3873,7 +3873,7 @@ void righthandfaces(EditMesh *em, int select) /* makes faces righthand turning * while(efa) { if(efa->f1) { - CalcCent3f(cent, efa->v1->co, efa->v2->co, efa->v3->co); + cent_tri_v3(cent, efa->v1->co, efa->v2->co, efa->v3->co); cent[0]= cent[0]*cent[0] + cent[1]*cent[1] + cent[2]*cent[2]; if(cent[0]>maxx) { @@ -3882,7 +3882,7 @@ void righthandfaces(EditMesh *em, int select) /* makes faces righthand turning * tria_nr= 0; } if(efa->v4) { - CalcCent3f(cent, efa->v1->co, efa->v3->co, efa->v4->co); + cent_tri_v3(cent, efa->v1->co, efa->v3->co, efa->v4->co); cent[0]= cent[0]*cent[0] + cent[1]*cent[1] + cent[2]*cent[2]; if(cent[0]>maxx) { @@ -3901,11 +3901,11 @@ void righthandfaces(EditMesh *em, int select) /* makes faces righthand turning * /* set first face correct: calc normal */ if(tria_nr==1) { - CalcNormFloat(startvl->v1->co, startvl->v3->co, startvl->v4->co, nor); - CalcCent3f(cent, startvl->v1->co, startvl->v3->co, startvl->v4->co); + normal_tri_v3( nor,startvl->v1->co, startvl->v3->co, startvl->v4->co); + cent_tri_v3(cent, startvl->v1->co, startvl->v3->co, startvl->v4->co); } else { - CalcNormFloat(startvl->v1->co, startvl->v2->co, startvl->v3->co, nor); - CalcCent3f(cent, startvl->v1->co, startvl->v2->co, startvl->v3->co); + normal_tri_v3( nor,startvl->v1->co, startvl->v2->co, startvl->v3->co); + cent_tri_v3(cent, startvl->v1->co, startvl->v2->co, startvl->v3->co); } /* first normal is oriented this way or the other */ if(select) { @@ -4115,9 +4115,9 @@ void faceselect_align_view_to_selected(View3D *v3d, RegionView3D *rv3d, Mesh *me v3= me->mvert[mf->v3].co; if (mf->v4) { float *v4= me->mvert[mf->v4].co; - CalcNormFloat4(v1, v2, v3, v4, fno); + normal_quad_v3( fno,v1, v2, v3, v4); } else { - CalcNormFloat(v1, v2, v3, fno); + normal_tri_v3( fno,v1, v2, v3); } norm[0]+= fno[0]; @@ -4140,18 +4140,18 @@ static void face_getnormal_obspace(Object *obedit, EditFace *efa, float *fno) float vec[4][3]; VECCOPY(vec[0], efa->v1->co); - Mat4Mul3Vecfl(obedit->obmat, vec[0]); + mul_mat3_m4_v3(obedit->obmat, vec[0]); VECCOPY(vec[1], efa->v2->co); - Mat4Mul3Vecfl(obedit->obmat, vec[1]); + mul_mat3_m4_v3(obedit->obmat, vec[1]); VECCOPY(vec[2], efa->v3->co); - Mat4Mul3Vecfl(obedit->obmat, vec[2]); + mul_mat3_m4_v3(obedit->obmat, vec[2]); if(efa->v4) { VECCOPY(vec[3], efa->v4->co); - Mat4Mul3Vecfl(obedit->obmat, vec[3]); + mul_mat3_m4_v3(obedit->obmat, vec[3]); - CalcNormFloat4(vec[0], vec[1], vec[2], vec[3], fno); + normal_quad_v3( fno,vec[0], vec[1], vec[2], vec[3]); } - else CalcNormFloat(vec[0], vec[1], vec[2], fno); + else normal_tri_v3( fno,vec[0], vec[1], vec[2]); } @@ -4187,7 +4187,7 @@ void editmesh_align_view_to_selected(Object *obedit, EditMesh *em, wmOperator *o if (eve->f & SELECT) { if (leve) { float tno[3]; - CalcNormFloat(cent, leve->co, eve->co, tno); + normal_tri_v3( tno,cent, leve->co, eve->co); /* XXX, fixme, should be flipped intp a * consistent direction. -zr @@ -4200,7 +4200,7 @@ void editmesh_align_view_to_selected(Object *obedit, EditMesh *em, wmOperator *o } } - Mat4Mul3Vecfl(obedit->obmat, norm); + mul_mat3_m4_v3(obedit->obmat, norm); view3d_align_axis_to_vector(v3d, rv3d, axis, norm); } else if (nselverts==2) { /* Align view to edge (or 2 verts) */ @@ -4217,7 +4217,7 @@ void editmesh_align_view_to_selected(Object *obedit, EditMesh *em, wmOperator *o leve= eve; } } - Mat4Mul3Vecfl(obedit->obmat, norm); + mul_mat3_m4_v3(obedit->obmat, norm); view3d_align_axis_to_vector(v3d, rv3d, axis, norm); } else if (nselverts==1) { /* Align view to vert normal */ @@ -4231,7 +4231,7 @@ void editmesh_align_view_to_selected(Object *obedit, EditMesh *em, wmOperator *o break; /* we know this is the only selected vert, so no need to keep looking */ } } - Mat4Mul3Vecfl(obedit->obmat, norm); + mul_mat3_m4_v3(obedit->obmat, norm); view3d_align_axis_to_vector(v3d, rv3d, axis, norm); } } @@ -4312,11 +4312,11 @@ static int smooth_vertex(bContext *C, wmOperator *op) if((eed->v1->f & SELECT) && eed->v1->f1<255) { eed->v1->f1++; - VecAddf(eed->v1->tmp.p, eed->v1->tmp.p, fvec); + add_v3_v3v3(eed->v1->tmp.p, eed->v1->tmp.p, fvec); } if((eed->v2->f & SELECT) && eed->v2->f1<255) { eed->v2->f1++; - VecAddf(eed->v2->tmp.p, eed->v2->tmp.p, fvec); + add_v3_v3v3(eed->v2->tmp.p, eed->v2->tmp.p, fvec); } } eed= eed->next; @@ -4435,7 +4435,7 @@ void vertexnoise(Object *obedit, EditMesh *em) vec[1]= 0.2*(b2-BLI_hnoise(tex->noisesize, eve->co[0], eve->co[1]+ofs, eve->co[2])); vec[2]= 0.2*(b2-BLI_hnoise(tex->noisesize, eve->co[0], eve->co[1], eve->co[2]+ofs)); - VecAddf(eve->co, eve->co, vec); + add_v3_v3v3(eve->co, eve->co, vec); } else { float tin, dum; @@ -4466,8 +4466,8 @@ void flipface(EditMesh *em, EditFace *efa) EM_data_interp_from_faces(em, efa, NULL, efa, 0, 2, 1, 3); } - if(efa->v4) CalcNormFloat4(efa->v1->co, efa->v2->co, efa->v3->co, efa->v4->co, efa->n); - else CalcNormFloat(efa->v1->co, efa->v2->co, efa->v3->co, efa->n); + if(efa->v4) normal_quad_v3( efa->n,efa->v1->co, efa->v2->co, efa->v3->co, efa->v4->co); + else normal_tri_v3( efa->n,efa->v1->co, efa->v2->co, efa->v3->co); } diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index eae6f47a122..c59fb01ec99 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -58,7 +58,7 @@ editmesh_tool.c: UI called tools for editmesh, geometry changes here, otherwise #include "RNA_access.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_editVert.h" #include "BLI_rand.h" #include "BLI_ghash.h" @@ -150,7 +150,7 @@ static void convert_to_triface(EditMesh *em, int direction) if(efa->v4) { if(efa->f & SELECT) { /* choose shortest diagonal for split */ - fac= VecLenf(efa->v1->co, efa->v3->co) - VecLenf(efa->v2->co, efa->v4->co); + fac= len_v3v3(efa->v1->co, efa->v3->co) - len_v3v3(efa->v2->co, efa->v4->co); /* this makes sure exact squares get split different in both cases */ if( (direction==0 && fac<FLT_EPSILON) || (direction && fac>0.0f) ) { efan= EM_face_from_faces(em, efa, NULL, 0, 1, 2, -1); @@ -689,8 +689,8 @@ void extrude_mesh(Scene *scene, Object *obedit, EditMesh *em, wmOperator *op) else { // initTransform(TFM_TRANSLATION, CTX_NO_PET|CTX_NO_MIRROR); if(transmode=='n') { - Mat4MulVecfl(obedit->obmat, nor); - VecSubf(nor, nor, obedit->obmat[3]); + mul_m4_v3(obedit->obmat, nor); + sub_v3_v3v3(nor, nor, obedit->obmat[3]); // BIF_setSingleAxisConstraint(nor, "along normal"); } // Transform(); @@ -816,15 +816,15 @@ static int extrude_repeat_mesh(bContext *C, wmOperator *op) dvec[0]= rv3d->persinv[2][0]; dvec[1]= rv3d->persinv[2][1]; dvec[2]= rv3d->persinv[2][2]; - Normalize(dvec); + normalize_v3(dvec); dvec[0]*= offs; dvec[1]*= offs; dvec[2]*= offs; /* base correction */ - Mat3CpyMat4(bmat, obedit->obmat); - Mat3Inv(tmat, bmat); - Mat3MulVecfl(tmat, dvec); + copy_m3_m4(bmat, obedit->obmat); + invert_m3_m3(tmat, bmat); + mul_m3_v3(tmat, dvec); for(a=0; a<steps; a++) { extrudeflag(obedit, em, SELECT, nor); @@ -879,30 +879,30 @@ static int spin_mesh(bContext *C, wmOperator *op, float *dvec, int steps, float RNA_float_get_array(op->ptr, "center", cent); /* imat and center and size */ - Mat3CpyMat4(bmat, obedit->obmat); - Mat3Inv(imat,bmat); + copy_m3_m4(bmat, obedit->obmat); + invert_m3_m3(imat,bmat); cent[0]-= obedit->obmat[3][0]; cent[1]-= obedit->obmat[3][1]; cent[2]-= obedit->obmat[3][2]; - Mat3MulVecfl(imat, cent); + mul_m3_v3(imat, cent); phi= degr*M_PI/360.0; phi/= steps; if(ts->editbutflag & B_CLOCKWISE) phi= -phi; RNA_float_get_array(op->ptr, "axis", n); - Normalize(n); + normalize_v3(n); q[0]= (float)cos(phi); si= (float)sin(phi); q[1]= n[0]*si; q[2]= n[1]*si; q[3]= n[2]*si; - QuatToMat3(q, cmat); + quat_to_mat3( cmat,q); - Mat3MulMat3(tmat,cmat,bmat); - Mat3MulMat3(bmat,imat,tmat); + mul_m3_m3m3(tmat,cmat,bmat); + mul_m3_m3m3(bmat,imat,tmat); if(dupli==0) if(ts->editbutflag & B_KEEPORIG) @@ -917,7 +917,7 @@ static int spin_mesh(bContext *C, wmOperator *op, float *dvec, int steps, float rotateflag(em, SELECT, cent, bmat); if(dvec) { - Mat3MulVecfl(bmat,dvec); + mul_m3_v3(bmat,dvec); translateflag(em, SELECT, dvec); } } @@ -1362,8 +1362,8 @@ static void alter_co(float *co, EditEdge *edge, float smooth, float fractal, int /* we calculate an offset vector vec1[], to be added to *co */ float len, fac, nor[3], nor1[3], nor2[3]; - VecSubf(nor, edge->v1->co, edge->v2->co); - len= 0.5f*Normalize(nor); + sub_v3_v3v3(nor, edge->v1->co, edge->v2->co); + len= 0.5f*normalize_v3(nor); VECCOPY(nor1, edge->v1->no); VECCOPY(nor2, edge->v2->no); @@ -1394,18 +1394,18 @@ static void alter_co(float *co, EditEdge *edge, float smooth, float fractal, int co[2] += vec1[2]; } else if(beauty & B_SPHERE) { /* subdivide sphere */ - Normalize(co); + normalize_v3(co); co[0]*= smooth; co[1]*= smooth; co[2]*= smooth; } if(beauty & B_FRACTAL) { - fac= fractal*VecLenf(edge->v1->co, edge->v2->co); + fac= fractal*len_v3v3(edge->v1->co, edge->v2->co); vec1[0]= fac*(float)(0.5-BLI_drand()); vec1[1]= fac*(float)(0.5-BLI_drand()); vec1[2]= fac*(float)(0.5-BLI_drand()); - VecAddf(co, co, vec1); + add_v3_v3v3(co, co, vec1); } } @@ -1446,7 +1446,7 @@ static EditVert *subdivide_edge_addvert(EditMesh *em, EditEdge *edge, float smoo ev->no[0] = (edge->v2->no[0]-edge->v1->no[0])*percent + edge->v1->no[0]; ev->no[1] = (edge->v2->no[1]-edge->v1->no[1])*percent + edge->v1->no[1]; ev->no[2] = (edge->v2->no[2]-edge->v1->no[2])*percent + edge->v1->no[2]; - Normalize(ev->no); + normalize_v3(ev->no); return ev; } @@ -1475,11 +1475,11 @@ static void facecopy(EditMesh *em, EditFace *source, EditFace *target) target->flag = source->flag; target->h = source->h; - InterpWeightsQ3Dfl(v1, v2, v3, v4, target->v1->co, w[0]); - InterpWeightsQ3Dfl(v1, v2, v3, v4, target->v2->co, w[1]); - InterpWeightsQ3Dfl(v1, v2, v3, v4, target->v3->co, w[2]); + interp_weights_face_v3( w[0],v1, v2, v3, v4, target->v1->co); + interp_weights_face_v3( w[1],v1, v2, v3, v4, target->v2->co); + interp_weights_face_v3( w[2],v1, v2, v3, v4, target->v3->co); if (target->v4) - InterpWeightsQ3Dfl(v1, v2, v3, v4, target->v4->co, w[3]); + interp_weights_face_v3( w[3],v1, v2, v3, v4, target->v4->co); CustomData_em_interp(&em->fdata, &source->data, NULL, (float*)w, 1, target->data); } @@ -2623,15 +2623,15 @@ void esubdivideflag(Object *obedit, EditMesh *em, int flag, float smooth, float VECCOPY(v2mat, ef->v2->co); VECCOPY(v3mat, ef->v3->co); VECCOPY(v4mat, ef->v4->co); - Mat4Mul3Vecfl(obedit->obmat, v1mat); - Mat4Mul3Vecfl(obedit->obmat, v2mat); - Mat4Mul3Vecfl(obedit->obmat, v3mat); - Mat4Mul3Vecfl(obedit->obmat, v4mat); - - length[0] = VecLenf(v1mat, v2mat); - length[1] = VecLenf(v2mat, v3mat); - length[2] = VecLenf(v3mat, v4mat); - length[3] = VecLenf(v4mat, v1mat); + mul_mat3_m4_v3(obedit->obmat, v1mat); + mul_mat3_m4_v3(obedit->obmat, v2mat); + mul_mat3_m4_v3(obedit->obmat, v3mat); + mul_mat3_m4_v3(obedit->obmat, v4mat); + + length[0] = len_v3v3(v1mat, v2mat); + length[1] = len_v3v3(v2mat, v3mat); + length[2] = len_v3v3(v3mat, v4mat); + length[3] = len_v3v3(v4mat, v1mat); sort[0] = ef->e1; sort[1] = ef->e2; sort[2] = ef->e3; @@ -3121,43 +3121,43 @@ static float measure_facepair(EditVert *v1, EditVert *v2, EditVert *v3, EditVert minarea, maxarea, areaA, areaB; /*First Test: Normal difference*/ - CalcNormFloat(v1->co, v2->co, v3->co, noA1); - CalcNormFloat(v1->co, v3->co, v4->co, noA2); + normal_tri_v3( noA1,v1->co, v2->co, v3->co); + normal_tri_v3( noA2,v1->co, v3->co, v4->co); if(noA1[0] == noA2[0] && noA1[1] == noA2[1] && noA1[2] == noA2[2]) normalADiff = 0.0; - else normalADiff = RAD2DEG(VecAngle2(noA1, noA2)); + else normalADiff = RAD2DEG(angle_v2v2(noA1, noA2)); //if(!normalADiff) normalADiff = 179; - CalcNormFloat(v2->co, v3->co, v4->co, noB1); - CalcNormFloat(v4->co, v1->co, v2->co, noB2); + normal_tri_v3( noB1,v2->co, v3->co, v4->co); + normal_tri_v3( noB2,v4->co, v1->co, v2->co); if(noB1[0] == noB2[0] && noB1[1] == noB2[1] && noB1[2] == noB2[2]) normalBDiff = 0.0; - else normalBDiff = RAD2DEG(VecAngle2(noB1, noB2)); + else normalBDiff = RAD2DEG(angle_v2v2(noB1, noB2)); //if(!normalBDiff) normalBDiff = 179; measure += (normalADiff/360) + (normalBDiff/360); if(measure > limit) return measure; /*Second test: Colinearity*/ - VecSubf(edgeVec1, v1->co, v2->co); - VecSubf(edgeVec2, v2->co, v3->co); - VecSubf(edgeVec3, v3->co, v4->co); - VecSubf(edgeVec4, v4->co, v1->co); + sub_v3_v3v3(edgeVec1, v1->co, v2->co); + sub_v3_v3v3(edgeVec2, v2->co, v3->co); + sub_v3_v3v3(edgeVec3, v3->co, v4->co); + sub_v3_v3v3(edgeVec4, v4->co, v1->co); diff = 0.0; diff = ( - fabs(RAD2DEG(VecAngle2(edgeVec1, edgeVec2)) - 90) + - fabs(RAD2DEG(VecAngle2(edgeVec2, edgeVec3)) - 90) + - fabs(RAD2DEG(VecAngle2(edgeVec3, edgeVec4)) - 90) + - fabs(RAD2DEG(VecAngle2(edgeVec4, edgeVec1)) - 90)) / 360; + fabs(RAD2DEG(angle_v2v2(edgeVec1, edgeVec2)) - 90) + + fabs(RAD2DEG(angle_v2v2(edgeVec2, edgeVec3)) - 90) + + fabs(RAD2DEG(angle_v2v2(edgeVec3, edgeVec4)) - 90) + + fabs(RAD2DEG(angle_v2v2(edgeVec4, edgeVec1)) - 90)) / 360; if(!diff) return 0.0; measure += diff; if(measure > limit) return measure; /*Third test: Concavity*/ - areaA = AreaT3Dfl(v1->co, v2->co, v3->co) + AreaT3Dfl(v1->co, v3->co, v4->co); - areaB = AreaT3Dfl(v2->co, v3->co, v4->co) + AreaT3Dfl(v4->co, v1->co, v2->co); + areaA = area_tri_v3(v1->co, v2->co, v3->co) + area_tri_v3(v1->co, v3->co, v4->co); + areaB = area_tri_v3(v2->co, v3->co, v4->co) + area_tri_v3(v4->co, v1->co, v2->co); if(areaA <= areaB) minarea = areaA; else minarea = areaB; @@ -4370,9 +4370,9 @@ useless: } if(prop == 0) { - len = VecLenf(upVert->co,downVert->co)*((perc+1)/2); + len = len_v3v3(upVert->co,downVert->co)*((perc+1)/2); if(flip == 1) { - len = VecLenf(upVert->co,downVert->co) - len; + len = len_v3v3(upVert->co,downVert->co) - len; } } @@ -4387,7 +4387,7 @@ useless: } else { - len = MIN2(perc, VecLenf(upVert->co,downVert->co)); + len = MIN2(perc, len_v3v3(upVert->co,downVert->co)); len = MAX2(len, 0); } } @@ -4405,13 +4405,13 @@ useless: tempsv = BLI_ghash_lookup(vertgh,ev); tempev = editedge_getOtherVert((perc>=0)?tempsv->up:tempsv->down, ev); - VecLerpf(ev->co, tempsv->origvert.co, tempev->co, fabs(perc)); + interp_v3_v3v3(ev->co, tempsv->origvert.co, tempev->co, fabs(perc)); if (0) { // XXX scene->toolsettings->uvcalc_flag & UVCALC_TRANSFORM_CORRECT) { for (uvlay_idx=0; uvlay_idx<uvlay_tot; uvlay_idx++) { suv = BLI_ghash_lookup( uvarray[uvlay_idx], ev ); if (suv && suv->fuv_list && suv->uv_up && suv->uv_down) { - Vec2Lerpf(uv_tmp, suv->origuv, (perc>=0)?suv->uv_up:suv->uv_down, fabs(perc)); + interp_v2_v2v2(uv_tmp, suv->origuv, (perc>=0)?suv->uv_up:suv->uv_down, fabs(perc)); fuv_link = suv->fuv_list; while (fuv_link) { VECCOPY2D(((float *)fuv_link->link), uv_tmp); @@ -4431,17 +4431,17 @@ useless: float newlen; ev = look->link; tempsv = BLI_ghash_lookup(vertgh,ev); - newlen = (len / VecLenf(editedge_getOtherVert(tempsv->up,ev)->co,editedge_getOtherVert(tempsv->down,ev)->co)); + newlen = (len / len_v3v3(editedge_getOtherVert(tempsv->up,ev)->co,editedge_getOtherVert(tempsv->down,ev)->co)); if(newlen > 1.0) {newlen = 1.0;} if(newlen < 0.0) {newlen = 0.0;} if(flip == 0) { - VecLerpf(ev->co, editedge_getOtherVert(tempsv->down,ev)->co, editedge_getOtherVert(tempsv->up,ev)->co, fabs(newlen)); + interp_v3_v3v3(ev->co, editedge_getOtherVert(tempsv->down,ev)->co, editedge_getOtherVert(tempsv->up,ev)->co, fabs(newlen)); if (0) { // XXX scene->toolsettings->uvcalc_flag & UVCALC_TRANSFORM_CORRECT) { /* dont do anything if no UVs */ for (uvlay_idx=0; uvlay_idx<uvlay_tot; uvlay_idx++) { suv = BLI_ghash_lookup( uvarray[uvlay_idx], ev ); if (suv && suv->fuv_list && suv->uv_up && suv->uv_down) { - Vec2Lerpf(uv_tmp, suv->uv_down, suv->uv_up, fabs(newlen)); + interp_v2_v2v2(uv_tmp, suv->uv_down, suv->uv_up, fabs(newlen)); fuv_link = suv->fuv_list; while (fuv_link) { VECCOPY2D(((float *)fuv_link->link), uv_tmp); @@ -4451,14 +4451,14 @@ useless: } } } else{ - VecLerpf(ev->co, editedge_getOtherVert(tempsv->up,ev)->co, editedge_getOtherVert(tempsv->down,ev)->co, fabs(newlen)); + interp_v3_v3v3(ev->co, editedge_getOtherVert(tempsv->up,ev)->co, editedge_getOtherVert(tempsv->down,ev)->co, fabs(newlen)); if (0) { // XXX scene->toolsettings->uvcalc_flag & UVCALC_TRANSFORM_CORRECT) { /* dont do anything if no UVs */ for (uvlay_idx=0; uvlay_idx<uvlay_tot; uvlay_idx++) { suv = BLI_ghash_lookup( uvarray[uvlay_idx], ev ); if (suv && suv->fuv_list && suv->uv_up && suv->uv_down) { - Vec2Lerpf(uv_tmp, suv->uv_up, suv->uv_down, fabs(newlen)); + interp_v2_v2v2(uv_tmp, suv->uv_up, suv->uv_down, fabs(newlen)); fuv_link = suv->fuv_list; while (fuv_link) { VECCOPY2D(((float *)fuv_link->link), uv_tmp); @@ -4768,7 +4768,7 @@ static float mesh_rip_edgedist(ARegion *ar, float mat[][4], float *co1, float *c mvalf[0]= (float)mval[0]; mvalf[1]= (float)mval[1]; - return PdistVL2Dfl(mvalf, vec1, vec2); + return dist_to_line_segment_v2(mvalf, vec1, vec2); } /* helper for below */ @@ -5120,11 +5120,11 @@ static int blend_from_shape_exec(bContext *C, wmOperator *op) VECCOPY(co, data + eve->keyindex*3); if(add) { - VecMulf(co, blend); - VecAddf(eve->co, eve->co, co); + mul_v3_fl(co, blend); + add_v3_v3v3(eve->co, eve->co, co); } else - VecLerpf(eve->co, eve->co, co, blend); + interp_v3_v3v3(eve->co, eve->co, co, blend); blended= 1; } @@ -5737,7 +5737,7 @@ static void em_snap_to_center(EditMesh *em) for (eve=em->verts.first; eve; eve=eve->next) { if (eve->f & SELECT) { - VecAddf(cent, cent, eve->co); + add_v3_v3v3(cent, cent, eve->co); i++; } } @@ -5745,7 +5745,7 @@ static void em_snap_to_center(EditMesh *em) if (!i) return; - VecMulf(cent, 1.0f / (float)i); + mul_v3_fl(cent, 1.0f / (float)i); for (eve=em->verts.first; eve; eve=eve->next) { if (eve->f & SELECT) { @@ -5762,11 +5762,11 @@ static void em_snap_to_cursor(EditMesh *em, bContext *C) EditVert *eve; float co[3], *vco, invmat[4][4]; - Mat4Invert(invmat, ob->obmat); + invert_m4_m4(invmat, ob->obmat); vco = give_cursor(scene, v3d); VECCOPY(co, vco); - Mat4MulVecfl(invmat, co); + mul_m4_v3(invmat, co); for (eve=em->verts.first; eve; eve=eve->next) { if (eve->f & SELECT) { @@ -5987,7 +5987,7 @@ static int select_vertex_path_exec(bContext *C, wmOperator *op) newpe = MEM_mallocN(sizeof(PathEdge), "Path Edge"); newpe->v = ((PathNode*)eed->v2->tmp.p)->u; if(physical){ - newpe->w = VecLenf(eed->v1->co, eed->v2->co); + newpe->w = len_v3v3(eed->v1->co, eed->v2->co); } else newpe->w = 1; newpe->next = 0; @@ -5999,7 +5999,7 @@ static int select_vertex_path_exec(bContext *C, wmOperator *op) newpe = MEM_mallocN(sizeof(PathEdge), "Path Edge"); newpe->v = ((PathNode*)eed->v1->tmp.p)->u; if(physical){ - newpe->w = VecLenf(eed->v1->co, eed->v2->co); + newpe->w = len_v3v3(eed->v1->co, eed->v2->co); } else newpe->w = 1; newpe->next = 0; @@ -6813,20 +6813,20 @@ static void beauty_fill(EditMesh *em) * the area divided by the total edge lengths */ - len1= VecLenf(v1->co, v2->co); - len2= VecLenf(v2->co, v3->co); - len3= VecLenf(v3->co, v4->co); - len4= VecLenf(v4->co, v1->co); - len5= VecLenf(v1->co, v3->co); - len6= VecLenf(v2->co, v4->co); + len1= len_v3v3(v1->co, v2->co); + len2= len_v3v3(v2->co, v3->co); + len3= len_v3v3(v3->co, v4->co); + len4= len_v3v3(v4->co, v1->co); + len5= len_v3v3(v1->co, v3->co); + len6= len_v3v3(v2->co, v4->co); - opp1= AreaT3Dfl(v1->co, v2->co, v3->co); - opp2= AreaT3Dfl(v1->co, v3->co, v4->co); + opp1= area_tri_v3(v1->co, v2->co, v3->co); + opp2= area_tri_v3(v1->co, v3->co, v4->co); fac1= opp1/(len1+len2+len5) + opp2/(len3+len4+len5); - opp1= AreaT3Dfl(v2->co, v3->co, v4->co); - opp2= AreaT3Dfl(v2->co, v4->co, v1->co); + opp1= area_tri_v3(v2->co, v3->co, v4->co); + opp2= area_tri_v3(v2->co, v4->co, v1->co); fac2= opp1/(len2+len3+len6) + opp2/(len4+len1+len6); @@ -7197,3 +7197,78 @@ void MESH_OT_faces_shade_flat(wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } +/* TODO - some way to select on an arbitrary axis */ +static int select_axis_exec(bContext *C, wmOperator *op) +{ + Object *obedit= CTX_data_edit_object(C); + EditMesh *em= BKE_mesh_get_editmesh((Mesh *)obedit->data); + + int axis= RNA_int_get(op->ptr, "axis"); + int mode= RNA_enum_get(op->ptr, "mode"); /* -1==aligned, 0==neg, 1==pos*/ + + EditSelection *ese = em->selected.last; + + + if(ese==NULL) + return OPERATOR_CANCELLED; + + if(ese->type==EDITVERT) { + EditVert *ev; + EditVert *act_vert= (EditVert*)ese->data; + float value= act_vert->co[axis]; + float limit= CTX_data_tool_settings(C)->doublimit; // XXX + + if(mode==0) value -= limit; + else if (mode==1) value += limit; + + for(ev=em->verts.first;ev;ev=ev->next) { + if(!ev->h) { + switch(mode) { + case -1: /* aligned */ + if(fabs(ev->co[axis] - value) < limit) + ev->f |= SELECT; + break; + case 0: /* neg */ + if(ev->co[axis] > value) + ev->f |= SELECT; + break; + case 1: /* pos */ + if(ev->co[axis] < value) + ev->f |= SELECT; + break; + } + } + } + } + + EM_select_flush(em); + WM_event_add_notifier(C, NC_GEOM|ND_DATA, obedit->data); + + return OPERATOR_FINISHED; +} + +void MESH_OT_select_axis(wmOperatorType *ot) +{ + static EnumPropertyItem axis_mode_items[] = { + {0, "POSITIVE", 0, "Positive Axis", ""}, + {1, "NEGATIVE", 0, "Negative Axis", ""}, + {-1, "ALIGNED", 0, "Aligned Axis", ""}, + {0, NULL, 0, NULL, NULL}}; + + /* identifiers */ + ot->name= "Select Axis"; + ot->description= "Select all data in the mesh on a single axis."; + ot->idname= "MESH_OT_select_axis"; + + /* api callbacks */ + ot->exec= select_axis_exec; + ot->poll= ED_operator_editmesh; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + /* properties */ + RNA_def_enum(ot->srna, "mode", axis_mode_items, 0, "Axis Mode", "Axis side to use when selecting"); + RNA_def_int(ot->srna, "axis", 0, 0, 2, "Axis", "Select the axis to compare each vertex on", 0, 2); +} + diff --git a/source/blender/editors/mesh/mesh_data.c b/source/blender/editors/mesh/mesh_data.c index 94a7dbebb9c..eb6927cec65 100644 --- a/source/blender/editors/mesh/mesh_data.c +++ b/source/blender/editors/mesh/mesh_data.c @@ -38,6 +38,7 @@ #include "DNA_meshdata_types.h" #include "DNA_object_types.h" #include "DNA_scene_types.h" +#include "DNA_view3d_types.h" #include "DNA_windowmanager_types.h" #include "BKE_context.h" @@ -49,7 +50,7 @@ #include "BKE_mesh.h" #include "BKE_report.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_editVert.h" #include "BLI_edgehash.h" @@ -63,6 +64,8 @@ #include "ED_object.h" #include "ED_view3d.h" +#include "RE_render_ext.h" + #include "mesh_intern.h" static void delete_customdata_layer(bContext *C, Object *ob, CustomDataLayer *layer) @@ -389,13 +392,15 @@ void MESH_OT_vertex_color_remove(wmOperatorType *ot) static int sticky_add_exec(bContext *C, wmOperator *op) { + Scene *scene= CTX_data_scene(C); + View3D *v3d= CTX_wm_view3d(C); Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data; Mesh *me= ob->data; - if(me->msticky) - return OPERATOR_CANCELLED; + /*if(me->msticky) + return OPERATOR_CANCELLED;*/ - // XXX RE_make_sticky(); + RE_make_sticky(scene, v3d); DAG_id_flush_update(&me->id, OB_RECALC_DATA); WM_event_add_notifier(C, NC_GEOM|ND_DATA, me); @@ -566,7 +571,7 @@ void ED_mesh_transform(Mesh *me, float *mat) MVert *mvert= me->mvert; for(i= 0; i < me->totvert; i++, mvert++) - Mat4MulVecfl((float (*)[4])mat, mvert->co); + mul_m4_v3((float (*)[4])mat, mvert->co); mesh_calc_normals(me->mvert, me->totvert, me->mface, me->totface, NULL); } diff --git a/source/blender/editors/mesh/mesh_intern.h b/source/blender/editors/mesh/mesh_intern.h index 9ff3a3b684c..3f79b9b4370 100644 --- a/source/blender/editors/mesh/mesh_intern.h +++ b/source/blender/editors/mesh/mesh_intern.h @@ -217,6 +217,7 @@ void MESH_OT_edge_rotate(struct wmOperatorType *ot); void MESH_OT_select_vertex_path(struct wmOperatorType *ot); void MESH_OT_loop_to_region(struct wmOperatorType *ot); void MESH_OT_region_to_loop(struct wmOperatorType *ot); +void MESH_OT_select_axis(struct wmOperatorType *ot); void MESH_OT_uvs_rotate(struct wmOperatorType *ot); void MESH_OT_uvs_mirror(struct wmOperatorType *ot); diff --git a/source/blender/editors/mesh/mesh_ops.c b/source/blender/editors/mesh/mesh_ops.c index 1e1234d040a..ffa9dde4493 100644 --- a/source/blender/editors/mesh/mesh_ops.c +++ b/source/blender/editors/mesh/mesh_ops.c @@ -39,7 +39,7 @@ #include "DNA_view3d_types.h" #include "DNA_windowmanager_types.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_editVert.h" @@ -109,6 +109,7 @@ void ED_operatortypes_mesh(void) WM_operatortype_append(MESH_OT_select_vertex_path); WM_operatortype_append(MESH_OT_loop_to_region); WM_operatortype_append(MESH_OT_region_to_loop); + WM_operatortype_append(MESH_OT_select_axis); WM_operatortype_append(MESH_OT_uvs_rotate); WM_operatortype_append(MESH_OT_uvs_mirror); diff --git a/source/blender/editors/mesh/meshtools.c b/source/blender/editors/mesh/meshtools.c index 8bd8629a595..5313b68be9b 100644 --- a/source/blender/editors/mesh/meshtools.c +++ b/source/blender/editors/mesh/meshtools.c @@ -51,7 +51,7 @@ #include "DNA_windowmanager_types.h" #include "DNA_world_types.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_editVert.h" #include "BLI_ghash.h" @@ -123,7 +123,7 @@ int join_mesh_exec(bContext *C, wmOperator *op) KeyBlock *kb, *okb, *kbn; float imat[4][4], cmat[4][4], *fp1, *fp2, curpos; int a, b, totcol, totmat=0, totedge=0, totvert=0, totface=0, ok=0; - int vertofs, *matmap; + int vertofs, *matmap=NULL; int i, j, index, haskey=0, edgeofs, faceofs; bDeformGroup *dg, *odg; MDeformVert *dvert; @@ -168,7 +168,7 @@ int join_mesh_exec(bContext *C, wmOperator *op) /* new material indices and material array */ matar= MEM_callocN(sizeof(void*)*totmat, "join_mesh matar"); - matmap= MEM_callocN(sizeof(int)*totmat, "join_mesh matmap"); + if (totmat) matmap= MEM_callocN(sizeof(int)*totmat, "join_mesh matmap"); totcol= ob->totcol; /* obact materials in new main array, is nicer start! */ @@ -305,7 +305,7 @@ int join_mesh_exec(bContext *C, wmOperator *op) faceofs= 0; /* inverse transform for all selected meshes in this object */ - Mat4Invert(imat, ob->obmat); + invert_m4_m4(imat, ob->obmat); CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) { /* only join if this is a mesh */ @@ -342,11 +342,11 @@ int join_mesh_exec(bContext *C, wmOperator *op) /* if this is the object we're merging into, no need to do anything */ if(base->object != ob) { /* watch this: switch matmul order really goes wrong */ - Mat4MulMat4(cmat, base->object->obmat, imat); + mul_m4_m4m4(cmat, base->object->obmat, imat); /* transform vertex coordinates into new space */ for(a=0, mv=mvert; a < me->totvert; a++, mv++) { - Mat4MulVecfl(cmat, mv->co); + mul_m4_v3(cmat, mv->co); } /* for each shapekey in destination mesh: @@ -366,7 +366,7 @@ int join_mesh_exec(bContext *C, wmOperator *op) fp2= ((float *)(okb->data)); for(a=0; a < me->totvert; a++, fp1+=3, fp2+=3) { VECCOPY(fp1, fp2); - Mat4MulVecfl(cmat, fp1); + mul_m4_v3(cmat, fp1); } } else { @@ -435,7 +435,10 @@ int join_mesh_exec(bContext *C, wmOperator *op) mface->v3+= vertofs; if(mface->v4) mface->v4+= vertofs; - mface->mat_nr= matmap[(int)mface->mat_nr]; + if (matmap) + mface->mat_nr= matmap[(int)mface->mat_nr]; + else + mface->mat_nr= 0; } faceofs += me->totface; @@ -508,7 +511,7 @@ int join_mesh_exec(bContext *C, wmOperator *op) ob->totcol= me->totcol= totcol; ob->colbits= 0; - MEM_freeN(matmap); + if (matmap) MEM_freeN(matmap); /* other mesh users */ test_object_materials((ID *)me); @@ -630,15 +633,15 @@ void sort_faces(Scene *scene, View3D *v3d) float cur[3]; if (event == 1) - Mat4MulMat4(mat, OBACT->obmat, rv3d->viewmat); /* apply the view matrix to the object matrix */ + mul_m4_m4m4(mat, OBACT->obmat, rv3d->viewmat); /* apply the view matrix to the object matrix */ else if (event == 2) { /* sort from cursor */ if( v3d && v3d->localvd ) { VECCOPY(cur, v3d->cursor); } else { VECCOPY(cur, scene->cursor); } - Mat4Invert(mat, OBACT->obmat); - Mat4MulVecfl(mat, cur); + invert_m4_m4(mat, OBACT->obmat); + mul_m4_v3(mat, cur); } mf= me->mface; @@ -652,21 +655,21 @@ void sort_faces(Scene *scene, View3D *v3d) else face_sort_floats[i] = reverse; } else { /* find the faces center */ - VecAddf(vec, (me->mvert+mf->v1)->co, (me->mvert+mf->v2)->co); + add_v3_v3v3(vec, (me->mvert+mf->v1)->co, (me->mvert+mf->v2)->co); if (mf->v4) { - VecAddf(vec, vec, (me->mvert+mf->v3)->co); - VecAddf(vec, vec, (me->mvert+mf->v4)->co); - VecMulf(vec, 0.25f); + add_v3_v3v3(vec, vec, (me->mvert+mf->v3)->co); + add_v3_v3v3(vec, vec, (me->mvert+mf->v4)->co); + mul_v3_fl(vec, 0.25f); } else { - VecAddf(vec, vec, (me->mvert+mf->v3)->co); - VecMulf(vec, 1.0f/3.0f); + add_v3_v3v3(vec, vec, (me->mvert+mf->v3)->co); + mul_v3_fl(vec, 1.0f/3.0f); } /* done */ if (event == 1) { /* sort on view axis */ - Mat4MulVecfl(mat, vec); + mul_m4_v3(mat, vec); face_sort_floats[i] = vec[2] * reverse; } else { /* distance from cursor*/ - face_sort_floats[i] = VecLenf(cur, vec) * reverse; /* back to front */ + face_sort_floats[i] = len_v3v3(cur, vec) * reverse; /* back to front */ } } } @@ -808,12 +811,12 @@ static intptr_t mesh_octree_find_index(MocNode **bt, MVert *mvert, float *co) /* does mesh verts and editmode, code looks potential dangerous, octree should really be filled OK! */ if(mvert) { vec= (mvert+(*bt)->index[a]-1)->co; - if(FloatCompare(vec, co, MOC_THRESH)) + if(compare_v3v3(vec, co, MOC_THRESH)) return (*bt)->index[a]-1; } else { EditVert *eve= (EditVert *)((*bt)->index[a]); - if(FloatCompare(eve->co, co, MOC_THRESH)) + if(compare_v3v3(eve->co, co, MOC_THRESH)) return (*bt)->index[a]; } } @@ -878,12 +881,12 @@ intptr_t mesh_octree_table(Object *ob, EditMesh *em, float *co, char mode) MeshOctree.offs[1]-= MOC_THRESH; MeshOctree.offs[2]-= MOC_THRESH; - VecSubf(MeshOctree.div, max, min); + sub_v3_v3v3(MeshOctree.div, max, min); MeshOctree.div[0]+= 2*MOC_THRESH; /* and divide with 2 threshold unit more extra (try 8x8 unit grid on paint) */ MeshOctree.div[1]+= 2*MOC_THRESH; MeshOctree.div[2]+= 2*MOC_THRESH; - VecMulf(MeshOctree.div, 1.0f/MOC_RES); + mul_v3_fl(MeshOctree.div, 1.0f/MOC_RES); if(MeshOctree.div[0]==0.0f) MeshOctree.div[0]= 1.0f; if(MeshOctree.div[1]==0.0f) MeshOctree.div[1]= 1.0f; if(MeshOctree.div[2]==0.0f) MeshOctree.div[2]= 1.0f; diff --git a/source/blender/editors/metaball/mball_edit.c b/source/blender/editors/metaball/mball_edit.c index f335e47188f..3751f8875f6 100644 --- a/source/blender/editors/metaball/mball_edit.c +++ b/source/blender/editors/metaball/mball_edit.c @@ -37,7 +37,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_rand.h" #include "DNA_meta_types.h" @@ -116,7 +116,7 @@ MetaElem *add_metaball_primitive(bContext *C, int type, int newname) ml= ml->next; } - Mat3CpyMat4(mat, obedit->obmat); + copy_m3_m4(mat, obedit->obmat); if(v3d) { curs= give_cursor(scene, v3d); VECCOPY(cent, curs); @@ -130,16 +130,16 @@ MetaElem *add_metaball_primitive(bContext *C, int type, int newname) if (rv3d) { if (!(newname) || U.flag & USER_ADD_VIEWALIGNED) - Mat3CpyMat4(imat, rv3d->viewmat); + copy_m3_m4(imat, rv3d->viewmat); else - Mat3One(imat); - Mat3MulVecfl(imat, cent); - Mat3MulMat3(cmat, imat, mat); - Mat3Inv(imat,cmat); - Mat3MulVecfl(imat, cent); + unit_m3(imat); + mul_m3_v3(imat, cent); + mul_m3_m3m3(cmat, imat, mat); + invert_m3_m3(imat,cmat); + mul_m3_v3(imat, cent); } else - Mat3One(imat); + unit_m3(imat); ml= MEM_callocN(sizeof(MetaElem), "metaelem"); diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c index 63bb3f87480..61377d76c56 100644 --- a/source/blender/editors/object/object_add.c +++ b/source/blender/editors/object/object_add.c @@ -46,7 +46,7 @@ #include "DNA_view3d_types.h" #include "DNA_vfont_types.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_listbase.h" #include "BKE_anim.h" @@ -126,7 +126,7 @@ void ED_object_base_init_from_view(bContext *C, Base *base, int view_align) RegionView3D *rv3d = CTX_wm_region_view3d(C); if(rv3d) { rv3d->viewquat[0]= -rv3d->viewquat[0]; - QuatToEul(rv3d->viewquat, ob->rot); + quat_to_eul( ob->rot,rv3d->viewquat); rv3d->viewquat[0]= -rv3d->viewquat[0]; } } @@ -196,7 +196,7 @@ Object *ED_object_add_type(bContext *C, int type, int view_align, int enter_edit DAG_scene_sort(scene); if(enter_editmode) - ED_object_enter_editmode(C, 0); + ED_object_enter_editmode(C, EM_IGNORE_LAYER); return ob; } @@ -264,6 +264,7 @@ static Object *effector_add_type(bContext *C, wmOperator *op, int type) if(type==PFIELD_GUIDE) { ob= ED_object_add_type(C, OB_CURVE, view_align, FALSE); + rename_id(&ob->id, "CurveGuide"); ((Curve*)ob->data)->flag |= CU_PATH|CU_3D; ED_object_enter_editmode(C, 0); @@ -274,6 +275,8 @@ static Object *effector_add_type(bContext *C, wmOperator *op, int type) } else { ob= ED_object_add_type(C, OB_EMPTY, view_align, FALSE); + rename_id(&ob->id, "Field"); + switch(type) { case PFIELD_WIND: case PFIELD_VORTEX: @@ -339,9 +342,8 @@ static int object_add_curve_exec(bContext *C, wmOperator *op) ED_object_add_generic_get_opts(op, &view_align, &enter_editmode); if(obedit==NULL || obedit->type!=OB_CURVE) { - ED_object_add_type(C, OB_CURVE, view_align, TRUE); + obedit= ED_object_add_type(C, OB_CURVE, view_align, TRUE); newob = 1; - obedit= CTX_data_edit_object(C); if(type & CU_PRIM_PATH) ((Curve*)obedit->data)->flag |= CU_PATH|CU_3D; @@ -424,12 +426,11 @@ static int object_add_surface_exec(bContext *C, wmOperator *op) ED_object_add_generic_get_opts(op, &view_align, &enter_editmode); if(obedit==NULL || obedit->type!=OB_SURF) { - ED_object_add_type(C, OB_SURF, view_align, TRUE); + obedit= ED_object_add_type(C, OB_SURF, view_align, TRUE); newob = 1; } else DAG_id_flush_update(&obedit->id, OB_RECALC_DATA); - obedit= CTX_data_edit_object(C); nu= add_nurbs_primitive(C, RNA_enum_get(op->ptr, "type"), newob); editnurb= curve_get_editcurve(obedit); BLI_addtail(editnurb, nu); @@ -485,12 +486,11 @@ static int object_metaball_add_exec(bContext *C, wmOperator *op) ED_object_add_generic_get_opts(op, &view_align, &enter_editmode); if(obedit==NULL || obedit->type!=OB_MBALL) { - ED_object_add_type(C, OB_MBALL, view_align, TRUE); + obedit= ED_object_add_type(C, OB_MBALL, view_align, TRUE); newob = 1; } else DAG_id_flush_update(&obedit->id, OB_RECALC_DATA); - obedit= CTX_data_edit_object(C); elem= (MetaElem*)add_metaball_primitive(C, RNA_enum_get(op->ptr, "type"), newob); mball= (MetaBall*)obedit->data; BLI_addtail(mball->editelems, elem); @@ -553,8 +553,7 @@ static int object_add_text_exec(bContext *C, wmOperator *op) if(obedit && obedit->type==OB_FONT) return OPERATOR_CANCELLED; - ED_object_add_type(C, OB_FONT, view_align, enter_editmode); - obedit= CTX_data_active_object(C); + obedit= ED_object_add_type(C, OB_FONT, view_align, enter_editmode); WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, obedit); @@ -590,9 +589,8 @@ static int object_armature_add_exec(bContext *C, wmOperator *op) ED_object_add_generic_get_opts(op, &view_align, &enter_editmode); if ((obedit==NULL) || (obedit->type != OB_ARMATURE)) { - ED_object_add_type(C, OB_ARMATURE, view_align, TRUE); + obedit= ED_object_add_type(C, OB_ARMATURE, view_align, TRUE); ED_object_enter_editmode(C, 0); - obedit= CTX_data_edit_object(C); newob = 1; } else DAG_id_flush_update(&obedit->id, OB_RECALC_DATA); @@ -717,7 +715,7 @@ void OBJECT_OT_group_instance_add(wmOperatorType *ot) ot->poll= ED_operator_scene_editable; /* flags */ - ot->flag= 0; + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; /* properties */ prop= RNA_def_enum(ot->srna, "type", DummyRNA_NULL_items, 0, "Type", ""); @@ -930,7 +928,7 @@ static void make_object_duplilist_real(bContext *C, Scene *scene, Base *base) ob->disp.first= ob->disp.last= NULL; ob->transflag &= ~OB_DUPLI; - Mat4CpyMat4(ob->obmat, dob->mat); + copy_m4_m4(ob->obmat, dob->mat); ED_object_apply_obmat(ob); } diff --git a/source/blender/editors/object/object_constraint.c b/source/blender/editors/object/object_constraint.c index 35b11571a61..2d98a284df0 100644 --- a/source/blender/editors/object/object_constraint.c +++ b/source/blender/editors/object/object_constraint.c @@ -33,7 +33,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_dynstr.h" #include "DNA_action_types.h" @@ -577,7 +577,7 @@ static int childof_set_inverse_exec (bContext *C, wmOperator *op) float imat[4][4], tmat[4][4]; /* make copy of pchan's original pose-mat (for use later) */ - Mat4CpyMat4(pmat, pchan->pose_mat); + copy_m4_m4(pmat, pchan->pose_mat); /* disable constraint for pose to be solved without it */ cinf= con->enforce; @@ -590,9 +590,9 @@ static int childof_set_inverse_exec (bContext *C, wmOperator *op) * pchan->pose_mat from the original pchan->pose_mat, thus determining * the effect of the constraint */ - Mat4Invert(imat, pchan->pose_mat); - Mat4MulMat4(tmat, imat, pmat); - Mat4Invert(data->invmat, tmat); + invert_m4_m4(imat, pchan->pose_mat); + mul_m4_m4m4(tmat, imat, pmat); + invert_m4_m4(data->invmat, tmat); /* recalculate pose with new inv-mat */ con->enforce= cinf; @@ -604,10 +604,10 @@ static int childof_set_inverse_exec (bContext *C, wmOperator *op) * NOTE: what_does_parent uses a static workob defined in object.c */ what_does_parent(scene, ob, &workob); - Mat4Invert(data->invmat, workob.obmat); + invert_m4_m4(data->invmat, workob.obmat); } else - Mat4One(data->invmat); + unit_m4(data->invmat); WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT, ob); @@ -637,7 +637,7 @@ static int childof_clear_inverse_exec (bContext *C, wmOperator *op) bChildOfConstraint *data= (bChildOfConstraint *)con->data; /* simply clear the matrix */ - Mat4One(data->invmat); + unit_m4(data->invmat); WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT, ob); @@ -1052,9 +1052,9 @@ static short get_new_constraint_target(bContext *C, int con_type, Object **tar_o * if adding a target for an IK Constraint */ if (con_type == CONSTRAINT_TYPE_KINEMATIC) - VecMat4MulVecfl(obt->loc, obact->obmat, pchanact->pose_tail); + mul_v3_m4v3(obt->loc, obact->obmat, pchanact->pose_tail); else - VecMat4MulVecfl(obt->loc, obact->obmat, pchanact->pose_head); + mul_v3_m4v3(obt->loc, obact->obmat, pchanact->pose_head); } else VECCOPY(obt->loc, obact->obmat[3]); diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c index e659cd70672..7bb345bf46c 100644 --- a/source/blender/editors/object/object_edit.c +++ b/source/blender/editors/object/object_edit.c @@ -67,7 +67,7 @@ #include "DNA_modifier_types.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_editVert.h" #include "BLI_ghash.h" #include "BLI_rand.h" @@ -161,16 +161,16 @@ void ED_object_apply_obmat(Object *ob) /* from obmat to loc rot size */ if(ob==NULL) return; - Mat3CpyMat4(mat, ob->obmat); + copy_m3_m4(mat, ob->obmat); VECCOPY(ob->loc, ob->obmat[3]); - Mat3ToEul(mat, ob->rot); - EulToMat3(ob->rot, tmat); + mat3_to_eul( ob->rot,mat); + eul_to_mat3( tmat,ob->rot); - Mat3Inv(imat, tmat); + invert_m3_m3(imat, tmat); - Mat3MulMat3(tmat, imat, mat); + mul_m3_m3m3(tmat, imat, mat); ob->size[0]= tmat[0][0]; ob->size[1]= tmat[1][1]; @@ -371,25 +371,31 @@ void ED_object_exit_editmode(bContext *C, int flag) void ED_object_enter_editmode(bContext *C, int flag) { Scene *scene= CTX_data_scene(C); - Base *base= CTX_data_active_base(C); + Base *base= NULL; Object *ob; ScrArea *sa= CTX_wm_area(C); View3D *v3d= NULL; int ok= 0; if(scene->id.lib) return; - if(base==NULL) return; if(sa && sa->spacetype==SPACE_VIEW3D) v3d= sa->spacedata.first; - if(v3d && (base->lay & v3d->lay)==0) return; - else if(!v3d && (base->lay & scene->lay)==0) return; + if((flag & EM_IGNORE_LAYER)==0) { + base= CTX_data_active_base(C); /* active layer checked here for view3d */ - ob = base->object; + if(base==NULL) return; + else if(v3d && (base->lay & v3d->lay)==0) return; + else if(!v3d && (base->lay & scene->lay)==0) return; + } + else { + base= scene->basact; + } - if(ob==NULL) return; - if(ob->data==NULL) return; + if (ELEM3(NULL, base, base->object, base->object->data)) return; + + ob = base->object; if (object_data_is_libdata(ob)) { error_libdata(); diff --git a/source/blender/editors/object/object_hook.c b/source/blender/editors/object/object_hook.c index 4643b875872..91aebc8b149 100644 --- a/source/blender/editors/object/object_hook.c +++ b/source/blender/editors/object/object_hook.c @@ -30,7 +30,7 @@ #include "MEM_guardedalloc.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_editVert.h" #include "BLI_listbase.h" #include "BLI_string.h" @@ -77,12 +77,12 @@ static int return_editmesh_indexar(EditMesh *em, int *tot, int **indexar, float for(eve= em->verts.first; eve; eve= eve->next) { if(eve->f & SELECT) { *index= nr; index++; - VecAddf(cent, cent, eve->co); + add_v3_v3v3(cent, cent, eve->co); } nr++; } - VecMulf(cent, 1.0f/(float)totvert); + mul_v3_fl(cent, 1.0f/(float)totvert); return totvert; } @@ -105,7 +105,7 @@ static int return_editmesh_vgroup(Object *obedit, EditMesh *em, char *name, floa for(i=0; i<dvert->totweight; i++){ if(dvert->dw[i].def_nr == (obedit->actdef-1)) { totvert++; - VecAddf(cent, cent, eve->co); + add_v3_v3v3(cent, cent, eve->co); } } } @@ -113,7 +113,7 @@ static int return_editmesh_vgroup(Object *obedit, EditMesh *em, char *name, floa if(totvert) { bDeformGroup *defGroup = BLI_findlink(&obedit->defbase, obedit->actdef-1); strcpy(name, defGroup->name); - VecMulf(cent, 1.0f/(float)totvert); + mul_v3_fl(cent, 1.0f/(float)totvert); return 1; } } @@ -170,14 +170,14 @@ static int return_editlattice_indexar(Lattice *editlatt, int *tot, int **indexar if(bp->f1 & SELECT) { if(bp->hide==0) { *index= nr; index++; - VecAddf(cent, cent, bp->vec); + add_v3_v3v3(cent, cent, bp->vec); } } bp++; nr++; } - VecMulf(cent, 1.0f/(float)totvert); + mul_v3_fl(cent, 1.0f/(float)totvert); return totvert; } @@ -243,17 +243,17 @@ static int return_editcurve_indexar(Object *obedit, int *tot, int **indexar, flo while(a--) { if(bezt->f1 & SELECT) { *index= nr; index++; - VecAddf(cent, cent, bezt->vec[0]); + add_v3_v3v3(cent, cent, bezt->vec[0]); } nr++; if(bezt->f2 & SELECT) { *index= nr; index++; - VecAddf(cent, cent, bezt->vec[1]); + add_v3_v3v3(cent, cent, bezt->vec[1]); } nr++; if(bezt->f3 & SELECT) { *index= nr; index++; - VecAddf(cent, cent, bezt->vec[2]); + add_v3_v3v3(cent, cent, bezt->vec[2]); } nr++; bezt++; @@ -265,7 +265,7 @@ static int return_editcurve_indexar(Object *obedit, int *tot, int **indexar, flo while(a--) { if(bp->f1 & SELECT) { *index= nr; index++; - VecAddf(cent, cent, bp->vec); + add_v3_v3v3(cent, cent, bp->vec); } nr++; bp++; @@ -273,7 +273,7 @@ static int return_editcurve_indexar(Object *obedit, int *tot, int **indexar, flo } } - VecMulf(cent, 1.0f/(float)totvert); + mul_v3_fl(cent, 1.0f/(float)totvert); return totvert; } @@ -362,6 +362,9 @@ static void select_editcurve_hook(Object *obedit, HookModifierData *hmd) void object_hook_select(Object *ob, HookModifierData *hmd) { + if (hmd->indexar == NULL) + return; + if(ob->type==OB_MESH) select_editmesh_hook(ob, hmd); else if(ob->type==OB_LATTICE) select_editlattice_hook(ob, hmd); else if(ob->type==OB_CURVE) select_editcurve_hook(ob, hmd); @@ -462,7 +465,7 @@ void add_hook(Scene *scene, View3D *v3d, int mode) ob->lay= newbase->lay; /* transform cent to global coords for loc */ - VecMat4MulVecfl(ob->loc, obedit->obmat, cent); + mul_v3_m4v3(ob->loc, obedit->obmat, cent); /* restore, add_object sets active */ BASACT= base; @@ -486,7 +489,7 @@ void add_hook(Scene *scene, View3D *v3d, int mode) hmd->object= ob; hmd->indexar= indexar; - VecCopyf(hmd->cent, cent); + copy_v3_v3(hmd->cent, cent); hmd->totindex= tot; BLI_strncpy(hmd->name, name, 32); @@ -498,9 +501,9 @@ void add_hook(Scene *scene, View3D *v3d, int mode) where_is_object(scene, ob); - Mat4Invert(ob->imat, ob->obmat); + invert_m4_m4(ob->imat, ob->obmat); /* apparently this call goes from right to left... */ - Mat4MulSerie(hmd->parentinv, ob->imat, obedit->obmat, NULL, + mul_serie_m4(hmd->parentinv, ob->imat, obedit->obmat, NULL, NULL, NULL, NULL, NULL, NULL); } } @@ -517,9 +520,9 @@ void add_hook(Scene *scene, View3D *v3d, int mode) // FIXME: this is now OBJECT_OT_hook_reset operator where_is_object(scene, ob); /* ob is hook->parent */ - Mat4Invert(ob->imat, ob->obmat); + invert_m4_m4(ob->imat, ob->obmat); /* this call goes from right to left... */ - Mat4MulSerie(hmd->parentinv, ob->imat, obedit->obmat, NULL, + mul_serie_m4(hmd->parentinv, ob->imat, obedit->obmat, NULL, NULL, NULL, NULL, NULL, NULL); } @@ -574,8 +577,8 @@ void hookmenu(Scene *scene, View3D *v3d) if (event==1) { if(hmd->object) { - Mat4Invert(hmd->object->imat, hmd->object->obmat); - Mat4MulSerie(hmd->parentinv, hmd->object->imat, ob->obmat, NULL, NULL, NULL, NULL, NULL, NULL); + invert_m4_m4(hmd->object->imat, hmd->object->obmat); + mul_serie_m4(hmd->parentinv, hmd->object->imat, ob->obmat, NULL, NULL, NULL, NULL, NULL, NULL); changed= 1; DAG_id_flush_update(&ob->id, OB_RECALC_DATA); @@ -586,14 +589,14 @@ void hookmenu(Scene *scene, View3D *v3d) where_is_object(scene, ob); - Mat3CpyMat4(bmat, ob->obmat); - Mat3Inv(imat, bmat); + copy_m3_m4(bmat, ob->obmat); + invert_m3_m3(imat, bmat); curs= give_cursor(scene, v3d); hmd->cent[0]= curs[0]-ob->obmat[3][0]; hmd->cent[1]= curs[1]-ob->obmat[3][1]; hmd->cent[2]= curs[2]-ob->obmat[3][2]; - Mat3MulVecfl(imat, hmd->cent); + mul_m3_v3(imat, hmd->cent); changed= 1; DAG_id_flush_update(&ob->id, OB_RECALC_DATA); diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c index 39a8a026afb..c4304056017 100644 --- a/source/blender/editors/object/object_modifier.c +++ b/source/blender/editors/object/object_modifier.c @@ -40,7 +40,7 @@ #include "DNA_object_force.h" #include "DNA_scene_types.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_listbase.h" #include "BKE_action.h" @@ -65,6 +65,7 @@ #include "RNA_define.h" #include "RNA_enum_types.h" +#include "ED_armature.h" #include "ED_screen.h" #include "WM_api.h" @@ -781,7 +782,7 @@ static int meshdeform_bind_exec(bContext *C, wmOperator *op) int mode= mmd->modifier.mode; /* force modifier to run, it will call binding routine */ - mmd->needbind= 1; + mmd->bindfunc= harmonic_coordinates_bind; mmd->modifier.mode |= eModifierMode_Realtime; if(ob->type == OB_MESH) { @@ -798,7 +799,7 @@ static int meshdeform_bind_exec(bContext *C, wmOperator *op) makeDispListCurveTypes(scene, ob, 0); } - mmd->needbind= 0; + mmd->bindfunc= NULL; mmd->modifier.mode= mode; } @@ -842,14 +843,14 @@ static int hook_reset_exec(bContext *C, wmOperator *op) float imat[4][4], mat[4][4]; /* calculate the world-space matrix for the pose-channel target first, then carry on as usual */ - Mat4MulMat4(mat, pchan->pose_mat, hmd->object->obmat); + mul_m4_m4m4(mat, pchan->pose_mat, hmd->object->obmat); - Mat4Invert(imat, mat); - Mat4MulSerie(hmd->parentinv, imat, ob->obmat, NULL, NULL, NULL, NULL, NULL, NULL); + invert_m4_m4(imat, mat); + mul_serie_m4(hmd->parentinv, imat, ob->obmat, NULL, NULL, NULL, NULL, NULL, NULL); } else { - Mat4Invert(hmd->object->imat, hmd->object->obmat); - Mat4MulSerie(hmd->parentinv, hmd->object->imat, ob->obmat, NULL, NULL, NULL, NULL, NULL, NULL); + invert_m4_m4(hmd->object->imat, hmd->object->obmat); + mul_serie_m4(hmd->parentinv, hmd->object->imat, ob->obmat, NULL, NULL, NULL, NULL, NULL, NULL); } } @@ -880,11 +881,11 @@ static int hook_recenter_exec(bContext *C, wmOperator *op) HookModifierData *hmd= ptr.data; float bmat[3][3], imat[3][3]; - Mat3CpyMat4(bmat, ob->obmat); - Mat3Inv(imat, bmat); + copy_m3_m4(bmat, ob->obmat); + invert_m3_m3(imat, bmat); VECSUB(hmd->cent, scene->cursor, ob->obmat[3]); - Mat3MulVecfl(imat, hmd->cent); + mul_m3_v3(imat, hmd->cent); DAG_id_flush_update(&ob->id, OB_RECALC_DATA); WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob); diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c index ccb6e8cdea3..75a95323ce1 100644 --- a/source/blender/editors/object/object_ops.c +++ b/source/blender/editors/object/object_ops.c @@ -39,7 +39,7 @@ #include "DNA_view3d_types.h" #include "DNA_windowmanager_types.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BKE_context.h" diff --git a/source/blender/editors/object/object_relations.c b/source/blender/editors/object/object_relations.c index cbd1e1be8d5..95b874e7145 100644 --- a/source/blender/editors/object/object_relations.c +++ b/source/blender/editors/object/object_relations.c @@ -48,7 +48,7 @@ #include "DNA_view3d_types.h" #include "DNA_world_types.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_editVert.h" #include "BLI_listbase.h" #include "BLI_string.h" @@ -221,7 +221,7 @@ static int vertex_parent_set_exec(bContext *C, wmOperator *op) /* inverse parent matrix */ what_does_parent(scene, ob, &workob); - Mat4Invert(ob->parentinv, workob.obmat); + invert_m4_m4(ob->parentinv, workob.obmat); } else { ob->partype= PARVERT1; @@ -229,7 +229,7 @@ static int vertex_parent_set_exec(bContext *C, wmOperator *op) /* inverse parent matrix */ what_does_parent(scene, ob, &workob); - Mat4Invert(ob->parentinv, workob.obmat); + invert_m4_m4(ob->parentinv, workob.obmat); } } } @@ -451,7 +451,7 @@ static int parent_clear_exec(bContext *C, wmOperator *op) ED_object_apply_obmat(ob); } else if(type == 2) - Mat4One(ob->parentinv); + unit_m4(ob->parentinv); ob->recalc |= OB_RECALC; } @@ -617,7 +617,7 @@ static int parent_set_exec(bContext *C, wmOperator *op) add_constraint_to_object(con, ob); get_constraint_target_matrix(scene, con, 0, CONSTRAINT_OBTYPE_OBJECT, NULL, cmat, scene->r.cfra - give_timeoffset(ob)); - VecSubf(vec, ob->obmat[3], cmat[3]); + sub_v3_v3v3(vec, ob->obmat[3], cmat[3]); ob->loc[0] = vec[0]; ob->loc[1] = vec[1]; @@ -637,12 +637,12 @@ static int parent_set_exec(bContext *C, wmOperator *op) ob->partype= PARSKEL; - Mat4Invert(ob->parentinv, workob.obmat); + invert_m4_m4(ob->parentinv, workob.obmat); } else { /* calculate inverse parent matrix */ what_does_parent(scene, ob, &workob); - Mat4Invert(ob->parentinv, workob.obmat); + invert_m4_m4(ob->parentinv, workob.obmat); } ob->recalc |= OB_RECALC_OB|OB_RECALC_DATA; @@ -734,7 +734,7 @@ static int parent_noinv_set_exec(bContext *C, wmOperator *op) } else { /* clear inverse matrix and also the object location */ - Mat4One(ob->parentinv); + unit_m4(ob->parentinv); memset(ob->loc, 0, 3*sizeof(float)); /* set recalc flags */ diff --git a/source/blender/editors/object/object_select.c b/source/blender/editors/object/object_select.c index 47730496296..20f3ea3df9e 100644 --- a/source/blender/editors/object/object_select.c +++ b/source/blender/editors/object/object_select.c @@ -40,7 +40,7 @@ #include "DNA_scene_types.h" #include "DNA_texture_types.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_listbase.h" #include "BLI_rand.h" #include "BLI_string.h" @@ -524,7 +524,7 @@ static short select_grouped_color(bContext *C, Object *ob) char changed = 0; CTX_DATA_BEGIN(C, Base*, base, selectable_bases) { - if (!(base->flag & SELECT) && (FloatCompare(base->object->col, ob->col, 0.005f))) { + if (!(base->flag & SELECT) && (compare_v3v3(base->object->col, ob->col, 0.005f))) { ED_base_object_select(base, BA_SELECT); changed = 1; } diff --git a/source/blender/editors/object/object_shapekey.c b/source/blender/editors/object/object_shapekey.c index f52927a1a00..878c61aac48 100644 --- a/source/blender/editors/object/object_shapekey.c +++ b/source/blender/editors/object/object_shapekey.c @@ -37,7 +37,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "DNA_action_types.h" #include "DNA_curve_types.h" diff --git a/source/blender/editors/object/object_transform.c b/source/blender/editors/object/object_transform.c index 0c09e0a03de..48db13c0709 100644 --- a/source/blender/editors/object/object_transform.c +++ b/source/blender/editors/object/object_transform.c @@ -38,7 +38,7 @@ #include "DNA_screen_types.h" #include "DNA_view3d_types.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_editVert.h" #include "BLI_listbase.h" @@ -159,10 +159,10 @@ static int object_rotation_clear_exec(bContext *C, wmOperator *op) if (ob->rotmode == ROT_MODE_QUAT) { QUATCOPY(quat1, ob->quat); - QuatToEul(ob->quat, oldeul); + quat_to_eul( oldeul,ob->quat); } else if (ob->rotmode == ROT_MODE_AXISANGLE) { - AxisAngleToEulO(ob->rotAxis, ob->rotAngle, oldeul, EULER_ORDER_DEFAULT); + axis_angle_to_eulO( oldeul, EULER_ORDER_DEFAULT,ob->rotAxis, ob->rotAngle); } else { VECCOPY(oldeul, ob->rot); @@ -178,14 +178,14 @@ static int object_rotation_clear_exec(bContext *C, wmOperator *op) eul[2]= oldeul[2]; if (ob->rotmode == ROT_MODE_QUAT) { - EulToQuat(eul, ob->quat); + eul_to_quat( ob->quat,eul); /* quaternions flip w sign to accumulate rotations correctly */ if ((quat1[0]<0.0f && ob->quat[0]>0.0f) || (quat1[0]>0.0f && ob->quat[0]<0.0f)) { - QuatMulf(ob->quat, -1.0f); + mul_qt_fl(ob->quat, -1.0f); } } else if (ob->rotmode == ROT_MODE_AXISANGLE) { - EulOToAxisAngle(eul, EULER_ORDER_DEFAULT, ob->rotAxis, &ob->rotAngle); + eulO_to_axis_angle( ob->rotAxis, &ob->rotAngle,eul, EULER_ORDER_DEFAULT); } else { VECCOPY(ob->rot, eul); @@ -290,12 +290,12 @@ static int object_origin_clear_exec(bContext *C, wmOperator *op) v1= ob->loc; v3= ob->parentinv[3]; - Mat3CpyMat4(mat, ob->parentinv); + copy_m3_m4(mat, ob->parentinv); VECCOPY(v3, v1); v3[0]= -v3[0]; v3[1]= -v3[1]; v3[2]= -v3[2]; - Mat3MulVecfl(mat, v3); + mul_m3_v3(mat, v3); } ob->recalc |= OB_RECALC_OB; } @@ -338,7 +338,7 @@ static void ignore_parent_tx(Main *bmain, Scene *scene, Object *ob ) if(ob_child->parent == ob) { ED_object_apply_obmat(ob_child); what_does_parent(scene, ob_child, &workob); - Mat4Invert(ob_child->parentinv, workob.obmat); + invert_m4_m4(ob_child->parentinv, workob.obmat); } } } @@ -402,20 +402,20 @@ static int apply_objects_internal(bContext *C, ReportList *reports, int apply_lo else if(apply_rot) object_rot_to_mat3(ob, rsmat); else - Mat3One(rsmat); + unit_m3(rsmat); - Mat4CpyMat3(mat, rsmat); + copy_m4_m3(mat, rsmat); /* calculate translation */ if(apply_loc) { - VecCopyf(mat[3], ob->loc); + copy_v3_v3(mat[3], ob->loc); if(!(apply_scale && apply_rot)) { /* correct for scale and rotation that is still applied */ object_to_mat3(ob, obmat); - Mat3Inv(iobmat, obmat); - Mat3MulMat3(tmat, rsmat, iobmat); - Mat3MulVecfl(tmat, mat[3]); + invert_m3_m3(iobmat, obmat); + mul_m3_m3m3(tmat, rsmat, iobmat); + mul_m3_v3(tmat, mat[3]); } } @@ -426,7 +426,7 @@ static int apply_objects_internal(bContext *C, ReportList *reports, int apply_lo /* adjust data */ mvert= me->mvert; for(a=0; a<me->totvert; a++, mvert++) - Mat4MulVecfl(mat, mvert->co); + mul_m4_v3(mat, mvert->co); if(me->key) { KeyBlock *kb; @@ -435,7 +435,7 @@ static int apply_objects_internal(bContext *C, ReportList *reports, int apply_lo float *fp= kb->data; for(a=0; a<kb->totelem; a++, fp+=3) - Mat4MulVecfl(mat, fp); + mul_m4_v3(mat, fp); } } @@ -448,15 +448,15 @@ static int apply_objects_internal(bContext *C, ReportList *reports, int apply_lo else if(ELEM(ob->type, OB_CURVE, OB_SURF)) { cu= ob->data; - scale = Mat3ToScalef(rsmat); + scale = mat3_to_scale(rsmat); for(nu=cu->nurb.first; nu; nu=nu->next) { if(nu->type == CU_BEZIER) { a= nu->pntsu; for(bezt= nu->bezt; a--; bezt++) { - Mat4MulVecfl(mat, bezt->vec[0]); - Mat4MulVecfl(mat, bezt->vec[1]); - Mat4MulVecfl(mat, bezt->vec[2]); + mul_m4_v3(mat, bezt->vec[0]); + mul_m4_v3(mat, bezt->vec[1]); + mul_m4_v3(mat, bezt->vec[2]); bezt->radius *= scale; bezt++; } @@ -464,7 +464,7 @@ static int apply_objects_internal(bContext *C, ReportList *reports, int apply_lo else { a= nu->pntsu*nu->pntsv; for(bp= nu->bp; a--; bp++) - Mat4MulVecfl(mat, bp->vec); + mul_m4_v3(mat, bp->vec); } } } @@ -503,8 +503,8 @@ static int visual_transform_apply_exec(bContext *C, wmOperator *op) where_is_object(scene, ob); VECCOPY(ob->loc, ob->obmat[3]); - Mat4ToSize(ob->obmat, ob->size); - Mat4ToEul(ob->obmat, ob->rot); + mat4_to_size( ob->size,ob->obmat); + mat4_to_eul( ob->rot,ob->obmat); where_is_object(scene, ob); @@ -709,7 +709,7 @@ static int object_center_set_exec(bContext *C, wmOperator *op) } if(v3d->around==V3D_CENTROID) { - VecMulf(cent, 1.0f/(float)total); + mul_v3_fl(cent, 1.0f/(float)total); } else { cent[0]= (min[0]+max[0])/2.0f; @@ -718,7 +718,7 @@ static int object_center_set_exec(bContext *C, wmOperator *op) } for(eve= em->verts.first; eve; eve= eve->next) { - VecSubf(eve->co, eve->co, cent); + sub_v3_v3v3(eve->co, eve->co, cent); } recalc_editnormals(em); @@ -748,8 +748,8 @@ static int object_center_set_exec(bContext *C, wmOperator *op) } else { if(centermode==2) { VECCOPY(cent, give_cursor(scene, v3d)); - Mat4Invert(ob->imat, ob->obmat); - Mat4MulVecfl(ob->imat, cent); + invert_m4_m4(ob->imat, ob->obmat); + mul_m4_v3(ob->imat, cent); } else { INIT_MINMAX(min, max); mvert= me->mvert; @@ -764,7 +764,7 @@ static int object_center_set_exec(bContext *C, wmOperator *op) mvert= me->mvert; for(a=0; a<me->totvert; a++, mvert++) { - VecSubf(mvert->co, mvert->co, cent); + sub_v3_v3v3(mvert->co, mvert->co, cent); } if (me->key) { @@ -773,7 +773,7 @@ static int object_center_set_exec(bContext *C, wmOperator *op) float *fp= kb->data; for (a=0; a<kb->totelem; a++, fp+=3) { - VecSubf(fp, fp, cent); + sub_v3_v3v3(fp, fp, cent); } } } @@ -781,10 +781,10 @@ static int object_center_set_exec(bContext *C, wmOperator *op) me->flag |= ME_ISDONE; if(centermode) { - Mat3CpyMat4(omat, ob->obmat); + copy_m3_m4(omat, ob->obmat); VECCOPY(centn, cent); - Mat3MulVecfl(omat, centn); + mul_m3_v3(omat, centn); ob->loc[0]+= centn[0]; ob->loc[1]+= centn[1]; ob->loc[2]+= centn[2]; @@ -802,9 +802,9 @@ static int object_center_set_exec(bContext *C, wmOperator *op) ob_other->flag |= OB_DONE; ob_other->recalc= OB_RECALC_OB|OB_RECALC_DATA; - Mat3CpyMat4(omat, ob_other->obmat); + copy_m3_m4(omat, ob_other->obmat); VECCOPY(centn, cent); - Mat3MulVecfl(omat, centn); + mul_m3_v3(omat, centn); ob_other->loc[0]+= centn[0]; ob_other->loc[1]+= centn[1]; ob_other->loc[2]+= centn[2]; @@ -815,7 +815,7 @@ static int object_center_set_exec(bContext *C, wmOperator *op) if(tme && (tme->flag & ME_ISDONE)==0) { mvert= tme->mvert; for(a=0; a<tme->totvert; a++, mvert++) { - VecSubf(mvert->co, mvert->co, cent); + sub_v3_v3v3(mvert->co, mvert->co, cent); } if (tme->key) { @@ -824,7 +824,7 @@ static int object_center_set_exec(bContext *C, wmOperator *op) float *fp= kb->data; for (a=0; a<kb->totelem; a++, fp+=3) { - VecSubf(fp, fp, cent); + sub_v3_v3v3(fp, fp, cent); } } } @@ -858,8 +858,8 @@ static int object_center_set_exec(bContext *C, wmOperator *op) } else { if(centermode==2) { VECCOPY(cent, give_cursor(scene, v3d)); - Mat4Invert(ob->imat, ob->obmat); - Mat4MulVecfl(ob->imat, cent); + invert_m4_m4(ob->imat, ob->obmat); + mul_m4_v3(ob->imat, cent); /* don't allow Z change if curve is 2D */ if( !( cu->flag & CU_3D ) ) @@ -884,23 +884,23 @@ static int object_center_set_exec(bContext *C, wmOperator *op) if(nu->type == CU_BEZIER) { a= nu->pntsu; while (a--) { - VecSubf(nu->bezt[a].vec[0], nu->bezt[a].vec[0], cent); - VecSubf(nu->bezt[a].vec[1], nu->bezt[a].vec[1], cent); - VecSubf(nu->bezt[a].vec[2], nu->bezt[a].vec[2], cent); + sub_v3_v3v3(nu->bezt[a].vec[0], nu->bezt[a].vec[0], cent); + sub_v3_v3v3(nu->bezt[a].vec[1], nu->bezt[a].vec[1], cent); + sub_v3_v3v3(nu->bezt[a].vec[2], nu->bezt[a].vec[2], cent); } } else { a= nu->pntsu*nu->pntsv; while (a--) - VecSubf(nu->bp[a].vec, nu->bp[a].vec, cent); + sub_v3_v3v3(nu->bp[a].vec, nu->bp[a].vec, cent); } nu= nu->next; } if(centermode && obedit==NULL) { - Mat3CpyMat4(omat, ob->obmat); + copy_m3_m4(omat, ob->obmat); - Mat3MulVecfl(omat, cent); + mul_m3_v3(omat, cent); ob->loc[0]+= cent[0]; ob->loc[1]+= cent[1]; ob->loc[2]+= cent[2]; diff --git a/source/blender/editors/physics/particle_edit.c b/source/blender/editors/physics/particle_edit.c index d4a6a719de0..a1034eaf9f7 100644 --- a/source/blender/editors/physics/particle_edit.c +++ b/source/blender/editors/physics/particle_edit.c @@ -60,7 +60,7 @@ #include "BKE_utildefines.h" #include "BKE_pointcache.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_dynstr.h" #include "BLI_kdtree.h" @@ -587,13 +587,13 @@ static void foreach_mouse_hit_key(PEData *data, ForKeyMatFunc func, int selected if(pset->selectmode==SCE_SELECT_PATH) selected= 0; - Mat4One(imat); - Mat4One(mat); + unit_m4(imat); + unit_m4(mat); LOOP_VISIBLE_POINTS { if(edit->psys && !(edit->psys->flag & PSYS_GLOBAL_HAIR)) { psys_mat_hair_to_global(data->ob, psmd->dm, psys->part->from, psys->particles + p, mat); - Mat4Invert(imat,mat); + invert_m4_m4(imat,mat); } if(pset->selectmode==SCE_SELECT_END) { @@ -698,7 +698,7 @@ static void PE_update_mirror_cache(Object *ob, ParticleSystem *psys) key = pa->hair; psys_mat_hair_to_orco(ob, psmd->dm, psys->part->from, pa, mat); VECCOPY(co, key->co); - Mat4MulVecfl(mat, co); + mul_m4_v3(mat, co); BLI_kdtree_insert(tree, p, co, NULL); } @@ -712,7 +712,7 @@ static void PE_update_mirror_cache(Object *ob, ParticleSystem *psys) key = pa->hair; psys_mat_hair_to_orco(ob, psmd->dm, psys->part->from, pa, mat); VECCOPY(co, key->co); - Mat4MulVecfl(mat, co); + mul_m4_v3(mat, co); co[0]= -co[0]; index= BLI_kdtree_find_nearest(tree, co, NULL, &nearest); @@ -785,7 +785,7 @@ static void PE_mirror_particle(Object *ob, DerivedMesh *dm, ParticleSystem *psys /* mirror positions and tags */ psys_mat_hair_to_orco(ob, dm, psys->part->from, pa, mat); psys_mat_hair_to_orco(ob, dm, psys->part->from, mpa, mmat); - Mat4Invert(immat, mmat); + invert_m4_m4(immat, mmat); hkey=pa->hair; mhkey=mpa->hair; @@ -793,9 +793,9 @@ static void PE_mirror_particle(Object *ob, DerivedMesh *dm, ParticleSystem *psys mkey= mpoint->keys; for(k=0; k<pa->totkey; k++, hkey++, mhkey++, key++, mkey++) { VECCOPY(mhkey->co, hkey->co); - Mat4MulVecfl(mat, mhkey->co); + mul_m4_v3(mat, mhkey->co); mhkey->co[0]= -mhkey->co[0]; - Mat4MulVecfl(immat, mhkey->co); + mul_m4_v3(immat, mhkey->co); if(key->flag & PEK_TAG) mkey->flag |= PEK_TAG; @@ -867,12 +867,12 @@ static void pe_deflect_emitter(Scene *scene, Object *ob, PTCacheEdit *edit) psys_mat_hair_to_object(ob, psmd->dm, psys->part->from, psys->particles + p, hairmat); LOOP_KEYS { - Mat4MulVecfl(hairmat, key->co); + mul_m4_v3(hairmat, key->co); } LOOP_KEYS { if(k==0) { - dist_1st = VecLenf((key+1)->co, key->co); + dist_1st = len_v3v3((key+1)->co, key->co); dist_1st *= 0.75f * pset->emitterdist; } else { @@ -881,32 +881,32 @@ static void pe_deflect_emitter(Scene *scene, Object *ob, PTCacheEdit *edit) vec=edit->emitter_cosnos +index*6; nor=vec+3; - VecSubf(dvec, key->co, vec); + sub_v3_v3v3(dvec, key->co, vec); - dot=Inpf(dvec,nor); + dot=dot_v3v3(dvec,nor); VECCOPY(dvec,nor); if(dot>0.0f) { if(dot<dist_1st) { - Normalize(dvec); - VecMulf(dvec,dist_1st-dot); - VecAddf(key->co,key->co,dvec); + normalize_v3(dvec); + mul_v3_fl(dvec,dist_1st-dot); + add_v3_v3v3(key->co,key->co,dvec); } } else { - Normalize(dvec); - VecMulf(dvec,dist_1st-dot); - VecAddf(key->co,key->co,dvec); + normalize_v3(dvec); + mul_v3_fl(dvec,dist_1st-dot); + add_v3_v3v3(key->co,key->co,dvec); } if(k==1) dist_1st*=1.3333f; } } - Mat4Invert(hairimat,hairmat); + invert_m4_m4(hairimat,hairmat); LOOP_KEYS { - Mat4MulVecfl(hairimat, key->co); + mul_m4_v3(hairimat, key->co); } } } @@ -927,10 +927,10 @@ void PE_apply_lengths(Scene *scene, PTCacheEdit *edit) LOOP_EDITED_POINTS { LOOP_KEYS { if(k) { - VecSubf(dv1, key->co, (key - 1)->co); - Normalize(dv1); - VecMulf(dv1, (key - 1)->length); - VecAddf(key->co, (key - 1)->co, dv1); + sub_v3_v3v3(dv1, key->co, (key - 1)->co); + normalize_v3(dv1); + mul_v3_fl(dv1, (key - 1)->length); + add_v3_v3v3(key->co, (key - 1)->co, dv1); } } } @@ -970,19 +970,19 @@ static void pe_iterate_lengths(Scene *scene, PTCacheEdit *edit) for(; k<point->totkey; k++, key++) { if(k) { - VecSubf(dv0, (key - 1)->co, key->co); - tlen= Normalize(dv0); - VecMulf(dv0, (mul * (tlen - (key - 1)->length))); + sub_v3_v3v3(dv0, (key - 1)->co, key->co); + tlen= normalize_v3(dv0); + mul_v3_fl(dv0, (mul * (tlen - (key - 1)->length))); } if(k < point->totkey - 1) { - VecSubf(dv2, (key + 1)->co, key->co); - tlen= Normalize(dv2); - VecMulf(dv2, mul * (tlen - key->length)); + sub_v3_v3v3(dv2, (key + 1)->co, key->co); + tlen= normalize_v3(dv2); + mul_v3_fl(dv2, mul * (tlen - key->length)); } if(k) { - VecAddf((key-1)->co,(key-1)->co,dv1); + add_v3_v3v3((key-1)->co,(key-1)->co,dv1); } VECADD(dv1,dv0,dv2); @@ -1001,7 +1001,7 @@ static void recalc_lengths(PTCacheEdit *edit) LOOP_EDITED_POINTS { key= point->keys; for(k=0; k<point->totkey-1; k++, key++) { - key->length= VecLenf(key->co, (key + 1)->co); + key->length= len_v3v3(key->co, (key + 1)->co); } } } @@ -1055,12 +1055,12 @@ static void recalc_emitter_field(Object *ob, ParticleSystem *psys) VECADD(vec,vec,mvert->co); VECADD(nor,nor,mvert->no); - VecMulf(vec,0.25); + mul_v3_fl(vec,0.25); } else - VecMulf(vec,0.3333f); + mul_v3_fl(vec,0.3333f); - Normalize(nor); + normalize_v3(nor); BLI_kdtree_insert(edit->emitter_field, i, vec, NULL); } @@ -1114,7 +1114,7 @@ static void update_world_cos(Object *ob, PTCacheEdit *edit) LOOP_KEYS { VECCOPY(key->world_co,key->co); if(!(psys->flag & PSYS_GLOBAL_HAIR)) - Mat4MulVecfl(hairmat, key->world_co); + mul_m4_v3(hairmat, key->world_co); } } } @@ -1142,7 +1142,7 @@ static void update_velocities(Object *ob, PTCacheEdit *edit) if(point->totkey>2) { VECSUB(vec1, (key+1)->co, (key+2)->co); - Projf(vec2, vec1, key->vel); + project_v3_v3v3(vec2, vec1, key->vel); VECSUB(vec2, vec1, vec2); VECADDFAC(key->vel, key->vel, vec2, 0.5f); } @@ -1157,7 +1157,7 @@ static void update_velocities(Object *ob, PTCacheEdit *edit) if(point->totkey>2) { VECSUB(vec1, (key-2)->co, (key-1)->co); - Projf(vec2, vec1, key->vel); + project_v3_v3v3(vec2, vec1, key->vel); VECSUB(vec2, vec1, vec2); VECADDFAC(key->vel, key->vel, vec2, 0.5f); } @@ -1170,7 +1170,7 @@ static void update_velocities(Object *ob, PTCacheEdit *edit) VECSUB(key->vel, (key+1)->co, (key-1)->co); } - VecMulf(key->vel, frs_sec/dfra); + mul_v3_fl(key->vel, frs_sec/dfra); } } } @@ -1347,6 +1347,7 @@ int PE_mouse_particles(bContext *C, short *mval, int extend) static void select_root(PEData *data, int point_index) { data->edit->points[point_index].keys->flag |= PEK_SELECT; + data->edit->points[point_index].flag |= PEP_EDIT_RECALC; /* redraw selection only */ } static int select_first_exec(bContext *C, wmOperator *op) @@ -1355,6 +1356,8 @@ static int select_first_exec(bContext *C, wmOperator *op) PE_set_data(C, &data); foreach_point(&data, select_root); + + PE_update_selection(data.scene, data.ob, 1); WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE_SELECT, data.ob); return OPERATOR_FINISHED; @@ -1380,6 +1383,7 @@ static void select_tip(PEData *data, int point_index) { PTCacheEditPoint *point = data->edit->points + point_index; point->keys[point->totkey - 1].flag |= PEK_SELECT; + point->flag |= PEP_EDIT_RECALC; /* redraw selection only */ } static int select_last_exec(bContext *C, wmOperator *op) @@ -1388,6 +1392,8 @@ static int select_last_exec(bContext *C, wmOperator *op) PE_set_data(C, &data); foreach_point(&data, select_tip); + + PE_update_selection(data.scene, data.ob, 1); WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE_SELECT, data.ob); return OPERATOR_FINISHED; @@ -1531,7 +1537,7 @@ int PE_lasso_select(bContext *C, short mcords[][2], short moves, short select) if(!PE_start_edit(edit)) return OPERATOR_CANCELLED; - Mat4One(mat); + unit_m4(mat); LOOP_VISIBLE_POINTS { if(edit->psys && !(psys->flag & PSYS_GLOBAL_HAIR)) @@ -1540,7 +1546,7 @@ int PE_lasso_select(bContext *C, short mcords[][2], short moves, short select) if(pset->selectmode==SCE_SELECT_POINT) { LOOP_KEYS { VECCOPY(co, key->co); - Mat4MulVecfl(mat, co); + mul_m4_v3(mat, co); project_short(ar, co, vertco); if((vertco[0] != IS_CLIPPED) && lasso_inside(mcords,moves,vertco[0],vertco[1])) { if(select && !(key->flag & PEK_SELECT)) { @@ -1558,7 +1564,7 @@ int PE_lasso_select(bContext *C, short mcords[][2], short moves, short select) key= point->keys + point->totkey - 1; VECCOPY(co, key->co); - Mat4MulVecfl(mat, co); + mul_m4_v3(mat, co); project_short(ar, co,vertco); if((vertco[0] != IS_CLIPPED) && lasso_inside(mcords,moves,vertco[0],vertco[1])) { if(select && !(key->flag & PEK_SELECT)) { @@ -1693,8 +1699,10 @@ static void select_less_keys(PEData *data, int point_index) } LOOP_KEYS { - if(key->flag&PEK_TAG) + if(key->flag&PEK_TAG) { key->flag &= ~(PEK_TAG|PEK_SELECT); + point->flag |= PEP_EDIT_RECALC; /* redraw selection only */ + } } } @@ -1704,6 +1712,8 @@ static int select_less_exec(bContext *C, wmOperator *op) PE_set_data(C, &data); foreach_point(&data, select_less_keys); + + PE_update_selection(data.scene, data.ob, 1); WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE_SELECT, data.ob); return OPERATOR_FINISHED; @@ -1752,6 +1762,7 @@ static void select_more_keys(PEData *data, int point_index) if(key->flag&PEK_TAG) { key->flag &= ~PEK_TAG; key->flag |= PEK_SELECT; + point->flag |= PEP_EDIT_RECALC; /* redraw selection only */ } } } @@ -1762,6 +1773,8 @@ static int select_more_exec(bContext *C, wmOperator *op) PE_set_data(C, &data); foreach_point(&data, select_more_keys); + + PE_update_selection(data.scene, data.ob, 1); WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE_SELECT, data.ob); return OPERATOR_FINISHED; @@ -1781,6 +1794,43 @@ void PARTICLE_OT_select_more(wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } +static int select_inverse_exec(bContext *C, wmOperator *op) +{ + PEData data; + PTCacheEdit *edit; + POINT_P; KEY_K; + + PE_set_data(C, &data); + + edit= PE_get_current(data.scene, data.ob); + + LOOP_VISIBLE_POINTS { + LOOP_KEYS { + key->flag ^= PEK_SELECT; + point->flag |= PEP_EDIT_RECALC; /* redraw selection only */ + } + } + + PE_update_selection(data.scene, data.ob, 1); + WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE_SELECT, data.ob); + + return OPERATOR_FINISHED; +} + +void PARTICLE_OT_select_inverse(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Select Inverse"; + ot->idname= "PARTICLE_OT_select_inverse"; + + /* api callbacks */ + ot->exec= select_inverse_exec; + ot->poll= PE_poll; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + /************************ rekey operator ************************/ static void rekey_particle(PEData *data, int pa_index) @@ -2205,7 +2255,7 @@ static int remove_doubles_exec(bContext *C, wmOperator *op) LOOP_SELECTED_POINTS { psys_mat_hair_to_object(ob, psmd->dm, psys->part->from, psys->particles+p, mat); VECCOPY(co, point->keys->co); - Mat4MulVecfl(mat, co); + mul_m4_v3(mat, co); BLI_kdtree_insert(tree, p, co, NULL); } @@ -2215,7 +2265,7 @@ static int remove_doubles_exec(bContext *C, wmOperator *op) LOOP_SELECTED_POINTS { psys_mat_hair_to_object(ob, psmd->dm, psys->part->from, psys->particles+p, mat); VECCOPY(co, point->keys->co); - Mat4MulVecfl(mat, co); + mul_m4_v3(mat, co); totn= BLI_kdtree_find_n_nearest(tree,10,co,NULL,nearest); @@ -2686,8 +2736,8 @@ static void brush_comb(PEData *data, float mat[][4], float imat[][4], int point_ fac= (float)pow((double)(1.0f - data->dist / data->rad), (double)data->combfac); VECCOPY(cvec,data->dvec); - Mat4Mul3Vecfl(imat,cvec); - VecMulf(cvec, fac); + mul_mat3_m4_v3(imat,cvec); + mul_v3_fl(cvec, fac); VECADD(key->co, key->co, cvec); (data->edit->points + point_index)->flag |= PEP_EDIT_RECALC; @@ -2804,7 +2854,7 @@ static void brush_length(PEData *data, int point_index) else { VECSUB(dvec,key->co,pvec); VECCOPY(pvec,key->co); - VecMulf(dvec,data->growfac); + mul_v3_fl(dvec,data->growfac); VECADD(key->co,(key-1)->co,dvec); } } @@ -2823,25 +2873,25 @@ static void brush_puff(PEData *data, int point_index) if(psys && !(psys->flag & PSYS_GLOBAL_HAIR)) { psys_mat_hair_to_global(data->ob, data->dm, psys->part->from, psys->particles + point_index, mat); - Mat4Invert(imat,mat); + invert_m4_m4(imat,mat); } else { - Mat4One(mat); - Mat4One(imat); + unit_m4(mat); + unit_m4(imat); } LOOP_KEYS { if(k==0) { /* find root coordinate and normal on emitter */ VECCOPY(co, key->co); - Mat4MulVecfl(mat, co); + mul_m4_v3(mat, co); point_index= BLI_kdtree_find_nearest(edit->emitter_field, co, NULL, NULL); if(point_index == -1) return; VECCOPY(rootco, co); - VecCopyf(nor, &edit->emitter_cosnos[point_index*6+3]); - Normalize(nor); + copy_v3_v3(nor, &edit->emitter_cosnos[point_index*6+3]); + normalize_v3(nor); length= 0.0f; fac= (float)pow((double)(1.0f - data->dist / data->rad), (double)data->pufffac); @@ -2853,8 +2903,8 @@ static void brush_puff(PEData *data, int point_index) /* compute position as if hair was standing up straight */ VECCOPY(lastco, co); VECCOPY(co, key->co); - Mat4MulVecfl(mat, co); - length += VecLenf(lastco, co); + mul_m4_v3(mat, co); + length += len_v3v3(lastco, co); VECADDFAC(kco, rootco, nor, length); @@ -2863,7 +2913,7 @@ static void brush_puff(PEData *data, int point_index) VECADDFAC(co, co, dco, fac); VECCOPY(key->co, co); - Mat4MulVecfl(imat, key->co); + mul_m4_v3(imat, key->co); } } @@ -2875,8 +2925,8 @@ static void brush_smooth_get(PEData *data, float mat[][4], float imat[][4], int if(key_index) { float dvec[3]; - VecSubf(dvec,key->co,(key-1)->co); - Mat4Mul3Vecfl(mat,dvec); + sub_v3_v3v3(dvec,key->co,(key-1)->co); + mul_mat3_m4_v3(mat,dvec); VECADD(data->vec,data->vec,dvec); data->tot++; } @@ -2888,12 +2938,12 @@ static void brush_smooth_do(PEData *data, float mat[][4], float imat[][4], int p if(key_index) { VECCOPY(vec,data->vec); - Mat4Mul3Vecfl(imat,vec); + mul_mat3_m4_v3(imat,vec); - VecSubf(dvec,key->co,(key-1)->co); + sub_v3_v3v3(dvec,key->co,(key-1)->co); VECSUB(dvec,vec,dvec); - VecMulf(dvec,data->smoothfac); + mul_v3_fl(dvec,data->smoothfac); VECADD(key->co,key->co,dvec); } @@ -2919,7 +2969,7 @@ static int brush_add(PEData *data, short number) short size= pset->brush[PE_BRUSH_ADD].size; short size2= size*size; DerivedMesh *dm=0; - Mat4Invert(imat,ob->obmat); + invert_m4_m4(imat,ob->obmat); if(psys->flag & PSYS_GLOBAL_HAIR) return 0; @@ -2945,8 +2995,8 @@ static int brush_add(PEData *data, short number) mco[1]= data->mval[1] + dmy; viewline(data->vc.ar, data->vc.v3d, mco, co1, co2); - Mat4MulVecfl(imat,co1); - Mat4MulVecfl(imat,co2); + mul_m4_v3(imat,co1); + mul_m4_v3(imat,co2); min_d=2.0; /* warning, returns the derived mesh face */ @@ -3052,18 +3102,18 @@ static int brush_add(PEData *data, short number) key[0].time= hkey->time/ 100.0f; psys_get_particle_on_path(&sim, ptn[0].index, key, 0); - VecMulf(key[0].co, weight[0]); + mul_v3_fl(key[0].co, weight[0]); if(maxw>1) { key[1].time= key[0].time; psys_get_particle_on_path(&sim, ptn[1].index, key + 1, 0); - VecMulf(key[1].co, weight[1]); + mul_v3_fl(key[1].co, weight[1]); VECADD(key[0].co, key[0].co, key[1].co); if(maxw>2) { key[2].time= key[0].time; psys_get_particle_on_path(&sim, ptn[2].index, key + 2, 0); - VecMulf(key[2].co, weight[2]); + mul_v3_fl(key[2].co, weight[2]); VECADD(key[0].co, key[0].co, key[2].co); } } @@ -3084,8 +3134,8 @@ static int brush_add(PEData *data, short number) } for(k=0, hkey=pa->hair; k<pset->totaddkey; k++, hkey++) { psys_mat_hair_to_global(ob, psmd->dm, psys->part->from, pa, hairmat); - Mat4Invert(imat,hairmat); - Mat4MulVecfl(imat, hkey->co); + invert_m4_m4(imat,hairmat); + mul_m4_v3(imat, hkey->co); } } @@ -3200,7 +3250,7 @@ static void brush_edit_apply(bContext *C, wmOperator *op, PointerRNA *itemptr) else data.combfac= 1.0f - data.combfac; - Mat4Invert(ob->imat, ob->obmat); + invert_m4_m4(ob->imat, ob->obmat); window_to_3d_delta(ar, vec, dx, dy); data.dvec= vec; @@ -3270,7 +3320,7 @@ static void brush_edit_apply(bContext *C, wmOperator *op, PointerRNA *itemptr) data.pufffac= 1.0f - data.pufffac; data.invert= (brush->invert ^ flip); - Mat4Invert(ob->imat, ob->obmat); + invert_m4_m4(ob->imat, ob->obmat); foreach_mouse_hit_point(&data, brush_puff, selected); } @@ -3306,12 +3356,12 @@ static void brush_edit_apply(bContext *C, wmOperator *op, PointerRNA *itemptr) data.smoothfac= (float)(brush->strength / 100.0f); - Mat4Invert(ob->imat, ob->obmat); + invert_m4_m4(ob->imat, ob->obmat); foreach_mouse_hit_key(&data, brush_smooth_get, selected); if(data.tot) { - VecMulf(data.vec, 1.0f / (float)data.tot); + mul_v3_fl(data.vec, 1.0f / (float)data.tot); foreach_mouse_hit_key(&data, brush_smooth_do, selected); } @@ -3734,7 +3784,7 @@ int PE_minmax(Scene *scene, float *min, float *max) if(psys) psmd= psys_get_modifier(ob, psys); else - Mat4One(mat); + unit_m4(mat); LOOP_VISIBLE_POINTS { if(psys) @@ -3742,7 +3792,7 @@ int PE_minmax(Scene *scene, float *min, float *max) LOOP_SELECTED_KEYS { VECCOPY(co, key->co); - Mat4MulVecfl(mat, co); + mul_m4_v3(mat, co); DO_MINMAX(co, min, max); ok= 1; } diff --git a/source/blender/editors/physics/particle_object.c b/source/blender/editors/physics/particle_object.c index d227591739b..1ef3ffa6c34 100644 --- a/source/blender/editors/physics/particle_object.c +++ b/source/blender/editors/physics/particle_object.c @@ -37,7 +37,7 @@ #include "DNA_scene_types.h" #include "DNA_windowmanager_types.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_listbase.h" #include "BKE_context.h" @@ -93,11 +93,20 @@ static int particle_system_remove_exec(bContext *C, wmOperator *op) { Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data; Scene *scene = CTX_data_scene(C); - + int mode_orig = ob->mode; if(!scene || !ob) return OPERATOR_CANCELLED; object_remove_particle_system(scene, ob); + + /* possible this isn't the active object + * object_remove_particle_system() clears the mode on the last psys + * */ + if(mode_orig & OB_MODE_PARTICLE_EDIT) + if((ob->mode & OB_MODE_PARTICLE_EDIT)==0) + if(scene->basact && scene->basact->object==ob) + WM_event_add_notifier(C, NC_SCENE|ND_MODE|NS_MODE_OBJECT, NULL); + WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); return OPERATOR_FINISHED; @@ -539,7 +548,7 @@ static void disconnect_hair(Scene *scene, Object *ob, ParticleSystem *psys) psys_mat_hair_to_global(ob, psmd->dm, psys->part->from, pa, hairmat); for(k=0,key=pa->hair; k<pa->totkey; k++,key++) { - Mat4MulVecfl(hairmat,key->co); + mul_m4_v3(hairmat,key->co); if(ekey) { ekey->flag &= ~PEK_USE_WCO; @@ -629,7 +638,7 @@ static void connect_hair(Scene *scene, Object *ob, ParticleSystem *psys) /* convert to global coordinates */ for (i=0; i<numverts; i++) - Mat4MulVecfl (ob->obmat, CDDM_get_vert(dm, i)->co); + mul_m4_v3(ob->obmat, CDDM_get_vert(dm, i)->co); bvhtree_from_mesh_faces(&bvhtree, dm, 0.0, 2, 6); @@ -648,21 +657,21 @@ static void connect_hair(Scene *scene, Object *ob, ParticleSystem *psys) mface = CDDM_get_face(dm,nearest.index); - VecCopyf(v[0], CDDM_get_vert(dm,mface->v1)->co); - VecCopyf(v[1], CDDM_get_vert(dm,mface->v2)->co); - VecCopyf(v[2], CDDM_get_vert(dm,mface->v3)->co); + copy_v3_v3(v[0], CDDM_get_vert(dm,mface->v1)->co); + copy_v3_v3(v[1], CDDM_get_vert(dm,mface->v2)->co); + copy_v3_v3(v[2], CDDM_get_vert(dm,mface->v3)->co); if(mface->v4) { - VecCopyf(v[3], CDDM_get_vert(dm,mface->v4)->co); - MeanValueWeights(v, 4, nearest.co, pa->fuv); + copy_v3_v3(v[3], CDDM_get_vert(dm,mface->v4)->co); + interp_weights_poly_v3( pa->fuv,v, 4, nearest.co); } else - MeanValueWeights(v, 3, nearest.co, pa->fuv); + interp_weights_poly_v3( pa->fuv,v, 3, nearest.co); pa->num = nearest.index; pa->num_dmcache = psys_particle_dm_face_lookup(ob,psmd->dm,pa->num,pa->fuv,NULL); psys_mat_hair_to_global(ob, psmd->dm, psys->part->from, pa, hairmat); - Mat4Invert(imat,hairmat); + invert_m4_m4(imat,hairmat); VECSUB(vec, nearest.co, key->co); @@ -673,7 +682,7 @@ static void connect_hair(Scene *scene, Object *ob, ParticleSystem *psys) for(k=0,key=pa->hair; k<pa->totkey; k++,key++) { VECADD(key->co, key->co, vec); - Mat4MulVecfl(imat,key->co); + mul_m4_v3(imat,key->co); if(ekey) { ekey->flag |= PEK_USE_WCO; diff --git a/source/blender/editors/physics/physics_fluid.c b/source/blender/editors/physics/physics_fluid.c index b72c4991094..e5d553dacc7 100644 --- a/source/blender/editors/physics/physics_fluid.c +++ b/source/blender/editors/physics/physics_fluid.c @@ -62,7 +62,7 @@ #include "BLI_blenlib.h" #include "BLI_threads.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BKE_blender.h" #include "BKE_context.h" @@ -839,8 +839,8 @@ int fluidsimBake(bContext *C, ReportList *reports, Object *ob) } // init trafo matrix - Mat4CpyMat4(domainMat, fsDomain->obmat); - if(!Mat4Invert(invDomMat, domainMat)) { + copy_m4_m4(domainMat, fsDomain->obmat); + if(!invert_m4_m4(invDomMat, domainMat)) { snprintf(debugStrBuffer,256,"fluidsimBake::error - Invalid obj matrix?\n"); elbeemDebugOut(debugStrBuffer); BKE_report(reports, RPT_ERROR, "Invalid object matrix."); diff --git a/source/blender/editors/physics/physics_intern.h b/source/blender/editors/physics/physics_intern.h index babaaefe155..e8169adc8dc 100644 --- a/source/blender/editors/physics/physics_intern.h +++ b/source/blender/editors/physics/physics_intern.h @@ -42,6 +42,7 @@ void PARTICLE_OT_select_last(struct wmOperatorType *ot); void PARTICLE_OT_select_linked(struct wmOperatorType *ot); void PARTICLE_OT_select_less(struct wmOperatorType *ot); void PARTICLE_OT_select_more(struct wmOperatorType *ot); +void PARTICLE_OT_select_inverse(struct wmOperatorType *ot); void PARTICLE_OT_hide(struct wmOperatorType *ot); void PARTICLE_OT_reveal(struct wmOperatorType *ot); diff --git a/source/blender/editors/physics/physics_ops.c b/source/blender/editors/physics/physics_ops.c index 8fb91a6c296..1b9ebf27edc 100644 --- a/source/blender/editors/physics/physics_ops.c +++ b/source/blender/editors/physics/physics_ops.c @@ -49,6 +49,7 @@ static void operatortypes_particle(void) WM_operatortype_append(PARTICLE_OT_select_linked); WM_operatortype_append(PARTICLE_OT_select_less); WM_operatortype_append(PARTICLE_OT_select_more); + WM_operatortype_append(PARTICLE_OT_select_inverse); WM_operatortype_append(PARTICLE_OT_hide); WM_operatortype_append(PARTICLE_OT_reveal); @@ -98,6 +99,7 @@ static void keymap_particle(wmKeyConfig *keyconf) WM_keymap_add_item(keymap, "PARTICLE_OT_select_less", PADMINUS, KM_PRESS, KM_CTRL, 0); WM_keymap_add_item(keymap, "PARTICLE_OT_select_linked", LKEY, KM_PRESS, 0, 0); RNA_boolean_set(WM_keymap_add_item(keymap, "PARTICLE_OT_select_linked", LKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "deselect", 1); + WM_keymap_add_item(keymap, "PARTICLE_OT_select_inverse", IKEY, KM_PRESS, KM_CTRL, 0); WM_keymap_add_item(keymap, "PARTICLE_OT_delete", XKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "PARTICLE_OT_delete", DELKEY, KM_PRESS, 0, 0); diff --git a/source/blender/editors/render/render_preview.c b/source/blender/editors/render/render_preview.c index 92380a56d3d..74e1cca5579 100644 --- a/source/blender/editors/render/render_preview.c +++ b/source/blender/editors/render/render_preview.c @@ -42,7 +42,7 @@ #include "BLO_readfile.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_threads.h" diff --git a/source/blender/editors/render/render_shading.c b/source/blender/editors/render/render_shading.c index a9023194271..59b220dec63 100644 --- a/source/blender/editors/render/render_shading.c +++ b/source/blender/editors/render/render_shading.c @@ -52,7 +52,7 @@ #include "BKE_utildefines.h" #include "BKE_world.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_editVert.h" #include "BLI_listbase.h" diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c index be76e153fae..0f22b3041fb 100644 --- a/source/blender/editors/screen/area.c +++ b/source/blender/editors/screen/area.c @@ -35,7 +35,7 @@ #include "DNA_userdef_types.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_rand.h" #include "BKE_context.h" diff --git a/source/blender/editors/screen/glutil.c b/source/blender/editors/screen/glutil.c index 1445c6b5cf8..742fab07bcc 100644 --- a/source/blender/editors/screen/glutil.c +++ b/source/blender/editors/screen/glutil.c @@ -37,7 +37,7 @@ #include "BKE_utildefines.h" #include "BKE_colortools.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_threads.h" #include "BIF_gl.h" diff --git a/source/blender/editors/screen/screen_context.c b/source/blender/editors/screen/screen_context.c index 130ffeb412a..1672f8f3325 100644 --- a/source/blender/editors/screen/screen_context.c +++ b/source/blender/editors/screen/screen_context.c @@ -67,7 +67,7 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult "visible_pchans", "selected_pchans", "active_bone", "active_pchan", "active_base", "active_object", "edit_object", "sculpt_object", "vertex_paint_object", "weight_paint_object", - "texture_paint_object", "brush", "particle_edit_object", NULL}; + "texture_paint_object", "particle_edit_object", NULL}; CTX_data_dir_set(result, dir); return 1; @@ -84,7 +84,7 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult if(selected_objects) CTX_data_id_list_add(result, &base->object->id); else - CTX_data_list_add(result, &scene->id, &RNA_UnknownType, base); + CTX_data_list_add(result, &scene->id, &RNA_ObjectBase, base); } } @@ -100,7 +100,7 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult if(selected_editable_objects) CTX_data_id_list_add(result, &base->object->id); else - CTX_data_list_add(result, &scene->id, &RNA_UnknownType, base); + CTX_data_list_add(result, &scene->id, &RNA_ObjectBase, base); } } } @@ -131,18 +131,18 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult if (editable_bones) { /* only selected + editable */ if (EBONE_EDITABLE(ebone)) { - CTX_data_list_add(result, &arm->id, &RNA_UnknownType, ebone); + CTX_data_list_add(result, &arm->id, &RNA_EditBone, ebone); if ((flipbone) && !(flipbone->flag & BONE_SELECTED)) - CTX_data_list_add(result, &arm->id, &RNA_UnknownType, flipbone); + CTX_data_list_add(result, &arm->id, &RNA_EditBone, flipbone); } } else { /* only include bones if visible */ - CTX_data_list_add(result, &arm->id, &RNA_UnknownType, ebone); + CTX_data_list_add(result, &arm->id, &RNA_EditBone, ebone); if ((flipbone) && EBONE_VISIBLE(arm, flipbone)==0) - CTX_data_list_add(result, &arm->id, &RNA_UnknownType, flipbone); + CTX_data_list_add(result, &arm->id, &RNA_EditBone, flipbone); } } } @@ -173,18 +173,18 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult if (selected_editable_bones) { /* only selected + editable */ if (EBONE_EDITABLE(ebone)) { - CTX_data_list_add(result, &arm->id, &RNA_UnknownType, ebone); + CTX_data_list_add(result, &arm->id, &RNA_EditBone, ebone); if ((flipbone) && !(flipbone->flag & BONE_SELECTED)) - CTX_data_list_add(result, &arm->id, &RNA_UnknownType, flipbone); + CTX_data_list_add(result, &arm->id, &RNA_EditBone, flipbone); } } else { /* only include bones if selected */ - CTX_data_list_add(result, &arm->id, &RNA_UnknownType, ebone); + CTX_data_list_add(result, &arm->id, &RNA_EditBone, ebone); if ((flipbone) && !(flipbone->flag & BONE_SELECTED)) - CTX_data_list_add(result, &arm->id, &RNA_UnknownType, flipbone); + CTX_data_list_add(result, &arm->id, &RNA_EditBone, flipbone); } } } @@ -196,7 +196,7 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult bArmature *arm= (obact) ? obact->data : NULL; bPoseChannel *pchan; - if (obact && arm) { + if (obact && obact->pose && arm) { for (pchan= obact->pose->chanbase.first; pchan; pchan= pchan->next) { /* ensure that PoseChannel is on visible layer and is not hidden in PoseMode */ if ((pchan->bone) && (arm->layer & pchan->bone->layer) && !(pchan->bone->flag & BONE_HIDDEN_P)) { @@ -211,11 +211,11 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult bArmature *arm= (obact) ? obact->data : NULL; bPoseChannel *pchan; - if (obact && arm) { + if (obact && obact->pose && arm) { for (pchan= obact->pose->chanbase.first; pchan; pchan= pchan->next) { /* ensure that PoseChannel is on visible layer and is not hidden in PoseMode */ if ((pchan->bone) && (arm->layer & pchan->bone->layer) && !(pchan->bone->flag & BONE_HIDDEN_P)) { - if (pchan->bone->flag & (BONE_SELECTED|BONE_ACTIVE)) + if (pchan->bone->flag & BONE_SELECTED || pchan->bone == arm->act_bone) CTX_data_list_add(result, &obact->id, &RNA_PoseChannel, pchan); } } @@ -224,21 +224,21 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult } } else if(CTX_data_equals(member, "active_bone")) { - bArmature *arm= (obedit) ? obedit->data : NULL; - EditBone *ebone; - - if (arm && arm->edbo) { - for (ebone= arm->edbo->first; ebone; ebone= ebone->next) { - if (EBONE_VISIBLE(arm, ebone)) { - if (ebone->flag & BONE_ACTIVE) { - CTX_data_pointer_set(result, &arm->id, &RNA_UnknownType, ebone); - - return 1; - } + if(obact && obact->type == OB_ARMATURE) { + bArmature *arm= obact->data; + if(arm->edbo) { + if(arm->act_edbone) { + CTX_data_pointer_set(result, &arm->id, &RNA_EditBone, arm->act_edbone); + return 1; + } + } + else { + if(arm->act_bone) { + CTX_data_pointer_set(result, &arm->id, &RNA_Bone, arm->act_bone); + return 1; } } } - } else if(CTX_data_equals(member, "active_pchan")) { bPoseChannel *pchan; @@ -251,7 +251,7 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult } else if(CTX_data_equals(member, "active_base")) { if(base) - CTX_data_pointer_set(result, &scene->id, &RNA_UnknownType, base); + CTX_data_pointer_set(result, &scene->id, &RNA_ObjectBase, base); return 1; } @@ -304,7 +304,10 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult return 1; } + else { + return 0; /* not found */ + } - return 0; + return -1; /* found but not available */ } diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c index eb8fa66670c..acf5bcd739e 100644 --- a/source/blender/editors/screen/screen_edit.c +++ b/source/blender/editors/screen/screen_edit.c @@ -54,6 +54,8 @@ #include "ED_screen.h" #include "ED_screen_types.h" +#include "UI_interface.h" + /* XXX actually should be not here... solve later */ #include "wm_subwindow.h" @@ -1416,6 +1418,15 @@ void ED_screen_delete_scene(bContext *C, Scene *scene) ScrArea *ed_screen_fullarea(bContext *C, wmWindow *win, ScrArea *sa) { bScreen *sc, *oldscreen; + ARegion *ar; + + if(sa) { + /* ensure we don't have a button active anymore, can crash when + switching screens with tooltip open because region and tooltip + are no longer in the same screen */ + for(ar=sa->regionbase.first; ar; ar=ar->next) + uiFreeBlocks(C, &ar->uiblocks); + } if(sa && sa->full) { short fulltype; diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index a1537b2ddf5..0df7b326834 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -31,7 +31,7 @@ #include "MEM_guardedalloc.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_editVert.h" #include "BLI_dlrbTree.h" @@ -400,7 +400,7 @@ AZone *is_in_area_actionzone(ScrArea *sa, int x, int y) for(az= sa->actionzones.first; az; az= az->next) { if(BLI_in_rcti(&az->rect, x, y)) { if(az->type == AZONE_AREA) { - if(IsPointInTri2DInts(az->x1, az->y1, az->x2, az->y2, x, y)) + if(isect_point_tri_v2_int(az->x1, az->y1, az->x2, az->y2, x, y)) break; } else if(az->type == AZONE_REGION) { @@ -2232,7 +2232,7 @@ static int screen_animation_step(bContext *C, wmOperator *op, wmEvent *event) ScreenAnimData *sad= wt->customdata; ScrArea *sa; int sync; - + /* sync, don't sync, or follow scene setting */ if(sad->flag & ANIMPLAY_FLAG_SYNC) sync= 1; else if(sad->flag & ANIMPLAY_FLAG_NO_SYNC) sync= 0; @@ -2288,12 +2288,12 @@ static int screen_animation_step(bContext *C, wmOperator *op, wmEvent *event) } } } - + /* since we follow drawflags, we can't send notifier but tag regions ourselves */ ED_update_for_newframe(C, 1); - + sound_update_playing(C); - + for(sa= screen->areabase.first; sa; sa= sa->next) { ARegion *ar; for(ar= sa->regionbase.first; ar; ar= ar->next) { @@ -2305,6 +2305,12 @@ static int screen_animation_step(bContext *C, wmOperator *op, wmEvent *event) } } + /* recalculate the timestep for the timer now that we've finished calculating this, + * since the frames-per-second value may have been changed + */ + // TODO: this may make evaluation a bit slower if the value doesn't change... any way to avoid this? + wt->timestep= (1.0/FPS); + //WM_event_add_notifier(C, NC_SCENE|ND_FRAME, scene); return OPERATOR_FINISHED; @@ -2672,7 +2678,7 @@ static int screen_render_exec(bContext *C, wmOperator *op) RE_test_break_cb(re, NULL, (int (*)(void *)) blender_test_break); if(RNA_boolean_get(op->ptr, "animation")) - RE_BlenderAnim(re, scene, scene->r.sfra, scene->r.efra, scene->frame_step); + RE_BlenderAnim(re, scene, scene->r.sfra, scene->r.efra, scene->r.frame_step); else RE_BlenderFrame(re, scene, scene->r.cfra); @@ -2892,7 +2898,7 @@ static void render_startjob(void *rjv, short *stop, short *do_update) rj->do_update= do_update; if(rj->anim) - RE_BlenderAnim(rj->re, rj->scene, rj->scene->r.sfra, rj->scene->r.efra, rj->scene->frame_step); + RE_BlenderAnim(rj->re, rj->scene, rj->scene->r.sfra, rj->scene->r.efra, rj->scene->r.frame_step); else RE_BlenderFrame(rj->re, rj->scene, rj->scene->r.cfra); } @@ -3245,7 +3251,7 @@ static int screen_opengl_render_modal(bContext *C, wmOperator *op, wmEvent *even printf("\n"); /* go to next frame */ - oglrender->nfra += scene->frame_step; + oglrender->nfra += scene->r.frame_step; scene->r.cfra++; WM_event_add_notifier(C, NC_SCENE|ND_RENDER_RESULT, oglrender->scene); diff --git a/source/blender/editors/sculpt_paint/paint_image.c b/source/blender/editors/sculpt_paint/paint_image.c index d8c4d505fc9..a411b0b021d 100644 --- a/source/blender/editors/sculpt_paint/paint_image.c +++ b/source/blender/editors/sculpt_paint/paint_image.c @@ -40,7 +40,7 @@ #ifdef WIN32 #include "BLI_winstuff.h" #endif -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_dynstr.h" #include "BLI_linklist.h" @@ -554,7 +554,7 @@ static int project_paint_PickFace(const ProjPaintState *ps, float pt[2], float w v2= ps->screenCoords[mf->v2]; v3= ps->screenCoords[mf->v3]; - if (IsectPT2Df(pt, v1, v2, v3)) { + if (isect_point_tri_v2(pt, v1, v2, v3)) { if (ps->is_ortho) z_depth= VecZDepthOrtho(pt, v1, v2, v3, w_tmp); else z_depth= VecZDepthPersp(pt, v1, v2, v3, w_tmp); @@ -568,7 +568,7 @@ static int project_paint_PickFace(const ProjPaintState *ps, float pt[2], float w else if (mf->v4) { v4= ps->screenCoords[mf->v4]; - if (IsectPT2Df(pt, v1, v3, v4)) { + if (isect_point_tri_v2(pt, v1, v3, v4)) { if (ps->is_ortho) z_depth= VecZDepthOrtho(pt, v1, v3, v4, w_tmp); else z_depth= VecZDepthPersp(pt, v1, v3, v4, w_tmp); @@ -619,10 +619,10 @@ static int project_paint_PickColor(const ProjPaintState *ps, float pt[2], float tf = ps->dm_mtface + face_index; if (side == 0) { - Vec2Lerp3f(uv, tf->uv[0], tf->uv[1], tf->uv[2], w); + interp_v2_v2v2v2(uv, tf->uv[0], tf->uv[1], tf->uv[2], w); } else { /* QUAD */ - Vec2Lerp3f(uv, tf->uv[0], tf->uv[2], tf->uv[3], w); + interp_v2_v2v2v2(uv, tf->uv[0], tf->uv[2], tf->uv[3], w); } ibuf = tf->tpage->ibufs.first; /* we must have got the imbuf before getting here */ @@ -703,7 +703,7 @@ static int project_paint_occlude_ptv(float pt[3], float v1[3], float v2[3], floa return 0; /* do a 2D point in try intersection */ - if (!IsectPT2Df(pt, v1, v2, v3)) + if (!isect_point_tri_v2(pt, v1, v2, v3)) return 0; /* we know there is */ @@ -743,10 +743,10 @@ static int project_paint_occlude_ptv_clip( } /* Test if we're in the clipped area, */ - if (side) VecLerp3f(wco, ps->dm_mvert[mf->v1].co, ps->dm_mvert[mf->v3].co, ps->dm_mvert[mf->v4].co, w); - else VecLerp3f(wco, ps->dm_mvert[mf->v1].co, ps->dm_mvert[mf->v2].co, ps->dm_mvert[mf->v3].co, w); + if (side) interp_v3_v3v3v3(wco, ps->dm_mvert[mf->v1].co, ps->dm_mvert[mf->v3].co, ps->dm_mvert[mf->v4].co, w); + else interp_v3_v3v3v3(wco, ps->dm_mvert[mf->v1].co, ps->dm_mvert[mf->v2].co, ps->dm_mvert[mf->v3].co, w); - Mat4MulVecfl(ps->ob->obmat, wco); + mul_m4_v3(ps->ob->obmat, wco); if(!view3d_test_clipping(ps->rv3d, wco)) { return 1; } @@ -1047,51 +1047,51 @@ static void uv_image_outset(float (*orig_uv)[2], float (*outset_uv)[2], const fl } /* face edge directions */ - Vec2Subf(dir1, puv[1], puv[0]); - Vec2Subf(dir2, puv[2], puv[1]); - Normalize2(dir1); - Normalize2(dir2); + sub_v2_v2v2(dir1, puv[1], puv[0]); + sub_v2_v2v2(dir2, puv[2], puv[1]); + normalize_v2(dir1); + normalize_v2(dir2); if (is_quad) { - Vec2Subf(dir3, puv[3], puv[2]); - Vec2Subf(dir4, puv[0], puv[3]); - Normalize2(dir3); - Normalize2(dir4); + sub_v2_v2v2(dir3, puv[3], puv[2]); + sub_v2_v2v2(dir4, puv[0], puv[3]); + normalize_v2(dir3); + normalize_v2(dir4); } else { - Vec2Subf(dir3, puv[0], puv[2]); - Normalize2(dir3); + sub_v2_v2v2(dir3, puv[0], puv[2]); + normalize_v2(dir3); } if (is_quad) { - a1 = AngleToLength(NormalizedVecAngle2_2D(dir4, dir1)); - a2 = AngleToLength(NormalizedVecAngle2_2D(dir1, dir2)); - a3 = AngleToLength(NormalizedVecAngle2_2D(dir2, dir3)); - a4 = AngleToLength(NormalizedVecAngle2_2D(dir3, dir4)); + a1 = shell_angle_to_dist(angle_normalized_v2v2(dir4, dir1)); + a2 = shell_angle_to_dist(angle_normalized_v2v2(dir1, dir2)); + a3 = shell_angle_to_dist(angle_normalized_v2v2(dir2, dir3)); + a4 = shell_angle_to_dist(angle_normalized_v2v2(dir3, dir4)); } else { - a1 = AngleToLength(NormalizedVecAngle2_2D(dir3, dir1)); - a2 = AngleToLength(NormalizedVecAngle2_2D(dir1, dir2)); - a3 = AngleToLength(NormalizedVecAngle2_2D(dir2, dir3)); + a1 = shell_angle_to_dist(angle_normalized_v2v2(dir3, dir1)); + a2 = shell_angle_to_dist(angle_normalized_v2v2(dir1, dir2)); + a3 = shell_angle_to_dist(angle_normalized_v2v2(dir2, dir3)); } if (is_quad) { - Vec2Subf(no1, dir4, dir1); - Vec2Subf(no2, dir1, dir2); - Vec2Subf(no3, dir2, dir3); - Vec2Subf(no4, dir3, dir4); - Normalize2(no1); - Normalize2(no2); - Normalize2(no3); - Normalize2(no4); - Vec2Mulf(no1, a1*scaler); - Vec2Mulf(no2, a2*scaler); - Vec2Mulf(no3, a3*scaler); - Vec2Mulf(no4, a4*scaler); - Vec2Addf(outset_uv[0], puv[0], no1); - Vec2Addf(outset_uv[1], puv[1], no2); - Vec2Addf(outset_uv[2], puv[2], no3); - Vec2Addf(outset_uv[3], puv[3], no4); + sub_v2_v2v2(no1, dir4, dir1); + sub_v2_v2v2(no2, dir1, dir2); + sub_v2_v2v2(no3, dir2, dir3); + sub_v2_v2v2(no4, dir3, dir4); + normalize_v2(no1); + normalize_v2(no2); + normalize_v2(no3); + normalize_v2(no4); + mul_v2_fl(no1, a1*scaler); + mul_v2_fl(no2, a2*scaler); + mul_v2_fl(no3, a3*scaler); + mul_v2_fl(no4, a4*scaler); + add_v2_v2v2(outset_uv[0], puv[0], no1); + add_v2_v2v2(outset_uv[1], puv[1], no2); + add_v2_v2v2(outset_uv[2], puv[2], no3); + add_v2_v2v2(outset_uv[3], puv[3], no4); outset_uv[0][0] *= ibuf_x_inv; outset_uv[0][1] *= ibuf_y_inv; @@ -1105,18 +1105,18 @@ static void uv_image_outset(float (*orig_uv)[2], float (*outset_uv)[2], const fl outset_uv[3][1] *= ibuf_y_inv; } else { - Vec2Subf(no1, dir3, dir1); - Vec2Subf(no2, dir1, dir2); - Vec2Subf(no3, dir2, dir3); - Normalize2(no1); - Normalize2(no2); - Normalize2(no3); - Vec2Mulf(no1, a1*scaler); - Vec2Mulf(no2, a2*scaler); - Vec2Mulf(no3, a3*scaler); - Vec2Addf(outset_uv[0], puv[0], no1); - Vec2Addf(outset_uv[1], puv[1], no2); - Vec2Addf(outset_uv[2], puv[2], no3); + sub_v2_v2v2(no1, dir3, dir1); + sub_v2_v2v2(no2, dir1, dir2); + sub_v2_v2v2(no3, dir2, dir3); + normalize_v2(no1); + normalize_v2(no2); + normalize_v2(no3); + mul_v2_fl(no1, a1*scaler); + mul_v2_fl(no2, a2*scaler); + mul_v2_fl(no3, a3*scaler); + add_v2_v2v2(outset_uv[0], puv[0], no1); + add_v2_v2v2(outset_uv[1], puv[1], no2); + add_v2_v2v2(outset_uv[2], puv[2], no3); outset_uv[0][0] *= ibuf_x_inv; outset_uv[0][1] *= ibuf_y_inv; @@ -1173,7 +1173,7 @@ static float lambda_cp_line2(const float p[2], const float l1[2], const float l2 h[0] = p[0] - l1[0]; h[1] = p[1] - l1[1]; - return(Inp2f(u, h)/Inp2f(u, u)); + return(dot_v2v2(u, h)/dot_v2v2(u, u)); } @@ -1189,7 +1189,7 @@ static void screen_px_from_ortho( float w[3]) { BarycentricWeights2f(uv, uv1co, uv2co, uv3co, w); - VecLerp3f(pixelScreenCo, v1co, v2co, v3co, w); + interp_v3_v3v3v3(pixelScreenCo, v1co, v2co, v3co, w); } /* same as screen_px_from_ortho except we need to take into account @@ -1223,7 +1223,7 @@ static void screen_px_from_persp( } /* done re-weighting */ - VecLerp3f(pixelScreenCo, v1co, v2co, v3co, w); + interp_v3_v3v3v3(pixelScreenCo, v1co, v2co, v3co, w); } static void project_face_pixel(const MTFace *tf_other, ImBuf *ibuf_other, const float w[3], int side, unsigned char rgba_ub[4], float rgba_f[4]) @@ -1241,7 +1241,7 @@ static void project_face_pixel(const MTFace *tf_other, ImBuf *ibuf_other, const uvCo3 = (float *)tf_other->uv[2]; } - Vec2Lerp3f(uv_other, uvCo1, uvCo2, uvCo3, w); + interp_v2_v2v2v2(uv_other, uvCo1, uvCo2, uvCo3, (float*)w); /* use */ uvco_to_wrapped_pxco(uv_other, ibuf_other->x, ibuf_other->y, &x, &y); @@ -1317,11 +1317,11 @@ float project_paint_uvpixel_mask( no[0] = w[0]*no1[0] + w[1]*no2[0] + w[2]*no3[0]; no[1] = w[0]*no1[1] + w[1]*no2[1] + w[2]*no3[1]; no[2] = w[0]*no1[2] + w[1]*no2[2] + w[2]*no3[2]; - Normalize(no); + normalize_v3(no); /* now we can use the normal as a mask */ if (ps->is_ortho) { - angle = NormalizedVecAngle2((float *)ps->viewDir, no); + angle = angle_normalized_v3v3((float *)ps->viewDir, no); } else { /* Annoying but for the perspective view we need to get the pixels location in 3D space :/ */ @@ -1341,9 +1341,9 @@ float project_paint_uvpixel_mask( viewDirPersp[0] = (ps->viewPos[0] - (w[0]*co1[0] + w[1]*co2[0] + w[2]*co3[0])); viewDirPersp[1] = (ps->viewPos[1] - (w[0]*co1[1] + w[1]*co2[1] + w[2]*co3[1])); viewDirPersp[2] = (ps->viewPos[2] - (w[0]*co1[2] + w[1]*co2[2] + w[2]*co3[2])); - Normalize(viewDirPersp); + normalize_v3(viewDirPersp); - angle = NormalizedVecAngle2(viewDirPersp, no); + angle = angle_normalized_v3v3(viewDirPersp, no); } if (angle >= ps->normal_angle) { @@ -1463,7 +1463,7 @@ static ProjPixel *project_paint_uvpixel_init( } else { float co[2]; - Vec2Subf(co, projPixel->projCoSS, (float *)ps->cloneOffset); + sub_v2_v2v2(co, projPixel->projCoSS, (float *)ps->cloneOffset); /* no need to initialize the bucket, we're only checking buckets faces and for this * the faces are alredy initialized in project_paint_delayed_face_init(...) */ @@ -1654,20 +1654,20 @@ static void scale_quad(float insetCos[4][3], float *origCos[4], const float inse cent[1] = (origCos[0][1] + origCos[1][1] + origCos[2][1] + origCos[3][1]) / 4.0f; cent[2] = (origCos[0][2] + origCos[1][2] + origCos[2][2] + origCos[3][2]) / 4.0f; - VecSubf(insetCos[0], origCos[0], cent); - VecSubf(insetCos[1], origCos[1], cent); - VecSubf(insetCos[2], origCos[2], cent); - VecSubf(insetCos[3], origCos[3], cent); + sub_v3_v3v3(insetCos[0], origCos[0], cent); + sub_v3_v3v3(insetCos[1], origCos[1], cent); + sub_v3_v3v3(insetCos[2], origCos[2], cent); + sub_v3_v3v3(insetCos[3], origCos[3], cent); - VecMulf(insetCos[0], inset); - VecMulf(insetCos[1], inset); - VecMulf(insetCos[2], inset); - VecMulf(insetCos[3], inset); + mul_v3_fl(insetCos[0], inset); + mul_v3_fl(insetCos[1], inset); + mul_v3_fl(insetCos[2], inset); + mul_v3_fl(insetCos[3], inset); - VecAddf(insetCos[0], insetCos[0], cent); - VecAddf(insetCos[1], insetCos[1], cent); - VecAddf(insetCos[2], insetCos[2], cent); - VecAddf(insetCos[3], insetCos[3], cent); + add_v3_v3v3(insetCos[0], insetCos[0], cent); + add_v3_v3v3(insetCos[1], insetCos[1], cent); + add_v3_v3v3(insetCos[2], insetCos[2], cent); + add_v3_v3v3(insetCos[3], insetCos[3], cent); } @@ -1678,17 +1678,17 @@ static void scale_tri(float insetCos[4][3], float *origCos[4], const float inset cent[1] = (origCos[0][1] + origCos[1][1] + origCos[2][1]) / 3.0f; cent[2] = (origCos[0][2] + origCos[1][2] + origCos[2][2]) / 3.0f; - VecSubf(insetCos[0], origCos[0], cent); - VecSubf(insetCos[1], origCos[1], cent); - VecSubf(insetCos[2], origCos[2], cent); + sub_v3_v3v3(insetCos[0], origCos[0], cent); + sub_v3_v3v3(insetCos[1], origCos[1], cent); + sub_v3_v3v3(insetCos[2], origCos[2], cent); - VecMulf(insetCos[0], inset); - VecMulf(insetCos[1], inset); - VecMulf(insetCos[2], inset); + mul_v3_fl(insetCos[0], inset); + mul_v3_fl(insetCos[1], inset); + mul_v3_fl(insetCos[2], inset); - VecAddf(insetCos[0], insetCos[0], cent); - VecAddf(insetCos[1], insetCos[1], cent); - VecAddf(insetCos[2], insetCos[2], cent); + add_v3_v3v3(insetCos[0], insetCos[0], cent); + add_v3_v3v3(insetCos[1], insetCos[1], cent); + add_v3_v3v3(insetCos[2], insetCos[2], cent); } @@ -1776,22 +1776,22 @@ static void rect_to_uvspace_ortho( uv[0] = bucket_bounds->xmax; uv[1] = bucket_bounds->ymin; BarycentricWeights2f(uv, v1coSS, v2coSS, v3coSS, w); - Vec2Lerp3f(bucket_bounds_uv[flip?3:0], uv1co, uv2co, uv3co, w); + interp_v2_v2v2v2(bucket_bounds_uv[flip?3:0], uv1co, uv2co, uv3co, w); //uv[0] = bucket_bounds->xmax; // set above uv[1] = bucket_bounds->ymax; BarycentricWeights2f(uv, v1coSS, v2coSS, v3coSS, w); - Vec2Lerp3f(bucket_bounds_uv[flip?2:1], uv1co, uv2co, uv3co, w); + interp_v2_v2v2v2(bucket_bounds_uv[flip?2:1], uv1co, uv2co, uv3co, w); uv[0] = bucket_bounds->xmin; //uv[1] = bucket_bounds->ymax; // set above BarycentricWeights2f(uv, v1coSS, v2coSS, v3coSS, w); - Vec2Lerp3f(bucket_bounds_uv[flip?1:2], uv1co, uv2co, uv3co, w); + interp_v2_v2v2v2(bucket_bounds_uv[flip?1:2], uv1co, uv2co, uv3co, w); //uv[0] = bucket_bounds->xmin; // set above uv[1] = bucket_bounds->ymin; BarycentricWeights2f(uv, v1coSS, v2coSS, v3coSS, w); - Vec2Lerp3f(bucket_bounds_uv[flip?0:3], uv1co, uv2co, uv3co, w); + interp_v2_v2v2v2(bucket_bounds_uv[flip?0:3], uv1co, uv2co, uv3co, w); } /* same as above but use BarycentricWeightsPersp2f */ @@ -1810,22 +1810,22 @@ static void rect_to_uvspace_persp( uv[0] = bucket_bounds->xmax; uv[1] = bucket_bounds->ymin; BarycentricWeightsPersp2f(uv, v1coSS, v2coSS, v3coSS, w); - Vec2Lerp3f(bucket_bounds_uv[flip?3:0], uv1co, uv2co, uv3co, w); + interp_v2_v2v2v2(bucket_bounds_uv[flip?3:0], uv1co, uv2co, uv3co, w); //uv[0] = bucket_bounds->xmax; // set above uv[1] = bucket_bounds->ymax; BarycentricWeightsPersp2f(uv, v1coSS, v2coSS, v3coSS, w); - Vec2Lerp3f(bucket_bounds_uv[flip?2:1], uv1co, uv2co, uv3co, w); + interp_v2_v2v2v2(bucket_bounds_uv[flip?2:1], uv1co, uv2co, uv3co, w); uv[0] = bucket_bounds->xmin; //uv[1] = bucket_bounds->ymax; // set above BarycentricWeightsPersp2f(uv, v1coSS, v2coSS, v3coSS, w); - Vec2Lerp3f(bucket_bounds_uv[flip?1:2], uv1co, uv2co, uv3co, w); + interp_v2_v2v2v2(bucket_bounds_uv[flip?1:2], uv1co, uv2co, uv3co, w); //uv[0] = bucket_bounds->xmin; // set above uv[1] = bucket_bounds->ymin; BarycentricWeightsPersp2f(uv, v1coSS, v2coSS, v3coSS, w); - Vec2Lerp3f(bucket_bounds_uv[flip?0:3], uv1co, uv2co, uv3co, w); + interp_v2_v2v2v2(bucket_bounds_uv[flip?0:3], uv1co, uv2co, uv3co, w); } /* This works as we need it to but we can save a few steps and not use it */ @@ -1852,7 +1852,7 @@ static float angle_2d_clockwise(const float p1[2], const float p2[2], const floa /* limit must be a fraction over 1.0f */ static int IsectPT2Df_limit(float pt[2], float v1[2], float v2[2], float v3[2], float limit) { - return ((AreaF2Dfl(pt,v1,v2) + AreaF2Dfl(pt,v2,v3) + AreaF2Dfl(pt,v3,v1)) / (AreaF2Dfl(v1,v2,v3))) < limit; + return ((area_tri_v2(pt,v1,v2) + area_tri_v2(pt,v2,v3) + area_tri_v2(pt,v3,v1)) / (area_tri_v2(v1,v2,v3))) < limit; } /* Clip the face by a bucket and set the uv-space bucket_bounds_uv @@ -2069,13 +2069,13 @@ static void project_bucket_clip_face( if (is_ortho) { for(i=0; i<(*tot); i++) { BarycentricWeights2f(isectVCosSS[i], v1coSS, v2coSS, v3coSS, w); - Vec2Lerp3f(bucket_bounds_uv[i], uv1co, uv2co, uv3co, w); + interp_v2_v2v2v2(bucket_bounds_uv[i], uv1co, uv2co, uv3co, w); } } else { for(i=0; i<(*tot); i++) { BarycentricWeightsPersp2f(isectVCosSS[i], v1coSS, v2coSS, v3coSS, w); - Vec2Lerp3f(bucket_bounds_uv[i], uv1co, uv2co, uv3co, w); + interp_v2_v2v2v2(bucket_bounds_uv[i], uv1co, uv2co, uv3co, w); } } } @@ -2330,8 +2330,8 @@ static void project_paint_face_init(const ProjPaintState *ps, const int thread_i /* a pitty we need to get the worldspace pixel location here */ if(ps->rv3d->rflag & RV3D_CLIPPING) { - VecLerp3f(wco, ps->dm_mvert[ (*(&mf->v1 + i1)) ].co, ps->dm_mvert[ (*(&mf->v1 + i2)) ].co, ps->dm_mvert[ (*(&mf->v1 + i3)) ].co, w); - Mat4MulVecfl(ps->ob->obmat, wco); + interp_v3_v3v3v3(wco, ps->dm_mvert[ (*(&mf->v1 + i1)) ].co, ps->dm_mvert[ (*(&mf->v1 + i2)) ].co, ps->dm_mvert[ (*(&mf->v1 + i3)) ].co, w); + mul_m4_v3(ps->ob->obmat, wco); if(view3d_test_clipping(ps->rv3d, wco)) { continue; /* Watch out that no code below this needs to run */ } @@ -2452,7 +2452,7 @@ static void project_paint_face_init(const ProjPaintState *ps, const int thread_i line_clip_rect2f(bucket_bounds, vCoSS[fidx1], vCoSS[fidx2], bucket_clip_edges[0], bucket_clip_edges[1]) ) { - ftot = Vec2Lenf(vCoSS[fidx1], vCoSS[fidx2]); /* screenspace edge length */ + ftot = len_v2v2(vCoSS[fidx1], vCoSS[fidx2]); /* screenspace edge length */ if (ftot > 0.0f) { /* avoid div by zero */ if (mf->v4) { @@ -2460,19 +2460,19 @@ static void project_paint_face_init(const ProjPaintState *ps, const int thread_i else side= 0; } - fac1 = Vec2Lenf(vCoSS[fidx1], bucket_clip_edges[0]) / ftot; - fac2 = Vec2Lenf(vCoSS[fidx1], bucket_clip_edges[1]) / ftot; + fac1 = len_v2v2(vCoSS[fidx1], bucket_clip_edges[0]) / ftot; + fac2 = len_v2v2(vCoSS[fidx1], bucket_clip_edges[1]) / ftot; - Vec2Lerpf(seam_subsection[0], tf_uv_pxoffset[fidx1], tf_uv_pxoffset[fidx2], fac1); - Vec2Lerpf(seam_subsection[1], tf_uv_pxoffset[fidx1], tf_uv_pxoffset[fidx2], fac2); + interp_v2_v2v2(seam_subsection[0], tf_uv_pxoffset[fidx1], tf_uv_pxoffset[fidx2], fac1); + interp_v2_v2v2(seam_subsection[1], tf_uv_pxoffset[fidx1], tf_uv_pxoffset[fidx2], fac2); - Vec2Lerpf(seam_subsection[2], outset_uv[fidx1], outset_uv[fidx2], fac2); - Vec2Lerpf(seam_subsection[3], outset_uv[fidx1], outset_uv[fidx2], fac1); + interp_v2_v2v2(seam_subsection[2], outset_uv[fidx1], outset_uv[fidx2], fac2); + interp_v2_v2v2(seam_subsection[3], outset_uv[fidx1], outset_uv[fidx2], fac1); /* if the bucket_clip_edges values Z values was kept we could avoid this * Inset needs to be added so occlusion tests wont hit adjacent faces */ - VecLerpf(edge_verts_inset_clip[0], insetCos[fidx1], insetCos[fidx2], fac1); - VecLerpf(edge_verts_inset_clip[1], insetCos[fidx1], insetCos[fidx2], fac2); + interp_v3_v3v3(edge_verts_inset_clip[0], insetCos[fidx1], insetCos[fidx2], fac1); + interp_v3_v3v3(edge_verts_inset_clip[1], insetCos[fidx1], insetCos[fidx2], fac2); if (pixel_bounds_uv(seam_subsection[0], seam_subsection[1], seam_subsection[2], seam_subsection[3], &bounds_px, ibuf->x, ibuf->y, 1)) { @@ -2489,7 +2489,7 @@ static void project_paint_face_init(const ProjPaintState *ps, const int thread_i uv[0] = (float)x / ibuf_xf; /* use offset uvs instead */ /* test we're inside uvspace bucket and triangle bounds */ - if (IsectPQ2Df(uv, seam_subsection[0], seam_subsection[1], seam_subsection[2], seam_subsection[3])) { + if (isect_point_quad_v2(uv, seam_subsection[0], seam_subsection[1], seam_subsection[2], seam_subsection[3])) { /* We need to find the closest point along the face edge, * getting the screen_px_from_*** wont work because our actual location @@ -2506,11 +2506,11 @@ static void project_paint_face_init(const ProjPaintState *ps, const int thread_i fac = lambda_cp_line2(uv, seam_subsection[0], seam_subsection[1]); if (fac < 0.0f) { VECCOPY(pixelScreenCo, edge_verts_inset_clip[0]); } else if (fac > 1.0f) { VECCOPY(pixelScreenCo, edge_verts_inset_clip[1]); } - else { VecLerpf(pixelScreenCo, edge_verts_inset_clip[0], edge_verts_inset_clip[1], fac); } + else { interp_v3_v3v3(pixelScreenCo, edge_verts_inset_clip[0], edge_verts_inset_clip[1], fac); } if (!is_ortho) { pixelScreenCo[3] = 1.0f; - Mat4MulVec4fl((float(*)[4])ps->projectMat, pixelScreenCo); /* cast because of const */ + mul_m4_v4((float(*)[4])ps->projectMat, pixelScreenCo); /* cast because of const */ pixelScreenCo[0] = (float)(ps->ar->winx/2.0f)+(ps->ar->winx/2.0f)*pixelScreenCo[0]/pixelScreenCo[3]; pixelScreenCo[1] = (float)(ps->ar->winy/2.0f)+(ps->ar->winy/2.0f)*pixelScreenCo[1]/pixelScreenCo[3]; pixelScreenCo[2] = pixelScreenCo[2]/pixelScreenCo[3]; /* Use the depth for bucket point occlusion */ @@ -2546,10 +2546,10 @@ static void project_paint_face_init(const ProjPaintState *ps, const int thread_i /* a pitty we need to get the worldspace pixel location here */ if(ps->rv3d->rflag & RV3D_CLIPPING) { - if (side) VecLerp3f(wco, ps->dm_mvert[mf->v1].co, ps->dm_mvert[mf->v3].co, ps->dm_mvert[mf->v4].co, w); - else VecLerp3f(wco, ps->dm_mvert[mf->v1].co, ps->dm_mvert[mf->v2].co, ps->dm_mvert[mf->v3].co, w); + if (side) interp_v3_v3v3v3(wco, ps->dm_mvert[mf->v1].co, ps->dm_mvert[mf->v3].co, ps->dm_mvert[mf->v4].co, w); + else interp_v3_v3v3v3(wco, ps->dm_mvert[mf->v1].co, ps->dm_mvert[mf->v2].co, ps->dm_mvert[mf->v3].co, w); - Mat4MulVecfl(ps->ob->obmat, wco); + mul_m4_v3(ps->ob->obmat, wco); if(view3d_test_clipping(ps->rv3d, wco)) { continue; /* Watch out that no code below this needs to run */ } @@ -2709,23 +2709,23 @@ static int project_bucket_face_isect(ProjPaintState *ps, float min[2], float max p4[0] = bucket_bounds.xmax; p4[1] = bucket_bounds.ymin; if (mf->v4) { - if( IsectPQ2Df(p1, v1, v2, v3, v4) || IsectPQ2Df(p2, v1, v2, v3, v4) || IsectPQ2Df(p3, v1, v2, v3, v4) || IsectPQ2Df(p4, v1, v2, v3, v4) || + if( isect_point_quad_v2(p1, v1, v2, v3, v4) || isect_point_quad_v2(p2, v1, v2, v3, v4) || isect_point_quad_v2(p3, v1, v2, v3, v4) || isect_point_quad_v2(p4, v1, v2, v3, v4) || /* we can avoid testing v3,v1 because another intersection MUST exist if this intersects */ - (IsectLL2Df(p1, p2, v1, v2) || IsectLL2Df(p1, p2, v2, v3) || IsectLL2Df(p1, p2, v3, v4)) || - (IsectLL2Df(p2, p3, v1, v2) || IsectLL2Df(p2, p3, v2, v3) || IsectLL2Df(p2, p3, v3, v4)) || - (IsectLL2Df(p3, p4, v1, v2) || IsectLL2Df(p3, p4, v2, v3) || IsectLL2Df(p3, p4, v3, v4)) || - (IsectLL2Df(p4, p1, v1, v2) || IsectLL2Df(p4, p1, v2, v3) || IsectLL2Df(p4, p1, v3, v4)) + (isect_line_line_v2(p1, p2, v1, v2) || isect_line_line_v2(p1, p2, v2, v3) || isect_line_line_v2(p1, p2, v3, v4)) || + (isect_line_line_v2(p2, p3, v1, v2) || isect_line_line_v2(p2, p3, v2, v3) || isect_line_line_v2(p2, p3, v3, v4)) || + (isect_line_line_v2(p3, p4, v1, v2) || isect_line_line_v2(p3, p4, v2, v3) || isect_line_line_v2(p3, p4, v3, v4)) || + (isect_line_line_v2(p4, p1, v1, v2) || isect_line_line_v2(p4, p1, v2, v3) || isect_line_line_v2(p4, p1, v3, v4)) ) { return 1; } } else { - if( IsectPT2Df(p1, v1, v2, v3) || IsectPT2Df(p2, v1, v2, v3) || IsectPT2Df(p3, v1, v2, v3) || IsectPT2Df(p4, v1, v2, v3) || + if( isect_point_tri_v2(p1, v1, v2, v3) || isect_point_tri_v2(p2, v1, v2, v3) || isect_point_tri_v2(p3, v1, v2, v3) || isect_point_tri_v2(p4, v1, v2, v3) || /* we can avoid testing v3,v1 because another intersection MUST exist if this intersects */ - (IsectLL2Df(p1, p2, v1, v2) || IsectLL2Df(p1, p2, v2, v3)) || - (IsectLL2Df(p2, p3, v1, v2) || IsectLL2Df(p2, p3, v2, v3)) || - (IsectLL2Df(p3, p4, v1, v2) || IsectLL2Df(p3, p4, v2, v3)) || - (IsectLL2Df(p4, p1, v1, v2) || IsectLL2Df(p4, p1, v2, v3)) + (isect_line_line_v2(p1, p2, v1, v2) || isect_line_line_v2(p1, p2, v2, v3)) || + (isect_line_line_v2(p2, p3, v1, v2) || isect_line_line_v2(p2, p3, v2, v3)) || + (isect_line_line_v2(p3, p4, v1, v2) || isect_line_line_v2(p3, p4, v2, v3)) || + (isect_line_line_v2(p4, p1, v1, v2) || isect_line_line_v2(p4, p1, v2, v3)) ) { return 1; } @@ -2885,18 +2885,18 @@ static void project_paint_begin(ProjPaintState *ps) view3d_get_object_project_mat(ps->rv3d, ps->ob, ps->projectMat); /* viewDir - object relative */ - Mat4Invert(ps->ob->imat, ps->ob->obmat); - Mat3CpyMat4(mat, ps->rv3d->viewinv); - Mat3MulVecfl(mat, ps->viewDir); - Mat3CpyMat4(mat, ps->ob->imat); - Mat3MulVecfl(mat, ps->viewDir); - Normalize(ps->viewDir); + invert_m4_m4(ps->ob->imat, ps->ob->obmat); + copy_m3_m4(mat, ps->rv3d->viewinv); + mul_m3_v3(mat, ps->viewDir); + copy_m3_m4(mat, ps->ob->imat); + mul_m3_v3(mat, ps->viewDir); + normalize_v3(ps->viewDir); /* viewPos - object relative */ VECCOPY(ps->viewPos, ps->rv3d->viewinv[3]); - Mat3CpyMat4(mat, ps->ob->imat); - Mat3MulVecfl(mat, ps->viewPos); - VecAddf(ps->viewPos, ps->viewPos, ps->ob->imat[3]); + copy_m3_m4(mat, ps->ob->imat); + mul_m3_v3(mat, ps->viewPos); + add_v3_v3v3(ps->viewPos, ps->viewPos, ps->ob->imat[3]); { /* only use these for running 'get_view3d_viewplane' */ rctf viewplane; @@ -2930,7 +2930,7 @@ static void project_paint_begin(ProjPaintState *ps) if (ps->is_ortho) { for(a=0; a < ps->dm_totvert; a++, projScreenCo++) { VECCOPY((*projScreenCo), ps->dm_mvert[a].co); - Mat4MulVecfl(ps->projectMat, (*projScreenCo)); + mul_m4_v3(ps->projectMat, (*projScreenCo)); /* screen space, not clamped */ (*projScreenCo)[0] = (float)(ps->ar->winx/2.0f)+(ps->ar->winx/2.0f)*(*projScreenCo)[0]; @@ -2943,7 +2943,7 @@ static void project_paint_begin(ProjPaintState *ps) VECCOPY((*projScreenCo), ps->dm_mvert[a].co); (*projScreenCo)[3] = 1.0f; - Mat4MulVec4fl(ps->projectMat, (*projScreenCo)); + mul_m4_v4(ps->projectMat, (*projScreenCo)); if ((*projScreenCo)[3] > ps->clipsta) { @@ -3037,14 +3037,14 @@ static void project_paint_begin(ProjPaintState *ps) no[2] = (float)(v->no[2] / 32767.0f); if (ps->is_ortho) { - if (NormalizedVecAngle2(ps->viewDir, no) >= ps->normal_angle) { /* 1 vert of this face is towards us */ + if (angle_normalized_v3v3(ps->viewDir, no) >= ps->normal_angle) { /* 1 vert of this face is towards us */ ps->vertFlags[a] |= PROJ_VERT_CULL; } } else { - VecSubf(viewDirPersp, ps->viewPos, v->co); - Normalize(viewDirPersp); - if (NormalizedVecAngle2(viewDirPersp, no) >= ps->normal_angle) { /* 1 vert of this face is towards us */ + sub_v3_v3v3(viewDirPersp, ps->viewPos, v->co); + normalize_v3(viewDirPersp); + if (angle_normalized_v3v3(viewDirPersp, no) >= ps->normal_angle) { /* 1 vert of this face is towards us */ ps->vertFlags[a] |= PROJ_VERT_CULL; } } @@ -3183,10 +3183,10 @@ static void project_paint_begin_clone(ProjPaintState *ps, int mouse[2]) float projCo[4]; float *curs= give_cursor(ps->scene, ps->v3d); VECCOPY(projCo, curs); - Mat4MulVecfl(ps->ob->imat, projCo); + mul_m4_v3(ps->ob->imat, projCo); projCo[3] = 1.0f; - Mat4MulVec4fl(ps->projectMat, projCo); + mul_m4_v4(ps->projectMat, projCo); ps->cloneOffset[0] = mouse[0] - ((float)(ps->ar->winx/2.0f)+(ps->ar->winx/2.0f)*projCo[0]/projCo[3]); ps->cloneOffset[1] = mouse[1] - ((float)(ps->ar->winy/2.0f)+(ps->ar->winy/2.0f)*projCo[1]/projCo[3]); } @@ -3627,7 +3627,7 @@ static void *do_projectpaint_thread(void *ph_v) projPixel = (ProjPixel *)node->link; - /*dist = Vec2Lenf(projPixel->projCoSS, pos);*/ /* correct but uses a sqrtf */ + /*dist = len_v2v2(projPixel->projCoSS, pos);*/ /* correct but uses a sqrtf */ dist_nosqrt = Vec2Lenf_nosqrt(projPixel->projCoSS, pos); /*if (dist < s->brush->size) {*/ /* correct but uses a sqrtf */ @@ -3696,7 +3696,7 @@ static void *do_projectpaint_thread(void *ph_v) } break; case PAINT_TOOL_SMEAR: - Vec2Subf(co, projPixel->projCoSS, pos_ofs); + sub_v2_v2v2(co, projPixel->projCoSS, pos_ofs); if (is_floatbuf) do_projectpaint_smear_f(ps, projPixel, rgba, alpha, mask, smearArena, &smearPixels_f, co); else do_projectpaint_smear(ps, projPixel, rgba, alpha, mask, smearArena, &smearPixels, co); @@ -4076,14 +4076,14 @@ static int imapaint_paint_op(void *state, ImBuf *ibufb, float *lastpos, float *p static int texpaint_break_stroke(float *prevuv, float *fwuv, float *bkuv, float *uv) { float d1[2], d2[2]; - float mismatch = Vec2Lenf(fwuv, uv); - float len1 = Vec2Lenf(prevuv, fwuv); - float len2 = Vec2Lenf(bkuv, uv); + float mismatch = len_v2v2(fwuv, uv); + float len1 = len_v2v2(prevuv, fwuv); + float len2 = len_v2v2(bkuv, uv); - Vec2Subf(d1, fwuv, prevuv); - Vec2Subf(d2, uv, bkuv); + sub_v2_v2v2(d1, fwuv, prevuv); + sub_v2_v2v2(d2, uv, bkuv); - return ((Inp2f(d1, d2) < 0.0f) || (mismatch > MAX2(len1, len2)*2)); + return ((dot_v2v2(d1, d2) < 0.0f) || (mismatch > MAX2(len1, len2)*2)); } /* ImagePaint Common */ diff --git a/source/blender/editors/sculpt_paint/paint_stroke.c b/source/blender/editors/sculpt_paint/paint_stroke.c index 6d7fd826534..35c059b6d2a 100644 --- a/source/blender/editors/sculpt_paint/paint_stroke.c +++ b/source/blender/editors/sculpt_paint/paint_stroke.c @@ -41,7 +41,7 @@ #include "WM_api.h" #include "WM_types.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "PIL_time.h" diff --git a/source/blender/editors/sculpt_paint/paint_utils.c b/source/blender/editors/sculpt_paint/paint_utils.c index 210d6e0ff95..73619886b2b 100644 --- a/source/blender/editors/sculpt_paint/paint_utils.c +++ b/source/blender/editors/sculpt_paint/paint_utils.c @@ -13,7 +13,7 @@ #include "RNA_access.h" #include "RNA_define.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BKE_brush.h" #include "BKE_context.h" @@ -43,9 +43,9 @@ static void imapaint_project(Object *ob, float *model, float *proj, float *co, f VECCOPY(pco, co); pco[3]= 1.0f; - Mat4MulVecfl(ob->obmat, pco); - Mat4MulVecfl((float(*)[4])model, pco); - Mat4MulVec4fl((float(*)[4])proj, pco); + mul_m4_v3(ob->obmat, pco); + mul_m4_v3((float(*)[4])model, pco); + mul_m4_v4((float(*)[4])proj, pco); } static void imapaint_tri_weights(Object *ob, float *v1, float *v2, float *v3, float *co, float *w) @@ -79,15 +79,15 @@ static void imapaint_tri_weights(Object *ob, float *v1, float *v2, float *v3, fl wmat[0][1]= pv1[1]; wmat[1][1]= pv2[1]; wmat[2][1]= pv3[1]; wmat[0][2]= pv1[3]; wmat[1][2]= pv2[3]; wmat[2][2]= pv3[3]; - Mat3Inv(invwmat, wmat); - Mat3MulVecfl(invwmat, h); + invert_m3_m3(invwmat, wmat); + mul_m3_v3(invwmat, h); VECCOPY(w, h); /* w is still divided by perspdiv, make it sum to one */ divw= w[0] + w[1] + w[2]; if(divw != 0.0f) - VecMulf(w, 1.0f/divw); + mul_v3_fl(w, 1.0f/divw); } /* compute uv coordinates of mouse in face */ diff --git a/source/blender/editors/sculpt_paint/paint_vertex.c b/source/blender/editors/sculpt_paint/paint_vertex.c index 582a0c149b4..1e316072dd5 100644 --- a/source/blender/editors/sculpt_paint/paint_vertex.c +++ b/source/blender/editors/sculpt_paint/paint_vertex.c @@ -42,7 +42,7 @@ #include "IMB_imbuf_types.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_ghash.h" #include "DNA_anim_types.h" @@ -1104,12 +1104,10 @@ static int set_wpaint(bContext *C, wmOperator *op) /* toggle */ /* verify if active weight group is also active bone */ par= modifiers_isDeformedByArmature(ob); if(par && (par->mode & OB_MODE_POSE)) { - bPoseChannel *pchan; - for(pchan= par->pose->chanbase.first; pchan; pchan= pchan->next) - if(pchan->bone->flag & BONE_ACTIVE) - break; - if(pchan) - ED_vgroup_select_by_name(ob, pchan->name); + bArmature *arm= ob->data; + + if(arm->act_bone) + ED_vgroup_select_by_name(ob, arm->act_bone->name); } } else { @@ -1381,9 +1379,9 @@ static int wpaint_stroke_test_start(bContext *C, wmOperator *op, wmEvent *event) // if(ob->lay & v3d->lay); else error("Active object is not in this layer"); /* imat for normals */ - Mat4MulMat4(mat, ob->obmat, wpd->vc.rv3d->viewmat); - Mat4Invert(imat, mat); - Mat3CpyMat4(wpd->wpimat, imat); + mul_m4_m4m4(mat, ob->obmat, wpd->vc.rv3d->viewmat); + invert_m4_m4(imat, mat); + copy_m3_m4(wpd->wpimat, imat); /* if mirror painting, find the other group */ if(me->editflag & ME_EDIT_MIRROR_X) { @@ -1439,7 +1437,7 @@ static void wpaint_stroke_update_step(bContext *C, struct PaintStroke *stroke, P mval[0]-= vc->ar->winrct.xmin; mval[1]-= vc->ar->winrct.ymin; - Mat4SwapMat4(wpd->vc.rv3d->persmat, mat); + swap_m4m4(wpd->vc.rv3d->persmat, mat); /* which faces are involved */ if(wp->flag & VP_AREA) { @@ -1564,7 +1562,7 @@ static void wpaint_stroke_update_step(bContext *C, struct PaintStroke *stroke, P } } - Mat4SwapMat4(vc->rv3d->persmat, mat); + swap_m4m4(vc->rv3d->persmat, mat); DAG_id_flush_update(ob->data, OB_RECALC_DATA); ED_region_tag_redraw(vc->ar); @@ -1797,9 +1795,9 @@ static int vpaint_stroke_test_start(bContext *C, struct wmOperator *op, wmEvent copy_vpaint_prev(vp, (unsigned int *)me->mcol, me->totface); /* some old cruft to sort out later */ - Mat4MulMat4(mat, ob->obmat, vpd->vc.rv3d->viewmat); - Mat4Invert(imat, mat); - Mat3CpyMat4(vpd->vpimat, imat); + mul_m4_m4m4(mat, ob->obmat, vpd->vc.rv3d->viewmat); + invert_m4_m4(imat, mat); + copy_m3_m4(vpd->vpimat, imat); return 1; } @@ -1873,14 +1871,14 @@ static void vpaint_stroke_update_step(bContext *C, struct PaintStroke *stroke, P else totindex= 0; } - Mat4SwapMat4(vc->rv3d->persmat, mat); + swap_m4m4(vc->rv3d->persmat, mat); for(index=0; index<totindex; index++) { if(indexar[index] && indexar[index]<=me->totface) vpaint_paint_face(vp, vpd, ob, indexar[index]-1, mval); } - Mat4SwapMat4(vc->rv3d->persmat, mat); + swap_m4m4(vc->rv3d->persmat, mat); /* was disabled because it is slow, but necessary for blur */ if(vp->mode == VP_BLUR) diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c index d307b08385b..4b63a388f76 100644 --- a/source/blender/editors/sculpt_paint/sculpt.c +++ b/source/blender/editors/sculpt_paint/sculpt.c @@ -32,7 +32,7 @@ #include "MEM_guardedalloc.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_dynstr.h" #include "BLI_ghash.h" @@ -306,9 +306,9 @@ static void sculpt_undo_restore(bContext *C, ListBase *lb) for(i=0; i<totvert; i++) { float tmp[3]; - VECCOPY(tmp, mvert[index[i]].co); - VECCOPY(mvert[index[i]].co, unode->co[i]) - VECCOPY(unode->co[i], tmp); + copy_v3_v3(tmp, mvert[index[i]].co); + copy_v3_v3(mvert[index[i]].co, unode->co[i]); + copy_v3_v3(unode->co[i], tmp); mvert[index[i]].flag |= ME_VERT_PBVH_UPDATE; } @@ -399,8 +399,8 @@ static SculptUndoNode *sculpt_undo_push_node(SculptSession *ss, PBVHNode *node) /* copy threaded, hopefully this is the performance critical part */ memcpy(unode->index, verts, sizeof(int)*allvert); for(i=0; i<allvert; i++) { - VECCOPY(unode->co[i], ss->mvert[verts[i]].co) - VECCOPY(unode->no[i], ss->mvert[verts[i]].no) + copy_v3_v3(unode->co[i], ss->mvert[verts[i]].co); + VECCOPY(unode->no[i], ss->mvert[verts[i]].no); } return unode; @@ -449,7 +449,7 @@ static void sculpt_node_verts_init(Sculpt *sd, SculptSession *ss, PBVHNode *node, float (*origvert)[3], SculptVertexData *vd) { vd->radius_squared= ss->cache->radius*ss->cache->radius; - VecCopyf(vd->location, ss->cache->location); + copy_v3_v3(vd->location, ss->cache->location); vd->mvert= ss->mvert; vd->origvert= origvert; @@ -468,7 +468,7 @@ static int sculpt_node_verts_next(SculptVertexData *vd) vd->co= vd->mvert[vd->index].co; vd->origco= (vd->origvert)? vd->origvert[vd->i]: vd->co; vd->no= vd->mvert[vd->index].no; - VECSUB(delta, vd->origco, vd->location); + sub_v3_v3v3(delta, vd->origco, vd->location); dsq = INPR(delta, delta); if(dsq < vd->radius_squared) { @@ -603,7 +603,7 @@ static float tex_strength(SculptSession *ss, Brush *br, float *point, const floa /* If the active area is being applied for symmetry, flip it across the symmetry axis in order to project it. This insures that the brush texture will be oriented correctly. */ - VecCopyf(flip, point); + copy_v3_v3(flip, point); flip_coord(flip, flip, ss->cache->symmetry); projectf(ss->cache->mats, flip, point_2d); @@ -679,7 +679,7 @@ static int sculpt_search_sphere_cb(PBVHNode *node, void *data_v) nearest[i] = center[i]; } - VecSubf(t, center, nearest); + sub_v3_v3v3(t, center, nearest); return t[0] * t[0] + t[1] * t[1] + t[2] * t[2] < data->radius_squared; } @@ -704,12 +704,12 @@ static void add_norm_if(float view_vec[3], float out[3], float out_flip[3], cons { float fno[3] = {no[0], no[1], no[2]}; - Normalize(fno); + normalize_v3(fno); - if((Inpf(view_vec, fno)) > 0) { - VecAddf(out, out, fno); + if((dot_v3v3(view_vec, fno)) > 0) { + add_v3_v3v3(out, out, fno); } else { - VecAddf(out_flip, out_flip, fno); /* out_flip is used when out is {0,0,0} */ + add_v3_v3v3(out_flip, out_flip, fno); /* out_flip is used when out is {0,0,0} */ } } @@ -723,7 +723,7 @@ static void calc_area_normal(Sculpt *sd, SculptSession *ss, float area_normal[3] float out_dir[3]; int n; - VecCopyf(out_dir, cache->view_normal_symmetry); + copy_v3_v3(out_dir, cache->view_normal_symmetry); /* threaded loop over nodes */ #pragma omp parallel for private(n) schedule(static) @@ -750,23 +750,23 @@ static void calc_area_normal(Sculpt *sd, SculptSession *ss, float area_normal[3] { /* we sum per node and add together later for threads */ #pragma omp critical - VecAddf(out, out, nout); - VecAddf(out_flip, out_flip, nout_flip); + add_v3_v3v3(out, out, nout); + add_v3_v3v3(out_flip, out_flip, nout_flip); } } if (out[0]==0.0 && out[1]==0.0 && out[2]==0.0) { - VECCOPY(out, out_flip); + copy_v3_v3(out, out_flip); } - Normalize(out); + normalize_v3(out); out[0] = out_dir[0] * view + out[0] * (10-view); out[1] = out_dir[1] * view + out[1] * (10-view); out[2] = out_dir[2] * view + out[2] * (10-view); - Normalize(out); - VecCopyf(area_normal, out); + normalize_v3(out); + copy_v3_v3(area_normal, out); } static void do_draw_brush(Sculpt *sd, SculptSession *ss, PBVHNode **nodes, int totnode) @@ -821,7 +821,7 @@ static void neighbor_average(SculptSession *ss, float avg[3], const int vert) /* Don't modify corner vertices */ if(ncount==1) { - VecCopyf(avg, ss->mvert[vert].co); + copy_v3_v3(avg, ss->mvert[vert].co); return; } @@ -837,7 +837,7 @@ static void neighbor_average(SculptSession *ss, float avg[3], const int vert) for(i=0; i<(f->v4?4:3); ++i) { if(i != skip && (ncount!=2 || BLI_countlist(&ss->fmap[(&f->v1)[i]]) <= 2)) { - VecAddf(avg, avg, ss->mvert[(&f->v1)[i]].co); + add_v3_v3v3(avg, avg, ss->mvert[(&f->v1)[i]].co); ++total; } } @@ -846,9 +846,9 @@ static void neighbor_average(SculptSession *ss, float avg[3], const int vert) } if(total>0) - VecMulf(avg, 1.0f / total); + mul_v3_fl(avg, 1.0f / total); else - VecCopyf(avg, ss->mvert[vert].co); + copy_v3_v3(avg, ss->mvert[vert].co); } static void do_smooth_brush(Sculpt *sd, SculptSession *ss, PBVHNode **nodes, int totnode) @@ -917,7 +917,7 @@ static void do_grab_brush(Sculpt *sd, SculptSession *ss, PBVHNode **nodes, int t float grab_delta[3]; int n; - VecCopyf(grab_delta, ss->cache->grab_delta_symmetry); + copy_v3_v3(grab_delta, ss->cache->grab_delta_symmetry); #pragma omp parallel for private(n) schedule(static) for(n=0; n<totnode; n++) { @@ -1021,11 +1021,11 @@ static void do_inflate_brush(Sculpt *sd, SculptSession *ss, PBVHNode **nodes, in add[0]= vd.no[0]/32767.0f; add[1]= vd.no[1]/32767.0f; add[2]= vd.no[2]/32767.0f; - VecMulf(add, fade * ss->cache->radius); + mul_v3_fl(add, fade * ss->cache->radius); add[0]*= ss->cache->scale[0]; add[1]*= ss->cache->scale[1]; add[2]*= ss->cache->scale[2]; - VecAddf(add, add, vd.co); + add_v3_v3v3(add, add, vd.co); sculpt_clip(sd, ss, vd.co, add); ss->mvert[vd.index].flag |= ME_VERT_PBVH_UPDATE; @@ -1066,8 +1066,8 @@ static void calc_flatten_center(Sculpt *sd, SculptSession *ss, PBVHNode **nodes, co[0] = co[1] = co[2] = 0.0f; for(i = 0; i < FLATTEN_SAMPLE_SIZE; ++i) - VecAddf(co, co, ss->mvert[outer_index[i]].co); - VecMulf(co, 1.0f / FLATTEN_SAMPLE_SIZE); + add_v3_v3v3(co, co, ss->mvert[outer_index[i]].co); + mul_v3_fl(co, 1.0f / FLATTEN_SAMPLE_SIZE); } /* Projects a point onto a plane along the plane's normal */ @@ -1076,12 +1076,12 @@ static void point_plane_project(float intr[3], float co[3], float plane_normal[3 float p1[3], sub1[3], sub2[3]; /* Find the intersection between squash-plane and vertex (along the area normal) */ - VecSubf(p1, co, plane_normal); - VecSubf(sub1, plane_center, p1); - VecSubf(sub2, co, p1); - VecSubf(intr, co, p1); - VecMulf(intr, Inpf(plane_normal, sub1) / Inpf(plane_normal, sub2)); - VecAddf(intr, intr, p1); + sub_v3_v3v3(p1, co, plane_normal); + sub_v3_v3v3(sub1, plane_center, p1); + sub_v3_v3v3(sub2, co, p1); + sub_v3_v3v3(intr, co, p1); + mul_v3_fl(intr, dot_v3v3(plane_normal, sub1) / dot_v3v3(plane_normal, sub2)); + add_v3_v3v3(intr, intr, p1); } static int plane_point_side(float co[3], float plane_normal[3], float plane_center[3], int flip) @@ -1089,8 +1089,8 @@ static int plane_point_side(float co[3], float plane_normal[3], float plane_cent float delta[3]; float d; - VecSubf(delta, co, plane_center); - d = Inpf(plane_normal, delta); + sub_v3_v3v3(delta, co, plane_center); + d = dot_v3v3(plane_normal, delta); if(flip) d = -d; @@ -1135,22 +1135,22 @@ static void do_flatten_clay_brush(Sculpt *sd, SculptSession *ss, PBVHNode **node /* Find the intersection between squash-plane and vertex (along the area normal) */ point_plane_project(intr, vd.co, area_normal, cntr); - VecSubf(val, intr, vd.co); + sub_v3_v3v3(val, intr, vd.co); if(clay) { if(bstr > FLT_EPSILON) - VecMulf(val, fade / bstr); + mul_v3_fl(val, fade / bstr); else - VecMulf(val, fade); + mul_v3_fl(val, fade); /* Clay displacement */ val[0]+=area_normal[0] * ss->cache->scale[0]*fade; val[1]+=area_normal[1] * ss->cache->scale[1]*fade; val[2]+=area_normal[2] * ss->cache->scale[2]*fade; } else - VecMulf(val, fabs(fade)); + mul_v3_fl(val, fabs(fade)); - VecAddf(val, val, vd.co); + add_v3_v3v3(val, val, vd.co); sculpt_clip(sd, ss, vd.co, val); ss->mvert[vd.index].flag |= ME_VERT_PBVH_UPDATE; @@ -1184,12 +1184,12 @@ static void do_brush_action(Sculpt *sd, SculptSession *ss, StrokeCache *cache) ss->cache->grab_active_nodes[ss->cache->symmetry]= nodes; ss->cache->grab_active_totnode[ss->cache->symmetry]= totnode; - VecCopyf(ss->cache->grab_active_location[ss->cache->symmetry], ss->cache->location); + copy_v3_v3(ss->cache->grab_active_location[ss->cache->symmetry], ss->cache->location); } else { nodes= ss->cache->grab_active_nodes[ss->cache->symmetry]; totnode= ss->cache->grab_active_totnode[ss->cache->symmetry]; - VecCopyf(ss->cache->location, ss->cache->grab_active_location[ss->cache->symmetry]); + copy_v3_v3(ss->cache->location, ss->cache->grab_active_location[ss->cache->symmetry]); } } else { @@ -1239,7 +1239,7 @@ static void do_brush_action(Sculpt *sd, SculptSession *ss, StrokeCache *cache) for(; adata; adata= adata->next) if(adata->Index < keyblock->totelem) - VecCopyf(&co[adata->Index*3], me->mvert[adata->Index].co); + copy_v3_v3(&co[adata->Index*3], me->mvert[adata->Index].co); } } @@ -1272,8 +1272,8 @@ static void do_symmetrical_brush_actions(Sculpt *sd, SculptSession *ss) const char symm = sd->flags & 7; int i; - VecCopyf(cache->location, cache->true_location); - VecCopyf(cache->grab_delta_symmetry, cache->grab_delta); + copy_v3_v3(cache->location, cache->true_location); + copy_v3_v3(cache->grab_delta_symmetry, cache->grab_delta); cache->symmetry = 0; cache->bstrength = brush_strength(sd, cache); do_brush_action(sd, ss, cache); @@ -1460,7 +1460,7 @@ static float unproject_brush_radius(ViewContext *vc, float center[3], float offs initgrabz(vc->rv3d, center[0], center[1], center[2]); window_to_3d_delta(vc->ar, delta, offset, 0); - return VecLength(delta); + return len_v3(delta); } static void sculpt_cache_free(StrokeCache *cache) @@ -1515,7 +1515,7 @@ static void sculpt_update_cache_invariants(Sculpt *sd, SculptSession *ss, bConte ss->layer_co= MEM_mallocN(sizeof(float) * 3 * ss->totvert, "sculpt mesh vertices copy"); for(i = 0; i < ss->totvert; ++i) - VecCopyf(ss->layer_co[i], ss->mvert[i].co); + copy_v3_v3(ss->layer_co[i], ss->mvert[i].co); } } @@ -1525,7 +1525,7 @@ static void sculpt_update_cache_invariants(Sculpt *sd, SculptSession *ss, bConte float *fn = ss->face_normals; cache->face_norms= MEM_mallocN(sizeof(float) * 3 * ss->totface, "Sculpt face norms"); for(i = 0; i < ss->totface; ++i, fn += 3) - VecCopyf(cache->face_norms[i], fn); + copy_v3_v3(cache->face_norms[i], fn); } cache->original = 1; @@ -1602,8 +1602,8 @@ static void sculpt_update_cache_variants(Sculpt *sd, SculptSession *ss, struct P window_to_3d_delta(cache->vc->ar, grab_location, cache->mouse[0], cache->mouse[1]); if(!cache->first_time) - VecSubf(cache->grab_delta, grab_location, cache->old_grab_location); - VecCopyf(cache->old_grab_location, grab_location); + sub_v3_v3v3(cache->grab_delta, grab_location, cache->old_grab_location); + copy_v3_v3(cache->old_grab_location, grab_location); } } @@ -1619,7 +1619,7 @@ static int ray_face_intersection(float ray_start[3], float ray_normal[3], { float dist = FLT_MAX; - if(!RayIntersectsTriangle(ray_start, ray_normal, t0, t1, t2, + if(!isect_ray_tri_v3(ray_start, ray_normal, t0, t1, t2, &dist, NULL)) dist = FLT_MAX; @@ -1722,9 +1722,9 @@ int sculpt_stroke_get_location(bContext *C, struct PaintStroke *stroke, float ou BLI_pbvh_raycast(ss->tree, sculpt_raycast_cb, &srd, ray_start, ray_normal, srd.original); - VecCopyf(out, ray_normal); - VecMulf(out, srd.dist); - VecAddf(out, out, ray_start); + copy_v3_v3(out, ray_normal); + mul_v3_fl(out, srd.dist); + add_v3_v3v3(out, out, ray_start); return srd.hit != -1; } @@ -1802,7 +1802,7 @@ static void sculpt_restore_mesh(Sculpt *sd, SculptSession *ss) int totvert= unode->totvert; for(i = 0; i < totvert; ++i) { - VECCOPY(ss->mvert[index[i]].co, co[i]); + copy_v3_v3(ss->mvert[index[i]].co, co[i]); VECCOPY(ss->mvert[index[i]].no, no[i]); } } @@ -1810,7 +1810,7 @@ static void sculpt_restore_mesh(Sculpt *sd, SculptSession *ss) if(ss->face_normals) { float *fn = ss->face_normals; for(i = 0; i < ss->totface; ++i, fn += 3) - VecCopyf(fn, cache->face_norms[i]); + copy_v3_v3(fn, cache->face_norms[i]); } if(brush->sculpt_tool == SCULPT_TOOL_LAYER) diff --git a/source/blender/editors/space_action/action_draw.c b/source/blender/editors/space_action/action_draw.c index 7f2e1bd09e4..77cfc2cd484 100644 --- a/source/blender/editors/space_action/action_draw.c +++ b/source/blender/editors/space_action/action_draw.c @@ -41,7 +41,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" /* Types --------------------------------------------------------------- */ diff --git a/source/blender/editors/space_action/action_edit.c b/source/blender/editors/space_action/action_edit.c index 0bcf4b037cb..a7c012fc654 100644 --- a/source/blender/editors/space_action/action_edit.c +++ b/source/blender/editors/space_action/action_edit.c @@ -39,7 +39,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "DNA_anim_types.h" #include "DNA_action_types.h" diff --git a/source/blender/editors/space_action/action_select.c b/source/blender/editors/space_action/action_select.c index c945f41bc55..c4f2e40e958 100644 --- a/source/blender/editors/space_action/action_select.c +++ b/source/blender/editors/space_action/action_select.c @@ -36,7 +36,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_dlrbTree.h" #include "DNA_anim_types.h" @@ -300,7 +300,7 @@ static int actkeys_borderselect_exec(bContext *C, wmOperator *op) bAnimContext ac; rcti rect; short mode=0, selectmode=0; - int event; + int gesture_mode; /* get editor data */ if (ANIM_animdata_get_context(C, &ac) == 0) @@ -312,8 +312,8 @@ static int actkeys_borderselect_exec(bContext *C, wmOperator *op) rect.xmax= RNA_int_get(op->ptr, "xmax"); rect.ymax= RNA_int_get(op->ptr, "ymax"); - event= RNA_int_get(op->ptr, "event_type"); - if (event == LEFTMOUSE) // FIXME... hardcoded + gesture_mode= RNA_int_get(op->ptr, "gesture_mode"); + if (gesture_mode == GESTURE_MODAL_SELECT) selectmode = SELECT_ADD; else selectmode = SELECT_SUBTRACT; @@ -360,11 +360,7 @@ void ACT_OT_select_border(wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; /* rna */ - RNA_def_int(ot->srna, "event_type", 0, INT_MIN, INT_MAX, "Event Type", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "xmin", 0, INT_MIN, INT_MAX, "X Min", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "xmax", 0, INT_MIN, INT_MAX, "X Max", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "ymin", 0, INT_MIN, INT_MAX, "Y Min", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "ymax", 0, INT_MIN, INT_MAX, "Y Max", "", INT_MIN, INT_MAX); + WM_operator_properties_gesture_border(ot, FALSE); RNA_def_boolean(ot->srna, "axis_range", 0, "Axis Range", ""); } diff --git a/source/blender/editors/space_action/space_action.c b/source/blender/editors/space_action/space_action.c index 07de15a26b4..59b690002d2 100644 --- a/source/blender/editors/space_action/space_action.c +++ b/source/blender/editors/space_action/space_action.c @@ -39,7 +39,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_rand.h" #include "BKE_colortools.h" @@ -341,6 +341,13 @@ static void action_main_area_listener(ARegion *ar, wmNotifier *wmn) break; } break; + case NC_NODE: + switch(wmn->action) { + case NA_EDITED: + ED_region_tag_redraw(ar); + break; + } + break; default: if(wmn->data==ND_KEYS) ED_region_tag_redraw(ar); diff --git a/source/blender/editors/space_api/space.c b/source/blender/editors/space_api/space.c index 3112cfffb22..5318eb33b1f 100644 --- a/source/blender/editors/space_api/space.c +++ b/source/blender/editors/space_api/space.c @@ -32,7 +32,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BKE_context.h" #include "BKE_screen.h" diff --git a/source/blender/editors/space_buttons/buttons_context.c b/source/blender/editors/space_buttons/buttons_context.c index 026498f17af..0e2769a3557 100644 --- a/source/blender/editors/space_buttons/buttons_context.c +++ b/source/blender/editors/space_buttons/buttons_context.c @@ -243,26 +243,9 @@ static int buttons_context_path_material(ButsContextPath *path) return 0; } -static Bone *find_active_bone(Bone *bone) -{ - Bone *active; - - for(; bone; bone=bone->next) { - if(bone->flag & BONE_ACTIVE) - return bone; - - active= find_active_bone(bone->childbase.first); - if(active) - return active; - } - - return NULL; -} - static int buttons_context_path_bone(ButsContextPath *path) { bArmature *arm; - Bone *bone; EditBone *edbo; /* if we have an armature, get the active bone */ @@ -270,19 +253,16 @@ static int buttons_context_path_bone(ButsContextPath *path) arm= path->ptr[path->len-1].data; if(arm->edbo) { - for(edbo=arm->edbo->first; edbo; edbo=edbo->next) { - if(edbo->flag & BONE_ACTIVE) { - RNA_pointer_create(&arm->id, &RNA_EditBone, edbo, &path->ptr[path->len]); - path->len++; - return 1; - } + if(arm->act_edbone) { + edbo= arm->act_edbone; + RNA_pointer_create(&arm->id, &RNA_EditBone, edbo, &path->ptr[path->len]); + path->len++; + return 1; } } else { - bone= find_active_bone(arm->bonebase.first); - - if(bone) { - RNA_pointer_create(&arm->id, &RNA_Bone, bone, &path->ptr[path->len]); + if(arm->act_bone) { + RNA_pointer_create(&arm->id, &RNA_Bone, arm->act_bone, &path->ptr[path->len]); path->len++; return 1; } @@ -727,8 +707,11 @@ int buttons_context(const bContext *C, const char *member, bContextDataResult *r set_pointer_type(path, result, &RNA_Brush); return 1; } + else { + return 0; /* not found */ + } - return 0; + return -1; /* found but not available */ } /************************* Drawing the Path ************************/ @@ -784,7 +767,7 @@ void buttons_context_draw(const bContext *C, uiLayout *layout) ptr= &path->ptr[a]; if(a != 0) - uiDefIconBut(block, LABEL, 0, VICON_SMALL_TRI_RIGHT, 0, 0, 10, UI_UNIT_Y, NULL, 0, 0, 0, 0, ""); + uiItemL(row, "", VICON_SMALL_TRI_RIGHT); if(ptr->data) { icon= RNA_struct_ui_icon(ptr->type); diff --git a/source/blender/editors/space_buttons/space_buttons.c b/source/blender/editors/space_buttons/space_buttons.c index f05c652c39d..2c918bd9b30 100644 --- a/source/blender/editors/space_buttons/space_buttons.c +++ b/source/blender/editors/space_buttons/space_buttons.c @@ -38,7 +38,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_rand.h" #include "BKE_colortools.h" diff --git a/source/blender/editors/space_console/console_report.c b/source/blender/editors/space_console/console_report.c index b6920d148fd..282e25a6a44 100644 --- a/source/blender/editors/space_console/console_report.c +++ b/source/blender/editors/space_console/console_report.c @@ -242,10 +242,9 @@ static int borderselect_exec(bContext *C, wmOperator *op) rcti rect; //rctf rectf, rq; - int val; + short selecting= (RNA_int_get(op->ptr, "gesture_mode")==GESTURE_MODAL_SELECT); //short mval[2]; - val= RNA_int_get(op->ptr, "event_type"); rect.xmin= RNA_int_get(op->ptr, "xmin"); rect.ymin= RNA_int_get(op->ptr, "ymin"); rect.xmax= RNA_int_get(op->ptr, "xmax"); @@ -265,7 +264,7 @@ static int borderselect_exec(bContext *C, wmOperator *op) /* get the first report if none found */ if(report_min==NULL) { - printf("find_min\n"); + // printf("find_min\n"); for(report=reports->list.first; report; report=report->next) { if(report->type & report_mask) { report_min= report; @@ -275,7 +274,7 @@ static int borderselect_exec(bContext *C, wmOperator *op) } if(report_max==NULL) { - printf("find_max\n"); + // printf("find_max\n"); for(report=reports->list.last; report; report=report->prev) { if(report->type & report_mask) { report_max= report; @@ -292,8 +291,10 @@ static int borderselect_exec(bContext *C, wmOperator *op) if((report->type & report_mask)==0) continue; - if(val==LEFTMOUSE) report->flag |= SELECT; - else report->flag &= ~SELECT; + if(selecting) + report->flag |= SELECT; + else + report->flag &= ~SELECT; } ED_area_tag_redraw(CTX_wm_area(C)); @@ -321,11 +322,7 @@ void CONSOLE_OT_select_border(wmOperatorType *ot) /* ot->flag= OPTYPE_REGISTER; */ /* rna */ - RNA_def_int(ot->srna, "event_type", 0, INT_MIN, INT_MAX, "Event Type", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "xmin", 0, INT_MIN, INT_MAX, "X Min", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "xmax", 0, INT_MIN, INT_MAX, "X Max", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "ymin", 0, INT_MIN, INT_MAX, "Y Min", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "ymax", 0, INT_MIN, INT_MAX, "Y Max", "", INT_MIN, INT_MAX); + WM_operator_properties_gesture_border(ot, FALSE); } diff --git a/source/blender/editors/space_console/space_console.c b/source/blender/editors/space_console/space_console.c index 49bc3adb5b9..3dca5a4db4b 100644 --- a/source/blender/editors/space_console/space_console.c +++ b/source/blender/editors/space_console/space_console.c @@ -36,7 +36,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BKE_colortools.h" #include "BKE_context.h" @@ -164,21 +164,9 @@ static void console_main_area_draw(const bContext *C, ARegion *ar) View2DScrollers *scrollers; //float col[3]; - /* add helper text, why not? */ - if(sc->scrollback.first==NULL) { - console_scrollback_add_str(C, " * Python Interactive Console *", 0); - console_scrollback_add_str(C, "Command History: Up/Down Arrow", 0); - console_scrollback_add_str(C, "Cursor: Left/Right Home/End", 0); - console_scrollback_add_str(C, "Remove: Backspace/Delete", 0); - console_scrollback_add_str(C, "Execute: Enter", 0); - console_scrollback_add_str(C, "Autocomplete: Ctrl+Space", 0); - console_scrollback_add_str(C, "Ctrl +/- Wheel: Zoom", 0); - console_scrollback_add_str(C, "Builtin Modules: bpy, bpy.data, bpy.ops, bpy.props, bpy.types, bpy.ui", 0); - - /* This is normally set by python but to start with its easier just to set it like this rather then running python with no args */ - strcpy(sc->prompt, ">>> "); - } - + if((sc->type==CONSOLE_TYPE_PYTHON) && (sc->scrollback.first==NULL)) + WM_operator_name_call((bContext *)C, "CONSOLE_OT_banner", WM_OP_EXEC_DEFAULT, NULL); + /* clear and setup matrix */ //UI_GetThemeColor3fv(TH_BACK, col); //glClearColor(col[0], col[1], col[2], 0.0); diff --git a/source/blender/editors/space_file/file_ops.c b/source/blender/editors/space_file/file_ops.c index c35ff6ed7b6..97d4e8019fe 100644 --- a/source/blender/editors/space_file/file_ops.c +++ b/source/blender/editors/space_file/file_ops.c @@ -124,12 +124,11 @@ static void clamp_to_filelist(int numfiles, int *first_file, int *last_file) } } -static FileSelect file_select(SpaceFile* sfile, ARegion* ar, const rcti* rect, short val) +static FileSelect file_select(SpaceFile* sfile, ARegion* ar, const rcti* rect, short selecting) { int first_file = -1; int last_file = -1; int act_file; - short selecting = (val == LEFTMOUSE); FileSelect retval = FILE_SELECT_FILE; FileSelectParams *params = ED_fileselect_get_params(sfile); @@ -198,10 +197,10 @@ static int file_border_select_exec(bContext *C, wmOperator *op) { ARegion *ar= CTX_wm_region(C); SpaceFile *sfile= CTX_wm_space_file(C); - short val; + short selecting; rcti rect; - val= RNA_int_get(op->ptr, "event_type"); + selecting= (RNA_int_get(op->ptr, "gesture_mode")==GESTURE_MODAL_SELECT); rect.xmin= RNA_int_get(op->ptr, "xmin"); rect.ymin= RNA_int_get(op->ptr, "ymin"); rect.xmax= RNA_int_get(op->ptr, "xmax"); @@ -209,7 +208,7 @@ static int file_border_select_exec(bContext *C, wmOperator *op) BLI_isect_rcti(&(ar->v2d.mask), &rect, &rect); - if (FILE_SELECT_DIR == file_select(sfile, ar, &rect, val )) { + if (FILE_SELECT_DIR == file_select(sfile, ar, &rect, selecting)) { WM_event_add_notifier(C, NC_SPACE|ND_SPACE_FILE_LIST, NULL); } else { WM_event_add_notifier(C, NC_SPACE|ND_SPACE_FILE_PARAMS, NULL); @@ -228,15 +227,10 @@ void FILE_OT_select_border(wmOperatorType *ot) ot->invoke= WM_border_select_invoke; ot->exec= file_border_select_exec; ot->modal= WM_border_select_modal; + ot->poll= ED_operator_file_active; /* rna */ - RNA_def_int(ot->srna, "event_type", 0, INT_MIN, INT_MAX, "Event Type", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "xmin", 0, INT_MIN, INT_MAX, "X Min", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "xmax", 0, INT_MIN, INT_MAX, "X Max", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "ymin", 0, INT_MIN, INT_MAX, "Y Min", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "ymax", 0, INT_MIN, INT_MAX, "Y Max", "", INT_MIN, INT_MAX); - - ot->poll= ED_operator_file_active; + WM_operator_properties_gesture_border(ot, 0); } static int file_select_invoke(bContext *C, wmOperator *op, wmEvent *event) @@ -259,7 +253,7 @@ static int file_select_invoke(bContext *C, wmOperator *op, wmEvent *event) /* single select, deselect all selected first */ file_deselect_all(sfile); - if (FILE_SELECT_DIR == file_select(sfile, ar, &rect, val )) + if (FILE_SELECT_DIR == file_select(sfile, ar, &rect, val==LEFTMOUSE )) //LEFTMOUSE XXX, fixme WM_event_add_notifier(C, NC_SPACE|ND_SPACE_FILE_LIST, NULL); else WM_event_add_notifier(C, NC_SPACE|ND_SPACE_FILE_PARAMS, NULL); diff --git a/source/blender/editors/space_file/space_file.c b/source/blender/editors/space_file/space_file.c index 91d917acfe7..576736f026f 100644 --- a/source/blender/editors/space_file/space_file.c +++ b/source/blender/editors/space_file/space_file.c @@ -43,7 +43,7 @@ #include "BLO_readfile.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_rand.h" #include "BLI_storage_types.h" diff --git a/source/blender/editors/space_graph/graph_buttons.c b/source/blender/editors/space_graph/graph_buttons.c index e2eb40b1137..38289e98391 100644 --- a/source/blender/editors/space_graph/graph_buttons.c +++ b/source/blender/editors/space_graph/graph_buttons.c @@ -41,7 +41,7 @@ #include "MEM_guardedalloc.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_editVert.h" #include "BLI_rand.h" @@ -173,31 +173,40 @@ static void graph_panel_properties(const bContext *C, Panel *pa) { bAnimListElem *ale; FCurve *fcu; + PointerRNA fcu_ptr; + uiLayout *layout = pa->layout; + uiLayout *col, *row, *subrow; uiBlock *block; - char name[128]; + char name[256]; + int icon = 0; - if(!graph_panel_context(C, &ale, &fcu)) + if (!graph_panel_context(C, &ale, &fcu)) return; - - block= uiLayoutAbsoluteBlock(pa->layout); + + block= uiLayoutGetBlock(layout); uiBlockSetHandleFunc(block, do_graph_region_buttons, NULL); - - /* Info - Active F-Curve */ - uiDefBut(block, LABEL, 1, "Active F-Curve:", 10, 200, 150, 19, NULL, 0.0, 0.0, 0, 0, ""); - if (ale->id) { - // icon of active blocktype - is this really necessary? - int icon= geticon_anim_blocktype(GS(ale->id->name)); - - // xxx type of icon-but is currently "LABEL", as that one is plain... - uiDefIconBut(block, LABEL, 1, icon, 10, 180, 20, 19, NULL, 0, 0, 0, 0, "ID-type that F-Curve belongs to"); - } + /* F-Curve pointer */ + RNA_pointer_create(ale->id, &RNA_FCurve, fcu, &fcu_ptr); - getname_anim_fcurve(name, ale->id, fcu); - uiDefBut(block, LABEL, 1, name, 40, 180, 300, 19, NULL, 0.0, 0.0, 0, 0, "Name of Active F-Curve"); + /* user-friendly 'name' for F-Curve */ + // TODO: only show the path if this is invalid? + col= uiLayoutColumn(layout, 0); + icon= getname_anim_fcurve(name, ale->id, fcu); + uiItemL(col, name, icon); + + /* color settings */ + col= uiLayoutColumn(layout, 1); + uiItemL(col, "Display Color:", 0); + + row= uiLayoutRow(col, 1); + uiItemR(row, "", 0, &fcu_ptr, "color_mode", 0); + + subrow= uiLayoutRow(row, 1); + uiLayoutSetEnabled(subrow, (fcu->color_mode==FCURVE_COLOR_CUSTOM)); + uiItemR(subrow, "", 0, &fcu_ptr, "color", 0); /* TODO: the following settings could be added here - * - F-Curve coloring mode - mode selector + color selector * - Access details (ID-block + RNA-Path + Array Index) * - ... */ @@ -259,7 +268,7 @@ static void driver_delete_var_cb (bContext *C, void *driver_v, void *dtar_v) ChannelDriver *driver= (ChannelDriver *)driver_v; DriverTarget *dtar= (DriverTarget *)dtar_v; - /* add a new var */ + /* remove the active target */ driver_free_target(driver, dtar); } @@ -341,7 +350,7 @@ static void graph_panel_drivers(const bContext *C, Panel *pa) /* add driver target variables */ col= uiLayoutColumn(pa->layout, 0); block= uiLayoutGetBlock(col); - but= uiDefBut(block, BUT, B_IPO_DEPCHANGE, "Add Variable", 0, 0, 10*UI_UNIT_X, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 0, "Add a new target variable for this Driver"); + but= uiDefBut(block, BUT, B_IPO_DEPCHANGE, "Add Target", 0, 0, 10*UI_UNIT_X, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 0, "Add a new target variable for this Driver"); uiButSetFunc(but, driver_add_var_cb, driver, NULL); /* loop over targets, drawing them */ @@ -448,13 +457,13 @@ void graph_buttons_register(ARegionType *art) pt= MEM_callocN(sizeof(PanelType), "spacetype graph panel view"); strcpy(pt->idname, "GRAPH_PT_view"); - strcpy(pt->label, "View"); + strcpy(pt->label, "View Properties"); pt->draw= graph_panel_view; BLI_addtail(&art->paneltypes, pt); pt= MEM_callocN(sizeof(PanelType), "spacetype graph panel properties"); strcpy(pt->idname, "GRAPH_PT_properties"); - strcpy(pt->label, "Properties"); + strcpy(pt->label, "Active F-Curve"); pt->draw= graph_panel_properties; pt->poll= graph_panel_poll; BLI_addtail(&art->paneltypes, pt); diff --git a/source/blender/editors/space_graph/graph_draw.c b/source/blender/editors/space_graph/graph_draw.c index 052c5c4a743..6e0878972f8 100644 --- a/source/blender/editors/space_graph/graph_draw.c +++ b/source/blender/editors/space_graph/graph_draw.c @@ -42,7 +42,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "DNA_anim_types.h" #include "DNA_action_types.h" @@ -308,8 +308,10 @@ void draw_fcurve_vertices (SpaceIpo *sipo, ARegion *ar, FCurve *fcu) glPointSize(UI_GetThemeValuef(TH_VERTEX_SIZE)); - /* draw the two handles first (if they're shown, and if curve is being edited) */ - if ((fcu->flag & FCURVE_PROTECTED)==0 && (fcu->flag & FCURVE_INT_VALUES)==0 && (sipo->flag & SIPO_NOHANDLES)==0) { + /* draw the two handles first (if they're shown, the curve doesn't have just a single keyframe, and the curve is being edited) */ + if ((fcu->flag & FCURVE_PROTECTED)==0 && (fcu->flag & FCURVE_INT_VALUES)==0 && + (sipo->flag & SIPO_NOHANDLES)==0 && (fcu->totvert > 1)) + { set_fcurve_vertex_color(sipo, fcu, 0); draw_fcurve_vertices_handles(fcu, v2d, 0); diff --git a/source/blender/editors/space_graph/graph_edit.c b/source/blender/editors/space_graph/graph_edit.c index b467d7b4ca0..2088ee4030c 100644 --- a/source/blender/editors/space_graph/graph_edit.c +++ b/source/blender/editors/space_graph/graph_edit.c @@ -39,7 +39,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "DNA_anim_types.h" #include "DNA_action_types.h" diff --git a/source/blender/editors/space_graph/graph_select.c b/source/blender/editors/space_graph/graph_select.c index 7eec9f31d86..8d2e2921b7f 100644 --- a/source/blender/editors/space_graph/graph_select.c +++ b/source/blender/editors/space_graph/graph_select.c @@ -36,7 +36,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "DNA_anim_types.h" #include "DNA_action_types.h" @@ -279,23 +279,21 @@ static int graphkeys_borderselect_exec(bContext *C, wmOperator *op) bAnimContext ac; rcti rect; short mode=0, selectmode=0; - int event; /* get editor data */ if (ANIM_animdata_get_context(C, &ac) == 0) return OPERATOR_CANCELLED; - + + if(RNA_int_get(op->ptr, "gesture_mode")==GESTURE_MODAL_SELECT) + selectmode= SELECT_ADD; + else + selectmode= SELECT_SUBTRACT; + /* get settings from operator */ rect.xmin= RNA_int_get(op->ptr, "xmin"); rect.ymin= RNA_int_get(op->ptr, "ymin"); rect.xmax= RNA_int_get(op->ptr, "xmax"); rect.ymax= RNA_int_get(op->ptr, "ymax"); - - event= RNA_int_get(op->ptr, "event_type"); - if (event == LEFTMOUSE) // FIXME... hardcoded - selectmode = SELECT_ADD; - else - selectmode = SELECT_SUBTRACT; /* selection 'mode' depends on whether borderselect region only matters on one axis */ if (RNA_boolean_get(op->ptr, "axis_range")) { @@ -339,11 +337,7 @@ void GRAPH_OT_select_border(wmOperatorType *ot) ot->flag= OPTYPE_REGISTER/*|OPTYPE_UNDO*/; /* rna */ - RNA_def_int(ot->srna, "event_type", 0, INT_MIN, INT_MAX, "Event Type", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "xmin", 0, INT_MIN, INT_MAX, "X Min", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "xmax", 0, INT_MIN, INT_MAX, "X Max", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "ymin", 0, INT_MIN, INT_MAX, "Y Min", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "ymax", 0, INT_MIN, INT_MAX, "Y Max", "", INT_MIN, INT_MAX); + WM_operator_properties_gesture_border(ot, FALSE); RNA_def_boolean(ot->srna, "axis_range", 0, "Axis Range", ""); } diff --git a/source/blender/editors/space_graph/graph_utils.c b/source/blender/editors/space_graph/graph_utils.c index ee4e371e1f1..40fe3393a60 100644 --- a/source/blender/editors/space_graph/graph_utils.c +++ b/source/blender/editors/space_graph/graph_utils.c @@ -41,7 +41,7 @@ #include "MEM_guardedalloc.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_editVert.h" #include "BLI_rand.h" diff --git a/source/blender/editors/space_graph/space_graph.c b/source/blender/editors/space_graph/space_graph.c index 342afab7534..157202190bb 100644 --- a/source/blender/editors/space_graph/space_graph.c +++ b/source/blender/editors/space_graph/space_graph.c @@ -38,7 +38,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_rand.h" #include "BKE_context.h" @@ -417,6 +417,13 @@ static void graph_region_listener(ARegion *ar, wmNotifier *wmn) break; } break; + case NC_NODE: + switch(wmn->action) { + case NA_EDITED: + ED_region_tag_redraw(ar); + break; + } + break; default: if(wmn->data==ND_KEYS) ED_region_tag_redraw(ar); diff --git a/source/blender/editors/space_image/image_buttons.c b/source/blender/editors/space_image/image_buttons.c index 87b6ec8bb71..a184ea2b2c4 100644 --- a/source/blender/editors/space_image/image_buttons.c +++ b/source/blender/editors/space_image/image_buttons.c @@ -44,7 +44,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_editVert.h" #include "BLI_rand.h" diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c index 8d7295e9f20..9ef7a4d9ae4 100644 --- a/source/blender/editors/space_image/image_ops.c +++ b/source/blender/editors/space_image/image_ops.c @@ -50,7 +50,7 @@ #include "BKE_report.h" #include "BKE_screen.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "IMB_imbuf.h" diff --git a/source/blender/editors/space_image/space_image.c b/source/blender/editors/space_image/space_image.c index 36d1573a12c..8478b40092f 100644 --- a/source/blender/editors/space_image/space_image.c +++ b/source/blender/editors/space_image/space_image.c @@ -40,7 +40,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_editVert.h" #include "BLI_rand.h" diff --git a/source/blender/editors/space_info/space_info.c b/source/blender/editors/space_info/space_info.c index 518553c9a7a..c28e86a6fa6 100644 --- a/source/blender/editors/space_info/space_info.c +++ b/source/blender/editors/space_info/space_info.c @@ -37,7 +37,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_rand.h" #include "BKE_context.h" diff --git a/source/blender/editors/space_logic/logic_buttons.c b/source/blender/editors/space_logic/logic_buttons.c index c8f96fe3373..e159af65c74 100644 --- a/source/blender/editors/space_logic/logic_buttons.c +++ b/source/blender/editors/space_logic/logic_buttons.c @@ -37,7 +37,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BKE_context.h" #include "BKE_global.h" diff --git a/source/blender/editors/space_logic/space_logic.c b/source/blender/editors/space_logic/space_logic.c index 836ac4c6659..62ed6a0a769 100644 --- a/source/blender/editors/space_logic/space_logic.c +++ b/source/blender/editors/space_logic/space_logic.c @@ -40,7 +40,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BKE_context.h" #include "BKE_screen.h" diff --git a/source/blender/editors/space_nla/nla_buttons.c b/source/blender/editors/space_nla/nla_buttons.c index b193b89d65a..6e5da38dd10 100644 --- a/source/blender/editors/space_nla/nla_buttons.c +++ b/source/blender/editors/space_nla/nla_buttons.c @@ -41,7 +41,7 @@ #include "MEM_guardedalloc.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_editVert.h" #include "BLI_rand.h" @@ -155,6 +155,7 @@ static int nla_panel_context(const bContext *C, PointerRNA *adt_ptr, PointerRNA case ANIMTYPE_DSCUR: case ANIMTYPE_DSSKEY: case ANIMTYPE_DSWOR: + case ANIMTYPE_DSNTREE: case ANIMTYPE_DSPART: case ANIMTYPE_DSMBALL: case ANIMTYPE_DSARM: diff --git a/source/blender/editors/space_nla/nla_channels.c b/source/blender/editors/space_nla/nla_channels.c index 07dc3f0ad89..ab447dd974a 100644 --- a/source/blender/editors/space_nla/nla_channels.c +++ b/source/blender/editors/space_nla/nla_channels.c @@ -53,7 +53,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_rand.h" #include "BKE_animsys.h" @@ -189,6 +189,7 @@ static int mouse_nla_channels (bAnimContext *ac, float x, int channel_index, sho case ANIMTYPE_DSCUR: case ANIMTYPE_DSSKEY: case ANIMTYPE_DSWOR: + case ANIMTYPE_DSNTREE: case ANIMTYPE_DSPART: case ANIMTYPE_DSMBALL: case ANIMTYPE_DSARM: diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c index b21f37ab678..c32058545fb 100644 --- a/source/blender/editors/space_nla/nla_draw.c +++ b/source/blender/editors/space_nla/nla_draw.c @@ -56,7 +56,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_rand.h" #include "BLI_dlrbTree.h" diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c index e53ccd004db..12e43465a29 100644 --- a/source/blender/editors/space_nla/nla_edit.c +++ b/source/blender/editors/space_nla/nla_edit.c @@ -42,7 +42,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_rand.h" #include "BKE_animsys.h" diff --git a/source/blender/editors/space_nla/nla_header.c b/source/blender/editors/space_nla/nla_header.c index a2524a1b2dc..0c0deaf75ef 100644 --- a/source/blender/editors/space_nla/nla_header.c +++ b/source/blender/editors/space_nla/nla_header.c @@ -41,7 +41,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_rand.h" #include "BKE_animsys.h" diff --git a/source/blender/editors/space_nla/nla_ops.c b/source/blender/editors/space_nla/nla_ops.c index 6c940f32c24..d210016d201 100644 --- a/source/blender/editors/space_nla/nla_ops.c +++ b/source/blender/editors/space_nla/nla_ops.c @@ -41,7 +41,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_rand.h" #include "BKE_animsys.h" diff --git a/source/blender/editors/space_nla/nla_select.c b/source/blender/editors/space_nla/nla_select.c index dd9ef2621c5..801434c4794 100644 --- a/source/blender/editors/space_nla/nla_select.c +++ b/source/blender/editors/space_nla/nla_select.c @@ -41,7 +41,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_rand.h" #include "BKE_animsys.h" @@ -288,7 +288,6 @@ static int nlaedit_borderselect_exec(bContext *C, wmOperator *op) bAnimContext ac; rcti rect; short mode=0, selectmode=0; - int event; /* get editor data */ if (ANIM_animdata_get_context(C, &ac) == 0) @@ -300,8 +299,7 @@ static int nlaedit_borderselect_exec(bContext *C, wmOperator *op) rect.xmax= RNA_int_get(op->ptr, "xmax"); rect.ymax= RNA_int_get(op->ptr, "ymax"); - event= RNA_int_get(op->ptr, "event_type"); - if (event == LEFTMOUSE) // FIXME... hardcoded + if (RNA_int_get(op->ptr, "gesture_mode") == GESTURE_MODAL_SELECT) selectmode = SELECT_ADD; else selectmode = SELECT_SUBTRACT; @@ -347,11 +345,7 @@ void NLA_OT_select_border(wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; /* rna */ - RNA_def_int(ot->srna, "event_type", 0, INT_MIN, INT_MAX, "Event Type", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "xmin", 0, INT_MIN, INT_MAX, "X Min", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "xmax", 0, INT_MIN, INT_MAX, "X Max", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "ymin", 0, INT_MIN, INT_MAX, "Y Min", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "ymax", 0, INT_MIN, INT_MAX, "Y Max", "", INT_MIN, INT_MAX); + WM_operator_properties_gesture_border(ot, 0); RNA_def_boolean(ot->srna, "axis_range", 0, "Axis Range", ""); } diff --git a/source/blender/editors/space_nla/space_nla.c b/source/blender/editors/space_nla/space_nla.c index 5f2f75b7b6f..1e35e9122e6 100644 --- a/source/blender/editors/space_nla/space_nla.c +++ b/source/blender/editors/space_nla/space_nla.c @@ -39,7 +39,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_rand.h" #include "BKE_animsys.h" @@ -432,6 +432,13 @@ static void nla_main_area_listener(ARegion *ar, wmNotifier *wmn) break; } break; + case NC_NODE: + switch(wmn->action) { + case NA_EDITED: + ED_region_tag_redraw(ar); + break; + } + break; default: if(wmn->data==ND_KEYS) ED_region_tag_redraw(ar); diff --git a/source/blender/editors/space_node/drawnode.c b/source/blender/editors/space_node/drawnode.c index 403a8d1a591..3cc06b7bbb9 100644 --- a/source/blender/editors/space_node/drawnode.c +++ b/source/blender/editors/space_node/drawnode.c @@ -32,7 +32,7 @@ #include <string.h> #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "DNA_ID.h" #include "DNA_node_types.h" @@ -94,48 +94,6 @@ #include "node_intern.h" - -/* autocomplete callback for buttons */ -static void autocomplete_vcol(bContext *C, char *str, void *arg_v) -{ - Mesh *me; - CustomDataLayer *layer; - AutoComplete *autocpl; - int a; - - if(str[0]==0) - return; - - autocpl= autocomplete_begin(str, 32); - - /* search if str matches the beginning of name */ - for(me= G.main->mesh.first; me; me=me->id.next) - for(a=0, layer= me->fdata.layers; a<me->fdata.totlayer; a++, layer++) - if(layer->type == CD_MCOL) - autocomplete_do_name(autocpl, layer->name); - - autocomplete_end(autocpl, str); -} - -static int verify_valid_vcol_name(char *str) -{ - Mesh *me; - CustomDataLayer *layer; - int a; - - if(str[0]==0) - return 1; - - /* search if str matches the name */ - for(me= G.main->mesh.first; me; me=me->id.next) - for(a=0, layer= me->fdata.layers; a<me->fdata.totlayer; a++, layer++) - if(layer->type == CD_MCOL) - if(strcmp(layer->name, str)==0) - return 1; - - return 0; -} - /* ****************** GENERAL CALLBACKS FOR NODES ***************** */ static void node_ID_title_cb(bContext *C, void *node_v, void *unused_v) @@ -161,7 +119,7 @@ static void node_group_alone_cb(bContext *C, void *node_v, void *unused_v) /* ****************** BUTTON CALLBACKS FOR ALL TREES ***************** */ -static void node_buts_group(uiLayout *layout, PointerRNA *ptr) +static void node_buts_group(uiLayout *layout, bContext *C, PointerRNA *ptr) { uiBlock *block= uiLayoutAbsoluteBlock(layout); bNode *node= ptr->data; @@ -195,45 +153,33 @@ static void node_buts_group(uiLayout *layout, PointerRNA *ptr) } #endif -static void node_buts_value(uiLayout *layout, PointerRNA *ptr) +static void node_buts_value(uiLayout *layout, bContext *C, PointerRNA *ptr) { - uiBlock *block= uiLayoutAbsoluteBlock(layout); - bNode *node= ptr->data; - rctf *butr= &node->butr; - bNodeSocket *sock= node->outputs.first; /* first socket stores value */ + PointerRNA sockptr; + PropertyRNA *prop; + + /* first socket stores value */ + prop = RNA_struct_find_property(ptr, "outputs"); + RNA_property_collection_lookup_int(ptr, prop, 0, &sockptr); - uiDefButF(block, NUM, B_NODE_EXEC, "", - (short)butr->xmin, (short)butr->ymin, butr->xmax-butr->xmin, 20, - sock->ns.vec, sock->ns.min, sock->ns.max, 10, 2, ""); + uiItemR(layout, "", 0, &sockptr, "default_value", 0); } -static void node_buts_rgb(uiLayout *layout, PointerRNA *ptr) +static void node_buts_rgb(uiLayout *layout, bContext *C, PointerRNA *ptr) { - uiBlock *block= uiLayoutAbsoluteBlock(layout); - bNode *node= ptr->data; - rctf *butr= &node->butr; - bNodeSocket *sock= node->outputs.first; /* first socket stores value */ - - if(sock) { - /* enforce square box drawing */ - uiBlockSetEmboss(block, UI_EMBOSSP); - - uiDefButF(block, HSVCUBE, B_NODE_EXEC, "", - (short)butr->xmin, (short)butr->ymin, butr->xmax-butr->xmin, 12, - sock->ns.vec, 0.0f, 1.0f, 3, 0, ""); - uiDefButF(block, HSVCUBE, B_NODE_EXEC, "", - (short)butr->xmin, (short)butr->ymin+15, butr->xmax-butr->xmin, butr->xmax-butr->xmin -15 -15, - sock->ns.vec, 0.0f, 1.0f, 2, 0, ""); - uiDefButF(block, COL, B_NOP, "", - (short)butr->xmin, (short)butr->ymax-12, butr->xmax-butr->xmin, 12, - sock->ns.vec, 0.0, 0.0, -1, 0, ""); - /* the -1 above prevents col button to popup a color picker */ - - uiBlockSetEmboss(block, UI_EMBOSS); - } + uiLayout *col; + PointerRNA sockptr; + PropertyRNA *prop; + + /* first socket stores value */ + prop = RNA_struct_find_property(ptr, "outputs"); + RNA_property_collection_lookup_int(ptr, prop, 0, &sockptr); + + col = uiLayoutColumn(layout, 0); + uiItemR(col, "", 0, &sockptr, "default_value", 0); } -static void node_buts_mix_rgb(uiLayout *layout, PointerRNA *ptr) +static void node_buts_mix_rgb(uiLayout *layout, bContext *C, PointerRNA *ptr) { uiLayout *row; @@ -245,7 +191,7 @@ static void node_buts_mix_rgb(uiLayout *layout, PointerRNA *ptr) uiItemR(row, "", ICON_IMAGE_RGB_ALPHA, ptr, "alpha", 0); } -static void node_buts_time(uiLayout *layout, PointerRNA *ptr) +static void node_buts_time(uiLayout *layout, bContext *C, PointerRNA *ptr) { uiLayout *row; #if 0 @@ -267,18 +213,12 @@ static void node_buts_time(uiLayout *layout, PointerRNA *ptr) uiItemR(row, "End", 0, ptr, "end", 0); } -static void node_buts_valtorgb(uiLayout *layout, PointerRNA *ptr) +static void node_buts_colorramp(uiLayout *layout, bContext *C, PointerRNA *ptr) { - uiBlock *block= uiLayoutAbsoluteBlock(layout); - bNode *node= ptr->data; - rctf *butr= &node->butr; - - if(node->storage) { - uiBlockColorbandButtons(block, node->storage, butr, B_NODE_EXEC); - } + uiTemplateColorRamp(layout, ptr, "color_ramp", 0); } -static void node_buts_curvevec(uiLayout *layout, PointerRNA *ptr) +static void node_buts_curvevec(uiLayout *layout, bContext *C, PointerRNA *ptr) { uiTemplateCurveMapping(layout, ptr, "mapping", 'v', 0); } @@ -289,7 +229,7 @@ void node_curvemap_sample(float *col) _sample_col= col; } -static void node_buts_curvecol(uiLayout *layout, PointerRNA *ptr) +static void node_buts_curvecol(uiLayout *layout, bContext *C, PointerRNA *ptr) { bNode *node= ptr->data; CurveMapping *cumap= node->storage; @@ -304,7 +244,7 @@ static void node_buts_curvecol(uiLayout *layout, PointerRNA *ptr) uiTemplateCurveMapping(layout, ptr, "mapping", 'c', 0); } -static void node_buts_normal(uiLayout *layout, PointerRNA *ptr) +static void node_buts_normal(uiLayout *layout, bContext *C, PointerRNA *ptr) { uiBlock *block= uiLayoutAbsoluteBlock(layout); bNode *node= ptr->data; @@ -315,7 +255,7 @@ static void node_buts_normal(uiLayout *layout, PointerRNA *ptr) (short)butr->xmin, (short)butr->xmin, butr->xmax-butr->xmin, butr->xmax-butr->xmin, sock->ns.vec, 0.0f, 1.0f, 0, 0, ""); } - +#if 0 // not used in 2.5x yet static void node_browse_tex_cb(bContext *C, void *ntree_v, void *node_v) { bNodeTree *ntree= ntree_v; @@ -345,7 +285,7 @@ static void node_browse_tex_cb(bContext *C, void *ntree_v, void *node_v) node->menunr= 0; } - +#endif static void node_dynamic_update_cb(bContext *C, void *ntree_v, void *node_v) { Material *ma; @@ -377,7 +317,7 @@ static void node_dynamic_update_cb(bContext *C, void *ntree_v, void *node_v) // XXX BIF_preview_changed(ID_MA); } -static void node_buts_texture(uiLayout *layout, PointerRNA *ptr) +static void node_buts_texture(uiLayout *layout, bContext *C, PointerRNA *ptr) { bNode *node= ptr->data; @@ -396,7 +336,7 @@ static void node_buts_texture(uiLayout *layout, PointerRNA *ptr) } } -static void node_buts_math(uiLayout *layout, PointerRNA *ptr) +static void node_buts_math(uiLayout *layout, bContext *C, PointerRNA *ptr) { uiItemR(layout, "", 0, ptr, "operation", 0); } @@ -429,223 +369,62 @@ static void node_browse_text_cb(bContext *C, void *ntree_v, void *node_v) node->menunr= 0; } -static void node_mat_alone_cb(bContext *C, void *node_v, void *unused) -{ - bNode *node= node_v; - - node->id= (ID *)copy_material((Material *)node->id); - - //BIF_undo_push("Single user material"); - // allqueue(REDRAWBUTSSHADING, 0); - // allqueue(REDRAWNODE, 0); - // allqueue(REDRAWOOPS, 0); -} - -static void node_browse_mat_cb(bContext *C, void *ntree_v, void *node_v) +static void node_shader_buts_material(uiLayout *layout, bContext *C, PointerRNA *ptr) { - bNodeTree *ntree= ntree_v; - bNode *node= node_v; + bNode *node= ptr->data; + uiLayout *col; - if(node->menunr<1) return; + uiTemplateID(layout, C, ptr, "material", "MATERIAL_OT_new", NULL, NULL); - if(node->menunr==32767) { /* code for Add New */ - if(node->id) { - /* make copy, but make sure it doesnt have the node tag nor nodes */ - Material *ma= (Material *)node->id; - ma->id.us--; - ma= copy_material(ma); - ma->use_nodes= 0; - if(ma->nodetree) { - ntreeFreeTree(ma->nodetree); - MEM_freeN(ma->nodetree); - } - ma->nodetree= NULL; - node->id= (ID *)ma; - } - else node->id= (ID *)add_material("MatNode"); - } - else { - if(node->id) node->id->us--; - node->id= BLI_findlink(&G.main->mat, node->menunr-1); - id_us_plus(node->id); - } - BLI_strncpy(node->name, node->id->name+2, 21); + if(!node->id) return; - nodeSetActive(ntree, node); - - // allqueue(REDRAWBUTSSHADING, 0); - // allqueue(REDRAWNODE, 0); - // XXX BIF_preview_changed(ID_MA); - - node->menunr= 0; -} - -static void node_new_mat_cb(bContext *C, void *ntree_v, void *node_v) -{ - bNodeTree *ntree= ntree_v; - bNode *node= node_v; - - node->id= (ID *)add_material("MatNode"); - BLI_strncpy(node->name, node->id->name+2, 21); - - nodeSetActive(ntree, node); - - // allqueue(REDRAWBUTSSHADING, 0); - // allqueue(REDRAWNODE, 0); - // XXX BIF_preview_changed(ID_MA); - -} - -static void node_texmap_cb(bContext *C, void *texmap_v, void *unused_v) -{ - init_mapping(texmap_v); + col= uiLayoutColumn(layout, 0); + uiItemR(col, NULL, 0, ptr, "diffuse", 0); + uiItemR(col, NULL, 0, ptr, "specular", 0); + uiItemR(col, NULL, 0, ptr, "invert_normal", 0); } -static void node_shader_buts_material(uiLayout *layout, PointerRNA *ptr) +static void node_shader_buts_mapping(uiLayout *layout, bContext *C, PointerRNA *ptr) { - uiBlock *block= uiLayoutAbsoluteBlock(layout); - bNode *node= ptr->data; - bNodeTree *ntree= ptr->id.data; - rctf *butr= &node->butr; - uiBut *bt; - short dx= (short)((butr->xmax-butr->xmin)/3.0f), has_us= (node->id && node->id->us>1); - short dy= (short)butr->ymin; - char *strp; - - /* WATCH IT: we use this callback in material buttons, but then only want first row */ - if(butr->ymax-butr->ymin > 21.0f) dy+= 19; - - uiBlockBeginAlign(block); - /* XXX - if(node->id==NULL) uiBlockSetCol(block, TH_REDALERT); - else if(has_us) uiBlockSetCol(block, TH_BUT_SETTING1); - else uiBlockSetCol(block, TH_BUT_SETTING2); - */ + uiLayout *row; - /* browse button */ - IDnames_to_pupstring(&strp, NULL, "ADD NEW %x32767", &(G.main->mat), NULL, NULL); - node->menunr= 0; - bt= uiDefButS(block, MENU, B_NOP, strp, - butr->xmin, dy, 19, 19, - &node->menunr, 0, 0, 0, 0, "Browses existing choices or adds NEW"); - uiButSetFunc(bt, node_browse_mat_cb, ntree, node); - if(strp) MEM_freeN(strp); + uiItemL(layout, "Location:", 0); + row= uiLayoutRow(layout, 1); + uiItemR(row, "", 0, ptr, "location", 0); - /* Add New button */ - if(node->id==NULL) { - bt= uiDefBut(block, BUT, B_NOP, "Add New", - butr->xmin+19, dy, (short)(butr->xmax-butr->xmin-19.0f), 19, - NULL, 0.0, 0.0, 0, 0, "Add new Material"); - uiButSetFunc(bt, node_new_mat_cb, ntree, node); - } - else { - /* name button */ - short width= (short)(butr->xmax-butr->xmin-19.0f - (has_us?19.0f:0.0f)); - bt= uiDefBut(block, TEX, B_NOP, "MA:", - butr->xmin+19, dy, width, 19, - node->id->name+2, 0.0, 19.0, 0, 0, "Material name"); - uiButSetFunc(bt, node_ID_title_cb, node, NULL); - - /* user amount */ - if(has_us) { - char str1[32]; - sprintf(str1, "%d", node->id->us); - bt= uiDefBut(block, BUT, B_NOP, str1, - butr->xmax-19, dy, 19, 19, - NULL, 0, 0, 0, 0, "Displays number of users. Click to make a single-user copy."); - uiButSetFunc(bt, node_mat_alone_cb, node, NULL); - } - - /* WATCH IT: we use this callback in material buttons, but then only want first row */ - if(butr->ymax-butr->ymin > 21.0f) { - /* node options */ - uiDefButBitS(block, TOG, SH_NODE_MAT_DIFF, B_NODE_EXEC, "Diff", - butr->xmin, butr->ymin, dx, 19, - &node->custom1, 0, 0, 0, 0, "Material Node outputs Diffuse"); - uiDefButBitS(block, TOG, SH_NODE_MAT_SPEC, B_NODE_EXEC, "Spec", - butr->xmin+dx, butr->ymin, dx, 19, - &node->custom1, 0, 0, 0, 0, "Material Node outputs Specular"); - uiDefButBitS(block, TOG, SH_NODE_MAT_NEG, B_NODE_EXEC, "Neg Normal", - butr->xmax-dx, butr->ymin, dx, 19, - &node->custom1, 0, 0, 0, 0, "Material Node uses inverted Normal"); - } - } - uiBlockEndAlign(block); -} - -static void node_shader_buts_mapping(uiLayout *layout, PointerRNA *ptr) -{ - uiBlock *block= uiLayoutAbsoluteBlock(layout); - bNode *node= ptr->data; - rctf *butr= &node->butr; - TexMapping *texmap= node->storage; - short dx= (short)((butr->xmax-butr->xmin)/7.0f); - short dy= (short)(butr->ymax-19); + uiItemL(layout, "Rotation:", 0); + row= uiLayoutRow(layout, 1); + uiItemR(row, "", 0, ptr, "rotation", 0); - uiBlockSetFunc(block, node_texmap_cb, texmap, NULL); /* all buttons get this */ + uiItemL(layout, "Scale:", 0); + row= uiLayoutRow(layout, 1); + uiItemR(row, "", 0, ptr, "scale", 0); - uiBlockBeginAlign(block); - uiDefButF(block, NUM, B_NODE_EXEC, "", butr->xmin+dx, dy, 2*dx, 19, texmap->loc, -1000.0f, 1000.0f, 10, 2, ""); - uiDefButF(block, NUM, B_NODE_EXEC, "", butr->xmin+3*dx, dy, 2*dx, 19, texmap->loc+1, -1000.0f, 1000.0f, 10, 2, ""); - uiDefButF(block, NUM, B_NODE_EXEC, "", butr->xmin+5*dx, dy, 2*dx, 19, texmap->loc+2, -1000.0f, 1000.0f, 10, 2, ""); - dy-= 19; - uiDefButF(block, NUM, B_NODE_EXEC, "", butr->xmin+dx, dy, 2*dx, 19, texmap->rot, -1000.0f, 1000.0f, 1000, 1, ""); - uiDefButF(block, NUM, B_NODE_EXEC, "", butr->xmin+3*dx, dy, 2*dx, 19, texmap->rot+1, -1000.0f, 1000.0f, 1000, 1, ""); - uiDefButF(block, NUM, B_NODE_EXEC, "", butr->xmin+5*dx, dy, 2*dx, 19, texmap->rot+2, -1000.0f, 1000.0f, 1000, 1, ""); - dy-= 19; - uiDefButF(block, NUM, B_NODE_EXEC, "", butr->xmin+dx, dy, 2*dx, 19, texmap->size, -1000.0f, 1000.0f, 10, 2, ""); - uiDefButF(block, NUM, B_NODE_EXEC, "", butr->xmin+3*dx, dy, 2*dx, 19, texmap->size+1, -1000.0f, 1000.0f, 10, 2, ""); - uiDefButF(block, NUM, B_NODE_EXEC, "", butr->xmin+5*dx, dy, 2*dx, 19, texmap->size+2, -1000.0f, 1000.0f, 10, 2, ""); - dy-= 25; - uiBlockBeginAlign(block); - uiDefButF(block, NUM, B_NODE_EXEC, "", butr->xmin+dx, dy, 2*dx, 19, texmap->min, -10.0f, 10.0f, 100, 2, ""); - uiDefButF(block, NUM, B_NODE_EXEC, "", butr->xmin+3*dx, dy, 2*dx, 19, texmap->min+1, -10.0f, 10.0f, 100, 2, ""); - uiDefButF(block, NUM, B_NODE_EXEC, "", butr->xmin+5*dx, dy, 2*dx, 19, texmap->min+2, -10.0f, 10.0f, 100, 2, ""); - dy-= 19; - uiDefButF(block, NUM, B_NODE_EXEC, "", butr->xmin+dx, dy, 2*dx, 19, texmap->max, -10.0f, 10.0f, 10, 2, ""); - uiDefButF(block, NUM, B_NODE_EXEC, "", butr->xmin+3*dx, dy, 2*dx, 19, texmap->max+1, -10.0f, 10.0f, 10, 2, ""); - uiDefButF(block, NUM, B_NODE_EXEC, "", butr->xmin+5*dx, dy, 2*dx, 19, texmap->max+2, -10.0f, 10.0f, 10, 2, ""); - uiBlockEndAlign(block); + row= uiLayoutRow(layout, 1); + uiItemR(row, "Min", 0, ptr, "clamp_minimum", 0); + uiItemR(row, "", 0, ptr, "minimum", 0); - /* labels/options */ + row= uiLayoutRow(layout, 1); + uiItemR(row, "Max", 0, ptr, "clamp_maximum", 0); + uiItemR(row, "", 0, ptr, "maximum", 0); - dy= (short)(butr->ymax-19); - uiDefBut(block, LABEL, B_NOP, "Loc", butr->xmin, dy, dx, 19, NULL, 0.0f, 0.0f, 0, 0, ""); - dy-= 19; - uiDefBut(block, LABEL, B_NOP, "Rot", butr->xmin, dy, dx, 19, NULL, 0.0f, 0.0f, 0, 0, ""); - dy-= 19; - uiDefBut(block, LABEL, B_NOP, "Size", butr->xmin, dy, dx, 19, NULL, 0.0f, 0.0f, 0, 0, ""); - dy-= 25; - uiDefButBitI(block, TOG, TEXMAP_CLIP_MIN, B_NODE_EXEC, "Min", butr->xmin, dy, dx-4, 19, &texmap->flag, 0.0f, 0.0f, 0, 0, ""); - dy-= 19; - uiDefButBitI(block, TOG, TEXMAP_CLIP_MAX, B_NODE_EXEC, "Max", butr->xmin, dy, dx-4, 19, &texmap->flag, 0.0f, 0.0f, 0, 0, ""); } -static void node_shader_buts_vect_math(uiLayout *layout, PointerRNA *ptr) +static void node_shader_buts_vect_math(uiLayout *layout, bContext *C, PointerRNA *ptr) { uiItemR(layout, "", 0, ptr, "operation", 0); } -static void node_shader_buts_geometry(uiLayout *layout, PointerRNA *ptr) +static void node_shader_buts_geometry(uiLayout *layout, bContext *C, PointerRNA *ptr) { - uiBlock *block= uiLayoutAbsoluteBlock(layout); - bNode *node= ptr->data; - rctf *butr= &node->butr; - uiBut *but; - NodeGeometry *ngeo= (NodeGeometry*)node->storage; - - // XXX if(!verify_valid_uv_name(ngeo->uvname)) - // XXX uiBlockSetCol(block, TH_REDALERT); - but= uiDefBut(block, TEX, B_NODE_EXEC, "UV:", butr->xmin, butr->ymin+20, butr->xmax-butr->xmin, 20, ngeo->uvname, 0, 31, 0, 0, "Set name of UV layer to use, default is active UV layer"); - // XXX uiButSetCompleteFunc(but, autocomplete_uv, NULL); - - if(!verify_valid_vcol_name(ngeo->colname)); -// uiBlockSetCol(block, TH_REDALERT); - but= uiDefBut(block, TEX, B_NODE_EXEC, "Col:", butr->xmin, butr->ymin, butr->xmax-butr->xmin, 20, ngeo->colname, 0, 31, 0, 0, "Set name of vertex color layer to use, default is active vertex color layer"); - uiButSetCompleteFunc(but, autocomplete_vcol, NULL); + uiLayout *col; + + col= uiLayoutColumn(layout, 0); + uiItemR(col, "UV", 0, ptr, "uv_layer", 0); + uiItemR(col, "VCol", 0, ptr, "color_layer", 0); } -static void node_shader_buts_dynamic(uiLayout *layout, PointerRNA *ptr) +static void node_shader_buts_dynamic(uiLayout *layout, bContext *C, PointerRNA *ptr) { uiBlock *block= uiLayoutAbsoluteBlock(layout); bNode *node= ptr->data; @@ -718,7 +497,7 @@ static void node_shader_set_butfunc(bNodeType *ntype) ntype->uifunc= node_buts_mix_rgb; break; case SH_NODE_VALTORGB: - ntype->uifunc= node_buts_valtorgb; + ntype->uifunc= node_buts_colorramp; break; case SH_NODE_MATH: ntype->uifunc= node_buts_math; @@ -768,283 +547,72 @@ static void node_active_cb(bContext *C, void *ntree_v, void *node_v) { nodeSetActive(ntree_v, node_v); } -static void node_image_type_cb(bContext *C, void *node_v, void *unused) -{ - - // allqueue(REDRAWNODE, 1); -} -static char *node_image_type_pup(void) +static void node_composit_buts_image(uiLayout *layout, bContext *C, PointerRNA *ptr) { - char *str= MEM_mallocN(256, "image type pup"); - int a; - - str[0]= 0; + uiLayout *col; + bNode *node= ptr->data; + PointerRNA imaptr; + PropertyRNA *prop; - a= sprintf(str, "Image Type %%t|"); - a+= sprintf(str+a, " Image %%x%d %%i%d|", IMA_SRC_FILE, ICON_IMAGE_DATA); - a+= sprintf(str+a, " Movie %%x%d %%i%d|", IMA_SRC_MOVIE, ICON_SEQUENCE); - a+= sprintf(str+a, " Sequence %%x%d %%i%d|", IMA_SRC_SEQUENCE, ICON_IMAGE_COL); - a+= sprintf(str+a, " Generated %%x%d %%i%d", IMA_SRC_GENERATED, ICON_BLANK1); + uiTemplateID(layout, C, ptr, "image", NULL, "IMAGE_OT_open", NULL); - return str; -} - -/* copy from buttons_shading.c */ -static char *layer_menu(RenderResult *rr) -{ - RenderLayer *rl; - int len= 40 + 40*BLI_countlist(&rr->layers); - short a, nr; - char *str= MEM_callocN(len, "menu layers"); - - strcpy(str, "Layer %t"); - a= strlen(str); - for(nr=0, rl= rr->layers.first; rl; rl= rl->next, nr++) { - a+= sprintf(str+a, "|%s %%x%d", rl->name, nr); - } - - return str; -} - -static void image_layer_cb(bContext *C, void *ima_v, void *iuser_v) -{ - Scene *scene= CTX_data_scene(C); + if(!node->id) return; - ntreeCompositForceHidden(scene->nodetree, scene); - BKE_image_multilayer_index(ima_v, iuser_v); - // allqueue(REDRAWNODE, 0); -} - -static void node_composit_buts_image(uiLayout *layout, PointerRNA *ptr) -{ - uiBlock *block= uiLayoutAbsoluteBlock(layout); - bNode *node= ptr->data; - bNodeTree *ntree= ptr->id.data; - rctf *butr= &node->butr; - ImageUser *iuser= node->storage; - uiBut *bt; - short dy= (short)butr->ymax-19; - char *strp; + prop = RNA_struct_find_property(ptr, "image"); + if (!prop || RNA_property_type(prop) != PROP_POINTER) return; + imaptr= RNA_property_pointer_get(ptr, prop); - uiBlockBeginAlign(block); + col= uiLayoutColumn(layout, 0); - /* browse button */ - IMAnames_to_pupstring(&strp, NULL, "LOAD NEW %x32767", &(G.main->image), NULL, NULL); - node->menunr= 0; - bt= uiDefButS(block, MENU, B_NOP, strp, - butr->xmin, dy, 19, 19, - &node->menunr, 0, 0, 0, 0, "Browses existing choices"); - uiButSetFunc(bt, node_browse_image_cb, ntree, node); - if(strp) MEM_freeN(strp); + uiItemR(col, NULL, 0, &imaptr, "source", 0); - /* Add New button */ - if(node->id==NULL) { - bt= uiDefBut(block, BUT, B_NODE_LOADIMAGE, "Load New", - butr->xmin+19, dy, (short)(butr->xmax-butr->xmin-19.0f), 19, - NULL, 0.0, 0.0, 0, 0, "Add new Image"); - uiButSetFunc(bt, node_active_cb, ntree, node); - } - else { - /* name button + type */ - Image *ima= (Image *)node->id; - short xmin= (short)butr->xmin, xmax= (short)butr->xmax; - short width= xmax - xmin - 45; - short icon= ICON_IMAGE_DATA; - - if(ima->source==IMA_SRC_MOVIE) icon= ICON_SEQUENCE; - else if(ima->source==IMA_SRC_SEQUENCE) icon= ICON_IMAGE_COL; - else if(ima->source==IMA_SRC_GENERATED) icon= ICON_BLANK1; - - bt= uiDefBut(block, TEX, B_NOP, "IM:", - xmin+19, dy, width, 19, - node->id->name+2, 0.0, 19.0, 0, 0, "Image name"); - uiButSetFunc(bt, node_ID_title_cb, node, NULL); - - /* buffer type option */ - strp= node_image_type_pup(); - bt= uiDefIconTextButS(block, MENU, B_NOP, icon, strp, - xmax-26, dy, 26, 19, - &ima->source, 0.0, 19.0, 0, 0, "Image type"); - uiButSetFunc(bt, node_image_type_cb, node, ima); - MEM_freeN(strp); - - if( ELEM(ima->source, IMA_SRC_MOVIE, IMA_SRC_SEQUENCE) ) { - width= (xmax-xmin)/2; - - dy-= 19; - uiDefButI(block, NUM, B_NODE_EXEC, "Frs:", - xmin, dy, width, 19, - &iuser->frames, 1.0, MAXFRAMEF, 0, 0, "Amount of images used in animation"); - uiDefButI(block, NUM, B_NODE_EXEC, "SFra:", - xmin+width, dy, width, 19, - &iuser->sfra, 1.0, MAXFRAMEF, 0, 0, "Start frame of animation"); - dy-= 19; - uiDefButI(block, NUM, B_NODE_EXEC, "Offs:", - xmin, dy, width, 19, - &iuser->offset, -MAXFRAMEF, MAXFRAMEF, 0, 0, "Offsets the number of the frame to use in the animation"); - uiDefButS(block, TOG, B_NODE_EXEC, "Cycl", - xmin+width, dy, width-20, 19, - &iuser->cycl, 0.0, 0.0, 0, 0, "Make animation go cyclic"); - uiDefIconButBitS(block, TOG, IMA_ANIM_ALWAYS, B_NODE_EXEC, ICON_AUTO, - xmax-20, dy, 20, 19, - &iuser->flag, 0.0, 0.0, 0, 0, "Always refresh Image on frame changes"); - } - if( ima->type==IMA_TYPE_MULTILAYER && ima->rr) { - RenderLayer *rl= BLI_findlink(&ima->rr->layers, iuser->layer); - if(rl) { - width= (xmax-xmin); - dy-= 19; - strp= layer_menu(ima->rr); - bt= uiDefButS(block, MENU, B_NODE_EXEC, strp, - xmin, dy, width, 19, - &iuser->layer, 0.0, 10000.0, 0, 0, "Layer"); - uiButSetFunc(bt, image_layer_cb, ima->rr, node->storage); - MEM_freeN(strp); - } - } - } - - if(node->id) { - /* for each draw we test for anim refresh event */ - if(iuser->flag & IMA_ANIM_REFRESHED) { - iuser->flag &= ~IMA_ANIM_REFRESHED; - // addqueue(curarea->win, UI_BUT_EVENT, B_NODE_EXEC); XXX - } + if (ELEM(RNA_enum_get(&imaptr, "source"), IMA_SRC_SEQUENCE, IMA_SRC_MOVIE)) { + col= uiLayoutColumn(layout, 1); + uiItemR(col, NULL, 0, ptr, "frames", 0); + uiItemR(col, NULL, 0, ptr, "start", 0); + uiItemR(col, NULL, 0, ptr, "offset", 0); + uiItemR(col, NULL, 0, ptr, "cyclic", 0); + uiItemR(col, NULL, 0, ptr, "auto_refresh", UI_ITEM_R_ICON_ONLY); } -} -/* if we use render layers from other scene, we make a nice title */ -static void set_render_layers_title(bContext *C, void *node_v, void *unused) -{ - bNode *node= node_v; - Scene *sce; - SceneRenderLayer *srl; - char str[64]; - - if(node->id) { - BLI_strncpy(str, node->id->name+2, 21); - strcat(str, "|"); - sce= (Scene *)node->id; - } - else { - str[0]= 0; - sce= CTX_data_scene(C); - } - srl= BLI_findlink(&sce->r.layers, node->custom1); - if(srl==NULL) { - node->custom1= 0; - srl= sce->r.layers.first; - } + col= uiLayoutColumn(layout, 0); - strcat(str, srl->name); - BLI_strncpy(node->name, str, 32); + if (RNA_enum_get(&imaptr, "type")== IMA_TYPE_MULTILAYER) + uiItemR(col, NULL, 0, ptr, "layer", 0); } -static char *scene_layer_menu(Scene *sce) +static void node_composit_buts_renderlayers(uiLayout *layout, bContext *C, PointerRNA *ptr) { - SceneRenderLayer *srl; - int len= 40 + 40*BLI_countlist(&sce->r.layers); - short a, nr; - char *str= MEM_callocN(len, "menu layers"); - - strcpy(str, "Active Layer %t"); - a= strlen(str); - for(nr=0, srl= sce->r.layers.first; srl; srl= srl->next, nr++) { - a+= sprintf(str+a, "|%s %%x%d", srl->name, nr); - } - - return str; -} + bNode *node= ptr->data; + uiLayout *col; -static void node_browse_scene_cb(bContext *C, void *ntree_v, void *node_v) -{ - bNodeTree *ntree= ntree_v; - bNode *node= node_v; - Scene *sce; + uiTemplateID(layout, C, ptr, "scene", NULL, NULL, NULL); - if(node->menunr<1) return; - - if(node->id) { - node->id->us--; - node->id= NULL; - } - sce= BLI_findlink(&G.main->scene, node->menunr-1); - node->id= &sce->id; - id_us_plus(node->id); - - set_render_layers_title(C, node, NULL); - nodeSetActive(ntree, node); - - // allqueue(REDRAWBUTSSHADING, 0); - // allqueue(REDRAWNODE, 0); - NodeTagChanged(ntree, node); - - node->menunr= 0; -} - - -static void node_composit_buts_renderlayers(uiLayout *layout, PointerRNA *ptr) -{ - uiBlock *block= uiLayoutAbsoluteBlock(layout); - bNode *node= ptr->data; - bNodeTree *ntree= ptr->id.data; - rctf *butr= &node->butr; + if(!node->id) return; - if(node->id) { - Scene *scene= (Scene *)node->id; - uiBut *bt; - char *strp; - - /* browse button scene */ - uiBlockBeginAlign(block); - IDnames_to_pupstring(&strp, NULL, "", &(G.main->scene), NULL, NULL); - node->menunr= 0; - bt= uiDefButS(block, MENU, B_NOP, strp, - butr->xmin, butr->ymin, 20, 19, - &node->menunr, 0, 0, 0, 0, "Browse Scene to use RenderLayer from"); - uiButSetFunc(bt, node_browse_scene_cb, ntree, node); - if(strp) MEM_freeN(strp); - - /* browse button layer */ - strp= scene_layer_menu(node->id?(Scene *)node->id:scene); - if(node->id) - bt= uiDefIconTextButS(block, MENU, B_NODE_EXEC, ICON_RENDERLAYERS, strp, - butr->xmin+20, butr->ymin, (butr->xmax-butr->xmin)-40, 19, - &node->custom1, 0, 0, 0, 0, "Choose Render Layer"); - else - bt= uiDefButS(block, MENU, B_NODE_EXEC, strp, - butr->xmin+20, butr->ymin, (butr->xmax-butr->xmin)-40, 19, - &node->custom1, 0, 0, 0, 0, "Choose Render Layer"); - uiButSetFunc(bt, set_render_layers_title, node, NULL); - MEM_freeN(strp); - - /* re-render */ - /* uses custom2, not the best implementation of the world... but we need it to work now :) */ - bt= uiDefIconButS(block, TOG, B_NODE_EXEC, ICON_SCENE, - butr->xmax-20, butr->ymin, 20, 19, - &node->custom2, 0, 0, 0, 0, "Re-render this Layer"); - - } + col= uiLayoutColumn(layout, 0); + uiItemR(col, "", 0, ptr, "layer", 0); + + /* XXX Missing 're-render this layer' button - needs completely new implementation */ } -static void node_composit_buts_blur(uiLayout *layout, PointerRNA *ptr) +static void node_composit_buts_blur(uiLayout *layout, bContext *C, PointerRNA *ptr) { uiLayout *col; col= uiLayoutColumn(layout, 0); uiItemR(col, "", 0, ptr, "filter_type", 0); - /* Only for "Fast Gaussian" */ - if (RNA_enum_get(ptr, "filter_type")!= 7) { + if (RNA_enum_get(ptr, "filter_type")!= R_FILTER_FAST_GAUSS) { uiItemR(col, NULL, 0, ptr, "bokeh", 0); uiItemR(col, NULL, 0, ptr, "gamma", 0); } uiItemR(col, NULL, 0, ptr, "relative", 0); col= uiLayoutColumn(layout, 1); - if (RNA_boolean_get(ptr, "relative")== 1) { + if (RNA_boolean_get(ptr, "relative")) { uiItemR(col, "X", 0, ptr, "factor_x", 0); uiItemR(col, "Y", 0, ptr, "factor_y", 0); } @@ -1054,7 +622,7 @@ static void node_composit_buts_blur(uiLayout *layout, PointerRNA *ptr) } } -static void node_composit_buts_dblur(uiLayout *layout, PointerRNA *ptr) +static void node_composit_buts_dblur(uiLayout *layout, bContext *C, PointerRNA *ptr) { uiLayout *col; @@ -1078,7 +646,7 @@ static void node_composit_buts_dblur(uiLayout *layout, PointerRNA *ptr) uiItemR(layout, NULL, 0, ptr, "zoom", 0); } -static void node_composit_buts_bilateralblur(uiLayout *layout, PointerRNA *ptr) +static void node_composit_buts_bilateralblur(uiLayout *layout, bContext *C, PointerRNA *ptr) { uiLayout *col; @@ -1088,8 +656,7 @@ static void node_composit_buts_bilateralblur(uiLayout *layout, PointerRNA *ptr) uiItemR(col, NULL, 0, ptr, "sigma_space", 0); } -/* qdn: defocus node */ -static void node_composit_buts_defocus(uiLayout *layout, PointerRNA *ptr) +static void node_composit_buts_defocus(uiLayout *layout, bContext *C, PointerRNA *ptr) { uiLayout *sub, *col; @@ -1106,15 +673,13 @@ static void node_composit_buts_defocus(uiLayout *layout, PointerRNA *ptr) uiItemR(layout, NULL, 0, ptr, "max_blur", 0); uiItemR(layout, NULL, 0, ptr, "threshold", 0); - - // Preview + col = uiLayoutColumn(layout, 0); uiItemR(col, NULL, 0, ptr, "preview", 0); sub = uiLayoutColumn(col, 0); uiLayoutSetActive(sub, RNA_boolean_get(ptr, "preview")); uiItemR(sub, NULL, 0, ptr, "samples", 0); - // Z-Buffer col = uiLayoutColumn(layout, 0); uiItemR(col, NULL, 0, ptr, "use_zbuffer", 0); sub = uiLayoutColumn(col, 0); @@ -1123,7 +688,7 @@ static void node_composit_buts_defocus(uiLayout *layout, PointerRNA *ptr) } /* qdn: glare node */ -static void node_composit_buts_glare(uiLayout *layout, PointerRNA *ptr) +static void node_composit_buts_glare(uiLayout *layout, bContext *C, PointerRNA *ptr) { uiItemR(layout, "", 0, ptr, "glare_type", 0); uiItemR(layout, "", 0, ptr, "quality", 0); @@ -1153,8 +718,7 @@ static void node_composit_buts_glare(uiLayout *layout, PointerRNA *ptr) } } -/* qdn: tonemap node */ -static void node_composit_buts_tonemap(uiLayout *layout, PointerRNA *ptr) +static void node_composit_buts_tonemap(uiLayout *layout, bContext *C, PointerRNA *ptr) { uiLayout *col; @@ -1173,8 +737,7 @@ static void node_composit_buts_tonemap(uiLayout *layout, PointerRNA *ptr) } } -/* qdn: lens distortion node */ -static void node_composit_buts_lensdist(uiLayout *layout, PointerRNA *ptr) +static void node_composit_buts_lensdist(uiLayout *layout, bContext *C, PointerRNA *ptr) { uiLayout *col; @@ -1187,7 +750,7 @@ static void node_composit_buts_lensdist(uiLayout *layout, PointerRNA *ptr) uiItemR(col, NULL, 0, ptr, "fit", 0); } -static void node_composit_buts_vecblur(uiLayout *layout, PointerRNA *ptr) +static void node_composit_buts_vecblur(uiLayout *layout, bContext *C, PointerRNA *ptr) { uiLayout *col; @@ -1203,17 +766,17 @@ static void node_composit_buts_vecblur(uiLayout *layout, PointerRNA *ptr) uiItemR(layout, NULL, 0, ptr, "curved", 0); } -static void node_composit_buts_filter(uiLayout *layout, PointerRNA *ptr) +static void node_composit_buts_filter(uiLayout *layout, bContext *C, PointerRNA *ptr) { uiItemR(layout, "", 0, ptr, "filter_type", 0); } -static void node_composit_buts_flip(uiLayout *layout, PointerRNA *ptr) +static void node_composit_buts_flip(uiLayout *layout, bContext *C, PointerRNA *ptr) { uiItemR(layout, "", 0, ptr, "axis", 0); } -static void node_composit_buts_crop(uiLayout *layout, PointerRNA *ptr) +static void node_composit_buts_crop(uiLayout *layout, bContext *C, PointerRNA *ptr) { uiLayout *col; @@ -1226,7 +789,7 @@ static void node_composit_buts_crop(uiLayout *layout, PointerRNA *ptr) uiItemR(col, "Down", 0, ptr, "y2", 0); } -static void node_composit_buts_splitviewer(uiLayout *layout, PointerRNA *ptr) +static void node_composit_buts_splitviewer(uiLayout *layout, bContext *C, PointerRNA *ptr) { uiLayout *row, *col; @@ -1236,7 +799,7 @@ static void node_composit_buts_splitviewer(uiLayout *layout, PointerRNA *ptr) uiItemR(col, NULL, 0, ptr, "factor", 0); } -static void node_composit_buts_map_value(uiLayout *layout, PointerRNA *ptr) +static void node_composit_buts_map_value(uiLayout *layout, bContext *C, PointerRNA *ptr) { uiLayout *sub, *col; @@ -1257,18 +820,16 @@ static void node_composit_buts_map_value(uiLayout *layout, PointerRNA *ptr) uiItemR(sub, "", 0, ptr, "max", 0); } -static void node_composit_buts_alphaover(uiLayout *layout, PointerRNA *ptr) +static void node_composit_buts_alphaover(uiLayout *layout, bContext *C, PointerRNA *ptr) { uiLayout *col; col =uiLayoutColumn(layout, 1); - /* alpha type */ uiItemR(col, NULL, 0, ptr, "convert_premul", 0); - /* mix factor */ uiItemR(col, NULL, 0, ptr, "premul", 0); } -static void node_composit_buts_hue_sat(uiLayout *layout, PointerRNA *ptr) +static void node_composit_buts_hue_sat(uiLayout *layout, bContext *C, PointerRNA *ptr) { uiLayout *col; @@ -1278,12 +839,12 @@ static void node_composit_buts_hue_sat(uiLayout *layout, PointerRNA *ptr) uiItemR(col, NULL, 0, ptr, "val", UI_ITEM_R_SLIDER); } -static void node_composit_buts_dilateerode(uiLayout *layout, PointerRNA *ptr) +static void node_composit_buts_dilateerode(uiLayout *layout, bContext *C, PointerRNA *ptr) { uiItemR(layout, NULL, 0, ptr, "distance", 0); } -static void node_composit_buts_diff_matte(uiLayout *layout, PointerRNA *ptr) +static void node_composit_buts_diff_matte(uiLayout *layout, bContext *C, PointerRNA *ptr) { uiLayout *col; @@ -1292,7 +853,7 @@ static void node_composit_buts_diff_matte(uiLayout *layout, PointerRNA *ptr) uiItemR(col, NULL, 0, ptr, "falloff", UI_ITEM_R_SLIDER); } -static void node_composit_buts_distance_matte(uiLayout *layout, PointerRNA *ptr) +static void node_composit_buts_distance_matte(uiLayout *layout, bContext *C, PointerRNA *ptr) { uiLayout *col; @@ -1301,7 +862,7 @@ static void node_composit_buts_distance_matte(uiLayout *layout, PointerRNA *ptr) uiItemR(col, NULL, 0, ptr, "falloff", UI_ITEM_R_SLIDER); } -static void node_composit_buts_color_spill(uiLayout *layout, PointerRNA *ptr) +static void node_composit_buts_color_spill(uiLayout *layout, bContext *C, PointerRNA *ptr) { uiLayout *row, *col; @@ -1311,7 +872,7 @@ static void node_composit_buts_color_spill(uiLayout *layout, PointerRNA *ptr) uiItemR(row, NULL, 0, ptr, "channel", UI_ITEM_R_EXPAND); } -static void node_composit_buts_chroma_matte(uiLayout *layout, PointerRNA *ptr) +static void node_composit_buts_chroma_matte(uiLayout *layout, bContext *C, PointerRNA *ptr) { uiLayout *col; @@ -1325,7 +886,7 @@ static void node_composit_buts_chroma_matte(uiLayout *layout, PointerRNA *ptr) uiItemR(col, NULL, 0, ptr, "shadow_adjust", UI_ITEM_R_SLIDER); } -static void node_composit_buts_color_matte(uiLayout *layout, PointerRNA *ptr) +static void node_composit_buts_color_matte(uiLayout *layout, bContext *C, PointerRNA *ptr) { uiLayout *col; @@ -1335,54 +896,22 @@ static void node_composit_buts_color_matte(uiLayout *layout, PointerRNA *ptr) uiItemR(col, NULL, 0, ptr, "v", UI_ITEM_R_SLIDER); } -static void node_composit_buts_channel_matte(uiLayout *layout, PointerRNA *ptr) +static void node_composit_buts_channel_matte(uiLayout *layout, bContext *C, PointerRNA *ptr) { uiLayout *col, *row; - - uiBlock *block= uiLayoutAbsoluteBlock(layout); - bNode *node= ptr->data; - rctf *butr= &node->butr; - short sx= (butr->xmax-butr->xmin)/4; - short cx= (butr->xmax-butr->xmin)/3; - NodeChroma *c=node->storage; - char *c1, *c2, *c3; - /*color space selector*/ row= uiLayoutRow(layout, 0); uiItemR(row, NULL, 0, ptr, "color_space", UI_ITEM_R_EXPAND); - if (node->custom1==1) { - c1="R"; c2="G"; c3="B"; - } - else if(node->custom1==2){ - c1="H"; c2="S"; c3="V"; - } - else if(node->custom1==3){ - c1="Y"; c2="U"; c3="V"; - } - else { // if(node->custom1==4){ - c1="Y"; c2="Cb"; c3="Cr"; - } - - /*channel selector */ row= uiLayoutRow(layout, 0); - uiBlockBeginAlign(block); - uiDefButS(block, ROW, B_NODE_EXEC, c1, - butr->xmin,butr->ymin+40,cx,20,&node->custom2,1, 1, 0, 0, "Channel 1"); - uiDefButS(block, ROW, B_NODE_EXEC, c2, - butr->xmin+cx,butr->ymin+40,cx,20,&node->custom2,1, 2, 0, 0, "Channel 2"); - uiDefButS(block, ROW, B_NODE_EXEC, c3, - butr->xmin+cx+cx,butr->ymin+40,cx,20,&node->custom2, 1, 3, 0, 0, "Channel 3"); - uiBlockEndAlign(block); + uiItemR(row, NULL, 0, ptr, "channel", UI_ITEM_R_EXPAND); - /*tolerance sliders */ col =uiLayoutColumn(layout, 1); uiItemR(col, NULL, 0, ptr, "high", UI_ITEM_R_SLIDER); uiItemR(col, NULL, 0, ptr, "low", UI_ITEM_R_SLIDER); - } -static void node_composit_buts_luma_matte(uiLayout *layout, PointerRNA *ptr) +static void node_composit_buts_luma_matte(uiLayout *layout, bContext *C, PointerRNA *ptr) { uiLayout *col; @@ -1391,50 +920,17 @@ static void node_composit_buts_luma_matte(uiLayout *layout, PointerRNA *ptr) uiItemR(col, NULL, 0, ptr, "low", UI_ITEM_R_SLIDER); } -static void node_composit_buts_map_uv(uiLayout *layout, PointerRNA *ptr) +static void node_composit_buts_map_uv(uiLayout *layout, bContext *C, PointerRNA *ptr) { uiItemR(layout, NULL, 0, ptr, "alpha", 0); } -static void node_composit_buts_id_mask(uiLayout *layout, PointerRNA *ptr) +static void node_composit_buts_id_mask(uiLayout *layout, bContext *C, PointerRNA *ptr) { - uiBlock *block= uiLayoutAbsoluteBlock(layout); - bNode *node= ptr->data; - rctf *butr= &node->butr; - - uiDefButS(block, NUM, B_NODE_EXEC, "ID:", - butr->xmin, butr->ymin, butr->xmax-butr->xmin, 20, - &node->custom1, 0, 10000, 0, 0, "Pass Index number to convert to Alpha"); + uiItemR(layout, NULL, 0, ptr, "index", 0); } -/* allocate sufficient! */ -/* -static void node_imagetype_string(char *str) -{ - str += sprintf(str, "Save Image as: %%t|"); - str += sprintf(str, "Targa %%x%d|", R_TARGA); - str += sprintf(str, "Targa Raw %%x%d|", R_RAWTGA); - str += sprintf(str, "PNG %%x%d|", R_PNG); - str += sprintf(str, "BMP %%x%d|", R_BMP); - str += sprintf(str, "Jpeg %%x%d|", R_JPEG90); - str += sprintf(str, "Iris %%x%d|", R_IRIS); - str += sprintf(str, "Radiance HDR %%x%d|", R_RADHDR); - str += sprintf(str, "Cineon %%x%d|", R_CINEON); - str += sprintf(str, "DPX %%x%d|", R_DPX); - str += sprintf(str, "OpenEXR %%x%d", R_OPENEXR); -} -*/ - -/*static void node_set_image_cb(bContext *C, void *ntree_v, void *node_v) -{ - bNodeTree *ntree= ntree_v; - bNode *node= node_v; - - nodeSetActive(ntree, node); -} -*/ - -static void node_composit_buts_file_output(uiLayout *layout, PointerRNA *ptr) +static void node_composit_buts_file_output(uiLayout *layout, bContext *C, PointerRNA *ptr) { uiLayout *col, *row; @@ -1456,36 +952,12 @@ static void node_composit_buts_file_output(uiLayout *layout, PointerRNA *ptr) uiItemR(row, "End", 0, ptr, "end_frame", 0); } -static void node_scale_cb(bContext *C, void *node_v, void *unused_v) +static void node_composit_buts_scale(uiLayout *layout, bContext *C, PointerRNA *ptr) { - bNode *node= node_v; - bNodeSocket *nsock; - - /* check the 2 inputs, and set them to reasonable values */ - for(nsock= node->inputs.first; nsock; nsock= nsock->next) { - if(ELEM(node->custom1, CMP_SCALE_RELATIVE, CMP_SCALE_SCENEPERCENT)) - nsock->ns.vec[0]= 1.0; - else { - if(nsock->next==NULL) - nsock->ns.vec[0]= (float)CTX_data_scene(C)->r.ysch; - else - nsock->ns.vec[0]= (float)CTX_data_scene(C)->r.xsch; - } - } -} - -static void node_composit_buts_scale(uiLayout *layout, PointerRNA *ptr) -{ - uiBlock *block= uiLayoutAbsoluteBlock(layout); - bNode *node= ptr->data; - rctf *butr= &node->butr; - uiBut *bt= uiDefButS(block, MENU, B_NODE_EXEC, "Relative %x0|Absolute %x1|Scene Size % %x2|", - butr->xmin, butr->ymin, butr->xmax-butr->xmin, 20, - &node->custom1, 0, 0, 0, 0, "Scale new image to absolute pixel size, size relative to the incoming image, or using the 'percent' size of the scene"); - uiButSetFunc(bt, node_scale_cb, node, NULL); + uiItemR(layout, "", 0, ptr, "space", 0); } -static void node_composit_buts_invert(uiLayout *layout, PointerRNA *ptr) +static void node_composit_buts_invert(uiLayout *layout, bContext *C, PointerRNA *ptr) { uiLayout *col; @@ -1494,14 +966,14 @@ static void node_composit_buts_invert(uiLayout *layout, PointerRNA *ptr) uiItemR(col, NULL, 0, ptr, "alpha", 0); } -static void node_composit_buts_premulkey(uiLayout *layout, PointerRNA *ptr) +static void node_composit_buts_premulkey(uiLayout *layout, bContext *C, PointerRNA *ptr) { uiItemR(layout, "", 0, ptr, "mapping", 0); } -static void node_composit_buts_view_levels(uiLayout *layout, PointerRNA *ptr) +static void node_composit_buts_view_levels(uiLayout *layout, bContext *C, PointerRNA *ptr) { - uiItemR(layout, NULL, 0, ptr, "color_space", UI_ITEM_R_EXPAND); + uiItemR(layout, NULL, 0, ptr, "channel", UI_ITEM_R_EXPAND); } /* only once called */ @@ -1541,7 +1013,7 @@ static void node_composit_set_butfunc(bNodeType *ntype) ntype->uifunc= node_buts_mix_rgb; break; case CMP_NODE_VALTORGB: - ntype->uifunc= node_buts_valtorgb; + ntype->uifunc= node_buts_colorramp; break; case CMP_NODE_CROP: ntype->uifunc= node_composit_buts_crop; @@ -1555,19 +1027,15 @@ static void node_composit_set_butfunc(bNodeType *ntype) case CMP_NODE_BILATERALBLUR: ntype->uifunc= node_composit_buts_bilateralblur; break; - /* qdn: defocus node */ case CMP_NODE_DEFOCUS: ntype->uifunc = node_composit_buts_defocus; break; - /* qdn: glare node */ case CMP_NODE_GLARE: ntype->uifunc = node_composit_buts_glare; break; - /* qdn: tonemap node */ case CMP_NODE_TONEMAP: ntype->uifunc = node_composit_buts_tonemap; break; - /* qdn: lens distortion node */ case CMP_NODE_LENSDIST: ntype->uifunc = node_composit_buts_lensdist; break; @@ -1647,7 +1115,7 @@ static void node_composit_set_butfunc(bNodeType *ntype) /* ****************** BUTTON CALLBACKS FOR TEXTURE NODES ***************** */ -static void node_texture_buts_bricks(uiLayout *layout, PointerRNA *ptr) +static void node_texture_buts_bricks(uiLayout *layout, bContext *C, PointerRNA *ptr) { uiLayout *col; @@ -1668,7 +1136,7 @@ static char* noisebasis_menu() return nbmenu; } -static void node_texture_buts_proc(uiLayout *layout, PointerRNA *ptr) +static void node_texture_buts_proc(uiLayout *layout, bContext *C, PointerRNA *ptr) { uiBlock *block= uiLayoutAbsoluteBlock(layout); bNode *node= ptr->data; @@ -1747,7 +1215,7 @@ static void node_texture_buts_proc(uiLayout *layout, PointerRNA *ptr) } } -static void node_texture_buts_image(uiLayout *layout, PointerRNA *ptr) +static void node_texture_buts_image(uiLayout *layout, bContext *C, PointerRNA *ptr) { uiBlock *block= uiLayoutAbsoluteBlock(layout); bNode *node= ptr->data; @@ -1786,7 +1254,7 @@ static void node_texture_buts_image(uiLayout *layout, PointerRNA *ptr) } } -static void node_texture_buts_output(uiLayout *layout, PointerRNA *ptr) +static void node_texture_buts_output(uiLayout *layout, bContext *C, PointerRNA *ptr) { uiItemR(layout, "", 0, ptr, "output_name", 0); } @@ -1808,7 +1276,7 @@ static void node_texture_set_butfunc(bNodeType *ntype) break; case TEX_NODE_VALTORGB: - ntype->uifunc = node_buts_valtorgb; + ntype->uifunc = node_buts_colorramp; break; case TEX_NODE_CURVE_RGB: diff --git a/source/blender/editors/space_node/node_buttons.c b/source/blender/editors/space_node/node_buttons.c new file mode 100644 index 00000000000..63361f2be66 --- /dev/null +++ b/source/blender/editors/space_node/node_buttons.c @@ -0,0 +1,138 @@ +/** + * $Id: + * + * ***** BEGIN GPL 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. + * + * 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) 2009 Blender Foundation. + * All rights reserved. + * + * + * Contributor(s): Blender Foundation + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#include <string.h> +#include <stdio.h> +#include <math.h> +#include <float.h> + +#include "DNA_ID.h" +#include "DNA_gpencil_types.h" +#include "DNA_node_types.h" +#include "DNA_space_types.h" +#include "DNA_scene_types.h" +#include "DNA_screen_types.h" +#include "DNA_userdef_types.h" + +#include "MEM_guardedalloc.h" + +#include "BLI_math.h" +#include "BLI_blenlib.h" +#include "BLI_rand.h" + +#include "BKE_context.h" +#include "BKE_depsgraph.h" +#include "BKE_idprop.h" +#include "BKE_object.h" +#include "BKE_global.h" +#include "BKE_scene.h" +#include "BKE_screen.h" +#include "BKE_utildefines.h" + +#include "BIF_gl.h" + +#include "WM_api.h" +#include "WM_types.h" + +#include "RNA_access.h" +#include "RNA_define.h" + +#include "ED_gpencil.h" +#include "ED_screen.h" +#include "ED_types.h" +#include "ED_util.h" + +#include "UI_interface.h" +#include "UI_resources.h" +#include "UI_view2d.h" + +#include "node_intern.h" // own include + + +/* ******************* node space & buttons ************** */ +#define B_NOP 1 +#define B_REDR 2 + +#if 0 // XXX not used... +static void do_node_region_buttons(bContext *C, void *arg, int event) +{ + //SpaceNode *snode= CTX_wm_space_node(C); + + switch(event) { + case B_REDR: + ED_area_tag_redraw(CTX_wm_area(C)); + return; /* no notifier! */ + } +} +#endif + +/* ******************* node buttons registration ************** */ + +void node_buttons_register(ARegionType *art) +{ + PanelType *pt; + + // XXX active node + + pt= MEM_callocN(sizeof(PanelType), "spacetype node panel gpencil"); + strcpy(pt->idname, "NODE_PT_gpencil"); + strcpy(pt->label, "Grease Pencil"); + pt->draw= gpencil_panel_standard; + BLI_addtail(&art->paneltypes, pt); +} + +static int node_properties(bContext *C, wmOperator *op) +{ + ScrArea *sa= CTX_wm_area(C); + ARegion *ar= node_has_buttons_region(sa); + + if(ar) + ED_region_toggle_hidden(C, ar); + + return OPERATOR_FINISHED; +} + +/* non-standard poll operator which doesn't care if there are any nodes */ +static int node_properties_poll(bContext *C) +{ + ScrArea *sa= CTX_wm_area(C); + return (sa && (sa->spacetype == SPACE_NODE)); +} + +void NODE_OT_properties(wmOperatorType *ot) +{ + ot->name= "Properties"; + ot->description= "Toggles the properties panel display."; + ot->idname= "NODE_OT_properties"; + + ot->exec= node_properties; + ot->poll= node_properties_poll; + + /* flags */ + ot->flag= 0; +} diff --git a/source/blender/editors/space_node/node_draw.c b/source/blender/editors/space_node/node_draw.c index 26601958c8a..1cdad0b746c 100644 --- a/source/blender/editors/space_node/node_draw.c +++ b/source/blender/editors/space_node/node_draw.c @@ -48,7 +48,7 @@ #include "DNA_text_types.h" #include "DNA_userdef_types.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_threads.h" #include "MEM_guardedalloc.h" @@ -66,14 +66,13 @@ #include "BKE_text.h" #include "BKE_utildefines.h" -/* #include "BDR_gpencil.h" XXX */ - #include "BIF_gl.h" #include "BIF_glutil.h" #include "WM_api.h" #include "WM_types.h" +#include "ED_gpencil.h" #include "ED_screen.h" #include "ED_util.h" #include "ED_types.h" @@ -259,7 +258,7 @@ static void node_update(const bContext *C, bNodeTree *ntree, bNode *node) layout= uiBlockLayout(node->block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, node->locx+NODE_DYS, dy, node->butr.xmax, 20, U.uistyles.first); - node->typeinfo->uifunc(layout, &ptr); + node->typeinfo->uifunc(layout, (bContext *)C, &ptr); uiBlockEndAlign(node->block); uiBlockLayoutResolve(node->block, NULL, &buty); @@ -548,53 +547,25 @@ static void node_sync_cb(bContext *C, void *snode_v, void *node_v) /* ************** Socket callbacks *********** */ -static void socket_vector_menu_cb(bContext *C, void *node_v, void *ntree_v) -{ - if(node_v && ntree_v) { - NodeTagChanged(ntree_v, node_v); - // addqueue(curarea->win, UI_BUT_EVENT, B_NODE_EXEC); XXX - } -} - /* NOTE: this is a block-menu, needs 0 events, otherwise the menu closes */ static uiBlock *socket_vector_menu(bContext *C, ARegion *ar, void *socket_v) { - SpaceNode *snode= CTX_wm_space_node(C); - ScrArea *sa= CTX_wm_area(C); - bNode *node; bNodeSocket *sock= socket_v; - bNodeStack *ns= &sock->ns; uiBlock *block; - uiBut *bt; - /* a bit ugly... retrieve the node the socket comes from */ - for(node= snode->nodetree->nodes.first; node; node= node->next) { - bNodeSocket *sockt; - for(sockt= node->inputs.first; sockt; sockt= sockt->next) - if(sockt==sock) - break; - if(sockt) - break; - } + SpaceNode *snode= CTX_wm_space_node(C); + bNodeTree *ntree = snode->nodetree; + PointerRNA ptr; + uiLayout *layout; + + RNA_pointer_create(&ntree->id, &RNA_NodeSocket, sock, &ptr); block= uiBeginBlock(C, ar, "socket menu", UI_EMBOSS); uiBlockSetFlag(block, UI_BLOCK_KEEP_OPEN); - - /* use this for a fake extra empy space around the buttons */ - uiDefBut(block, LABEL, 0, "", -4, -4, 188, 68, NULL, 0, 0, 0, 0, ""); - uiBlockBeginAlign(block); - bt= uiDefButF(block, NUMSLI, 0, "X ", 0,40,180,20, ns->vec, ns->min, ns->max, 10, 0, ""); - uiButSetFunc(bt, socket_vector_menu_cb, node, snode->nodetree); - bt= uiDefButF(block, NUMSLI, 0, "Y ", 0,20,180,20, ns->vec+1, ns->min, ns->max, 10, 0, ""); - uiButSetFunc(bt, socket_vector_menu_cb, node, snode->nodetree); - bt= uiDefButF(block, NUMSLI, 0, "Z ", 0,0,180,20, ns->vec+2, ns->min, ns->max, 10, 0, ""); - uiButSetFunc(bt, socket_vector_menu_cb, node, snode->nodetree); + layout= uiLayoutColumn(uiBlockLayout(block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, sock->locx, sock->locy-8, 140, 20, U.uistyles.first), 0); - uiBlockSetDirection(block, UI_TOP); - uiEndBlock(C, block); - - ED_area_tag_redraw(sa); + uiItemR(layout, "", 0, &ptr, "default_value", UI_ITEM_R_EXPAND); return block; } @@ -671,6 +642,8 @@ static void node_draw_basis(const bContext *C, ARegion *ar, SpaceNode *snode, bN int /*ofs,*/ color_id= node_get_colorid(node); char showname[128]; /* 128 used below */ View2D *v2d = &ar->v2d; + bNodeTree *ntree = snode->nodetree; + PointerRNA ptr; uiSetRoundBox(15-4); ui_dropshadow(rct, BASIS_RAD, snode->aspect, node->flag & SELECT); @@ -694,41 +667,41 @@ static void node_draw_basis(const bContext *C, ARegion *ar, SpaceNode *snode, bN icon_id= ICON_MATERIAL; else icon_id= ICON_MATERIAL_DATA; - iconofs-= 18.0f; + iconofs-= 20.0f; glEnable(GL_BLEND); - UI_icon_draw_aspect(iconofs, rct->ymax-NODE_DY+2, icon_id, snode->aspect, 0.5f); + UI_icon_draw_aspect(iconofs, rct->ymax-NODE_DY, icon_id, snode->aspect, 0.5f); glDisable(GL_BLEND); } if(node->type == NODE_GROUP) { - iconofs-= 18.0f; + iconofs-= 20.0f; glEnable(GL_BLEND); if(node->id->lib) { float rgb[3] = {1.0f, 0.7f, 0.3f}; - UI_icon_draw_aspect_color(iconofs, rct->ymax-NODE_DY+2, ICON_NODE, snode->aspect, rgb); + UI_icon_draw_aspect_color(iconofs, rct->ymax-NODE_DY, ICON_NODETREE, snode->aspect, rgb); } else { - UI_icon_draw_aspect(iconofs, rct->ymax-NODE_DY+2, ICON_NODE, snode->aspect, 0.5f); + UI_icon_draw_aspect(iconofs, rct->ymax-NODE_DY, ICON_NODETREE, snode->aspect, 0.5f); } glDisable(GL_BLEND); } if(node->typeinfo->flag & NODE_OPTIONS) { - iconofs-= 18.0f; + iconofs-= 20.0f; glEnable(GL_BLEND); - UI_icon_draw_aspect(iconofs, rct->ymax-NODE_DY+2, ICON_BUTS, snode->aspect, 0.5f); + UI_icon_draw_aspect(iconofs, rct->ymax-NODE_DY, ICON_BUTS, snode->aspect, 0.5f); glDisable(GL_BLEND); } { /* always hide/reveal unused sockets */ int shade; - iconofs-= 18.0f; + iconofs-= 20.0f; // XXX re-enable /*if(node_has_hidden_sockets(node)) shade= -40; else*/ shade= -90; glEnable(GL_BLEND); - UI_icon_draw_aspect(iconofs, rct->ymax-NODE_DY+2, ICON_PLUS, snode->aspect, 0.5f); + UI_icon_draw_aspect(iconofs, rct->ymax-NODE_DY, ICON_PLUS, snode->aspect, 0.5f); glDisable(GL_BLEND); } @@ -746,12 +719,14 @@ static void node_draw_basis(const bContext *C, ARegion *ar, SpaceNode *snode, bN else UI_ThemeColor(TH_TEXT); - if(node->flag & NODE_MUTED) - sprintf(showname, "[%s]", node->name); - else if(node->username[0]) - sprintf(showname, "(%s) %s", node->username, node->name); + if(node->flag & NODE_CUSTOM_NAME) + BLI_strncpy(showname, node->name, 32); else - BLI_strncpy(showname, node->name, 128); + /* todo: auto name display for node types */ + BLI_strncpy(showname, node->name, 32); + + //if(node->flag & NODE_MUTED) + // sprintf(showname, "[%s]", showname); uiDefBut(node->block, LABEL, 0, showname, (short)(rct->xmin+15), (short)(rct->ymax-NODE_DY), (int)(iconofs - rct->xmin-18.0f), NODE_DY, NULL, 0, 0, 0, 0, ""); @@ -789,13 +764,14 @@ static void node_draw_basis(const bContext *C, ARegion *ar, SpaceNode *snode, bN if(!(sock->flag & (SOCK_HIDDEN|SOCK_UNAVAIL))) { socket_circle_draw(sock, NODE_SOCKSIZE); + RNA_pointer_create(&ntree->id, &RNA_NodeSocket, sock, &ptr); + if(node->block && sock->link==NULL) { - float *butpoin= sock->ns.vec; - + if(sock->type==SOCK_VALUE) { - bt= uiDefButF(node->block, NUM, B_NODE_EXEC, sock->name, - (short)sock->locx+NODE_DYS, (short)(sock->locy)-9, (short)node->width-NODE_DY, 17, - butpoin, sock->ns.min, sock->ns.max, 10, 2, ""); + bt=uiDefButR(node->block, NUM, B_NODE_EXEC, sock->name, + (short)sock->locx+NODE_DYS, (short)(sock->locy)-9, (short)node->width-NODE_DY, 17, + &ptr, "default_value", 0, sock->ns.min, sock->ns.max, -1, -1, NULL); uiButSetFunc(bt, node_sync_cb, snode, node); } else if(sock->type==SOCK_VECTOR) { @@ -808,9 +784,9 @@ static void node_draw_basis(const bContext *C, ARegion *ar, SpaceNode *snode, bN if(labelw>0) width= 40; else width= (short)node->width-NODE_DY; - bt= uiDefButF(node->block, COL, B_NODE_EXEC, "", - (short)(sock->locx+NODE_DYS), (short)sock->locy-8, width, 15, - butpoin, 0, 0, 0, 0, ""); + bt=uiDefButR(node->block, COL, B_NODE_EXEC, "", + (short)sock->locx+NODE_DYS, (short)(sock->locy)-8, width, 15, + &ptr, "default_value", 0, sock->ns.min, sock->ns.max, -1, -1, NULL); uiButSetFunc(bt, node_sync_cb, snode, node); if(labelw>0) uiDefBut(node->block, LABEL, 0, sock->name, @@ -820,7 +796,7 @@ static void node_draw_basis(const bContext *C, ARegion *ar, SpaceNode *snode, bN } else { - uiDefBut(node->block, LABEL, 0, sock->name, (short)(sock->locx+3.0f), (short)(sock->locy-9.0f), + uiDefBut(node->block, LABEL, 0, sock->name, (short)(sock->locx+7), (short)(sock->locy-9.0f), (short)(node->width-NODE_DY), NODE_DY, NULL, 0, 0, 0, 0, ""); } } @@ -904,12 +880,15 @@ static void node_draw_hidden(const bContext *C, ARegion *ar, SpaceNode *snode, b if(node->miniwidth>0.0f) { - if(node->flag & NODE_MUTED) - sprintf(showname, "[%s]", node->name); - else if(node->username[0]) - sprintf(showname, "(%s)%s", node->username, node->name); + + if(node->flag & NODE_CUSTOM_NAME) + BLI_strncpy(showname, node->name, 128); else + /* todo: auto name display */ BLI_strncpy(showname, node->name, 128); + + //if(node->flag & NODE_MUTED) + // sprintf(showname, "[%s]", showname); uiDefBut(node->block, LABEL, 0, showname, (short)(rct->xmin+15), (short)(centy-10), (int)(rct->xmax - rct->xmin-18.0f -12.0f), NODE_DY, NULL, 0, 0, 0, 0, ""); @@ -1047,12 +1026,8 @@ static void node_draw_group(const bContext *C, ARegion *ar, SpaceNode *snode, bN /* backdrop title */ UI_ThemeColor(TH_TEXT_HI); - if(gnode->username[0]) { - strcpy(showname,"("); - strcat(showname, gnode->username); - strcat(showname,") "); - strcat(showname, ngroup->id.name+2); - } + if (gnode->flag & NODE_CUSTOM_NAME) + strcat(showname, gnode->name); else strcpy(showname, ngroup->id.name+2); @@ -1127,38 +1102,16 @@ void drawnodespace(const bContext *C, ARegion *ar, View2D *v2d) } /* draw grease-pencil ('canvas' strokes) */ - /*if ((snode->flag & SNODE_DISPGP) && (snode->nodetree)) - draw_gpencil_2dview(sa, 1);*/ - - /* restore viewport (not needed yet) */ - /*mywinset(sa->win);*/ - - /* ortho at pixel level curarea */ - /*myortho2(-0.375, sa->winx-0.375, -0.375, sa->winy-0.375);*/ - - /* draw grease-pencil (screen strokes) */ - /*if ((snode->flag & SNODE_DISPGP) && (snode->nodetree)) - draw_gpencil_2dview(sa, 0);*/ - - //draw_area_emboss(sa); - - /* it is important to end a view in a transform compatible with buttons */ - /*bwin_scalematrix(sa->win, snode->blockscale, snode->blockscale, snode->blockscale); - nodes_blockhandlers(sa);*/ - - //curarea->win_swap= WIN_BACK_OK; - - /* in the end, this is a delayed previewrender test, to allow buttons to be first */ - /*if(snode->flag & SNODE_DO_PREVIEW) { - addafterqueue(sa->win, RENDERPREVIEW, 1); - snode->flag &= ~SNODE_DO_PREVIEW; - }*/ - - + if (/*(snode->flag & SNODE_DISPGP) &&*/ (snode->nodetree)) + draw_gpencil_2dview((bContext*)C, 1); /* reset view matrix */ UI_view2d_view_restore(C); + /* draw grease-pencil (screen strokes, and also paintbuffer) */ + if (/*(snode->flag & SNODE_DISPGP) && */(snode->nodetree)) + draw_gpencil_2dview((bContext*)C, 0); + /* scrollers */ scrollers= UI_view2d_scrollers_calc(C, v2d, 10, V2D_GRID_CLAMP, V2D_ARG_DUMMY, V2D_ARG_DUMMY); UI_view2d_scrollers_draw(C, v2d, scrollers); diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c index 046ae8b1f5d..70c47a67761 100644 --- a/source/blender/editors/space_node/node_edit.c +++ b/source/blender/editors/space_node/node_edit.c @@ -64,7 +64,7 @@ #include "BIF_gl.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_storage_types.h" @@ -395,21 +395,6 @@ static void composit_node_event(SpaceNode *snode, short event) case B_REDR: // allqueue(REDRAWNODE, 1); break; - case B_NODE_LOADIMAGE: - { - bNode *node= nodeGetActive(snode->edittree); - char name[FILE_MAXDIR+FILE_MAXFILE]; - - if(node->id) - strcpy(name, ((Image *)node->id)->name); - else strcpy(name, U.textudir); - if (G.qual & LR_CTRLKEY) { - activate_imageselect(FILE_SPECIAL, "SELECT IMAGE", name, load_node_image); - } else { - activate_fileselect(FILE_SPECIAL, "SELECT IMAGE", name, load_node_image); - } - break; - } case B_NODE_SETIMAGE: { bNode *node= nodeGetActive(snode->edittree); @@ -1266,6 +1251,8 @@ void NODE_OT_resize(wmOperatorType *ot) /* ******************** rename ******************* */ + +/* should go through RNA */ void node_rename(SpaceNode *snode) { bNode *node, *rename_node; @@ -1281,7 +1268,7 @@ void node_rename(SpaceNode *snode) if(found_node) { rename_node= nodeGetActive(snode->edittree); - node_rename_but((char *)rename_node->username); + node_rename_but((char *)rename_node->name); // allqueue(REDRAWNODE, 1); } @@ -2169,7 +2156,7 @@ static int cut_links_intersect(bNodeLink *link, float mcoords[][2], int tot) for(i=0; i<tot-1; i++) for(b=0; b<LINK_RESOL-1; b++) - if(IsectLL2Df(mcoords[i], mcoords[i+1], coord_array[b], coord_array[b+1]) > 0) + if(isect_line_line_v2(mcoords[i], mcoords[i+1], coord_array[b], coord_array[b+1]) > 0) return 1; } return 0; diff --git a/source/blender/editors/space_node/node_intern.h b/source/blender/editors/space_node/node_intern.h index f55ecf1d0f4..2d4d7035568 100644 --- a/source/blender/editors/space_node/node_intern.h +++ b/source/blender/editors/space_node/node_intern.h @@ -44,6 +44,9 @@ struct wmWindowManager; #define NODE_EXTEND 1 #define NODE_EXCLUSIVE 3 +/* space_node.c */ +ARegion *node_has_buttons_region(ScrArea *sa); + /* node_header.c */ void node_header_buttons(const bContext *C, ARegion *ar); void node_menus_register(struct ARegionType *art); @@ -51,6 +54,10 @@ void node_menus_register(struct ARegionType *art); /* node_draw.c */ void drawnodespace(const bContext *C, ARegion *ar, View2D *v2d); +/* node_buttons.c */ +void node_buttons_register(struct ARegionType *art); +void NODE_OT_properties(struct wmOperatorType *ot); + /* node_ops.c */ void node_operatortypes(void); void node_keymap(wmKeyConfig *keyconf); @@ -121,6 +128,6 @@ enum { B_MATPRV, B_NODE_LOADIMAGE, B_NODE_SETIMAGE, -} eActHeader_ButEvents; +} eNodeSpace_ButEvents; #endif /* ED_NODE_INTERN_H */ diff --git a/source/blender/editors/space_node/node_ops.c b/source/blender/editors/space_node/node_ops.c index 443b83a91bc..b78fc864a11 100644 --- a/source/blender/editors/space_node/node_ops.c +++ b/source/blender/editors/space_node/node_ops.c @@ -49,6 +49,8 @@ void node_operatortypes(void) { + WM_operatortype_append(NODE_OT_properties); + WM_operatortype_append(NODE_OT_select); WM_operatortype_append(NODE_OT_select_extend); WM_operatortype_append(NODE_OT_select_all); @@ -69,9 +71,17 @@ void node_operatortypes(void) void node_keymap(struct wmKeyConfig *keyconf) { - wmKeyMap *keymap= WM_keymap_find(keyconf, "Node", SPACE_NODE, 0); + wmKeyMap *keymap; wmKeyMapItem *kmi; + /* Entire Editor only ----------------- */ + keymap= WM_keymap_find(keyconf, "Node Generic", SPACE_NODE, 0); + + WM_keymap_add_item(keymap, "NODE_OT_properties", NKEY, KM_PRESS, 0, 0); + + /* Main Area only ----------------- */ + keymap= WM_keymap_find(keyconf, "Node", SPACE_NODE, 0); + /* mouse select in nodes used to be both keys, it's UI elements... */ RNA_enum_set(WM_keymap_add_item(keymap, "NODE_OT_select", ACTIONMOUSE, KM_PRESS, 0, 0)->ptr, "select_type", NODE_SELECT_MOUSE); RNA_enum_set(WM_keymap_add_item(keymap, "NODE_OT_select", SELECTMOUSE, KM_PRESS, 0, 0)->ptr, "select_type", NODE_SELECT_MOUSE); diff --git a/source/blender/editors/space_node/node_select.c b/source/blender/editors/space_node/node_select.c index ecbd46b720f..e082f3797c1 100644 --- a/source/blender/editors/space_node/node_select.c +++ b/source/blender/editors/space_node/node_select.c @@ -244,9 +244,7 @@ static int node_borderselect_exec(bContext *C, wmOperator *op) bNode *node; rcti rect; rctf rectf; - short val; - - val= RNA_int_get(op->ptr, "event_type"); + int gesture_mode= RNA_int_get(op->ptr, "gesture_mode"); rect.xmin= RNA_int_get(op->ptr, "xmin"); rect.ymin= RNA_int_get(op->ptr, "ymin"); @@ -261,7 +259,7 @@ static int node_borderselect_exec(bContext *C, wmOperator *op) for(node= snode->edittree->nodes.first; node; node= node->next) { if(BLI_isect_rctf(&rectf, &node->totr, NULL)) { - if(val==NODE_EXTEND) + if(gesture_mode==GESTURE_MODAL_SELECT) node->flag |= SELECT; else node->flag &= ~SELECT; @@ -290,11 +288,7 @@ void NODE_OT_select_border(wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; /* rna */ - RNA_def_int(ot->srna, "event_type", 0, INT_MIN, INT_MAX, "Event Type", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "xmin", 0, INT_MIN, INT_MAX, "X Min", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "xmax", 0, INT_MIN, INT_MAX, "X Max", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "ymin", 0, INT_MIN, INT_MAX, "Y Min", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "ymax", 0, INT_MIN, INT_MAX, "Y Max", "", INT_MIN, INT_MAX); + WM_operator_properties_gesture_border(ot, FALSE); } /* ****** Select/Deselect All ****** */ diff --git a/source/blender/editors/space_node/space_node.c b/source/blender/editors/space_node/space_node.c index 46461eff76b..17bb96f5163 100644 --- a/source/blender/editors/space_node/space_node.c +++ b/source/blender/editors/space_node/space_node.c @@ -40,7 +40,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_rand.h" #include "BKE_colortools.h" @@ -65,6 +65,35 @@ #include "node_intern.h" // own include +/* ******************** manage regions ********************* */ + +ARegion *node_has_buttons_region(ScrArea *sa) +{ + ARegion *ar, *arnew; + + for(ar= sa->regionbase.first; ar; ar= ar->next) + if(ar->regiontype==RGN_TYPE_UI) + return ar; + + /* add subdiv level; after header */ + for(ar= sa->regionbase.first; ar; ar= ar->next) + if(ar->regiontype==RGN_TYPE_HEADER) + break; + + /* is error! */ + if(ar==NULL) return NULL; + + arnew= MEM_callocN(sizeof(ARegion), "buttons for node"); + + BLI_insertlinkafter(&sa->regionbase, ar, arnew); + arnew->regiontype= RGN_TYPE_UI; + arnew->alignment= RGN_ALIGN_RIGHT; + + arnew->flag = RGN_FLAG_HIDDEN; + + return arnew; +} + /* ******************** default callbacks for node space ***************** */ static SpaceLink *node_new(const bContext *C) @@ -82,16 +111,13 @@ static SpaceLink *node_new(const bContext *C) ar->regiontype= RGN_TYPE_HEADER; ar->alignment= RGN_ALIGN_BOTTOM; -#if 0 - /* channels */ - ar= MEM_callocN(sizeof(ARegion), "nodetree area for node"); + /* buttons/list view */ + ar= MEM_callocN(sizeof(ARegion), "buttons for node"); BLI_addtail(&snode->regionbase, ar); - ar->regiontype= RGN_TYPE_CHANNELS; - ar->alignment= RGN_ALIGN_LEFT; - - //ar->v2d.scroll = (V2D_SCROLL_RIGHT|V2D_SCROLL_BOTTOM); -#endif + ar->regiontype= RGN_TYPE_UI; + ar->alignment= RGN_ALIGN_RIGHT; + ar->flag = RGN_FLAG_HIDDEN; /* main area */ ar= MEM_callocN(sizeof(ARegion), "main area for node"); @@ -128,9 +154,7 @@ static SpaceLink *node_new(const bContext *C) /* not spacelink itself */ static void node_free(SpaceLink *sl) { -// SpaceNode *snode= (SpaceNode*) sl; -// XXX if(snode->gpd) free_gpencil_data(snode->gpd); } @@ -210,41 +234,26 @@ static SpaceLink *node_duplicate(SpaceLink *sl) /* clear or remove stuff from old */ snoden->nodetree= NULL; -// XXX snoden->gpd= gpencil_data_duplicate(snode->gpd); return (SpaceLink *)snoden; } -#if 0 -static void node_channel_area_init(wmWindowManager *wm, ARegion *ar) + +/* add handlers, stuff you only do once or on area/region changes */ +static void node_buttons_area_init(wmWindowManager *wm, ARegion *ar) { - UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_LIST, ar->winx, ar->winy); + wmKeyMap *keymap; + + ED_region_panels_init(wm, ar); + + keymap= WM_keymap_find(wm->defaultconf, "Node Generic", SPACE_NODE, 0); + WM_event_add_keymap_handler(&ar->handlers, keymap); } -static void node_channel_area_draw(const bContext *C, ARegion *ar) +static void node_buttons_area_draw(const bContext *C, ARegion *ar) { - View2D *v2d= &ar->v2d; - View2DScrollers *scrollers; - float col[3]; - - /* clear and setup matrix */ - UI_GetThemeColor3fv(TH_BACK, col); - glClearColor(col[0], col[1], col[2], 0.0); - glClear(GL_COLOR_BUFFER_BIT); - - UI_view2d_view_ortho(C, v2d); - - /* data... */ - - /* reset view matrix */ - UI_view2d_view_restore(C); - - /* scrollers */ - scrollers= UI_view2d_scrollers_calc(C, v2d, V2D_ARG_DUMMY, V2D_ARG_DUMMY, V2D_ARG_DUMMY, V2D_ARG_DUMMY); - UI_view2d_scrollers_draw(C, v2d, scrollers); - UI_view2d_scrollers_free(scrollers); + ED_region_panels(C, ar, 1, NULL, -1); } -#endif /* Initialise main area, setting handlers. */ static void node_main_area_init(wmWindowManager *wm, ARegion *ar) @@ -253,7 +262,10 @@ static void node_main_area_init(wmWindowManager *wm, ARegion *ar) UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_CUSTOM, ar->winx, ar->winy); - /* own keymap */ + /* own keymaps */ + keymap= WM_keymap_find(wm->defaultconf, "Node Generic", SPACE_NODE, 0); + WM_event_add_keymap_handler(&ar->handlers, keymap); + keymap= WM_keymap_find(wm->defaultconf, "Node", SPACE_NODE, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); } @@ -343,7 +355,7 @@ void ED_spacetype_node(void) art->init= node_main_area_init; art->draw= node_main_area_draw; art->listener= node_region_listener; - art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D; + art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D|ED_KEYMAP_GPENCIL; BLI_addhead(&st->regiontypes, art); @@ -360,19 +372,17 @@ void ED_spacetype_node(void) node_menus_register(art); -#if 0 - /* regions: channels */ + /* regions: listview/buttons */ art= MEM_callocN(sizeof(ARegionType), "spacetype node region"); - art->regionid = RGN_TYPE_CHANNELS; - art->minsizex= 100; - art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D|ED_KEYMAP_FRAMES; - - art->init= node_channel_area_init; - art->draw= node_channel_area_draw; - + art->regionid = RGN_TYPE_UI; + art->minsizex= 180; // XXX + art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_FRAMES; + art->listener= node_region_listener; + art->init= node_buttons_area_init; + art->draw= node_buttons_area_draw; BLI_addhead(&st->regiontypes, art); -#endif + node_buttons_register(art); BKE_spacetype_register(st); } diff --git a/source/blender/editors/space_outliner/outliner.c b/source/blender/editors/space_outliner/outliner.c index bc203a9c80b..39eecd7d2de 100644 --- a/source/blender/editors/space_outliner/outliner.c +++ b/source/blender/editors/space_outliner/outliner.c @@ -2025,6 +2025,7 @@ static int tree_element_active_posegroup(bContext *C, Scene *scene, TreeElement static int tree_element_active_posechannel(bContext *C, Scene *scene, TreeElement *te, TreeStoreElem *tselem, int set) { Object *ob= (Object *)tselem->id; + bArmature *arm= ob->data; bPoseChannel *pchan= te->directdata; if(set) { @@ -2033,10 +2034,14 @@ static int tree_element_active_posechannel(bContext *C, Scene *scene, TreeElemen if(set==2) ED_pose_deselectall(ob, 2, 0); // 2 = clear active tag else ED_pose_deselectall(ob, 0, 0); // 0 = deselect - if(set==2 && (pchan->bone->flag & BONE_SELECTED)) - pchan->bone->flag &= ~(BONE_SELECTED|BONE_ACTIVE); - else - pchan->bone->flag |= BONE_SELECTED|BONE_ACTIVE; + if(set==2 && (pchan->bone->flag & BONE_SELECTED)) { + pchan->bone->flag &= ~BONE_SELECTED; + if(arm->act_bone==pchan->bone) + arm->act_bone= NULL; + } else { + pchan->bone->flag |= BONE_SELECTED; + arm->act_bone= pchan->bone; + } WM_event_add_notifier(C, NC_OBJECT|ND_BONE_ACTIVE, ob); @@ -2060,10 +2065,14 @@ static int tree_element_active_bone(bContext *C, Scene *scene, TreeElement *te, if(set==2) ED_pose_deselectall(OBACT, 2, 0); // 2 is clear active tag else ED_pose_deselectall(OBACT, 0, 0); - if(set==2 && (bone->flag & BONE_SELECTED)) - bone->flag &= ~(BONE_SELECTED|BONE_ACTIVE); - else - bone->flag |= BONE_SELECTED|BONE_ACTIVE; + if(set==2 && (bone->flag & BONE_SELECTED)) { + bone->flag &= ~BONE_SELECTED; + if(arm->act_bone==bone) + arm->act_bone= NULL; + } else { + bone->flag |= BONE_SELECTED; + arm->act_bone= bone; + } WM_event_add_notifier(C, NC_OBJECT|ND_BONE_ACTIVE, OBACT); } @@ -2086,11 +2095,13 @@ static int tree_element_active_ebone(bContext *C, Scene *scene, TreeElement *te, if(set) { if(!(ebone->flag & BONE_HIDDEN_A)) { - + bArmature *arm= scene->obedit->data; if(set==2) ED_armature_deselectall(scene->obedit, 2, 0); // only clear active tag else ED_armature_deselectall(scene->obedit, 0, 0); // deselect - ebone->flag |= BONE_SELECTED|BONE_ROOTSEL|BONE_TIPSEL|BONE_ACTIVE; + ebone->flag |= BONE_SELECTED|BONE_ROOTSEL|BONE_TIPSEL; + arm->act_edbone= ebone; + // flush to parent? if(ebone->parent && (ebone->flag & BONE_CONNECTED)) ebone->parent->flag |= BONE_TIPSEL; diff --git a/source/blender/editors/space_outliner/space_outliner.c b/source/blender/editors/space_outliner/space_outliner.c index 93fdc96e9f7..5c6a8701f18 100644 --- a/source/blender/editors/space_outliner/space_outliner.c +++ b/source/blender/editors/space_outliner/space_outliner.c @@ -43,7 +43,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_rand.h" #include "BKE_colortools.h" diff --git a/source/blender/editors/space_script/script_ops.c b/source/blender/editors/space_script/script_ops.c index bf0a7e5769e..fd87705648f 100644 --- a/source/blender/editors/space_script/script_ops.c +++ b/source/blender/editors/space_script/script_ops.c @@ -37,7 +37,7 @@ #include "DNA_userdef_types.h" #include "DNA_windowmanager_types.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BKE_context.h" diff --git a/source/blender/editors/space_script/space_script.c b/source/blender/editors/space_script/space_script.c index eae0f77d0e1..fc2f10670df 100644 --- a/source/blender/editors/space_script/space_script.c +++ b/source/blender/editors/space_script/space_script.c @@ -37,7 +37,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_rand.h" #include "BKE_colortools.h" diff --git a/source/blender/editors/space_sequencer/sequencer_add.c b/source/blender/editors/space_sequencer/sequencer_add.c index bd5259ddb52..824dbd1caa8 100644 --- a/source/blender/editors/space_sequencer/sequencer_add.c +++ b/source/blender/editors/space_sequencer/sequencer_add.c @@ -38,7 +38,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_storage_types.h" #include "IMB_imbuf_types.h" diff --git a/source/blender/editors/space_sequencer/sequencer_draw.c b/source/blender/editors/space_sequencer/sequencer_draw.c index 76bed3772b1..ff9edeaeb4b 100644 --- a/source/blender/editors/space_sequencer/sequencer_draw.c +++ b/source/blender/editors/space_sequencer/sequencer_draw.c @@ -31,7 +31,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "IMB_imbuf_types.h" diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c index a5e89b4023a..041ccd6641a 100644 --- a/source/blender/editors/space_sequencer/sequencer_edit.c +++ b/source/blender/editors/space_sequencer/sequencer_edit.c @@ -39,7 +39,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_storage_types.h" #include "IMB_imbuf_types.h" @@ -2669,3 +2669,53 @@ void SEQUENCER_OT_swap_left(wmOperatorType *ot) /* properties */ } + +static int sequencer_rendersize_exec(bContext *C, wmOperator *op) +{ + int retval = OPERATOR_CANCELLED; + Scene *scene= CTX_data_scene(C); + Sequence *active_seq = get_last_seq(scene); + + if(active_seq==NULL) return OPERATOR_CANCELLED; + + printf("got active sequence\n"); + switch (active_seq->type) { + case SEQ_IMAGE: + case SEQ_MOVIE: + if (active_seq->strip) { + // prevent setting the render size if sequence values aren't initialized + if ( (active_seq->strip->orx>0) && (active_seq->strip->ory>0) ) { + scene->r.xsch= active_seq->strip->orx; + scene->r.ysch= active_seq->strip->ory; + WM_event_add_notifier(C, NC_SCENE|ND_RENDER_OPTIONS, scene); + retval = OPERATOR_FINISHED; + } + } + break; + case SEQ_SCENE: + case SEQ_META: + case SEQ_RAM_SOUND: + case SEQ_HD_SOUND: + default: + break; + } + return retval; +} + +void SEQUENCER_OT_rendersize(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Set Render Size"; + ot->idname= "SEQUENCER_OT_rendersize"; + ot->description="Set render size and aspect from active sequence."; + + /* api callbacks */ + ot->exec= sequencer_rendersize_exec; + ot->poll= ED_operator_sequencer_active; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + /* properties */ +} + diff --git a/source/blender/editors/space_sequencer/sequencer_intern.h b/source/blender/editors/space_sequencer/sequencer_intern.h index 0a8208fcc2e..82b24deae63 100644 --- a/source/blender/editors/space_sequencer/sequencer_intern.h +++ b/source/blender/editors/space_sequencer/sequencer_intern.h @@ -95,6 +95,7 @@ void SEQUENCER_OT_previous_edit(struct wmOperatorType *ot); void SEQUENCER_OT_next_edit(struct wmOperatorType *ot); void SEQUENCER_OT_swap_right(struct wmOperatorType *ot); void SEQUENCER_OT_swap_left(struct wmOperatorType *ot); +void SEQUENCER_OT_rendersize(struct wmOperatorType *ot); void SEQUENCER_OT_view_all(struct wmOperatorType *ot); void SEQUENCER_OT_view_selected(struct wmOperatorType *ot); diff --git a/source/blender/editors/space_sequencer/sequencer_ops.c b/source/blender/editors/space_sequencer/sequencer_ops.c index 90342fc62b5..94b79fdf685 100644 --- a/source/blender/editors/space_sequencer/sequencer_ops.c +++ b/source/blender/editors/space_sequencer/sequencer_ops.c @@ -38,7 +38,7 @@ #include "DNA_userdef_types.h" #include "DNA_windowmanager_types.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BKE_context.h" @@ -81,6 +81,7 @@ void sequencer_operatortypes(void) WM_operatortype_append(SEQUENCER_OT_previous_edit); WM_operatortype_append(SEQUENCER_OT_swap_right); WM_operatortype_append(SEQUENCER_OT_swap_left); + WM_operatortype_append(SEQUENCER_OT_rendersize); WM_operatortype_append(SEQUENCER_OT_view_all); WM_operatortype_append(SEQUENCER_OT_view_selected); diff --git a/source/blender/editors/space_sequencer/sequencer_select.c b/source/blender/editors/space_sequencer/sequencer_select.c index fc33dc139b6..2ead426c18a 100644 --- a/source/blender/editors/space_sequencer/sequencer_select.c +++ b/source/blender/editors/space_sequencer/sequencer_select.c @@ -38,7 +38,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "DNA_curve_types.h" #include "DNA_scene_types.h" @@ -793,13 +793,12 @@ static int sequencer_borderselect_exec(bContext *C, wmOperator *op) Sequence *seq; rcti rect; rctf rectf, rq; - int val; + short selecting = (RNA_int_get(op->ptr, "gesture_mode")==GESTURE_MODAL_SELECT); short mval[2]; if(ed==NULL) return OPERATOR_CANCELLED; - val= RNA_int_get(op->ptr, "event_type"); rect.xmin= RNA_int_get(op->ptr, "xmin"); rect.ymin= RNA_int_get(op->ptr, "ymin"); rect.xmax= RNA_int_get(op->ptr, "xmax"); @@ -816,7 +815,7 @@ static int sequencer_borderselect_exec(bContext *C, wmOperator *op) seq_rectf(seq, &rq); if(BLI_isect_rctf(&rq, &rectf, 0)) { - if(val==LEFTMOUSE) seq->flag |= SELECT; + if(selecting) seq->flag |= SELECT; else seq->flag &= SEQ_DESEL; recurs_sel_seq(seq); } @@ -845,9 +844,5 @@ void SEQUENCER_OT_select_border(wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; /* rna */ - RNA_def_int(ot->srna, "event_type", 0, INT_MIN, INT_MAX, "Event Type", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "xmin", 0, INT_MIN, INT_MAX, "X Min", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "xmax", 0, INT_MIN, INT_MAX, "X Max", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "ymin", 0, INT_MIN, INT_MAX, "Y Min", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "ymax", 0, INT_MIN, INT_MAX, "Y Max", "", INT_MIN, INT_MAX); + WM_operator_properties_gesture_border(ot, FALSE); } diff --git a/source/blender/editors/space_sequencer/space_sequencer.c b/source/blender/editors/space_sequencer/space_sequencer.c index 206070b7095..ed532edb0ec 100644 --- a/source/blender/editors/space_sequencer/space_sequencer.c +++ b/source/blender/editors/space_sequencer/space_sequencer.c @@ -37,7 +37,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_rand.h" #include "BKE_colortools.h" diff --git a/source/blender/editors/space_sound/space_sound.c b/source/blender/editors/space_sound/space_sound.c index 7cd9988eea0..314e711234a 100644 --- a/source/blender/editors/space_sound/space_sound.c +++ b/source/blender/editors/space_sound/space_sound.c @@ -38,7 +38,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_rand.h" #include "BKE_colortools.h" diff --git a/source/blender/editors/space_text/space_text.c b/source/blender/editors/space_text/space_text.c index e9cd2644ba6..0b30587c521 100644 --- a/source/blender/editors/space_text/space_text.c +++ b/source/blender/editors/space_text/space_text.c @@ -39,7 +39,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_rand.h" #include "BKE_colortools.h" diff --git a/source/blender/editors/space_view3d/drawarmature.c b/source/blender/editors/space_view3d/drawarmature.c index 656d7061d48..08629a9a2f7 100644 --- a/source/blender/editors/space_view3d/drawarmature.c +++ b/source/blender/editors/space_view3d/drawarmature.c @@ -51,7 +51,7 @@ #include "DNA_userdef_types.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_dlrbTree.h" #include "BKE_animsys.h" @@ -166,7 +166,7 @@ static short set_pchan_glColor (short colCode, int armflag, int boneflag, int co if (bcolor) { char cp[3]; - if (boneflag & BONE_ACTIVE) { + if (boneflag & BONE_DRAW_ACTIVE) { VECCOPY(cp, bcolor->active); } else if (boneflag & BONE_SELECTED) { @@ -181,7 +181,7 @@ static short set_pchan_glColor (short colCode, int armflag, int boneflag, int co glColor3ub(cp[0], cp[1], cp[2]); } else { - if (boneflag & BONE_ACTIVE) UI_ThemeColorShade(TH_BONE_POSE, 40); + if (boneflag & BONE_DRAW_ACTIVE) UI_ThemeColorShade(TH_BONE_POSE, 40); else if (boneflag & BONE_SELECTED) UI_ThemeColor(TH_BONE_POSE); else UI_ThemeColor(TH_WIRE); } @@ -225,7 +225,7 @@ static short set_pchan_glColor (short colCode, int armflag, int boneflag, int co if (bcolor) { char cp[3]; - if (boneflag & BONE_ACTIVE) { + if (boneflag & BONE_DRAW_ACTIVE) { VECCOPY(cp, bcolor->active); } else if (boneflag & BONE_SELECTED) { @@ -238,7 +238,7 @@ static short set_pchan_glColor (short colCode, int armflag, int boneflag, int co glColor3ub(cp[0], cp[1], cp[2]); } else { - if (boneflag & BONE_ACTIVE) UI_ThemeColorShade(TH_BONE_POSE, 40); + if (boneflag & BONE_DRAW_ACTIVE) UI_ThemeColorShade(TH_BONE_POSE, 40); else if (boneflag & BONE_SELECTED) UI_ThemeColor(TH_BONE_POSE); else UI_ThemeColor(TH_BONE_SOLID); } @@ -251,7 +251,7 @@ static short set_pchan_glColor (short colCode, int armflag, int boneflag, int co if (bcolor) { char cp[3]; - if (boneflag & BONE_ACTIVE) { + if (boneflag & BONE_DRAW_ACTIVE) { VECCOPY(cp, bcolor->active); cp_shade_color3ub(cp, 10); } @@ -267,7 +267,7 @@ static short set_pchan_glColor (short colCode, int armflag, int boneflag, int co glColor3ub(cp[0], cp[1], cp[2]); } else { - if (boneflag & BONE_ACTIVE) UI_ThemeColorShade(TH_BONE_POSE, 10); + if (boneflag & BONE_DRAW_ACTIVE) UI_ThemeColorShade(TH_BONE_POSE, 10); else if (boneflag & BONE_SELECTED) UI_ThemeColorShade(TH_BONE_POSE, -30); else UI_ThemeColorShade(TH_BONE_SOLID, -30); } @@ -510,36 +510,36 @@ static void draw_bone_solid_octahedral(void) glBegin(GL_TRIANGLES); /* bottom */ - CalcNormFloat(vec[2], vec[1], vec[0], nor); + normal_tri_v3( nor,vec[2], vec[1], vec[0]); glNormal3fv(nor); glVertex3fv(vec[2]); glVertex3fv(vec[1]); glVertex3fv(vec[0]); - CalcNormFloat(vec[3], vec[2], vec[0], nor); + normal_tri_v3( nor,vec[3], vec[2], vec[0]); glNormal3fv(nor); glVertex3fv(vec[3]); glVertex3fv(vec[2]); glVertex3fv(vec[0]); - CalcNormFloat(vec[4], vec[3], vec[0], nor); + normal_tri_v3( nor,vec[4], vec[3], vec[0]); glNormal3fv(nor); glVertex3fv(vec[4]); glVertex3fv(vec[3]); glVertex3fv(vec[0]); - CalcNormFloat(vec[1], vec[4], vec[0], nor); + normal_tri_v3( nor,vec[1], vec[4], vec[0]); glNormal3fv(nor); glVertex3fv(vec[1]); glVertex3fv(vec[4]); glVertex3fv(vec[0]); /* top */ - CalcNormFloat(vec[5], vec[1], vec[2], nor); + normal_tri_v3( nor,vec[5], vec[1], vec[2]); glNormal3fv(nor); glVertex3fv(vec[5]); glVertex3fv(vec[1]); glVertex3fv(vec[2]); - CalcNormFloat(vec[5], vec[2], vec[3], nor); + normal_tri_v3( nor,vec[5], vec[2], vec[3]); glNormal3fv(nor); glVertex3fv(vec[5]); glVertex3fv(vec[2]); glVertex3fv(vec[3]); - CalcNormFloat(vec[5], vec[3], vec[4], nor); + normal_tri_v3( nor,vec[5], vec[3], vec[4]); glNormal3fv(nor); glVertex3fv(vec[5]); glVertex3fv(vec[3]); glVertex3fv(vec[4]); - CalcNormFloat(vec[5], vec[4], vec[1], nor); + normal_tri_v3( nor,vec[5], vec[4], vec[1]); glNormal3fv(nor); glVertex3fv(vec[5]); glVertex3fv(vec[4]); glVertex3fv(vec[1]); @@ -642,7 +642,7 @@ static void draw_sphere_bone_dist(float smat[][4], float imat[][4], int boneflag /* figure out the sizes of spheres */ if (ebone) { /* this routine doesn't call get_matrix_editbone() that calculates it */ - ebone->length = VecLenf(ebone->head, ebone->tail); + ebone->length = len_v3v3(ebone->head, ebone->tail); length= ebone->length; tail= ebone->rad_tail; @@ -669,19 +669,19 @@ static void draw_sphere_bone_dist(float smat[][4], float imat[][4], int boneflag /* ***** draw it ***** */ /* move vector to viewspace */ - VecSubf(dirvec, tailvec, headvec); - Mat4Mul3Vecfl(smat, dirvec); + sub_v3_v3v3(dirvec, tailvec, headvec); + mul_mat3_m4_v3(smat, dirvec); /* clear zcomp */ dirvec[2]= 0.0f; /* move vector back */ - Mat4Mul3Vecfl(imat, dirvec); + mul_mat3_m4_v3(imat, dirvec); - if (0.0f != Normalize(dirvec)) { + if (0.0f != normalize_v3(dirvec)) { float norvec[3], vec1[3], vec2[3], vec[3]; int a; - //VecMulf(dirvec, head); - Crossf(norvec, dirvec, imat[2]); + //mul_v3_fl(dirvec, head); + cross_v3_v3v3(norvec, dirvec, imat[2]); glBegin(GL_QUAD_STRIP); @@ -752,7 +752,7 @@ static void draw_sphere_bone_wire(float smat[][4], float imat[][4], int armflag, /* figure out the sizes of spheres */ if (ebone) { /* this routine doesn't call get_matrix_editbone() that calculates it */ - ebone->length = VecLenf(ebone->head, ebone->tail); + ebone->length = len_v3v3(ebone->head, ebone->tail); length= ebone->length; tail= ebone->rad_tail; @@ -807,25 +807,25 @@ static void draw_sphere_bone_wire(float smat[][4], float imat[][4], int armflag, else UI_ThemeColor(TH_WIRE); } - VecSubf(dirvec, tailvec, headvec); + sub_v3_v3v3(dirvec, tailvec, headvec); /* move vector to viewspace */ - Mat4Mul3Vecfl(smat, dirvec); + mul_mat3_m4_v3(smat, dirvec); /* clear zcomp */ dirvec[2]= 0.0f; /* move vector back */ - Mat4Mul3Vecfl(imat, dirvec); + mul_mat3_m4_v3(imat, dirvec); - if (0.0f != Normalize(dirvec)) { + if (0.0f != normalize_v3(dirvec)) { float norvech[3], norvect[3], vec[3]; VECCOPY(vec, dirvec); - VecMulf(dirvec, head); - Crossf(norvech, dirvec, imat[2]); + mul_v3_fl(dirvec, head); + cross_v3_v3v3(norvech, dirvec, imat[2]); - VecMulf(vec, tail); - Crossf(norvect, vec, imat[2]); + mul_v3_fl(vec, tail); + cross_v3_v3v3(norvect, vec, imat[2]); if (id != -1) glLoadName(id | BONESEL_BONE); @@ -1151,7 +1151,7 @@ static void draw_b_bone(int dt, int armflag, int boneflag, int constflag, unsign } else if (armflag & ARM_EDITMODE) { if (dt==OB_WIRE) { - if (boneflag & BONE_ACTIVE) UI_ThemeColor(TH_EDGE_SELECT); + if (boneflag & BONE_DRAW_ACTIVE) UI_ThemeColor(TH_EDGE_SELECT); else if (boneflag & BONE_SELECTED) UI_ThemeColorShade(TH_EDGE_SELECT, -20); else UI_ThemeColor(TH_WIRE); } @@ -1236,7 +1236,7 @@ static void draw_bone(int dt, int armflag, int boneflag, int constflag, unsigned if (dt <= OB_WIRE) { /* colors */ if (armflag & ARM_EDITMODE) { - if (boneflag & BONE_ACTIVE) UI_ThemeColor(TH_EDGE_SELECT); + if (boneflag & BONE_DRAW_ACTIVE) UI_ThemeColor(TH_EDGE_SELECT); else if (boneflag & BONE_SELECTED) UI_ThemeColorShade(TH_EDGE_SELECT, -20); else UI_ThemeColor(TH_WIRE); } @@ -1463,12 +1463,12 @@ static void draw_pose_dofs(Object *ob) glTranslatef(posetrans[0], posetrans[1], posetrans[2]); if (pchan->parent) { - Mat4CpyMat4(mat, pchan->parent->pose_mat); + copy_m4_m4(mat, pchan->parent->pose_mat); mat[3][0]= mat[3][1]= mat[3][2]= 0.0f; glMultMatrixf(mat); } - Mat4CpyMat3(mat, pchan->bone->bone_mat); + copy_m4_m3(mat, pchan->bone->bone_mat); glMultMatrixf(mat); scale= bone->length*pchan->size[1]; @@ -1555,8 +1555,8 @@ static void bone_matrix_translate_y(float mat[][4], float y) float trans[3]; VECCOPY(trans, mat[1]); - VecMulf(trans, y); - VecAddf(mat[3], mat[3], trans); + mul_v3_fl(trans, y); + add_v3_v3v3(mat[3], mat[3], trans); } /* assumes object is Armature with pose */ @@ -1582,8 +1582,8 @@ static void draw_pose_channels(Scene *scene, View3D *v3d, ARegion *ar, Base *bas if (arm->drawtype==ARM_ENVELOPE) { /* precalc inverse matrix for drawing screen aligned */ wmGetMatrix(smat); - Mat4MulFloat3(smat[0], 1.0f/VecLength(ob->obmat[0])); - Mat4Invert(imat, smat); + mul_mat3_m4_fl(smat, 1.0f/len_v3(ob->obmat[0])); + invert_m4_m4(imat, smat); /* and draw blended distances */ if (arm->flag & ARM_POSEMODE) { @@ -1629,7 +1629,11 @@ static void draw_pose_channels(Scene *scene, View3D *v3d, ARegion *ar, Base *bas flag= bone->flag; if ( (bone->parent) && (bone->parent->flag & (BONE_HIDDEN_P|BONE_HIDDEN_PG)) ) flag &= ~BONE_CONNECTED; - + + /* set temporary flag for drawing bone as active */ + if (bone == arm->act_bone) + flag |= BONE_DRAW_ACTIVE; + /* set color-set to use */ set_pchan_colorset(ob, pchan); @@ -1705,6 +1709,10 @@ static void draw_pose_channels(Scene *scene, View3D *v3d, ARegion *ar, Base *bas flag= bone->flag; if ((bone->parent) && (bone->parent->flag & (BONE_HIDDEN_P|BONE_HIDDEN_PG))) flag &= ~BONE_CONNECTED; + + /* set temporary flag for drawing bone as active */ + if (bone == arm->act_bone) + flag |= BONE_DRAW_ACTIVE; draw_custom_bone(scene, v3d, rv3d, pchan->custom, OB_WIRE, arm->flag, flag, index, bone->length); @@ -1797,6 +1805,10 @@ static void draw_pose_channels(Scene *scene, View3D *v3d, ARegion *ar, Base *bas if ((bone->parent) && (bone->parent->flag & (BONE_HIDDEN_P|BONE_HIDDEN_PG))) flag &= ~BONE_CONNECTED; + /* set temporary flag for drawing bone as active */ + if (bone == arm->act_bone) + flag |= BONE_DRAW_ACTIVE; + /* extra draw service for pose mode */ constflag= pchan->constflag; if (pchan->flag & (POSE_ROT|POSE_LOC|POSE_SIZE)) @@ -1862,22 +1874,22 @@ static void draw_pose_channels(Scene *scene, View3D *v3d, ARegion *ar, Base *bas /* Draw names of bone */ if (arm->flag & ARM_DRAWNAMES) { - VecMidf(vec, pchan->pose_head, pchan->pose_tail); + mid_v3_v3v3(vec, pchan->pose_head, pchan->pose_tail); view3d_cached_text_draw_add(vec[0], vec[1], vec[2], pchan->name, 10); } /* Draw additional axes on the bone tail */ if ( (arm->flag & ARM_DRAWAXES) && (arm->flag & ARM_POSEMODE) ) { glPushMatrix(); - Mat4CpyMat4(bmat, pchan->pose_mat); + copy_m4_m4(bmat, pchan->pose_mat); bone_matrix_translate_y(bmat, pchan->bone->length); glMultMatrixf(bmat); - + /* do cached text draw immediate to include transform */ view3d_cached_text_draw_begin(); drawaxes(pchan->bone->length*0.25f, 0, OB_ARROWS); view3d_cached_text_draw_end(v3d, ar, 1, bmat); - + glPopMatrix(); } } @@ -1896,14 +1908,14 @@ static void get_matrix_editbone(EditBone *eBone, float bmat[][4]) float mat[3][3]; /* Compose the parent transforms (i.e. their translations) */ - VecSubf(delta, eBone->tail, eBone->head); + sub_v3_v3v3(delta, eBone->tail, eBone->head); eBone->length = (float)sqrt(delta[0]*delta[0] + delta[1]*delta[1] +delta[2]*delta[2]); vec_roll_to_mat3(delta, eBone->roll, mat); - Mat4CpyMat3(bmat, mat); + copy_m4_m3(bmat, mat); - VecAddf(bmat[3], bmat[3], eBone->head); + add_v3_v3v3(bmat[3], bmat[3], eBone->head); } static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, int dt) @@ -1919,8 +1931,8 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, int dt) if(arm->drawtype==ARM_ENVELOPE) { /* precalc inverse matrix for drawing screen aligned */ wmGetMatrix(smat); - Mat4MulFloat3(smat[0], 1.0f/VecLength(ob->obmat[0])); - Mat4Invert(imat, smat); + mul_mat3_m4_fl(smat, 1.0f/len_v3(ob->obmat[0])); + invert_m4_m4(imat, smat); /* and draw blended distances */ glEnable(GL_BLEND); @@ -1956,6 +1968,10 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, int dt) flag= eBone->flag; if ( (eBone->parent) && ((eBone->parent->flag & BONE_HIDDEN_A) || (eBone->parent->layer & arm->layer)==0) ) flag &= ~BONE_CONNECTED; + + /* set temporary flag for drawing bone as active */ + if (eBone == arm->act_edbone) + flag |= BONE_DRAW_ACTIVE; if (arm->drawtype==ARM_ENVELOPE) draw_sphere_bone(OB_SOLID, arm->flag, flag, 0, index, NULL, eBone); @@ -1991,6 +2007,10 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, int dt) flag= eBone->flag; if ( (eBone->parent) && ((eBone->parent->flag & BONE_HIDDEN_A) || (eBone->parent->layer & arm->layer)==0) ) flag &= ~BONE_CONNECTED; + + /* set temporary flag for drawing bone as active */ + if (eBone == arm->act_edbone) + flag |= BONE_DRAW_ACTIVE; if (arm->drawtype == ARM_ENVELOPE) { if (dt < OB_SOLID) @@ -2050,7 +2070,7 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, int dt) /* Draw name */ if (arm->flag & ARM_DRAWNAMES) { - VecMidf(vec, eBone->head, eBone->tail); + mid_v3_v3v3(vec, eBone->head, eBone->tail); glRasterPos3fv(vec); view3d_cached_text_draw_add(vec[0], vec[1], vec[2], eBone->name, 10); } @@ -2060,12 +2080,12 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, int dt) get_matrix_editbone(eBone, bmat); bone_matrix_translate_y(bmat, eBone->length); glMultMatrixf(bmat); - + /* do cached text draw immediate to include transform */ view3d_cached_text_draw_begin(); drawaxes(eBone->length*0.25f, 0, OB_ARROWS); view3d_cached_text_draw_end(v3d, ar, 1, bmat); - + glPopMatrix(); } @@ -2223,7 +2243,7 @@ static void draw_pose_paths(Scene *scene, View3D *v3d, ARegion *ar, Object *ob) view3d_cached_text_draw_add(fp[0], fp[1], fp[2], str, 0); } else if ((a > stepsize) && (a < len-stepsize)) { - if ((VecEqual(fp, fp-(stepsize*3))==0) || (VecEqual(fp, fp+(stepsize*3))==0)) { + if ((equals_v3v3(fp, fp-(stepsize*3))==0) || (equals_v3v3(fp, fp+(stepsize*3))==0)) { sprintf(str, "%d", (a+sfra)); view3d_cached_text_draw_add(fp[0], fp[1], fp[2], str, 0); } diff --git a/source/blender/editors/space_view3d/drawmesh.c b/source/blender/editors/space_view3d/drawmesh.c index 365b9ff03f7..bf73e70367c 100644 --- a/source/blender/editors/space_view3d/drawmesh.c +++ b/source/blender/editors/space_view3d/drawmesh.c @@ -31,7 +31,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_edgehash.h" #include "BLI_editVert.h" @@ -614,7 +614,7 @@ void draw_mesh_text(Scene *scene, Object *ob, int glsl) if (!mf_smooth) { float nor[3]; - CalcNormFloat(v1, v2, v3, nor); + normal_tri_v3( nor,v1, v2, v3); glNormal3fv(nor); } diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 1eecefdcf0f..491559bf13d 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -65,7 +65,7 @@ #include "DNA_world_types.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_editVert.h" #include "BLI_edgehash.h" #include "BLI_rand.h" @@ -153,7 +153,7 @@ static void view3d_project_short_clip(ARegion *ar, float *vec, short *adr) /* clipplanes in eye space */ if(rv3d->rflag & RV3D_CLIPPING) { VECCOPY(vec4, vec); - Mat4MulVecfl(rv3d->viewmatob, vec4); + mul_m4_v3(rv3d->viewmatob, vec4); if(view3d_test_clipping(rv3d, vec4)) return; } @@ -161,7 +161,7 @@ static void view3d_project_short_clip(ARegion *ar, float *vec, short *adr) VECCOPY(vec4, vec); vec4[3]= 1.0; - Mat4MulVec4fl(rv3d->persmatob, vec4); + mul_m4_v4(rv3d->persmatob, vec4); /* clipplanes in window space */ if( vec4[3]>BL_NEAR_CLIP ) { /* is the NEAR clipping cutoff for picking */ @@ -190,7 +190,7 @@ static void view3d_project_short_noclip(ARegion *ar, float *vec, short *adr) VECCOPY(vec4, vec); vec4[3]= 1.0; - Mat4MulVec4fl(rv3d->persmatob, vec4); + mul_m4_v4(rv3d->persmatob, vec4); if( vec4[3]>BL_NEAR_CLIP ) { /* is the NEAR clipping cutoff for picking */ fx= (ar->winx/2)*(1 + vec4[0]/vec4[3]); @@ -457,8 +457,8 @@ void drawcircball(int mode, float *cent, float rad, float tmat[][4]) VECCOPY(vx, tmat[0]); VECCOPY(vy, tmat[1]); - VecMulf(vx, rad); - VecMulf(vy, rad); + mul_v3_fl(vx, rad); + mul_v3_fl(vy, rad); glBegin(mode); for(a=0; a<tot; a++) { @@ -545,7 +545,7 @@ void view3d_cached_text_draw_end(View3D *v3d, ARegion *ar, int depth_write, floa /* project first and test */ for(vos= strings->first; vos; vos= vos->next) { if(mat) - Mat4MulVecfl(mat, vos->vec); + mul_m4_v3(mat, vos->vec); view3d_project_short_clip(ar, vos->vec, vos->mval); if(vos->mval[0]!=IS_CLIPPED) tot++; @@ -675,7 +675,7 @@ static void drawshadbuflimits(Lamp *la, float mat[][4]) lavec[0]= -mat[2][0]; lavec[1]= -mat[2][1]; lavec[2]= -mat[2][2]; - Normalize(lavec); + normalize_v3(lavec); sta[0]= mat[3][0]+ la->clipsta*lavec[0]; sta[1]= mat[3][1]+ la->clipsta*lavec[1]; @@ -706,13 +706,13 @@ static void spotvolume(float *lvec, float *vvec, float inp) /* camera is at 0,0,0 */ float temp[3],plane[3],mat1[3][3],mat2[3][3],mat3[3][3],mat4[3][3],q[4],co,si,angle; - Normalize(lvec); - Normalize(vvec); /* is this the correct vector ? */ + normalize_v3(lvec); + normalize_v3(vvec); /* is this the correct vector ? */ - Crossf(temp,vvec,lvec); /* equation for a plane through vvec en lvec */ - Crossf(plane,lvec,temp); /* a plane perpendicular to this, parrallel with lvec */ + cross_v3_v3v3(temp,vvec,lvec); /* equation for a plane through vvec en lvec */ + cross_v3_v3v3(plane,lvec,temp); /* a plane perpendicular to this, parrallel with lvec */ - Normalize(plane); + normalize_v3(plane); /* now we've got two equations: one of a cone and one of a plane, but we have three unknowns. We remove one unkown by rotating the plane to z=0 (the plane normal) */ @@ -725,7 +725,7 @@ static void spotvolume(float *lvec, float *vvec, float inp) q[1] = plane[1] ; q[2] = -plane[0] ; q[3] = 0 ; - Normalize(&q[1]); + normalize_v3(&q[1]); angle = saacos(plane[2])/2.0; co = cos(angle); @@ -736,7 +736,7 @@ static void spotvolume(float *lvec, float *vvec, float inp) q[2] *= si; q[3] = 0; - QuatToMat3(q,mat1); + quat_to_mat3(mat1,q); /* rotate lamp vector now over acos(inp) degrees */ @@ -744,7 +744,7 @@ static void spotvolume(float *lvec, float *vvec, float inp) vvec[1] = lvec[1] ; vvec[2] = lvec[2] ; - Mat3One(mat2); + unit_m3(mat2); co = inp; si = sqrt(1-inp*inp); @@ -752,17 +752,17 @@ static void spotvolume(float *lvec, float *vvec, float inp) mat2[1][0] = -si; mat2[0][1] = si; mat2[1][1] = co; - Mat3MulMat3(mat3,mat2,mat1); + mul_m3_m3m3(mat3,mat2,mat1); mat2[1][0] = si; mat2[0][1] = -si; - Mat3MulMat3(mat4,mat2,mat1); - Mat3Transp(mat1); + mul_m3_m3m3(mat4,mat2,mat1); + transpose_m3(mat1); - Mat3MulMat3(mat2,mat1,mat3); - Mat3MulVecfl(mat2,lvec); - Mat3MulMat3(mat2,mat1,mat4); - Mat3MulVecfl(mat2,vvec); + mul_m3_m3m3(mat2,mat1,mat3); + mul_m3_v3(mat2,lvec); + mul_m3_m3m3(mat2,mat1,mat4); + mul_m3_v3(mat2,vvec); return; } @@ -790,9 +790,9 @@ static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob) lampsize= pixsize*((float)U.obcenter_dia*0.5f); /* and view aligned matrix: */ - Mat4CpyMat4(imat, rv3d->viewinv); - Normalize(imat[0]); - Normalize(imat[1]); + copy_m4_m4(imat, rv3d->viewinv); + normalize_v3(imat[0]); + normalize_v3(imat[1]); /* for AA effects */ glGetFloatv(GL_CURRENT_COLOR, curcol); @@ -836,13 +836,13 @@ static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob) short axis; /* setup a 45 degree rotation matrix */ - VecRotToMat3(imat[2], M_PI/4.0f, mat); + vec_rot_to_mat3( mat,imat[2], M_PI/4.0f); /* vectors */ VECCOPY(v1, imat[0]); - VecMulf(v1, circrad*1.2f); + mul_v3_fl(v1, circrad*1.2f); VECCOPY(v2, imat[0]); - VecMulf(v2, circrad*2.5f); + mul_v3_fl(v2, circrad*2.5f); /* center */ glTranslatef(vec[0], vec[1], vec[2]); @@ -853,8 +853,8 @@ static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob) for (axis=0; axis<8; axis++) { glVertex3fv(v1); glVertex3fv(v2); - Mat3MulVecfl(mat, v1); - Mat3MulVecfl(mat, v2); + mul_m3_v3(mat, v1); + mul_m3_v3(mat, v2); } glEnd(); @@ -1145,11 +1145,11 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob if(flag==0) { if(cam->flag & (CAM_SHOWLIMITS+CAM_SHOWMIST)) { wmLoadMatrix(rv3d->viewmat); - Mat4CpyMat4(vec, ob->obmat); - Mat4Ortho(vec); + copy_m4_m4(vec, ob->obmat); + normalize_m4(vec); wmMultMatrix(vec); - Mat4SwapMat4(rv3d->persmat, tmat); + swap_m4m4(rv3d->persmat, tmat); wmGetSingleMatrix(rv3d->persmat); if(cam->flag & CAM_SHOWLIMITS) { @@ -1162,7 +1162,7 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob if(cam->flag & CAM_SHOWMIST) if(wrld) draw_limit_line(wrld->miststa, wrld->miststa+wrld->mistdist, 0xFFFFFF); - Mat4SwapMat4(rv3d->persmat, tmat); + swap_m4m4(rv3d->persmat, tmat); } } } @@ -2272,13 +2272,13 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d, Object *ob, E z= 0.5f*(v1[2]+v2[2]); if(v3d->flag & V3D_GLOBAL_STATS) { - Mat4MulVecfl(ob->obmat, v1); - Mat4MulVecfl(ob->obmat, v2); + mul_m4_v3(ob->obmat, v1); + mul_m4_v3(ob->obmat, v2); } if(unit->system) - bUnit_AsString(val, sizeof(val), VecLenf(v1, v2)*unit->scale_length, 3, unit->system, B_UNIT_LENGTH, do_split, FALSE); + bUnit_AsString(val, sizeof(val), len_v3v3(v1, v2)*unit->scale_length, 3, unit->system, B_UNIT_LENGTH, do_split, FALSE); else - sprintf(val, conv_float, VecLenf(v1, v2)); + sprintf(val, conv_float, len_v3v3(v1, v2)); view3d_cached_text_draw_add(x, y, z, val, 0); } @@ -2303,16 +2303,16 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d, Object *ob, E VECCOPY(v4, efa->v4->co); } if(v3d->flag & V3D_GLOBAL_STATS) { - Mat4MulVecfl(ob->obmat, v1); - Mat4MulVecfl(ob->obmat, v2); - Mat4MulVecfl(ob->obmat, v3); - if (efa->v4) Mat4MulVecfl(ob->obmat, v4); + mul_m4_v3(ob->obmat, v1); + mul_m4_v3(ob->obmat, v2); + mul_m4_v3(ob->obmat, v3); + if (efa->v4) mul_m4_v3(ob->obmat, v4); } if (efa->v4) - area= AreaQ3Dfl(v1, v2, v3, v4); + area= area_quad_v3(v1, v2, v3, v4); else - area = AreaT3Dfl(v1, v2, v3); + area = area_tri_v3(v1, v2, v3); if(unit->system) bUnit_AsString(val, sizeof(val), area*unit->scale_length, 3, unit->system, B_UNIT_LENGTH, do_split, FALSE); // XXX should be B_UNIT_AREA @@ -2344,10 +2344,10 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d, Object *ob, E VECCOPY(v4, v3); } if(v3d->flag & V3D_GLOBAL_STATS) { - Mat4MulVecfl(ob->obmat, v1); - Mat4MulVecfl(ob->obmat, v2); - Mat4MulVecfl(ob->obmat, v3); - Mat4MulVecfl(ob->obmat, v4); + mul_m4_v3(ob->obmat, v1); + mul_m4_v3(ob->obmat, v2); + mul_m4_v3(ob->obmat, v3); + mul_m4_v3(ob->obmat, v4); } e1= efa->e1; @@ -2359,30 +2359,30 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d, Object *ob, E if( (e4->f & e1->f & SELECT) || (G.moving && (efa->v1->f & SELECT)) ) { /* Vec 1 */ - sprintf(val,"%.3f", RAD2DEG(VecAngle3(v4, v1, v2))); - VecLerpf(fvec, efa->cent, efa->v1->co, 0.8f); + sprintf(val,"%.3f", RAD2DEG(angle_v3v3v3(v4, v1, v2))); + interp_v3_v3v3(fvec, efa->cent, efa->v1->co, 0.8f); view3d_cached_text_draw_add(efa->cent[0], efa->cent[1], efa->cent[2], val, 0); } if( (e1->f & e2->f & SELECT) || (G.moving && (efa->v2->f & SELECT)) ) { /* Vec 2 */ - sprintf(val,"%.3f", RAD2DEG(VecAngle3(v1, v2, v3))); - VecLerpf(fvec, efa->cent, efa->v2->co, 0.8f); + sprintf(val,"%.3f", RAD2DEG(angle_v3v3v3(v1, v2, v3))); + interp_v3_v3v3(fvec, efa->cent, efa->v2->co, 0.8f); view3d_cached_text_draw_add(fvec[0], fvec[1], fvec[2], val, 0); } if( (e2->f & e3->f & SELECT) || (G.moving && (efa->v3->f & SELECT)) ) { /* Vec 3 */ if(efa->v4) - sprintf(val,"%.3f", RAD2DEG(VecAngle3(v2, v3, v4))); + sprintf(val,"%.3f", RAD2DEG(angle_v3v3v3(v2, v3, v4))); else - sprintf(val,"%.3f", RAD2DEG(VecAngle3(v2, v3, v1))); - VecLerpf(fvec, efa->cent, efa->v3->co, 0.8f); + sprintf(val,"%.3f", RAD2DEG(angle_v3v3v3(v2, v3, v1))); + interp_v3_v3v3(fvec, efa->cent, efa->v3->co, 0.8f); view3d_cached_text_draw_add(fvec[0], fvec[1], fvec[2], val, 0); } /* Vec 4 */ if(efa->v4) { if( (e3->f & e4->f & SELECT) || (G.moving && (efa->v4->f & SELECT)) ) { - sprintf(val,"%.3f", RAD2DEG(VecAngle3(v3, v4, v1))); - VecLerpf(fvec, efa->cent, efa->v4->co, 0.8f); + sprintf(val,"%.3f", RAD2DEG(angle_v3v3v3(v3, v4, v1))); + interp_v3_v3v3(fvec, efa->cent, efa->v4->co, 0.8f); view3d_cached_text_draw_add(fvec[0], fvec[1], fvec[2], val, 0); } } @@ -3446,7 +3446,7 @@ static void draw_particle(ParticleKey *state, int draw_as, short draw, float pix { vec[0]=2.0f*pixsize; vec[1]=vec[2]=0.0; - QuatMulVecf(state->rot,vec); + mul_qt_v3(state->rot,vec); if(draw_as==PART_DRAW_AXIS) { cd[1]=cd[2]=cd[4]=cd[5]=0.0; cd[0]=cd[3]=1.0; @@ -3474,7 +3474,7 @@ static void draw_particle(ParticleKey *state, int draw_as, short draw, float pix vec[1]=2.0f*pixsize; vec[0]=vec[2]=0.0; - QuatMulVecf(state->rot,vec); + mul_qt_v3(state->rot,vec); if(draw_as==PART_DRAW_AXIS){ VECCOPY(vec2,state->co); } @@ -3486,7 +3486,7 @@ static void draw_particle(ParticleKey *state, int draw_as, short draw, float pix vec[2]=2.0f*pixsize; vec[0]=vec[1]=0.0; - QuatMulVecf(state->rot,vec); + mul_qt_v3(state->rot,vec); if(draw_as==PART_DRAW_AXIS){ VECCOPY(vec2,state->co); } @@ -3501,9 +3501,9 @@ static void draw_particle(ParticleKey *state, int draw_as, short draw, float pix case PART_DRAW_LINE: { VECCOPY(vec,state->vel); - Normalize(vec); + normalize_v3(vec); if(draw & PART_DRAW_VEL_LENGTH) - VecMulf(vec,VecLength(state->vel)); + mul_v3_fl(vec,len_v3(state->vel)); VECADDFAC(pdd->vd,state->co,vec,-draw_line[0]); pdd->vd+=3; VECADDFAC(pdd->vd,state->co,vec,draw_line[1]); pdd->vd+=3; if(cd) { @@ -3661,7 +3661,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv if( (base->flag & OB_FROMDUPLI) && (ob->flag & OB_FROMGROUP) ) { float mat[4][4]; - Mat4MulMat4(mat, psys->imat, ob->obmat); + mul_m4_m4m4(mat, psys->imat, ob->obmat); wmMultMatrix(mat); } @@ -3683,9 +3683,9 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv break; case PART_DRAW_CIRC: /* calculate view aligned matrix: */ - Mat4CpyMat4(imat, rv3d->viewinv); - Normalize(imat[0]); - Normalize(imat[1]); + copy_m4_m4(imat, rv3d->viewinv); + normalize_v3(imat[0]); + normalize_v3(imat[1]); /* no break! */ case PART_DRAW_CROSS: case PART_DRAW_AXIS: @@ -3741,9 +3741,9 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv break; } if(part->draw & PART_DRAW_SIZE && part->draw_as!=PART_DRAW_CIRC){ - Mat4CpyMat4(imat, rv3d->viewinv); - Normalize(imat[0]); - Normalize(imat[1]); + copy_m4_m4(imat, rv3d->viewinv); + normalize_v3(imat[0]); + normalize_v3(imat[1]); } if(!create_cdata && pdd && pdd->cdata) { @@ -3915,7 +3915,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv psys_get_particle_on_path(&sim,a,&state,need_v); if(psys->parent) - Mat4MulVecfl(psys->parent->obmat, state.co); + mul_m4_v3(psys->parent->obmat, state.co); /* create actiual particle data */ if(draw_as == PART_DRAW_BB) { @@ -3935,7 +3935,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv state.time=cfra; if(psys_get_particle_state(&sim,a,&state,0)){ if(psys->parent) - Mat4MulVecfl(psys->parent->obmat, state.co); + mul_m4_v3(psys->parent->obmat, state.co); /* create actiual particle data */ if(draw_as == PART_DRAW_BB) { @@ -3958,7 +3958,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv VECCOPY(pdd->ved,state.co); pdd->ved+=3; VECCOPY(vel,state.vel); - VecMulf(vel,timestep); + mul_v3_fl(vel,timestep); VECADD(pdd->ved,state.co,vel); pdd->ved+=3; @@ -4578,10 +4578,10 @@ static void drawnurb(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, float vec_a[3] = { fac,0, 0}; // Offset perpendicular to the curve float vec_b[3] = {-fac,0, 0}; // Delta along the curve - QuatMulVecf(bevp->quat, vec_a); - QuatMulVecf(bevp->quat, vec_b); - VecAddf(vec_a, vec_a, bevp->vec); - VecAddf(vec_b, vec_b, bevp->vec); + mul_qt_v3(bevp->quat, vec_a); + mul_qt_v3(bevp->quat, vec_b); + add_v3_v3v3(vec_a, vec_a, bevp->vec); + add_v3_v3v3(vec_b, vec_b, bevp->vec); VECSUBFAC(vec_a, vec_a, bevp->dir, fac); VECSUBFAC(vec_b, vec_b, bevp->dir, fac); @@ -4723,8 +4723,8 @@ static void drawspiral(float *cent, float rad, float tmat[][4], int start) VECCOPY(vx, tmat[0]); VECCOPY(vy, tmat[1]); - VecMulf(vx, rad); - VecMulf(vy, rad); + mul_v3_fl(vx, rad); + mul_v3_fl(vy, rad); VECCOPY(vec, cent); @@ -4788,7 +4788,7 @@ static void drawtube(float *vec, float radius, float height, float tmat[][4]) float cur[3]; drawcircball(GL_LINE_LOOP, vec, radius, tmat); - VecCopyf(cur,vec); + copy_v3_v3(cur,vec); cur[2]+=height; drawcircball(GL_LINE_LOOP, cur, radius, tmat); @@ -4809,7 +4809,7 @@ static void drawcone(float *vec, float radius, float height, float tmat[][4]) { float cur[3]; - VecCopyf(cur,vec); + copy_v3_v3(cur,vec); cur[2]+=height; drawcircball(GL_LINE_LOOP, cur, radius, tmat); @@ -4857,9 +4857,9 @@ static int drawmball(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, else UI_ThemeColor(TH_WIRE); wmGetMatrix(tmat); - Mat4Invert(imat, tmat); - Normalize(imat[0]); - Normalize(imat[1]); + invert_m4_m4(imat, tmat); + normalize_v3(imat[0]); + normalize_v3(imat[1]); while(ml) { @@ -4916,14 +4916,14 @@ static void draw_forcefield(Scene *scene, Object *ob) /* calculus here, is reused in PFIELD_FORCE */ wmGetMatrix(tmat); - Mat4Invert(imat, tmat); -// Normalize(imat[0]); // we don't do this because field doesnt scale either... apart from wind! -// Normalize(imat[1]); + invert_m4_m4(imat, tmat); +// normalize_v3(imat[0]); // we don't do this because field doesnt scale either... apart from wind! +// normalize_v3(imat[1]); if (pd->forcefield == PFIELD_WIND) { float force_val; - Mat4One(tmat); + unit_m4(tmat); UI_ThemeColorBlend(curcol, TH_BACK, 0.5); //if (has_ipo_code(ob->ipo, OB_PD_FSTR)) @@ -4959,7 +4959,7 @@ static void draw_forcefield(Scene *scene, Object *ob) else if (pd->forcefield == PFIELD_VORTEX) { float ffall_val, force_val; - Mat4One(tmat); + unit_m4(tmat); //if (has_ipo_code(ob->ipo, OB_PD_FFALL)) // ffall_val = IPO_GetFloatValue(ob->ipo, OB_PD_FFALL, scene->r.cfra); //else @@ -5020,7 +5020,7 @@ static void draw_forcefield(Scene *scene, Object *ob) else if(pd->falloff==PFIELD_FALL_TUBE){ float radius,distance; - Mat4One(tmat); + unit_m4(tmat); vec[0]=vec[1]=0.0f; radius=(pd->flag&PFIELD_USEMAXR)?pd->maxrad:1.0f; @@ -5042,7 +5042,7 @@ static void draw_forcefield(Scene *scene, Object *ob) else if(pd->falloff==PFIELD_FALL_CONE){ float radius,distance; - Mat4One(tmat); + unit_m4(tmat); radius=(pd->flag&PFIELD_USEMAXR)?pd->maxrad:1.0f; radius*=(float)M_PI/180.0f; @@ -5290,7 +5290,7 @@ static void draw_hooks(Object *ob) if (md->type==eModifierType_Hook) { HookModifierData *hmd = (HookModifierData*) md; - VecMat4MulVecfl(vec, ob->obmat, hmd->cent); + mul_v3_m4v3(vec, ob->obmat, hmd->cent); if(hmd->object) { setlinestyle(3); @@ -5322,7 +5322,7 @@ void drawRBpivot(bRigidBodyJointConstraint *data) if(G.f & G_RENDER_SHADOW) return; - EulToMat4(eu,mat); + eul_to_mat4(mat,eu); glLineWidth (4.0f); setlinestyle(2); for (axis=0; axis<3; axis++) { @@ -5331,7 +5331,7 @@ void drawRBpivot(bRigidBodyJointConstraint *data) dir[axis] = 1.f; glBegin(GL_LINES); - Mat4MulVecfl(mat,dir); + mul_m4_v3(mat,dir); v[0] += dir[0]; v[1] += dir[1]; v[2] += dir[2]; @@ -5907,7 +5907,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) vec[0]= vec[1]= vec[2]= 0.0; wmGetMatrix(tmat); - Mat4Invert(imat, tmat); + invert_m4_m4(imat, tmat); setlinestyle(2); drawcircball(GL_LINE_LOOP, vec, ob->inertia, imat); @@ -5994,7 +5994,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) if (cti->get_target_matrix) cti->get_target_matrix(curcon, cob, ct, bsystem_time(scene, ob, (float)(scene->r.cfra), give_timeoffset(ob))); else - Mat4One(ct->matrix); + unit_m4(ct->matrix); setlinestyle(3); glBegin(GL_LINES); diff --git a/source/blender/editors/space_view3d/drawvolume.c b/source/blender/editors/space_view3d/drawvolume.c index 3c80441b9e6..168e1f8592d 100644 --- a/source/blender/editors/space_view3d/drawvolume.c +++ b/source/blender/editors/space_view3d/drawvolume.c @@ -66,7 +66,7 @@ #include "DNA_world_types.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_editVert.h" #include "BLI_edgehash.h" #include "BLI_rand.h" @@ -191,7 +191,7 @@ static int convex(float *p0, float *up, float *a, float *b) float va[3], vb[3], tmp[3]; VECSUB(va, a, p0); VECSUB(vb, b, p0); - Crossf(tmp, va, vb); + cross_v3_v3v3(tmp, va, vb); return INPR(up, tmp) >= 0; } @@ -363,7 +363,7 @@ void draw_volume(Scene *scene, ARegion *ar, View3D *v3d, Base *base, GPUTexture // get view vector VECCOPY(viewnormal, rv3d->viewinv[2]); - Normalize(viewnormal); + normalize_v3(viewnormal); // find cube vertex that is closest to the viewer for (i=0; i<8; i++) { @@ -433,7 +433,7 @@ void draw_volume(Scene *scene, ARegion *ar, View3D *v3d, Base *base, GPUTexture break; VECCOPY(tmp_point, viewnormal); - VecMulf(tmp_point, -dd*((ds/dd)-(float)n)); + mul_v3_fl(tmp_point, -dd*((ds/dd)-(float)n)); VECADD(tmp_point2, cv[good_index], tmp_point); d = INPR(tmp_point2, viewnormal); diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index 4a9042aa31c..a755c8ffe76 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -40,7 +40,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_rand.h" #include "BKE_action.h" @@ -148,7 +148,7 @@ RegionView3D *ED_view3d_context_rv3d(bContext *C) if(rv3d==NULL) { ScrArea *sa =CTX_wm_area(C); - if(sa->spacetype==SPACE_VIEW3D) { + if(sa && sa->spacetype==SPACE_VIEW3D) { ARegion *ar; for(ar= sa->regionbase.first; ar; ar= ar->next) if(ar->regiontype==RGN_TYPE_WINDOW) @@ -676,7 +676,7 @@ static int view3d_context(const bContext *C, const char *member, bContextDataRes if(selected_objects) CTX_data_id_list_add(result, &base->object->id); else - CTX_data_list_add(result, &scene->id, &RNA_UnknownType, base); + CTX_data_list_add(result, &scene->id, &RNA_ObjectBase, base); } } } @@ -693,7 +693,7 @@ static int view3d_context(const bContext *C, const char *member, bContextDataRes if(selected_editable_objects) CTX_data_id_list_add(result, &base->object->id); else - CTX_data_list_add(result, &scene->id, &RNA_UnknownType, base); + CTX_data_list_add(result, &scene->id, &RNA_ObjectBase, base); } } } @@ -710,7 +710,7 @@ static int view3d_context(const bContext *C, const char *member, bContextDataRes if(visible_objects) CTX_data_id_list_add(result, &base->object->id); else - CTX_data_list_add(result, &scene->id, &RNA_UnknownType, base); + CTX_data_list_add(result, &scene->id, &RNA_ObjectBase, base); } } } @@ -726,7 +726,7 @@ static int view3d_context(const bContext *C, const char *member, bContextDataRes if(selectable_objects) CTX_data_id_list_add(result, &base->object->id); else - CTX_data_list_add(result, &scene->id, &RNA_UnknownType, base); + CTX_data_list_add(result, &scene->id, &RNA_ObjectBase, base); } } } @@ -736,7 +736,7 @@ static int view3d_context(const bContext *C, const char *member, bContextDataRes else if(CTX_data_equals(member, "active_base")) { if(scene->basact && (scene->basact->lay & lay)) if((scene->basact->object->restrictflag & OB_RESTRICT_VIEW)==0) - CTX_data_pointer_set(result, &scene->id, &RNA_UnknownType, scene->basact); + CTX_data_pointer_set(result, &scene->id, &RNA_ObjectBase, scene->basact); return 1; } @@ -747,7 +747,11 @@ static int view3d_context(const bContext *C, const char *member, bContextDataRes return 1; } - return 0; + else { + return 0; /* not found */ + } + + return -1; /* found but not available */ } /* only called once, from space/spacetypes.c */ diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index 276ce52c2a9..d3a922af67e 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -52,7 +52,7 @@ #include "MEM_guardedalloc.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_editVert.h" #include "BLI_rand.h" @@ -176,7 +176,7 @@ static void v3d_editvertex_buts(const bContext *C, uiLayout *layout, View3D *v3d if(eve->f & SELECT) { evedef= eve; tot++; - VecAddf(median, median, eve->co); + add_v3_v3v3(median, median, eve->co); } eve= eve->next; } @@ -232,18 +232,18 @@ static void v3d_editvertex_buts(const bContext *C, uiLayout *layout, View3D *v3d a= nu->pntsu; while(a--) { if(bezt->f2 & SELECT) { - VecAddf(median, median, bezt->vec[1]); + add_v3_v3v3(median, median, bezt->vec[1]); tot++; median[4]+= bezt->weight; totweight++; } else { if(bezt->f1 & SELECT) { - VecAddf(median, median, bezt->vec[0]); + add_v3_v3v3(median, median, bezt->vec[0]); tot++; } if(bezt->f3 & SELECT) { - VecAddf(median, median, bezt->vec[2]); + add_v3_v3v3(median, median, bezt->vec[2]); tot++; } } @@ -255,7 +255,7 @@ static void v3d_editvertex_buts(const bContext *C, uiLayout *layout, View3D *v3d a= nu->pntsu*nu->pntsv; while(a--) { if(bp->f1 & SELECT) { - VecAddf(median, median, bp->vec); + add_v3_v3v3(median, median, bp->vec); median[3]+= bp->vec[3]; totw++; tot++; @@ -277,7 +277,7 @@ static void v3d_editvertex_buts(const bContext *C, uiLayout *layout, View3D *v3d bp= lt->editlatt->def; while(a--) { if(bp->f1 & SELECT) { - VecAddf(median, median, bp->vec); + add_v3_v3v3(median, median, bp->vec); tot++; median[4]+= bp->weight; totweight++; @@ -296,7 +296,7 @@ static void v3d_editvertex_buts(const bContext *C, uiLayout *layout, View3D *v3d if(totweight) median[4] /= (float)totweight; if(v3d->flag & V3D_GLOBAL_STATS) - Mat4MulVecfl(ob->obmat, median); + mul_m4_v3(ob->obmat, median); if(block) { // buttons int but_y; @@ -371,11 +371,11 @@ static void v3d_editvertex_buts(const bContext *C, uiLayout *layout, View3D *v3d memcpy(ve_median, tfp->ve_median, sizeof(tfp->ve_median)); if(v3d->flag & V3D_GLOBAL_STATS) { - Mat4Invert(ob->imat, ob->obmat); - Mat4MulVecfl(ob->imat, median); - Mat4MulVecfl(ob->imat, ve_median); + invert_m4_m4(ob->imat, ob->obmat); + mul_m4_v3(ob->imat, median); + mul_m4_v3(ob->imat, ve_median); } - VecSubf(median, ve_median, median); + sub_v3_v3v3(median, ve_median, median); median[3]= ve_median[3]-median[3]; median[4]= ve_median[4]-median[4]; @@ -388,7 +388,7 @@ static void v3d_editvertex_buts(const bContext *C, uiLayout *layout, View3D *v3d eve= em->verts.first; while(eve) { if(eve->f & SELECT) { - VecAddf(eve->co, eve->co, median); + add_v3_v3v3(eve->co, eve->co, median); } eve= eve->next; } @@ -423,17 +423,17 @@ static void v3d_editvertex_buts(const bContext *C, uiLayout *layout, View3D *v3d a= nu->pntsu; while(a--) { if(bezt->f2 & SELECT) { - VecAddf(bezt->vec[0], bezt->vec[0], median); - VecAddf(bezt->vec[1], bezt->vec[1], median); - VecAddf(bezt->vec[2], bezt->vec[2], median); + add_v3_v3v3(bezt->vec[0], bezt->vec[0], median); + add_v3_v3v3(bezt->vec[1], bezt->vec[1], median); + add_v3_v3v3(bezt->vec[2], bezt->vec[2], median); bezt->weight+= median[4]; } else { if(bezt->f1 & SELECT) { - VecAddf(bezt->vec[0], bezt->vec[0], median); + add_v3_v3v3(bezt->vec[0], bezt->vec[0], median); } if(bezt->f3 & SELECT) { - VecAddf(bezt->vec[2], bezt->vec[2], median); + add_v3_v3v3(bezt->vec[2], bezt->vec[2], median); } } bezt++; @@ -444,7 +444,7 @@ static void v3d_editvertex_buts(const bContext *C, uiLayout *layout, View3D *v3d a= nu->pntsu*nu->pntsv; while(a--) { if(bp->f1 & SELECT) { - VecAddf(bp->vec, bp->vec, median); + add_v3_v3v3(bp->vec, bp->vec, median); bp->vec[3]+= median[3]; bp->weight+= median[4]; } @@ -466,7 +466,7 @@ static void v3d_editvertex_buts(const bContext *C, uiLayout *layout, View3D *v3d bp= lt->editlatt->def; while(a--) { if(bp->f1 & SELECT) { - VecAddf(bp->vec, bp->vec, median); + add_v3_v3v3(bp->vec, bp->vec, median); bp->weight+= median[4]; } bp++; @@ -498,47 +498,121 @@ static void validate_bonebutton_cb(bContext *C, void *bonev, void *namev) } #endif +static void v3d_transform_butsR(uiLayout *layout, PointerRNA *ptr) +{ + uiLayout *split, *colsub; + + split = uiLayoutSplit(layout, 0.8); + + if (ptr->type == &RNA_PoseChannel) { + PointerRNA boneptr; + Bone *bone; + + boneptr = RNA_pointer_get(ptr, "bone"); + bone = boneptr.data; + uiLayoutSetActive(split, !(bone->parent && bone->flag & BONE_CONNECTED)); + } + colsub = uiLayoutColumn(split, 1); + uiItemR(colsub, "Location", 0, ptr, "location", 0); + colsub = uiLayoutColumn(split, 1); + uiItemL(colsub, "", 0); + uiItemR(colsub, "", ICON_LOCKED, ptr, "lock_location", UI_ITEM_R_TOGGLE+UI_ITEM_R_ICON_ONLY); + + split = uiLayoutSplit(layout, 0.8); + + switch(RNA_enum_get(ptr, "rotation_mode")) { + case ROT_MODE_XYZ: + case ROT_MODE_XZY: + case ROT_MODE_YXZ: + case ROT_MODE_YZX: + case ROT_MODE_ZXY: + case ROT_MODE_ZYX: + colsub = uiLayoutColumn(split, 1); + uiItemR(colsub, "Rotation", 0, ptr, "rotation_euler", 0); + colsub = uiLayoutColumn(split, 1); + uiItemL(colsub, "", 0); + uiItemR(colsub, "", ICON_LOCKED, ptr, "lock_rotation", UI_ITEM_R_TOGGLE+UI_ITEM_R_ICON_ONLY); + break; + case ROT_MODE_QUAT: + colsub = uiLayoutColumn(split, 1); + uiItemR(colsub, "Rotation", 0, ptr, "rotation_quaternion", 0); + colsub = uiLayoutColumn(split, 1); + uiItemR(colsub, "W", 0, ptr, "lock_rotations_4d", UI_ITEM_R_TOGGLE); + if (RNA_boolean_get(ptr, "lock_rotations_4d")) + uiItemR(colsub, "", ICON_LOCKED, ptr, "lock_rotation_w", UI_ITEM_R_TOGGLE+UI_ITEM_R_ICON_ONLY); + else + uiItemL(colsub, "", 0); + uiItemR(colsub, "", ICON_LOCKED, ptr, "lock_rotation", UI_ITEM_R_TOGGLE+UI_ITEM_R_ICON_ONLY); + break; + case ROT_MODE_AXISANGLE: + colsub = uiLayoutColumn(split, 1); + uiItemR(colsub, "Rotation", 0, ptr, "rotation_axis_angle", 0); + colsub = uiLayoutColumn(split, 1); + uiItemR(colsub, "W", 0, ptr, "lock_rotations_4d", UI_ITEM_R_TOGGLE); + if (RNA_boolean_get(ptr, "lock_rotations_4d")) + uiItemR(colsub, "", ICON_LOCKED, ptr, "lock_rotation_w", UI_ITEM_R_TOGGLE+UI_ITEM_R_ICON_ONLY); + else + uiItemL(colsub, "", 0); + uiItemR(colsub, "", ICON_LOCKED, ptr, "lock_rotation", UI_ITEM_R_TOGGLE+UI_ITEM_R_ICON_ONLY); + break; + } + uiItemR(layout, "", 0, ptr, "rotation_mode", 0); + + split = uiLayoutSplit(layout, 0.8); + colsub = uiLayoutColumn(split, 1); + uiItemR(colsub, "Scale", 0, ptr, "scale", 0); + colsub = uiLayoutColumn(split, 1); + uiItemL(colsub, "", 0); + uiItemR(colsub, "", ICON_LOCKED, ptr, "lock_scale", UI_ITEM_R_TOGGLE+UI_ITEM_R_ICON_ONLY); + + if (ptr->type == &RNA_Object) { + Object *ob = ptr->data; + if (ELEM5(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_MBALL)) + uiItemR(layout, "Dimensions", 0, ptr, "dimensions", 0); + } +} + static void v3d_posearmature_buts(uiLayout *layout, View3D *v3d, Object *ob, float lim) { - uiBlock *block= uiLayoutGetBlock(layout); - bArmature *arm; +// uiBlock *block= uiLayoutGetBlock(layout); +// bArmature *arm; bPoseChannel *pchan; - Bone *bone= NULL; - TransformProperties *tfp= v3d->properties_storage; +// TransformProperties *tfp= v3d->properties_storage; PointerRNA pchanptr; - uiLayout *row; + uiLayout *col; +// uiLayout *row; - arm = ob->data; - if (!arm || !ob->pose) return; + pchan= get_active_posechannel(ob); - for(pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { - bone = pchan->bone; - if(bone && (bone->flag & BONE_ACTIVE) && (bone->layer & arm->layer)) - break; - } +// row= uiLayoutRow(layout, 0); + if (!pchan) { - uiDefBut(block, LABEL, 0, "No Bone Active", 0, 240, 100, 20, 0, 0, 0, 0, 0, ""); + uiItemL(layout, "No Bone Active", 0); return; } - else { - row= uiLayoutRow(layout, 0); - RNA_pointer_create(&ob->id, &RNA_PoseChannel, pchan, &pchanptr); - uiItemL(row, "", ICON_BONE_DATA); - uiItemR(row, "", 0, &pchanptr, "name", 0); - } + + RNA_pointer_create(&ob->id, &RNA_PoseChannel, pchan, &pchanptr); + + col= uiLayoutColumn(layout, 0); + /* XXX: RNA buts show data in native types (i.e. quats, 4-component axis/angle, etc.) + * but oldskool UI shows in eulers always. Do we want to be able to still display in Eulers? + * Maybe needs RNA/ui options to display rotations as different types... */ + v3d_transform_butsR(col, &pchanptr); + +#if 0 uiLayoutAbsoluteBlock(layout); if (pchan->rotmode == ROT_MODE_AXISANGLE) { float quat[4]; /* convert to euler, passing through quats... */ - AxisAngleToQuat(quat, pchan->rotAxis, pchan->rotAngle); - QuatToEul(quat, tfp->ob_eul); + axis_angle_to_quat(quat, pchan->rotAxis, pchan->rotAngle); + quat_to_eul( tfp->ob_eul,quat); } else if (pchan->rotmode == ROT_MODE_QUAT) - QuatToEul(pchan->quat, tfp->ob_eul); + quat_to_eul( tfp->ob_eul,pchan->quat); else - VecCopyf(tfp->ob_eul, pchan->eul); + copy_v3_v3(tfp->ob_eul, pchan->eul); tfp->ob_eul[0]*= 180.0/M_PI; tfp->ob_eul[1]*= 180.0/M_PI; tfp->ob_eul[2]*= 180.0/M_PI; @@ -581,6 +655,7 @@ static void v3d_posearmature_buts(uiLayout *layout, View3D *v3d, Object *ob, flo uiDefIconButBitS(block, ICONTOG, OB_LOCK_SCALEY, B_REDR, ICON_UNLOCKED, 125, 40, 25, 19, &(pchan->protectflag), 0, 0, 0, 0, "Protects Y Scale value from being Transformed"); uiDefIconButBitS(block, ICONTOG, OB_LOCK_SCALEZ, B_REDR, ICON_UNLOCKED, 125, 20, 25, 19, &(pchan->protectflag), 0, 0, 0, 0, "Protects z Scale value from being Transformed"); uiBlockEndAlign(block); +#endif } /* assumes armature editmode */ @@ -601,86 +676,87 @@ void validate_editbonebutton_cb(bContext *C, void *bonev, void *namev) static void v3d_editarmature_buts(uiLayout *layout, View3D *v3d, Object *ob, float lim) { - uiBlock *block= uiLayoutGetBlock(layout); +// uiBlock *block= uiLayoutGetBlock(layout); bArmature *arm= ob->data; EditBone *ebone; - TransformProperties *tfp= v3d->properties_storage; - uiLayout *row; +// TransformProperties *tfp= v3d->properties_storage; +// uiLayout *row; + uiLayout *col; PointerRNA eboneptr; - ebone= arm->edbo->first; - - for (ebone = arm->edbo->first; ebone; ebone=ebone->next){ - if ((ebone->flag & BONE_ACTIVE) && (ebone->layer & arm->layer)) - break; - } + ebone= arm->act_edbone; - if (!ebone) + if (!ebone || (ebone->layer & arm->layer)==0) return; - row= uiLayoutRow(layout, 0); +// row= uiLayoutRow(layout, 0); RNA_pointer_create(&arm->id, &RNA_EditBone, ebone, &eboneptr); - uiItemL(row, "", ICON_BONE_DATA); - uiItemR(row, "", 0, &eboneptr, "name", 0); - uiLayoutAbsoluteBlock(layout); - - uiDefBut(block, LABEL, 0, "Head:", 0, 210, 100, 20, 0, 0, 0, 0, 0, ""); - uiBlockBeginAlign(block); - uiDefButF(block, NUM, B_ARMATUREPANEL1, "X:", 0, 190, 100, 19, ebone->head, -lim, lim, 10, 3, "X Location of the head end of the bone"); - uiDefButF(block, NUM, B_ARMATUREPANEL1, "Y:", 0, 170, 100, 19, ebone->head+1, -lim, lim, 10, 3, "Y Location of the head end of the bone"); - uiDefButF(block, NUM, B_ARMATUREPANEL1, "Z:", 0, 150, 100, 19, ebone->head+2, -lim, lim, 10, 3, "Z Location of the head end of the bone"); - if (ebone->parent && ebone->flag & BONE_CONNECTED ) - uiDefButF(block, NUM, B_ARMATUREPANEL1, "Radius:", 0, 130, 100, 19, &ebone->parent->rad_tail, 0, lim, 10, 3, "Head radius. Visualize with the Envelope display option"); - else - uiDefButF(block, NUM, B_ARMATUREPANEL1, "Radius:", 0, 130, 100, 19, &ebone->rad_head, 0, lim, 10, 3, "Head radius. Visualize with the Envelope display option"); - uiBlockEndAlign(block); - - uiBlockEndAlign(block); - uiDefBut(block, LABEL, 0, "Tail:", 0, 110, 100, 20, 0, 0, 0, 0, 0, ""); - uiBlockBeginAlign(block); - uiDefButF(block, NUM, B_ARMATUREPANEL1, "X:", 0, 90, 100, 19, ebone->tail, -lim, lim, 10, 3, "X Location of the tail end of the bone"); - uiDefButF(block, NUM, B_ARMATUREPANEL1, "Y:", 0, 70, 100, 19, ebone->tail+1, -lim, lim, 10, 3, "Y Location of the tail end of the bone"); - uiDefButF(block, NUM, B_ARMATUREPANEL1, "Z:", 0, 50, 100, 19, ebone->tail+2, -lim, lim, 10, 3, "Z Location of the tail end of the bone"); - uiDefButF(block, NUM, B_ARMATUREPANEL1, "Radius:", 0, 30, 100, 19, &ebone->rad_tail, 0, lim, 10, 3, "Tail radius. Visualize with the Envelope display option"); - uiBlockEndAlign(block); - - tfp->ob_eul[0]= 180.0*ebone->roll/M_PI; - uiDefButF(block, NUM, B_ARMATUREPANEL1, "Roll:", 0, 0, 100, 19, tfp->ob_eul, -lim, lim, 1000, 3, "Bone rotation around head-tail axis"); - uiBlockBeginAlign(block); + + col= uiLayoutColumn(layout, 0); + uiItemR(col, "Head", 0, &eboneptr, "head", 0); + if (ebone->parent && ebone->flag & BONE_CONNECTED ) { + PointerRNA parptr = RNA_pointer_get(&eboneptr, "parent"); + uiItemR(col, "Radius", 0, &parptr, "tail_radius", 0); + } else { + uiItemR(col, "Radius", 0, &eboneptr, "head_radius", 0); + } + uiItemR(col, "Tail", 0, &eboneptr, "tail", 0); + uiItemR(col, "Radius", 0, &eboneptr, "tail_radius", 0); + uiItemR(col, "Roll", 0, &eboneptr, "roll", 0); } static void v3d_editmetaball_buts(uiLayout *layout, Object *ob, float lim) { - uiBlock *block= uiLayoutAbsoluteBlock(layout); - MetaElem *lastelem= NULL; // XXX - - if(lastelem) { - uiBlockBeginAlign(block); - uiDefButF(block, NUM, B_RECALCMBALL, "LocX:", 10, 70, 140, 19, &lastelem->x, -lim, lim, 100, 3, ""); - uiDefButF(block, NUM, B_RECALCMBALL, "LocY:", 10, 50, 140, 19, &lastelem->y, -lim, lim, 100, 3, ""); - uiDefButF(block, NUM, B_RECALCMBALL, "LocZ:", 10, 30, 140, 19, &lastelem->z, -lim, lim, 100, 3, ""); - - uiBlockBeginAlign(block); - if(lastelem->type!=MB_BALL) - uiDefButF(block, NUM, B_RECALCMBALL, "dx:", 160, 70, 140, 19, &lastelem->expx, 0, lim, 100, 3, ""); - if((lastelem->type!=MB_BALL) && (lastelem->type!=MB_TUBE)) - uiDefButF(block, NUM, B_RECALCMBALL, "dy:", 160, 50, 140, 19, &lastelem->expy, 0, lim, 100, 3, ""); - if((lastelem->type==MB_ELIPSOID) || (lastelem->type==MB_CUBE)) - uiDefButF(block, NUM, B_RECALCMBALL, "dz:", 160, 30, 140, 19, &lastelem->expz, 0, lim, 100, 3, ""); - - uiBlockEndAlign(block); + PointerRNA mbptr, ptr; + MetaBall *mball= ob->data; +// uiLayout *row; + uiLayout *col; + + if (!mball || !(mball->lastelem)) return; + + RNA_pointer_create(&mball->id, &RNA_MetaBall, mball, &mbptr); + +// row= uiLayoutRow(layout, 0); - uiBlockBeginAlign(block); - uiDefButF(block, NUM, B_RECALCMBALL, "Radius:", 10, 120, 140, 19, &lastelem->rad, 0, lim, 100, 3, "Size of the active metaball"); - uiDefButF(block, NUM, B_RECALCMBALL, "Stiffness:", 10, 100, 140, 19, &lastelem->s, 0, 10, 100, 3, "Stiffness of the active metaball"); - uiBlockEndAlign(block); - - uiDefButS(block, MENU, B_RECALCMBALL, "Type%t|Ball%x0|Tube%x4|Plane%x5|Elipsoid%x6|Cube%x7", 160, 120, 140, 19, &lastelem->type, 0.0, 0.0, 0, 0, "Set active element type"); - - } + RNA_pointer_create(&mball->id, &RNA_MetaElement, mball->lastelem, &ptr); + + col= uiLayoutColumn(layout, 0); + uiItemR(col, "Location", 0, &ptr, "location", 0); + + uiItemR(col, "Radius", 0, &ptr, "radius", 0); + uiItemR(col, "Stiffness", 0, &ptr, "stiffness", 0); + + uiItemR(col, "Type", 0, &ptr, "type", 0); + + col= uiLayoutColumn(layout, 1); + switch (RNA_enum_get(&ptr, "type")) { + case MB_BALL: + break; + case MB_CUBE: + uiItemL(col, "Size:", 0); + uiItemR(col, "X", 0, &ptr, "size_x", 0); + uiItemR(col, "Y", 0, &ptr, "size_y", 0); + uiItemR(col, "Z", 0, &ptr, "size_z", 0); + break; + case MB_TUBE: + uiItemL(col, "Size:", 0); + uiItemR(col, "X", 0, &ptr, "size_x", 0); + break; + case MB_PLANE: + uiItemL(col, "Size:", 0); + uiItemR(col, "X", 0, &ptr, "size_x", 0); + uiItemR(col, "Y", 0, &ptr, "size_y", 0); + break; + case MB_ELIPSOID: + uiItemL(col, "Size:", 0); + uiItemR(col, "X", 0, &ptr, "size_x", 0); + uiItemR(col, "Y", 0, &ptr, "size_y", 0); + uiItemR(col, "Z", 0, &ptr, "size_z", 0); + break; + } } /* test if 'ob' is a parent somewhere in par's parents */ @@ -694,9 +770,9 @@ static int test_parent_loop(Object *par, Object *ob) static void do_view3d_region_buttons(bContext *C, void *arg, int event) { Scene *scene= CTX_data_scene(C); - Object *obedit= CTX_data_edit_object(C); +// Object *obedit= CTX_data_edit_object(C); View3D *v3d= CTX_wm_view3d(C); - BoundBox *bb; +// BoundBox *bb; Object *ob= OBACT; TransformProperties *tfp= v3d->properties_storage; @@ -709,114 +785,7 @@ static void do_view3d_region_buttons(bContext *C, void *arg, int event) case B_OBJECTPANEL: DAG_id_flush_update(&ob->id, OB_RECALC_OB); break; - - case B_OBJECTPANELROT: - if(ob) { - float eul[3]; - - /* make a copy to eul[3], to allow TAB on buttons to work */ - eul[0]= M_PI*tfp->ob_eul[0]/180.0; - eul[1]= M_PI*tfp->ob_eul[1]/180.0; - eul[2]= M_PI*tfp->ob_eul[2]/180.0; - - if (ob->rotmode == ROT_MODE_AXISANGLE) { - float quat[4]; - /* convert to axis-angle, passing through quats */ - EulToQuat(eul, quat); - QuatToAxisAngle(quat, ob->rotAxis, &ob->rotAngle); - } - else if (ob->rotmode == ROT_MODE_QUAT) - EulToQuat(eul, ob->quat); - else - VecCopyf(ob->rot, eul); - - DAG_id_flush_update(&ob->id, OB_RECALC_OB); - } - break; - - case B_OBJECTPANELSCALE: - if(ob) { - - /* link scale; figure out which axis changed */ - if (tfp->link_scale) { - float ratio, tmp, max = 0.0; - int axis; - - axis = 0; - max = fabs(tfp->ob_scale[0] - ob->size[0]); - tmp = fabs(tfp->ob_scale[1] - ob->size[1]); - if (tmp > max) { - axis = 1; - max = tmp; - } - tmp = fabs(tfp->ob_scale[2] - ob->size[2]); - if (tmp > max) { - axis = 2; - max = tmp; - } - - if (ob->size[axis] != tfp->ob_scale[axis]) { - if (fabs(ob->size[axis]) > FLT_EPSILON) { - ratio = tfp->ob_scale[axis] / ob->size[axis]; - ob->size[0] *= ratio; - ob->size[1] *= ratio; - ob->size[2] *= ratio; - } - } - } - else { - VECCOPY(ob->size, tfp->ob_scale); - - } - DAG_id_flush_update(&ob->id, OB_RECALC_OB); - } - break; - case B_OBJECTPANELDIMS: - bb= object_get_boundbox(ob); - if(bb) { - float old_dims[3], scale[3], ratio, len[3]; - int axis; - - Mat4ToSize(ob->obmat, scale); - - len[0] = bb->vec[4][0] - bb->vec[0][0]; - len[1] = bb->vec[2][1] - bb->vec[0][1]; - len[2] = bb->vec[1][2] - bb->vec[0][2]; - - old_dims[0] = fabs(scale[0]) * len[0]; - old_dims[1] = fabs(scale[1]) * len[1]; - old_dims[2] = fabs(scale[2]) * len[2]; - - /* for each axis changed */ - for (axis = 0; axis<3; axis++) { - if (fabs(old_dims[axis] - tfp->ob_dims[axis]) > 0.0001) { - if (old_dims[axis] > 0.0) { - ratio = tfp->ob_dims[axis] / old_dims[axis]; - if (tfp->link_scale) { - ob->size[0] *= ratio; - ob->size[1] *= ratio; - ob->size[2] *= ratio; - break; - } - else { - ob->size[axis] *= ratio; - } - } - else { - if (len[axis] > 0) { - ob->size[axis] = tfp->ob_dims[axis] / len[axis]; - } - } - } - } - - /* prevent multiple B_OBJECTPANELDIMS events to keep scaling, cycling with TAB on buttons can cause that */ - VECCOPY(tfp->ob_dims, old_dims); - - DAG_id_flush_update(&ob->id, OB_RECALC_OB); - } - break; case B_OBJECTPANELMEDIAN: if(ob) { @@ -837,66 +806,13 @@ static void do_view3d_region_buttons(bContext *C, void *arg, int event) } break; - case B_ARMATUREPANEL1: - { - bArmature *arm= obedit->data; - EditBone *ebone, *child; - - for (ebone = arm->edbo->first; ebone; ebone=ebone->next){ - if ((ebone->flag & BONE_ACTIVE) && (ebone->layer & arm->layer)) - break; - } - if (ebone) { - ebone->roll= M_PI*tfp->ob_eul[0]/180.0; - // Update our parent - if (ebone->parent && ebone->flag & BONE_CONNECTED){ - VECCOPY (ebone->parent->tail, ebone->head); - } - - // Update our children if necessary - for (child = arm->edbo->first; child; child=child->next){ - if (child->parent == ebone && (child->flag & BONE_CONNECTED)){ - VECCOPY (child->head, ebone->tail); - } - } - if(arm->flag & ARM_MIRROR_EDIT) { - EditBone *eboflip= ED_armature_bone_get_mirrored(arm->edbo, ebone); - if(eboflip) { - eboflip->roll= -ebone->roll; - eboflip->head[0]= -ebone->head[0]; - eboflip->tail[0]= -ebone->tail[0]; - - // Update our parent - if (eboflip->parent && eboflip->flag & BONE_CONNECTED){ - VECCOPY (eboflip->parent->tail, eboflip->head); - } - - // Update our children if necessary - for (child = arm->edbo->first; child; child=child->next){ - if (child->parent == eboflip && (child->flag & BONE_CONNECTED)){ - VECCOPY (child->head, eboflip->tail); - } - } - } - } - } - } - break; + case B_ARMATUREPANEL3: // rotate button on channel { - bArmature *arm; bPoseChannel *pchan; - Bone *bone; float eul[3]; - arm = ob->data; - if (!arm || !ob->pose) return; - - for(pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { - bone = pchan->bone; - if(bone && (bone->flag & BONE_ACTIVE) && (bone->layer & arm->layer)) - break; - } + pchan= get_active_posechannel(ob); if (!pchan) return; /* make a copy to eul[3], to allow TAB on buttons to work */ @@ -907,13 +823,13 @@ static void do_view3d_region_buttons(bContext *C, void *arg, int event) if (pchan->rotmode == ROT_MODE_AXISANGLE) { float quat[4]; /* convert to axis-angle, passing through quats */ - EulToQuat(eul, quat); - QuatToAxisAngle(quat, pchan->rotAxis, &pchan->rotAngle); + eul_to_quat( quat,eul); + quat_to_axis_angle( pchan->rotAxis, &pchan->rotAngle,quat); } else if (pchan->rotmode == ROT_MODE_QUAT) - EulToQuat(eul, pchan->quat); + eul_to_quat( pchan->quat,eul); else - VecCopyf(pchan->eul, eul); + copy_v3_v3(pchan->eul, eul); } /* no break, pass on */ case B_ARMATUREPANEL2: @@ -1148,8 +1064,6 @@ static void view3d_panel_object(const bContext *C, Panel *pa) col= uiLayoutColumn(pa->layout, 0); row= uiLayoutRow(col, 0); RNA_id_pointer_create(&ob->id, &obptr); - uiItemL(row, "", ICON_OBJECT_DATA); - uiItemR(row, "", 0, &obptr, "name", 0); if(ob==obedit) { if(ob->type==OB_ARMATURE) v3d_editarmature_buts(col, v3d, ob, lim); @@ -1160,117 +1074,8 @@ static void view3d_panel_object(const bContext *C, Panel *pa) v3d_posearmature_buts(col, v3d, ob, lim); } else { - BoundBox *bb = NULL; - - uiLayoutAbsoluteBlock(col); - - block= uiLayoutAbsoluteBlock(col); - uiDefBut(block, LABEL, 0, "Location:", 0, 300, 100, 20, 0, 0, 0, 0, 0, ""); - uiBlockBeginAlign(block); - uiDefButF(block, NUM, B_OBJECTPANEL, "X:", 0, 280, 120, 19, &(ob->loc[0]), -lim, lim, 100, 3, ""); - uiDefButF(block, NUM, B_OBJECTPANEL, "Y:", 0, 260, 120, 19, &(ob->loc[1]), -lim, lim, 100, 3, ""); - uiDefButF(block, NUM, B_OBJECTPANEL, "Z:", 0, 240, 120, 19, &(ob->loc[2]), -lim, lim, 100, 3, ""); - uiBlockEndAlign(block); - - uiBlockBeginAlign(block); - uiDefIconButBitS(block, ICONTOG, OB_LOCK_LOCX, B_REDR, ICON_UNLOCKED, 125, 280, 25, 19, &(ob->protectflag), 0, 0, 0, 0, "Protects X Location value from being Transformed"); - uiDefIconButBitS(block, ICONTOG, OB_LOCK_LOCY, B_REDR, ICON_UNLOCKED, 125, 260, 25, 19, &(ob->protectflag), 0, 0, 0, 0, "Protects Y Location value from being Transformed"); - uiDefIconButBitS(block, ICONTOG, OB_LOCK_LOCZ, B_REDR, ICON_UNLOCKED, 125, 240, 25, 19, &(ob->protectflag), 0, 0, 0, 0, "Protects Z Location value from being Transformed"); - uiBlockEndAlign(block); - - if (ob->rotmode == ROT_MODE_AXISANGLE) { - float quat[4]; - /* convert to euler, passing through quats... */ - AxisAngleToQuat(quat, ob->rotAxis, ob->rotAngle); - QuatToEul(quat, tfp->ob_eul); - } - else if (ob->rotmode == ROT_MODE_QUAT) - QuatToEul(ob->quat, tfp->ob_eul); - else - VecCopyf(tfp->ob_eul, ob->rot); - tfp->ob_eul[0]*= 180.0/M_PI; - tfp->ob_eul[1]*= 180.0/M_PI; - tfp->ob_eul[2]*= 180.0/M_PI; - - uiBlockBeginAlign(block); - if ((ob->parent) && (ob->partype == PARBONE)) { - uiDefBut(block, LABEL, 0, "Rotation:", 0, 220, 100, 20, 0, 0, 0, 0, 0, ""); - uiBlockBeginAlign(block); - uiDefButF(block, NUM, B_OBJECTPANELROT, "X:", 0, 200, 120, 19, &(tfp->ob_eul[0]), -lim, lim, 1000, 3, ""); - uiDefButF(block, NUM, B_OBJECTPANELROT, "Y:", 0, 180, 120, 19, &(tfp->ob_eul[1]), -lim, lim, 1000, 3, ""); - uiDefButF(block, NUM, B_OBJECTPANELROT, "Z:", 0, 160, 120, 19, &(tfp->ob_eul[2]), -lim, lim, 1000, 3, ""); - uiBlockEndAlign(block); - - uiBlockBeginAlign(block); - uiDefIconButBitS(block, ICONTOG, OB_LOCK_ROTX, B_REDR, ICON_UNLOCKED, 125, 200, 25, 19, &(ob->protectflag), 0, 0, 0, 0, "Protects X Rotation from being Transformed"); - uiDefIconButBitS(block, ICONTOG, OB_LOCK_ROTY, B_REDR, ICON_UNLOCKED, 125, 180, 25, 19, &(ob->protectflag), 0, 0, 0, 0, "Protects Y Rotation value from being Transformed"); - uiDefIconButBitS(block, ICONTOG, OB_LOCK_ROTZ, B_REDR, ICON_UNLOCKED, 125, 160, 25, 19, &(ob->protectflag), 0, 0, 0, 0, "Protects Z Rotation value from being Transformed"); - uiBlockEndAlign(block); - - } - else { - uiDefBut(block, LABEL, 0, "Rotation:", 0, 220, 100, 20, 0, 0, 0, 0, 0, ""); - uiBlockBeginAlign(block); - uiDefButF(block, NUM, B_OBJECTPANELROT, "X:", 0, 200, 120, 19, &(tfp->ob_eul[0]), -lim, lim, 1000, 3, ""); - uiDefButF(block, NUM, B_OBJECTPANELROT, "Y:", 0, 180, 120, 19, &(tfp->ob_eul[1]), -lim, lim, 1000, 3, ""); - uiDefButF(block, NUM, B_OBJECTPANELROT, "Z:", 0, 160, 120, 19, &(tfp->ob_eul[2]), -lim, lim, 1000, 3, ""); - uiBlockEndAlign(block); - - uiBlockBeginAlign(block); - uiDefIconButBitS(block, ICONTOG, OB_LOCK_ROTX, B_REDR, ICON_UNLOCKED, 125, 200, 25, 19, &(ob->protectflag), 0, 0, 0, 0, "Protects X Rotation value from being Transformed"); - uiDefIconButBitS(block, ICONTOG, OB_LOCK_ROTY, B_REDR, ICON_UNLOCKED, 125, 180, 25, 19, &(ob->protectflag), 0, 0, 0, 0, "Protects Y Rotation value from being Transformed"); - uiDefIconButBitS(block, ICONTOG, OB_LOCK_ROTZ, B_REDR, ICON_UNLOCKED, 125, 160, 25, 19, &(ob->protectflag), 0, 0, 0, 0, "Protects Z Rotation value from being Transformed"); - uiBlockEndAlign(block); - } - - tfp->ob_scale[0]= ob->size[0]; - tfp->ob_scale[1]= ob->size[1]; - tfp->ob_scale[2]= ob->size[2]; - - uiDefBut(block, LABEL, 0, "Scale:", 0, 140, 100, 20, 0, 0, 0, 0, 0, ""); - uiDefButS(block, OPTION, B_REDR, "Link", 60, 140, 50, 19, &(tfp->link_scale), 0, 1, 0, 0, "Scale values vary proportionally in all directions"); - uiBlockBeginAlign(block); - uiDefButF(block, NUM, B_OBJECTPANELSCALE, "X:", 0, 120, 120, 19, &(tfp->ob_scale[0]), -lim, lim, 10, 3, ""); - uiDefButF(block, NUM, B_OBJECTPANELSCALE, "Y:", 0, 100, 120, 19, &(tfp->ob_scale[1]), -lim, lim, 10, 3, ""); - uiDefButF(block, NUM, B_OBJECTPANELSCALE, "Z:", 0, 80, 120, 19, &(tfp->ob_scale[2]), -lim, lim, 10, 3, ""); - uiBlockEndAlign(block); - - uiBlockBeginAlign(block); - uiDefIconButBitS(block, ICONTOG, OB_LOCK_SCALEX, B_REDR, ICON_UNLOCKED, 125, 120, 25, 19, &(ob->protectflag), 0, 0, 0, 0, "Protects X Scale value from being Transformed"); - uiDefIconButBitS(block, ICONTOG, OB_LOCK_SCALEY, B_REDR, ICON_UNLOCKED, 125, 100, 25, 19, &(ob->protectflag), 0, 0, 0, 0, "Protects Y Scale value from being Transformed"); - uiDefIconButBitS(block, ICONTOG, OB_LOCK_SCALEZ, B_REDR, ICON_UNLOCKED, 125, 80, 25, 19, &(ob->protectflag), 0, 0, 0, 0, "Protects Z Scale value from being Transformed"); - - - - bb= object_get_boundbox(ob); - if (bb) { - float scale[3]; - - Mat4ToSize(ob->obmat, scale); - tfp->ob_dims[0] = fabs(scale[0]) * (bb->vec[4][0] - bb->vec[0][0]); - tfp->ob_dims[1] = fabs(scale[1]) * (bb->vec[2][1] - bb->vec[0][1]); - tfp->ob_dims[2] = fabs(scale[2]) * (bb->vec[1][2] - bb->vec[0][2]); - - - if ((ob->parent) && (ob->partype == PARBONE)) { - uiDefBut(block, LABEL, 0, "Dimensions:", 0, 60, 100, 20, 0, 0, 0, 0, 0, ""); - uiBlockBeginAlign(block); - uiDefButF(block, NUM, B_OBJECTPANELDIMS, "X:", 0, 40, 150, 19, &(tfp->ob_dims[0]), 0.0, lim, 10, 3, "Manipulate X bounding box size"); - uiDefButF(block, NUM, B_OBJECTPANELDIMS, "Y:", 0, 20, 150, 19, &(tfp->ob_dims[1]), 0.0, lim, 10, 3, "Manipulate Y bounding box size"); - uiDefButF(block, NUM, B_OBJECTPANELDIMS, "Z:", 0, 0, 150, 19, &(tfp->ob_dims[2]), 0.0, lim, 10, 3, "Manipulate Z bounding box size"); - - } - else { - uiDefBut(block, LABEL, 0, "Dimensions:", 0, 60, 100, 20, 0, 0, 0, 0, 0, ""); - uiBlockBeginAlign(block); - uiDefButF(block, NUM, B_OBJECTPANELDIMS, "X:", 0, 40, 150, 19, &(tfp->ob_dims[0]), 0.0, lim, 10, 3, "Manipulate X bounding box size"); - uiDefButF(block, NUM, B_OBJECTPANELDIMS, "Y:", 0, 20, 150, 19, &(tfp->ob_dims[1]), 0.0, lim, 10, 3, "Manipulate Y bounding box size"); - uiDefButF(block, NUM, B_OBJECTPANELDIMS, "Z:", 0, 0, 150, 19, &(tfp->ob_dims[2]), 0.0, lim, 10, 3, "Manipulate Z bounding box size"); - } - - uiBlockEndAlign(block); - } + v3d_transform_butsR(col, &obptr); } } diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 75e254339af..f91e58ec560 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -48,7 +48,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_rand.h" #include "BKE_anim.h" @@ -251,7 +251,7 @@ static void drawgrid(UnitSettings *unit, ARegion *ar, View3D *v3d, char **grid_u vec4[0]=vec4[1]=vec4[2]=0.0; vec4[3]= 1.0; - Mat4MulVec4fl(rv3d->persmat, vec4); + mul_m4_v4(rv3d->persmat, vec4); fx= vec4[0]; fy= vec4[1]; fw= vec4[3]; @@ -266,7 +266,7 @@ static void drawgrid(UnitSettings *unit, ARegion *ar, View3D *v3d, char **grid_u vec4[2]= 0.0; vec4[3]= 1.0; - Mat4MulVec4fl(rv3d->persmat, vec4); + mul_m4_v4(rv3d->persmat, vec4); fx= vec4[0]; fy= vec4[1]; fw= vec4[3]; @@ -596,7 +596,7 @@ static void draw_view_axis(RegionView3D *rv3d) /* X */ vec[0] = vec[3] = 1; vec[1] = vec[2] = 0; - QuatMulVecf(rv3d->viewquat, vec); + mul_qt_v3(rv3d->viewquat, vec); UI_make_axis_color((char *)gridcol, (char *)col, 'x'); rgb_to_hsv(col[0]/255.0f, col[1]/255.0f, col[2]/255.0f, &h, &s, &v); @@ -616,7 +616,7 @@ static void draw_view_axis(RegionView3D *rv3d) /* Y */ vec[1] = vec[3] = 1; vec[0] = vec[2] = 0; - QuatMulVecf(rv3d->viewquat, vec); + mul_qt_v3(rv3d->viewquat, vec); UI_make_axis_color((char *)gridcol, (char *)col, 'y'); rgb_to_hsv(col[0]/255.0f, col[1]/255.0f, col[2]/255.0f, &h, &s, &v); @@ -636,7 +636,7 @@ static void draw_view_axis(RegionView3D *rv3d) /* Z */ vec[2] = vec[3] = 1; vec[1] = vec[0] = 0; - QuatMulVecf(rv3d->viewquat, vec); + mul_qt_v3(rv3d->viewquat, vec); UI_make_axis_color((char *)gridcol, (char *)col, 'z'); rgb_to_hsv(col[0]/255.0f, col[1]/255.0f, col[2]/255.0f, &h, &s, &v); @@ -791,21 +791,17 @@ static void draw_selected_name(Scene *scene, Object *ob, View3D *v3d) /* show name of active bone too (if possible) */ if(arm->edbo) { - EditBone *ebo; - for (ebo=arm->edbo->first; ebo; ebo=ebo->next){ - if ((ebo->flag & BONE_ACTIVE) && (ebo->layer & arm->layer)) { - name= ebo->name; - break; - } - } + + if(arm->act_edbone) + name= ((EditBone *)arm->act_edbone)->name; + } - else if(ob->pose && (ob->mode & OB_MODE_POSE)) { - bPoseChannel *pchan; - for(pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { - if((pchan->bone->flag & BONE_ACTIVE) && (pchan->bone->layer & arm->layer)) { - name= pchan->name; - break; - } + else if(ob->mode & OB_MODE_POSE) { + if(arm->act_bone) { + + if(arm->act_bone->layer & arm->layer) + name= arm->act_bone->name; + } } if(name && markern) @@ -1562,7 +1558,7 @@ static void draw_dupli_objects_color(Scene *scene, ARegion *ar, View3D *v3d, Bas /* need this for next part of code */ bb= object_get_boundbox(dob->ob); - Mat4One(dob->ob->obmat); /* obmat gets restored */ + unit_m4(dob->ob->obmat); /* obmat gets restored */ displist= glGenLists(1); glNewList(displist, GL_COMPILE); @@ -1580,7 +1576,7 @@ static void draw_dupli_objects_color(Scene *scene, ARegion *ar, View3D *v3d, Bas wmLoadMatrix(rv3d->viewmat); } else { - Mat4CpyMat4(dob->ob->obmat, dob->mat); + copy_m4_m4(dob->ob->obmat, dob->mat); draw_object(scene, ar, v3d, &tbase, DRAW_CONSTCOLOR); } @@ -1662,9 +1658,9 @@ void draw_depth(Scene *scene, ARegion *ar, View3D *v3d, int (* func)(void *)) setwinmatrixview3d(ar, v3d, NULL); /* 0= no pick rect */ setviewmatrixview3d(scene, v3d, rv3d); /* note: calls where_is_object for camera... */ - Mat4MulMat4(rv3d->persmat, rv3d->viewmat, rv3d->winmat); - Mat4Invert(rv3d->persinv, rv3d->persmat); - Mat4Invert(rv3d->viewinv, rv3d->viewmat); + mul_m4_m4m4(rv3d->persmat, rv3d->viewmat, rv3d->winmat); + invert_m4_m4(rv3d->persinv, rv3d->persmat); + invert_m4_m4(rv3d->viewinv, rv3d->viewmat); glClear(GL_DEPTH_BUFFER_BIT); @@ -1872,29 +1868,29 @@ static void view3d_main_area_setup_view(Scene *scene, View3D *v3d, ARegion *ar, /* setup window matrices */ if(winmat) - Mat4CpyMat4(rv3d->winmat, winmat); + copy_m4_m4(rv3d->winmat, winmat); else setwinmatrixview3d(ar, v3d, NULL); /* NULL= no pickrect */ /* setup view matrix */ if(viewmat) - Mat4CpyMat4(rv3d->viewmat, viewmat); + copy_m4_m4(rv3d->viewmat, viewmat); else setviewmatrixview3d(scene, v3d, rv3d); /* note: calls where_is_object for camera... */ /* update utilitity matrices */ - Mat4MulMat4(rv3d->persmat, rv3d->viewmat, rv3d->winmat); - Mat4Invert(rv3d->persinv, rv3d->persmat); - Mat4Invert(rv3d->viewinv, rv3d->viewmat); + mul_m4_m4m4(rv3d->persmat, rv3d->viewmat, rv3d->winmat); + invert_m4_m4(rv3d->persinv, rv3d->persmat); + invert_m4_m4(rv3d->viewinv, rv3d->viewmat); /* calculate pixelsize factor once, is used for lamps and obcenters */ { float len1, len2, vec[3]; VECCOPY(vec, rv3d->persinv[0]); - len1= Normalize(vec); + len1= normalize_v3(vec); VECCOPY(vec, rv3d->persinv[1]); - len2= Normalize(vec); + len2= normalize_v3(vec); rv3d->pixsize= 2.0f*(len1>len2?len1:len2); @@ -1978,6 +1974,14 @@ void ED_view3d_draw_offscreen(Scene *scene, View3D *v3d, ARegion *ar, int winx, glDisable(GL_DEPTH_TEST); } + /* draw grease-pencil stuff */ + draw_gpencil_3dview_ext(scene, ar, 1); + + ED_region_pixelspace(ar); + + /* draw grease-pencil stuff - needed to get paint-buffer shown too (since it's 2D) */ + draw_gpencil_3dview_ext(scene, ar, 0); + GPU_free_images(); /* restore size */ @@ -2137,7 +2141,7 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar) glDisable(GL_DEPTH_TEST); } - /* draw grease-pencil stuff */ + /* draw grease-pencil stuff (3d-space strokes) */ //if (v3d->flag2 & V3D_DISPGP) draw_gpencil_3dview((bContext *)C, 1); diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 581e427605c..937a662e274 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -46,7 +46,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_rand.h" #include "BKE_action.h" @@ -141,12 +141,12 @@ static void view3d_boxview_clip(ScrArea *sa) } /* normals for plane equations */ - CalcNormFloat(bb->vec[0], bb->vec[1], bb->vec[4], clip[0]); - CalcNormFloat(bb->vec[1], bb->vec[2], bb->vec[5], clip[1]); - CalcNormFloat(bb->vec[2], bb->vec[3], bb->vec[6], clip[2]); - CalcNormFloat(bb->vec[3], bb->vec[0], bb->vec[7], clip[3]); - CalcNormFloat(bb->vec[4], bb->vec[5], bb->vec[6], clip[4]); - CalcNormFloat(bb->vec[0], bb->vec[2], bb->vec[1], clip[5]); + normal_tri_v3( clip[0],bb->vec[0], bb->vec[1], bb->vec[4]); + normal_tri_v3( clip[1],bb->vec[1], bb->vec[2], bb->vec[5]); + normal_tri_v3( clip[2],bb->vec[2], bb->vec[3], bb->vec[6]); + normal_tri_v3( clip[3],bb->vec[3], bb->vec[0], bb->vec[7]); + normal_tri_v3( clip[4],bb->vec[4], bb->vec[5], bb->vec[6]); + normal_tri_v3( clip[5],bb->vec[0], bb->vec[2], bb->vec[1]); /* then plane equations */ for(val=0; val<5; val++) { @@ -299,7 +299,7 @@ static void viewops_data(bContext *C, wmOperator *op, wmEvent *event) /* If there's no selection, lastofs is unmodified and last value since static */ calculateTransformCenter(C, event, V3D_CENTROID, lastofs); VECCOPY(vod->obofs, lastofs); - VecMulf(vod->obofs, -1.0f); + mul_v3_fl(vod->obofs, -1.0f); } /* lookup, we dont pass on v3d to prevent confusement */ @@ -422,13 +422,13 @@ static void viewrotate_apply(ViewOpsData *vod, int x, int y) calctrackballvec(&vod->ar->winrct, x, y, newvec); - VecSubf(dvec, newvec, vod->trackvec); + sub_v3_v3v3(dvec, newvec, vod->trackvec); si= sqrt(dvec[0]*dvec[0]+ dvec[1]*dvec[1]+ dvec[2]*dvec[2]); si/= (2.0*TRACKBALLSIZE); - Crossf(q1+1, vod->trackvec, newvec); - Normalize(q1+1); + cross_v3_v3v3(q1+1, vod->trackvec, newvec); + normalize_v3(q1+1); /* Allow for rotation beyond the interval * [-pi, pi] */ @@ -447,19 +447,19 @@ static void viewrotate_apply(ViewOpsData *vod, int x, int y) q1[1]*= si; q1[2]*= si; q1[3]*= si; - QuatMul(rv3d->viewquat, q1, vod->oldquat); + mul_qt_qtqt(rv3d->viewquat, q1, vod->oldquat); if (use_sel) { /* compute the post multiplication quat, to rotate the offset correctly */ QUATCOPY(q1, vod->oldquat); - QuatConj(q1); - QuatMul(q1, q1, rv3d->viewquat); + conjugate_qt(q1); + mul_qt_qtqt(q1, q1, rv3d->viewquat); - QuatConj(q1); /* conj == inv for unit quat */ + conjugate_qt(q1); /* conj == inv for unit quat */ VECCOPY(rv3d->ofs, vod->ofs); - VecSubf(rv3d->ofs, rv3d->ofs, vod->obofs); - QuatMulVecf(q1, rv3d->ofs); - VecAddf(rv3d->ofs, rv3d->ofs, vod->obofs); + sub_v3_v3v3(rv3d->ofs, rv3d->ofs, vod->obofs); + mul_qt_v3(q1, rv3d->ofs); + add_v3_v3v3(rv3d->ofs, rv3d->ofs, vod->obofs); } } else { @@ -475,12 +475,12 @@ static void viewrotate_apply(ViewOpsData *vod, int x, int y) const float sensitivity = 0.0035; /* Get the 3x3 matrix and its inverse from the quaternion */ - QuatToMat3(rv3d->viewquat, m); - Mat3Inv(m_inv,m); + quat_to_mat3( m,rv3d->viewquat); + invert_m3_m3(m_inv,m); /* Determine the direction of the x vector (for rotating up and down) */ /* This can likely be compuated directly from the quaternion. */ - Mat3MulVecfl(m_inv,xvec); + mul_m3_v3(m_inv,xvec); /* Perform the up/down rotation */ phi = sensitivity * -(y - vod->oldy); @@ -489,13 +489,13 @@ static void viewrotate_apply(ViewOpsData *vod, int x, int y) q1[1] = si * xvec[0]; q1[2] = si * xvec[1]; q1[3] = si * xvec[2]; - QuatMul(rv3d->viewquat, rv3d->viewquat, q1); + mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, q1); if (use_sel) { - QuatConj(q1); /* conj == inv for unit quat */ - VecSubf(rv3d->ofs, rv3d->ofs, vod->obofs); - QuatMulVecf(q1, rv3d->ofs); - VecAddf(rv3d->ofs, rv3d->ofs, vod->obofs); + conjugate_qt(q1); /* conj == inv for unit quat */ + sub_v3_v3v3(rv3d->ofs, rv3d->ofs, vod->obofs); + mul_qt_v3(q1, rv3d->ofs); + add_v3_v3v3(rv3d->ofs, rv3d->ofs, vod->obofs); } /* Perform the orbital rotation */ @@ -503,13 +503,13 @@ static void viewrotate_apply(ViewOpsData *vod, int x, int y) q1[0] = cos(phi); q1[1] = q1[2] = 0.0; q1[3] = sin(phi); - QuatMul(rv3d->viewquat, rv3d->viewquat, q1); + mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, q1); if (use_sel) { - QuatConj(q1); - VecSubf(rv3d->ofs, rv3d->ofs, vod->obofs); - QuatMulVecf(q1, rv3d->ofs); - VecAddf(rv3d->ofs, rv3d->ofs, vod->obofs); + conjugate_qt(q1); + sub_v3_v3v3(rv3d->ofs, rv3d->ofs, vod->obofs); + mul_qt_v3(q1, rv3d->ofs); + add_v3_v3v3(rv3d->ofs, rv3d->ofs, vod->obofs); } } @@ -519,17 +519,17 @@ static void viewrotate_apply(ViewOpsData *vod, int x, int y) float viewmat[3][3]; - QuatToMat3(rv3d->viewquat, viewmat); + quat_to_mat3( viewmat,rv3d->viewquat); for (i = 0 ; i < 39; i++){ float snapmat[3][3]; float view = (int)snapquats[i][4]; - QuatToMat3(snapquats[i], snapmat); + quat_to_mat3( snapmat,snapquats[i]); - if ((Inpf(snapmat[0], viewmat[0]) > thres) && - (Inpf(snapmat[1], viewmat[1]) > thres) && - (Inpf(snapmat[2], viewmat[2]) > thres)){ + if ((dot_v3v3(snapmat[0], viewmat[0]) > thres) && + (dot_v3v3(snapmat[1], viewmat[1]) > thres) && + (dot_v3v3(snapmat[2], viewmat[2]) > thres)){ QUATCOPY(rv3d->viewquat, snapquats[i]); @@ -678,7 +678,7 @@ static void viewmove_apply(ViewOpsData *vod, int x, int y) float dvec[3]; window_to_3d_delta(vod->ar, dvec, x-vod->oldx, y-vod->oldy); - VecAddf(vod->rv3d->ofs, vod->rv3d->ofs, dvec); + add_v3_v3v3(vod->rv3d->ofs, vod->rv3d->ofs, dvec); if(vod->rv3d->viewlock & RV3D_BOXVIEW) view3d_boxview_sync(vod->sa, vod->ar); @@ -868,9 +868,9 @@ static void viewzoom_apply(ViewOpsData *vod, int x, int y) upvec[0] = upvec[1] = 0.0f; upvec[2] = (vod->dist0 - vod->rv3d->dist) * vod->grid; vod->rv3d->dist = vod->dist0; - Mat3CpyMat4(mat, vod->rv3d->viewinv); - Mat3MulVecfl(mat, upvec); - VecAddf(vod->rv3d->ofs, vod->rv3d->ofs, upvec); + copy_m3_m4(mat, vod->rv3d->viewinv); + mul_m3_v3(mat, upvec); + add_v3_v3v3(vod->rv3d->ofs, vod->rv3d->ofs, upvec); } else { /* these limits were in old code too */ if(vod->rv3d->dist<0.001*vod->grid) vod->rv3d->dist= 0.001*vod->grid; @@ -1142,10 +1142,10 @@ static int viewcenter_exec(bContext *C, wmOperator *op) /* like a localview with if(pchan->bone->layer & arm->layer) { ok= 1; VECCOPY(vec, pchan->pose_head); - Mat4MulVecfl(ob->obmat, vec); + mul_m4_v3(ob->obmat, vec); DO_MINMAX(vec, min, max); VECCOPY(vec, pchan->pose_tail); - Mat4MulVecfl(ob->obmat, vec); + mul_m4_v3(ob->obmat, vec); DO_MINMAX(vec, min, max); } } @@ -1401,7 +1401,7 @@ static int view3d_zoom_border_exec(bContext *C, wmOperator *op) dvec[1] = p[1]-p_corner[1]; dvec[2] = p[2]-p_corner[2]; - new_dist = VecLength(dvec); + new_dist = len_v3(dvec); if(new_dist <= v3d->near*1.5) new_dist= v3d->near*1.5; new_ofs[0] = -p[0]; @@ -1430,7 +1430,7 @@ static int view3d_zoom_border_exec(bContext *C, wmOperator *op) window_to_3d_delta(ar, dvec, (rect.xmin+rect.xmax-vb[0])/2, (rect.ymin+rect.ymax-vb[1])/2); /* center the view to the center of the rectangle */ - VecSubf(new_ofs, new_ofs, dvec); + sub_v3_v3v3(new_ofs, new_ofs, dvec); } /* work out the ratios, so that everything selected fits when we zoom */ @@ -1498,27 +1498,55 @@ static EnumPropertyItem prop_view_items[] = { {RV3D_VIEW_CAMERA, "CAMERA", 0, "Camera", "View From the active amera"}, {0, NULL, 0, NULL, NULL}}; -static void axis_set_view(bContext *C, float q1, float q2, float q3, float q4, short view, int perspo) + +/* would like to make this a generic function - outside of transform */ + +static void axis_set_view(bContext *C, float q1, float q2, float q3, float q4, short view, int perspo, int align_active) { View3D *v3d = CTX_wm_view3d(C); RegionView3D *rv3d= CTX_wm_region_view3d(C); float new_quat[4]; - if(rv3d->viewlock) { - /* only pass on if */ - if(rv3d->view==RV3D_VIEW_FRONT && view==RV3D_VIEW_BACK); - else if(rv3d->view==RV3D_VIEW_BACK && view==RV3D_VIEW_FRONT); - else if(rv3d->view==RV3D_VIEW_RIGHT && view==RV3D_VIEW_LEFT); - else if(rv3d->view==RV3D_VIEW_LEFT && view==RV3D_VIEW_RIGHT); - else if(rv3d->view==RV3D_VIEW_BOTTOM && view==RV3D_VIEW_TOP); - else if(rv3d->view==RV3D_VIEW_TOP && view==RV3D_VIEW_BOTTOM); - else return; - } - new_quat[0]= q1; new_quat[1]= q2; new_quat[2]= q3; new_quat[3]= q4; - rv3d->view= view; + if(align_active) { + /* align to active object */ + Object *obact= CTX_data_active_object(C); + if (obact==NULL) { + /* no active object, ignore this option */ + align_active= FALSE; + } + else { + float obact_quat[4]; + float twmat[3][3]; + + /* same as transform manipulator when normal is set */ + ED_getTransformOrientationMatrix(C, twmat, TRUE); + + mat3_to_quat( obact_quat,twmat); + invert_qt(obact_quat); + mul_qt_qtqt(new_quat, new_quat, obact_quat); + + rv3d->view= view= 0; + } + } + + if(align_active==FALSE) { + /* normal operation */ + if(rv3d->viewlock) { + /* only pass on if */ + if(rv3d->view==RV3D_VIEW_FRONT && view==RV3D_VIEW_BACK); + else if(rv3d->view==RV3D_VIEW_BACK && view==RV3D_VIEW_FRONT); + else if(rv3d->view==RV3D_VIEW_RIGHT && view==RV3D_VIEW_LEFT); + else if(rv3d->view==RV3D_VIEW_LEFT && view==RV3D_VIEW_RIGHT); + else if(rv3d->view==RV3D_VIEW_BOTTOM && view==RV3D_VIEW_TOP); + else if(rv3d->view==RV3D_VIEW_TOP && view==RV3D_VIEW_BOTTOM); + else return; + } + + rv3d->view= view; + } if(rv3d->viewlock) { ED_region_tag_redraw(CTX_wm_region(C)); @@ -1548,35 +1576,36 @@ static int viewnumpad_exec(bContext *C, wmOperator *op) RegionView3D *rv3d= CTX_wm_region_view3d(C); Scene *scene= CTX_data_scene(C); static int perspo=RV3D_PERSP; - int viewnum; + int viewnum, align_active; viewnum = RNA_enum_get(op->ptr, "type"); + align_active = RNA_boolean_get(op->ptr, "align_active"); /* Use this to test if we started out with a camera */ switch (viewnum) { case RV3D_VIEW_BOTTOM : - axis_set_view(C, 0.0, -1.0, 0.0, 0.0, viewnum, perspo); + axis_set_view(C, 0.0, -1.0, 0.0, 0.0, viewnum, perspo, align_active); break; case RV3D_VIEW_BACK: - axis_set_view(C, 0.0, 0.0, (float)-cos(M_PI/4.0), (float)-cos(M_PI/4.0), viewnum, perspo); + axis_set_view(C, 0.0, 0.0, (float)-cos(M_PI/4.0), (float)-cos(M_PI/4.0), viewnum, perspo, align_active); break; case RV3D_VIEW_LEFT: - axis_set_view(C, 0.5, -0.5, 0.5, 0.5, viewnum, perspo); + axis_set_view(C, 0.5, -0.5, 0.5, 0.5, viewnum, perspo, align_active); break; case RV3D_VIEW_TOP: - axis_set_view(C, 1.0, 0.0, 0.0, 0.0, viewnum, perspo); + axis_set_view(C, 1.0, 0.0, 0.0, 0.0, viewnum, perspo, align_active); break; case RV3D_VIEW_FRONT: - axis_set_view(C, (float)cos(M_PI/4.0), (float)-sin(M_PI/4.0), 0.0, 0.0, viewnum, perspo); + axis_set_view(C, (float)cos(M_PI/4.0), (float)-sin(M_PI/4.0), 0.0, 0.0, viewnum, perspo, align_active); break; case RV3D_VIEW_RIGHT: - axis_set_view(C, 0.5, -0.5, -0.5, -0.5, viewnum, perspo); + axis_set_view(C, 0.5, -0.5, -0.5, -0.5, viewnum, perspo, align_active); break; case RV3D_VIEW_CAMERA: @@ -1617,7 +1646,7 @@ static int viewnumpad_exec(bContext *C, wmOperator *op) else{ /* return to settings of last view */ /* does smooth_view too */ - axis_set_view(C, rv3d->lviewquat[0], rv3d->lviewquat[1], rv3d->lviewquat[2], rv3d->lviewquat[3], rv3d->lview, rv3d->lpersp); + axis_set_view(C, rv3d->lviewquat[0], rv3d->lviewquat[1], rv3d->lviewquat[2], rv3d->lviewquat[3], rv3d->lview, rv3d->lpersp, 0); } } break; @@ -1645,6 +1674,7 @@ void VIEW3D_OT_viewnumpad(wmOperatorType *ot) ot->flag= 0; RNA_def_enum(ot->srna, "type", prop_view_items, 0, "View", "The Type of view"); + RNA_def_boolean(ot->srna, "align_active", 0, "Align Active", "Align to the active objects axis"); } static EnumPropertyItem prop_view_orbit_items[] = { @@ -1674,14 +1704,14 @@ static int vieworbit_exec(bContext *C, wmOperator *op) q1[0]= (float)cos(phi); q1[1]= q1[2]= 0.0; q1[3]= si; - QuatMul(rv3d->viewquat, rv3d->viewquat, q1); + mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, q1); rv3d->view= 0; } if(orbitdir == V3D_VIEW_STEPDOWN || orbitdir == V3D_VIEW_STEPUP) { /* horizontal axis */ VECCOPY(q1+1, rv3d->viewinv[0]); - Normalize(q1+1); + normalize_v3(q1+1); phi= (float)(M_PI/360.0)*U.pad_rot_angle; if(orbitdir == V3D_VIEW_STEPDOWN) phi= -phi; si= (float)sin(phi); @@ -1689,7 +1719,7 @@ static int vieworbit_exec(bContext *C, wmOperator *op) q1[1]*= si; q1[2]*= si; q1[3]*= si; - QuatMul(rv3d->viewquat, rv3d->viewquat, q1); + mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, q1); rv3d->view= 0; } ED_region_tag_redraw(ar); @@ -1894,7 +1924,7 @@ static int set_3dcursor_invoke(bContext *C, wmOperator *op, wmEvent *event) if(mval[0]!=IS_CLIPPED) { window_to_3d_delta(ar, dvec, mval[0]-mx, mval[1]-my); - VecSubf(fp, fp, dvec); + sub_v3_v3v3(fp, fp, dvec); } else { @@ -2181,9 +2211,9 @@ void viewmoveNDOFfly(ARegion *ar, View3D *v3d, int mode) m_dist = rv3d->dist; upvec[0] = upvec[1] = 0; upvec[2] = rv3d->dist; - Mat3CpyMat4(mat, rv3d->viewinv); - Mat3MulVecfl(mat, upvec); - VecSubf(rv3d->ofs, rv3d->ofs, upvec); + copy_m3_m4(mat, rv3d->viewinv); + mul_m3_v3(mat, upvec); + sub_v3_v3v3(rv3d->ofs, rv3d->ofs, upvec); rv3d->dist = 0.0; } @@ -2197,16 +2227,16 @@ void viewmoveNDOFfly(ARegion *ar, View3D *v3d, int mode) // rotate device x and y by view z - Mat3CpyMat4(mat, rv3d->viewinv); + copy_m3_m4(mat, rv3d->viewinv); mat[2][2] = 0.0f; - Mat3MulVecfl(mat, rvec); + mul_m3_v3(mat, rvec); // rotate the view - phi = Normalize(rvec); + phi = normalize_v3(rvec); if(phi != 0) { - VecRotToQuat(rvec,phi,q1); - QuatMul(rv3d->viewquat, rv3d->viewquat, q1); + axis_angle_to_quat(q1,rvec,phi); + mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, q1); } @@ -2219,13 +2249,13 @@ void viewmoveNDOFfly(ARegion *ar, View3D *v3d, int mode) // the next three lines rotate the x and y translation coordinates // by the current z axis angle - Mat3CpyMat4(mat, rv3d->viewinv); + copy_m3_m4(mat, rv3d->viewinv); mat[2][2] = 0.0f; - Mat3MulVecfl(mat, tvec); + mul_m3_v3(mat, tvec); // translate the view - VecSubf(rv3d->ofs, rv3d->ofs, tvec); + sub_v3_v3v3(rv3d->ofs, rv3d->ofs, tvec); /*---------------------------------------------------- @@ -2284,9 +2314,9 @@ void viewmoveNDOF(Scene *scene, ARegion *ar, View3D *v3d, int mode) rv3d->dist = m_dist; upvec[0] = upvec[1] = 0; upvec[2] = rv3d->dist; - Mat3CpyMat4(mat, rv3d->viewinv); - Mat3MulVecfl(mat, upvec); - VecAddf(rv3d->ofs, rv3d->ofs, upvec); + copy_m3_m4(mat, rv3d->viewinv); + mul_m3_v3(mat, upvec); + add_v3_v3v3(rv3d->ofs, rv3d->ofs, upvec); } /*---------------------------------------------------- @@ -2348,8 +2378,8 @@ void viewmoveNDOF(Scene *scene, ARegion *ar, View3D *v3d, int mode) d = 1.0f; /* if (ob) { - VecSubf(diff, obofs, rv3d->ofs); - d = VecLength(diff); + sub_v3_v3v3(diff, obofs, rv3d->ofs); + d = len_v3(diff); } */ @@ -2364,7 +2394,7 @@ void viewmoveNDOF(Scene *scene, ARegion *ar, View3D *v3d, int mode) dvec[0] = curareaX * rv3d->persinv[0][0] + curareaY * rv3d->persinv[1][0]; dvec[1] = curareaX * rv3d->persinv[0][1] + curareaY * rv3d->persinv[1][1]; dvec[2] = curareaX * rv3d->persinv[0][2] + curareaY * rv3d->persinv[1][2]; - VecAddf(rv3d->ofs, rv3d->ofs, dvec); + add_v3_v3v3(rv3d->ofs, rv3d->ofs, dvec); /*---------------------------------------------------- * ndof device dolly @@ -2389,14 +2419,14 @@ void viewmoveNDOF(Scene *scene, ARegion *ar, View3D *v3d, int mode) */ /* Get the 3x3 matrix and its inverse from the quaternion */ - QuatToMat3(rv3d->viewquat, m); - Mat3Inv(m_inv,m); + quat_to_mat3( m,rv3d->viewquat); + invert_m3_m3(m_inv,m); /* Determine the direction of the x vector (for rotating up and down) */ /* This can likely be compuated directly from the quaternion. */ - Mat3MulVecfl(m_inv,xvec); - Mat3MulVecfl(m_inv,yvec); - Mat3MulVecfl(m_inv,zvec); + mul_m3_v3(m_inv,xvec); + mul_m3_v3(m_inv,yvec); + mul_m3_v3(m_inv,zvec); /* Perform the up/down rotation */ phi = sbadjust * rsens * /*0.5f * */ fval[3]; /* spin vertically half as fast as horizontally */ @@ -2405,13 +2435,13 @@ void viewmoveNDOF(Scene *scene, ARegion *ar, View3D *v3d, int mode) q1[1] = si * xvec[0]; q1[2] = si * xvec[1]; q1[3] = si * xvec[2]; - QuatMul(rv3d->viewquat, rv3d->viewquat, q1); + mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, q1); if (use_sel) { - QuatConj(q1); /* conj == inv for unit quat */ - VecSubf(rv3d->ofs, rv3d->ofs, obofs); - QuatMulVecf(q1, rv3d->ofs); - VecAddf(rv3d->ofs, rv3d->ofs, obofs); + conjugate_qt(q1); /* conj == inv for unit quat */ + sub_v3_v3v3(rv3d->ofs, rv3d->ofs, obofs); + mul_qt_v3(q1, rv3d->ofs); + add_v3_v3v3(rv3d->ofs, rv3d->ofs, obofs); } /* Perform the orbital rotation */ @@ -2430,13 +2460,13 @@ void viewmoveNDOF(Scene *scene, ARegion *ar, View3D *v3d, int mode) q1[0] = cos(phi); q1[1] = q1[2] = 0.0; q1[3] = sin(phi); - QuatMul(rv3d->viewquat, rv3d->viewquat, q1); + mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, q1); if (use_sel) { - QuatConj(q1); - VecSubf(rv3d->ofs, rv3d->ofs, obofs); - QuatMulVecf(q1, rv3d->ofs); - VecAddf(rv3d->ofs, rv3d->ofs, obofs); + conjugate_qt(q1); + sub_v3_v3v3(rv3d->ofs, rv3d->ofs, obofs); + mul_qt_v3(q1, rv3d->ofs); + add_v3_v3v3(rv3d->ofs, rv3d->ofs, obofs); } /*---------------------------------------------------- diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index a953afde0d5..1ee78b55ee5 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -85,7 +85,7 @@ #include "BIF_gl.h" #include "BIF_glutil.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_editVert.h" @@ -635,7 +635,7 @@ void do_view3d_transform_moveaxismenu(bContext *C, void *arg, int event) #if 0 float mat[3][3]; - Mat3One(mat); + unit_m3(mat); switch(event) { @@ -702,7 +702,7 @@ void do_view3d_transform_rotateaxismenu(bContext *C, void *arg, int event) #if 0 float mat[3][3]; - Mat3One(mat); + unit_m3(mat); switch(event) { @@ -769,7 +769,7 @@ void do_view3d_transform_scaleaxismenu(bContext *C, void *arg, int event) #if 0 float mat[3][3]; - Mat3One(mat); + unit_m3(mat); switch(event) { @@ -1778,6 +1778,7 @@ static void do_view3d_header_buttons(bContext *C, void *arg, int event) WM_operator_properties_free(&props_ptr); break; case B_AROUND: + WM_event_add_notifier(C, NC_SPACE|ND_SPACE_VIEW3D, 0); // XXX handle_view3d_around(); /* copies to other 3d windows */ break; diff --git a/source/blender/editors/space_view3d/view3d_ops.c b/source/blender/editors/space_view3d/view3d_ops.c index 13324e61999..b8945c849ae 100644 --- a/source/blender/editors/space_view3d/view3d_ops.c +++ b/source/blender/editors/space_view3d/view3d_ops.c @@ -39,7 +39,7 @@ #include "DNA_view3d_types.h" #include "DNA_windowmanager_types.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BKE_context.h" @@ -155,6 +155,39 @@ void view3d_keymap(wmKeyConfig *keyconf) RNA_enum_set(WM_keymap_add_item(keymap, "VIEW3D_OT_view_pan", PAD6, KM_PRESS, KM_CTRL, 0)->ptr, "type", V3D_VIEW_PANRIGHT); RNA_enum_set(WM_keymap_add_item(keymap, "VIEW3D_OT_view_pan", PAD8, KM_PRESS, KM_CTRL, 0)->ptr, "type", V3D_VIEW_PANUP); + /* active aligned, replaces '*' key in 2.4x */ + km= WM_keymap_add_item(keymap, "VIEW3D_OT_viewnumpad", PAD1, KM_PRESS, KM_SHIFT, 0); + RNA_enum_set(km->ptr, "type", RV3D_VIEW_FRONT); + RNA_boolean_set(km->ptr, "align_active", TRUE); + km= WM_keymap_add_item(keymap, "VIEW3D_OT_viewnumpad", PAD3, KM_PRESS, KM_SHIFT, 0); + RNA_enum_set(km->ptr, "type", RV3D_VIEW_RIGHT); + RNA_boolean_set(km->ptr, "align_active", TRUE); + km= WM_keymap_add_item(keymap, "VIEW3D_OT_viewnumpad", PAD7, KM_PRESS, KM_SHIFT, 0); + RNA_enum_set(km->ptr, "type", RV3D_VIEW_TOP); + RNA_boolean_set(km->ptr, "align_active", TRUE); + km= WM_keymap_add_item(keymap, "VIEW3D_OT_viewnumpad", PAD1, KM_PRESS, KM_SHIFT|KM_CTRL, 0); + RNA_enum_set(km->ptr, "type", RV3D_VIEW_BACK); + RNA_boolean_set(km->ptr, "align_active", TRUE); + km= WM_keymap_add_item(keymap, "VIEW3D_OT_viewnumpad", PAD3, KM_PRESS, KM_SHIFT|KM_CTRL, 0); + RNA_enum_set(km->ptr, "type", RV3D_VIEW_LEFT); + RNA_boolean_set(km->ptr, "align_active", TRUE); + km= WM_keymap_add_item(keymap, "VIEW3D_OT_viewnumpad", PAD7, KM_PRESS, KM_SHIFT|KM_CTRL, 0); + RNA_enum_set(km->ptr, "type", RV3D_VIEW_BOTTOM); + RNA_boolean_set(km->ptr, "align_active", TRUE); + + + RNA_enum_set(WM_keymap_add_item(keymap, "VIEW3D_OT_view_orbit", PAD2, KM_PRESS, 0, 0)->ptr, "type", V3D_VIEW_STEPDOWN); + RNA_enum_set(WM_keymap_add_item(keymap, "VIEW3D_OT_viewnumpad", PAD3, KM_PRESS, 0, 0)->ptr, "type", RV3D_VIEW_RIGHT); + RNA_enum_set(WM_keymap_add_item(keymap, "VIEW3D_OT_view_orbit", PAD4, KM_PRESS, 0, 0)->ptr, "type", V3D_VIEW_STEPLEFT); + WM_keymap_add_item(keymap, "VIEW3D_OT_view_persportho", PAD5, KM_PRESS, 0, 0); + + RNA_enum_set(WM_keymap_add_item(keymap, "VIEW3D_OT_view_orbit", PAD6, KM_PRESS, 0, 0)->ptr, "type", V3D_VIEW_STEPRIGHT); + RNA_enum_set(WM_keymap_add_item(keymap, "VIEW3D_OT_viewnumpad", PAD7, KM_PRESS, 0, 0)->ptr, "type", RV3D_VIEW_TOP); + RNA_enum_set(WM_keymap_add_item(keymap, "VIEW3D_OT_view_orbit", PAD8, KM_PRESS, 0, 0)->ptr, "type", V3D_VIEW_STEPUP); + RNA_enum_set(WM_keymap_add_item(keymap, "VIEW3D_OT_viewnumpad", PAD1, KM_PRESS, KM_CTRL, 0)->ptr, "type", RV3D_VIEW_BACK); + RNA_enum_set(WM_keymap_add_item(keymap, "VIEW3D_OT_viewnumpad", PAD3, KM_PRESS, KM_CTRL, 0)->ptr, "type", RV3D_VIEW_LEFT); + RNA_enum_set(WM_keymap_add_item(keymap, "VIEW3D_OT_viewnumpad", PAD7, KM_PRESS, KM_CTRL, 0)->ptr, "type", RV3D_VIEW_BOTTOM); + WM_keymap_add_item(keymap, "VIEW3D_OT_localview", PADSLASHKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "VIEW3D_OT_game_start", PKEY, KM_PRESS, 0, 0); diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index 1f7d50e00ed..51bda2b7141 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -49,7 +49,7 @@ #include "MEM_guardedalloc.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_editVert.h" #include "BLI_rand.h" @@ -120,7 +120,7 @@ void view3d_get_view_aligned_coordinate(ViewContext *vc, float *fp, short mval[2 if(mval[0]!=IS_CLIPPED) { window_to_3d_delta(vc->ar, dvec, mval[0]-mx, mval[1]-my); - VecSubf(fp, fp, dvec); + sub_v3_v3v3(fp, fp, dvec); } } @@ -129,7 +129,7 @@ void view3d_get_transformation(ARegion *ar, RegionView3D *rv3d, Object *ob, bglM float cpy[4][4]; int i, j; - Mat4MulMat4(cpy, ob->obmat, rv3d->viewmat); + mul_m4_m4m4(cpy, ob->obmat, rv3d->viewmat); for(i = 0; i < 4; ++i) { for(j = 0; j < 4; ++j) { @@ -326,9 +326,9 @@ int lasso_inside_edge(short mcords[][2], short moves, int x0, int y0, int x1, in /* no points in lasso, so we have to intersect with lasso edge */ - if( IsectLL2Ds(mcords[0], mcords[moves-1], v1, v2) > 0) return 1; + if( isect_line_line_v2_short(mcords[0], mcords[moves-1], v1, v2) > 0) return 1; for(a=0; a<moves-1; a++) { - if( IsectLL2Ds(mcords[a], mcords[a+1], v1, v2) > 0) return 1; + if( isect_line_line_v2_short(mcords[a], mcords[a+1], v1, v2) > 0) return 1; } return 0; @@ -349,15 +349,22 @@ static void do_lasso_select_pose(ViewContext *vc, short mcords[][2], short moves for(pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { VECCOPY(vec, pchan->pose_head); - Mat4MulVecfl(ob->obmat, vec); + mul_m4_v3(ob->obmat, vec); project_short(vc->ar, vec, sco1); VECCOPY(vec, pchan->pose_tail); - Mat4MulVecfl(ob->obmat, vec); + mul_m4_v3(ob->obmat, vec); project_short(vc->ar, vec, sco2); if(lasso_inside_edge(mcords, moves, sco1[0], sco1[1], sco2[0], sco2[1])) { if(select) pchan->bone->flag |= BONE_SELECTED; - else pchan->bone->flag &= ~(BONE_ACTIVE|BONE_SELECTED); + else pchan->bone->flag &= ~BONE_SELECTED; + } + } + + { + bArmature *arm= ob->data; + if(arm->act_bone && (arm->act_bone->flag & BONE_SELECTED)==0) { + arm->act_bone= NULL; } } } @@ -618,10 +625,10 @@ static void do_lasso_select_armature(ViewContext *vc, short mcords[][2], short m for (ebone= arm->edbo->first; ebone; ebone=ebone->next) { VECCOPY(vec, ebone->head); - Mat4MulVecfl(vc->obedit->obmat, vec); + mul_m4_v3(vc->obedit->obmat, vec); project_short(vc->ar, vec, sco1); VECCOPY(vec, ebone->tail); - Mat4MulVecfl(vc->obedit->obmat, vec); + mul_m4_v3(vc->obedit->obmat, vec); project_short(vc->ar, vec, sco2); didpoint= 0; @@ -638,9 +645,11 @@ static void do_lasso_select_armature(ViewContext *vc, short mcords[][2], short m /* if one of points selected, we skip the bone itself */ if(didpoint==0 && lasso_inside_edge(mcords, moves, sco1[0], sco1[1], sco2[0], sco2[1])) { if(select) ebone->flag |= BONE_TIPSEL|BONE_ROOTSEL|BONE_SELECTED; - else ebone->flag &= ~(BONE_ACTIVE|BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL); + else ebone->flag &= ~(BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL); } } + + ED_armature_validate_active(arm); } static void do_lasso_select_facemode(ViewContext *vc, short mcords[][2], short moves, short select) @@ -1218,7 +1227,7 @@ int edge_inside_circle(short centx, short centy, short rad, short x1, short y1, v2[0]= x2; v2[1]= y2; - if( PdistVL2Dfl(v3, v1, v2) < (float)rad ) return 1; + if( dist_to_line_segment_v2(v3, v1, v2) < (float)rad ) return 1; return 0; } @@ -1373,38 +1382,38 @@ static int view3d_borderselect_exec(bContext *C, wmOperator *op) MetaElem *ml; unsigned int buffer[4*MAXPICKBUF]; int a, index; - short hits, val; + short hits, selecting; view3d_operator_needs_opengl(C); /* setup view context for argument to callbacks */ view3d_set_viewcontext(C, &vc); - val= RNA_int_get(op->ptr, "event_type"); + selecting= (RNA_int_get(op->ptr, "gesture_mode")==GESTURE_MODAL_SELECT); rect.xmin= RNA_int_get(op->ptr, "xmin"); rect.ymin= RNA_int_get(op->ptr, "ymin"); rect.xmax= RNA_int_get(op->ptr, "xmax"); rect.ymax= RNA_int_get(op->ptr, "ymax"); if(obedit==NULL && (paint_facesel_test(OBACT))) { - face_borderselect(C, obact, &rect, (val==LEFTMOUSE)); + face_borderselect(C, obact, &rect, selecting); return OPERATOR_FINISHED; } else if(obedit==NULL && (obact && obact->mode & OB_MODE_PARTICLE_EDIT)) { - return PE_border_select(C, &rect, (val==LEFTMOUSE)); + return PE_border_select(C, &rect, selecting); } if(obedit) { if(obedit->type==OB_MESH) { Mesh *me= obedit->data; vc.em= me->edit_mesh; - do_mesh_box_select(&vc, &rect, (val==LEFTMOUSE)); + do_mesh_box_select(&vc, &rect, selecting); // if (EM_texFaceCheck()) WM_event_add_notifier(C, NC_GEOM|ND_SELECT, obedit->data); } else if(ELEM(obedit->type, OB_CURVE, OB_SURF)) { - do_nurbs_box_select(&vc, &rect, val==LEFTMOUSE); + do_nurbs_box_select(&vc, &rect, selecting); } else if(obedit->type==OB_MBALL) { MetaBall *mb = (MetaBall*)obedit->data; @@ -1416,14 +1425,14 @@ static int view3d_borderselect_exec(bContext *C, wmOperator *op) for(a=0; a<hits; a++) { if(ml->selcol1==buffer[ (4 * a) + 3 ]) { ml->flag |= MB_SCALE_RAD; - if(val==LEFTMOUSE) ml->flag |= SELECT; - else ml->flag &= ~SELECT; + if(selecting) ml->flag |= SELECT; + else ml->flag &= ~SELECT; break; } if(ml->selcol2==buffer[ (4 * a) + 3 ]) { ml->flag &= ~MB_SCALE_RAD; - if(val==LEFTMOUSE) ml->flag |= SELECT; - else ml->flag &= ~SELECT; + if(selecting) ml->flag |= SELECT; + else ml->flag &= ~SELECT; break; } } @@ -1447,14 +1456,14 @@ static int view3d_borderselect_exec(bContext *C, wmOperator *op) ebone = BLI_findlink(arm->edbo, index & ~(BONESEL_ANY)); if (index & BONESEL_TIP) { ebone->flag |= BONE_DONE; - if (val==LEFTMOUSE) ebone->flag |= BONE_TIPSEL; - else ebone->flag &= ~BONE_TIPSEL; + if (selecting) ebone->flag |= BONE_TIPSEL; + else ebone->flag &= ~BONE_TIPSEL; } if (index & BONESEL_ROOT) { ebone->flag |= BONE_DONE; - if (val==LEFTMOUSE) ebone->flag |= BONE_ROOTSEL; - else ebone->flag &= ~BONE_ROOTSEL; + if (selecting) ebone->flag |= BONE_ROOTSEL; + else ebone->flag &= ~BONE_ROOTSEL; } } } @@ -1474,7 +1483,7 @@ static int view3d_borderselect_exec(bContext *C, wmOperator *op) ebone = BLI_findlink(arm->edbo, index & ~(BONESEL_ANY)); if (index & BONESEL_BONE) { if(!(ebone->flag & BONE_DONE)) { - if (val==LEFTMOUSE) + if (selecting) ebone->flag |= (BONE_ROOTSEL|BONE_TIPSEL|BONE_SELECTED); else ebone->flag &= ~(BONE_ROOTSEL|BONE_TIPSEL|BONE_SELECTED); @@ -1486,7 +1495,7 @@ static int view3d_borderselect_exec(bContext *C, wmOperator *op) ED_armature_sync_selection(arm->edbo); } else if(obedit->type==OB_LATTICE) { - do_lattice_box_select(&vc, &rect, val==LEFTMOUSE); + do_lattice_box_select(&vc, &rect, selecting); } } else { /* no editmode, unified for bones and objects */ @@ -1494,7 +1503,6 @@ static int view3d_borderselect_exec(bContext *C, wmOperator *op) Object *ob= OBACT; unsigned int *vbuffer=NULL; /* selection buffer */ unsigned int *col; /* color in buffer */ - short selecting = 0; int bone_only; int totobj= MAXPICKBUF; // XXX solve later @@ -1503,9 +1511,6 @@ static int view3d_borderselect_exec(bContext *C, wmOperator *op) else bone_only= 0; - if (val==LEFTMOUSE) - selecting = 1; - /* selection buffer now has bones potentially too, so we add MAXPICKBUF */ vbuffer = MEM_mallocN(4 * (totobj+MAXPICKBUF) * sizeof(unsigned int), "selection buffer"); hits= view3d_opengl_select(&vc, vbuffer, 4*(totobj+MAXPICKBUF), &rect); @@ -1538,8 +1543,12 @@ static int view3d_borderselect_exec(bContext *C, wmOperator *op) // XXX select_actionchannel_by_name(base->object->action, bone->name, 1); } else { - bone->flag &= ~(BONE_ACTIVE|BONE_SELECTED); + bArmature *arm= base->object->data; + bone->flag &= ~BONE_SELECTED; // XXX select_actionchannel_by_name(base->object->action, bone->name, 0); + if(arm->act_bone==bone) + arm->act_bone= NULL; + } } } @@ -1589,13 +1598,7 @@ void VIEW3D_OT_select_border(wmOperatorType *ot) ot->flag= OPTYPE_UNDO; /* rna */ - RNA_def_int(ot->srna, "event_type", 0, INT_MIN, INT_MAX, "Event Type", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "xmin", 0, INT_MIN, INT_MAX, "X Min", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "xmax", 0, INT_MIN, INT_MAX, "X Max", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "ymin", 0, INT_MIN, INT_MAX, "Y Min", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "ymax", 0, INT_MIN, INT_MAX, "Y Max", "", INT_MIN, INT_MAX); - - RNA_def_boolean(ot->srna, "extend", 0, "Extend", "Extend selection instead of deselecting everything first."); + WM_operator_properties_gesture_border(ot, TRUE); } /* ****** Mouse Select ****** */ @@ -1810,6 +1813,81 @@ static void lattice_circle_select(ViewContext *vc, int selecting, short *mval, f lattice_foreachScreenVert(vc, latticecurve_circle_doSelect, &data); } + +static short armature_circle_doSelectJoint(void *userData, EditBone *ebone, int x, int y, short head) +{ + struct {ViewContext *vc; short select, mval[2]; float radius; } *data = userData; + int mx = x - data->mval[0], my = y - data->mval[1]; + float r = sqrt(mx*mx + my*my); + + if (r <= data->radius) { + if (head) { + if (data->select) + ebone->flag |= BONE_ROOTSEL; + else + ebone->flag &= ~BONE_ROOTSEL; + } + else { + if (data->select) + ebone->flag |= BONE_TIPSEL; + else + ebone->flag &= ~BONE_TIPSEL; + } + return 1; + } + return 0; +} +static void armature_circle_select(ViewContext *vc, int selecting, short *mval, float rad) +{ + struct {ViewContext *vc; short select, mval[2]; float radius; } data; + bArmature *arm= vc->obedit->data; + EditBone *ebone; + + /* set vc->edit data */ + data.select = selecting; + data.mval[0] = mval[0]; + data.mval[1] = mval[1]; + data.radius = rad; + + ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */ + + /* check each EditBone... */ + // TODO: could be optimised at some point + for (ebone= arm->edbo->first; ebone; ebone=ebone->next) { + short sco1[2], sco2[2], didpoint=0; + float vec[3]; + + /* project head location to screenspace */ + VECCOPY(vec, ebone->head); + mul_m4_v3(vc->obedit->obmat, vec); + project_short(vc->ar, vec, sco1); + + /* project tail location to screenspace */ + VECCOPY(vec, ebone->tail); + mul_m4_v3(vc->obedit->obmat, vec); + project_short(vc->ar, vec, sco2); + + /* check if the head and/or tail is in the circle + * - the call to check also does the selection already + */ + if (armature_circle_doSelectJoint(&data, ebone, sco1[0], sco1[1], 1)) + didpoint= 1; + if (armature_circle_doSelectJoint(&data, ebone, sco2[0], sco2[1], 0)) + didpoint= 1; + + /* only if the endpoints didn't get selected, deal with the middle of the bone too */ + // XXX should we just do this always? + if ( (didpoint==0) && edge_inside_circle(mval[0], mval[1], rad, sco1[0], sco1[1], sco2[0], sco2[1]) ) { + if (selecting) + ebone->flag |= BONE_TIPSEL|BONE_ROOTSEL|BONE_SELECTED; + else + ebone->flag &= ~(BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL); + } + } + + ED_armature_validate_active(arm); +} + /** Callbacks for circle selection in Editmode */ static void obedit_circle_select(ViewContext *vc, short selecting, short *mval, float rad) @@ -1825,6 +1903,9 @@ static void obedit_circle_select(ViewContext *vc, short selecting, short *mval, case OB_LATTICE: lattice_circle_select(vc, selecting, mval, rad); break; + case OB_ARMATURE: + armature_circle_select(vc, selecting, mval, rad); + break; default: return; } @@ -1841,17 +1922,20 @@ static int view3d_circle_select_exec(bContext *C, wmOperator *op) int x= RNA_int_get(op->ptr, "x"); int y= RNA_int_get(op->ptr, "y"); int radius= RNA_int_get(op->ptr, "radius"); + int gesture_mode= RNA_int_get(op->ptr, "gesture_mode"); + int selecting; + selecting= (gesture_mode==GESTURE_MODAL_SELECT); + if(CTX_data_edit_object(C) || (obact && obact->mode & OB_MODE_PARTICLE_EDIT)) { ViewContext vc; - short mval[2], selecting; + short mval[2]; view3d_operator_needs_opengl(C); view3d_set_viewcontext(C, &vc); mval[0]= x; mval[1]= y; - selecting= LEFTMOUSE==RNA_int_get(op->ptr, "event_type"); // XXX solve if(CTX_data_edit_object(C)) { obedit_circle_select(&vc, selecting, mval, (float)radius); @@ -1862,7 +1946,7 @@ static int view3d_circle_select_exec(bContext *C, wmOperator *op) } else { Base *base; - + selecting= selecting?BA_SELECT:BA_DESELECT; for(base= FIRSTBASE; base; base= base->next) { if(base->lay & v3d->lay) { project_short(ar, base->object->obmat[3], &base->sx); @@ -1870,7 +1954,7 @@ static int view3d_circle_select_exec(bContext *C, wmOperator *op) int dx= base->sx-x; int dy= base->sy-y; if( dx*dx + dy*dy < radius*radius) - ED_base_object_select(base, BA_SELECT); + ED_base_object_select(base, selecting); } } } @@ -1898,5 +1982,5 @@ void VIEW3D_OT_select_circle(wmOperatorType *ot) RNA_def_int(ot->srna, "x", 0, INT_MIN, INT_MAX, "X", "", INT_MIN, INT_MAX); RNA_def_int(ot->srna, "y", 0, INT_MIN, INT_MAX, "Y", "", INT_MIN, INT_MAX); RNA_def_int(ot->srna, "radius", 0, INT_MIN, INT_MAX, "Radius", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "event_type", 0, INT_MIN, INT_MAX, "Event Type", "", INT_MIN, INT_MAX); + RNA_def_int(ot->srna, "gesture_mode", 0, INT_MIN, INT_MAX, "Event Type", "", INT_MIN, INT_MAX); } diff --git a/source/blender/editors/space_view3d/view3d_snap.c b/source/blender/editors/space_view3d/view3d_snap.c index 205d3e6df8c..933b12ae679 100644 --- a/source/blender/editors/space_view3d/view3d_snap.c +++ b/source/blender/editors/space_view3d/view3d_snap.c @@ -48,7 +48,7 @@ #include "DNA_view3d_types.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_editVert.h" #include "BLI_linklist.h" @@ -135,8 +135,8 @@ static void special_transvert_update(Scene *scene, Object *obedit) if (tv) { float diffvec[3]; - VecSubf(diffvec, tv->loc, tv->oldloc); - VecAddf(ebo->tail, ebo->tail, diffvec); + sub_v3_v3v3(diffvec, tv->loc, tv->oldloc); + add_v3_v3v3(ebo->tail, ebo->tail, diffvec); a++; if (a<tottrans) tv++; @@ -454,21 +454,21 @@ static int snap_sel_to_grid(bContext *C, wmOperator *op) make_trans_verts(obedit, bmat[0], bmat[1], 0); if(tottrans==0) return OPERATOR_CANCELLED; - Mat3CpyMat4(bmat, obedit->obmat); - Mat3Inv(imat, bmat); + copy_m3_m4(bmat, obedit->obmat); + invert_m3_m3(imat, bmat); tv= transvmain; for(a=0; a<tottrans; a++, tv++) { VECCOPY(vec, tv->loc); - Mat3MulVecfl(bmat, vec); - VecAddf(vec, vec, obedit->obmat[3]); + mul_m3_v3(bmat, vec); + add_v3_v3v3(vec, vec, obedit->obmat[3]); vec[0]= v3d->gridview*floor(.5+ vec[0]/gridf); vec[1]= v3d->gridview*floor(.5+ vec[1]/gridf); vec[2]= v3d->gridview*floor(.5+ vec[2]/gridf); - VecSubf(vec, vec, obedit->obmat[3]); + sub_v3_v3v3(vec, vec, obedit->obmat[3]); - Mat3MulVecfl(imat, vec); + mul_m3_v3(imat, vec); VECCOPY(tv->loc, vec); } @@ -525,8 +525,8 @@ static int snap_sel_to_grid(bContext *C, wmOperator *op) if(ob->parent) { where_is_object(scene, ob); - Mat3Inv(imat, originmat); - Mat3MulVecfl(imat, vec); + invert_m3_m3(imat, originmat); + mul_m3_v3(imat, vec); ob->loc[0]+= vec[0]; ob->loc[1]+= vec[1]; ob->loc[2]+= vec[2]; @@ -586,8 +586,8 @@ static int snap_sel_to_curs(bContext *C, wmOperator *op) make_trans_verts(obedit, bmat[0], bmat[1], 0); if(tottrans==0) return OPERATOR_CANCELLED; - Mat3CpyMat4(bmat, obedit->obmat); - Mat3Inv(imat, bmat); + copy_m3_m4(bmat, obedit->obmat); + invert_m3_m3(imat, bmat); tv= transvmain; for(a=0; a<tottrans; a++, tv++) { @@ -595,7 +595,7 @@ static int snap_sel_to_curs(bContext *C, wmOperator *op) vec[1]= curs[1]-obedit->obmat[3][1]; vec[2]= curs[2]-obedit->obmat[3][2]; - Mat3MulVecfl(imat, vec); + mul_m3_v3(imat, vec); VECCOPY(tv->loc, vec); } @@ -612,9 +612,9 @@ static int snap_sel_to_curs(bContext *C, wmOperator *op) bArmature *arm= ob->data; float cursp[3]; - Mat4Invert(ob->imat, ob->obmat); + invert_m4_m4(ob->imat, ob->obmat); VECCOPY(cursp, curs); - Mat4MulVecfl(ob->imat, cursp); + mul_m4_v3(ob->imat, cursp); for (pchan = ob->pose->chanbase.first; pchan; pchan=pchan->next) { if(pchan->bone->flag & BONE_SELECTED) { @@ -650,8 +650,8 @@ static int snap_sel_to_curs(bContext *C, wmOperator *op) if(ob->parent) { where_is_object(scene, ob); - Mat3Inv(imat, originmat); - Mat3MulVecfl(imat, vec); + invert_m3_m3(imat, originmat); + mul_m3_v3(imat, vec); ob->loc[0]+= vec[0]; ob->loc[1]+= vec[1]; ob->loc[2]+= vec[2]; @@ -749,19 +749,19 @@ static int snap_curs_to_sel(bContext *C, wmOperator *op) make_trans_verts(obedit, bmat[0], bmat[1], 2); if(tottrans==0) return OPERATOR_CANCELLED; - Mat3CpyMat4(bmat, obedit->obmat); + copy_m3_m4(bmat, obedit->obmat); tv= transvmain; for(a=0; a<tottrans; a++, tv++) { VECCOPY(vec, tv->loc); - Mat3MulVecfl(bmat, vec); - VecAddf(vec, vec, obedit->obmat[3]); - VecAddf(centroid, centroid, vec); + mul_m3_v3(bmat, vec); + add_v3_v3v3(vec, vec, obedit->obmat[3]); + add_v3_v3v3(centroid, centroid, vec); DO_MINMAX(vec, min, max); } if(v3d->around==V3D_CENTROID) { - VecMulf(centroid, 1.0/(float)tottrans); + mul_v3_fl(centroid, 1.0/(float)tottrans); VECCOPY(curs, centroid); } else { @@ -782,8 +782,8 @@ static int snap_curs_to_sel(bContext *C, wmOperator *op) if(arm->layer & pchan->bone->layer) { if(pchan->bone->flag & BONE_SELECTED) { VECCOPY(vec, pchan->pose_head); - Mat4MulVecfl(ob->obmat, vec); - VecAddf(centroid, centroid, vec); + mul_m4_v3(ob->obmat, vec); + add_v3_v3v3(centroid, centroid, vec); DO_MINMAX(vec, min, max); count++; } @@ -793,7 +793,7 @@ static int snap_curs_to_sel(bContext *C, wmOperator *op) else { CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) { VECCOPY(vec, ob->obmat[3]); - VecAddf(centroid, centroid, vec); + add_v3_v3v3(centroid, centroid, vec); DO_MINMAX(vec, min, max); count++; } @@ -801,7 +801,7 @@ static int snap_curs_to_sel(bContext *C, wmOperator *op) } if(count) { if(v3d->around==V3D_CENTROID) { - VecMulf(centroid, 1.0/(float)count); + mul_v3_fl(centroid, 1.0/(float)count); VECCOPY(curs, centroid); } else { @@ -854,7 +854,7 @@ static int snap_curs_to_active(bContext *C, wmOperator *op) EM_editselection_center(curs, &ese); } - Mat4MulVecfl(obedit->obmat, curs); + mul_m4_v3(obedit->obmat, curs); } } else { @@ -908,20 +908,20 @@ static int snap_selected_to_center(bContext *C, wmOperator *op) make_trans_verts(obedit, bmat[0], bmat[1], 0); if(tottrans==0) return OPERATOR_CANCELLED; - Mat3CpyMat4(bmat, obedit->obmat); - Mat3Inv(imat, bmat); + copy_m3_m4(bmat, obedit->obmat); + invert_m3_m3(imat, bmat); tv= transvmain; for(a=0; a<tottrans; a++, tv++) { VECCOPY(vec, tv->loc); - Mat3MulVecfl(bmat, vec); - VecAddf(vec, vec, obedit->obmat[3]); - VecAddf(centroid, centroid, vec); + mul_m3_v3(bmat, vec); + add_v3_v3v3(vec, vec, obedit->obmat[3]); + add_v3_v3v3(centroid, centroid, vec); DO_MINMAX(vec, min, max); } if(v3d->around==V3D_CENTROID) { - VecMulf(centroid, 1.0/(float)tottrans); + mul_v3_fl(centroid, 1.0/(float)tottrans); VECCOPY(snaploc, centroid); } else { @@ -944,7 +944,7 @@ static int snap_selected_to_center(bContext *C, wmOperator *op) if(pchan->bone->flag & BONE_SELECTED) { if(pchan->bone->layer & arm->layer) { VECCOPY(vec, pchan->pose_mat[3]); - VecAddf(centroid, centroid, vec); + add_v3_v3v3(centroid, centroid, vec); DO_MINMAX(vec, min, max); count++; } @@ -954,7 +954,7 @@ static int snap_selected_to_center(bContext *C, wmOperator *op) else { /* not armature bones (i.e. objects) */ VECCOPY(vec, ob->obmat[3]); - VecAddf(centroid, centroid, vec); + add_v3_v3v3(centroid, centroid, vec); DO_MINMAX(vec, min, max); count++; } @@ -963,7 +963,7 @@ static int snap_selected_to_center(bContext *C, wmOperator *op) if(count) { if(v3d->around==V3D_CENTROID) { - VecMulf(centroid, 1.0/(float)count); + mul_v3_fl(centroid, 1.0/(float)count); VECCOPY(snaploc, centroid); } else { @@ -982,8 +982,8 @@ static int snap_selected_to_center(bContext *C, wmOperator *op) make_trans_verts(obedit, bmat[0], bmat[1], 0); if(tottrans==0) return OPERATOR_CANCELLED; - Mat3CpyMat4(bmat, obedit->obmat); - Mat3Inv(imat, bmat); + copy_m3_m4(bmat, obedit->obmat); + invert_m3_m3(imat, bmat); tv= transvmain; for(a=0; a<tottrans; a++, tv++) { @@ -991,7 +991,7 @@ static int snap_selected_to_center(bContext *C, wmOperator *op) vec[1]= snaploc[1]-obedit->obmat[3][1]; vec[2]= snaploc[2]-obedit->obmat[3][2]; - Mat3MulVecfl(imat, vec); + mul_m3_v3(imat, vec); VECCOPY(tv->loc, vec); } @@ -1040,8 +1040,8 @@ static int snap_selected_to_center(bContext *C, wmOperator *op) if(ob->parent) { where_is_object(scene, ob); - Mat3Inv(imat, originmat); - Mat3MulVecfl(imat, vec); + invert_m3_m3(imat, originmat); + mul_m3_v3(imat, vec); ob->loc[0]+= vec[0]; ob->loc[1]+= vec[1]; ob->loc[2]+= vec[2]; @@ -1093,14 +1093,14 @@ int minmax_verts(Object *obedit, float *min, float *max) if(tottrans==0) return 0; - Mat3CpyMat4(bmat, obedit->obmat); + copy_m3_m4(bmat, obedit->obmat); tv= transvmain; for(a=0; a<tottrans; a++, tv++) { VECCOPY(vec, tv->loc); - Mat3MulVecfl(bmat, vec); - VecAddf(vec, vec, obedit->obmat[3]); - VecAddf(centroid, centroid, vec); + mul_m3_v3(bmat, vec); + add_v3_v3v3(vec, vec, obedit->obmat[3]); + add_v3_v3v3(centroid, centroid, vec); DO_MINMAX(vec, min, max); } diff --git a/source/blender/editors/space_view3d/view3d_toolbar.c b/source/blender/editors/space_view3d/view3d_toolbar.c index e1c6f70bde0..3249f26aff6 100644 --- a/source/blender/editors/space_view3d/view3d_toolbar.c +++ b/source/blender/editors/space_view3d/view3d_toolbar.c @@ -51,7 +51,7 @@ #include "MEM_guardedalloc.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_editVert.h" #include "BLI_rand.h" diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 3b210bc718d..cf34cf74296 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -45,7 +45,7 @@ #include "MEM_guardedalloc.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_editVert.h" #include "BLI_rand.h" @@ -161,26 +161,26 @@ static void view_settings_from_ob(Object *ob, float *ofs, float *quat, float *di /* Offset */ if (ofs) { VECCOPY(ofs, ob->obmat[3]); - VecMulf(ofs, -1.0f); /*flip the vector*/ + mul_v3_fl(ofs, -1.0f); /*flip the vector*/ } /* Quat */ if (quat) { - Mat4CpyMat4(bmat, ob->obmat); - Mat4Ortho(bmat); - Mat4Invert(imat, bmat); - Mat3CpyMat4(tmat, imat); - Mat3ToQuat(tmat, quat); + copy_m4_m4(bmat, ob->obmat); + normalize_m4(bmat); + invert_m4_m4(imat, bmat); + copy_m3_m4(tmat, imat); + mat3_to_quat( quat,tmat); } if (dist) { float vec[3]; - Mat3CpyMat4(tmat, ob->obmat); + copy_m3_m4(tmat, ob->obmat); vec[0]= vec[1] = 0.0; vec[2]= -(*dist); - Mat3MulVecfl(tmat, vec); - VecSubf(ofs, ofs, vec); + mul_m3_v3(tmat, vec); + sub_v3_v3v3(ofs, ofs, vec); } /* Lens */ @@ -263,10 +263,10 @@ void smooth_view(bContext *C, Object *oldcamera, Object *camera, float *ofs, flo VECCOPY(vec1, sms.new_quat); VECCOPY(vec2, sms.orig_quat); - Normalize(vec1); - Normalize(vec2); + normalize_v3(vec1); + normalize_v3(vec2); /* scale the time allowed by the rotation */ - sms.time_allowed *= NormalizedVecAngle2(vec1, vec2)/(M_PI/2); + sms.time_allowed *= angle_normalized_v3v3(vec1, vec2)/(M_PI/2); } /* original values */ @@ -361,7 +361,7 @@ static int view3d_smoothview_invoke(bContext *C, wmOperator *op, wmEvent *event) for (i=0; i<3; i++) rv3d->ofs[i] = sms->new_ofs[i]*step + sms->orig_ofs[i]*step_inv; - QuatInterpol(rv3d->viewquat, sms->orig_quat, sms->new_quat, step); + interp_qt_qtqt(rv3d->viewquat, sms->orig_quat, sms->new_quat, step); rv3d->dist = sms->new_dist*step + sms->orig_dist*step_inv; v3d->lens = sms->new_lens*step + sms->orig_lens*step_inv; @@ -395,10 +395,10 @@ static void setcameratoview3d(View3D *v3d, RegionView3D *rv3d, Object *ob) dvec[2]= rv3d->dist*rv3d->viewinv[2][2]; VECCOPY(ob->loc, dvec); - VecSubf(ob->loc, ob->loc, rv3d->ofs); + sub_v3_v3v3(ob->loc, ob->loc, rv3d->ofs); rv3d->viewquat[0]= -rv3d->viewquat[0]; - QuatToEul(rv3d->viewquat, ob->rot); + quat_to_eul( ob->rot,rv3d->viewquat); rv3d->viewquat[0]= -rv3d->viewquat[0]; ob->recalc= OB_RECALC_OB; @@ -511,8 +511,7 @@ void view3d_calculate_clipping(BoundBox *bb, float planes[4][4], bglMats *mats, /* then plane equations */ for(val=0; val<4; val++) { - CalcNormFloat(bb->vec[val], bb->vec[val==3?0:val+1], bb->vec[val+4], - planes[val]); + normal_tri_v3(planes[val], bb->vec[val], bb->vec[val==3?0:val+1], bb->vec[val+4]); planes[val][3]= - planes[val][0]*bb->vec[val][0] - planes[val][1]*bb->vec[val][1] @@ -532,12 +531,12 @@ void viewline(ARegion *ar, View3D *v3d, float mval[2], float ray_start[3], float vec[2]= -1.0f; vec[3]= 1.0f; - Mat4MulVec4fl(rv3d->persinv, vec); - VecMulf(vec, 1.0f / vec[3]); + mul_m4_v4(rv3d->persinv, vec); + mul_v3_fl(vec, 1.0f / vec[3]); - VECCOPY(ray_start, rv3d->viewinv[3]); - VECSUB(vec, vec, ray_start); - Normalize(vec); + copy_v3_v3(ray_start, rv3d->viewinv[3]); + sub_v3_v3v3(vec, vec, ray_start); + normalize_v3(vec); VECADDFAC(ray_start, rv3d->viewinv[3], vec, v3d->near); VECADDFAC(ray_end, rv3d->viewinv[3], vec, v3d->far); @@ -548,7 +547,7 @@ void viewline(ARegion *ar, View3D *v3d, float mval[2], float ray_start[3], float vec[2] = 0.0f; vec[3] = 1.0f; - Mat4MulVec4fl(rv3d->persinv, vec); + mul_m4_v4(rv3d->persinv, vec); VECADDFAC(ray_start, vec, rv3d->viewinv[2], 1000.0f); VECADDFAC(ray_end, vec, rv3d->viewinv[2], -1000.0f); @@ -561,8 +560,8 @@ void viewray(ARegion *ar, View3D *v3d, float mval[2], float ray_start[3], float float ray_end[3]; viewline(ar, v3d, mval, ray_start, ray_end); - VecSubf(ray_normal, ray_end, ray_start); - Normalize(ray_normal); + sub_v3_v3v3(ray_normal, ray_end, ray_start); + normalize_v3(ray_normal); } @@ -640,8 +639,8 @@ void view3d_get_object_project_mat(RegionView3D *rv3d, Object *ob, float pmat[4] { float vmat[4][4]; - Mat4MulMat4(vmat, ob->obmat, rv3d->viewmat); - Mat4MulMat4(pmat, vmat, rv3d->winmat); + mul_m4_m4m4(vmat, ob->obmat, rv3d->viewmat); + mul_m4_m4m4(pmat, vmat, rv3d->winmat); } /* Uses window coordinates (x,y) and depth component z to find a point in @@ -666,7 +665,7 @@ void view3d_project_float(ARegion *ar, float *vec, float *adr, float mat[4][4]) VECCOPY(vec4, vec); vec4[3]= 1.0; - Mat4MulVec4fl(mat, vec4); + mul_m4_v4(mat, vec4); if( vec4[3]>FLT_EPSILON ) { adr[0] = (float)(ar->winx/2.0f)+(ar->winx/2.0f)*vec4[0]/vec4[3]; @@ -687,12 +686,12 @@ int boundbox_clip(RegionView3D *rv3d, float obmat[][4], BoundBox *bb) if(bb==NULL) return 1; if(bb->flag & OB_BB_DISABLED) return 1; - Mat4MulMat4(mat, obmat, rv3d->persmat); + mul_m4_m4m4(mat, obmat, rv3d->persmat); for(a=0; a<8; a++) { VECCOPY(vec, bb->vec[a]); vec[3]= 1.0; - Mat4MulVec4fl(mat, vec); + mul_m4_v4(mat, vec); max= vec[3]; min= -vec[3]; @@ -725,7 +724,7 @@ void project_short(ARegion *ar, float *vec, short *adr) /* clips */ VECCOPY(vec4, vec); vec4[3]= 1.0; - Mat4MulVec4fl(rv3d->persmat, vec4); + mul_m4_v4(rv3d->persmat, vec4); if( vec4[3]>BL_NEAR_CLIP ) { /* 0.001 is the NEAR clipping cutoff for picking */ fx= (ar->winx/2)*(1 + vec4[0]/vec4[3]); @@ -751,7 +750,7 @@ void project_int(ARegion *ar, float *vec, int *adr) VECCOPY(vec4, vec); vec4[3]= 1.0; - Mat4MulVec4fl(rv3d->persmat, vec4); + mul_m4_v4(rv3d->persmat, vec4); if( vec4[3]>BL_NEAR_CLIP ) { /* 0.001 is the NEAR clipping cutoff for picking */ fx= (ar->winx/2)*(1 + vec4[0]/vec4[3]); @@ -775,7 +774,7 @@ void project_int_noclip(ARegion *ar, float *vec, int *adr) VECCOPY(vec4, vec); vec4[3]= 1.0; - Mat4MulVec4fl(rv3d->persmat, vec4); + mul_m4_v4(rv3d->persmat, vec4); if( fabs(vec4[3]) > BL_NEAR_CLIP ) { fx = (ar->winx/2)*(1 + vec4[0]/vec4[3]); @@ -800,7 +799,7 @@ void project_short_noclip(ARegion *ar, float *vec, short *adr) VECCOPY(vec4, vec); vec4[3]= 1.0; - Mat4MulVec4fl(rv3d->persmat, vec4); + mul_m4_v4(rv3d->persmat, vec4); if( vec4[3]>BL_NEAR_CLIP ) { /* 0.001 is the NEAR clipping cutoff for picking */ fx= (ar->winx/2)*(1 + vec4[0]/vec4[3]); @@ -826,7 +825,7 @@ void project_float(ARegion *ar, float *vec, float *adr) VECCOPY(vec4, vec); vec4[3]= 1.0; - Mat4MulVec4fl(rv3d->persmat, vec4); + mul_m4_v4(rv3d->persmat, vec4); if( vec4[3]>BL_NEAR_CLIP ) { adr[0] = (float)(ar->winx/2.0)+(ar->winx/2.0)*vec4[0]/vec4[3]; @@ -842,7 +841,7 @@ void project_float_noclip(ARegion *ar, float *vec, float *adr) VECCOPY(vec4, vec); vec4[3]= 1.0; - Mat4MulVec4fl(rv3d->persmat, vec4); + mul_m4_v4(rv3d->persmat, vec4); if( fabs(vec4[3]) > BL_NEAR_CLIP ) { adr[0] = (float)(ar->winx/2.0)+(ar->winx/2.0)*vec4[0]/vec4[3]; @@ -1040,12 +1039,12 @@ static void obmat_to_viewmat(View3D *v3d, RegionView3D *rv3d, Object *ob, short rv3d->view= 0; /* dont show the grid */ - Mat4CpyMat4(bmat, ob->obmat); - Mat4Ortho(bmat); - Mat4Invert(rv3d->viewmat, bmat); + copy_m4_m4(bmat, ob->obmat); + normalize_m4(bmat); + invert_m4_m4(rv3d->viewmat, bmat); /* view quat calculation, needed for add object */ - Mat3CpyMat4(tmat, rv3d->viewmat); + copy_m3_m4(tmat, rv3d->viewmat); if (smooth) { float new_quat[4]; if (rv3d->persp==RV3D_CAMOB && v3d->camera) { @@ -1057,7 +1056,7 @@ static void obmat_to_viewmat(View3D *v3d, RegionView3D *rv3d, Object *ob, short VECCOPY(orig_ofs, rv3d->ofs); /* Switch from camera view */ - Mat3ToQuat(tmat, new_quat); + mat3_to_quat( new_quat,tmat); rv3d->persp=RV3D_PERSP; rv3d->dist= 0.0; @@ -1068,11 +1067,11 @@ static void obmat_to_viewmat(View3D *v3d, RegionView3D *rv3d, Object *ob, short rv3d->persp=RV3D_CAMOB; /* just to be polite, not needed */ } else { - Mat3ToQuat(tmat, new_quat); + mat3_to_quat( new_quat,tmat); smooth_view(NULL, NULL, NULL, NULL, new_quat, NULL, NULL); // XXX } } else { - Mat3ToQuat(tmat, rv3d->viewquat); + mat3_to_quat( rv3d->viewquat,tmat); } } @@ -1116,7 +1115,7 @@ void setviewmatrixview3d(Scene *scene, View3D *v3d, RegionView3D *rv3d) obmat_to_viewmat(v3d, rv3d, v3d->camera, 0); } else { - QuatToMat4(rv3d->viewquat, rv3d->viewmat); + quat_to_mat4( rv3d->viewmat,rv3d->viewquat); rv3d->viewmat[3][2]-= rv3d->dist; } } @@ -1125,7 +1124,7 @@ void setviewmatrixview3d(Scene *scene, View3D *v3d, RegionView3D *rv3d) if(rv3d->viewlock) view3d_viewlock(rv3d); - QuatToMat4(rv3d->viewquat, rv3d->viewmat); + quat_to_mat4( rv3d->viewmat,rv3d->viewquat); if(rv3d->persp==RV3D_PERSP) rv3d->viewmat[3][2]-= rv3d->dist; if(v3d->ob_centre) { Object *ob= v3d->ob_centre; @@ -1136,12 +1135,12 @@ void setviewmatrixview3d(Scene *scene, View3D *v3d, RegionView3D *rv3d) bPoseChannel *pchan= get_pose_channel(ob->pose, v3d->ob_centre_bone); if(pchan) { VECCOPY(vec, pchan->pose_mat[3]); - Mat4MulVecfl(ob->obmat, vec); + mul_m4_v3(ob->obmat, vec); } } - i_translate(-vec[0], -vec[1], -vec[2], rv3d->viewmat); + translate_m4( rv3d->viewmat,-vec[0], -vec[1], -vec[2]); } - else i_translate(rv3d->ofs[0], rv3d->ofs[1], rv3d->ofs[2], rv3d->viewmat); + else translate_m4( rv3d->viewmat,rv3d->ofs[0], rv3d->ofs[1], rv3d->ofs[2]); } } @@ -1175,7 +1174,7 @@ short view3d_opengl_select(ViewContext *vc, unsigned int *buffer, unsigned int b } setwinmatrixview3d(ar, v3d, &rect); - Mat4MulMat4(vc->rv3d->persmat, vc->rv3d->viewmat, vc->rv3d->winmat); + mul_m4_m4m4(vc->rv3d->persmat, vc->rv3d->viewmat, vc->rv3d->winmat); if(v3d->drawtype > OB_WIRE) { v3d->zbuf= TRUE; @@ -1225,11 +1224,11 @@ short view3d_opengl_select(ViewContext *vc, unsigned int *buffer, unsigned int b for(dob= lb->first; dob; dob= dob->next) { tbase.object= dob->ob; - Mat4CpyMat4(dob->ob->obmat, dob->mat); + copy_m4_m4(dob->ob->obmat, dob->mat); draw_object(scene, ar, v3d, &tbase, DRAW_PICKING|DRAW_CONSTCOLOR); - Mat4CpyMat4(dob->ob->obmat, dob->omat); + copy_m4_m4(dob->ob->obmat, dob->omat); } free_object_duplilist(lb); } @@ -1245,7 +1244,7 @@ short view3d_opengl_select(ViewContext *vc, unsigned int *buffer, unsigned int b G.f &= ~G_PICKSEL; setwinmatrixview3d(ar, v3d, NULL); - Mat4MulMat4(vc->rv3d->persmat, vc->rv3d->viewmat, vc->rv3d->winmat); + mul_m4_m4m4(vc->rv3d->persmat, vc->rv3d->viewmat, vc->rv3d->winmat); if(v3d->drawtype > OB_WIRE) { v3d->zbuf= 0; @@ -1890,8 +1889,8 @@ int initFlyInfo (bContext *C, FlyInfo *fly, wmOperator *op, wmEvent *event) /* detect weather to start with Z locking */ upvec[0]=1.0f; upvec[1]=0.0f; upvec[2]=0.0f; - Mat3CpyMat4(mat, fly->rv3d->viewinv); - Mat3MulVecfl(mat, upvec); + copy_m3_m4(mat, fly->rv3d->viewinv); + mul_m3_v3(mat, upvec); if (fabs(upvec[2]) < 0.1) fly->zlock = 1; upvec[0]=0; upvec[1]=0; upvec[2]=0; @@ -1905,7 +1904,7 @@ int initFlyInfo (bContext *C, FlyInfo *fly, wmOperator *op, wmEvent *event) where_is_object(fly->scene, fly->v3d->camera); VECCOPY(fly->rv3d->ofs, fly->v3d->camera->obmat[3]); - VecMulf(fly->rv3d->ofs, -1.0f); /*flip the vector*/ + mul_v3_fl(fly->rv3d->ofs, -1.0f); /*flip the vector*/ fly->rv3d->dist=0.0; fly->rv3d->viewbut=0; @@ -1923,8 +1922,8 @@ int initFlyInfo (bContext *C, FlyInfo *fly, wmOperator *op, wmEvent *event) fly->rv3d->dist= 0.0; upvec[2]= fly->dist_backup; /*x and y are 0*/ - Mat3MulVecfl(mat, upvec); - VecSubf(fly->rv3d->ofs, fly->rv3d->ofs, upvec); + mul_m3_v3(mat, upvec); + sub_v3_v3v3(fly->rv3d->ofs, fly->rv3d->ofs, upvec); /*Done with correcting for the dist*/ } @@ -1961,8 +1960,8 @@ static int flyEnd(bContext *C, FlyInfo *fly) } else if (fly->persp_backup==RV3D_CAMOB) { /* camera */ float mat3[3][3]; - Mat3CpyMat4(mat3, v3d->camera->obmat); - Mat3ToCompatibleEul(mat3, v3d->camera->rot, fly->rot_backup); + copy_m3_m4(mat3, v3d->camera->obmat); + mat3_to_compatible_eul( v3d->camera->rot, fly->rot_backup,mat3); DAG_id_flush_update(&v3d->camera->id, OB_RECALC_OB); #if 0 //XXX2.5 @@ -1980,9 +1979,9 @@ static int flyEnd(bContext *C, FlyInfo *fly) float mat[3][3]; upvec[0]= upvec[1]= 0; upvec[2]= fly->dist_backup; /*x and y are 0*/ - Mat3CpyMat4(mat, rv3d->viewinv); - Mat3MulVecfl(mat, upvec); - VecAddf(rv3d->ofs, rv3d->ofs, upvec); + copy_m3_m4(mat, rv3d->viewinv); + mul_m3_v3(mat, upvec); + add_v3_v3v3(rv3d->ofs, rv3d->ofs, upvec); /*Done with correcting for the dist */ } @@ -2215,7 +2214,7 @@ int flyApply(FlyInfo *fly) if (fly->use_precision) fly->speed= fly->speed * (1.0f-time_redraw_clamped); - Mat3CpyMat4(mat, rv3d->viewinv); + copy_m3_m4(mat, rv3d->viewinv); if (fly->pan_view==TRUE) { /* pan only */ @@ -2228,8 +2227,8 @@ int flyApply(FlyInfo *fly) dvec_tmp[1] *= 0.1; } - Mat3MulVecfl(mat, dvec_tmp); - VecMulf(dvec_tmp, time_redraw*200.0 * fly->grid); + mul_m3_v3(mat, dvec_tmp); + mul_v3_fl(dvec_tmp, time_redraw*200.0 * fly->grid); } else { float roll; /* similar to the angle between the camera's up and the Z-up, but its very rough so just roll*/ @@ -2239,9 +2238,9 @@ int flyApply(FlyInfo *fly) upvec[0]=1; upvec[1]=0; upvec[2]=0; - Mat3MulVecfl(mat, upvec); - VecRotToQuat( upvec, (float)moffset[1]*-time_redraw*20, tmp_quat); /* Rotate about the relative up vec */ - QuatMul(rv3d->viewquat, rv3d->viewquat, tmp_quat); + mul_m3_v3(mat, upvec); + axis_angle_to_quat( tmp_quat, upvec, (float)moffset[1]*-time_redraw*20); /* Rotate about the relative up vec */ + mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, tmp_quat); if (fly->xlock) fly->xlock = 2; /*check for rotation*/ if (fly->zlock) fly->zlock = 2; @@ -2255,7 +2254,7 @@ int flyApply(FlyInfo *fly) upvec[0]=0; upvec[1]=1; upvec[2]=0; - Mat3MulVecfl(mat, upvec); + mul_m3_v3(mat, upvec); if(upvec[2] < 0.0f) moffset[0]= -moffset[0]; @@ -2269,11 +2268,11 @@ int flyApply(FlyInfo *fly) upvec[0]=0; upvec[1]=1; upvec[2]=0; - Mat3MulVecfl(mat, upvec); + mul_m3_v3(mat, upvec); } - VecRotToQuat( upvec, (float)moffset[0]*time_redraw*20, tmp_quat); /* Rotate about the relative up vec */ - QuatMul(rv3d->viewquat, rv3d->viewquat, tmp_quat); + axis_angle_to_quat( tmp_quat, upvec, (float)moffset[0]*time_redraw*20); /* Rotate about the relative up vec */ + mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, tmp_quat); if (fly->xlock) fly->xlock = 2;/*check for rotation*/ if (fly->zlock) fly->zlock = 2; @@ -2283,7 +2282,7 @@ int flyApply(FlyInfo *fly) upvec[0]=1; upvec[1]=0; upvec[2]=0; - Mat3MulVecfl(mat, upvec); + mul_m3_v3(mat, upvec); /*make sure we have some z rolling*/ if (fabs(upvec[2]) > 0.00001f) { @@ -2292,9 +2291,9 @@ int flyApply(FlyInfo *fly) upvec[1]=0; upvec[2]=1; - Mat3MulVecfl(mat, upvec); - VecRotToQuat( upvec, roll*time_redraw_clamped*fly->zlock_momentum*0.1, tmp_quat); /* Rotate about the relative up vec */ - QuatMul(rv3d->viewquat, rv3d->viewquat, tmp_quat); + mul_m3_v3(mat, upvec); + axis_angle_to_quat( tmp_quat, upvec, roll*time_redraw_clamped*fly->zlock_momentum*0.1); /* Rotate about the relative up vec */ + mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, tmp_quat); fly->zlock_momentum += 0.05f; } else { @@ -2307,7 +2306,7 @@ int flyApply(FlyInfo *fly) upvec[0]=0; upvec[1]=0; upvec[2]=1; - Mat3MulVecfl(mat, upvec); + mul_m3_v3(mat, upvec); /*make sure we have some z rolling*/ if (fabs(upvec[2]) > 0.00001) { roll= upvec[2] * -5; @@ -2316,10 +2315,10 @@ int flyApply(FlyInfo *fly) upvec[1]= 0.0f; upvec[2]= 0.0f; - Mat3MulVecfl(mat, upvec); + mul_m3_v3(mat, upvec); - VecRotToQuat( upvec, roll*time_redraw_clamped*fly->xlock_momentum*0.1f, tmp_quat); /* Rotate about the relative up vec */ - QuatMul(rv3d->viewquat, rv3d->viewquat, tmp_quat); + axis_angle_to_quat( tmp_quat, upvec, roll*time_redraw_clamped*fly->xlock_momentum*0.1f); /* Rotate about the relative up vec */ + mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, tmp_quat); fly->xlock_momentum += 0.05f; } else { @@ -2336,14 +2335,14 @@ int flyApply(FlyInfo *fly) /* move along the current axis */ dvec_tmp[fly->axis]= 1.0f; - Mat3MulVecfl(mat, dvec_tmp); + mul_m3_v3(mat, dvec_tmp); - VecMulf(dvec_tmp, fly->speed * time_redraw * 0.25f); + mul_v3_fl(dvec_tmp, fly->speed * time_redraw * 0.25f); } } /* impose a directional lag */ - VecLerpf(dvec, dvec_tmp, fly->dvec_prev, (1.0f/(1.0f+(time_redraw*5.0f)))); + interp_v3_v3v3(dvec, dvec_tmp, fly->dvec_prev, (1.0f/(1.0f+(time_redraw*5.0f)))); if (rv3d->persp==RV3D_CAMOB) { if (v3d->camera->protectflag & OB_LOCK_LOCX) @@ -2354,7 +2353,7 @@ int flyApply(FlyInfo *fly) dvec[2] = 0.0; } - VecAddf(rv3d->ofs, rv3d->ofs, dvec); + add_v3_v3v3(rv3d->ofs, rv3d->ofs, dvec); #if 0 //XXX2.5 if (fly->zlock && fly->xlock) headerprint("FlyKeys Speed:(+/- | Wheel), Upright Axis:X on/Z on, Slow:Shift, Direction:WASDRF, Ok:LMB, Pan:MMB, Cancel:RMB"); @@ -2377,7 +2376,7 @@ int flyApply(FlyInfo *fly) { //XXX - some reason setcameratoview3d doesnt copy, shouldnt not be needed! VECCOPY(v3d->camera->loc, rv3d->ofs); - VecNegf(v3d->camera->loc); + negate_v3(v3d->camera->loc); } rv3d->persp= RV3D_CAMOB; @@ -2505,11 +2504,11 @@ void view3d_align_axis_to_vector(View3D *v3d, RegionView3D *rv3d, int axisidx, f else alignaxis[-axisidx-1]= -1.0; VECCOPY(norm, vec); - Normalize(norm); + normalize_v3(norm); - angle= (float)acos(Inpf(alignaxis, norm)); - Crossf(axis, alignaxis, norm); - VecRotToQuat(axis, -angle, new_quat); + angle= (float)acos(dot_v3v3(alignaxis, norm)); + cross_v3_v3v3(axis, alignaxis, norm); + axis_angle_to_quat( new_quat,axis, -angle); rv3d->view= 0; diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index 7467f7880af..c8c2a000450 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -106,7 +106,7 @@ #include "WM_types.h" #include "WM_api.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_editVert.h" #include "BLI_ghash.h" @@ -129,17 +129,17 @@ void setTransformViewMatrices(TransInfo *t) if(t->spacetype==SPACE_VIEW3D && t->ar->regiontype == RGN_TYPE_WINDOW) { RegionView3D *rv3d = t->ar->regiondata; - Mat4CpyMat4(t->viewmat, rv3d->viewmat); - Mat4CpyMat4(t->viewinv, rv3d->viewinv); - Mat4CpyMat4(t->persmat, rv3d->persmat); - Mat4CpyMat4(t->persinv, rv3d->persinv); + copy_m4_m4(t->viewmat, rv3d->viewmat); + copy_m4_m4(t->viewinv, rv3d->viewinv); + copy_m4_m4(t->persmat, rv3d->persmat); + copy_m4_m4(t->persinv, rv3d->persinv); t->persp = rv3d->persp; } else { - Mat4One(t->viewmat); - Mat4One(t->viewinv); - Mat4One(t->persmat); - Mat4One(t->persinv); + unit_m4(t->viewmat); + unit_m4(t->viewinv); + unit_m4(t->persmat); + unit_m4(t->persinv); t->persp = RV3D_ORTHO; } @@ -661,7 +661,7 @@ void transformEvent(TransInfo *t, wmEvent *event) getmouseco_sc(mval); BIF_selectOrientation(); calc_manipulator_stats(curarea); - Mat3CpyMat4(t->spacemtx, G.vd->twmat); + copy_m3_m4(t->spacemtx, G.vd->twmat); warp_pointer(mval[0], mval[1]); #endif } @@ -1112,11 +1112,11 @@ void drawHelpline(const struct bContext *C, TransInfo *t) VECCOPY(vecrot, t->center); if(t->flag & T_EDIT) { Object *ob= t->obedit; - if(ob) Mat4MulVecfl(ob->obmat, vecrot); + if(ob) mul_m4_v3(ob->obmat, vecrot); } else if(t->flag & T_POSE) { Object *ob=t->poseobj; - if(ob) Mat4MulVecfl(ob->obmat, vecrot); + if(ob) mul_m4_v3(ob->obmat, vecrot); } projectFloatView(t, vecrot, cent); // no overflow in extreme cases @@ -1368,12 +1368,12 @@ int initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event, int t->draw_handle_pixel = ED_region_draw_cb_activate(t->ar->type, drawTransformPixel, t, REGION_DRAW_POST_PIXEL); } else if(t->spacetype == SPACE_IMAGE) { - Mat3One(t->spacemtx); + unit_m3(t->spacemtx); t->draw_handle_view = ED_region_draw_cb_activate(t->ar->type, drawTransformView, t, REGION_DRAW_POST_VIEW); t->draw_handle_pixel = ED_region_draw_cb_activate(t->ar->type, drawTransformPixel, t, REGION_DRAW_POST_PIXEL); } else - Mat3One(t->spacemtx); + unit_m3(t->spacemtx); createTransData(C, t); // make TransData structs from selection @@ -1652,8 +1652,8 @@ static void protectedAxisAngleBits(short protectflag, float axis[3], float *angl /* axis-angle get limited with euler... */ float eul[3], oldeul[3]; - AxisAngleToEulO(axis, *angle, eul, EULER_ORDER_DEFAULT); - AxisAngleToEulO(oldAxis, oldAngle, oldeul, EULER_ORDER_DEFAULT); + axis_angle_to_eulO( eul, EULER_ORDER_DEFAULT,axis, *angle); + axis_angle_to_eulO( oldeul, EULER_ORDER_DEFAULT,oldAxis, oldAngle); if (protectflag & OB_LOCK_ROTX) eul[0]= oldeul[0]; @@ -1662,7 +1662,7 @@ static void protectedAxisAngleBits(short protectflag, float axis[3], float *angl if (protectflag & OB_LOCK_ROTZ) eul[2]= oldeul[2]; - EulOToAxisAngle(eul, EULER_ORDER_DEFAULT, axis, angle); + eulO_to_axis_angle( axis, angle,eul, EULER_ORDER_DEFAULT); /* when converting to axis-angle, we need a special exception for the case when there is no axis */ if (IS_EQ(axis[0], axis[1]) && IS_EQ(axis[1], axis[2])) { @@ -1695,8 +1695,8 @@ static void protectedQuaternionBits(short protectflag, float *quat, float *oldqu float eul[3], oldeul[3], quat1[4]; QUATCOPY(quat1, quat); - QuatToEul(quat, eul); - QuatToEul(oldquat, oldeul); + quat_to_eul( eul,quat); + quat_to_eul( oldeul,oldquat); if (protectflag & OB_LOCK_ROTX) eul[0]= oldeul[0]; @@ -1705,11 +1705,11 @@ static void protectedQuaternionBits(short protectflag, float *quat, float *oldqu if (protectflag & OB_LOCK_ROTZ) eul[2]= oldeul[2]; - EulToQuat(eul, quat); + eul_to_quat( quat,eul); /* quaternions flip w sign to accumulate rotations correctly */ if ( (quat1[0]<0.0f && quat[0]>0.0f) || (quat1[0]>0.0f && quat[0]<0.0f) ) { - QuatMulf(quat, -1.0f); + mul_qt_fl(quat, -1.0f); } } } @@ -1728,7 +1728,7 @@ static void constraintTransLim(TransInfo *t, TransData *td) * - current space should be local */ memset(&cob, 0, sizeof(bConstraintOb)); - Mat4One(cob.matrix); + unit_m4(cob.matrix); VECCOPY(cob.matrix[3], td->loc); /* Evaluate valid constraints */ @@ -1749,8 +1749,8 @@ static void constraintTransLim(TransInfo *t, TransData *td) /* do space conversions */ if (con->ownspace == CONSTRAINT_SPACE_WORLD) { /* just multiply by td->mtx (this should be ok) */ - Mat4CpyMat4(tmat, cob.matrix); - Mat4MulMat34(cob.matrix, td->mtx, tmat); + copy_m4_m4(tmat, cob.matrix); + mul_m4_m3m4(cob.matrix, td->mtx, tmat); } else if (con->ownspace != CONSTRAINT_SPACE_LOCAL) { /* skip... incompatable spacetype */ @@ -1763,8 +1763,8 @@ static void constraintTransLim(TransInfo *t, TransData *td) /* convert spaces again */ if (con->ownspace == CONSTRAINT_SPACE_WORLD) { /* just multiply by td->mtx (this should be ok) */ - Mat4CpyMat4(tmat, cob.matrix); - Mat4MulMat34(cob.matrix, td->smtx, tmat); + copy_m4_m4(tmat, cob.matrix); + mul_m4_m3m4(cob.matrix, td->smtx, tmat); } } } @@ -1789,21 +1789,21 @@ static void constraintRotLim(TransInfo *t, TransData *td) if (td->rotOrder == ROT_MODE_QUAT) { /* quats */ if (td->ext) - QuatToMat4(td->ext->quat, cob.matrix); + quat_to_mat4( cob.matrix,td->ext->quat); else return; } else if (td->rotOrder == ROT_MODE_AXISANGLE) { /* axis angle */ if (td->ext) - AxisAngleToMat4(&td->ext->quat[1], td->ext->quat[0], cob.matrix); + axis_angle_to_mat4( cob.matrix,&td->ext->quat[1], td->ext->quat[0]); else return; } else { /* eulers */ if (td->ext) - EulOToMat4(td->ext->rot, td->rotOrder, cob.matrix); + eulO_to_mat4( cob.matrix,td->ext->rot, td->rotOrder); else return; } @@ -1826,8 +1826,8 @@ static void constraintRotLim(TransInfo *t, TransData *td) /* do space conversions */ if (con->ownspace == CONSTRAINT_SPACE_WORLD) { /* just multiply by td->mtx (this should be ok) */ - Mat4CpyMat4(tmat, cob.matrix); - Mat4MulMat34(cob.matrix, td->mtx, tmat); + copy_m4_m4(tmat, cob.matrix); + mul_m4_m3m4(cob.matrix, td->mtx, tmat); } else if (con->ownspace != CONSTRAINT_SPACE_LOCAL) { /* skip... incompatable spacetype */ @@ -1840,8 +1840,8 @@ static void constraintRotLim(TransInfo *t, TransData *td) /* convert spaces again */ if (con->ownspace == CONSTRAINT_SPACE_WORLD) { /* just multiply by td->mtx (this should be ok) */ - Mat4CpyMat4(tmat, cob.matrix); - Mat4MulMat34(cob.matrix, td->smtx, tmat); + copy_m4_m4(tmat, cob.matrix); + mul_m4_m3m4(cob.matrix, td->smtx, tmat); } } } @@ -1849,15 +1849,15 @@ static void constraintRotLim(TransInfo *t, TransData *td) /* copy results from cob->matrix */ if (td->rotOrder == ROT_MODE_QUAT) { /* quats */ - Mat4ToQuat(cob.matrix, td->ext->quat); + mat4_to_quat( td->ext->quat,cob.matrix); } else if (td->rotOrder == ROT_MODE_AXISANGLE) { /* axis angle */ - Mat4ToAxisAngle(cob.matrix, &td->ext->quat[1], &td->ext->quat[0]); + mat4_to_axis_angle( &td->ext->quat[1], &td->ext->quat[0],cob.matrix); } else { /* eulers */ - Mat4ToEulO(cob.matrix, td->ext->rot, td->rotOrder); + mat4_to_eulO( td->ext->rot, td->rotOrder,cob.matrix); } } } @@ -1883,7 +1883,7 @@ static void constraintSizeLim(TransInfo *t, TransData *td) if (td->flag & TD_SINGLESIZE) return; - SizeToMat4(td->ext->size, cob.matrix); + size_to_mat4( cob.matrix,td->ext->size); } /* Evaluate valid constraints */ @@ -1904,8 +1904,8 @@ static void constraintSizeLim(TransInfo *t, TransData *td) /* do space conversions */ if (con->ownspace == CONSTRAINT_SPACE_WORLD) { /* just multiply by td->mtx (this should be ok) */ - Mat4CpyMat4(tmat, cob.matrix); - Mat4MulMat34(cob.matrix, td->mtx, tmat); + copy_m4_m4(tmat, cob.matrix); + mul_m4_m3m4(cob.matrix, td->mtx, tmat); } else if (con->ownspace != CONSTRAINT_SPACE_LOCAL) { /* skip... incompatable spacetype */ @@ -1918,8 +1918,8 @@ static void constraintSizeLim(TransInfo *t, TransData *td) /* convert spaces again */ if (con->ownspace == CONSTRAINT_SPACE_WORLD) { /* just multiply by td->mtx (this should be ok) */ - Mat4CpyMat4(tmat, cob.matrix); - Mat4MulMat34(cob.matrix, td->smtx, tmat); + copy_m4_m4(tmat, cob.matrix); + mul_m4_m3m4(cob.matrix, td->smtx, tmat); } } } @@ -1934,7 +1934,7 @@ static void constraintSizeLim(TransInfo *t, TransData *td) if (td->flag & TD_SINGLESIZE) return; - Mat4ToSize(cob.matrix, td->ext->size); + mat4_to_size( td->ext->size,cob.matrix); } } } @@ -1964,11 +1964,11 @@ void initWarp(TransInfo *t) for(i = 0; i < t->total; i++) { float center[3]; VECCOPY(center, t->data[i].center); - Mat3MulVecfl(t->data[i].mtx, center); - Mat4MulVecfl(t->viewmat, center); - VecSubf(center, center, t->viewmat[3]); + mul_m3_v3(t->data[i].mtx, center); + mul_m4_v3(t->viewmat, center); + sub_v3_v3v3(center, center, t->viewmat[3]); if (i) - MinMax3(min, max, center); + minmax_v3_v3v3(min, max, center); else { VECCOPY(max, center); VECCOPY(min, center); @@ -2022,12 +2022,12 @@ int Warp(TransInfo *t, short mval[2]) VECCOPY(cursor, curs); VECCOPY(gcursor, cursor); if (t->flag & T_EDIT) { - VecSubf(cursor, cursor, t->obedit->obmat[3]); - VecSubf(gcursor, gcursor, t->obedit->obmat[3]); - Mat3MulVecfl(t->data->smtx, gcursor); + sub_v3_v3v3(cursor, cursor, t->obedit->obmat[3]); + sub_v3_v3v3(gcursor, gcursor, t->obedit->obmat[3]); + mul_m3_v3(t->data->smtx, gcursor); } - Mat4MulVecfl(t->viewmat, cursor); - VecSubf(cursor, cursor, t->viewmat[3]); + mul_m4_v3(t->viewmat, cursor); + sub_v3_v3v3(cursor, cursor, t->viewmat[3]); /* amount of degrees for warp */ circumfac = 360.0f * t->values[0]; @@ -2065,9 +2065,9 @@ int Warp(TransInfo *t, short mval[2]) /* translate point to center, rotate in such a way that outline==distance */ VECCOPY(vec, td->iloc); - Mat3MulVecfl(td->mtx, vec); - Mat4MulVecfl(t->viewmat, vec); - VecSubf(vec, vec, t->viewmat[3]); + mul_m3_v3(td->mtx, vec); + mul_m4_v3(t->viewmat, vec); + sub_v3_v3v3(vec, vec, t->viewmat[3]); dist= vec[0]-cursor[0]; @@ -2082,13 +2082,13 @@ int Warp(TransInfo *t, short mval[2]) loc[1]= co*vec[1]+cursor[1]; loc[2]= vec[2]; - Mat4MulVecfl(t->viewinv, loc); - VecSubf(loc, loc, t->viewinv[3]); - Mat3MulVecfl(td->smtx, loc); + mul_m4_v3(t->viewinv, loc); + sub_v3_v3v3(loc, loc, t->viewinv[3]); + mul_m3_v3(td->smtx, loc); - VecSubf(loc, loc, td->iloc); - VecMulf(loc, td->factor); - VecAddf(td->loc, td->iloc, loc); + sub_v3_v3v3(loc, loc, td->iloc); + mul_v3_fl(loc, td->factor); + add_v3_v3v3(td->loc, td->iloc, loc); } recalcData(t); @@ -2151,8 +2151,8 @@ int Shear(TransInfo *t, short mval[2]) int i; char str[50]; - Mat3CpyMat4(persmat, t->viewmat); - Mat3Inv(persinv, persmat); + copy_m3_m4(persmat, t->viewmat); + invert_m3_m3(persinv, persmat); value = 0.05f * t->values[0]; @@ -2173,7 +2173,7 @@ int Shear(TransInfo *t, short mval[2]) sprintf(str, "Shear: %.3f %s", value, t->proptext); } - Mat3One(smat); + unit_m3(smat); // Custom data signals shear direction if (t->customData == 0) @@ -2181,8 +2181,8 @@ int Shear(TransInfo *t, short mval[2]) else smat[0][1] = value; - Mat3MulMat3(tmat, smat, persmat); - Mat3MulMat3(totmat, persinv, tmat); + mul_m3_m3m3(tmat, smat, persmat); + mul_m3_m3m3(totmat, persinv, tmat); for(i = 0 ; i < t->total; i++, td++) { if (td->flag & TD_NOACTION) @@ -2193,22 +2193,22 @@ int Shear(TransInfo *t, short mval[2]) if (t->obedit) { float mat3[3][3]; - Mat3MulMat3(mat3, totmat, td->mtx); - Mat3MulMat3(tmat, td->smtx, mat3); + mul_m3_m3m3(mat3, totmat, td->mtx); + mul_m3_m3m3(tmat, td->smtx, mat3); } else { - Mat3CpyMat3(tmat, totmat); + copy_m3_m3(tmat, totmat); } - VecSubf(vec, td->center, t->center); + sub_v3_v3v3(vec, td->center, t->center); - Mat3MulVecfl(tmat, vec); + mul_m3_v3(tmat, vec); - VecAddf(vec, vec, t->center); - VecSubf(vec, vec, td->center); + add_v3_v3v3(vec, vec, t->center); + sub_v3_v3v3(vec, vec, td->center); - VecMulf(vec, td->factor); + mul_v3_fl(vec, td->factor); - VecAddf(td->loc, td->iloc, vec); + add_v3_v3v3(td->loc, td->iloc, vec); } recalcData(t); @@ -2281,12 +2281,12 @@ static void TransMat3ToSize( float mat[][3], float smat[][3], float *size) { float vec[3]; - VecCopyf(vec, mat[0]); - size[0]= Normalize(vec); - VecCopyf(vec, mat[1]); - size[1]= Normalize(vec); - VecCopyf(vec, mat[2]); - size[2]= Normalize(vec); + copy_v3_v3(vec, mat[0]); + size[0]= normalize_v3(vec); + copy_v3_v3(vec, mat[1]); + size[1]= normalize_v3(vec); + copy_v3_v3(vec, mat[2]); + size[2]= normalize_v3(vec); /* first tried with dotproduct... but the sign flip is crucial */ if( VECSIGNFLIP(mat[0], smat[0]) ) size[0]= -size[0]; @@ -2300,11 +2300,11 @@ static void ElementResize(TransInfo *t, TransData *td, float mat[3][3]) { float vec[3]; if (t->flag & T_EDIT) { - Mat3MulMat3(smat, mat, td->mtx); - Mat3MulMat3(tmat, td->smtx, smat); + mul_m3_m3m3(smat, mat, td->mtx); + mul_m3_m3m3(tmat, td->smtx, smat); } else { - Mat3CpyMat3(tmat, mat); + copy_m3_m3(tmat, mat); } if (t->con.applySize) { @@ -2339,13 +2339,13 @@ static void ElementResize(TransInfo *t, TransData *td, float mat[3][3]) { if (t->flag & (T_OBJECT|T_TEXTURE|T_POSE)) { float obsizemat[3][3]; // Reorient the size mat to fit the oriented object. - Mat3MulMat3(obsizemat, tmat, td->axismtx); - //printmatrix3("obsizemat", obsizemat); + mul_m3_m3m3(obsizemat, tmat, td->axismtx); + //print_m3("obsizemat", obsizemat); TransMat3ToSize(obsizemat, td->axismtx, fsize); - //printvecf("fsize", fsize); + //print_v3("fsize", fsize); } else { - Mat3ToSize(tmat, fsize); + mat3_to_size( fsize,tmat); } protectedSizeBits(td->protectflag, fsize); @@ -2375,26 +2375,26 @@ static void ElementResize(TransInfo *t, TransData *td, float mat[3][3]) { /* For individual element center, Editmode need to use iloc */ if (t->flag & T_POINTS) - VecSubf(vec, td->iloc, center); + sub_v3_v3v3(vec, td->iloc, center); else - VecSubf(vec, td->center, center); + sub_v3_v3v3(vec, td->center, center); - Mat3MulVecfl(tmat, vec); + mul_m3_v3(tmat, vec); - VecAddf(vec, vec, center); + add_v3_v3v3(vec, vec, center); if (t->flag & T_POINTS) - VecSubf(vec, vec, td->iloc); + sub_v3_v3v3(vec, vec, td->iloc); else - VecSubf(vec, vec, td->center); + sub_v3_v3v3(vec, vec, td->center); - VecMulf(vec, td->factor); + mul_v3_fl(vec, td->factor); if (t->flag & (T_OBJECT|T_POSE)) { - Mat3MulVecfl(td->smtx, vec); + mul_m3_v3(td->smtx, vec); } protectedTransBits(td->protectflag, vec); - VecAddf(td->loc, td->iloc, vec); + add_v3_v3v3(td->loc, td->iloc, vec); constraintTransLim(t, td); } @@ -2435,13 +2435,13 @@ int Resize(TransInfo *t, short mval[2]) VECCOPY(t->values, size); - SizeToMat3(size, mat); + size_to_mat3( mat,size); if (t->con.applySize) { t->con.applySize(t, NULL, mat); } - Mat3CpyMat3(t->mat, mat); // used in manipulator + copy_m3_m3(t->mat, mat); // used in manipulator headerResize(t, size, str); @@ -2457,7 +2457,7 @@ int Resize(TransInfo *t, short mval[2]) /* evil hack - redo resize if cliping needed */ if (t->flag & T_CLIP_UV && clipUVTransform(t, size, 1)) { - SizeToMat3(size, mat); + size_to_mat3( mat,size); if (t->con.applySize) t->con.applySize(t, NULL, mat); @@ -2496,7 +2496,7 @@ void initToSphere(TransInfo *t) // Calculate average radius for(i = 0 ; i < t->total; i++, td++) { - t->val += VecLenf(t->center, td->iloc); + t->val += len_v3v3(t->center, td->iloc); } t->val /= (float)t->total; @@ -2543,15 +2543,15 @@ int ToSphere(TransInfo *t, short mval[2]) if (td->flag & TD_SKIP) continue; - VecSubf(vec, td->iloc, t->center); + sub_v3_v3v3(vec, td->iloc, t->center); - radius = Normalize(vec); + radius = normalize_v3(vec); tratio = ratio * td->factor; - VecMulf(vec, radius * (1.0f - tratio) + t->val * tratio); + mul_v3_fl(vec, radius * (1.0f - tratio) + t->val * tratio); - VecAddf(td->loc, t->center, vec); + add_v3_v3v3(td->loc, t->center, vec); } @@ -2604,25 +2604,25 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short } if (t->flag & T_POINTS) { - Mat3MulMat3(totmat, mat, td->mtx); - Mat3MulMat3(smat, td->smtx, totmat); + mul_m3_m3m3(totmat, mat, td->mtx); + mul_m3_m3m3(smat, td->smtx, totmat); - VecSubf(vec, td->iloc, center); - Mat3MulVecfl(smat, vec); + sub_v3_v3v3(vec, td->iloc, center); + mul_m3_v3(smat, vec); - VecAddf(td->loc, vec, center); + add_v3_v3v3(td->loc, vec, center); - VecSubf(vec,td->loc,td->iloc); + sub_v3_v3v3(vec,td->loc,td->iloc); protectedTransBits(td->protectflag, vec); - VecAddf(td->loc, td->iloc, vec); + add_v3_v3v3(td->loc, td->iloc, vec); if(td->flag & TD_USEQUAT) { - Mat3MulSerie(fmat, td->mtx, mat, td->smtx, 0, 0, 0, 0, 0); - Mat3ToQuat(fmat, quat); // Actual transform + mul_serie_m3(fmat, td->mtx, mat, td->smtx, 0, 0, 0, 0, 0); + mat3_to_quat( quat,fmat); // Actual transform if(td->ext->quat){ - QuatMul(td->ext->quat, quat, td->ext->iquat); + mul_qt_qtqt(td->ext->quat, quat, td->ext->iquat); /* is there a reason not to have this here? -jahka */ protectedQuaternionBits(td->protectflag, td->ext->quat, td->ext->iquat); @@ -2645,28 +2645,28 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short float pmtx[3][3], imtx[3][3]; // Extract and invert armature object matrix - Mat3CpyMat4(pmtx, t->poseobj->obmat); - Mat3Inv(imtx, pmtx); + copy_m3_m4(pmtx, t->poseobj->obmat); + invert_m3_m3(imtx, pmtx); if ((td->flag & TD_NO_LOC) == 0) { - VecSubf(vec, td->center, center); + sub_v3_v3v3(vec, td->center, center); - Mat3MulVecfl(pmtx, vec); // To Global space - Mat3MulVecfl(mat, vec); // Applying rotation - Mat3MulVecfl(imtx, vec); // To Local space + mul_m3_v3(pmtx, vec); // To Global space + mul_m3_v3(mat, vec); // Applying rotation + mul_m3_v3(imtx, vec); // To Local space - VecAddf(vec, vec, center); + add_v3_v3v3(vec, vec, center); /* vec now is the location where the object has to be */ - VecSubf(vec, vec, td->center); // Translation needed from the initial location + sub_v3_v3v3(vec, vec, td->center); // Translation needed from the initial location - Mat3MulVecfl(pmtx, vec); // To Global space - Mat3MulVecfl(td->smtx, vec);// To Pose space + mul_m3_v3(pmtx, vec); // To Global space + mul_m3_v3(td->smtx, vec);// To Pose space protectedTransBits(td->protectflag, vec); - VecAddf(td->loc, td->iloc, vec); + add_v3_v3v3(td->loc, td->iloc, vec); constraintTransLim(t, td); } @@ -2675,11 +2675,11 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short if ((t->flag & T_V3D_ALIGN)==0) { // align mode doesn't rotate objects itself /* euler or quaternion/axis-angle? */ if (td->rotOrder == ROT_MODE_QUAT) { - Mat3MulSerie(fmat, td->mtx, mat, td->smtx, 0, 0, 0, 0, 0); + mul_serie_m3(fmat, td->mtx, mat, td->smtx, 0, 0, 0, 0, 0); - Mat3ToQuat(fmat, quat); // Actual transform + mat3_to_quat( quat,fmat); // Actual transform - QuatMul(td->ext->quat, quat, td->ext->iquat); + mul_qt_qtqt(td->ext->quat, quat, td->ext->iquat); /* this function works on end result */ protectedQuaternionBits(td->protectflag, td->ext->quat, td->ext->iquat); @@ -2688,13 +2688,13 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short /* calculate effect based on quats */ float iquat[4], tquat[4]; - AxisAngleToQuat(iquat, td->ext->irotAxis, td->ext->irotAngle); + axis_angle_to_quat(iquat, td->ext->irotAxis, td->ext->irotAngle); - Mat3MulSerie(fmat, td->mtx, mat, td->smtx, 0, 0, 0, 0, 0); - Mat3ToQuat(fmat, quat); // Actual transform - QuatMul(tquat, quat, iquat); + mul_serie_m3(fmat, td->mtx, mat, td->smtx, 0, 0, 0, 0, 0); + mat3_to_quat( quat,fmat); // Actual transform + mul_qt_qtqt(tquat, quat, iquat); - QuatToAxisAngle(tquat, td->ext->rotAxis, td->ext->rotAngle); + quat_to_axis_angle( td->ext->rotAxis, td->ext->rotAngle,tquat); /* this function works on end result */ protectedAxisAngleBits(td->protectflag, td->ext->rotAxis, td->ext->rotAngle, td->ext->irotAxis, td->ext->irotAngle); @@ -2702,17 +2702,17 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short else { float eulmat[3][3]; - Mat3MulMat3(totmat, mat, td->mtx); - Mat3MulMat3(smat, td->smtx, totmat); + mul_m3_m3m3(totmat, mat, td->mtx); + mul_m3_m3m3(smat, td->smtx, totmat); /* calculate the total rotatation in eulers */ VECCOPY(eul, td->ext->irot); - EulOToMat3(eul, td->rotOrder, eulmat); + eulO_to_mat3( eulmat,eul, td->rotOrder); /* mat = transform, obmat = bone rotation */ - Mat3MulMat3(fmat, smat, eulmat); + mul_m3_m3m3(fmat, smat, eulmat); - Mat3ToCompatibleEulO(fmat, eul, td->ext->rot, td->rotOrder); + mat3_to_compatible_eulO( eul, td->ext->rot, td->rotOrder,fmat); /* and apply (to end result only) */ protectedRotateBits(td->protectflag, eul, td->ext->irot); @@ -2726,16 +2726,16 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short if ((td->flag & TD_NO_LOC) == 0) { /* translation */ - VecSubf(vec, td->center, center); - Mat3MulVecfl(mat, vec); - VecAddf(vec, vec, center); + sub_v3_v3v3(vec, td->center, center); + mul_m3_v3(mat, vec); + add_v3_v3v3(vec, vec, center); /* vec now is the location where the object has to be */ - VecSubf(vec, vec, td->center); - Mat3MulVecfl(td->smtx, vec); + sub_v3_v3v3(vec, vec, td->center); + mul_m3_v3(td->smtx, vec); protectedTransBits(td->protectflag, vec); - VecAddf(td->loc, td->iloc, vec); + add_v3_v3v3(td->loc, td->iloc, vec); } @@ -2745,10 +2745,10 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short if ((t->flag & T_V3D_ALIGN)==0) { // align mode doesn't rotate objects itself /* euler or quaternion? */ if ((td->rotOrder == ROT_MODE_QUAT) || (td->flag & TD_USEQUAT)) { - Mat3MulSerie(fmat, td->mtx, mat, td->smtx, 0, 0, 0, 0, 0); - Mat3ToQuat(fmat, quat); // Actual transform + mul_serie_m3(fmat, td->mtx, mat, td->smtx, 0, 0, 0, 0, 0); + mat3_to_quat( quat,fmat); // Actual transform - QuatMul(td->ext->quat, quat, td->ext->iquat); + mul_qt_qtqt(td->ext->quat, quat, td->ext->iquat); /* this function works on end result */ protectedQuaternionBits(td->protectflag, td->ext->quat, td->ext->iquat); } @@ -2756,13 +2756,13 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short /* calculate effect based on quats */ float iquat[4], tquat[4]; - AxisAngleToQuat(iquat, td->ext->irotAxis, td->ext->irotAngle); + axis_angle_to_quat(iquat, td->ext->irotAxis, td->ext->irotAngle); - Mat3MulSerie(fmat, td->mtx, mat, td->smtx, 0, 0, 0, 0, 0); - Mat3ToQuat(fmat, quat); // Actual transform - QuatMul(tquat, quat, iquat); + mul_serie_m3(fmat, td->mtx, mat, td->smtx, 0, 0, 0, 0, 0); + mat3_to_quat( quat,fmat); // Actual transform + mul_qt_qtqt(tquat, quat, iquat); - QuatToAxisAngle(quat, td->ext->rotAxis, td->ext->rotAngle); + quat_to_axis_angle( td->ext->rotAxis, td->ext->rotAngle,quat); /* this function works on end result */ protectedAxisAngleBits(td->protectflag, td->ext->rotAxis, td->ext->rotAngle, td->ext->irotAxis, td->ext->irotAngle); @@ -2770,19 +2770,19 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short else { float obmat[3][3]; - Mat3MulMat3(totmat, mat, td->mtx); - Mat3MulMat3(smat, td->smtx, totmat); + mul_m3_m3m3(totmat, mat, td->mtx); + mul_m3_m3m3(smat, td->smtx, totmat); /* calculate the total rotatation in eulers */ - VecAddf(eul, td->ext->irot, td->ext->drot); /* we have to correct for delta rot */ - EulOToMat3(eul, td->rotOrder, obmat); + add_v3_v3v3(eul, td->ext->irot, td->ext->drot); /* we have to correct for delta rot */ + eulO_to_mat3( obmat,eul, td->rotOrder); /* mat = transform, obmat = object rotation */ - Mat3MulMat3(fmat, smat, obmat); + mul_m3_m3m3(fmat, smat, obmat); - Mat3ToCompatibleEulO(fmat, eul, td->ext->rot, td->rotOrder); + mat3_to_compatible_eulO( eul, td->ext->rot, td->rotOrder,fmat); /* correct back for delta rot */ - VecSubf(eul, eul, td->ext->drot); + sub_v3_v3v3(eul, eul, td->ext->drot); /* and apply */ protectedRotateBits(td->protectflag, eul, td->ext->irot); @@ -2800,7 +2800,7 @@ static void applyRotation(TransInfo *t, float angle, float axis[3]) float mat[3][3]; int i; - VecRotToMat3(axis, angle, mat); + vec_rot_to_mat3( mat,axis, angle); for(i = 0 ; i < t->total; i++, td++) { @@ -2812,10 +2812,10 @@ static void applyRotation(TransInfo *t, float angle, float axis[3]) if (t->con.applyRot) { t->con.applyRot(t, td, axis, NULL); - VecRotToMat3(axis, angle * td->factor, mat); + vec_rot_to_mat3( mat,axis, angle * td->factor); } else if (t->flag & T_PROP_EDIT) { - VecRotToMat3(axis, angle * td->factor, mat); + vec_rot_to_mat3( mat,axis, angle * td->factor); } ElementRotation(t, td, mat, t->around); @@ -2832,8 +2832,8 @@ int Rotation(TransInfo *t, short mval[2]) float mat[3][3]; VECCOPY(axis, t->viewinv[2]); - VecMulf(axis, -1.0f); - Normalize(axis); + mul_v3_fl(axis, -1.0f); + normalize_v3(axis); final = t->values[0]; @@ -2869,11 +2869,11 @@ int Rotation(TransInfo *t, short mval[2]) sprintf(str, "Rot: %.2f%s %s", 180.0*final/M_PI, t->con.text, t->proptext); } - VecRotToMat3(axis, final, mat); + vec_rot_to_mat3( mat,axis, final); // TRANSFORM_FIX_ME // t->values[0] = final; // used in manipulator -// Mat3CpyMat3(t->mat, mat); // used in manipulator +// copy_m3_m3(t->mat, mat); // used in manipulator applyRotation(t, final, axis); @@ -2914,10 +2914,10 @@ static void applyTrackball(TransInfo *t, float axis1[3], float axis2[3], float a float mat[3][3], smat[3][3], totmat[3][3]; int i; - VecRotToMat3(axis1, angles[0], smat); - VecRotToMat3(axis2, angles[1], totmat); + vec_rot_to_mat3( smat,axis1, angles[0]); + vec_rot_to_mat3( totmat,axis2, angles[1]); - Mat3MulMat3(mat, smat, totmat); + mul_m3_m3m3(mat, smat, totmat); for(i = 0 ; i < t->total; i++, td++) { if (td->flag & TD_NOACTION) @@ -2927,10 +2927,10 @@ static void applyTrackball(TransInfo *t, float axis1[3], float axis2[3], float a continue; if (t->flag & T_PROP_EDIT) { - VecRotToMat3(axis1, td->factor * angles[0], smat); - VecRotToMat3(axis2, td->factor * angles[1], totmat); + vec_rot_to_mat3( smat,axis1, td->factor * angles[0]); + vec_rot_to_mat3( totmat,axis2, td->factor * angles[1]); - Mat3MulMat3(mat, smat, totmat); + mul_m3_m3m3(mat, smat, totmat); } ElementRotation(t, td, mat, t->around); @@ -2946,8 +2946,8 @@ int Trackball(TransInfo *t, short mval[2]) VECCOPY(axis1, t->persinv[0]); VECCOPY(axis2, t->persinv[1]); - Normalize(axis1); - Normalize(axis2); + normalize_v3(axis1); + normalize_v3(axis2); phi[0] = t->values[0]; phi[1] = t->values[1]; @@ -2972,13 +2972,13 @@ int Trackball(TransInfo *t, short mval[2]) sprintf(str, "Trackball: %.2f %.2f %s", 180.0*phi[0]/M_PI, 180.0*phi[1]/M_PI, t->proptext); } - VecRotToMat3(axis1, phi[0], smat); - VecRotToMat3(axis2, phi[1], totmat); + vec_rot_to_mat3( smat,axis1, phi[0]); + vec_rot_to_mat3( totmat,axis2, phi[1]); - Mat3MulMat3(mat, smat, totmat); + mul_m3_m3m3(mat, smat, totmat); // TRANSFORM_FIX_ME - //Mat3CpyMat3(t->mat, mat); // used in manipulator + //copy_m3_m3(t->mat, mat); // used in manipulator applyTrackball(t, axis1, axis2, phi); @@ -3030,7 +3030,7 @@ static void headerTranslation(TransInfo *t, float vec[3], char *str) { if (hasNumInput(&t->num)) { outputNumInput(&(t->num), tvec); - dist = VecLength(t->num.val); + dist = len_v3(t->num.val); } else { float dvec[3]; @@ -3038,7 +3038,7 @@ static void headerTranslation(TransInfo *t, float vec[3], char *str) { VECCOPY(dvec, vec); applyAspectRatio(t, dvec); - dist = VecLength(vec); + dist = len_v3(vec); if(t->scene->unit.system) { int i, do_split= t->scene->unit.flag & USER_UNIT_OPT_SPLIT ? 1:0; @@ -3113,12 +3113,12 @@ static void applyTranslation(TransInfo *t, float vec[3]) { float mat[3][3]; float angle; - Crossf(axis, original_normal, t->tsnap.snapNormal); - angle = saacos(Inpf(original_normal, t->tsnap.snapNormal)); + cross_v3_v3v3(axis, original_normal, t->tsnap.snapNormal); + angle = saacos(dot_v3v3(original_normal, t->tsnap.snapNormal)); - AxisAngleToQuat(quat, axis, angle); + axis_angle_to_quat(quat, axis, angle); - QuatToMat3(quat, mat); + quat_to_mat3( mat,quat); ElementRotation(t, td, mat, V3D_LOCAL); } @@ -3126,7 +3126,7 @@ static void applyTranslation(TransInfo *t, float vec[3]) { { float mat[3][3]; - Mat3One(mat); + unit_m3(mat); ElementRotation(t, td, mat, V3D_LOCAL); } @@ -3140,12 +3140,12 @@ static void applyTranslation(TransInfo *t, float vec[3]) { VECCOPY(tvec, vec); } - Mat3MulVecfl(td->smtx, tvec); - VecMulf(tvec, td->factor); + mul_m3_v3(td->smtx, tvec); + mul_v3_fl(tvec, td->factor); protectedTransBits(td->protectflag, tvec); - VecAddf(td->loc, td->iloc, tvec); + add_v3_v3v3(td->loc, td->iloc, tvec); constraintTransLim(t, td); } @@ -3252,10 +3252,10 @@ int ShrinkFatten(TransInfo *t, short mval[2]) continue; VECCOPY(vec, td->axismtx[2]); - VecMulf(vec, distance); - VecMulf(vec, td->factor); + mul_v3_fl(vec, distance); + mul_v3_fl(vec, td->factor); - VecAddf(td->loc, td->iloc, vec); + add_v3_v3v3(td->loc, td->iloc, vec); } recalcData(t); @@ -3462,23 +3462,23 @@ int PushPull(TransInfo *t, short mval[2]) if (td->flag & TD_SKIP) continue; - VecSubf(vec, t->center, td->center); + sub_v3_v3v3(vec, t->center, td->center); if (t->con.applyRot && t->con.mode & CON_APPLY) { t->con.applyRot(t, td, axis, NULL); if (isLockConstraint(t)) { float dvec[3]; - Projf(dvec, vec, axis); - VecSubf(vec, vec, dvec); + project_v3_v3v3(dvec, vec, axis); + sub_v3_v3v3(vec, vec, dvec); } else { - Projf(vec, vec, axis); + project_v3_v3v3(vec, vec, axis); } } - Normalize(vec); - VecMulf(vec, distance); - VecMulf(vec, td->factor); + normalize_v3(vec); + mul_v3_fl(vec, distance); + mul_v3_fl(vec, td->factor); - VecAddf(td->loc, td->iloc, vec); + add_v3_v3v3(td->loc, td->iloc, vec); } recalcData(t); @@ -3791,8 +3791,8 @@ static void ElementBoneSize(TransInfo *t, TransData *td, float mat[3][3]) float tmat[3][3], smat[3][3], oldy; float sizemat[3][3]; - Mat3MulMat3(smat, mat, td->mtx); - Mat3MulMat3(tmat, td->smtx, smat); + mul_m3_m3m3(smat, mat, td->mtx); + mul_m3_m3m3(tmat, td->smtx, smat); if (t->con.applySize) { t->con.applySize(t, td, tmat); @@ -3800,9 +3800,9 @@ static void ElementBoneSize(TransInfo *t, TransData *td, float mat[3][3]) /* we've tucked the scale in loc */ oldy= td->iloc[1]; - SizeToMat3(td->iloc, sizemat); - Mat3MulMat3(tmat, tmat, sizemat); - Mat3ToSize(tmat, td->loc); + size_to_mat3( sizemat,td->iloc); + mul_m3_m3m3(tmat, tmat, sizemat); + mat3_to_size( td->loc,tmat); td->loc[1]= oldy; } @@ -3834,13 +3834,13 @@ int BoneSize(TransInfo *t, short mval[2]) constraintNumInput(t, size); } - SizeToMat3(size, mat); + size_to_mat3( mat,size); if (t->con.applySize) { t->con.applySize(t, NULL, mat); } - Mat3CpyMat3(t->mat, mat); // used in manipulator + copy_m3_m3(t->mat, mat); // used in manipulator headerBoneSize(t, size, str); @@ -3955,7 +3955,7 @@ static int createSlideVerts(TransInfo *t) if (!v3d) { /*ok, let's try to survive this*/ - Mat4One(projectMat); + unit_m4(projectMat); } else { view3d_get_object_project_mat(v3d, t->obedit, projectMat); } @@ -4248,12 +4248,12 @@ static int createSlideVerts(TransInfo *t) } if (ev == tempsv->up->v1) { - VecSubf(vec, co, co2); + sub_v3_v3v3(vec, co, co2); } else { - VecSubf(vec, co2, co); + sub_v3_v3v3(vec, co2, co); } - VecAddf(start, start, vec); + add_v3_v3v3(start, start, vec); if (v3d) { view3d_project_float(t->ar, tempsv->down->v1->co, co, projectMat); @@ -4261,12 +4261,12 @@ static int createSlideVerts(TransInfo *t) } if (ev == tempsv->down->v1) { - VecSubf(vec, co2, co); + sub_v3_v3v3(vec, co2, co); } else { - VecSubf(vec, co, co2); + sub_v3_v3v3(vec, co, co2); } - VecAddf(end, end, vec); + add_v3_v3v3(end, end, vec); totvec += 1.0f; nearest = (EditVert*)look->link; @@ -4278,12 +4278,12 @@ static int createSlideVerts(TransInfo *t) look = look->next; } - VecAddf(start, start, end); - VecMulf(start, 0.5*(1.0/totvec)); + add_v3_v3v3(start, start, end); + mul_v3_fl(start, 0.5*(1.0/totvec)); VECCOPY(vec, start); start[0] = t->mval[0]; start[1] = t->mval[1]; - VecAddf(end, start, vec); + add_v3_v3v3(end, start, vec); sld->start[0] = (short) start[0]; sld->start[1] = (short) start[1]; @@ -4484,7 +4484,7 @@ int doEdgeSlide(TransInfo *t, float perc) upVert = editedge_getOtherVert(tempsv->up, centerVert); downVert = editedge_getOtherVert(tempsv->down, centerVert); - len = MIN2(perc, VecLenf(upVert->co,downVert->co)); + len = MIN2(perc, len_v3v3(upVert->co,downVert->co)); len = MAX2(len, 0); //Adjust Edgeloop @@ -4496,13 +4496,13 @@ int doEdgeSlide(TransInfo *t, float perc) tempsv = BLI_ghash_lookup(vertgh,ev); tempev = editedge_getOtherVert((perc>=0)?tempsv->up:tempsv->down, ev); - VecLerpf(ev->co, tempsv->origvert.co, tempev->co, fabs(perc)); + interp_v3_v3v3(ev->co, tempsv->origvert.co, tempev->co, fabs(perc)); if (uvlay_tot) { // XXX scene->toolsettings->uvcalc_flag & UVCALC_TRANSFORM_CORRECT) { for (uvlay_idx=0; uvlay_idx<uvlay_tot; uvlay_idx++) { suv = BLI_ghash_lookup( uvarray[uvlay_idx], ev ); if (suv && suv->fuv_list && suv->uv_up && suv->uv_down) { - Vec2Lerpf(uv_tmp, suv->origuv, (perc>=0)?suv->uv_up:suv->uv_down, fabs(perc)); + interp_v2_v2v2(uv_tmp, suv->origuv, (perc>=0)?suv->uv_up:suv->uv_down, fabs(perc)); fuv_link = suv->fuv_list; while (fuv_link) { VECCOPY2D(((float *)fuv_link->link), uv_tmp); @@ -4522,17 +4522,17 @@ int doEdgeSlide(TransInfo *t, float perc) float newlen; ev = look->link; tempsv = BLI_ghash_lookup(vertgh,ev); - newlen = (len / VecLenf(editedge_getOtherVert(tempsv->up,ev)->co,editedge_getOtherVert(tempsv->down,ev)->co)); + newlen = (len / len_v3v3(editedge_getOtherVert(tempsv->up,ev)->co,editedge_getOtherVert(tempsv->down,ev)->co)); if(newlen > 1.0) {newlen = 1.0;} if(newlen < 0.0) {newlen = 0.0;} if(flip == 0) { - VecLerpf(ev->co, editedge_getOtherVert(tempsv->down,ev)->co, editedge_getOtherVert(tempsv->up,ev)->co, fabs(newlen)); + interp_v3_v3v3(ev->co, editedge_getOtherVert(tempsv->down,ev)->co, editedge_getOtherVert(tempsv->up,ev)->co, fabs(newlen)); if (uvlay_tot) { // XXX scene->toolsettings->uvcalc_flag & UVCALC_TRANSFORM_CORRECT) { /* dont do anything if no UVs */ for (uvlay_idx=0; uvlay_idx<uvlay_tot; uvlay_idx++) { suv = BLI_ghash_lookup( uvarray[uvlay_idx], ev ); if (suv && suv->fuv_list && suv->uv_up && suv->uv_down) { - Vec2Lerpf(uv_tmp, suv->uv_down, suv->uv_up, fabs(newlen)); + interp_v2_v2v2(uv_tmp, suv->uv_down, suv->uv_up, fabs(newlen)); fuv_link = suv->fuv_list; while (fuv_link) { VECCOPY2D(((float *)fuv_link->link), uv_tmp); @@ -4542,14 +4542,14 @@ int doEdgeSlide(TransInfo *t, float perc) } } } else{ - VecLerpf(ev->co, editedge_getOtherVert(tempsv->up,ev)->co, editedge_getOtherVert(tempsv->down,ev)->co, fabs(newlen)); + interp_v3_v3v3(ev->co, editedge_getOtherVert(tempsv->up,ev)->co, editedge_getOtherVert(tempsv->down,ev)->co, fabs(newlen)); if (uvlay_tot) { // XXX scene->toolsettings->uvcalc_flag & UVCALC_TRANSFORM_CORRECT) { /* dont do anything if no UVs */ for (uvlay_idx=0; uvlay_idx<uvlay_tot; uvlay_idx++) { suv = BLI_ghash_lookup( uvarray[uvlay_idx], ev ); if (suv && suv->fuv_list && suv->uv_up && suv->uv_down) { - Vec2Lerpf(uv_tmp, suv->uv_up, suv->uv_down, fabs(newlen)); + interp_v2_v2v2(uv_tmp, suv->uv_up, suv->uv_down, fabs(newlen)); fuv_link = suv->fuv_list; while (fuv_link) { VECCOPY2D(((float *)fuv_link->link), uv_tmp); @@ -4775,7 +4775,7 @@ int Mirror(TransInfo *t, short mval[2]) if (t->con.mode & CON_APPLY) { size[0] = size[1] = size[2] = -1; - SizeToMat3(size, mat); + size_to_mat3( mat,size); if (t->con.applySize) { t->con.applySize(t, NULL, mat); @@ -4801,7 +4801,7 @@ int Mirror(TransInfo *t, short mval[2]) { size[0] = size[1] = size[2] = 1; - SizeToMat3(size, mat); + size_to_mat3( mat,size); for(i = 0, td=t->data; i < t->total; i++, td++) { if (td->flag & TD_NOACTION) @@ -4864,9 +4864,9 @@ int Align(TransInfo *t, short mval[2]) } } - Mat3Inv(invmat, td->axismtx); + invert_m3_m3(invmat, td->axismtx); - Mat3MulMat3(mat, t->spacemtx, invmat); + mul_m3_m3m3(mat, t->spacemtx, invmat); ElementRotation(t, td, mat, t->around); } diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h index ae4b1f446da..bba3ae44ebc 100644 --- a/source/blender/editors/transform/transform.h +++ b/source/blender/editors/transform/transform.h @@ -697,6 +697,7 @@ void applyTransformOrientation(const struct bContext *C, float mat[3][3], char * #define ORIENTATION_FACE 4 int getTransformOrientation(const struct bContext *C, float normal[3], float plane[3], int activeOnly); + int createSpaceNormal(float mat[3][3], float normal[3]); int createSpaceNormalTangent(float mat[3][3], float normal[3], float tangent[3]); diff --git a/source/blender/editors/transform/transform_constraints.c b/source/blender/editors/transform/transform_constraints.c index 7a6244b72b8..da8f0c4d0e9 100644 --- a/source/blender/editors/transform/transform_constraints.c +++ b/source/blender/editors/transform/transform_constraints.c @@ -73,7 +73,7 @@ #include "ED_image.h" #include "ED_view3d.h" -#include "BLI_arithb.h" +#include "BLI_math.h" //#include "blendef.h" // @@ -157,7 +157,7 @@ void constraintNumInput(TransInfo *t, float vec[3]) static void postConstraintChecks(TransInfo *t, float vec[3], float pvec[3]) { int i = 0; - Mat3MulVecfl(t->con.imtx, vec); + mul_m3_v3(t->con.imtx, vec); snapGrid(t, vec); @@ -194,7 +194,7 @@ static void postConstraintChecks(TransInfo *t, float vec[3], float pvec[3]) { pvec[i++] = vec[2]; } - Mat3MulVecfl(t->con.mtx, vec); + mul_m3_v3(t->con.mtx, vec); } static void axisProjection(TransInfo *t, float axis[3], float in[3], float out[3]) { @@ -206,16 +206,16 @@ static void axisProjection(TransInfo *t, float axis[3], float in[3], float out[3 /* For when view is parallel to constraint... will cause NaNs otherwise So we take vertical motion in 3D space and apply it to the constraint axis. Nice for camera grab + MMB */ - if(1.0f - fabs(Inpf(axis, t->viewinv[2])) < 0.000001f) { - Projf(vec, in, t->viewinv[1]); - factor = Inpf(t->viewinv[1], vec) * 2.0f; + if(1.0f - fabs(dot_v3v3(axis, t->viewinv[2])) < 0.000001f) { + project_v3_v3v3(vec, in, t->viewinv[1]); + factor = dot_v3v3(t->viewinv[1], vec) * 2.0f; /* since camera distance is quite relative, use quadratic relationship. holding shift can compensate */ if(factor<0.0f) factor*= -factor; else factor*= factor; VECCOPY(out, axis); - Normalize(out); - VecMulf(out, -factor); /* -factor makes move down going backwards */ + normalize_v3(out); + mul_v3_fl(out, -factor); /* -factor makes move down going backwards */ } else { float v[3], i1[3], i2[3]; @@ -224,32 +224,32 @@ static void axisProjection(TransInfo *t, float axis[3], float in[3], float out[3 float plane[3]; getViewVector(t, t->con.center, norm_center); - Crossf(plane, norm_center, axis); + cross_v3_v3v3(plane, norm_center, axis); - Projf(vec, in, plane); - VecSubf(vec, in, vec); + project_v3_v3v3(vec, in, plane); + sub_v3_v3v3(vec, in, vec); - VecAddf(v, vec, t->con.center); + add_v3_v3v3(v, vec, t->con.center); getViewVector(t, v, norm); /* give arbitrary large value if projection is impossible */ - factor = Inpf(axis, norm); + factor = dot_v3v3(axis, norm); if (1 - fabs(factor) < 0.0002f) { VECCOPY(out, axis); if (factor > 0) { - VecMulf(out, 1000000000); + mul_v3_fl(out, 1000000000); } else { - VecMulf(out, -1000000000); + mul_v3_fl(out, -1000000000); } } else { - VecAddf(v2, t->con.center, axis); - VecAddf(v4, v, norm); + add_v3_v3v3(v2, t->con.center, axis); + add_v3_v3v3(v4, v, norm); - LineIntersectLine(t->con.center, v2, v, v4, i1, i2); + isect_line_line_v3(t->con.center, v2, v, v4, i1, i2); - VecSubf(v, i2, v); + sub_v3_v3v3(v, i2, v); - VecSubf(out, i1, t->con.center); + sub_v3_v3v3(out, i1, t->con.center); } } } @@ -257,21 +257,21 @@ static void axisProjection(TransInfo *t, float axis[3], float in[3], float out[3 static void planeProjection(TransInfo *t, float in[3], float out[3]) { float vec[3], factor, norm[3]; - VecAddf(vec, in, t->con.center); + add_v3_v3v3(vec, in, t->con.center); getViewVector(t, vec, norm); - VecSubf(vec, out, in); + sub_v3_v3v3(vec, out, in); - factor = Inpf(vec, norm); + factor = dot_v3v3(vec, norm); if (fabs(factor) <= 0.001) { return; /* prevent divide by zero */ } - factor = Inpf(vec, vec) / factor; + factor = dot_v3v3(vec, vec) / factor; VECCOPY(vec, norm); - VecMulf(vec, factor); + mul_v3_fl(vec, factor); - VecAddf(out, in, vec); + add_v3_v3v3(out, in, vec); } /* @@ -287,7 +287,7 @@ static void applyAxisConstraintVec(TransInfo *t, TransData *td, float in[3], flo { VECCOPY(out, in); if (!td && t->con.mode & CON_APPLY) { - Mat3MulVecfl(t->con.pmtx, out); + mul_m3_v3(t->con.pmtx, out); // With snap, a projection is alright, no need to correct for view alignment if ((t->tsnap.status & SNAP_ON) == 0) { @@ -331,7 +331,7 @@ static void applyObjectConstraintVec(TransInfo *t, TransData *td, float in[3], f VECCOPY(out, in); if (t->con.mode & CON_APPLY) { if (!td) { - Mat3MulVecfl(t->con.pmtx, out); + mul_m3_v3(t->con.pmtx, out); if (getConstraintSpaceDimension(t) == 2) { if (out[0] != 0.0f || out[1] != 0.0f || out[2] != 0.0f) { planeProjection(t, in, out); @@ -367,7 +367,7 @@ static void applyObjectConstraintVec(TransInfo *t, TransData *td, float in[3], f if (t->con.mode & CON_AXIS2) { out[2] = in[i++]; } - Mat3MulVecfl(td->axismtx, out); + mul_m3_v3(td->axismtx, out); } } } @@ -393,8 +393,8 @@ static void applyAxisConstraintSize(TransInfo *t, TransData *td, float smat[3][3 smat[2][2] = 1.0f; } - Mat3MulMat3(tmat, smat, t->con.imtx); - Mat3MulMat3(smat, t->con.mtx, tmat); + mul_m3_m3m3(tmat, smat, t->con.imtx); + mul_m3_m3m3(smat, t->con.mtx, tmat); } } @@ -410,7 +410,7 @@ static void applyObjectConstraintSize(TransInfo *t, TransData *td, float smat[3] float tmat[3][3]; float imat[3][3]; - Mat3Inv(imat, td->axismtx); + invert_m3_m3(imat, td->axismtx); if (!(t->con.mode & CON_AXIS0)) { smat[0][0] = 1.0f; @@ -422,8 +422,8 @@ static void applyObjectConstraintSize(TransInfo *t, TransData *td, float smat[3] smat[2][2] = 1.0f; } - Mat3MulMat3(tmat, smat, imat); - Mat3MulMat3(smat, td->axismtx, tmat); + mul_m3_m3m3(tmat, smat, imat); + mul_m3_m3m3(smat, td->axismtx, tmat); } } @@ -462,7 +462,7 @@ static void applyAxisConstraintRot(TransInfo *t, TransData *td, float vec[3], fl } /* don't flip axis if asked to or if num input */ if (angle && (mode & CON_NOFLIP) == 0 && hasNumInput(&t->num) == 0) { - if (Inpf(vec, t->viewinv[2]) > 0.0f) { + if (dot_v3v3(vec, t->viewinv[2]) > 0.0f) { *angle = -(*angle); } } @@ -508,7 +508,7 @@ static void applyObjectConstraintRot(TransInfo *t, TransData *td, float vec[3], break; } if (angle && (mode & CON_NOFLIP) == 0 && hasNumInput(&t->num) == 0) { - if (Inpf(vec, t->viewinv[2]) > 0.0f) { + if (dot_v3v3(vec, t->viewinv[2]) > 0.0f) { *angle = -(*angle); } } @@ -519,7 +519,7 @@ static void applyObjectConstraintRot(TransInfo *t, TransData *td, float vec[3], void setConstraint(TransInfo *t, float space[3][3], int mode, const char text[]) { strncpy(t->con.text + 1, text, 48); - Mat3CpyMat3(t->con.mtx, space); + copy_m3_m3(t->con.mtx, space); t->con.mode = mode; getConstraintMatrix(t); @@ -535,7 +535,7 @@ void setConstraint(TransInfo *t, float space[3][3], int mode, const char text[]) void setLocalConstraint(TransInfo *t, int mode, const char text[]) { if (t->flag & T_EDIT) { float obmat[3][3]; - Mat3CpyMat4(obmat, t->scene->obedit->obmat); + copy_m3_m4(obmat, t->scene->obedit->obmat); setConstraint(t, obmat, mode, text); } else { @@ -544,7 +544,7 @@ void setLocalConstraint(TransInfo *t, int mode, const char text[]) { } else { strncpy(t->con.text + 1, text, 48); - Mat3CpyMat3(t->con.mtx, t->data->axismtx); + copy_m3_m3(t->con.mtx, t->data->axismtx); t->con.mode = mode; getConstraintMatrix(t); @@ -573,7 +573,7 @@ void setUserConstraint(TransInfo *t, short orientation, int mode, const char fte { float mtx[3][3]; sprintf(text, ftext, "global"); - Mat3One(mtx); + unit_m3(mtx); setConstraint(t, mtx, mode, text); } break; @@ -630,7 +630,7 @@ void drawConstraint(const struct bContext *C, TransInfo *t) float vec[3]; char col2[3] = {255,255,255}; convertViewVec(t, vec, (short)(t->mval[0] - t->con.imval[0]), (short)(t->mval[1] - t->con.imval[1])); - VecAddf(vec, vec, tc->center); + add_v3_v3v3(vec, vec, tc->center); drawLine(t, tc->center, tc->mtx[0], 'x', 0); drawLine(t, tc->center, tc->mtx[1], 'y', 0); @@ -673,13 +673,13 @@ void drawPropCircle(const struct bContext *C, TransInfo *t) if(t->spacetype == SPACE_VIEW3D && rv3d != NULL) { - Mat4CpyMat4(tmat, rv3d->viewmat); - Mat4Invert(imat, tmat); + copy_m4_m4(tmat, rv3d->viewmat); + invert_m4_m4(imat, tmat); } else { - Mat4One(tmat); - Mat4One(imat); + unit_m4(tmat); + unit_m4(imat); } glPushMatrix(); @@ -756,8 +756,8 @@ void stopConstraint(TransInfo *t) { void getConstraintMatrix(TransInfo *t) { float mat[3][3]; - Mat3Inv(t->con.imtx, t->con.mtx); - Mat3One(t->con.pmtx); + invert_m3_m3(t->con.imtx, t->con.mtx); + unit_m3(t->con.pmtx); if (!(t->con.mode & CON_AXIS0)) { t->con.pmtx[0][0] = @@ -777,15 +777,15 @@ void getConstraintMatrix(TransInfo *t) t->con.pmtx[2][2] = 0.0f; } - Mat3MulMat3(mat, t->con.pmtx, t->con.imtx); - Mat3MulMat3(t->con.pmtx, t->con.mtx, mat); + mul_m3_m3m3(mat, t->con.pmtx, t->con.imtx); + mul_m3_m3m3(t->con.pmtx, t->con.mtx, mat); } /*------------------------- MMB Select -------------------------------*/ void initSelectConstraint(TransInfo *t, float mtx[3][3]) { - Mat3CpyMat3(t->con.mtx, mtx); + copy_m3_m3(t->con.mtx, mtx); t->con.mode |= CON_APPLY; t->con.mode |= CON_SELECT; @@ -852,24 +852,24 @@ static void setNearestAxis3d(TransInfo *t) projecting them with window_to_3d_delta and then get the length of that vector. */ zfac= t->persmat[0][3]*t->center[0]+ t->persmat[1][3]*t->center[1]+ t->persmat[2][3]*t->center[2]+ t->persmat[3][3]; - zfac = VecLength(t->persinv[0]) * 2.0f/t->ar->winx * zfac * 30.0f; + zfac = len_v3(t->persinv[0]) * 2.0f/t->ar->winx * zfac * 30.0f; for (i = 0; i<3; i++) { VECCOPY(axis, t->con.mtx[i]); - VecMulf(axis, zfac); + mul_v3_fl(axis, zfac); /* now we can project to get window coordinate */ - VecAddf(axis, axis, t->con.center); + add_v3_v3v3(axis, axis, t->con.center); projectIntView(t, axis, icoord); axis[0] = (float)(icoord[0] - t->center2d[0]); axis[1] = (float)(icoord[1] - t->center2d[1]); axis[2] = 0.0f; - if (Normalize(axis) != 0.0f) { - Projf(proj, mvec, axis); - VecSubf(axis, mvec, proj); - len[i] = Normalize(axis); + if (normalize_v3(axis) != 0.0f) { + project_v3_v3v3(proj, mvec, axis); + sub_v3_v3v3(axis, mvec, proj); + len[i] = normalize_v3(axis); } else { len[i] = 10000000000.0f; diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index 85ebf725467..808b3ffa4ff 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -135,7 +135,7 @@ //#include "BDR_editobject.h" // reset_slowparents() //#include "BDR_gpencil.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_editVert.h" @@ -263,9 +263,9 @@ static void set_prop_dist(TransInfo *t, short with_dist) for (i = 0, td= t->data; i < t->total; i++, td++) { if(td->flag & TD_SELECTED) { - VecSubf(vec, tob->center, td->center); - Mat3MulVecfl(tob->mtx, vec); - dist = Normalize(vec); + sub_v3_v3v3(vec, tob->center, td->center); + mul_m3_v3(tob->mtx, vec); + dist = normalize_v3(vec); if (tob->rdist == -1.0f) { tob->rdist = dist; } @@ -315,10 +315,10 @@ static void createTransTexspace(bContext *C, TransInfo *t) VECCOPY(td->center, ob->obmat[3]); td->ob = ob; - Mat3CpyMat4(td->mtx, ob->obmat); - Mat3CpyMat4(td->axismtx, ob->obmat); - Mat3Ortho(td->axismtx); - Mat3Inv(td->smtx, td->mtx); + copy_m3_m4(td->mtx, ob->obmat); + copy_m3_m4(td->axismtx, ob->obmat); + normalize_m3(td->axismtx); + invert_m3_m3(td->smtx, td->mtx); if (give_obdata_texspace(ob, &texflag, &td->loc, &td->ext->size, &td->ext->rot)) { *texflag &= ~AUTOSPACE; @@ -358,14 +358,14 @@ static void createTransEdge(bContext *C, TransInfo *t) { td= t->data= MEM_callocN(t->total * sizeof(TransData), "TransCrease"); - Mat3CpyMat4(mtx, t->obedit->obmat); - Mat3Inv(smtx, mtx); + copy_m3_m4(mtx, t->obedit->obmat); + invert_m3_m3(smtx, mtx); for(eed= em->edges.first; eed; eed= eed->next) { if(eed->h==0 && (eed->f & SELECT || propmode)) { /* need to set center for center calculations */ - VecAddf(td->center, eed->v1->co, eed->v2->co); - VecMulf(td->center, 0.5f); + add_v3_v3v3(td->center, eed->v1->co, eed->v2->co); + mul_v3_fl(td->center, 0.5f); td->loc= NULL; if (eed->f & SELECT) @@ -374,8 +374,8 @@ static void createTransEdge(bContext *C, TransInfo *t) { td->flag= 0; - Mat3CpyMat3(td->smtx, smtx); - Mat3CpyMat3(td->mtx, mtx); + copy_m3_m3(td->smtx, smtx); + copy_m3_m3(td->mtx, mtx); td->ext = NULL; if (t->mode == TFM_BWEIGHT) { @@ -460,7 +460,7 @@ static short apply_targetless_ik(Object *ob) float offs_bone[4][4]; /* offs_bone = yoffs(b-1) + root(b) + bonemat(b) */ - Mat4CpyMat3(offs_bone, bone->bone_mat); + copy_m4_m3(offs_bone, bone->bone_mat); /* The bone's root offset (is in the parent's coordinate system) */ VECCOPY(offs_bone[3], bone->head); @@ -471,60 +471,60 @@ static short apply_targetless_ik(Object *ob) /* pose_mat(b-1) * offs_bone */ if(parchan->bone->flag & BONE_HINGE) { /* the rotation of the parent restposition */ - Mat4CpyMat4(rmat, parbone->arm_mat); /* rmat used as temp */ + copy_m4_m4(rmat, parbone->arm_mat); /* rmat used as temp */ /* the location of actual parent transform */ VECCOPY(rmat[3], offs_bone[3]); offs_bone[3][0]= offs_bone[3][1]= offs_bone[3][2]= 0.0f; - Mat4MulVecfl(parchan->parent->pose_mat, rmat[3]); + mul_m4_v3(parchan->parent->pose_mat, rmat[3]); - Mat4MulMat4(tmat, offs_bone, rmat); + mul_m4_m4m4(tmat, offs_bone, rmat); } else if(parchan->bone->flag & BONE_NO_SCALE) { - Mat4MulMat4(tmat, offs_bone, parchan->parent->pose_mat); - Mat4Ortho(tmat); + mul_m4_m4m4(tmat, offs_bone, parchan->parent->pose_mat); + normalize_m4(tmat); } else - Mat4MulMat4(tmat, offs_bone, parchan->parent->pose_mat); + mul_m4_m4m4(tmat, offs_bone, parchan->parent->pose_mat); - Mat4Invert(imat, tmat); + invert_m4_m4(imat, tmat); } else { - Mat4CpyMat3(tmat, bone->bone_mat); + copy_m4_m3(tmat, bone->bone_mat); VECCOPY(tmat[3], bone->head); - Mat4Invert(imat, tmat); + invert_m4_m4(imat, tmat); } /* result matrix */ - Mat4MulMat4(rmat, parchan->pose_mat, imat); + mul_m4_m4m4(rmat, parchan->pose_mat, imat); /* apply and decompose, doesn't work for constraints or non-uniform scale well */ { float rmat3[3][3], qrmat[3][3], imat[3][3], smat[3][3]; - Mat3CpyMat4(rmat3, rmat); + copy_m3_m4(rmat3, rmat); /* rotation */ if (parchan->rotmode > 0) - Mat3ToEulO(rmat3, parchan->eul, parchan->rotmode); + mat3_to_eulO( parchan->eul, parchan->rotmode,rmat3); else if (parchan->rotmode == ROT_MODE_AXISANGLE) - Mat3ToAxisAngle(rmat3, parchan->rotAxis, &pchan->rotAngle); + mat3_to_axis_angle( parchan->rotAxis, &pchan->rotAngle,rmat3); else - Mat3ToQuat(rmat3, parchan->quat); + mat3_to_quat( parchan->quat,rmat3); /* for size, remove rotation */ /* causes problems with some constraints (so apply only if needed) */ if (data->flag & CONSTRAINT_IK_STRETCH) { if (parchan->rotmode > 0) - EulOToMat3(parchan->eul, parchan->rotmode, qrmat); + eulO_to_mat3( qrmat,parchan->eul, parchan->rotmode); else if (parchan->rotmode == ROT_MODE_AXISANGLE) - AxisAngleToMat3(parchan->rotAxis, parchan->rotAngle, qrmat); + axis_angle_to_mat3( qrmat,parchan->rotAxis, parchan->rotAngle); else - QuatToMat3(parchan->quat, qrmat); + quat_to_mat3( qrmat,parchan->quat); - Mat3Inv(imat, qrmat); - Mat3MulMat3(smat, rmat3, imat); - Mat3ToSize(smat, parchan->size); + invert_m3_m3(imat, qrmat); + mul_m3_m3m3(smat, rmat3, imat); + mat3_to_size( parchan->size,smat); } /* causes problems with some constraints (e.g. childof), so disable this */ @@ -602,38 +602,38 @@ static void add_pose_transdata(TransInfo *t, bPoseChannel *pchan, Object *ob, Tr /* proper way to get parent transform + own transform + constraints transform */ - Mat3CpyMat4(omat, ob->obmat); + copy_m3_m4(omat, ob->obmat); if (pchan->parent) { if(pchan->bone->flag & BONE_HINGE) - Mat3CpyMat4(pmat, pchan->parent->bone->arm_mat); + copy_m3_m4(pmat, pchan->parent->bone->arm_mat); else - Mat3CpyMat4(pmat, pchan->parent->pose_mat); + copy_m3_m4(pmat, pchan->parent->pose_mat); if (constraints_list_needinv(t, &pchan->constraints)) { - Mat3CpyMat4(tmat, pchan->constinv); - Mat3Inv(cmat, tmat); - Mat3MulSerie(td->mtx, pchan->bone->bone_mat, pmat, omat, cmat, 0,0,0,0); // dang mulserie swaps args + copy_m3_m4(tmat, pchan->constinv); + invert_m3_m3(cmat, tmat); + mul_serie_m3(td->mtx, pchan->bone->bone_mat, pmat, omat, cmat, 0,0,0,0); // dang mulserie swaps args } else - Mat3MulSerie(td->mtx, pchan->bone->bone_mat, pmat, omat, 0,0,0,0,0); // dang mulserie swaps args + mul_serie_m3(td->mtx, pchan->bone->bone_mat, pmat, omat, 0,0,0,0,0); // dang mulserie swaps args } else { if (constraints_list_needinv(t, &pchan->constraints)) { - Mat3CpyMat4(tmat, pchan->constinv); - Mat3Inv(cmat, tmat); - Mat3MulSerie(td->mtx, pchan->bone->bone_mat, omat, cmat, 0,0,0,0,0); // dang mulserie swaps args + copy_m3_m4(tmat, pchan->constinv); + invert_m3_m3(cmat, tmat); + mul_serie_m3(td->mtx, pchan->bone->bone_mat, omat, cmat, 0,0,0,0,0); // dang mulserie swaps args } else - Mat3MulMat3(td->mtx, omat, pchan->bone->bone_mat); // Mat3MulMat3 has swapped args! + mul_m3_m3m3(td->mtx, omat, pchan->bone->bone_mat); // Mat3MulMat3 has swapped args! } - Mat3Inv(td->smtx, td->mtx); + invert_m3_m3(td->smtx, td->mtx); /* for axismat we use bone's own transform */ - Mat3CpyMat4(pmat, pchan->pose_mat); - Mat3MulMat3(td->axismtx, omat, pmat); - Mat3Ortho(td->axismtx); + copy_m3_m4(pmat, pchan->pose_mat); + mul_m3_m3m3(td->axismtx, omat, pmat); + normalize_m3(td->axismtx); if (t->mode==TFM_BONESIZE) { bArmature *arm= t->poseobj->data; @@ -666,8 +666,8 @@ static void add_pose_transdata(TransInfo *t, bPoseChannel *pchan, Object *ob, Tr data->flag |= CONSTRAINT_IK_AUTO; /* only object matrix correction */ - Mat3CpyMat3 (td->mtx, omat); - Mat3Inv (td->smtx, td->mtx); + copy_m3_m3(td->mtx, omat); + invert_m3_m3(td->smtx, td->mtx); } } @@ -1080,8 +1080,8 @@ static void createTransArmatureVerts(bContext *C, TransInfo *t) if (!t->total) return; - Mat3CpyMat4(mtx, t->obedit->obmat); - Mat3Inv(smtx, mtx); + copy_m3_m4(mtx, t->obedit->obmat); + invert_m3_m3(smtx, mtx); td = t->data = MEM_callocN(t->total*sizeof(TransData), "TransEditBone"); @@ -1100,8 +1100,8 @@ static void createTransArmatureVerts(bContext *C, TransInfo *t) VECCOPY (td->center, ebo->head); td->flag= TD_SELECTED; - Mat3CpyMat3(td->smtx, smtx); - Mat3CpyMat3(td->mtx, mtx); + copy_m3_m3(td->smtx, smtx); + copy_m3_m3(td->mtx, mtx); td->loc = NULL; td->ext = NULL; @@ -1115,8 +1115,8 @@ static void createTransArmatureVerts(bContext *C, TransInfo *t) VECCOPY (td->center, ebo->tail); td->flag= TD_SELECTED; - Mat3CpyMat3(td->smtx, smtx); - Mat3CpyMat3(td->mtx, mtx); + copy_m3_m3(td->smtx, smtx); + copy_m3_m3(td->mtx, mtx); td->loc = NULL; td->ext = NULL; @@ -1145,13 +1145,13 @@ static void createTransArmatureVerts(bContext *C, TransInfo *t) td->flag= TD_SELECTED; /* use local bone matrix */ - VecSubf(delta, ebo->tail, ebo->head); + sub_v3_v3v3(delta, ebo->tail, ebo->head); vec_roll_to_mat3(delta, ebo->roll, bonemat); - Mat3MulMat3(td->mtx, mtx, bonemat); - Mat3Inv(td->smtx, td->mtx); + mul_m3_m3m3(td->mtx, mtx, bonemat); + invert_m3_m3(td->smtx, td->mtx); - Mat3CpyMat3(td->axismtx, td->mtx); - Mat3Ortho(td->axismtx); + copy_m3_m3(td->axismtx, td->mtx); + normalize_m3(td->axismtx); td->ext = NULL; @@ -1185,10 +1185,10 @@ static void createTransArmatureVerts(bContext *C, TransInfo *t) if (ebo->flag & BONE_EDITMODE_LOCKED) td->protectflag = OB_LOCK_LOC|OB_LOCK_ROT|OB_LOCK_SCALE; - Mat3CpyMat3(td->smtx, smtx); - Mat3CpyMat3(td->mtx, mtx); + copy_m3_m3(td->smtx, smtx); + copy_m3_m3(td->mtx, mtx); - VecSubf(delta, ebo->tail, ebo->head); + sub_v3_v3v3(delta, ebo->tail, ebo->head); vec_roll_to_mat3(delta, ebo->roll, td->axismtx); if ((ebo->flag & BONE_ROOTSEL) == 0) @@ -1210,10 +1210,10 @@ static void createTransArmatureVerts(bContext *C, TransInfo *t) if (ebo->flag & BONE_EDITMODE_LOCKED) td->protectflag = OB_LOCK_LOC|OB_LOCK_ROT|OB_LOCK_SCALE; - Mat3CpyMat3(td->smtx, smtx); - Mat3CpyMat3(td->mtx, mtx); + copy_m3_m3(td->smtx, smtx); + copy_m3_m3(td->mtx, mtx); - VecSubf(delta, ebo->tail, ebo->head); + sub_v3_v3v3(delta, ebo->tail, ebo->head); vec_roll_to_mat3(delta, ebo->roll, td->axismtx); td->extra = ebo; /* to fix roll */ @@ -1255,8 +1255,8 @@ static void createTransMBallVerts(bContext *C, TransInfo *t) td = t->data= MEM_callocN(t->total*sizeof(TransData), "TransObData(MBall EditMode)"); tx = t->ext = MEM_callocN(t->total*sizeof(TransDataExtension), "MetaElement_TransExtension"); - Mat3CpyMat4(mtx, t->obedit->obmat); - Mat3Inv(smtx, mtx); + copy_m3_m4(mtx, t->obedit->obmat); + invert_m3_m3(smtx, mtx); for(ml= mb->editelems->first; ml; ml= ml->next) { if(propmode || (ml->flag & SELECT)) { @@ -1267,8 +1267,8 @@ static void createTransMBallVerts(bContext *C, TransInfo *t) if(ml->flag & SELECT) td->flag= TD_SELECTED | TD_USEQUAT | TD_SINGLESIZE; else td->flag= TD_USEQUAT; - Mat3CpyMat3(td->smtx, smtx); - Mat3CpyMat3(td->mtx, mtx); + copy_m3_m3(td->smtx, smtx); + copy_m3_m3(td->mtx, mtx); td->ext = tx; @@ -1311,7 +1311,7 @@ static void calc_distanceCurveVerts(TransData *head, TransData *tail) { } else if(td_near) { float dist; - dist = VecLenf(td_near->center, td->center); + dist = len_v3v3(td_near->center, td->center); if (dist < (td-1)->dist) { td->dist = (td-1)->dist; } @@ -1332,7 +1332,7 @@ static void calc_distanceCurveVerts(TransData *head, TransData *tail) { } else if(td_near) { float dist; - dist = VecLenf(td_near->center, td->center); + dist = len_v3v3(td_near->center, td->center); if (td->flag & TD_NOTCONNECTED || dist < td->dist || (td+1)->dist < td->dist) { td->flag &= ~TD_NOTCONNECTED; if (dist < (td+1)->dist) { @@ -1408,8 +1408,8 @@ static void createTransCurveVerts(bContext *C, TransInfo *t) else t->total = countsel; t->data= MEM_callocN(t->total*sizeof(TransData), "TransObData(Curve EditMode)"); - Mat3CpyMat4(mtx, t->obedit->obmat); - Mat3Inv(smtx, mtx); + copy_m3_m4(mtx, t->obedit->obmat); + invert_m3_m3(smtx, mtx); td = t->data; for(nu= cu->editnurb->first; nu; nu= nu->next) { @@ -1439,8 +1439,8 @@ static void createTransCurveVerts(bContext *C, TransInfo *t) hdata = initTransDataCurveHandles(td, bezt); - Mat3CpyMat3(td->smtx, smtx); - Mat3CpyMat3(td->mtx, mtx); + copy_m3_m3(td->smtx, smtx); + copy_m3_m3(td->mtx, mtx); td++; count++; @@ -1466,8 +1466,8 @@ static void createTransCurveVerts(bContext *C, TransInfo *t) td->val = NULL; } - Mat3CpyMat3(td->smtx, smtx); - Mat3CpyMat3(td->mtx, mtx); + copy_m3_m3(td->smtx, smtx); + copy_m3_m3(td->mtx, mtx); if ((bezt->f1&SELECT)==0 && (bezt->f3&SELECT)==0) /* If the middle is selected but the sides arnt, this is needed */ @@ -1500,8 +1500,8 @@ static void createTransCurveVerts(bContext *C, TransInfo *t) hdata = initTransDataCurveHandles(td, bezt); } - Mat3CpyMat3(td->smtx, smtx); - Mat3CpyMat3(td->mtx, mtx); + copy_m3_m3(td->smtx, smtx); + copy_m3_m3(td->mtx, mtx); td++; count++; @@ -1542,8 +1542,8 @@ static void createTransCurveVerts(bContext *C, TransInfo *t) td->ival = bp->alfa; } - Mat3CpyMat3(td->smtx, smtx); - Mat3CpyMat3(td->mtx, mtx); + copy_m3_m3(td->smtx, smtx); + copy_m3_m3(td->mtx, mtx); td++; count++; @@ -1590,8 +1590,8 @@ static void createTransLatticeVerts(bContext *C, TransInfo *t) else t->total = countsel; t->data= MEM_callocN(t->total*sizeof(TransData), "TransObData(Lattice EditMode)"); - Mat3CpyMat4(mtx, t->obedit->obmat); - Mat3Inv(smtx, mtx); + copy_m3_m4(mtx, t->obedit->obmat); + invert_m3_m3(smtx, mtx); td = t->data; bp = latt->def; @@ -1604,8 +1604,8 @@ static void createTransLatticeVerts(bContext *C, TransInfo *t) VECCOPY(td->center, td->loc); if(bp->f1 & SELECT) td->flag= TD_SELECTED; else td->flag= 0; - Mat3CpyMat3(td->smtx, smtx); - Mat3CpyMat3(td->mtx, mtx); + copy_m3_m3(td->smtx, smtx); + copy_m3_m3(td->mtx, mtx); td->ext = NULL; td->val = NULL; @@ -1679,9 +1679,9 @@ static void createTransParticleVerts(bContext *C, TransInfo *t) else tx = t->ext = NULL; - Mat4One(mat); + unit_m4(mat); - Mat4Invert(ob->imat,ob->obmat); + invert_m4_m4(ob->imat,ob->obmat); for(i=0, point=edit->points; i<edit->totpoint; i++, point++) { TransData *head, *tail; @@ -1695,7 +1695,7 @@ static void createTransParticleVerts(bContext *C, TransInfo *t) for(k=0, key=point->keys; k<point->totkey; k++, key++) { if(key->flag & PEK_USE_WCO) { VECCOPY(key->world_co, key->co); - Mat4MulVecfl(mat, key->world_co); + mul_m4_v3(mat, key->world_co); td->loc = key->world_co; } else @@ -1709,8 +1709,8 @@ static void createTransParticleVerts(bContext *C, TransInfo *t) else if(!propmode) td->flag |= TD_SKIP; - Mat3One(td->mtx); - Mat3One(td->smtx); + unit_m3(td->mtx); + unit_m3(td->smtx); /* don't allow moving roots */ if(k==0 && pset->flag & PE_LOCK_FIRST && (!psys || !(psys->flag & PSYS_GLOBAL_HAIR))) @@ -1764,15 +1764,15 @@ void flushTransParticles(TransInfo *t) if(psys && !(psys->flag & PSYS_GLOBAL_HAIR)) { psys_mat_hair_to_global(ob, psmd->dm, psys->part->from, psys->particles + i, mat); - Mat4Invert(imat,mat); + invert_m4_m4(imat,mat); for(k=0, key=point->keys; k<point->totkey; k++, key++) { VECCOPY(co, key->world_co); - Mat4MulVecfl(imat, co); + mul_m4_v3(imat, co); /* optimization for proportional edit */ - if(!propmode || !FloatCompare(key->co, co, 0.0001f)) { + if(!propmode || !compare_v3v3(key->co, co, 0.0001f)) { VECCOPY(key->co, co); point->flag |= PEP_EDIT_RECALC; } @@ -1838,13 +1838,13 @@ static void editmesh_set_connectivity_distance(EditMesh *em, int total, float *v if (v1->f2) { if (v2->f2) { float nvec[3]; - float len1 = VecLength(vec1); - float len2 = VecLength(vec2); + float len1 = len_v3(vec1); + float len2 = len_v3(vec2); float lenn; /* for v2 if not selected */ if (v2->f2 != 2) { - VecSubf(nvec, v2->co, E_NEAR(v1)->co); - lenn = VecLength(nvec); + sub_v3_v3v3(nvec, v2->co, E_NEAR(v1)->co); + lenn = len_v3(nvec); /* 1 < n < 2 */ if (lenn - len1 > THRESHOLD && len2 - lenn > THRESHOLD) { VECCOPY(vec2, nvec); @@ -1860,8 +1860,8 @@ static void editmesh_set_connectivity_distance(EditMesh *em, int total, float *v } /* for v1 if not selected */ if (v1->f2 != 2) { - VecSubf(nvec, v1->co, E_NEAR(v2)->co); - lenn = VecLength(nvec); + sub_v3_v3v3(nvec, v1->co, E_NEAR(v2)->co); + lenn = len_v3(nvec); /* 2 < n < 1 */ if (lenn - len2 > THRESHOLD && len1 - lenn > THRESHOLD) { VECCOPY(vec1, nvec); @@ -1878,9 +1878,9 @@ static void editmesh_set_connectivity_distance(EditMesh *em, int total, float *v } else { v2->f2 = 1; - VecSubf(vec2, v2->co, E_NEAR(v1)->co); + sub_v3_v3v3(vec2, v2->co, E_NEAR(v1)->co); /* 2 < 1 */ - if (VecLength(vec1) - VecLength(vec2) > THRESHOLD) { + if (len_v3(vec1) - len_v3(vec2) > THRESHOLD) { VECCOPY(vec2, vec1); } E_NEAR(v2) = E_NEAR(v1); @@ -1889,9 +1889,9 @@ static void editmesh_set_connectivity_distance(EditMesh *em, int total, float *v } else if (v2->f2) { v1->f2 = 1; - VecSubf(vec1, v1->co, E_NEAR(v2)->co); + sub_v3_v3v3(vec1, v1->co, E_NEAR(v2)->co); /* 2 < 1 */ - if (VecLength(vec2) - VecLength(vec1) > THRESHOLD) { + if (len_v3(vec2) - len_v3(vec1) > THRESHOLD) { VECCOPY(vec1, vec2); } E_NEAR(v1) = E_NEAR(v2); @@ -2009,13 +2009,13 @@ static void set_crazy_vertex_quat(float *quat, float *v1, float *v2, float *v3, TAN_MAKE_VEC(vecu, v1, v2); TAN_MAKE_VEC(vecv, v1, v3); - triatoquat(v1, vecu, vecv, q1); + tri_to_quat( q1,v1, vecu, vecv); TAN_MAKE_VEC(vecu, def1, def2); TAN_MAKE_VEC(vecv, def1, def3); - triatoquat(def1, vecu, vecv, q2); + tri_to_quat( q2,def1, vecu, vecv); - QuatSub(quat, q2, q1); + sub_qt_qtqt(quat, q2, q1); } #undef TAN_MAKE_VEC @@ -2192,8 +2192,8 @@ static void createTransEditVerts(bContext *C, TransInfo *t) else t->total = countsel; tob= t->data= MEM_callocN(t->total*sizeof(TransData), "TransObData(Mesh EditMode)"); - Mat3CpyMat4(mtx, t->obedit->obmat); - Mat3Inv(smtx, mtx); + copy_m3_m4(mtx, t->obedit->obmat); + invert_m3_m3(smtx, mtx); if(propmode) editmesh_set_connectivity_distance(em, t->total, vectors, nears); @@ -2251,8 +2251,8 @@ static void createTransEditVerts(bContext *C, TransInfo *t) if (eve->f2) { float vec[3]; VECCOPY(vec, E_VEC(eve)); - Mat3MulVecfl(mtx, vec); - tob->dist= VecLength(vec); + mul_m3_v3(mtx, vec); + tob->dist= len_v3(vec); } else { tob->flag |= TD_NOTCONNECTED; @@ -2266,25 +2266,25 @@ static void createTransEditVerts(bContext *C, TransInfo *t) /* use both or either quat and defmat correction */ if(quats && eve->tmp.f) { - QuatToMat3(eve->tmp.p, qmat); + quat_to_mat3( qmat,eve->tmp.p); if(defmats) - Mat3MulSerie(mat, mtx, qmat, defmats[a], + mul_serie_m3(mat, mtx, qmat, defmats[a], NULL, NULL, NULL, NULL, NULL); else - Mat3MulMat3(mat, mtx, qmat); + mul_m3_m3m3(mat, mtx, qmat); } else - Mat3MulMat3(mat, mtx, defmats[a]); + mul_m3_m3m3(mat, mtx, defmats[a]); - Mat3Inv(imat, mat); + invert_m3_m3(imat, mat); - Mat3CpyMat3(tob->smtx, imat); - Mat3CpyMat3(tob->mtx, mat); + copy_m3_m3(tob->smtx, imat); + copy_m3_m3(tob->mtx, mat); } else { - Mat3CpyMat3(tob->smtx, smtx); - Mat3CpyMat3(tob->mtx, mtx); + copy_m3_m3(tob->smtx, smtx); + copy_m3_m3(tob->mtx, mtx); } /* Mirror? */ @@ -2459,8 +2459,8 @@ static void UVsToTransData(SpaceImage *sima, TransData *td, TransData2D *td2d, f else { td->dist= MAXFLOAT; } - Mat3One(td->mtx); - Mat3One(td->smtx); + unit_m3(td->mtx); + unit_m3(td->smtx); } static void createTransUVs(bContext *C, TransInfo *t) @@ -2755,8 +2755,8 @@ static void createTransNlaData(bContext *C, TransInfo *t) td->flag |= TD_SELECTED; td->dist= 0.0f; - Mat3One(td->mtx); - Mat3One(td->smtx); + unit_m3(td->mtx); + unit_m3(td->smtx); } else { td->val= &tdn->h1[0]; @@ -2786,8 +2786,8 @@ static void createTransNlaData(bContext *C, TransInfo *t) td->flag |= TD_SELECTED; td->dist= 0.0f; - Mat3One(td->mtx); - Mat3One(td->smtx); + unit_m3(td->mtx); + unit_m3(td->smtx); } else { td->val= &tdn->h2[0]; @@ -3351,8 +3351,8 @@ static void bezt_to_transdata (TransData *td, TransData2D *td2d, AnimData *adt, if (intvals) td->flag |= TD_INTVALUES; - Mat3One(td->mtx); - Mat3One(td->smtx); + unit_m3(td->mtx); + unit_m3(td->smtx); } static void createTransGraphEditData(bContext *C, TransInfo *t) @@ -3986,8 +3986,8 @@ static TransData *SeqToTransData(TransInfo *t, TransData *td, TransData2D *td2d, td->flag |= TD_SELECTED; td->dist= 0.0; - Mat3One(td->mtx); - Mat3One(td->smtx); + unit_m3(td->mtx); + unit_m3(td->smtx); /* Time Transform (extend) */ td->val= td2d->loc; @@ -4200,8 +4200,8 @@ static void ObjectToTransData(bContext *C, TransInfo *t, TransData *td, Object * short skip_invert = 0; /* axismtx has the real orientation */ - Mat3CpyMat4(td->axismtx, ob->obmat); - Mat3Ortho(td->axismtx); + copy_m3_m4(td->axismtx, ob->obmat); + normalize_m3(td->axismtx); td->con= ob->constraints.first; @@ -4280,7 +4280,7 @@ static void ObjectToTransData(bContext *C, TransInfo *t, TransData *td, Object * VECCOPY(td->center, ob->obmat[3]); - Mat4CpyMat4(td->ext->obmat, ob->obmat); + copy_m4_m4(td->ext->obmat, ob->obmat); /* is there a need to set the global<->data space conversion matrices? */ if (ob->parent || constinv) { @@ -4291,15 +4291,15 @@ static void ObjectToTransData(bContext *C, TransInfo *t, TransData *td, Object * * done, as it doesn't work well. */ object_to_mat3(ob, obmtx); - Mat3CpyMat4(totmat, ob->obmat); - Mat3Inv(obinv, totmat); - Mat3MulMat3(td->smtx, obmtx, obinv); - Mat3Inv(td->mtx, td->smtx); + copy_m3_m4(totmat, ob->obmat); + invert_m3_m3(obinv, totmat); + mul_m3_m3m3(td->smtx, obmtx, obinv); + invert_m3_m3(td->mtx, td->smtx); } else { /* no conversion to/from dataspace */ - Mat3One(td->smtx); - Mat3One(td->mtx); + unit_m3(td->smtx); + unit_m3(td->mtx); } /* set active flag */ @@ -5152,8 +5152,8 @@ static void NodeToTransData(TransData *td, TransData2D *td2d, bNode *node) td->flag |= TD_SELECTED; td->dist= 0.0; - Mat3One(td->mtx); - Mat3One(td->smtx); + unit_m3(td->mtx); + unit_m3(td->smtx); } void createTransNodeData(bContext *C, TransInfo *t) diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index 17818713b1e..d3c0e91e57c 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -100,7 +100,7 @@ //#include "BDR_unwrapper.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_editVert.h" #include "BLI_rand.h" @@ -131,20 +131,20 @@ void getViewVector(TransInfo *t, float coord[3], float vec[3]) p1[3] = 1.0f; VECCOPY(p2, p1); p2[3] = 1.0f; - Mat4MulVec4fl(t->viewmat, p2); + mul_m4_v4(t->viewmat, p2); p2[0] = 2.0f * p2[0]; p2[1] = 2.0f * p2[1]; p2[2] = 2.0f * p2[2]; - Mat4MulVec4fl(t->viewinv, p2); + mul_m4_v4(t->viewinv, p2); - VecSubf(vec, p1, p2); + sub_v3_v3v3(vec, p1, p2); } else { VECCOPY(vec, t->viewinv[2]); } - Normalize(vec); + normalize_v3(vec); } /* ************************** GENERICS **************************** */ @@ -181,9 +181,9 @@ static void clipMirrorModifier(TransInfo *t, Object *ob) if (mmd->mirror_ob) { float obinv[4][4]; - Mat4Invert(obinv, mmd->mirror_ob->obmat); - Mat4MulMat4(mtx, ob->obmat, obinv); - Mat4Invert(imtx, mtx); + invert_m4_m4(obinv, mmd->mirror_ob->obmat); + mul_m4_m4m4(mtx, ob->obmat, obinv); + invert_m4_m4(imtx, mtx); } for(i = 0 ; i < t->total; i++, td++) { @@ -198,12 +198,12 @@ static void clipMirrorModifier(TransInfo *t, Object *ob) if (td->flag & TD_SKIP) continue; - VecCopyf(loc, td->loc); - VecCopyf(iloc, td->iloc); + copy_v3_v3(loc, td->loc); + copy_v3_v3(iloc, td->iloc); if (mmd->mirror_ob) { - VecMat4MulVecfl(loc, mtx, loc); - VecMat4MulVecfl(iloc, mtx, iloc); + mul_v3_m4v3(loc, mtx, loc); + mul_v3_m4v3(iloc, mtx, iloc); } clip = 0; @@ -231,9 +231,9 @@ static void clipMirrorModifier(TransInfo *t, Object *ob) } if (clip) { if (mmd->mirror_ob) { - VecMat4MulVecfl(loc, imtx, loc); + mul_v3_m4v3(loc, imtx, loc); } - VecCopyf(td->loc, loc); + copy_v3_v3(td->loc, loc); } } } @@ -692,7 +692,7 @@ void recalcData(TransInfo *t) } /* on extrude bones, oldlength==0.0f, so we scale radius of points */ - ebo->length= VecLenf(ebo->head, ebo->tail); + ebo->length= len_v3v3(ebo->head, ebo->tail); if(ebo->oldlength==0.0f) { ebo->rad_head= 0.25f*ebo->length; ebo->rad_tail= 0.10f*ebo->length; @@ -727,14 +727,14 @@ void recalcData(TransInfo *t) if (t->mode != TFM_ROTATION) { - VecSubf(vec, ebo->tail, ebo->head); - Normalize(vec); - RotationBetweenVectorsToQuat(qrot, td->axismtx[1], vec); - QuatMulVecf(qrot, up_axis); + sub_v3_v3v3(vec, ebo->tail, ebo->head); + normalize_v3(vec); + rotation_between_vecs_to_quat(qrot, td->axismtx[1], vec); + mul_qt_v3(qrot, up_axis); } else { - Mat3MulVecfl(t->mat, up_axis); + mul_m3_v3(t->mat, up_axis); } ebo->roll = ED_rollBoneToVector(ebo, up_axis); @@ -835,11 +835,11 @@ void drawLine(TransInfo *t, float *center, float *dir, char axis, short options) //if(t->obedit) glLoadMatrixf(t->obedit->obmat); // sets opengl viewing - VecCopyf(v3, dir); - VecMulf(v3, v3d->far); + copy_v3_v3(v3, dir); + mul_v3_fl(v3, v3d->far); - VecSubf(v2, center, v3); - VecAddf(v1, center, v3); + sub_v3_v3v3(v2, center, v3); + add_v3_v3v3(v1, center, v3); if (options & DRAWLIGHT) { col[0] = col[1] = col[2] = 220; @@ -928,7 +928,7 @@ int initTransInfo (bContext *C, TransInfo *t, wmOperator *op, wmEvent *event) t->center[1] = t->center[2] = 0.0f; - Mat3One(t->mat); + unit_m3(t->mat); t->spacetype = sa->spacetype; if(t->spacetype == SPACE_VIEW3D) @@ -1155,7 +1155,7 @@ void restoreTransObjects(TransInfo *t) restoreElement(td); } - Mat3One(t->mat); + unit_m3(t->mat); recalcData(t); } @@ -1167,7 +1167,7 @@ void calculateCenter2D(TransInfo *t) float vec[3]; VECCOPY(vec, t->center); - Mat4MulVecfl(ob->obmat, vec); + mul_m4_v3(ob->obmat, vec); projectIntView(t, vec, t->center2d); } else { @@ -1187,10 +1187,10 @@ void calculateCenterCursor(TransInfo *t) Object *ob = t->obedit?t->obedit:t->poseobj; float mat[3][3], imat[3][3]; - VecSubf(t->center, t->center, ob->obmat[3]); - Mat3CpyMat4(mat, ob->obmat); - Mat3Inv(imat, mat); - Mat3MulVecfl(imat, t->center); + sub_v3_v3v3(t->center, t->center, ob->obmat[3]); + copy_m3_m4(mat, ob->obmat); + invert_m3_m3(imat, mat); + mul_m3_v3(imat, t->center); } calculateCenter2D(t); @@ -1234,7 +1234,7 @@ void calculateCenterMedian(TransInfo *t) if (t->data[i].flag & TD_SELECTED) { if (!(t->data[i].flag & TD_NOCENTER)) { - VecAddf(partial, partial, t->data[i].center); + add_v3_v3v3(partial, partial, t->data[i].center); total++; } } @@ -1247,7 +1247,7 @@ void calculateCenterMedian(TransInfo *t) } } if(i) - VecMulf(partial, 1.0f / total); + mul_v3_fl(partial, 1.0f / total); VECCOPY(t->center, partial); calculateCenter2D(t); @@ -1262,7 +1262,7 @@ void calculateCenterBound(TransInfo *t) if (i) { if (t->data[i].flag & TD_SELECTED) { if (!(t->data[i].flag & TD_NOCENTER)) - MinMax3(min, max, t->data[i].center); + minmax_v3_v3v3(min, max, t->data[i].center); } else { /* @@ -1277,8 +1277,8 @@ void calculateCenterBound(TransInfo *t) VECCOPY(min, t->data[i].center); } } - VecAddf(t->center, min, max); - VecMulf(t->center, 0.5); + add_v3_v3v3(t->center, min, max); + mul_v3_fl(t->center, 0.5); calculateCenter2D(t); } @@ -1307,16 +1307,19 @@ void calculateCenter(TransInfo *t) case V3D_ACTIVE: { /* set median, and if if if... do object center */ -#if 0 // TRANSFORM_FIX_ME - EditSelection ese; + /* EDIT MODE ACTIVE EDITMODE ELEMENT */ - if (t->obedit && t->obedit->type == OB_MESH && EM_get_actSelection(&ese)) { - EM_editselection_center(t->center, &ese); - calculateCenter2D(t); - break; + if (t->obedit && t->obedit->type == OB_MESH) { + EditSelection ese; + EditMesh *em = BKE_mesh_get_editmesh(t->obedit->data); + + if (EM_get_actSelection(em, &ese)) { + EM_editselection_center(t->center, &ese); + calculateCenter2D(t); + break; + } } /* END EDIT MODE ACTIVE ELEMENT */ -#endif calculateCenterMedian(t); if((t->flag & (T_EDIT|T_POSE))==0) @@ -1338,7 +1341,7 @@ void calculateCenter(TransInfo *t) if(t->flag & (T_EDIT|T_POSE)) { Object *ob= t->obedit?t->obedit:t->poseobj; - Mat4MulVecfl(ob->obmat, t->con.center); + mul_m4_v3(ob->obmat, t->con.center); } /* for panning from cameraview */ @@ -1355,7 +1358,7 @@ void calculateCenter(TransInfo *t) float axis[3]; /* persinv is nasty, use viewinv instead, always right */ VECCOPY(axis, t->viewinv[2]); - Normalize(axis); + normalize_v3(axis); /* 6.0 = 6 grid units */ axis[0]= t->center[0]- 6.0f*axis[0]; @@ -1382,7 +1385,7 @@ void calculateCenter(TransInfo *t) float vec[3]; VECCOPY(vec, t->center); - Mat4MulVecfl(ob->obmat, vec); + mul_m4_v3(ob->obmat, vec); initgrabz(t->ar->regiondata, vec[0], vec[1], vec[2]); } else { @@ -1506,9 +1509,9 @@ float get_drawsize(ARegion *ar, float *co) size= rv3d->persmat[0][3]*co[0]+ rv3d->persmat[1][3]*co[1]+ rv3d->persmat[2][3]*co[2]+ rv3d->persmat[3][3]; VECCOPY(vec, rv3d->persinv[0]); - len1= Normalize(vec); + len1= normalize_v3(vec); VECCOPY(vec, rv3d->persinv[1]); - len2= Normalize(vec); + len2= normalize_v3(vec); size*= 0.01f*(len1>len2?len1:len2); diff --git a/source/blender/editors/transform/transform_input.c b/source/blender/editors/transform/transform_input.c index 83d4a314057..bccbfbc65f7 100644 --- a/source/blender/editors/transform/transform_input.c +++ b/source/blender/editors/transform/transform_input.c @@ -28,7 +28,7 @@ #include "DNA_screen_types.h" #include "DNA_windowmanager_types.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "WM_types.h" @@ -45,9 +45,9 @@ void InputVector(TransInfo *t, MouseInput *mi, short mval[2], float output[3]) { /* calculate the main translation and the precise one separate */ convertViewVec(t, dvec, (short)(mval[0] - mi->precision_mval[0]), (short)(mval[1] - mi->precision_mval[1])); - VecMulf(dvec, 0.1f); + mul_v3_fl(dvec, 0.1f); convertViewVec(t, vec, (short)(mi->precision_mval[0] - t->imval[0]), (short)(mi->precision_mval[1] - t->imval[1])); - VecAddf(output, vec, dvec); + add_v3_v3v3(output, vec, dvec); } else { @@ -133,9 +133,9 @@ void InputHorizontalAbsolute(TransInfo *t, MouseInput *mi, short mval[2], float float vec[3]; InputVector(t, mi, mval, vec); - Projf(vec, vec, t->viewinv[0]); + project_v3_v3v3(vec, vec, t->viewinv[0]); - output[0] = Inpf(t->viewinv[0], vec) * 2.0f; + output[0] = dot_v3v3(t->viewinv[0], vec) * 2.0f; } void InputVerticalRatio(TransInfo *t, MouseInput *mi, short mval[2], float output[3]) { @@ -158,9 +158,9 @@ void InputVerticalAbsolute(TransInfo *t, MouseInput *mi, short mval[2], float ou float vec[3]; InputVector(t, mi, mval, vec); - Projf(vec, vec, t->viewinv[1]); + project_v3_v3v3(vec, vec, t->viewinv[1]); - output[0] = Inpf(t->viewinv[1], vec) * 2.0f; + output[0] = dot_v3v3(t->viewinv[1], vec) * 2.0f; } void setCustomPoints(TransInfo *t, MouseInput *mi, short start[2], short end[2]) diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c index a1d62f93568..fe79e9b4285 100644 --- a/source/blender/editors/transform/transform_manipulator.c +++ b/source/blender/editors/transform/transform_manipulator.c @@ -55,6 +55,7 @@ #include "RNA_access.h" +#include "BKE_action.h" #include "BKE_armature.h" #include "BKE_context.h" #include "BKE_global.h" @@ -65,7 +66,7 @@ #include "BKE_pointcache.h" #include "BKE_utildefines.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_editVert.h" #include "BIF_gl.h" @@ -115,8 +116,8 @@ static int is_mat4_flipped(float mat[][4]) { float vec[3]; - Crossf(vec, mat[0], mat[1]); - if( Inpf(vec, mat[2]) < 0.0 ) return 1; + cross_v3_v3v3(vec, mat[0], mat[1]); + if( dot_v3v3(vec, mat[2]) < 0.0 ) return 1; return 0; } @@ -128,7 +129,7 @@ static void calc_tw_center(Scene *scene, float *co) float *max= scene->twmax; DO_MINMAX(co, min, max); - VecAddf(twcent, twcent, co); + add_v3_v3v3(twcent, twcent, co); } static void protectflag_to_drawflags(short protectflag, short *drawflags) @@ -185,44 +186,35 @@ void gimbal_axis(Object *ob, float gmat[][3]) { if(ob->mode & OB_MODE_POSE) { - bPoseChannel *pchan= NULL; + bPoseChannel *pchan= get_active_posechannel(ob); - /* use channels to get stats */ - for(pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { - if (pchan->bone && pchan->bone->flag & BONE_ACTIVE) { - if(test_rotmode_euler(pchan->rotmode)) { - break; - } - } - } - - if(pchan) { + if(pchan && test_rotmode_euler(pchan->rotmode)) { float mat[3][3], tmat[3][3], obmat[3][3]; - EulToGimbalAxis(mat, pchan->eul, pchan->rotmode); + eulO_to_gimbal_axis(mat, pchan->eul, pchan->rotmode); /* apply bone transformation */ - Mat3MulMat3(tmat, pchan->bone->bone_mat, mat); + mul_m3_m3m3(tmat, pchan->bone->bone_mat, mat); if (pchan->parent) { float parent_mat[3][3]; - Mat3CpyMat4(parent_mat, pchan->parent->pose_mat); - Mat3MulMat3(mat, parent_mat, tmat); + copy_m3_m4(parent_mat, pchan->parent->pose_mat); + mul_m3_m3m3(mat, parent_mat, tmat); /* needed if object transformation isn't identity */ - Mat3CpyMat4(obmat, ob->obmat); - Mat3MulMat3(gmat, obmat, mat); + copy_m3_m4(obmat, ob->obmat); + mul_m3_m3m3(gmat, obmat, mat); } else { /* needed if object transformation isn't identity */ - Mat3CpyMat4(obmat, ob->obmat); - Mat3MulMat3(gmat, obmat, tmat); + copy_m3_m4(obmat, ob->obmat); + mul_m3_m3m3(gmat, obmat, tmat); } - Mat3Ortho(gmat); + normalize_m3(gmat); } } else { @@ -233,14 +225,14 @@ void gimbal_axis(Object *ob, float gmat[][3]) { float parent_mat[3][3], amat[3][3]; - EulToGimbalAxis(amat, ob->rot, ob->rotmode); - Mat3CpyMat4(parent_mat, ob->parent->obmat); - Mat3Ortho(parent_mat); - Mat3MulMat3(gmat, parent_mat, amat); + eulO_to_gimbal_axis(amat, ob->rot, ob->rotmode); + copy_m3_m4(parent_mat, ob->parent->obmat); + normalize_m3(parent_mat); + mul_m3_m3m3(gmat, parent_mat, amat); } else { - EulToGimbalAxis(gmat, ob->rot, ob->rotmode); + eulO_to_gimbal_axis(gmat, ob->rot, ob->rotmode); } } } @@ -259,12 +251,10 @@ int calc_manipulator_stats(const bContext *C) RegionView3D *rv3d= ar->regiondata; Base *base; Object *ob= OBACT; - float normal[3]={0.0, 0.0, 0.0}; - float plane[3]={0.0, 0.0, 0.0}; int a, totsel= 0; /* transform widget matrix */ - Mat4One(rv3d->twmat); + unit_m4(rv3d->twmat); v3d->twdrawflag= 0xFFFF; @@ -405,10 +395,10 @@ int calc_manipulator_stats(const bContext *C) /* selection center */ if(totsel) { - VecMulf(scene->twcent, 1.0f/(float)totsel); // centroid! - Mat4MulVecfl(obedit->obmat, scene->twcent); - Mat4MulVecfl(obedit->obmat, scene->twmin); - Mat4MulVecfl(obedit->obmat, scene->twmax); + mul_v3_fl(scene->twcent, 1.0f/(float)totsel); // centroid! + mul_m4_v3(obedit->obmat, scene->twcent); + mul_m4_v3(obedit->obmat, scene->twmin); + mul_m4_v3(obedit->obmat, scene->twmax); } } else if(ob && (ob->mode & OB_MODE_POSE)) { @@ -425,10 +415,10 @@ int calc_manipulator_stats(const bContext *C) stats_pose(scene, v3d, pchan); } - VecMulf(scene->twcent, 1.0f/(float)totsel); // centroid! - Mat4MulVecfl(ob->obmat, scene->twcent); - Mat4MulVecfl(ob->obmat, scene->twmin); - Mat4MulVecfl(ob->obmat, scene->twmax); + mul_v3_fl(scene->twcent, 1.0f/(float)totsel); // centroid! + mul_m4_v3(ob->obmat, scene->twcent); + mul_m4_v3(ob->obmat, scene->twmin); + mul_m4_v3(ob->obmat, scene->twmax); } } else if(ob && (ob->mode & (OB_MODE_SCULPT|OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT))) { @@ -455,7 +445,7 @@ int calc_manipulator_stats(const bContext *C) /* selection center */ if(totsel) - VecMulf(scene->twcent, 1.0f/(float)totsel); // centroid! + mul_v3_fl(scene->twcent, 1.0f/(float)totsel); // centroid! } } else { @@ -476,7 +466,7 @@ int calc_manipulator_stats(const bContext *C) /* selection center */ if(totsel) { - VecMulf(scene->twcent, 1.0f/(float)totsel); // centroid! + mul_v3_fl(scene->twcent, 1.0f/(float)totsel); // centroid! } } @@ -491,75 +481,37 @@ int calc_manipulator_stats(const bContext *C) case V3D_MANIP_GIMBAL: { float mat[3][3]; - Mat3One(mat); + unit_m3(mat); gimbal_axis(ob, mat); - Mat4CpyMat3(rv3d->twmat, mat); + copy_m4_m3(rv3d->twmat, mat); break; } case V3D_MANIP_NORMAL: if(obedit || ob->mode & OB_MODE_POSE) { float mat[3][3]; - int type; - - type = getTransformOrientation(C, normal, plane, (v3d->around == V3D_ACTIVE)); - - switch (type) - { - case ORIENTATION_NORMAL: - if (createSpaceNormalTangent(mat, normal, plane) == 0) - { - type = ORIENTATION_NONE; - } - break; - case ORIENTATION_VERT: - if (createSpaceNormal(mat, normal) == 0) - { - type = ORIENTATION_NONE; - } - break; - case ORIENTATION_EDGE: - if (createSpaceNormalTangent(mat, normal, plane) == 0) - { - type = ORIENTATION_NONE; - } - break; - case ORIENTATION_FACE: - if (createSpaceNormalTangent(mat, normal, plane) == 0) - { - type = ORIENTATION_NONE; - } - break; - } - - if (type == ORIENTATION_NONE) - { - Mat4One(rv3d->twmat); - } - else - { - Mat4CpyMat3(rv3d->twmat, mat); - } + ED_getTransformOrientationMatrix(C, mat, (v3d->around == V3D_ACTIVE)); + copy_m4_m3(rv3d->twmat, mat); break; } /* no break we define 'normal' as 'local' in Object mode */ case V3D_MANIP_LOCAL: - Mat4CpyMat4(rv3d->twmat, ob->obmat); - Mat4Ortho(rv3d->twmat); + copy_m4_m4(rv3d->twmat, ob->obmat); + normalize_m4(rv3d->twmat); break; case V3D_MANIP_VIEW: { float mat[3][3]; - Mat3CpyMat4(mat, rv3d->viewinv); - Mat3Ortho(mat); - Mat4CpyMat3(rv3d->twmat, mat); + copy_m3_m4(mat, rv3d->viewinv); + normalize_m3(mat); + copy_m4_m3(rv3d->twmat, mat); } break; default: /* V3D_MANIP_CUSTOM */ { float mat[3][3]; applyTransformOrientation(C, mat, NULL); - Mat4CpyMat3(rv3d->twmat, mat); + copy_m4_m3(rv3d->twmat, mat); break; } } @@ -576,7 +528,7 @@ static float screen_aligned(RegionView3D *rv3d, float mat[][4]) float vec[3], size; VECCOPY(vec, mat[0]); - size= Normalize(vec); + size= normalize_v3(vec); glTranslatef(mat[3][0], mat[3][1], mat[3][2]); @@ -757,8 +709,8 @@ static void preOrtho(int ortho, float twmat[][4], int axis) { if (ortho == 0) { float omat[4][4]; - Mat4CpyMat4(omat, twmat); - Mat4Orthogonal(omat, axis); + copy_m4_m4(omat, twmat); + orthogonalize_m4(omat, axis); glPushMatrix(); wmMultMatrix(omat); } @@ -768,8 +720,8 @@ static void preOrthoFront(int ortho, float twmat[][4], int axis) { if (ortho == 0) { float omat[4][4]; - Mat4CpyMat4(omat, twmat); - Mat4Orthogonal(omat, axis); + copy_m4_m4(omat, twmat); + orthogonalize_m4(omat, axis); glPushMatrix(); wmMultMatrix(omat); glFrontFace( is_mat4_flipped(omat)?GL_CW:GL_CCW); @@ -801,8 +753,8 @@ static void draw_manipulator_rotate_ghost(View3D *v3d, RegionView3D *rv3d, int d glEnable(GL_BLEND); /* we need both [4][4] transforms, t->mat seems to be premul, not post for mat[][4] */ - Mat4CpyMat4(matt, rv3d->twmat); // to copy the parts outside of [3][3] -// XXX Mat4MulMat34(matt, t->mat, rv3d->twmat); + copy_m4_m4(matt, rv3d->twmat); // to copy the parts outside of [3][3] +// XXX mul_m4_m3m4(matt, t->mat, rv3d->twmat); /* Screen aligned view rot circle */ if(drawflags & MAN_ROT_V) { @@ -814,7 +766,7 @@ static void draw_manipulator_rotate_ghost(View3D *v3d, RegionView3D *rv3d, int d vec[0]= 0; // XXX (float)(t->con.imval[0] - t->center2d[0]); vec[1]= 0; // XXX (float)(t->con.imval[1] - t->center2d[1]); vec[2]= 0.0f; - Normalize(vec); + normalize_v3(vec); startphi= saacos( vec[1] ); if(vec[0]<0.0) startphi= -startphi; @@ -836,16 +788,16 @@ static void draw_manipulator_rotate_ghost(View3D *v3d, RegionView3D *rv3d, int d svec[2]= 0.0f; /* screen aligned vec transform back to manipulator space */ - Mat3CpyMat4(ivmat, rv3d->viewinv); - Mat3CpyMat4(tmat, rv3d->twmat); - Mat3Inv(imat, tmat); - Mat3MulMat3(tmat, imat, ivmat); + copy_m3_m4(ivmat, rv3d->viewinv); + copy_m3_m4(tmat, rv3d->twmat); + invert_m3_m3(imat, tmat); + mul_m3_m3m3(tmat, imat, ivmat); - Mat3MulVecfl(tmat, svec); // tmat is used further on - Normalize(svec); + mul_m3_v3(tmat, svec); // tmat is used further on + normalize_v3(svec); } - ortho = IsMat4Orthogonal(rv3d->twmat); + ortho = is_orthogonal_m4(rv3d->twmat); if (ortho) { wmMultMatrix(rv3d->twmat); // aligns with original widget @@ -860,19 +812,19 @@ static void draw_manipulator_rotate_ghost(View3D *v3d, RegionView3D *rv3d, int d /* correct for squeezed arc */ svec[0]+= tmat[2][0]; svec[1]+= tmat[2][1]; - Normalize(svec); + normalize_v3(svec); startphi= (float)atan2(svec[0], svec[1]); } else startphi= 0.5f*(float)M_PI; VECCOPY(vec, rv3d->twmat[0]); // use x axis to detect rotation - Normalize(vec); - Normalize(matt[0]); - phi= saacos( Inpf(vec, matt[0]) ); + normalize_v3(vec); + normalize_v3(matt[0]); + phi= saacos( dot_v3v3(vec, matt[0]) ); if(phi!=0.0) { - Crossf(cross, vec, matt[0]); // results in z vector - if(Inpf(cross, rv3d->twmat[2]) > 0.0) phi= -phi; + cross_v3_v3v3(cross, vec, matt[0]); // results in z vector + if(dot_v3v3(cross, rv3d->twmat[2]) > 0.0) phi= -phi; gluPartialDisk(qobj, 0.0, 1.0, 32, 1, 180.0*startphi/M_PI, 180.0*(phi)/M_PI); } @@ -886,19 +838,19 @@ static void draw_manipulator_rotate_ghost(View3D *v3d, RegionView3D *rv3d, int d /* correct for squeezed arc */ svec[1]+= tmat[2][1]; svec[2]+= tmat[2][2]; - Normalize(svec); + normalize_v3(svec); startphi= (float)(M_PI + atan2(svec[2], -svec[1])); } else startphi= 0.0f; VECCOPY(vec, rv3d->twmat[1]); // use y axis to detect rotation - Normalize(vec); - Normalize(matt[1]); - phi= saacos( Inpf(vec, matt[1]) ); + normalize_v3(vec); + normalize_v3(matt[1]); + phi= saacos( dot_v3v3(vec, matt[1]) ); if(phi!=0.0) { - Crossf(cross, vec, matt[1]); // results in x vector - if(Inpf(cross, rv3d->twmat[0]) > 0.0) phi= -phi; + cross_v3_v3v3(cross, vec, matt[1]); // results in x vector + if(dot_v3v3(cross, rv3d->twmat[0]) > 0.0) phi= -phi; glRotatef(90.0, 0.0, 1.0, 0.0); gluPartialDisk(qobj, 0.0, 1.0, 32, 1, 180.0*startphi/M_PI, 180.0*phi/M_PI); glRotatef(-90.0, 0.0, 1.0, 0.0); @@ -914,19 +866,19 @@ static void draw_manipulator_rotate_ghost(View3D *v3d, RegionView3D *rv3d, int d /* correct for squeezed arc */ svec[0]+= tmat[2][0]; svec[2]+= tmat[2][2]; - Normalize(svec); + normalize_v3(svec); startphi= (float)(M_PI + atan2(-svec[0], svec[2])); } else startphi= (float)M_PI; VECCOPY(vec, rv3d->twmat[2]); // use z axis to detect rotation - Normalize(vec); - Normalize(matt[2]); - phi= saacos( Inpf(vec, matt[2]) ); + normalize_v3(vec); + normalize_v3(matt[2]); + phi= saacos( dot_v3v3(vec, matt[2]) ); if(phi!=0.0) { - Crossf(cross, vec, matt[2]); // results in y vector - if(Inpf(cross, rv3d->twmat[1]) > 0.0) phi= -phi; + cross_v3_v3v3(cross, vec, matt[2]); // results in y vector + if(dot_v3v3(cross, rv3d->twmat[1]) > 0.0) phi= -phi; glRotatef(-90.0, 1.0, 0.0, 0.0); gluPartialDisk(qobj, 0.0, 1.0, 32, 1, 180.0*startphi/M_PI, 180.0*phi/M_PI); glRotatef(90.0, 1.0, 0.0, 0.0); @@ -959,14 +911,14 @@ static void draw_manipulator_rotate(View3D *v3d, RegionView3D *rv3d, int moving, /* Init stuff */ glDisable(GL_DEPTH_TEST); - Mat4One(unitmat); + unit_m4(unitmat); qobj= gluNewQuadric(); gluQuadricDrawStyle(qobj, GLU_FILL); /* prepare for screen aligned draw */ VECCOPY(vec, rv3d->twmat[0]); - size= Normalize(vec); + size= normalize_v3(vec); glPushMatrix(); glTranslatef(rv3d->twmat[3][0], rv3d->twmat[3][1], rv3d->twmat[3][2]); @@ -1006,8 +958,8 @@ static void draw_manipulator_rotate(View3D *v3d, RegionView3D *rv3d, int moving, vec[0]= 0; // XXX (float)(t->imval[0] - t->center2d[0]); vec[1]= 0; // XXX (float)(t->imval[1] - t->center2d[1]); vec[2]= 0.0f; - Normalize(vec); - VecMulf(vec, 1.2f*size); + normalize_v3(vec); + mul_v3_fl(vec, 1.2f*size); glBegin(GL_LINES); glVertex3f(0.0f, 0.0f, 0.0f); glVertex3fv(vec); @@ -1017,12 +969,12 @@ static void draw_manipulator_rotate(View3D *v3d, RegionView3D *rv3d, int moving, glPopMatrix(); - ortho = IsMat4Orthogonal(rv3d->twmat); + ortho = is_orthogonal_m4(rv3d->twmat); /* apply the transform delta */ if(moving) { - Mat4CpyMat4(matt, rv3d->twmat); // to copy the parts outside of [3][3] - // XXX Mat4MulMat34(matt, t->mat, rv3d->twmat); + copy_m4_m4(matt, rv3d->twmat); // to copy the parts outside of [3][3] + // XXX mul_m4_m3m4(matt, t->mat, rv3d->twmat); if (ortho) { wmMultMatrix(matt); glFrontFace( is_mat4_flipped(matt)?GL_CW:GL_CCW); @@ -1277,7 +1229,7 @@ static void draw_manipulator_scale(View3D *v3d, RegionView3D *rv3d, int moving, manipulator_setcolor(v3d, 'c', colcode); glPushMatrix(); size= screen_aligned(rv3d, rv3d->twmat); - Mat4One(unitmat); + unit_m4(unitmat); drawcircball(GL_LINE_LOOP, unitmat[3], 0.2f*size, unitmat); glPopMatrix(); @@ -1288,8 +1240,8 @@ static void draw_manipulator_scale(View3D *v3d, RegionView3D *rv3d, int moving, if(moving) { float matt[4][4]; - Mat4CpyMat4(matt, rv3d->twmat); // to copy the parts outside of [3][3] - // XXX Mat4MulMat34(matt, t->mat, rv3d->twmat); + copy_m4_m4(matt, rv3d->twmat); // to copy the parts outside of [3][3] + // XXX mul_m4_m3m4(matt, t->mat, rv3d->twmat); wmMultMatrix(matt); glFrontFace( is_mat4_flipped(matt)?GL_CW:GL_CCW); } @@ -1395,7 +1347,7 @@ static void draw_manipulator_translate(View3D *v3d, RegionView3D *rv3d, int movi manipulator_setcolor(v3d, 'c', colcode); glPushMatrix(); size= screen_aligned(rv3d, rv3d->twmat); - Mat4One(unitmat); + unit_m4(unitmat); drawcircball(GL_LINE_LOOP, unitmat[3], 0.2f*size, unitmat); glPopMatrix(); @@ -1468,7 +1420,7 @@ static void draw_manipulator_rotate_cyl(View3D *v3d, RegionView3D *rv3d, int mov /* Screen aligned view rot circle */ if(drawflags & MAN_ROT_V) { float unitmat[4][4]; - Mat4One(unitmat); + unit_m4(unitmat); if(G.f & G_PICKSEL) glLoadName(MAN_ROT_V); UI_ThemeColor(TH_TRANSFORM); @@ -1479,8 +1431,8 @@ static void draw_manipulator_rotate_cyl(View3D *v3d, RegionView3D *rv3d, int mov vec[0]= 0; // XXX (float)(t->imval[0] - t->center2d[0]); vec[1]= 0; // XXX (float)(t->imval[1] - t->center2d[1]); vec[2]= 0.0f; - Normalize(vec); - VecMulf(vec, 1.2f*size); + normalize_v3(vec); + mul_v3_fl(vec, 1.2f*size); glBegin(GL_LINES); glVertex3f(0.0, 0.0, 0.0); glVertex3fv(vec); @@ -1492,9 +1444,9 @@ static void draw_manipulator_rotate_cyl(View3D *v3d, RegionView3D *rv3d, int mov /* apply the transform delta */ if(moving) { float matt[4][4]; - Mat4CpyMat4(matt, rv3d->twmat); // to copy the parts outside of [3][3] + copy_m4_m4(matt, rv3d->twmat); // to copy the parts outside of [3][3] // XXX if (t->flag & T_USES_MANIPULATOR) { - // XXX Mat4MulMat34(matt, t->mat, rv3d->twmat); + // XXX mul_m4_m3m4(matt, t->mat, rv3d->twmat); // XXX } wmMultMatrix(matt); } @@ -1611,7 +1563,7 @@ void BIF_draw_manipulator(const bContext *C) break; } - Mat4MulFloat3((float *)rv3d->twmat, get_manipulator_drawsize(ar)); + mul_mat3_m4_fl(rv3d->twmat, get_manipulator_drawsize(ar)); } if(v3d->twflag & V3D_DRAW_MANIPULATOR) { @@ -1670,7 +1622,7 @@ static int manipulator_selectbuf(ScrArea *sa, ARegion *ar, short *mval, float ho rect.ymax= mval[1]+hotspot; setwinmatrixview3d(ar, v3d, &rect); - Mat4MulMat4(rv3d->persmat, rv3d->viewmat, rv3d->winmat); + mul_m4_m4m4(rv3d->persmat, rv3d->viewmat, rv3d->winmat); glSelectBuffer( 64, buffer); glRenderMode(GL_SELECT); @@ -1692,7 +1644,7 @@ static int manipulator_selectbuf(ScrArea *sa, ARegion *ar, short *mval, float ho G.f &= ~G_PICKSEL; setwinmatrixview3d(ar, v3d, NULL); - Mat4MulMat4(rv3d->persmat, rv3d->viewmat, rv3d->winmat); + mul_m4_m4m4(rv3d->persmat, rv3d->viewmat, rv3d->winmat); if(hits==1) return buffer[3]; else if(hits>1) { diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c index 207cf4b9aee..3cb6700d679 100644 --- a/source/blender/editors/transform/transform_ops.c +++ b/source/blender/editors/transform/transform_ops.c @@ -32,7 +32,7 @@ #include "RNA_define.h" #include "RNA_enum_types.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BKE_utildefines.h" #include "BKE_context.h" diff --git a/source/blender/editors/transform/transform_orientations.c b/source/blender/editors/transform/transform_orientations.c index 56160d66e25..463af961682 100644 --- a/source/blender/editors/transform/transform_orientations.c +++ b/source/blender/editors/transform/transform_orientations.c @@ -46,7 +46,7 @@ #include "BKE_context.h" #include "BKE_report.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_editVert.h" @@ -160,8 +160,8 @@ TransformOrientation *createObjectSpace(bContext *C, ReportList *reports, char * ob = base->object; - Mat3CpyMat4(mat, ob->obmat); - Mat3Ortho(mat); + copy_m3_m4(mat, ob->obmat); + normalize_m3(mat); /* use object name if no name is given */ if (name[0] == 0) @@ -246,20 +246,20 @@ int createSpaceNormal(float mat[3][3], float normal[3]) float tangent[3] = {0.0f, 0.0f, 1.0f}; VECCOPY(mat[2], normal); - if (Normalize(mat[2]) == 0.0f) { + if (normalize_v3(mat[2]) == 0.0f) { return 0; /* error return */ } - Crossf(mat[0], mat[2], tangent); - if (Inpf(mat[0], mat[0]) == 0.0f) { + cross_v3_v3v3(mat[0], mat[2], tangent); + if (dot_v3v3(mat[0], mat[0]) == 0.0f) { tangent[0] = 1.0f; tangent[1] = tangent[2] = 0.0f; - Crossf(mat[0], tangent, mat[2]); + cross_v3_v3v3(mat[0], tangent, mat[2]); } - Crossf(mat[1], mat[2], mat[0]); + cross_v3_v3v3(mat[1], mat[2], mat[0]); - Mat3Ortho(mat); + normalize_m3(mat); return 1; } @@ -267,7 +267,7 @@ int createSpaceNormal(float mat[3][3], float normal[3]) int createSpaceNormalTangent(float mat[3][3], float normal[3], float tangent[3]) { VECCOPY(mat[2], normal); - if (Normalize(mat[2]) == 0.0f) { + if (normalize_v3(mat[2]) == 0.0f) { return 0; /* error return */ } @@ -277,14 +277,14 @@ int createSpaceNormalTangent(float mat[3][3], float normal[3], float tangent[3]) tangent[2] = 1; } - Crossf(mat[0], mat[2], tangent); - if (Normalize(mat[0]) == 0.0f) { + cross_v3_v3v3(mat[0], mat[2], tangent); + if (normalize_v3(mat[0]) == 0.0f) { return 0; /* error return */ } - Crossf(mat[1], mat[2], mat[0]); + cross_v3_v3v3(mat[1], mat[2], mat[0]); - Mat3Ortho(mat); + normalize_m3(mat); return 1; } @@ -311,7 +311,7 @@ TransformOrientation* addMatrixSpace(bContext *C, float mat[3][3], char name[], } /* copy matrix into transform space */ - Mat3CpyMat3(ts->mat, mat); + copy_m3_m3(ts->mat, mat); return ts; } @@ -479,7 +479,7 @@ void applyTransformOrientation(const bContext *C, float mat[3][3], char *name) { if (name) strcpy(name, ts->name); - Mat3CpyMat3(mat, ts->mat); + copy_m3_m3(mat, ts->mat); break; } } @@ -515,9 +515,6 @@ void initTransformOrientation(bContext *C, TransInfo *t) View3D *v3d = CTX_wm_view3d(C); Object *ob = CTX_data_active_object(C); Object *obedit = CTX_data_active_object(C); - float normal[3]={0.0, 0.0, 0.0}; - float plane[3]={0.0, 0.0, 0.0}; - switch(t->current_orientation) { case V3D_MANIP_GLOBAL: @@ -525,55 +522,14 @@ void initTransformOrientation(bContext *C, TransInfo *t) break; case V3D_MANIP_GIMBAL: - Mat3One(t->spacemtx); + unit_m3(t->spacemtx); if(ob) gimbal_axis(ob, t->spacemtx); break; case V3D_MANIP_NORMAL: if(obedit || (ob && ob->mode & OB_MODE_POSE)) { - float mat[3][3]; - int type; - strcpy(t->spacename, "normal"); - - type = getTransformOrientation(C, normal, plane, (v3d->around == V3D_ACTIVE)); - - switch (type) - { - case ORIENTATION_NORMAL: - if (createSpaceNormalTangent(mat, normal, plane) == 0) - { - type = ORIENTATION_NONE; - } - break; - case ORIENTATION_VERT: - if (createSpaceNormal(mat, normal) == 0) - { - type = ORIENTATION_NONE; - } - break; - case ORIENTATION_EDGE: - if (createSpaceNormalTangent(mat, normal, plane) == 0) - { - type = ORIENTATION_NONE; - } - break; - case ORIENTATION_FACE: - if (createSpaceNormalTangent(mat, normal, plane) == 0) - { - type = ORIENTATION_NONE; - } - break; - } - - if (type == ORIENTATION_NONE) - { - Mat3One(t->spacemtx); - } - else - { - Mat3CpyMat3(t->spacemtx, mat); - } + ED_getTransformOrientationMatrix(C, t->spacemtx, (v3d->around == V3D_ACTIVE)); break; } /* no break we define 'normal' as 'local' in Object mode */ @@ -581,10 +537,10 @@ void initTransformOrientation(bContext *C, TransInfo *t) strcpy(t->spacename, "local"); if(ob) { - Mat3CpyMat4(t->spacemtx, ob->obmat); - Mat3Ortho(t->spacemtx); + copy_m3_m4(t->spacemtx, ob->obmat); + normalize_m3(t->spacemtx); } else { - Mat3One(t->spacemtx); + unit_m3(t->spacemtx); } break; @@ -596,13 +552,13 @@ void initTransformOrientation(bContext *C, TransInfo *t) float mat[3][3]; strcpy(t->spacename, "view"); - Mat3CpyMat4(mat, rv3d->viewinv); - Mat3Ortho(mat); - Mat3CpyMat3(t->spacemtx, mat); + copy_m3_m4(mat, rv3d->viewinv); + normalize_m3(mat); + copy_m3_m3(t->spacemtx, mat); } else { - Mat3One(t->spacemtx); + unit_m3(t->spacemtx); } break; default: /* V3D_MANIP_CUSTOM */ @@ -628,10 +584,10 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], float imat[3][3], mat[3][3]; /* we need the transpose of the inverse for a normal... */ - Mat3CpyMat4(imat, ob->obmat); + copy_m3_m4(imat, ob->obmat); - Mat3Inv(mat, imat); - Mat3Transp(mat); + invert_m3_m3(mat, imat); + transpose_m3(mat); ob= obedit; @@ -673,7 +629,7 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], if(efa->f & SELECT) { VECADD(normal, normal, efa->n); - VecSubf(vec, efa->v2->co, efa->v1->co); + sub_v3_v3v3(vec, efa->v2->co, efa->v1->co); VECADD(plane, plane, vec); } } @@ -697,9 +653,9 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], else { v3 = eve; - VecSubf(plane, v2->co, v1->co); - VecSubf(cotangent, v3->co, v2->co); - Crossf(normal, cotangent, plane); + sub_v3_v3v3(plane, v2->co, v1->co); + sub_v3_v3v3(cotangent, v3->co, v2->co); + cross_v3_v3v3(normal, cotangent, plane); break; } } @@ -712,7 +668,7 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], for(eed= em->edges.first; eed; eed= eed->next) { if(eed->f & SELECT) { - VecSubf(plane, eed->v2->co, eed->v1->co); + sub_v3_v3v3(plane, eed->v2->co, eed->v1->co); break; } } @@ -729,7 +685,7 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], /* use average vert normals as plane and edge vector as normal */ VECCOPY(plane, eed->v1->no); VECADD(plane, plane, eed->v2->no); - VecSubf(normal, eed->v2->co, eed->v1->co); + sub_v3_v3v3(normal, eed->v2->co, eed->v1->co); break; } } @@ -750,7 +706,7 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], VECCOPY(plane, v1->no); VECADD(plane, plane, v2->no); - VecSubf(normal, v2->co, v1->co); + sub_v3_v3v3(normal, v2->co, v1->co); break; } } @@ -775,10 +731,10 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], for (eve = em->verts.first; eve; eve = eve->next) { if ( eve->f & SELECT ) { - VecAddf(normal, normal, eve->no); + add_v3_v3v3(normal, normal, eve->no); } } - Normalize(normal); + normalize_v3(normal); result = ORIENTATION_VERT; } } @@ -802,21 +758,21 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], /* exception */ if ( (bezt->f1 & SELECT) + (bezt->f2 & SELECT) + (bezt->f3 & SELECT) > SELECT ) { - VecSubf(normal, bezt->vec[0], bezt->vec[2]); + sub_v3_v3v3(normal, bezt->vec[0], bezt->vec[2]); } else { if(bezt->f1) { - VecSubf(normal, bezt->vec[0], bezt->vec[1]); + sub_v3_v3v3(normal, bezt->vec[0], bezt->vec[1]); } if(bezt->f2) { - VecSubf(normal, bezt->vec[0], bezt->vec[2]); + sub_v3_v3v3(normal, bezt->vec[0], bezt->vec[2]); } if(bezt->f3) { - VecSubf(normal, bezt->vec[1], bezt->vec[2]); + sub_v3_v3v3(normal, bezt->vec[1], bezt->vec[2]); } } bezt++; @@ -857,12 +813,12 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], float mat[4][4]; /* Rotation of MetaElem is stored in quat */ - QuatToMat4(ml_sel->quat, mat); + quat_to_mat4( mat,ml_sel->quat); VECCOPY(normal, mat[2]); VECCOPY(plane, mat[1]); - VecMulf(plane, -1.0); + mul_v3_fl(plane, -1.0); result = ORIENTATION_NORMAL; } @@ -881,18 +837,18 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], { float mat[3][3]; float vec[3]; - VecSubf(vec, ebone->tail, ebone->head); - Normalize(vec); - VecAddf(normal, normal, vec); + sub_v3_v3v3(vec, ebone->tail, ebone->head); + normalize_v3(vec); + add_v3_v3v3(normal, normal, vec); vec_roll_to_mat3(vec, ebone->roll, mat); - VecAddf(plane, plane, mat[2]); + add_v3_v3v3(plane, plane, mat[2]); } } } - Normalize(normal); - Normalize(plane); + normalize_v3(normal); + normalize_v3(plane); if (plane[0] != 0 || plane[1] != 0 || plane[2] != 0) { @@ -904,13 +860,13 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], /* Vectors from edges don't need the special transpose inverse multiplication */ if (result == ORIENTATION_EDGE) { - Mat4Mul3Vecfl(ob->obmat, normal); - Mat4Mul3Vecfl(ob->obmat, plane); + mul_mat3_m4_v3(ob->obmat, normal); + mul_mat3_m4_v3(ob->obmat, plane); } else { - Mat3MulVecfl(mat, normal); - Mat3MulVecfl(mat, plane); + mul_m3_v3(mat, normal); + mul_m3_v3(mat, plane); } } else if(ob && (ob->mode & OB_MODE_POSE)) @@ -926,19 +882,19 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], /* use channels to get stats */ for(pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { if (pchan->bone && pchan->bone->flag & BONE_TRANSFORM) { - VecAddf(normal, normal, pchan->pose_mat[2]); - VecAddf(plane, plane, pchan->pose_mat[1]); + add_v3_v3v3(normal, normal, pchan->pose_mat[2]); + add_v3_v3v3(plane, plane, pchan->pose_mat[1]); } } - VecMulf(plane, -1.0); + mul_v3_fl(plane, -1.0); /* we need the transpose of the inverse for a normal... */ - Mat3CpyMat4(imat, ob->obmat); + copy_m3_m4(imat, ob->obmat); - Mat3Inv(mat, imat); - Mat3Transp(mat); - Mat3MulVecfl(mat, normal); - Mat3MulVecfl(mat, plane); + invert_m3_m3(mat, imat); + transpose_m3(mat); + mul_m3_v3(mat, normal); + mul_m3_v3(mat, plane); result = ORIENTATION_EDGE; } @@ -967,3 +923,46 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], return result; } + +void ED_getTransformOrientationMatrix(const bContext *C, float orientation_mat[][3], int activeOnly) +{ + float normal[3]={0.0, 0.0, 0.0}; + float plane[3]={0.0, 0.0, 0.0}; + + int type; + + type = getTransformOrientation(C, normal, plane, activeOnly); + + switch (type) + { + case ORIENTATION_NORMAL: + if (createSpaceNormalTangent(orientation_mat, normal, plane) == 0) + { + type = ORIENTATION_NONE; + } + break; + case ORIENTATION_VERT: + if (createSpaceNormal(orientation_mat, normal) == 0) + { + type = ORIENTATION_NONE; + } + break; + case ORIENTATION_EDGE: + if (createSpaceNormalTangent(orientation_mat, normal, plane) == 0) + { + type = ORIENTATION_NONE; + } + break; + case ORIENTATION_FACE: + if (createSpaceNormalTangent(orientation_mat, normal, plane) == 0) + { + type = ORIENTATION_NONE; + } + break; + } + + if (type == ORIENTATION_NONE) + { + unit_m3(orientation_mat); + } +} diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c index 1d26649fea2..1cbfcc55911 100644 --- a/source/blender/editors/transform/transform_snap.c +++ b/source/blender/editors/transform/transform_snap.c @@ -47,7 +47,7 @@ #include "RNA_access.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_editVert.h" #include "BLI_blenlib.h" @@ -145,8 +145,8 @@ void drawSnapping(const struct bContext *C, TransInfo *t) size *= 0.5f * UI_GetThemeValuef(TH_VERTEX_SIZE); - Mat4CpyMat4(tmat, rv3d->viewmat); - Mat4Invert(imat, tmat); + copy_m4_m4(tmat, rv3d->viewmat); + invert_m4_m4(imat, tmat); drawcircball(GL_LINE_LOOP, t->tsnap.snapPoint, size, imat); @@ -229,7 +229,7 @@ void applyProject(TransInfo *t) if(t->flag & (T_EDIT|T_POSE)) { Object *ob = t->obedit?t->obedit:t->poseobj; - Mat4Invert(imat, ob->obmat); + invert_m4_m4(imat, ob->obmat); } for(i = 0 ; i < t->total; i++, td++) { @@ -247,7 +247,7 @@ void applyProject(TransInfo *t) if (t->flag & (T_EDIT|T_POSE)) { Object *ob = t->obedit?t->obedit:t->poseobj; - Mat4MulVecfl(ob->obmat, iloc); + mul_m4_v3(ob->obmat, iloc); } else if (t->flag & T_OBJECT) { @@ -259,14 +259,14 @@ void applyProject(TransInfo *t) if (snapObjectsTransform(t, mval, &dist, loc, no, t->tsnap.mode)) { // if(t->flag & (T_EDIT|T_POSE)) { -// Mat4MulVecfl(imat, loc); +// mul_m4_v3(imat, loc); // } // - VecSubf(tvec, loc, iloc); + sub_v3_v3v3(tvec, loc, iloc); - Mat3MulVecfl(td->smtx, tvec); + mul_m3_v3(td->smtx, tvec); - VecAddf(td->loc, td->loc, tvec); + add_v3_v3v3(td->loc, td->loc, tvec); } //XXX constraintTransLim(t, td); @@ -331,7 +331,7 @@ int validSnappingNormal(TransInfo *t) { if ((t->tsnap.status & (POINT_INIT|TARGET_INIT)) == (POINT_INIT|TARGET_INIT)) { - if (Inpf(t->tsnap.snapNormal, t->tsnap.snapNormal) > 0) + if (dot_v3v3(t->tsnap.snapNormal, t->tsnap.snapNormal) > 0) { return 1; } @@ -365,7 +365,7 @@ void initSnapping(TransInfo *t, wmOperator *op) { t->tsnap.align = RNA_boolean_get(op->ptr, "snap_align"); RNA_float_get_array(op->ptr, "snap_normal", t->tsnap.snapNormal); - Normalize(t->tsnap.snapNormal); + normalize_v3(t->tsnap.snapNormal); } if (RNA_struct_find_property(op->ptr, "snap_project")) @@ -500,7 +500,7 @@ void setSnappingCallback(TransInfo *t, short snap_target) void ApplySnapTranslation(TransInfo *t, float vec[3]) { - VecSubf(vec, t->tsnap.snapPoint, t->tsnap.snapTarget); + sub_v3_v3v3(vec, t->tsnap.snapPoint, t->tsnap.snapTarget); } void ApplySnapRotation(TransInfo *t, float *vec) @@ -527,7 +527,7 @@ void ApplySnapResize(TransInfo *t, float vec[3]) float TranslationBetween(TransInfo *t, float p1[3], float p2[3]) { - return VecLenf(p1, p2); + return len_v3v3(p1, p2); } float RotationBetween(TransInfo *t, float p1[3], float p2[3]) @@ -537,11 +537,11 @@ float RotationBetween(TransInfo *t, float p1[3], float p2[3]) VECCOPY(center, t->center); if(t->flag & (T_EDIT|T_POSE)) { Object *ob= t->obedit?t->obedit:t->poseobj; - Mat4MulVecfl(ob->obmat, center); + mul_m4_v3(ob->obmat, center); } - VecSubf(start, p1, center); - VecSubf(end, p2, center); + sub_v3_v3v3(start, p1, center); + sub_v3_v3v3(end, p2, center); // Angle around a constraint axis (error prone, will need debug) if (t->con.applyRot != NULL && (t->con.mode & CON_APPLY)) { @@ -549,29 +549,29 @@ float RotationBetween(TransInfo *t, float p1[3], float p2[3]) t->con.applyRot(t, NULL, axis, NULL); - Projf(tmp, end, axis); - VecSubf(end, end, tmp); + project_v3_v3v3(tmp, end, axis); + sub_v3_v3v3(end, end, tmp); - Projf(tmp, start, axis); - VecSubf(start, start, tmp); + project_v3_v3v3(tmp, start, axis); + sub_v3_v3v3(start, start, tmp); - Normalize(end); - Normalize(start); + normalize_v3(end); + normalize_v3(start); - Crossf(tmp, start, end); + cross_v3_v3v3(tmp, start, end); - if (Inpf(tmp, axis) < 0.0) - angle = -acos(Inpf(start, end)); + if (dot_v3v3(tmp, axis) < 0.0) + angle = -acos(dot_v3v3(start, end)); else - angle = acos(Inpf(start, end)); + angle = acos(dot_v3v3(start, end)); } else { float mtx[3][3]; - Mat3CpyMat4(mtx, t->viewmat); + copy_m3_m4(mtx, t->viewmat); - Mat3MulVecfl(mtx, end); - Mat3MulVecfl(mtx, start); + mul_m3_v3(mtx, end); + mul_m3_v3(mtx, start); angle = atan2(start[1],start[0]) - atan2(end[1],end[0]); } @@ -593,18 +593,18 @@ float ResizeBetween(TransInfo *t, float p1[3], float p2[3]) VECCOPY(center, t->center); if(t->flag & (T_EDIT|T_POSE)) { Object *ob= t->obedit?t->obedit:t->poseobj; - Mat4MulVecfl(ob->obmat, center); + mul_m4_v3(ob->obmat, center); } - VecSubf(d1, p1, center); - VecSubf(d2, p2, center); + sub_v3_v3v3(d1, p1, center); + sub_v3_v3v3(d2, p2, center); if (t->con.applyRot != NULL && (t->con.mode & CON_APPLY)) { - Mat3MulVecfl(t->con.pmtx, d1); - Mat3MulVecfl(t->con.pmtx, d2); + mul_m3_v3(t->con.pmtx, d1); + mul_m3_v3(t->con.pmtx, d2); } - return VecLength(d2) / VecLength(d1); + return len_v3(d2) / len_v3(d1); } /********************** CALC **************************/ @@ -685,8 +685,8 @@ void CalcSnapGeometry(TransInfo *t, float *vec) { p2->flag = 1; - VecAddf(vec, p1->p, p2->p); - VecMulf(vec, 0.5f); + add_v3_v3v3(vec, p1->p, p2->p); + mul_v3_fl(vec, 0.5f); } else { @@ -700,7 +700,7 @@ void CalcSnapGeometry(TransInfo *t, float *vec) break; } - new_dist = VecLenf(last_p, vec); + new_dist = len_v3v3(last_p, vec); if (new_dist < dist) { @@ -727,10 +727,10 @@ void CalcSnapGeometry(TransInfo *t, float *vec) { float tangent[3]; - VecSubf(tangent, loc, t->tsnap.snapPoint); + sub_v3_v3v3(tangent, loc, t->tsnap.snapPoint); tangent[2] = 0; - if (Inpf(tangent, tangent) > 0) + if (dot_v3v3(tangent, tangent) > 0) { VECCOPY(t->tsnap.snapTangent, tangent); } @@ -759,7 +759,7 @@ void CalcSnapGeometry(TransInfo *t, float *vec) t->tsnap.snapPoint[0] *= aspx; t->tsnap.snapPoint[1] *= aspy; - Mat4MulVecfl(t->obedit->obmat, t->tsnap.snapPoint); + mul_m4_v3(t->obedit->obmat, t->tsnap.snapPoint); t->tsnap.status |= POINT_INIT; } @@ -780,7 +780,7 @@ void TargetSnapCenter(TransInfo *t) VECCOPY(t->tsnap.snapTarget, t->center); if(t->flag & (T_EDIT|T_POSE)) { Object *ob= t->obedit?t->obedit:t->poseobj; - Mat4MulVecfl(ob->obmat, t->tsnap.snapTarget); + mul_m4_v3(ob->obmat, t->tsnap.snapTarget); } t->tsnap.status |= TARGET_INIT; @@ -811,7 +811,7 @@ void TargetSnapActive(TransInfo *t) if(t->flag & (T_EDIT|T_POSE)) { Object *ob= t->obedit?t->obedit:t->poseobj; - Mat4MulVecfl(ob->obmat, t->tsnap.snapTarget); + mul_m4_v3(ob->obmat, t->tsnap.snapTarget); } t->tsnap.status |= TARGET_INIT; @@ -840,14 +840,14 @@ void TargetSnapMedian(TransInfo *t) for(td = t->data, i = 0 ; i < t->total && td->flag & TD_SELECTED ; i++, td++) { - VecAddf(t->tsnap.snapTarget, t->tsnap.snapTarget, td->center); + add_v3_v3v3(t->tsnap.snapTarget, t->tsnap.snapTarget, td->center); } - VecMulf(t->tsnap.snapTarget, 1.0 / i); + mul_v3_fl(t->tsnap.snapTarget, 1.0 / i); if(t->flag & (T_EDIT|T_POSE)) { Object *ob= t->obedit?t->obedit:t->poseobj; - Mat4MulVecfl(ob->obmat, t->tsnap.snapTarget); + mul_m4_v3(ob->obmat, t->tsnap.snapTarget); } t->tsnap.status |= TARGET_INIT; @@ -879,7 +879,7 @@ void TargetSnapClosest(TransInfo *t) float dist; VECCOPY(loc, bb->vec[j]); - Mat4MulVecfl(td->ext->obmat, loc); + mul_m4_v3(td->ext->obmat, loc); dist = t->tsnap.distance(t, loc, t->tsnap.snapPoint); @@ -922,7 +922,7 @@ void TargetSnapClosest(TransInfo *t) if(t->flag & (T_EDIT|T_POSE)) { Object *ob= t->obedit?t->obedit:t->poseobj; - Mat4MulVecfl(ob->obmat, loc); + mul_m4_v3(ob->obmat, loc); } dist = t->tsnap.distance(t, loc, t->tsnap.snapPoint); @@ -947,7 +947,7 @@ int snapFace(ARegion *ar, float v1co[3], float v2co[3], float v3co[3], float *v4 int result; int retval = 0; - result = RayIntersectsTriangleThreshold(ray_start_local, ray_normal_local, v1co, v2co, v3co, &lambda, NULL, 0.001); + result = isect_ray_tri_threshold_v3(ray_start_local, ray_normal_local, v1co, v2co, v3co, &lambda, NULL, 0.001); if (result) { float location[3], normal[3]; @@ -957,19 +957,19 @@ int snapFace(ARegion *ar, float v1co[3], float v2co[3], float v3co[3], float *v4 int new_dist; VECCOPY(intersect, ray_normal_local); - VecMulf(intersect, lambda); - VecAddf(intersect, intersect, ray_start_local); + mul_v3_fl(intersect, lambda); + add_v3_v3v3(intersect, intersect, ray_start_local); VECCOPY(location, intersect); if (v4co) - CalcNormFloat4(v1co, v2co, v3co, v4co, normal); + normal_quad_v3( normal,v1co, v2co, v3co, v4co); else - CalcNormFloat(v1co, v2co, v3co, normal); + normal_tri_v3( normal,v1co, v2co, v3co); - Mat4MulVecfl(obmat, location); + mul_m4_v3(obmat, location); - new_depth = VecLenf(location, ray_start); + new_depth = len_v3v3(location, ray_start); project_int(ar, location, screen_loc); new_dist = abs(screen_loc[0] - (int)mval[0]) + abs(screen_loc[1] - (int)mval[1]); @@ -982,8 +982,8 @@ int snapFace(ARegion *ar, float v1co[3], float v2co[3], float v3co[3], float *v4 VECCOPY(loc, location); VECCOPY(no, normal); - Mat3MulVecfl(timat, no); - Normalize(no); + mul_m3_v3(timat, no); + normalize_v3(no); *dist = new_dist; } @@ -999,10 +999,10 @@ int snapEdge(ARegion *ar, float v1co[3], short v1no[3], float v2co[3], short v2n int retval = 0; VECCOPY(ray_end, ray_normal_local); - VecMulf(ray_end, 2000); - VecAddf(ray_end, ray_start_local, ray_end); + mul_v3_fl(ray_end, 2000); + add_v3_v3v3(ray_end, ray_start_local, ray_end); - result = LineIntersectLine(v1co, v2co, ray_start_local, ray_end, intersect, dvec); /* dvec used but we don't care about result */ + result = isect_line_line_v3(v1co, v2co, ray_start_local, ray_end, intersect, dvec); /* dvec used but we don't care about result */ if (result) { @@ -1010,12 +1010,12 @@ int snapEdge(ARegion *ar, float v1co[3], short v1no[3], float v2co[3], short v2n float mul; /* check for behind ray_start */ - VecSubf(dvec, intersect, ray_start_local); + sub_v3_v3v3(dvec, intersect, ray_start_local); - VecSubf(edge_loc, v1co, v2co); - VecSubf(vec, intersect, v2co); + sub_v3_v3v3(edge_loc, v1co, v2co); + sub_v3_v3v3(vec, intersect, v2co); - mul = Inpf(vec, edge_loc) / Inpf(edge_loc, edge_loc); + mul = dot_v3v3(vec, edge_loc) / dot_v3v3(edge_loc, edge_loc); if (mul > 1) { mul = 1; @@ -1026,7 +1026,7 @@ int snapEdge(ARegion *ar, float v1co[3], short v1no[3], float v2co[3], short v2n VECCOPY(intersect, v2co); } - if (Inpf(ray_normal_local, dvec) > 0) + if (dot_v3v3(ray_normal_local, dvec) > 0) { float location[3]; float new_depth; @@ -1035,9 +1035,9 @@ int snapEdge(ARegion *ar, float v1co[3], short v1no[3], float v2co[3], short v2n VECCOPY(location, intersect); - Mat4MulVecfl(obmat, location); + mul_m4_v3(obmat, location); - new_depth = VecLenf(location, ray_start); + new_depth = len_v3v3(location, ray_start); project_int(ar, location, screen_loc); new_dist = abs(screen_loc[0] - (int)mval[0]) + abs(screen_loc[1] - (int)mval[1]); @@ -1053,18 +1053,18 @@ int snapEdge(ARegion *ar, float v1co[3], short v1no[3], float v2co[3], short v2n *depth = new_depth; retval = 1; - VecSubf(edge_loc, v1co, v2co); - VecSubf(vec, intersect, v2co); + sub_v3_v3v3(edge_loc, v1co, v2co); + sub_v3_v3v3(vec, intersect, v2co); - mul = Inpf(vec, edge_loc) / Inpf(edge_loc, edge_loc); + mul = dot_v3v3(vec, edge_loc) / dot_v3v3(edge_loc, edge_loc); if (no) { - NormalShortToFloat(n1, v1no); - NormalShortToFloat(n2, v2no); - VecLerpf(no, n2, n1, mul); - Mat3MulVecfl(timat, no); - Normalize(no); + normal_short_to_float_v3(n1, v1no); + normal_short_to_float_v3(n2, v2no); + interp_v3_v3v3(no, n2, n1, mul); + mul_m3_v3(timat, no); + normalize_v3(no); } VECCOPY(loc, location); @@ -1082,9 +1082,9 @@ int snapVertex(ARegion *ar, float vco[3], short vno[3], float mval[2], float ray int retval = 0; float dvec[3]; - VecSubf(dvec, vco, ray_start_local); + sub_v3_v3v3(dvec, vco, ray_start_local); - if (Inpf(ray_normal_local, dvec) > 0) + if (dot_v3v3(ray_normal_local, dvec) > 0) { float location[3]; float new_depth; @@ -1093,9 +1093,9 @@ int snapVertex(ARegion *ar, float vco[3], short vno[3], float mval[2], float ray VECCOPY(location, vco); - Mat4MulVecfl(obmat, location); + mul_m4_v3(obmat, location); - new_depth = VecLenf(location, ray_start); + new_depth = len_v3v3(location, ray_start); project_int(ar, location, screen_loc); new_dist = abs(screen_loc[0] - (int)mval[0]) + abs(screen_loc[1] - (int)mval[1]); @@ -1109,9 +1109,9 @@ int snapVertex(ARegion *ar, float vco[3], short vno[3], float mval[2], float ray if (no) { - NormalShortToFloat(no, vno); - Mat3MulVecfl(timat, no); - Normalize(no); + normal_short_to_float_v3(no, vno); + mul_m3_v3(timat, no); + normalize_v3(no); } *dist = new_dist; @@ -1127,13 +1127,13 @@ int snapArmature(short snap_mode, ARegion *ar, Object *ob, bArmature *arm, float float ray_start_local[3], ray_normal_local[3]; int retval = 0; - Mat4Invert(imat, obmat); + invert_m4_m4(imat, obmat); VECCOPY(ray_start_local, ray_start); VECCOPY(ray_normal_local, ray_normal); - Mat4MulVecfl(imat, ray_start_local); - Mat4Mul3Vecfl(imat, ray_normal_local); + mul_m4_v3(imat, ray_start_local); + mul_mat3_m4_v3(imat, ray_normal_local); if(arm->edbo) { @@ -1198,16 +1198,16 @@ int snapDerivedMesh(short snap_mode, ARegion *ar, Object *ob, DerivedMesh *dm, E float ray_start_local[3], ray_normal_local[3]; int test = 1; - Mat4Invert(imat, obmat); + invert_m4_m4(imat, obmat); - Mat3CpyMat4(timat, imat); - Mat3Transp(timat); + copy_m3_m4(timat, imat); + transpose_m3(timat); VECCOPY(ray_start_local, ray_start); VECCOPY(ray_normal_local, ray_normal); - Mat4MulVecfl(imat, ray_start_local); - Mat4Mul3Vecfl(imat, ray_normal_local); + mul_m4_v3(imat, ray_start_local); + mul_mat3_m4_v3(imat, ray_normal_local); /* If number of vert is more than an arbitrary limit, @@ -1587,16 +1587,16 @@ int peelDerivedMesh(Object *ob, DerivedMesh *dm, float obmat[][4], float ray_sta float ray_start_local[3], ray_normal_local[3]; int test = 1; - Mat4Invert(imat, obmat); + invert_m4_m4(imat, obmat); - Mat3CpyMat4(timat, imat); - Mat3Transp(timat); + copy_m3_m4(timat, imat); + transpose_m3(timat); VECCOPY(ray_start_local, ray_start); VECCOPY(ray_normal_local, ray_normal); - Mat4MulVecfl(imat, ray_start_local); - Mat4Mul3Vecfl(imat, ray_normal_local); + mul_m4_v3(imat, ray_start_local); + mul_mat3_m4_v3(imat, ray_normal_local); /* If number of vert is more than an arbitrary limit, @@ -1618,7 +1618,7 @@ int peelDerivedMesh(Object *ob, DerivedMesh *dm, float obmat[][4], float ray_sta int result; - result = RayIntersectsTriangleThreshold(ray_start_local, ray_normal_local, verts[f->v1].co, verts[f->v2].co, verts[f->v3].co, &lambda, NULL, 0.001); + result = isect_ray_tri_threshold_v3(ray_start_local, ray_normal_local, verts[f->v1].co, verts[f->v2].co, verts[f->v3].co, &lambda, NULL, 0.001); if (result) { float location[3], normal[3]; @@ -1626,29 +1626,29 @@ int peelDerivedMesh(Object *ob, DerivedMesh *dm, float obmat[][4], float ray_sta float new_depth; VECCOPY(intersect, ray_normal_local); - VecMulf(intersect, lambda); - VecAddf(intersect, intersect, ray_start_local); + mul_v3_fl(intersect, lambda); + add_v3_v3v3(intersect, intersect, ray_start_local); VECCOPY(location, intersect); if (f->v4) - CalcNormFloat4(verts[f->v1].co, verts[f->v2].co, verts[f->v3].co, verts[f->v4].co, normal); + normal_quad_v3( normal,verts[f->v1].co, verts[f->v2].co, verts[f->v3].co, verts[f->v4].co); else - CalcNormFloat(verts[f->v1].co, verts[f->v2].co, verts[f->v3].co, normal); + normal_tri_v3( normal,verts[f->v1].co, verts[f->v2].co, verts[f->v3].co); - Mat4MulVecfl(obmat, location); + mul_m4_v3(obmat, location); - new_depth = VecLenf(location, ray_start); + new_depth = len_v3v3(location, ray_start); - Mat3MulVecfl(timat, normal); - Normalize(normal); + mul_m3_v3(timat, normal); + normalize_v3(normal); addDepthPeel(depth_peels, new_depth, location, normal, ob); } if (f->v4 && result == 0) { - result = RayIntersectsTriangleThreshold(ray_start_local, ray_normal_local, verts[f->v3].co, verts[f->v4].co, verts[f->v1].co, &lambda, NULL, 0.001); + result = isect_ray_tri_threshold_v3(ray_start_local, ray_normal_local, verts[f->v3].co, verts[f->v4].co, verts[f->v1].co, &lambda, NULL, 0.001); if (result) { float location[3], normal[3]; @@ -1656,22 +1656,22 @@ int peelDerivedMesh(Object *ob, DerivedMesh *dm, float obmat[][4], float ray_sta float new_depth; VECCOPY(intersect, ray_normal_local); - VecMulf(intersect, lambda); - VecAddf(intersect, intersect, ray_start_local); + mul_v3_fl(intersect, lambda); + add_v3_v3v3(intersect, intersect, ray_start_local); VECCOPY(location, intersect); if (f->v4) - CalcNormFloat4(verts[f->v1].co, verts[f->v2].co, verts[f->v3].co, verts[f->v4].co, normal); + normal_quad_v3( normal,verts[f->v1].co, verts[f->v2].co, verts[f->v3].co, verts[f->v4].co); else - CalcNormFloat(verts[f->v1].co, verts[f->v2].co, verts[f->v3].co, normal); + normal_tri_v3( normal,verts[f->v1].co, verts[f->v2].co, verts[f->v3].co); - Mat4MulVecfl(obmat, location); + mul_m4_v3(obmat, location); - new_depth = VecLenf(location, ray_start); + new_depth = len_v3v3(location, ray_start); - Mat3MulVecfl(timat, normal); - Normalize(normal); + mul_m3_v3(timat, normal); + normalize_v3(normal); addDepthPeel(depth_peels, new_depth, location, normal, ob); } diff --git a/source/blender/editors/util/editmode_undo.c b/source/blender/editors/util/editmode_undo.c index 2d73a9f1d25..5fb93b0f8ec 100644 --- a/source/blender/editors/util/editmode_undo.c +++ b/source/blender/editors/util/editmode_undo.c @@ -240,6 +240,7 @@ static void undo_clean_stack(bContext *C) /* 1= an undo, -1 is a redo. we have to make sure 'curundo' remains at current situation */ void undo_editmode_step(bContext *C, int step) { + Object *obedit= CTX_data_edit_object(C); /* prevent undo to happen on wrong object, stack can be a mix */ undo_clean_stack(C); @@ -266,8 +267,9 @@ void undo_editmode_step(bContext *C, int step) if(G.f & G_DEBUG) printf("redo %s\n", curundo->name); } } + + DAG_id_flush_update(&obedit->id, OB_RECALC_DATA); -// DAG_id_flush_update(&obedit->id, OB_RECALC_DATA); /* XXX notifiers */ } diff --git a/source/blender/editors/uvedit/uvedit_draw.c b/source/blender/editors/uvedit/uvedit_draw.c index fbd12007c16..c5dccc14b03 100644 --- a/source/blender/editors/uvedit/uvedit_draw.c +++ b/source/blender/editors/uvedit/uvedit_draw.c @@ -42,7 +42,7 @@ #include "BKE_object.h" #include "BKE_utildefines.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_editVert.h" #include "BIF_gl.h" @@ -251,44 +251,44 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, EditMesh *em, MTFac if(efa->v4) { #if 0 /* Simple but slow, better reuse normalized vectors */ - uvang1 = RAD2DEG(Vec2Angle3(tf_uv[3], tf_uv[0], tf_uv[1])); - ang1 = RAD2DEG(VecAngle3(efa->v4->co, efa->v1->co, efa->v2->co)); + uvang1 = RAD2DEG(angle_v2v2v2(tf_uv[3], tf_uv[0], tf_uv[1])); + ang1 = RAD2DEG(angle_v3v3v3(efa->v4->co, efa->v1->co, efa->v2->co)); - uvang2 = RAD2DEG(Vec2Angle3(tf_uv[0], tf_uv[1], tf_uv[2])); - ang2 = RAD2DEG(VecAngle3(efa->v1->co, efa->v2->co, efa->v3->co)); + uvang2 = RAD2DEG(angle_v2v2v2(tf_uv[0], tf_uv[1], tf_uv[2])); + ang2 = RAD2DEG(angle_v3v3v3(efa->v1->co, efa->v2->co, efa->v3->co)); - uvang3 = RAD2DEG(Vec2Angle3(tf_uv[1], tf_uv[2], tf_uv[3])); - ang3 = RAD2DEG(VecAngle3(efa->v2->co, efa->v3->co, efa->v4->co)); + uvang3 = RAD2DEG(angle_v2v2v2(tf_uv[1], tf_uv[2], tf_uv[3])); + ang3 = RAD2DEG(angle_v3v3v3(efa->v2->co, efa->v3->co, efa->v4->co)); - uvang4 = RAD2DEG(Vec2Angle3(tf_uv[2], tf_uv[3], tf_uv[0])); - ang4 = RAD2DEG(VecAngle3(efa->v3->co, efa->v4->co, efa->v1->co)); + uvang4 = RAD2DEG(angle_v2v2v2(tf_uv[2], tf_uv[3], tf_uv[0])); + ang4 = RAD2DEG(angle_v3v3v3(efa->v3->co, efa->v4->co, efa->v1->co)); #endif /* uv angles */ - VECSUB2D(av1, tf_uv[3], tf_uv[0]); Normalize2(av1); - VECSUB2D(av2, tf_uv[0], tf_uv[1]); Normalize2(av2); - VECSUB2D(av3, tf_uv[1], tf_uv[2]); Normalize2(av3); - VECSUB2D(av4, tf_uv[2], tf_uv[3]); Normalize2(av4); + VECSUB2D(av1, tf_uv[3], tf_uv[0]); normalize_v2(av1); + VECSUB2D(av2, tf_uv[0], tf_uv[1]); normalize_v2(av2); + VECSUB2D(av3, tf_uv[1], tf_uv[2]); normalize_v2(av3); + VECSUB2D(av4, tf_uv[2], tf_uv[3]); normalize_v2(av4); /* This is the correct angle however we are only comparing angles - * uvang1 = 90-((NormalizedVecAngle2_2D(av1, av2) * 180.0/M_PI)-90);*/ - uvang1 = NormalizedVecAngle2_2D(av1, av2)*180.0/M_PI; - uvang2 = NormalizedVecAngle2_2D(av2, av3)*180.0/M_PI; - uvang3 = NormalizedVecAngle2_2D(av3, av4)*180.0/M_PI; - uvang4 = NormalizedVecAngle2_2D(av4, av1)*180.0/M_PI; + * uvang1 = 90-((angle_normalized_v2v2(av1, av2) * 180.0/M_PI)-90);*/ + uvang1 = angle_normalized_v2v2(av1, av2)*180.0/M_PI; + uvang2 = angle_normalized_v2v2(av2, av3)*180.0/M_PI; + uvang3 = angle_normalized_v2v2(av3, av4)*180.0/M_PI; + uvang4 = angle_normalized_v2v2(av4, av1)*180.0/M_PI; /* 3d angles */ - VECSUB(av1, efa->v4->co, efa->v1->co); Normalize(av1); - VECSUB(av2, efa->v1->co, efa->v2->co); Normalize(av2); - VECSUB(av3, efa->v2->co, efa->v3->co); Normalize(av3); - VECSUB(av4, efa->v3->co, efa->v4->co); Normalize(av4); + VECSUB(av1, efa->v4->co, efa->v1->co); normalize_v3(av1); + VECSUB(av2, efa->v1->co, efa->v2->co); normalize_v3(av2); + VECSUB(av3, efa->v2->co, efa->v3->co); normalize_v3(av3); + VECSUB(av4, efa->v3->co, efa->v4->co); normalize_v3(av4); /* This is the correct angle however we are only comparing angles - * ang1 = 90-((NormalizedVecAngle2(av1, av2) * 180.0/M_PI)-90);*/ - ang1 = NormalizedVecAngle2(av1, av2)*180.0/M_PI; - ang2 = NormalizedVecAngle2(av2, av3)*180.0/M_PI; - ang3 = NormalizedVecAngle2(av3, av4)*180.0/M_PI; - ang4 = NormalizedVecAngle2(av4, av1)*180.0/M_PI; + * ang1 = 90-((angle_normalized_v3v3(av1, av2) * 180.0/M_PI)-90);*/ + ang1 = angle_normalized_v3v3(av1, av2)*180.0/M_PI; + ang2 = angle_normalized_v3v3(av2, av3)*180.0/M_PI; + ang3 = angle_normalized_v3v3(av3, av4)*180.0/M_PI; + ang4 = angle_normalized_v3v3(av4, av1)*180.0/M_PI; glBegin(GL_QUADS); @@ -315,36 +315,36 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, EditMesh *em, MTFac } else { #if 0 /* Simple but slow, better reuse normalized vectors */ - uvang1 = RAD2DEG(Vec2Angle3(tf_uv[2], tf_uv[0], tf_uv[1])); - ang1 = RAD2DEG(VecAngle3(efa->v3->co, efa->v1->co, efa->v2->co)); + uvang1 = RAD2DEG(angle_v2v2v2(tf_uv[2], tf_uv[0], tf_uv[1])); + ang1 = RAD2DEG(angle_v3v3v3(efa->v3->co, efa->v1->co, efa->v2->co)); - uvang2 = RAD2DEG(Vec2Angle3(tf_uv[0], tf_uv[1], tf_uv[2])); - ang2 = RAD2DEG(VecAngle3(efa->v1->co, efa->v2->co, efa->v3->co)); + uvang2 = RAD2DEG(angle_v2v2v2(tf_uv[0], tf_uv[1], tf_uv[2])); + ang2 = RAD2DEG(angle_v3v3v3(efa->v1->co, efa->v2->co, efa->v3->co)); uvang3 = M_PI-(uvang1+uvang2); ang3 = M_PI-(ang1+ang2); #endif /* uv angles */ - VECSUB2D(av1, tf_uv[2], tf_uv[0]); Normalize2(av1); - VECSUB2D(av2, tf_uv[0], tf_uv[1]); Normalize2(av2); - VECSUB2D(av3, tf_uv[1], tf_uv[2]); Normalize2(av3); + VECSUB2D(av1, tf_uv[2], tf_uv[0]); normalize_v2(av1); + VECSUB2D(av2, tf_uv[0], tf_uv[1]); normalize_v2(av2); + VECSUB2D(av3, tf_uv[1], tf_uv[2]); normalize_v2(av3); /* This is the correct angle however we are only comparing angles - * uvang1 = 90-((NormalizedVecAngle2_2D(av1, av2) * 180.0/M_PI)-90); */ - uvang1 = NormalizedVecAngle2_2D(av1, av2)*180.0/M_PI; - uvang2 = NormalizedVecAngle2_2D(av2, av3)*180.0/M_PI; - uvang3 = NormalizedVecAngle2_2D(av3, av1)*180.0/M_PI; + * uvang1 = 90-((angle_normalized_v2v2(av1, av2) * 180.0/M_PI)-90); */ + uvang1 = angle_normalized_v2v2(av1, av2)*180.0/M_PI; + uvang2 = angle_normalized_v2v2(av2, av3)*180.0/M_PI; + uvang3 = angle_normalized_v2v2(av3, av1)*180.0/M_PI; /* 3d angles */ - VECSUB(av1, efa->v3->co, efa->v1->co); Normalize(av1); - VECSUB(av2, efa->v1->co, efa->v2->co); Normalize(av2); - VECSUB(av3, efa->v2->co, efa->v3->co); Normalize(av3); + VECSUB(av1, efa->v3->co, efa->v1->co); normalize_v3(av1); + VECSUB(av2, efa->v1->co, efa->v2->co); normalize_v3(av2); + VECSUB(av3, efa->v2->co, efa->v3->co); normalize_v3(av3); /* This is the correct angle however we are only comparing angles - * ang1 = 90-((NormalizedVecAngle2(av1, av2) * 180.0/M_PI)-90); */ - ang1 = NormalizedVecAngle2(av1, av2)*180.0/M_PI; - ang2 = NormalizedVecAngle2(av2, av3)*180.0/M_PI; - ang3 = NormalizedVecAngle2(av3, av1)*180.0/M_PI; + * ang1 = 90-((angle_normalized_v3v3(av1, av2) * 180.0/M_PI)-90); */ + ang1 = angle_normalized_v3v3(av1, av2)*180.0/M_PI; + ang2 = angle_normalized_v3v3(av2, av3)*180.0/M_PI; + ang3 = angle_normalized_v3v3(av3, av1)*180.0/M_PI; /* This simple makes the angles display worse then they really are ;) * 1.0-pow((1.0-a), 2) */ diff --git a/source/blender/editors/uvedit/uvedit_ops.c b/source/blender/editors/uvedit/uvedit_ops.c index 460f9970861..0e5e283d109 100644 --- a/source/blender/editors/uvedit/uvedit_ops.c +++ b/source/blender/editors/uvedit/uvedit_ops.c @@ -41,7 +41,7 @@ #include "DNA_screen_types.h" #include "DNA_windowmanager_types.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_editVert.h" @@ -359,9 +359,9 @@ void uv_center(float uv[][2], float cent[2], int quad) float uv_area(float uv[][2], int quad) { if(quad) - return AreaF2Dfl(uv[0], uv[1], uv[2]) + AreaF2Dfl(uv[0], uv[2], uv[3]); + return area_tri_v2(uv[0], uv[1], uv[2]) + area_tri_v2(uv[0], uv[2], uv[3]); else - return AreaF2Dfl(uv[0], uv[1], uv[2]); + return area_tri_v2(uv[0], uv[1], uv[2]); } void uv_copy_aspect(float uv_orig[][2], float uv[][2], float aspx, float aspy) @@ -473,7 +473,7 @@ static void find_nearest_uv_edge(Scene *scene, Image *ima, EditMesh *em, float c nverts= efa->v4? 4: 3; for(i=0; i<nverts; i++) { - dist= PdistVL2Dfl(co, tf->uv[i], tf->uv[(i+1)%nverts]); + dist= dist_to_line_segment_v2(co, tf->uv[i], tf->uv[(i+1)%nverts]); if(dist < mindist) { hit->tf= tf; @@ -534,8 +534,8 @@ static int nearest_uv_between(MTFace *tf, int nverts, int id, float co[2], float m[0]= co[0]-uv[0]; m[1]= co[1]-uv[1]; - Vec2Subf(v1, tf->uv[id1], tf->uv[id]); - Vec2Subf(v2, tf->uv[id2], tf->uv[id]); + sub_v2_v2v2(v1, tf->uv[id1], tf->uv[id]); + sub_v2_v2v2(v2, tf->uv[id2], tf->uv[id]); /* m and v2 on same side of v-v1? */ c1= v1[0]*m[1] - v1[1]*m[0]; @@ -2045,7 +2045,7 @@ static int border_select_exec(bContext *C, wmOperator *op) UI_view2d_region_to_view(&ar->v2d, rect.xmax, rect.ymax, &rectf.xmax, &rectf.ymax); /* figure out what to select/deselect */ - select= (RNA_int_get(op->ptr, "event_type") == LEFTMOUSE); // XXX hardcoded + select= (RNA_int_get(op->ptr, "gesture_mode") == GESTURE_MODAL_SELECT); pinned= RNA_boolean_get(op->ptr, "pinned"); if(ts->uv_flag & UV_SYNC_SELECTION) @@ -2168,11 +2168,7 @@ void UV_OT_select_border(wmOperatorType *ot) /* properties */ RNA_def_boolean(ot->srna, "pinned", 0, "Pinned", "Border select pinned UVs only."); - RNA_def_int(ot->srna, "event_type", 0, INT_MIN, INT_MAX, "Event Type", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "xmin", 0, INT_MIN, INT_MAX, "X Min", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "xmax", 0, INT_MIN, INT_MAX, "X Max", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "ymin", 0, INT_MIN, INT_MAX, "Y Min", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "ymax", 0, INT_MIN, INT_MAX, "Y Max", "", INT_MIN, INT_MAX); + WM_operator_properties_gesture_border(ot, FALSE); } /* ******************** circle select operator **************** */ @@ -2205,9 +2201,10 @@ int circle_select_exec(bContext *C, wmOperator *op) MTFace *tface; int x, y, radius, width, height, select; float zoomx, zoomy, offset[2], ellipse[2]; - + int gesture_mode= RNA_int_get(op->ptr, "gesture_mode"); + /* get operator properties */ - select= (RNA_int_get(op->ptr, "event_type") == LEFTMOUSE); // XXX hardcoded + select= (gesture_mode == GESTURE_MODAL_SELECT); x= RNA_int_get(op->ptr, "x"); y= RNA_int_get(op->ptr, "y"); radius= RNA_int_get(op->ptr, "radius"); @@ -2261,7 +2258,7 @@ void UV_OT_circle_select(wmOperatorType *ot) RNA_def_int(ot->srna, "x", 0, INT_MIN, INT_MAX, "X", "", INT_MIN, INT_MAX); RNA_def_int(ot->srna, "y", 0, INT_MIN, INT_MAX, "Y", "", INT_MIN, INT_MAX); RNA_def_int(ot->srna, "radius", 0, INT_MIN, INT_MAX, "Radius", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "event_type", 0, INT_MIN, INT_MAX, "Event Type", "", INT_MIN, INT_MAX); + RNA_def_int(ot->srna, "gesture_mode", 0, INT_MIN, INT_MAX, "Gesture Mode", "", INT_MIN, INT_MAX); } /* ******************** snap cursor operator **************** */ diff --git a/source/blender/editors/uvedit/uvedit_parametrizer.c b/source/blender/editors/uvedit/uvedit_parametrizer.c index 20f74085e52..85ccef5cd7d 100644 --- a/source/blender/editors/uvedit/uvedit_parametrizer.c +++ b/source/blender/editors/uvedit/uvedit_parametrizer.c @@ -2,7 +2,7 @@ #include "MEM_guardedalloc.h" #include "BLI_memarena.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_rand.h" #include "BLI_heap.h" #include "BLI_boxpack2d.h" @@ -333,8 +333,8 @@ static float p_vec_angle_cos(float *v1, float *v2, float *v3) d2[1] = v3[1] - v2[1]; d2[2] = v3[2] - v2[2]; - Normalize(d1); - Normalize(d2); + normalize_v3(d1); + normalize_v3(d2); return d1[0]*d2[0] + d1[1]*d2[1] + d1[2]*d2[2]; } @@ -382,7 +382,7 @@ static float p_face_area(PFace *f) PEdge *e1 = f->edge, *e2 = e1->next, *e3 = e2->next; PVert *v1 = e1->vert, *v2 = e2->vert, *v3 = e3->vert; - return AreaT3Dfl(v1->co, v2->co, v3->co); + return area_tri_v3(v1->co, v2->co, v3->co); } static float p_area_signed(float *v1, float *v2, float *v3) @@ -1099,7 +1099,7 @@ static PFace *p_face_add_fill(PChart *chart, PVert *v1, PVert *v2, PVert *v3) static PBool p_quad_split_direction(PHandle *handle, float **co, PHashKey *vkeys) { - float fac= VecLenf(co[0], co[2]) - VecLenf(co[1], co[3]); + float fac= len_v3v3(co[0], co[2]) - len_v3v3(co[1], co[3]); PBool dir = (fac <= 0.0f); /* the face exists check is there because of a special case: when @@ -1414,16 +1414,16 @@ static float p_vert_cotan(float *v1, float *v2, float *v3) { float a[3], b[3], c[3], clen; - VecSubf(a, v2, v1); - VecSubf(b, v3, v1); - Crossf(c, a, b); + sub_v3_v3v3(a, v2, v1); + sub_v3_v3v3(b, v3, v1); + cross_v3_v3v3(c, a, b); - clen = VecLength(c); + clen = len_v3(c); if (clen == 0.0f) return 0.0f; - return Inpf(a, b)/clen; + return dot_v3v3(a, b)/clen; } static PBool p_vert_flipped_wheel_triangle(PVert *v) @@ -1752,15 +1752,15 @@ static PBool p_collapse_normal_flipped(float *v1, float *v2, float *vold, float { float nold[3], nnew[3], sub1[3], sub2[3]; - VecSubf(sub1, vold, v1); - VecSubf(sub2, vold, v2); - Crossf(nold, sub1, sub2); + sub_v3_v3v3(sub1, vold, v1); + sub_v3_v3v3(sub2, vold, v2); + cross_v3_v3v3(nold, sub1, sub2); - VecSubf(sub1, vnew, v1); - VecSubf(sub2, vnew, v2); - Crossf(nnew, sub1, sub2); + sub_v3_v3v3(sub1, vnew, v1); + sub_v3_v3v3(sub2, vnew, v2); + cross_v3_v3v3(nnew, sub1, sub2); - return (Inpf(nold, nnew) <= 0.0f); + return (dot_v3v3(nold, nnew) <= 0.0f); } static PBool p_collapse_allowed_geometric(PEdge *edge, PEdge *pair) @@ -1866,7 +1866,7 @@ static float p_collapse_cost(PEdge *edge, PEdge *pair) oldf1 = (edge)? edge->face: NULL; oldf2 = (pair)? pair->face: NULL; - VecSubf(edgevec, keepv->co, oldv->co); + sub_v3_v3v3(edgevec, keepv->co, oldv->co); e = oldv->edge; do { @@ -1878,16 +1878,16 @@ static float p_collapse_cost(PEdge *edge, PEdge *pair) float tetrav2[3], tetrav3[3], c[3]; /* tetrahedron volume = (1/3!)*|a.(b x c)| */ - VecSubf(tetrav2, co1, oldv->co); - VecSubf(tetrav3, co2, oldv->co); - Crossf(c, tetrav2, tetrav3); + sub_v3_v3v3(tetrav2, co1, oldv->co); + sub_v3_v3v3(tetrav3, co2, oldv->co); + cross_v3_v3v3(c, tetrav2, tetrav3); - volumecost += fabs(Inpf(edgevec, c)/6.0f); + volumecost += fabs(dot_v3v3(edgevec, c)/6.0f); #if 0 - shapecost += Inpf(co1, keepv->co); + shapecost += dot_v3v3(co1, keepv->co); if (p_wheel_edge_next(e) == NULL) - shapecost += Inpf(co2, keepv->co); + shapecost += dot_v3v3(co2, keepv->co); #endif p_triangle_angles(oldv->co, co1, co2, &a1, &a2, &a3); @@ -1915,10 +1915,10 @@ static float p_collapse_cost(PEdge *edge, PEdge *pair) PVert *v1 = p_boundary_edge_prev(oldv->edge)->vert; PVert *v2 = p_boundary_edge_next(oldv->edge)->vert; - areacost = AreaT3Dfl(oldv->co, v1->co, v2->co); + areacost = area_tri_v3(oldv->co, v1->co, v2->co); } - elen = VecLength(edgevec); + elen = len_v3(edgevec); weight = 1.0f; /* 0.2f */ cost = weight*volumecost*volumecost + elen*elen*areacost*areacost; #if 0 @@ -2750,7 +2750,7 @@ static void p_chart_pin_positions(PChart *chart, PVert **pin1, PVert **pin2) int diru, dirv, dirx, diry; float sub[3]; - VecSubf(sub, (*pin1)->co, (*pin2)->co); + sub_v3_v3v3(sub, (*pin1)->co, (*pin2)->co); sub[0] = fabs(sub[0]); sub[1] = fabs(sub[1]); sub[2] = fabs(sub[2]); @@ -3185,35 +3185,35 @@ static float p_face_stretch(PFace *f) w= 1.0f/(2.0f*area); /* compute derivatives */ - VecCopyf(Ps, v1->co); - VecMulf(Ps, (v2->uv[1] - v3->uv[1])); + copy_v3_v3(Ps, v1->co); + mul_v3_fl(Ps, (v2->uv[1] - v3->uv[1])); - VecCopyf(tmp, v2->co); - VecMulf(tmp, (v3->uv[1] - v1->uv[1])); - VecAddf(Ps, Ps, tmp); + copy_v3_v3(tmp, v2->co); + mul_v3_fl(tmp, (v3->uv[1] - v1->uv[1])); + add_v3_v3v3(Ps, Ps, tmp); - VecCopyf(tmp, v3->co); - VecMulf(tmp, (v1->uv[1] - v2->uv[1])); - VecAddf(Ps, Ps, tmp); + copy_v3_v3(tmp, v3->co); + mul_v3_fl(tmp, (v1->uv[1] - v2->uv[1])); + add_v3_v3v3(Ps, Ps, tmp); - VecMulf(Ps, w); + mul_v3_fl(Ps, w); - VecCopyf(Pt, v1->co); - VecMulf(Pt, (v3->uv[0] - v2->uv[0])); + copy_v3_v3(Pt, v1->co); + mul_v3_fl(Pt, (v3->uv[0] - v2->uv[0])); - VecCopyf(tmp, v2->co); - VecMulf(tmp, (v1->uv[0] - v3->uv[0])); - VecAddf(Pt, Pt, tmp); + copy_v3_v3(tmp, v2->co); + mul_v3_fl(tmp, (v1->uv[0] - v3->uv[0])); + add_v3_v3v3(Pt, Pt, tmp); - VecCopyf(tmp, v3->co); - VecMulf(tmp, (v2->uv[0] - v1->uv[0])); - VecAddf(Pt, Pt, tmp); + copy_v3_v3(tmp, v3->co); + mul_v3_fl(tmp, (v2->uv[0] - v1->uv[0])); + add_v3_v3v3(Pt, Pt, tmp); - VecMulf(Pt, w); + mul_v3_fl(Pt, w); /* Sander Tensor */ - a= Inpf(Ps, Ps); - c= Inpf(Pt, Pt); + a= dot_v3v3(Ps, Ps); + c= dot_v3v3(Pt, Pt); T = sqrt(0.5f*(a + c)); if (f->flag & PFACE_FILLED) @@ -3273,7 +3273,7 @@ static void p_chart_stretch_minimize(PChart *chart, RNG *rng) low = 0; stretch_low = orig_stretch; - Vec2Addf(v->uv, orig_uv, dir); + add_v2_v2v2(v->uv, orig_uv, dir); high = 1; stretch = stretch_high = p_stretch_compute_vertex(v); @@ -3296,7 +3296,7 @@ static void p_chart_stretch_minimize(PChart *chart, RNG *rng) /* no luck, stretch has increased, reset to old values */ if(stretch >= orig_stretch) - Vec2Copyf(v->uv, orig_uv); + copy_v2_v2(v->uv, orig_uv); } } @@ -3404,7 +3404,7 @@ static float p_rectangle_area(float *p1, float *dir, float *p2, float *p3, float if (!p_intersect_line_2d_dir(p3, dir, p4, orthodir, corner3)) return 1e10; - return Vec2Lenf(corner1, corner2)*Vec2Lenf(corner2, corner3); + return len_v2v2(corner1, corner2)*len_v2v2(corner2, corner3); } static float p_chart_minimum_area_angle(PChart *chart) @@ -3499,7 +3499,7 @@ static float p_chart_minimum_area_angle(PChart *chart) p3 = points[idx[(mini+2)%4]]; p4 = points[idx[(mini+3)%4]]; - len = Vec2Lenf(p1->uv, p1n->uv); + len = len_v2v2(p1->uv, p1n->uv); if (len > 0.0f) { len = 1.0/len; diff --git a/source/blender/editors/uvedit/uvedit_unwrap_ops.c b/source/blender/editors/uvedit/uvedit_unwrap_ops.c index 29d9bb4864e..e5881415100 100644 --- a/source/blender/editors/uvedit/uvedit_unwrap_ops.c +++ b/source/blender/editors/uvedit/uvedit_unwrap_ops.c @@ -48,7 +48,7 @@ #include "BKE_mesh.h" #include "BKE_utildefines.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_edgehash.h" #include "BLI_editVert.h" @@ -563,7 +563,7 @@ static void uv_map_transform_center(Scene *scene, View3D *v3d, float *result, Ob if(efa->v4) DO_MINMAX(efa->v4->co, min, max); } } - VecMidf(result, min, max); + mid_v3_v3v3(result, min, max); break; case V3D_CURSOR: /*cursor center*/ @@ -590,23 +590,23 @@ static void uv_map_rotation_matrix(float result[][4], RegionView3D *rv3d, Object /* get rotation of the current view matrix */ if(rv3d) - Mat4CpyMat4(viewmatrix, rv3d->viewmat); + copy_m4_m4(viewmatrix, rv3d->viewmat); else - Mat4One(viewmatrix); + unit_m4(viewmatrix); /* but shifting */ for(k=0; k<4; k++) viewmatrix[3][k] =0.0f; /* get rotation of the current object matrix */ - Mat4CpyMat4(rotobj,ob->obmat); + copy_m4_m4(rotobj,ob->obmat); /* but shifting */ for(k=0; k<4; k++) rotobj[3][k] =0.0f; - Mat4Clr(*rotup); - Mat4Clr(*rotside); + zero_m4(rotup); + zero_m4(rotside); /* compensate front/side.. against opengl x,y,z world definition */ /* this is "kanonen gegen spatzen", a few plus minus 1 will do here */ @@ -626,7 +626,7 @@ static void uv_map_rotation_matrix(float result[][4], RegionView3D *rv3d, Object rotup[0][0]= (float)1.0f/radius; /* calculate transforms*/ - Mat4MulSerie(result, rotup, rotside, viewmatrix, rotobj, NULL, NULL, NULL, NULL); + mul_serie_m4(result, rotup, rotside, viewmatrix, rotobj, NULL, NULL, NULL, NULL); } static void uv_map_transform(bContext *C, wmOperator *op, float center[3], float rotmat[4][4]) @@ -657,7 +657,7 @@ static void uv_map_transform(bContext *C, wmOperator *op, float center[3], float /* be compatible to the "old" sphere/cylinder mode */ if(direction == ALIGN_TO_OBJECT) - Mat4One(rotmat); + unit_m4(rotmat); else uv_map_rotation_matrix(rotmat, rv3d, obedit, upangledeg, sideangledeg, radius); @@ -873,7 +873,7 @@ static void uv_from_view_bounds(float target[2], float source[3], float rotmat[4 { float pv[3]; - Mat4MulVecfl(rotmat, pv); + mul_m4_v3(rotmat, pv); /* ortho projection */ target[0] = -pv[0]; @@ -885,19 +885,19 @@ static void uv_from_view(ARegion *ar, float target[2], float source[3], float ro RegionView3D *rv3d= ar->regiondata; float pv[3], pv4[4], dx, dy, x= 0.0, y= 0.0; - Mat4MulVecfl(rotmat, pv); + mul_m4_v3(rotmat, pv); dx= ar->winx; dy= ar->winy; - VecCopyf(pv4, source); + copy_v3_v3(pv4, source); pv4[3]= 1.0; /* rotmat is the object matrix in this case */ - Mat4MulVec4fl(rotmat, pv4); + mul_m4_v4(rotmat, pv4); /* almost project_short */ - Mat4MulVec4fl(rv3d->persmat, pv4); + mul_m4_v4(rv3d->persmat, pv4); if(fabs(pv4[3]) > 0.00001) { /* avoid division by zero */ target[0] = dx/2.0 + (dx/2.0)*pv4[0]/pv4[3]; target[1] = dy/2.0 + (dy/2.0)*pv4[1]/pv4[3]; @@ -954,7 +954,7 @@ static int from_view_exec(bContext *C, wmOperator *op) } } else { - Mat4CpyMat4(rotmat, obedit->obmat); + copy_m4_m4(rotmat, obedit->obmat); for(efa= em->faces.first; efa; efa= efa->next) { if(efa->f & SELECT) { @@ -1063,10 +1063,10 @@ static void uv_sphere_project(float target[2], float source[3], float center[3], { float pv[3]; - VecSubf(pv, source, center); - Mat4MulVecfl(rotmat, pv); + sub_v3_v3v3(pv, source, center); + mul_m4_v3(rotmat, pv); - spheremap(pv[0], pv[1], pv[2], &target[0], &target[1]); + map_to_sphere( &target[0], &target[1],pv[0], pv[1], pv[2]); /* split line is always zero */ if(target[0] >= 1.0f) @@ -1155,10 +1155,10 @@ static void uv_cylinder_project(float target[2], float source[3], float center[3 { float pv[3]; - VecSubf(pv, source, center); - Mat4MulVecfl(rotmat, pv); + sub_v3_v3v3(pv, source, center); + mul_m4_v3(rotmat, pv); - tubemap(pv[0], pv[1], pv[2], &target[0], &target[1]); + map_to_tube( &target[0], &target[1],pv[0], pv[1], pv[2]); /* split line is always zero */ if(target[0] >= 1.0f) @@ -1248,7 +1248,7 @@ static int cube_project_exec(bContext *C, wmOperator *op) for(efa= em->faces.first; efa; efa= efa->next) { if(efa->f & SELECT) { tf= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE); - CalcNormFloat(efa->v1->co, efa->v2->co, efa->v3->co, no); + normal_tri_v3( no,efa->v1->co, efa->v2->co, efa->v3->co); no[0]= fabs(no[0]); no[1]= fabs(no[1]); diff --git a/source/blender/gpu/intern/gpu_buffers.c b/source/blender/gpu/intern/gpu_buffers.c index c3d9e32036c..a6adf8a16a1 100644 --- a/source/blender/gpu/intern/gpu_buffers.c +++ b/source/blender/gpu/intern/gpu_buffers.c @@ -36,7 +36,7 @@ #include "MEM_guardedalloc.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_ghash.h" #include "DNA_meshdata_types.h" @@ -410,7 +410,7 @@ void GPU_update_buffers(void *buffers_v, MVert *mvert, MVert *v = mvert + vert_indices[i]; VertexBufferFormat *out = vert_data + i; - VecCopyf(out->co, v->co); + copy_v3_v3(out->co, v->co); memcpy(out->no, v->no, sizeof(short) * 3); } glUnmapBufferARB(GL_ARRAY_BUFFER_ARB); @@ -671,9 +671,9 @@ void GPU_buffer_copy_normal( DerivedMesh *dm, float *varray, int *index, int *re VECCOPY(&varray[start+6],&nors[i*3]); } if( mface[i].v4 ) - CalcNormFloat4(mvert[mface[i].v1].co, mvert[mface[i].v2].co, mvert[mface[i].v3].co, mvert[mface[i].v4].co, norm); + normal_quad_v3( norm,mvert[mface[i].v1].co, mvert[mface[i].v2].co, mvert[mface[i].v3].co, mvert[mface[i].v4].co); else - CalcNormFloat(mvert[mface[i].v1].co, mvert[mface[i].v2].co, mvert[mface[i].v3].co, norm); + normal_tri_v3( norm,mvert[mface[i].v1].co, mvert[mface[i].v2].co, mvert[mface[i].v3].co); VECCOPY(&varray[start],norm); VECCOPY(&varray[start+3],norm); VECCOPY(&varray[start+6],norm); diff --git a/source/blender/gpu/intern/gpu_material.c b/source/blender/gpu/intern/gpu_material.c index 0650a0bfa19..3da83d557a3 100644 --- a/source/blender/gpu/intern/gpu_material.c +++ b/source/blender/gpu/intern/gpu_material.c @@ -54,7 +54,7 @@ #include "BKE_texture.h" #include "BKE_utildefines.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "GPU_extensions.h" @@ -290,7 +290,7 @@ void GPU_material_bind_uniforms(GPUMaterial *material, float obmat[][4], float v GPU_shader_uniform_vector(shader, material->obmatloc, 16, 1, (float*)obmat); } if(material->builtins & GPU_INVERSE_OBJECT_MATRIX) { - Mat4Invert(invmat, obmat); + invert_m4_m4(invmat, obmat); GPU_shader_uniform_vector(shader, material->invobmatloc, 16, 1, (float*)invmat); } if(material->builtins & GPU_OBCOLOR) { @@ -305,20 +305,20 @@ void GPU_material_bind_uniforms(GPUMaterial *material, float obmat[][4], float v if(material->dynproperty & DYN_LAMP_VEC) { VECCOPY(lamp->dynvec, lamp->vec); - Normalize(lamp->dynvec); - VecNegf(lamp->dynvec); - Mat4Mul3Vecfl(viewmat, lamp->dynvec); + normalize_v3(lamp->dynvec); + negate_v3(lamp->dynvec); + mul_mat3_m4_v3(viewmat, lamp->dynvec); } if(material->dynproperty & DYN_LAMP_CO) { VECCOPY(lamp->dynco, lamp->co); - Mat4MulVecfl(viewmat, lamp->dynco); + mul_m4_v3(viewmat, lamp->dynco); } if(material->dynproperty & DYN_LAMP_IMAT) - Mat4MulMat4(lamp->dynimat, viewinv, lamp->imat); + mul_m4_m4m4(lamp->dynimat, viewinv, lamp->imat); if(material->dynproperty & DYN_LAMP_PERSMAT) - Mat4MulMat4(lamp->dynpersmat, viewinv, lamp->persmat); + mul_m4_m4m4(lamp->dynpersmat, viewinv, lamp->persmat); } GPU_pass_update_uniforms(material->pass); @@ -782,7 +782,7 @@ static void material_lights(GPUShadeInput *shi, GPUShadeResult *shr) Object *ob = dob->ob; if(ob->type==OB_LAMP) { - Mat4CpyMat4(ob->obmat, dob->mat); + copy_m4_m4(ob->obmat, dob->mat); lamp = GPU_lamp_from_blender(shi->gpumat->scene, ob, base->object); if(lamp) @@ -1318,13 +1318,13 @@ void GPU_lamp_update(GPULamp *lamp, int lay, float obmat[][4]) lamp->lay = lay; - Mat4CpyMat4(mat, obmat); - Mat4Ortho(mat); + copy_m4_m4(mat, obmat); + normalize_m4(mat); VECCOPY(lamp->vec, mat[2]); VECCOPY(lamp->co, mat[3]); - Mat4CpyMat4(lamp->obmat, mat); - Mat4Invert(lamp->imat, mat); + copy_m4_m4(lamp->obmat, mat); + invert_m4_m4(lamp->imat, mat); } void GPU_lamp_update_colors(GPULamp *lamp, float r, float g, float b, float energy) @@ -1388,7 +1388,7 @@ static void gpu_lamp_from_blender(Scene *scene, Object *ob, Object *par, Lamp *l pixsize= (lamp->d)/temp; wsize= pixsize*0.5f*lamp->size; - i_window(-wsize, wsize, -wsize, wsize, lamp->d, lamp->clipend, lamp->winmat); + perspective_m4( lamp->winmat,-wsize, wsize, -wsize, wsize, lamp->d, lamp->clipend); } static void gpu_lamp_shadow_free(GPULamp *lamp) @@ -1489,16 +1489,16 @@ void GPU_lamp_shadow_buffer_bind(GPULamp *lamp, float viewmat[][4], int *winsize float rangemat[4][4], persmat[4][4]; /* initshadowbuf */ - Mat4Invert(lamp->viewmat, lamp->obmat); - Normalize(lamp->viewmat[0]); - Normalize(lamp->viewmat[1]); - Normalize(lamp->viewmat[2]); + invert_m4_m4(lamp->viewmat, lamp->obmat); + normalize_v3(lamp->viewmat[0]); + normalize_v3(lamp->viewmat[1]); + normalize_v3(lamp->viewmat[2]); /* makeshadowbuf */ - Mat4MulMat4(persmat, lamp->viewmat, lamp->winmat); + mul_m4_m4m4(persmat, lamp->viewmat, lamp->winmat); /* opengl depth buffer is range 0.0..1.0 instead of -1.0..1.0 in blender */ - Mat4One(rangemat); + unit_m4(rangemat); rangemat[0][0] = 0.5f; rangemat[1][1] = 0.5f; rangemat[2][2] = 0.5f; @@ -1506,15 +1506,15 @@ void GPU_lamp_shadow_buffer_bind(GPULamp *lamp, float viewmat[][4], int *winsize rangemat[3][1] = 0.5f; rangemat[3][2] = 0.5f; - Mat4MulMat4(lamp->persmat, persmat, rangemat); + mul_m4_m4m4(lamp->persmat, persmat, rangemat); /* opengl */ glDisable(GL_SCISSOR_TEST); GPU_framebuffer_texture_bind(lamp->fb, lamp->tex); /* set matrices */ - Mat4CpyMat4(viewmat, lamp->viewmat); - Mat4CpyMat4(winmat, lamp->winmat); + copy_m4_m4(viewmat, lamp->viewmat); + copy_m4_m4(winmat, lamp->winmat); *winsize = lamp->size; } diff --git a/source/blender/gpu/intern/gpu_shader_material.glsl b/source/blender/gpu/intern/gpu_shader_material.glsl index e59be0217b5..c824e755afc 100644 --- a/source/blender/gpu/intern/gpu_shader_material.glsl +++ b/source/blender/gpu/intern/gpu_shader_material.glsl @@ -276,18 +276,26 @@ void normal(vec3 dir, vec3 nor, out vec3 outnor, out float outdot) outdot = -dot(dir, nor); } -void curves_vec(vec3 vec, sampler1D curvemap, out vec3 outvec) +void curves_vec(float fac, vec3 vec, sampler1D curvemap, out vec3 outvec) { outvec.x = texture1D(curvemap, (vec.x + 1.0)*0.5).x; outvec.y = texture1D(curvemap, (vec.y + 1.0)*0.5).y; outvec.z = texture1D(curvemap, (vec.z + 1.0)*0.5).z; + + if (fac != 1.0) + outvec = (outvec*fac) + (vec*(1.0-fac)); + } -void curves_rgb(vec4 col, sampler1D curvemap, out vec4 outcol) +void curves_rgb(float fac, vec4 col, sampler1D curvemap, out vec4 outcol) { outcol.r = texture1D(curvemap, texture1D(curvemap, col.r).a).r; outcol.g = texture1D(curvemap, texture1D(curvemap, col.g).a).g; outcol.b = texture1D(curvemap, texture1D(curvemap, col.b).a).b; + + if (fac != 1.0) + outcol = (outcol*fac) + (col*(1.0-fac)); + outcol.a = col.a; } diff --git a/source/blender/gpu/intern/gpu_shader_material.glsl.c b/source/blender/gpu/intern/gpu_shader_material.glsl.c index d61491ad57a..920cd16c369 100644 --- a/source/blender/gpu/intern/gpu_shader_material.glsl.c +++ b/source/blender/gpu/intern/gpu_shader_material.glsl.c @@ -1,187 +1,192 @@ /* DataToC output of file <gpu_shader_material_glsl> */ -int datatoc_gpu_shader_material_glsl_size= 33385; +int datatoc_gpu_shader_material_glsl_size= 33537; char datatoc_gpu_shader_material_glsl[]= { - 10,102,108,111, 97,116, 32,101,120, -112, 95, 98,108,101,110,100,101,114, 40,102,108,111, 97,116, 32,102, 41, 10,123, 10, 9,114,101,116,117,114,110, 32,112,111,119, - 40, 50, 46, 55, 49, 56, 50, 56, 49, 56, 50, 56, 52, 54, 44, 32,102, 41, 59, 10,125, 10, 10,118,111,105,100, 32,114,103, 98, 95, -116,111, 95,104,115,118, 40,118,101, 99, 52, 32,114,103, 98, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, - 41, 10,123, 10, 9,102,108,111, 97,116, 32, 99,109, 97,120, 44, 32, 99,109,105,110, 44, 32,104, 44, 32,115, 44, 32,118, 44, 32, - 99,100,101,108,116, 97, 59, 10, 9,118,101, 99, 51, 32, 99, 59, 10, 10, 9, 99,109, 97,120, 32, 61, 32,109, 97,120, 40,114,103, - 98, 91, 48, 93, 44, 32,109, 97,120, 40,114,103, 98, 91, 49, 93, 44, 32,114,103, 98, 91, 50, 93, 41, 41, 59, 10, 9, 99,109,105, -110, 32, 61, 32,109,105,110, 40,114,103, 98, 91, 48, 93, 44, 32,109,105,110, 40,114,103, 98, 91, 49, 93, 44, 32,114,103, 98, 91, - 50, 93, 41, 41, 59, 10, 9, 99,100,101,108,116, 97, 32, 61, 32, 99,109, 97,120, 45, 99,109,105,110, 59, 10, 10, 9,118, 32, 61, - 32, 99,109, 97,120, 59, 10, 9,105,102, 32, 40, 99,109, 97,120, 33, 61, 48, 46, 48, 41, 10, 9, 9,115, 32, 61, 32, 99,100,101, -108,116, 97, 47, 99,109, 97,120, 59, 10, 9,101,108,115,101, 32,123, 10, 9, 9,115, 32, 61, 32, 48, 46, 48, 59, 10, 9, 9,104, - 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 10, 9,105,102, 32, 40,115, 32, 61, 61, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,104, - 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 9,101,108,115,101, 32,123, 10, 9, 9, 99, 32, 61, 32, 40,118,101, 99, 51, 40, 99, -109, 97,120, 44, 32, 99,109, 97,120, 44, 32, 99,109, 97,120, 41, 32, 45, 32,114,103, 98, 46,120,121,122, 41, 47, 99,100,101,108, -116, 97, 59, 10, 10, 9, 9,105,102, 32, 40,114,103, 98, 46,120, 61, 61, 99,109, 97,120, 41, 32,104, 32, 61, 32, 99, 91, 50, 93, - 32, 45, 32, 99, 91, 49, 93, 59, 10, 9, 9,101,108,115,101, 32,105,102, 32, 40,114,103, 98, 46,121, 61, 61, 99,109, 97,120, 41, - 32,104, 32, 61, 32, 50, 46, 48, 32, 43, 32, 99, 91, 48, 93, 32, 45, 32, 32, 99, 91, 50, 93, 59, 10, 9, 9,101,108,115,101, 32, -104, 32, 61, 32, 52, 46, 48, 32, 43, 32, 99, 91, 49, 93, 32, 45, 32, 99, 91, 48, 93, 59, 10, 10, 9, 9,104, 32, 47, 61, 32, 54, - 46, 48, 59, 10, 10, 9, 9,105,102, 32, 40,104, 60, 48, 46, 48, 41, 10, 9, 9, 9,104, 32, 43, 61, 32, 49, 46, 48, 59, 10, 9, -125, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 52, 40,104, 44, 32,115, 44, 32,118, 44, 32,114,103, 98, 46,119, - 41, 59, 10,125, 10, 10,118,111,105,100, 32,104,115,118, 95,116,111, 95,114,103, 98, 40,118,101, 99, 52, 32,104,115,118, 44, 32, -111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,105, 44, 32,102, 44, 32, -112, 44, 32,113, 44, 32,116, 44, 32,104, 44, 32,115, 44, 32,118, 59, 10, 9,118,101, 99, 51, 32,114,103, 98, 59, 10, 10, 9,104, - 32, 61, 32,104,115,118, 91, 48, 93, 59, 10, 9,115, 32, 61, 32,104,115,118, 91, 49, 93, 59, 10, 9,118, 32, 61, 32,104,115,118, - 91, 50, 93, 59, 10, 10, 9,105,102, 40,115, 61, 61, 48, 46, 48, 41, 32,123, 10, 9, 9,114,103, 98, 32, 61, 32,118,101, 99, 51, - 40,118, 44, 32,118, 44, 32,118, 41, 59, 10, 9,125, 10, 9,101,108,115,101, 32,123, 10, 9, 9,105,102, 40,104, 61, 61, 49, 46, - 48, 41, 10, 9, 9, 9,104, 32, 61, 32, 48, 46, 48, 59, 10, 9, 9, 10, 9, 9,104, 32, 42, 61, 32, 54, 46, 48, 59, 10, 9, 9, -105, 32, 61, 32,102,108,111,111,114, 40,104, 41, 59, 10, 9, 9,102, 32, 61, 32,104, 32, 45, 32,105, 59, 10, 9, 9,114,103, 98, - 32, 61, 32,118,101, 99, 51, 40,102, 44, 32,102, 44, 32,102, 41, 59, 10, 9, 9,112, 32, 61, 32,118, 42, 40, 49, 46, 48, 45,115, - 41, 59, 10, 9, 9,113, 32, 61, 32,118, 42, 40, 49, 46, 48, 45, 40,115, 42,102, 41, 41, 59, 10, 9, 9,116, 32, 61, 32,118, 42, - 40, 49, 46, 48, 45, 40,115, 42, 40, 49, 46, 48, 45,102, 41, 41, 41, 59, 10, 9, 9, 10, 9, 9,105,102, 32, 40,105, 32, 61, 61, - 32, 48, 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,118, 44, 32,116, 44, 32,112, 41, 59, 10, 9, 9,101,108,115, -101, 32,105,102, 32, 40,105, 32, 61, 61, 32, 49, 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,113, 44, 32,118, 44, - 32,112, 41, 59, 10, 9, 9,101,108,115,101, 32,105,102, 32, 40,105, 32, 61, 61, 32, 50, 46, 48, 41, 32,114,103, 98, 32, 61, 32, -118,101, 99, 51, 40,112, 44, 32,118, 44, 32,116, 41, 59, 10, 9, 9,101,108,115,101, 32,105,102, 32, 40,105, 32, 61, 61, 32, 51, - 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,112, 44, 32,113, 44, 32,118, 41, 59, 10, 9, 9,101,108,115,101, 32, -105,102, 32, 40,105, 32, 61, 61, 32, 52, 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,116, 44, 32,112, 44, 32,118, - 41, 59, 10, 9, 9,101,108,115,101, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,118, 44, 32,112, 44, 32,113, 41, 59, 10, 9, -125, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 52, 40,114,103, 98, 44, 32,104,115,118, 46,119, 41, 59, 10,125, - 10, 10, 35,100,101,102,105,110,101, 32, 77, 95, 80, 73, 32, 51, 46, 49, 52, 49, 53, 57, 50, 54, 53, 51, 53, 56, 57, 55, 57, 51, - 50, 51, 56, 52, 54, 10, 10, 47, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 32, 83, 72, 65, 68, 69, 82, 32, 78, 79, 68, 69, 83, - 32, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 47, 10, 10,118,111,105,100, 32,118, 99,111,108, 95, 97,116,116, -114,105, 98,117,116,101, 40,118,101, 99, 52, 32, 97,116,116,118, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,118, 99, -111,108, 41, 10,123, 10, 9,118, 99,111,108, 32, 61, 32,118,101, 99, 52, 40, 97,116,116,118, 99,111,108, 46,120, 47, 50, 53, 53, - 46, 48, 44, 32, 97,116,116,118, 99,111,108, 46,121, 47, 50, 53, 53, 46, 48, 44, 32, 97,116,116,118, 99,111,108, 46,122, 47, 50, - 53, 53, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,117,118, 95, 97,116,116,114,105, 98,117,116,101, - 40,118,101, 99, 50, 32, 97,116,116,117,118, 44, 32,111,117,116, 32,118,101, 99, 51, 32,117,118, 41, 10,123, 10, 9,117,118, 32, - 61, 32,118,101, 99, 51, 40, 97,116,116,117,118, 42, 50, 46, 48, 32, 45, 32,118,101, 99, 50, 40, 49, 46, 48, 44, 32, 49, 46, 48, - 41, 44, 32, 48, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,103,101,111,109, 40,118,101, 99, 51, 32, 99,111, 44, 32,118, -101, 99, 51, 32,110,111,114, 44, 32,109, 97,116, 52, 32,118,105,101,119,105,110,118,109, 97,116, 44, 32,118,101, 99, 51, 32, 97, -116,116,111,114, 99,111, 44, 32,118,101, 99, 50, 32, 97,116,116,117,118, 44, 32,118,101, 99, 52, 32, 97,116,116,118, 99,111,108, - 44, 32,111,117,116, 32,118,101, 99, 51, 32,103,108,111, 98, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,108,111, 99, 97, -108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118,105,101,119, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,114, 99,111, 44, - 32,111,117,116, 32,118,101, 99, 51, 32,117,118, 44, 32,111,117,116, 32,118,101, 99, 51, 32,110,111,114,109, 97,108, 44, 32,111, -117,116, 32,118,101, 99, 52, 32,118, 99,111,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,102,114,111,110,116, 98, 97, 99, -107, 41, 10,123, 10, 9,108,111, 99, 97,108, 32, 61, 32, 99,111, 59, 10, 9,118,105,101,119, 32, 61, 32,110,111,114,109, 97,108, -105,122,101, 40,108,111, 99, 97,108, 41, 59, 10, 9,103,108,111, 98, 97,108, 32, 61, 32, 40,118,105,101,119,105,110,118,109, 97, -116, 42,118,101, 99, 52, 40,108,111, 99, 97,108, 44, 32, 49, 46, 48, 41, 41, 46,120,121,122, 59, 10, 9,111,114, 99,111, 32, 61, - 32, 97,116,116,111,114, 99,111, 59, 10, 9,117,118, 95, 97,116,116,114,105, 98,117,116,101, 40, 97,116,116,117,118, 44, 32,117, -118, 41, 59, 10, 9,110,111,114,109, 97,108, 32, 61, 32, 45,110,111,114,109, 97,108,105,122,101, 40,110,111,114, 41, 59, 9, 47, - 42, 32, 98,108,101,110,100,101,114, 32,114,101,110,100,101,114, 32,110,111,114,109, 97,108, 32,105,115, 32,110,101,103, 97,116, -101,100, 32, 42, 47, 10, 9,118, 99,111,108, 95, 97,116,116,114,105, 98,117,116,101, 40, 97,116,116,118, 99,111,108, 44, 32,118, - 99,111,108, 41, 59, 10, 9,102,114,111,110,116, 98, 97, 99,107, 32, 61, 32, 49, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32, -109, 97,112,112,105,110,103, 40,118,101, 99, 51, 32,118,101, 99, 44, 32,109, 97,116, 52, 32,109, 97,116, 44, 32,118,101, 99, 51, - 32,109,105,110,118,101, 99, 44, 32,118,101, 99, 51, 32,109, 97,120,118,101, 99, 44, 32,102,108,111, 97,116, 32,100,111,109,105, -110, 44, 32,102,108,111, 97,116, 32,100,111,109, 97,120, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 41, - 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32, 40,109, 97,116, 32, 42, 32,118,101, 99, 52, 40,118,101, 99, 44, 32, 49, 46, - 48, 41, 41, 46,120,121,122, 59, 10, 9,105,102, 40,100,111,109,105,110, 32, 61, 61, 32, 49, 46, 48, 41, 10, 9, 9,111,117,116, -118,101, 99, 32, 61, 32,109, 97,120, 40,111,117,116,118,101, 99, 44, 32,109,105,110,118,101, 99, 41, 59, 10, 9,105,102, 40,100, -111,109, 97,120, 32, 61, 61, 32, 49, 46, 48, 41, 10, 9, 9,111,117,116,118,101, 99, 32, 61, 32,109,105,110, 40,111,117,116,118, -101, 99, 44, 32,109, 97,120,118,101, 99, 41, 59, 10,125, 10, 10,118,111,105,100, 32, 99, 97,109,101,114, 97, 40,118,101, 99, 51, - 32, 99,111, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,105,101,119, 44, 32,111,117,116, 32,102,108,111, 97,116, - 32,111,117,116,100,101,112,116,104, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,100,105,115,116, 41, 10,123, 10, - 9,111,117,116,100,101,112,116,104, 32, 61, 32, 97, 98,115, 40, 99,111, 46,122, 41, 59, 10, 9,111,117,116,100,105,115,116, 32, - 61, 32,108,101,110,103,116,104, 40, 99,111, 41, 59, 10, 9,111,117,116,118,105,101,119, 32, 61, 32,110,111,114,109, 97,108,105, -122,101, 40, 99,111, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95, 97,100,100, 40,102,108,111, 97,116, 32,118, - 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97, -108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118, 97,108, 49, 32, 43, 32,118, 97,108, 50, 59, 10,125, 10, 10,118, -111,105,100, 32,109, 97,116,104, 95,115,117, 98,116,114, 97, 99,116, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108, -111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111, -117,116,118, 97,108, 32, 61, 32,118, 97,108, 49, 32, 45, 32,118, 97,108, 50, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116, -104, 95,109,117,108,116,105,112,108,121, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, - 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, - 32,118, 97,108, 49, 32, 42, 32,118, 97,108, 50, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,100,105,118,105,100, -101, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108, -111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,105,102, 32, 40,118, 97,108, 50, 32, 61, 61, 32, 48, 46, 48, 41, 10, - 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116,118, 97,108, 32, 61, - 32,118, 97,108, 49, 32, 47, 32,118, 97,108, 50, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,115,105,110,101, 40, -102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9, -111,117,116,118, 97,108, 32, 61, 32,115,105,110, 40,118, 97,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95, - 99,111,115,105,110,101, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, - 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 99,111,115, 40,118, 97,108, 41, 59, 10,125, 10, 10,118,111,105, -100, 32,109, 97,116,104, 95,116, 97,110,103,101,110,116, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108, -111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,116, 97,110, 40,118, 97,108, 41, - 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95, 97,115,105,110, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111, -117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,105,102, 32, 40,118, 97,108, 32, 60, 61, 32, 49, - 46, 48, 32, 38, 38, 32,118, 97,108, 32, 62, 61, 32, 45, 49, 46, 48, 41, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 97,115, -105,110, 40,118, 97,108, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10,125, - 10, 10,118,111,105,100, 32,109, 97,116,104, 95, 97, 99,111,115, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32, -102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,105,102, 32, 40,118, 97,108, 32, 60, 61, 32, 49, 46, 48, 32, - 38, 38, 32,118, 97,108, 32, 62, 61, 32, 45, 49, 46, 48, 41, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 97, 99,111,115, 40, -118, 97,108, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118, -111,105,100, 32,109, 97,116,104, 95, 97,116, 97,110, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, - 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 97,116, 97,110, 40,118, 97,108, 41, - 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,112,111,119, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102, + 10, +102,108,111, 97,116, 32,101,120,112, 95, 98,108,101,110,100,101,114, 40,102,108,111, 97,116, 32,102, 41, 10,123, 10, 9,114,101, +116,117,114,110, 32,112,111,119, 40, 50, 46, 55, 49, 56, 50, 56, 49, 56, 50, 56, 52, 54, 44, 32,102, 41, 59, 10,125, 10, 10,118, +111,105,100, 32,114,103, 98, 95,116,111, 95,104,115,118, 40,118,101, 99, 52, 32,114,103, 98, 44, 32,111,117,116, 32,118,101, 99, + 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32, 99,109, 97,120, 44, 32, 99,109,105,110, 44, 32,104, + 44, 32,115, 44, 32,118, 44, 32, 99,100,101,108,116, 97, 59, 10, 9,118,101, 99, 51, 32, 99, 59, 10, 10, 9, 99,109, 97,120, 32, + 61, 32,109, 97,120, 40,114,103, 98, 91, 48, 93, 44, 32,109, 97,120, 40,114,103, 98, 91, 49, 93, 44, 32,114,103, 98, 91, 50, 93, + 41, 41, 59, 10, 9, 99,109,105,110, 32, 61, 32,109,105,110, 40,114,103, 98, 91, 48, 93, 44, 32,109,105,110, 40,114,103, 98, 91, + 49, 93, 44, 32,114,103, 98, 91, 50, 93, 41, 41, 59, 10, 9, 99,100,101,108,116, 97, 32, 61, 32, 99,109, 97,120, 45, 99,109,105, +110, 59, 10, 10, 9,118, 32, 61, 32, 99,109, 97,120, 59, 10, 9,105,102, 32, 40, 99,109, 97,120, 33, 61, 48, 46, 48, 41, 10, 9, + 9,115, 32, 61, 32, 99,100,101,108,116, 97, 47, 99,109, 97,120, 59, 10, 9,101,108,115,101, 32,123, 10, 9, 9,115, 32, 61, 32, + 48, 46, 48, 59, 10, 9, 9,104, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 10, 9,105,102, 32, 40,115, 32, 61, 61, 32, 48, 46, + 48, 41, 32,123, 10, 9, 9,104, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 9,101,108,115,101, 32,123, 10, 9, 9, 99, 32, 61, + 32, 40,118,101, 99, 51, 40, 99,109, 97,120, 44, 32, 99,109, 97,120, 44, 32, 99,109, 97,120, 41, 32, 45, 32,114,103, 98, 46,120, +121,122, 41, 47, 99,100,101,108,116, 97, 59, 10, 10, 9, 9,105,102, 32, 40,114,103, 98, 46,120, 61, 61, 99,109, 97,120, 41, 32, +104, 32, 61, 32, 99, 91, 50, 93, 32, 45, 32, 99, 91, 49, 93, 59, 10, 9, 9,101,108,115,101, 32,105,102, 32, 40,114,103, 98, 46, +121, 61, 61, 99,109, 97,120, 41, 32,104, 32, 61, 32, 50, 46, 48, 32, 43, 32, 99, 91, 48, 93, 32, 45, 32, 32, 99, 91, 50, 93, 59, + 10, 9, 9,101,108,115,101, 32,104, 32, 61, 32, 52, 46, 48, 32, 43, 32, 99, 91, 49, 93, 32, 45, 32, 99, 91, 48, 93, 59, 10, 10, + 9, 9,104, 32, 47, 61, 32, 54, 46, 48, 59, 10, 10, 9, 9,105,102, 32, 40,104, 60, 48, 46, 48, 41, 10, 9, 9, 9,104, 32, 43, + 61, 32, 49, 46, 48, 59, 10, 9,125, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 52, 40,104, 44, 32,115, 44, 32, +118, 44, 32,114,103, 98, 46,119, 41, 59, 10,125, 10, 10,118,111,105,100, 32,104,115,118, 95,116,111, 95,114,103, 98, 40,118,101, + 99, 52, 32,104,115,118, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97, +116, 32,105, 44, 32,102, 44, 32,112, 44, 32,113, 44, 32,116, 44, 32,104, 44, 32,115, 44, 32,118, 59, 10, 9,118,101, 99, 51, 32, +114,103, 98, 59, 10, 10, 9,104, 32, 61, 32,104,115,118, 91, 48, 93, 59, 10, 9,115, 32, 61, 32,104,115,118, 91, 49, 93, 59, 10, + 9,118, 32, 61, 32,104,115,118, 91, 50, 93, 59, 10, 10, 9,105,102, 40,115, 61, 61, 48, 46, 48, 41, 32,123, 10, 9, 9,114,103, + 98, 32, 61, 32,118,101, 99, 51, 40,118, 44, 32,118, 44, 32,118, 41, 59, 10, 9,125, 10, 9,101,108,115,101, 32,123, 10, 9, 9, +105,102, 40,104, 61, 61, 49, 46, 48, 41, 10, 9, 9, 9,104, 32, 61, 32, 48, 46, 48, 59, 10, 9, 9, 10, 9, 9,104, 32, 42, 61, + 32, 54, 46, 48, 59, 10, 9, 9,105, 32, 61, 32,102,108,111,111,114, 40,104, 41, 59, 10, 9, 9,102, 32, 61, 32,104, 32, 45, 32, +105, 59, 10, 9, 9,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,102, 44, 32,102, 44, 32,102, 41, 59, 10, 9, 9,112, 32, 61, 32, +118, 42, 40, 49, 46, 48, 45,115, 41, 59, 10, 9, 9,113, 32, 61, 32,118, 42, 40, 49, 46, 48, 45, 40,115, 42,102, 41, 41, 59, 10, + 9, 9,116, 32, 61, 32,118, 42, 40, 49, 46, 48, 45, 40,115, 42, 40, 49, 46, 48, 45,102, 41, 41, 41, 59, 10, 9, 9, 10, 9, 9, +105,102, 32, 40,105, 32, 61, 61, 32, 48, 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,118, 44, 32,116, 44, 32,112, + 41, 59, 10, 9, 9,101,108,115,101, 32,105,102, 32, 40,105, 32, 61, 61, 32, 49, 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, + 99, 51, 40,113, 44, 32,118, 44, 32,112, 41, 59, 10, 9, 9,101,108,115,101, 32,105,102, 32, 40,105, 32, 61, 61, 32, 50, 46, 48, + 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,112, 44, 32,118, 44, 32,116, 41, 59, 10, 9, 9,101,108,115,101, 32,105,102, + 32, 40,105, 32, 61, 61, 32, 51, 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,112, 44, 32,113, 44, 32,118, 41, 59, + 10, 9, 9,101,108,115,101, 32,105,102, 32, 40,105, 32, 61, 61, 32, 52, 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, + 40,116, 44, 32,112, 44, 32,118, 41, 59, 10, 9, 9,101,108,115,101, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,118, 44, 32, +112, 44, 32,113, 41, 59, 10, 9,125, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 52, 40,114,103, 98, 44, 32,104, +115,118, 46,119, 41, 59, 10,125, 10, 10, 35,100,101,102,105,110,101, 32, 77, 95, 80, 73, 32, 51, 46, 49, 52, 49, 53, 57, 50, 54, + 53, 51, 53, 56, 57, 55, 57, 51, 50, 51, 56, 52, 54, 10, 10, 47, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 32, 83, 72, 65, 68, + 69, 82, 32, 78, 79, 68, 69, 83, 32, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 47, 10, 10,118,111,105,100, 32, +118, 99,111,108, 95, 97,116,116,114,105, 98,117,116,101, 40,118,101, 99, 52, 32, 97,116,116,118, 99,111,108, 44, 32,111,117,116, + 32,118,101, 99, 52, 32,118, 99,111,108, 41, 10,123, 10, 9,118, 99,111,108, 32, 61, 32,118,101, 99, 52, 40, 97,116,116,118, 99, +111,108, 46,120, 47, 50, 53, 53, 46, 48, 44, 32, 97,116,116,118, 99,111,108, 46,121, 47, 50, 53, 53, 46, 48, 44, 32, 97,116,116, +118, 99,111,108, 46,122, 47, 50, 53, 53, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,117,118, 95, 97, +116,116,114,105, 98,117,116,101, 40,118,101, 99, 50, 32, 97,116,116,117,118, 44, 32,111,117,116, 32,118,101, 99, 51, 32,117,118, + 41, 10,123, 10, 9,117,118, 32, 61, 32,118,101, 99, 51, 40, 97,116,116,117,118, 42, 50, 46, 48, 32, 45, 32,118,101, 99, 50, 40, + 49, 46, 48, 44, 32, 49, 46, 48, 41, 44, 32, 48, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,103,101,111,109, 40,118,101, + 99, 51, 32, 99,111, 44, 32,118,101, 99, 51, 32,110,111,114, 44, 32,109, 97,116, 52, 32,118,105,101,119,105,110,118,109, 97,116, + 44, 32,118,101, 99, 51, 32, 97,116,116,111,114, 99,111, 44, 32,118,101, 99, 50, 32, 97,116,116,117,118, 44, 32,118,101, 99, 52, + 32, 97,116,116,118, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,103,108,111, 98, 97,108, 44, 32,111,117,116, 32,118, +101, 99, 51, 32,108,111, 99, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118,105,101,119, 44, 32,111,117,116, 32,118,101, + 99, 51, 32,111,114, 99,111, 44, 32,111,117,116, 32,118,101, 99, 51, 32,117,118, 44, 32,111,117,116, 32,118,101, 99, 51, 32,110, +111,114,109, 97,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,118, 99,111,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32, +102,114,111,110,116, 98, 97, 99,107, 41, 10,123, 10, 9,108,111, 99, 97,108, 32, 61, 32, 99,111, 59, 10, 9,118,105,101,119, 32, + 61, 32,110,111,114,109, 97,108,105,122,101, 40,108,111, 99, 97,108, 41, 59, 10, 9,103,108,111, 98, 97,108, 32, 61, 32, 40,118, +105,101,119,105,110,118,109, 97,116, 42,118,101, 99, 52, 40,108,111, 99, 97,108, 44, 32, 49, 46, 48, 41, 41, 46,120,121,122, 59, + 10, 9,111,114, 99,111, 32, 61, 32, 97,116,116,111,114, 99,111, 59, 10, 9,117,118, 95, 97,116,116,114,105, 98,117,116,101, 40, + 97,116,116,117,118, 44, 32,117,118, 41, 59, 10, 9,110,111,114,109, 97,108, 32, 61, 32, 45,110,111,114,109, 97,108,105,122,101, + 40,110,111,114, 41, 59, 9, 47, 42, 32, 98,108,101,110,100,101,114, 32,114,101,110,100,101,114, 32,110,111,114,109, 97,108, 32, +105,115, 32,110,101,103, 97,116,101,100, 32, 42, 47, 10, 9,118, 99,111,108, 95, 97,116,116,114,105, 98,117,116,101, 40, 97,116, +116,118, 99,111,108, 44, 32,118, 99,111,108, 41, 59, 10, 9,102,114,111,110,116, 98, 97, 99,107, 32, 61, 32, 49, 46, 48, 59, 10, +125, 10, 10,118,111,105,100, 32,109, 97,112,112,105,110,103, 40,118,101, 99, 51, 32,118,101, 99, 44, 32,109, 97,116, 52, 32,109, + 97,116, 44, 32,118,101, 99, 51, 32,109,105,110,118,101, 99, 44, 32,118,101, 99, 51, 32,109, 97,120,118,101, 99, 44, 32,102,108, +111, 97,116, 32,100,111,109,105,110, 44, 32,102,108,111, 97,116, 32,100,111,109, 97,120, 44, 32,111,117,116, 32,118,101, 99, 51, + 32,111,117,116,118,101, 99, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32, 40,109, 97,116, 32, 42, 32,118,101, 99, 52, + 40,118,101, 99, 44, 32, 49, 46, 48, 41, 41, 46,120,121,122, 59, 10, 9,105,102, 40,100,111,109,105,110, 32, 61, 61, 32, 49, 46, + 48, 41, 10, 9, 9,111,117,116,118,101, 99, 32, 61, 32,109, 97,120, 40,111,117,116,118,101, 99, 44, 32,109,105,110,118,101, 99, + 41, 59, 10, 9,105,102, 40,100,111,109, 97,120, 32, 61, 61, 32, 49, 46, 48, 41, 10, 9, 9,111,117,116,118,101, 99, 32, 61, 32, +109,105,110, 40,111,117,116,118,101, 99, 44, 32,109, 97,120,118,101, 99, 41, 59, 10,125, 10, 10,118,111,105,100, 32, 99, 97,109, +101,114, 97, 40,118,101, 99, 51, 32, 99,111, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,105,101,119, 44, 32,111, +117,116, 32,102,108,111, 97,116, 32,111,117,116,100,101,112,116,104, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116, +100,105,115,116, 41, 10,123, 10, 9,111,117,116,100,101,112,116,104, 32, 61, 32, 97, 98,115, 40, 99,111, 46,122, 41, 59, 10, 9, +111,117,116,100,105,115,116, 32, 61, 32,108,101,110,103,116,104, 40, 99,111, 41, 59, 10, 9,111,117,116,118,105,101,119, 32, 61, + 32,110,111,114,109, 97,108,105,122,101, 40, 99,111, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95, 97,100,100, + 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, + 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118, 97,108, 49, 32, 43, 32,118, 97, +108, 50, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,115,117, 98,116,114, 97, 99,116, 40,102,108,111, 97,116, 32, +118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, + 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118, 97,108, 49, 32, 45, 32,118, 97,108, 50, 59, 10,125, 10, 10, +118,111,105,100, 32,109, 97,116,104, 95,109,117,108,116,105,112,108,121, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102, 108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9, -105,102, 32, 40,118, 97,108, 49, 32, 62, 61, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32,112,111,119, 40, -118, 97,108, 49, 44, 32,118, 97,108, 50, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, - 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,108,111,103, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32, -102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, - 9,105,102, 40,118, 97,108, 49, 32, 62, 32, 48, 46, 48, 32, 32, 38, 38, 32,118, 97,108, 50, 32, 62, 32, 48, 46, 48, 41, 10, 9, - 9,111,117,116,118, 97,108, 61, 32,108,111,103, 50, 40,118, 97,108, 49, 41, 32, 47, 32,108,111,103, 50, 40,118, 97,108, 50, 41, - 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116,118, 97,108, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, - 97,116,104, 95,109, 97,120, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32, -111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,109, 97, -120, 40,118, 97,108, 49, 44, 32,118, 97,108, 50, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,109,105,110, 40, -102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97, -116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,109,105,110, 40,118, 97,108, 49, 44, 32, -118, 97,108, 50, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,114,111,117,110,100, 40,102,108,111, 97,116, 32, -118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, - 61, 32,102,108,111,111,114, 40,118, 97,108, 32, 43, 32, 48, 46, 53, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, - 95,108,101,115,115, 95,116,104, 97,110, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, - 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,105,102, 40,118, 97,108, 49, 32, - 60, 32,118, 97,108, 50, 41, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 49, 46, 48, 59, 10, 9,101,108,115,101, 10, 9, 9, -111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,103,114,101, 97,116, -101,114, 95,116,104, 97,110, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32, -111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,105,102, 40,118, 97,108, 49, 32, 62, 32,118, - 97,108, 50, 41, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 49, 46, 48, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116, -118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,115,113,117,101,101,122,101, 40,102,108,111, 97,116, - 32,118, 97,108, 44, 32,102,108,111, 97,116, 32,119,105,100,116,104, 44, 32,102,108,111, 97,116, 32, 99,101,110,116,101,114, 44, - 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 49, - 46, 48, 47, 40, 49, 46, 48, 32, 43, 32,112,111,119, 40, 50, 46, 55, 49, 56, 50, 56, 49, 56, 51, 44, 32, 45, 40, 40,118, 97,108, - 45, 99,101,110,116,101,114, 41, 42,119,105,100,116,104, 41, 41, 41, 59, 10,125, 10, 10,118,111,105,100, 32,118,101, 99, 95,109, - 97,116,104, 95, 97,100,100, 40,118,101, 99, 51, 32,118, 49, 44, 32,118,101, 99, 51, 32,118, 50, 44, 32,111,117,116, 32,118,101, - 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9, -111,117,116,118,101, 99, 32, 61, 32,118, 49, 32, 43, 32,118, 50, 59, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 40, 97, 98,115, - 40,111,117,116,118,101, 99, 91, 48, 93, 41, 32, 43, 32, 97, 98,115, 40,111,117,116,118,101, 99, 91, 49, 93, 41, 32, 43, 32, 97, - 98,115, 40,111,117,116,118,101, 99, 91, 50, 93, 41, 41, 47, 51, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,118,101, 99, 95, -109, 97,116,104, 95,115,117, 98, 40,118,101, 99, 51, 32,118, 49, 44, 32,118,101, 99, 51, 32,118, 50, 44, 32,111,117,116, 32,118, -101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, - 9,111,117,116,118,101, 99, 32, 61, 32,118, 49, 32, 45, 32,118, 50, 59, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 40, 97, 98, -115, 40,111,117,116,118,101, 99, 91, 48, 93, 41, 32, 43, 32, 97, 98,115, 40,111,117,116,118,101, 99, 91, 49, 93, 41, 32, 43, 32, - 97, 98,115, 40,111,117,116,118,101, 99, 91, 50, 93, 41, 41, 47, 51, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,118,101, 99, - 95,109, 97,116,104, 95, 97,118,101,114, 97,103,101, 40,118,101, 99, 51, 32,118, 49, 44, 32,118,101, 99, 51, 32,118, 50, 44, 32, -111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97, -108, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32,118, 49, 32, 43, 32,118, 50, 59, 10, 9,111,117,116,118, 97,108, 32, - 61, 32,108,101,110,103,116,104, 40,111,117,116,118,101, 99, 41, 59, 10, 9,111,117,116,118,101, 99, 32, 61, 32,110,111,114,109, - 97,108,105,122,101, 40,111,117,116,118,101, 99, 41, 59, 10,125, 10, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95, -100,111,116, 40,118,101, 99, 51, 32,118, 49, 44, 32,118,101, 99, 51, 32,118, 50, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111, -117,116,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, -101, 99, 32, 61, 32,118,101, 99, 51, 40, 48, 44, 32, 48, 44, 32, 48, 41, 59, 10, 9,111,117,116,118, 97,108, 32, 61, 32,100,111, -116, 40,118, 49, 44, 32,118, 50, 41, 59, 10,125, 10, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95, 99,114,111,115, -115, 40,118,101, 99, 51, 32,118, 49, 44, 32,118,101, 99, 51, 32,118, 50, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116, -118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118,101, 99, - 32, 61, 32, 99,114,111,115,115, 40,118, 49, 44, 32,118, 50, 41, 59, 10, 9,111,117,116,118, 97,108, 32, 61, 32,108,101,110,103, -116,104, 40,111,117,116,118,101, 99, 41, 59, 10,125, 10, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95,110,111,114, -109, 97,108,105,122,101, 40,118,101, 99, 51, 32,118, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32, -111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,108,101, -110,103,116,104, 40,118, 41, 59, 10, 9,111,117,116,118,101, 99, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,118, 41, 59, - 10,125, 10, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95,110,101,103, 97,116,101, 40,118,101, 99, 51, 32,118, 44, - 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118, 41, 10,123, 10, 9,111,117,116,118, 32, 61, 32, 45,118, 59, 10,125, 10, - 10,118,111,105,100, 32,110,111,114,109, 97,108, 40,118,101, 99, 51, 32,100,105,114, 44, 32,118,101, 99, 51, 32,110,111,114, 44, - 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,110,111,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,100, -111,116, 41, 10,123, 10, 9,111,117,116,110,111,114, 32, 61, 32,100,105,114, 59, 10, 9,111,117,116,100,111,116, 32, 61, 32, 45, -100,111,116, 40,100,105,114, 44, 32,110,111,114, 41, 59, 10,125, 10, 10,118,111,105,100, 32, 99,117,114,118,101,115, 95,118,101, - 99, 40,118,101, 99, 51, 32,118,101, 99, 44, 32,115, 97,109,112,108,101,114, 49, 68, 32, 99,117,114,118,101,109, 97,112, 44, 32, -111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 41, 10,123, 10, 9,111,117,116,118,101, 99, 46,120, 32, 61, 32,116, -101,120,116,117,114,101, 49, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32, 40,118,101, 99, 46,120, 32, 43, 32, 49, 46, 48, 41, - 42, 48, 46, 53, 41, 46,120, 59, 10, 9,111,117,116,118,101, 99, 46,121, 32, 61, 32,116,101,120,116,117,114,101, 49, 68, 40, 99, -117,114,118,101,109, 97,112, 44, 32, 40,118,101, 99, 46,121, 32, 43, 32, 49, 46, 48, 41, 42, 48, 46, 53, 41, 46,121, 59, 10, 9, -111,117,116,118,101, 99, 46,122, 32, 61, 32,116,101,120,116,117,114,101, 49, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32, 40, -118,101, 99, 46,122, 32, 43, 32, 49, 46, 48, 41, 42, 48, 46, 53, 41, 46,122, 59, 10,125, 10, 10,118,111,105,100, 32, 99,117,114, -118,101,115, 95,114,103, 98, 40,118,101, 99, 52, 32, 99,111,108, 44, 32,115, 97,109,112,108,101,114, 49, 68, 32, 99,117,114,118, -101,109, 97,112, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116, 99,111,108, - 46,114, 32, 61, 32,116,101,120,116,117,114,101, 49, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,116,101,120,116,117,114,101, - 49, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32, 99,111,108, 46,114, 41, 46, 97, 41, 46,114, 59, 10, 9,111,117,116, 99,111, -108, 46,103, 32, 61, 32,116,101,120,116,117,114,101, 49, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,116,101,120,116,117,114, -101, 49, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32, 99,111,108, 46,103, 41, 46, 97, 41, 46,103, 59, 10, 9,111,117,116, 99, -111,108, 46, 98, 32, 61, 32,116,101,120,116,117,114,101, 49, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,116,101,120,116,117, -114,101, 49, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32, 99,111,108, 46, 98, 41, 46, 97, 41, 46, 98, 59, 10, 9,111,117,116, +111,117,116,118, 97,108, 32, 61, 32,118, 97,108, 49, 32, 42, 32,118, 97,108, 50, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97, +116,104, 95,100,105,118,105,100,101, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, + 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,105,102, 32, 40,118, 97,108, 50, 32, + 61, 61, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10, 9,101,108,115,101, 10, 9, 9, +111,117,116,118, 97,108, 32, 61, 32,118, 97,108, 49, 32, 47, 32,118, 97,108, 50, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97, +116,104, 95,115,105,110,101, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116, +118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,115,105,110, 40,118, 97,108, 41, 59, 10,125, 10, 10,118,111, +105,100, 32,109, 97,116,104, 95, 99,111,115,105,110,101, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108, +111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 99,111,115, 40,118, 97,108, 41, + 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,116, 97,110,103,101,110,116, 40,102,108,111, 97,116, 32,118, 97,108, + 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32, +116, 97,110, 40,118, 97,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95, 97,115,105,110, 40,102,108,111, 97, +116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,105,102, 32, 40, +118, 97,108, 32, 60, 61, 32, 49, 46, 48, 32, 38, 38, 32,118, 97,108, 32, 62, 61, 32, 45, 49, 46, 48, 41, 10, 9, 9,111,117,116, +118, 97,108, 32, 61, 32, 97,115,105,110, 40,118, 97,108, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116,118, 97,108, 32, + 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95, 97, 99,111,115, 40,102,108,111, 97,116, 32,118, + 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,105,102, 32, 40,118, 97,108, + 32, 60, 61, 32, 49, 46, 48, 32, 38, 38, 32,118, 97,108, 32, 62, 61, 32, 45, 49, 46, 48, 41, 10, 9, 9,111,117,116,118, 97,108, + 32, 61, 32, 97, 99,111,115, 40,118, 97,108, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48, + 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95, 97,116, 97,110, 40,102,108,111, 97,116, 32,118, 97,108, 44, + 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 97, +116, 97,110, 40,118, 97,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,112,111,119, 40,102,108,111, 97,116, + 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116, +118, 97,108, 41, 10,123, 10, 9,105,102, 32, 40,118, 97,108, 49, 32, 62, 61, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116,118, 97, +108, 32, 61, 32,112,111,119, 40,118, 97,108, 49, 44, 32,118, 97,108, 50, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116, +118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,108,111,103, 40,102,108,111, 97, +116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117, +116,118, 97,108, 41, 10,123, 10, 9,105,102, 40,118, 97,108, 49, 32, 62, 32, 48, 46, 48, 32, 32, 38, 38, 32,118, 97,108, 50, 32, + 62, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116,118, 97,108, 61, 32,108,111,103, 50, 40,118, 97,108, 49, 41, 32, 47, 32,108,111, +103, 50, 40,118, 97,108, 50, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116,118, 97,108, 61, 32, 48, 46, 48, 59, 10,125, + 10, 10,118,111,105,100, 32,109, 97,116,104, 95,109, 97,120, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97, +116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116, +118, 97,108, 32, 61, 32,109, 97,120, 40,118, 97,108, 49, 44, 32,118, 97,108, 50, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, + 97,116,104, 95,109,105,110, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32, +111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,109,105, +110, 40,118, 97,108, 49, 44, 32,118, 97,108, 50, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,114,111,117,110, +100, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, + 10, 9,111,117,116,118, 97,108, 61, 32,102,108,111,111,114, 40,118, 97,108, 32, 43, 32, 48, 46, 53, 41, 59, 10,125, 10, 10,118, +111,105,100, 32,109, 97,116,104, 95,108,101,115,115, 95,116,104, 97,110, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102, +108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9, +105,102, 40,118, 97,108, 49, 32, 60, 32,118, 97,108, 50, 41, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 49, 46, 48, 59, 10, + 9,101,108,115,101, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97, +116,104, 95,103,114,101, 97,116,101,114, 95,116,104, 97,110, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97, +116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,105,102, 40, +118, 97,108, 49, 32, 62, 32,118, 97,108, 50, 41, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 49, 46, 48, 59, 10, 9,101,108, +115,101, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,115,113,117,101,101, +122,101, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,102,108,111, 97,116, 32,119,105,100,116,104, 44, 32,102,108,111, 97,116, + 32, 99,101,110,116,101,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117, +116,118, 97,108, 32, 61, 32, 49, 46, 48, 47, 40, 49, 46, 48, 32, 43, 32,112,111,119, 40, 50, 46, 55, 49, 56, 50, 56, 49, 56, 51, + 44, 32, 45, 40, 40,118, 97,108, 45, 99,101,110,116,101,114, 41, 42,119,105,100,116,104, 41, 41, 41, 59, 10,125, 10, 10,118,111, +105,100, 32,118,101, 99, 95,109, 97,116,104, 95, 97,100,100, 40,118,101, 99, 51, 32,118, 49, 44, 32,118,101, 99, 51, 32,118, 50, + 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116, +118, 97,108, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32,118, 49, 32, 43, 32,118, 50, 59, 10, 9,111,117,116,118, 97, +108, 32, 61, 32, 40, 97, 98,115, 40,111,117,116,118,101, 99, 91, 48, 93, 41, 32, 43, 32, 97, 98,115, 40,111,117,116,118,101, 99, + 91, 49, 93, 41, 32, 43, 32, 97, 98,115, 40,111,117,116,118,101, 99, 91, 50, 93, 41, 41, 47, 51, 46, 48, 59, 10,125, 10, 10,118, +111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95,115,117, 98, 40,118,101, 99, 51, 32,118, 49, 44, 32,118,101, 99, 51, 32,118, + 50, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117, +116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32,118, 49, 32, 45, 32,118, 50, 59, 10, 9,111,117,116,118, + 97,108, 32, 61, 32, 40, 97, 98,115, 40,111,117,116,118,101, 99, 91, 48, 93, 41, 32, 43, 32, 97, 98,115, 40,111,117,116,118,101, + 99, 91, 49, 93, 41, 32, 43, 32, 97, 98,115, 40,111,117,116,118,101, 99, 91, 50, 93, 41, 41, 47, 51, 46, 48, 59, 10,125, 10, 10, +118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95, 97,118,101,114, 97,103,101, 40,118,101, 99, 51, 32,118, 49, 44, 32,118, +101, 99, 51, 32,118, 50, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117,116, 32,102,108,111, + 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32,118, 49, 32, 43, 32,118, 50, 59, 10, + 9,111,117,116,118, 97,108, 32, 61, 32,108,101,110,103,116,104, 40,111,117,116,118,101, 99, 41, 59, 10, 9,111,117,116,118,101, + 99, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,111,117,116,118,101, 99, 41, 59, 10,125, 10, 10,118,111,105,100, 32,118, +101, 99, 95,109, 97,116,104, 95,100,111,116, 40,118,101, 99, 51, 32,118, 49, 44, 32,118,101, 99, 51, 32,118, 50, 44, 32,111,117, +116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, + 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32,118,101, 99, 51, 40, 48, 44, 32, 48, 44, 32, 48, 41, 59, 10, 9,111,117,116, +118, 97,108, 32, 61, 32,100,111,116, 40,118, 49, 44, 32,118, 50, 41, 59, 10,125, 10, 10,118,111,105,100, 32,118,101, 99, 95,109, + 97,116,104, 95, 99,114,111,115,115, 40,118,101, 99, 51, 32,118, 49, 44, 32,118,101, 99, 51, 32,118, 50, 44, 32,111,117,116, 32, +118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, + 10, 9,111,117,116,118,101, 99, 32, 61, 32, 99,114,111,115,115, 40,118, 49, 44, 32,118, 50, 41, 59, 10, 9,111,117,116,118, 97, +108, 32, 61, 32,108,101,110,103,116,104, 40,111,117,116,118,101, 99, 41, 59, 10,125, 10, 10,118,111,105,100, 32,118,101, 99, 95, +109, 97,116,104, 95,110,111,114,109, 97,108,105,122,101, 40,118,101, 99, 51, 32,118, 44, 32,111,117,116, 32,118,101, 99, 51, 32, +111,117,116,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116, +118, 97,108, 32, 61, 32,108,101,110,103,116,104, 40,118, 41, 59, 10, 9,111,117,116,118,101, 99, 32, 61, 32,110,111,114,109, 97, +108,105,122,101, 40,118, 41, 59, 10,125, 10, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95,110,101,103, 97,116,101, + 40,118,101, 99, 51, 32,118, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118, 41, 10,123, 10, 9,111,117,116,118, 32, + 61, 32, 45,118, 59, 10,125, 10, 10,118,111,105,100, 32,110,111,114,109, 97,108, 40,118,101, 99, 51, 32,100,105,114, 44, 32,118, +101, 99, 51, 32,110,111,114, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,110,111,114, 44, 32,111,117,116, 32,102,108, +111, 97,116, 32,111,117,116,100,111,116, 41, 10,123, 10, 9,111,117,116,110,111,114, 32, 61, 32,100,105,114, 59, 10, 9,111,117, +116,100,111,116, 32, 61, 32, 45,100,111,116, 40,100,105,114, 44, 32,110,111,114, 41, 59, 10,125, 10, 10,118,111,105,100, 32, 99, +117,114,118,101,115, 95,118,101, 99, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 51, 32,118,101, 99, 44, 32,115, + 97,109,112,108,101,114, 49, 68, 32, 99,117,114,118,101,109, 97,112, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118, +101, 99, 41, 10,123, 10, 9,111,117,116,118,101, 99, 46,120, 32, 61, 32,116,101,120,116,117,114,101, 49, 68, 40, 99,117,114,118, +101,109, 97,112, 44, 32, 40,118,101, 99, 46,120, 32, 43, 32, 49, 46, 48, 41, 42, 48, 46, 53, 41, 46,120, 59, 10, 9,111,117,116, +118,101, 99, 46,121, 32, 61, 32,116,101,120,116,117,114,101, 49, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32, 40,118,101, 99, + 46,121, 32, 43, 32, 49, 46, 48, 41, 42, 48, 46, 53, 41, 46,121, 59, 10, 9,111,117,116,118,101, 99, 46,122, 32, 61, 32,116,101, +120,116,117,114,101, 49, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32, 40,118,101, 99, 46,122, 32, 43, 32, 49, 46, 48, 41, 42, + 48, 46, 53, 41, 46,122, 59, 10, 9,105,102, 32, 40,102, 97, 99, 32, 33, 61, 32, 49, 46, 48, 41, 32,123, 10, 9, 9,111,117,116, +118,101, 99, 32, 61, 32, 40,111,117,116,118,101, 99, 42,102, 97, 99, 41, 32, 43, 32, 40,118,101, 99, 42, 40, 49, 46, 48, 45,102, + 97, 99, 41, 41, 59, 10, 9,125, 10,125, 10, 10,118,111,105,100, 32, 99,117,114,118,101,115, 95,114,103, 98, 40,102,108,111, 97, +116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 44, 32,115, 97,109,112,108,101,114, 49, 68, 32, 99,117,114,118,101, +109, 97,112, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116, 99,111,108, 46, +114, 32, 61, 32,116,101,120,116,117,114,101, 49, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,116,101,120,116,117,114,101, 49, + 68, 40, 99,117,114,118,101,109, 97,112, 44, 32, 99,111,108, 46,114, 41, 46, 97, 41, 46,114, 59, 10, 9,111,117,116, 99,111,108, + 46,103, 32, 61, 32,116,101,120,116,117,114,101, 49, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,116,101,120,116,117,114,101, + 49, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32, 99,111,108, 46,103, 41, 46, 97, 41, 46,103, 59, 10, 9,111,117,116, 99,111, +108, 46, 98, 32, 61, 32,116,101,120,116,117,114,101, 49, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,116,101,120,116,117,114, +101, 49, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32, 99,111,108, 46, 98, 41, 46, 97, 41, 46, 98, 59, 10, 9,105,102, 32, 40, +102, 97, 99, 32, 33, 61, 32, 49, 46, 48, 41, 32,123, 10, 9, 9,111,117,116, 99,111,108, 32, 61, 32, 40,111,117,116, 99,111,108, + 42,102, 97, 99, 41, 32, 43, 32, 40, 99,111,108, 42, 40, 49, 46, 48, 45,102, 97, 99, 41, 41, 59, 10, 9,125, 10, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,115,101,116, 95,118, 97,108,117,101, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118, 97,108, 59, 10,125, 10, 10,118,111,105,100, 32,115,101,116, 95,114,103, 98, 40,118, diff --git a/source/blender/ikplugin/intern/ikplugin_api.c b/source/blender/ikplugin/intern/ikplugin_api.c index f106302dbaf..c6ff6377f00 100644 --- a/source/blender/ikplugin/intern/ikplugin_api.c +++ b/source/blender/ikplugin/intern/ikplugin_api.c @@ -31,7 +31,7 @@ #include "BIK_api.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BKE_armature.h" #include "BKE_utildefines.h" diff --git a/source/blender/ikplugin/intern/iksolver_plugin.c b/source/blender/ikplugin/intern/iksolver_plugin.c index 6eb1ef56094..e9378a7e12b 100644 --- a/source/blender/ikplugin/intern/iksolver_plugin.c +++ b/source/blender/ikplugin/intern/iksolver_plugin.c @@ -31,7 +31,7 @@ #include "BIK_api.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BKE_armature.h" #include "BKE_constraint.h" @@ -179,10 +179,10 @@ static void make_dmats(bPoseChannel *pchan) { if (pchan->parent) { float iR_parmat[4][4]; - Mat4Invert(iR_parmat, pchan->parent->pose_mat); - Mat4MulMat4(pchan->chan_mat, pchan->pose_mat, iR_parmat); // delta mat + invert_m4_m4(iR_parmat, pchan->parent->pose_mat); + mul_m4_m4m4(pchan->chan_mat, pchan->pose_mat, iR_parmat); // delta mat } - else Mat4CpyMat4(pchan->chan_mat, pchan->pose_mat); + else copy_m4_m4(pchan->chan_mat, pchan->pose_mat); } /* applies IK matrix to pchan, IK is done separated */ @@ -192,19 +192,19 @@ static void where_is_ik_bone(bPoseChannel *pchan, float ik_mat[][3]) // nr = t { float vec[3], ikmat[4][4]; - Mat4CpyMat3(ikmat, ik_mat); + copy_m4_m3(ikmat, ik_mat); if (pchan->parent) - Mat4MulSerie(pchan->pose_mat, pchan->parent->pose_mat, pchan->chan_mat, ikmat, NULL, NULL, NULL, NULL, NULL); + mul_serie_m4(pchan->pose_mat, pchan->parent->pose_mat, pchan->chan_mat, ikmat, NULL, NULL, NULL, NULL, NULL); else - Mat4MulMat4(pchan->pose_mat, ikmat, pchan->chan_mat); + mul_m4_m4m4(pchan->pose_mat, ikmat, pchan->chan_mat); /* calculate head */ VECCOPY(pchan->pose_head, pchan->pose_mat[3]); /* calculate tail */ VECCOPY(vec, pchan->pose_mat[1]); - VecMulf(vec, pchan->bone->length); - VecAddf(pchan->pose_tail, pchan->pose_head, vec); + mul_v3_fl(vec, pchan->bone->length); + add_v3_v3v3(pchan->pose_tail, pchan->pose_head, vec); pchan->flag |= POSE_DONE; } @@ -266,41 +266,41 @@ static void execute_posetree(struct Scene *scene, Object *ob, PoseTree *tree) IK_SetParent(seg, parent); /* get the matrix that transforms from prevbone into this bone */ - Mat3CpyMat4(R_bonemat, pchan->pose_mat); + copy_m3_m4(R_bonemat, pchan->pose_mat); /* gather transformations for this IK segment */ if (pchan->parent) - Mat3CpyMat4(R_parmat, pchan->parent->pose_mat); + copy_m3_m4(R_parmat, pchan->parent->pose_mat); else - Mat3One(R_parmat); + unit_m3(R_parmat); /* bone offset */ if (pchan->parent && (a > 0)) - VecSubf(start, pchan->pose_head, pchan->parent->pose_tail); + sub_v3_v3v3(start, pchan->pose_head, pchan->parent->pose_tail); else /* only root bone (a = 0) has no parent */ start[0]= start[1]= start[2]= 0.0f; /* change length based on bone size */ - length= bone->length*VecLength(R_bonemat[1]); + length= bone->length*len_v3(R_bonemat[1]); /* compute rest basis and its inverse */ - Mat3CpyMat3(rest_basis, bone->bone_mat); - Mat3CpyMat3(irest_basis, bone->bone_mat); - Mat3Transp(irest_basis); + copy_m3_m3(rest_basis, bone->bone_mat); + copy_m3_m3(irest_basis, bone->bone_mat); + transpose_m3(irest_basis); /* compute basis with rest_basis removed */ - Mat3Inv(iR_parmat, R_parmat); - Mat3MulMat3(full_basis, iR_parmat, R_bonemat); - Mat3MulMat3(basis, irest_basis, full_basis); + invert_m3_m3(iR_parmat, R_parmat); + mul_m3_m3m3(full_basis, iR_parmat, R_bonemat); + mul_m3_m3m3(basis, irest_basis, full_basis); /* basis must be pure rotation */ - Mat3Ortho(basis); + normalize_m3(basis); /* transform offset into local bone space */ - Mat3Ortho(iR_parmat); - Mat3MulVecfl(iR_parmat, start); + normalize_m3(iR_parmat); + mul_m3_v3(iR_parmat, start); IK_SetTransform(seg, start, rest_basis, basis, length); @@ -332,13 +332,13 @@ static void execute_posetree(struct Scene *scene, Object *ob, PoseTree *tree) /* transform goal by parent mat, so this rotation is not part of the segment's basis. otherwise rotation limits do not work on the local transform of the segment itself. */ - Mat4CpyMat4(rootmat, pchan->parent->pose_mat); + copy_m4_m4(rootmat, pchan->parent->pose_mat); else - Mat4One(rootmat); + unit_m4(rootmat); VECCOPY(rootmat[3], pchan->pose_head); - Mat4MulMat4 (imat, rootmat, ob->obmat); - Mat4Invert (goalinv, imat); + mul_m4_m4m4(imat, rootmat, ob->obmat); + invert_m4_m4(goalinv, imat); for (target=tree->targets.first; target; target=target->next) { float polepos[3]; @@ -352,10 +352,10 @@ static void execute_posetree(struct Scene *scene, Object *ob, PoseTree *tree) get_constraint_target_matrix(scene, target->con, 0, CONSTRAINT_OBTYPE_OBJECT, ob, rootmat, 1.0); /* and set and transform goal */ - Mat4MulMat4(goal, rootmat, goalinv); + mul_m4_m4m4(goal, rootmat, goalinv); VECCOPY(goalpos, goal[3]); - Mat3CpyMat4(goalrot, goal); + copy_m3_m4(goalrot, goal); /* same for pole vector target */ if(data->poletar) { @@ -366,7 +366,7 @@ static void execute_posetree(struct Scene *scene, Object *ob, PoseTree *tree) break; } else { - Mat4MulMat4(goal, rootmat, goalinv); + mul_m4_m4m4(goal, rootmat, goalinv); VECCOPY(polepos, goal[3]); poleconstrain= 1; @@ -392,9 +392,9 @@ static void execute_posetree(struct Scene *scene, Object *ob, PoseTree *tree) pchan= tree->pchan[target->tip]; /* end effector in world space */ - Mat4CpyMat4(end_pose, pchan->pose_mat); + copy_m4_m4(end_pose, pchan->pose_mat); VECCOPY(end_pose[3], pchan->pose_tail); - Mat4MulSerie(world_pose, goalinv, ob->obmat, end_pose, 0, 0, 0, 0, 0); + mul_serie_m4(world_pose, goalinv, ob->obmat, end_pose, 0, 0, 0, 0, 0); /* blend position */ goalpos[0]= fac*goalpos[0] + mfac*world_pose[3][0]; @@ -402,10 +402,10 @@ static void execute_posetree(struct Scene *scene, Object *ob, PoseTree *tree) goalpos[2]= fac*goalpos[2] + mfac*world_pose[3][2]; /* blend rotation */ - Mat3ToQuat(goalrot, q1); - Mat4ToQuat(world_pose, q2); - QuatInterpol(q, q1, q2, mfac); - QuatToMat3(q, goalrot); + mat3_to_quat( q1,goalrot); + mat4_to_quat( q2,world_pose); + interp_qt_qtqt(q, q1, q2, mfac); + quat_to_mat3( goalrot,q); } iktarget= iktree[target->tip]; @@ -449,7 +449,7 @@ static void execute_posetree(struct Scene *scene, Object *ob, PoseTree *tree) float trans[3], length; IK_GetTranslationChange(iktree[a], trans); - length= pchan->bone->length*VecLength(pchan->pose_mat[1]); + length= pchan->bone->length*len_v3(pchan->pose_mat[1]); ikstretch[a]= (length == 0.0)? 1.0: (trans[1]+length)/length; } @@ -458,14 +458,14 @@ static void execute_posetree(struct Scene *scene, Object *ob, PoseTree *tree) stretch= (parentstretch == 0.0)? 1.0: ikstretch[a]/parentstretch; - VecMulf(tree->basis_change[a][0], stretch); - VecMulf(tree->basis_change[a][1], stretch); - VecMulf(tree->basis_change[a][2], stretch); + mul_v3_fl(tree->basis_change[a][0], stretch); + mul_v3_fl(tree->basis_change[a][1], stretch); + mul_v3_fl(tree->basis_change[a][2], stretch); } if(resultblend && resultinf!=1.0f) { - Mat3One(identity); - Mat3BlendMat3(tree->basis_change[a], identity, + unit_m3(identity); + blend_m3_m3m3(tree->basis_change[a], identity, tree->basis_change[a], resultinf); } diff --git a/source/blender/ikplugin/intern/itasc_plugin.cpp b/source/blender/ikplugin/intern/itasc_plugin.cpp index 3dcb9e462b9..05de0a0775b 100644 --- a/source/blender/ikplugin/intern/itasc_plugin.cpp +++ b/source/blender/ikplugin/intern/itasc_plugin.cpp @@ -46,7 +46,7 @@ extern "C" { #include "BIK_api.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BKE_global.h" #include "BKE_armature.h" @@ -550,15 +550,15 @@ static bool target_callback(const iTaSC::Timestamp& timestamp, const iTaSC::Fram if (pchan->parent) { pchan = pchan->parent; float chanmat[4][4]; - Mat4CpyMat4(chanmat, pchan->pose_mat); + copy_m4_m4(chanmat, pchan->pose_mat); VECCOPY(chanmat[3], pchan->pose_tail); - Mat4MulSerie(restmat, target->owner->obmat, chanmat, target->eeRest, NULL, NULL, NULL, NULL, NULL); + mul_serie_m4(restmat, target->owner->obmat, chanmat, target->eeRest, NULL, NULL, NULL, NULL, NULL); } else { - Mat4MulMat4(restmat, target->eeRest, target->owner->obmat); + mul_m4_m4m4(restmat, target->eeRest, target->owner->obmat); } // blend the target - Mat4BlendMat4(tarmat, restmat, tarmat, constraint->enforce); + blend_m4_m4m4(tarmat, restmat, tarmat, constraint->enforce); } next.setValue(&tarmat[0][0]); return true; @@ -577,15 +577,15 @@ static bool base_callback(const iTaSC::Timestamp& timestamp, const iTaSC::Frame& if (pchan->parent) { pchan = pchan->parent; float chanmat[4][4]; - Mat4CpyMat4(chanmat, pchan->pose_mat); + copy_m4_m4(chanmat, pchan->pose_mat); VECCOPY(chanmat[3], pchan->pose_tail); // save the base as a frame too so that we can compute deformation // after simulation ikscene->baseFrame.setValue(&chanmat[0][0]); - Mat4MulMat4(rootmat, chanmat, ikscene->blArmature->obmat); + mul_m4_m4m4(rootmat, chanmat, ikscene->blArmature->obmat); } else { - Mat4CpyMat4(rootmat, ikscene->blArmature->obmat); + copy_m4_m4(rootmat, ikscene->blArmature->obmat); ikscene->baseFrame = iTaSC::F_identity; } next.setValue(&rootmat[0][0]); @@ -598,7 +598,7 @@ static bool base_callback(const iTaSC::Timestamp& timestamp, const iTaSC::Frame& float mat[4][4]; // temp matrix bKinematicConstraint* poledata = (bKinematicConstraint*)ikscene->polarConstraint->data; - Mat4Invert(imat, rootmat); + invert_m4_m4(imat, rootmat); // polar constraint imply only one target IK_Target *iktarget = ikscene->targets[0]; // root channel from which we take the bone initial orientation @@ -607,11 +607,11 @@ static bool base_callback(const iTaSC::Timestamp& timestamp, const iTaSC::Frame& // get polar target matrix in world space get_constraint_target_matrix(ikscene->blscene, ikscene->polarConstraint, 1, CONSTRAINT_OBTYPE_OBJECT, ikscene->blArmature, mat, 1.0); // convert to armature space - Mat4MulMat4(polemat, mat, imat); + mul_m4_m4m4(polemat, mat, imat); // get the target in world space (was computed before as target object are defined before base object) iktarget->target->getPose().getValue(mat[0]); // convert to armature space - Mat4MulMat4(goalmat, mat, imat); + mul_m4_m4m4(goalmat, mat, imat); // take position of target, polar target, end effector, in armature space KDL::Vector goalpos(goalmat[3]); KDL::Vector polepos(polemat[3]); @@ -787,16 +787,16 @@ static bool joint_callback(const iTaSC::Timestamp& timestamp, iTaSC::ConstraintV if (chan->rotmode > 0) { /* euler rotations (will cause gimble lock, but this can be alleviated a bit with rotation orders) */ - EulOToMat3(chan->eul, chan->rotmode, rmat); + eulO_to_mat3( rmat,chan->eul, chan->rotmode); } else if (chan->rotmode == ROT_MODE_AXISANGLE) { /* axis-angle - stored in quaternion data, but not really that great for 3D-changing orientations */ - AxisAngleToMat3(&chan->quat[1], chan->quat[0], rmat); + axis_angle_to_mat3( rmat,&chan->quat[1], chan->quat[0]); } else { /* quats are normalised before use to eliminate scaling issues */ - NormalQuat(chan->quat); - QuatToMat3(chan->quat, rmat); + normalize_qt(chan->quat); + quat_to_mat3( rmat,chan->quat); } KDL::Rotation jointRot( rmat[0][0], rmat[1][0], rmat[2][0], @@ -977,26 +977,26 @@ static void convert_pose(IK_Scene *ikscene) int a, joint; // assume uniform scaling and take Y scale as general scale for the armature - scale = VecLength(ikscene->blArmature->obmat[1]); + scale = len_v3(ikscene->blArmature->obmat[1]); rot = &ikscene->jointArray(0); for(joint=a=0, ikchan = ikscene->channels; a<ikscene->numchan && joint<ikscene->numjoint; ++a, ++ikchan) { pchan= ikchan->pchan; bone= pchan->bone; if (pchan->parent) { - Mat4One(bmat); - Mat4MulMat43(bmat, pchan->parent->pose_mat, bone->bone_mat); + unit_m4(bmat); + mul_m4_m4m3(bmat, pchan->parent->pose_mat, bone->bone_mat); } else { - Mat4CpyMat4(bmat, bone->arm_mat); + copy_m4_m4(bmat, bone->arm_mat); } - Mat4Invert(rmat, bmat); - Mat4MulMat4(bmat, pchan->pose_mat, rmat); - Mat4Ortho(bmat); + invert_m4_m4(rmat, bmat); + mul_m4_m4m4(bmat, pchan->pose_mat, rmat); + normalize_m4(bmat); boneRot.setValue(bmat[0]); GetJointRotation(boneRot, ikchan->jointType, rot); if (ikchan->jointType & IK_TRANSY) { // compute actual length - rot[ikchan->ndof-1] = VecLenf(pchan->pose_tail, pchan->pose_head) * scale; + rot[ikchan->ndof-1] = len_v3v3(pchan->pose_tail, pchan->pose_head) * scale; } rot += ikchan->ndof; joint += ikchan->ndof; @@ -1014,7 +1014,7 @@ static void rest_pose(IK_Scene *ikscene) int a, joint; // assume uniform scaling and take Y scale as general scale for the armature - scale = VecLength(ikscene->blArmature->obmat[1]); + scale = len_v3(ikscene->blArmature->obmat[1]); // rest pose is 0 KDL::SetToZero(ikscene->jointArray); // except for transY joints @@ -1103,7 +1103,7 @@ static IK_Scene* convert_tree(Scene *blscene, Object *ob, bPoseChannel *pchan) std::vector<double> weights; double weight[3]; // assume uniform scaling and take Y scale as general scale for the armature - float scale = VecLength(ob->obmat[1]); + float scale = len_v3(ob->obmat[1]); // build the array of joints corresponding to the IK chain convert_channels(ikscene, tree); if (ingame) { @@ -1379,12 +1379,12 @@ static IK_Scene* convert_tree(Scene *blscene, Object *ob, bPoseChannel *pchan) // it has a parent, get the pose matrix from it float baseFrame[4][4]; pchan = pchan->parent; - Mat4CpyMat4(baseFrame, pchan->bone->arm_mat); + copy_m4_m4(baseFrame, pchan->bone->arm_mat); // move to the tail and scale to get rest pose of armature base - VecCopyf(baseFrame[3], pchan->bone->arm_tail); - Mat4Invert(invBaseFrame, baseFrame); + copy_v3_v3(baseFrame[3], pchan->bone->arm_tail); + invert_m4_m4(invBaseFrame, baseFrame); } else { - Mat4One(invBaseFrame); + unit_m4(invBaseFrame); } // finally add the constraint for (t=0; t<ikscene->targets.size(); t++) { @@ -1403,10 +1403,10 @@ static IK_Scene* convert_tree(Scene *blscene, Object *ob, bPoseChannel *pchan) bonelen /= bonecnt; // store the rest pose of the end effector to compute enforce target - Mat4CpyMat4(mat, pchan->bone->arm_mat); - VecCopyf(mat[3], pchan->bone->arm_tail); + copy_m4_m4(mat, pchan->bone->arm_mat); + copy_v3_v3(mat[3], pchan->bone->arm_tail); // get the rest pose relative to the armature base - Mat4MulMat4(iktarget->eeRest, mat, invBaseFrame); + mul_m4_m4m4(iktarget->eeRest, mat, invBaseFrame); iktarget->eeBlend = (!ikscene->polarConstraint && condata->type==CONSTRAINT_IK_COPYPOSE) ? true : false; // use target_callback to make sure the initPose includes enforce coefficient target_callback(iTaSC::Timestamp(), iTaSC::F_identity, initPose, iktarget); @@ -1660,13 +1660,13 @@ static void execute_scene(Scene* blscene, IK_Scene* ikscene, bItasc* ikparam, fl VECCOPY(pchan->pose_tail, pchan->pose_mat[3]); // shift to head VECCOPY(yaxis, pchan->pose_mat[1]); - VecMulf(yaxis, length); - VecSubf(pchan->pose_mat[3], pchan->pose_mat[3], yaxis); + mul_v3_fl(yaxis, length); + sub_v3_v3v3(pchan->pose_mat[3], pchan->pose_mat[3], yaxis); VECCOPY(pchan->pose_head, pchan->pose_mat[3]); // add scale - VecMulf(pchan->pose_mat[0], scale); - VecMulf(pchan->pose_mat[1], scale); - VecMulf(pchan->pose_mat[2], scale); + mul_v3_fl(pchan->pose_mat[0], scale); + mul_v3_fl(pchan->pose_mat[1], scale); + mul_v3_fl(pchan->pose_mat[2], scale); } if (i<ikscene->numchan) { // big problem diff --git a/source/blender/imbuf/intern/Makefile b/source/blender/imbuf/intern/Makefile index 427052cbdc3..0f2020c799a 100644 --- a/source/blender/imbuf/intern/Makefile +++ b/source/blender/imbuf/intern/Makefile @@ -39,7 +39,7 @@ include nan_definitions.mk DIRS = cineon ifeq ($(WITH_OPENEXR), true) - DIRS += openexr + DIRS += openexr CFLAGS += -DWITH_OPENEXR endif @@ -49,7 +49,11 @@ ifeq ($(WITH_DDS), true) endif ifeq ($(WITH_OPENJPEG), true) - CFLAGS += -DWITH_OPENJPEG -I../../../../extern/libopenjpeg + ifndef BF_OPENJPEG_INC + CFLAGS += -DWITH_OPENJPEG -I../../../../extern/libopenjpeg + else + CFLAGS += -DWITH_OPENJPEG -I$(BF_OPENJPEG_INC) + endif endif CFLAGS += $(LEVEL_1_C_WARNINGS) diff --git a/source/blender/makesdna/DNA_action_types.h b/source/blender/makesdna/DNA_action_types.h index 7067c967da3..5f6d8ef375a 100644 --- a/source/blender/makesdna/DNA_action_types.h +++ b/source/blender/makesdna/DNA_action_types.h @@ -220,7 +220,7 @@ typedef enum ePchan_IkFlag { typedef enum eRotationModes { /* quaternion rotations (default, and for older Blender versions) */ ROT_MODE_QUAT = 0, - /* euler rotations - keep in sync with enum in BLI_arithb.h */ + /* euler rotations - keep in sync with enum in BLI_math.h */ ROT_MODE_EUL = 1, /* Blender 'default' (classic) - must be as 1 to sync with arithb defines */ ROT_MODE_XYZ = 1, /* Blender 'default' (classic) - must be as 1 to sync with arithb defines */ ROT_MODE_XZY, @@ -446,6 +446,7 @@ typedef enum DOPESHEET_FILTERFLAG { ADS_FILTER_NOPART = (1<<16), ADS_FILTER_NOMBA = (1<<17), ADS_FILTER_NOARM = (1<<18), + ADS_FILTER_NONTREE = (1<<19), /* NLA-specific filters */ ADS_FILTER_NLA_NOACT = (1<<20), /* if the AnimData block has no NLA data, don't include to just show Action-line */ diff --git a/source/blender/makesdna/DNA_armature_types.h b/source/blender/makesdna/DNA_armature_types.h index d3e611178fe..7dd90a3cf13 100644 --- a/source/blender/makesdna/DNA_armature_types.h +++ b/source/blender/makesdna/DNA_armature_types.h @@ -78,6 +78,9 @@ typedef struct bArmature { ListBase chainbase; ListBase *edbo; /* editbone listbase, we use pointer so we can check state */ + Bone *act_bone; + void *act_edbone; + void *sketch; /* sketch struct for etch-a-ton */ int flag; @@ -154,7 +157,7 @@ typedef enum eBone_Flag { /* 32 used to be quatrot, was always set in files, do not reuse unless you clear it always */ BONE_HIDDEN_P = (1<<6), /* hidden Bones when drawing PoseChannels */ BONE_DONE = (1<<7), /* For detecting cyclic dependancies */ - BONE_ACTIVE = (1<<8), /* active is on mouse clicks only */ + BONE_DRAW_ACTIVE = (1<<8), /* active is on mouse clicks only - deprecated, ONLY USE FOR DRAWING */ BONE_HINGE = (1<<9), /* No parent rotation or scale */ BONE_HIDDEN_A = (1<<10), /* hidden Bones when drawing Armature Editmode */ BONE_MULT_VG_ENV = (1<<11), /* multiplies vgroup with envelope */ diff --git a/source/blender/makesdna/DNA_constraint_types.h b/source/blender/makesdna/DNA_constraint_types.h index f5a08764c42..8235d92d6f7 100644 --- a/source/blender/makesdna/DNA_constraint_types.h +++ b/source/blender/makesdna/DNA_constraint_types.h @@ -90,7 +90,7 @@ typedef struct bConstraintTarget { short space; /* space that target should be evaluated in (overrides bConstraint->tarspace) */ short flag; /* runtime settings (for editor, etc.) */ short type; /* type of target (B_CONSTRAINT_OB_TYPE) */ - short rotOrder; /* rotation order for target (as defined in BLI_arithb.h) */ + short rotOrder; /* rotation order for target (as defined in BLI_math.h) */ } bConstraintTarget; /* bConstraintTarget -> flag */ @@ -169,7 +169,7 @@ typedef struct bSplineIKConstraint { /* settings */ short flag; /* general settings for constraint */ - short upflag; /* axis of bone that points up */ + short xzScaleMode; /* method used for determining the x & z scaling of the bones */ } bSplineIKConstraint; @@ -551,10 +551,16 @@ typedef enum B_CONSTRAINTCHANNEL_FLAG { #define CONSTRAINT_SPLINEIK_NO_ROOT (1<<1) /* bones in the chain should not scale to fit the curve */ #define CONSTRAINT_SPLINEIK_SCALE_LIMITED (1<<2) - /* bones in the chain should take their x/z scales from the curve radius */ -#define CONSTRAINT_SPLINEIK_RAD2FAT (1<<3) /* evenly distribute the bones along the path regardless of length */ -#define CONSTRAINT_SPLINEIK_EVENSPLITS (1<<4) +#define CONSTRAINT_SPLINEIK_EVENSPLITS (1<<3) + +/* bSplineIKConstraint->xzScaleMode */ + /* no x/z scaling */ +#define CONSTRAINT_SPLINEIK_XZS_NONE 0 + /* bones in the chain should take their x/z scales from the curve radius */ +#define CONSTRAINT_SPLINEIK_XZS_RADIUS 1 + /* bones in the chain should take their x/z scales from the original scaling */ +#define CONSTRAINT_SPLINEIK_XZS_ORIGINAL 2 /* MinMax (floor) flags */ #define MINMAX_STICKY 0x01 diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h index db1c261556b..fe6a5b050e3 100644 --- a/source/blender/makesdna/DNA_modifier_types.h +++ b/source/blender/makesdna/DNA_modifier_types.h @@ -508,8 +508,7 @@ typedef struct MeshDeformModifierData { struct Object *object; /* mesh object */ char defgrp_name[32]; /* optional vertexgroup name */ - short gridsize, needbind; - short flag, pad; + short gridsize, flag, pad[2]; /* variables filled in when bound */ float *bindweights, *bindcos; /* computed binding weights */ @@ -522,6 +521,10 @@ typedef struct MeshDeformModifierData { float dyncellmin[3]; /* offset of the dynamic bind grid */ float dyncellwidth; /* width of dynamic bind cell */ float bindmat[4][4]; /* matrix of cage at binding time */ + + /* runtime */ + void (*bindfunc)(struct Scene *scene, struct MeshDeformModifierData *mmd, + float *vertexcos, int totvert, float cagemat[][4]); } MeshDeformModifierData; typedef enum { diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h index ba1bb66c901..7ca8cea0763 100644 --- a/source/blender/makesdna/DNA_node_types.h +++ b/source/blender/makesdna/DNA_node_types.h @@ -40,6 +40,7 @@ struct bNodeLink; struct bNodeType; struct bNodeGroup; struct AnimData; +struct bGPdata; struct uiBlock; #define NODE_MAXSTR 32 @@ -109,7 +110,6 @@ typedef struct bNode { struct bNode *next, *prev, *new_node; char name[32]; - char username[32]; /* custom name defined by user */ short type, flag; short done, level; /* both for dependency and sorting */ short lasty, menunr; /* lasty: check preview render status, menunr: browse ID blocks */ @@ -151,6 +151,7 @@ typedef struct bNode { #define NODE_TEST 256 /* composite: don't do node but pass on buffer(s) */ #define NODE_MUTED 512 +#define NODE_CUSTOM_NAME 1024 typedef struct bNodeLink { struct bNodeLink *next, *prev; @@ -168,6 +169,8 @@ typedef struct bNodeTree { ID id; struct AnimData *adt; /* animation data (must be immediately after id for utilities to use it) */ + struct bGPdata *gpd; /* grease pencil data */ + ListBase nodes, links; bNodeStack *stack; /* stack is only while executing, no read/write in file */ @@ -177,6 +180,8 @@ typedef struct bNodeTree { int stacksize; /* amount of elements in stack */ int cur_index; /* sockets in groups have unique identifiers, adding new sockets always will increase this counter */ + int flag, pad; + ListBase alltypes; /* type definitions */ struct bNodeType *owntype; /* for groups or dynamic trees, no read/write */ @@ -201,6 +206,9 @@ typedef struct bNodeTree { #define NTREE_TYPE_INIT 1 #define NTREE_EXEC_INIT 2 +/* ntree->flag */ +#define NTREE_DS_EXPAND 1 /* for animation editors */ + /* data structs, for node->storage */ /* this one has been replaced with ImageUser, keep it for do_versions() */ @@ -301,4 +309,11 @@ typedef struct TexNodeOutput { char name[32]; } TexNodeOutput; + +/* comp channel matte */ +#define CMP_NODE_CHANNEL_MATTE_CS_RGB 1 +#define CMP_NODE_CHANNEL_MATTE_CS_HSV 2 +#define CMP_NODE_CHANNEL_MATTE_CS_YUV 3 +#define CMP_NODE_CHANNEL_MATTE_CS_YCC 4 + #endif diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h index 810b34a746e..037a8c46222 100644 --- a/source/blender/makesdna/DNA_scene_types.h +++ b/source/blender/makesdna/DNA_scene_types.h @@ -191,7 +191,8 @@ typedef struct RenderData { float edgeR, edgeG, edgeB; short fullscreen, xplay, yplay, freqplay; /* standalone player */ // XXX deprecated since 2.5 - short depth, attrib, rt1, rt2; /* standalone player */ // XXX deprecated since 2.5 + short depth, attrib, rt2; /* standalone player */ // XXX deprecated since 2.5 + short frame_step; /* frames to jump during render/playback */ short stereomode; /* standalone player stereo settings */ // XXX deprecated since 2.5 @@ -738,10 +739,8 @@ typedef struct Scene { short recalc; /* recalc = counterpart of ob->recalc */ short jumpframe; + int pad5; - /* frame step. */ - int frame_step; - /* User-Defined KeyingSets */ int active_keyingset; /* index of the active KeyingSet. first KeyingSet has index 1, 'none' active is 0, 'add new' is -1 */ ListBase keyingsets; /* KeyingSets for the given frame */ diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h index 3a61902e119..d2beab5daba 100644 --- a/source/blender/makesdna/DNA_space_types.h +++ b/source/blender/makesdna/DNA_space_types.h @@ -505,7 +505,8 @@ typedef struct SpaceConsole { ListBase scrollback; /* ConsoleLine; output */ ListBase history; /* ConsoleLine; command history, current edited line is the first */ - char prompt[8]; + char prompt[256]; + char language[32]; /* multiple consoles are possible, not just python */ } SpaceConsole; diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h index dc730ee46f9..8d3c3168e00 100644 --- a/source/blender/makesrna/RNA_access.h +++ b/source/blender/makesrna/RNA_access.h @@ -310,10 +310,12 @@ extern StructRNA RNA_NlaStrip; extern StructRNA RNA_NlaTrack; extern StructRNA RNA_Node; extern StructRNA RNA_NodeTree; +extern StructRNA RNA_NodeSocket; extern StructRNA RNA_NoiseTexture; extern StructRNA RNA_NorController; extern StructRNA RNA_Nurb; extern StructRNA RNA_Object; +extern StructRNA RNA_ObjectBase; extern StructRNA RNA_ObstacleFluidSettings; extern StructRNA RNA_Operator; extern StructRNA RNA_OperatorFileListElement; @@ -358,6 +360,7 @@ extern StructRNA RNA_RenderEngine; extern StructRNA RNA_RenderLayer; extern StructRNA RNA_RenderPass; extern StructRNA RNA_RenderResult; +extern StructRNA RNA_RGBANodeSocket; extern StructRNA RNA_RigidBodyJointConstraint; extern StructRNA RNA_Scene; extern StructRNA RNA_SceneGameData; @@ -515,7 +518,9 @@ extern StructRNA RNA_UserPreferencesFilePaths; extern StructRNA RNA_UserPreferencesSystem; extern StructRNA RNA_UserPreferencesView; extern StructRNA RNA_UserSolidLight; +extern StructRNA RNA_ValueNodeSocket; extern StructRNA RNA_VectorFont; +extern StructRNA RNA_VectorNodeSocket; extern StructRNA RNA_VertexGroup; extern StructRNA RNA_VertexGroupElement; extern StructRNA RNA_VertexPaint; diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index 3bad6e13453..6f1e61e6869 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -1995,7 +1995,7 @@ RNAProcessItem PROCESS_ITEMS[]= { {"rna_context.c", NULL, RNA_def_context}, {"rna_controller.c", NULL, RNA_def_controller}, {"rna_curve.c", NULL, RNA_def_curve}, - {"rna_fcurve.c", NULL, RNA_def_fcurve}, + {"rna_fcurve.c", "rna_fcurve_api.c", RNA_def_fcurve}, {"rna_fluidsim.c", NULL, RNA_def_fluidsim}, {"rna_gpencil.c", NULL, RNA_def_gpencil}, {"rna_group.c", NULL, RNA_def_group}, diff --git a/source/blender/makesrna/intern/rna_ID.c b/source/blender/makesrna/intern/rna_ID.c index bc5c99f0a1e..cb1a1211d24 100644 --- a/source/blender/makesrna/intern/rna_ID.c +++ b/source/blender/makesrna/intern/rna_ID.c @@ -53,7 +53,7 @@ EnumPropertyItem id_type_items[] = { {ID_MA, "MATERIAL", ICON_MATERIAL_DATA, "Material", ""}, {ID_MB, "META", ICON_META_DATA, "MetaBall", ""}, {ID_ME, "MESH", ICON_MESH_DATA, "Mesh", ""}, - {ID_NT, "NODETREE", ICON_NODE, "NodeTree", ""}, + {ID_NT, "NODETREE", ICON_NODETREE, "NodeTree", ""}, {ID_OB, "OBJECT", ICON_OBJECT_DATA, "Object", ""}, {ID_PA, "PARTICLE", ICON_PARTICLE_DATA, "Particle", ""}, {ID_SCE, "SCENE", ICON_SCENE_DATA, "Scene", ""}, @@ -69,6 +69,7 @@ EnumPropertyItem id_type_items[] = { #include "BKE_idprop.h" #include "BKE_library.h" +#include "BKE_animsys.h" /* name functions that ignore the first two ID characters */ void rna_ID_name_get(PointerRNA *ptr, char *value) @@ -326,6 +327,15 @@ static void rna_def_ID(BlenderRNA *brna) RNA_def_function_ui_description(func, "Create a copy of this datablock (not supported for all datablocks)."); parm= RNA_def_pointer(func, "id", "ID", "", "New copy of the ID."); RNA_def_function_return(func, parm); + + func= RNA_def_function(srna, "animation_data_create", "BKE_id_add_animdata"); + RNA_def_function_ui_description(func, "Create animation data to this ID, note that not all ID types support this."); + parm= RNA_def_pointer(func, "anim_data", "AnimData", "", "New animation data or NULL."); + RNA_def_function_return(func, parm); + + func= RNA_def_function(srna, "animation_data_clear", "BKE_free_animdata"); + RNA_def_function_ui_description(func, "Clear animation on this this ID."); + } static void rna_def_library(BlenderRNA *brna) diff --git a/source/blender/makesrna/intern/rna_armature.c b/source/blender/makesrna/intern/rna_armature.c index 96dde186260..e79d8091917 100644 --- a/source/blender/makesrna/intern/rna_armature.c +++ b/source/blender/makesrna/intern/rna_armature.c @@ -38,7 +38,7 @@ #ifdef RNA_RUNTIME -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BKE_context.h" #include "BKE_depsgraph.h" @@ -56,6 +56,44 @@ static void rna_Armature_update_data(bContext *C, PointerRNA *ptr) //WM_event_add_notifier(C, NC_OBJECT|ND_POSE, NULL); } + +static void rna_Armature_act_bone_set(PointerRNA *ptr, PointerRNA value) +{ + bArmature *arm= (bArmature*)ptr->data; + + if(value.id.data==NULL && value.data==NULL) { + arm->act_bone= NULL; + } + else { + if(value.id.data != arm) { + /* raise an error! */ + } + else { + arm->act_bone= value.data; + arm->act_bone->flag |= BONE_SELECTED; + } + } +} + +static void rna_Armature_act_edit_bone_set(PointerRNA *ptr, PointerRNA value) +{ + bArmature *arm= (bArmature*)ptr->data; + + if(value.id.data==NULL && value.data==NULL) { + arm->act_edbone= NULL; + } + else { + if(value.id.data != arm) { + /* raise an error! */ + } + else { + arm->act_edbone= value.data; + ((EditBone *)arm->act_edbone)->flag |= BONE_SELECTED; + } + } +} + + static void rna_Armature_redraw_data(bContext *C, PointerRNA *ptr) { ID *id= ptr->id.data; @@ -371,11 +409,6 @@ static void rna_def_bone_common(StructRNA *srna, int editbone) RNA_def_property_ui_text(prop, "Connected", "When bone has a parent, bone's head is struck to the parent's tail."); RNA_def_property_update(prop, 0, "rna_Armature_update_data"); - prop= RNA_def_property(srna, "active", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_ACTIVE); - RNA_def_property_ui_text(prop, "Active", "Bone was the last bone clicked on (most operations are applied to only this bone)"); - RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); - prop= RNA_def_property(srna, "hinge", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", BONE_HINGE); RNA_def_property_ui_text(prop, "Inherit Rotation", "Bone doesn't inherit rotation or scale from parent bone."); @@ -593,7 +626,7 @@ static void rna_def_edit_bone(BlenderRNA *brna) static void rna_def_armature(BlenderRNA *brna) { StructRNA *srna; - PropertyRNA *prop; + PropertyRNA *prop, *prop_act; static EnumPropertyItem prop_drawtype_items[] = { {ARM_OCTA, "OCTAHEDRAL", 0, "Octahedral", "Display bones as octahedral shape (default)."}, @@ -634,11 +667,34 @@ static void rna_def_armature(BlenderRNA *brna) RNA_def_property_struct_type(prop, "Bone"); RNA_def_property_ui_text(prop, "Bones", ""); + { /* Collection active property */ + prop_act= RNA_def_property(srna, "bones_active", PROP_POINTER, PROP_NONE); + RNA_def_property_struct_type(prop_act, "Bone"); + RNA_def_property_pointer_sdna(prop_act, NULL, "act_bone"); + RNA_def_property_flag(prop_act, PROP_EDITABLE); + RNA_def_property_ui_text(prop_act, "Active Bone", "Armatures active bone."); + RNA_def_property_pointer_funcs(prop_act, NULL, "rna_Armature_act_bone_set", NULL); + + /* todo, redraw */ + RNA_def_property_collection_active(prop, prop_act); + } + prop= RNA_def_property(srna, "edit_bones", PROP_COLLECTION, PROP_NONE); RNA_def_property_collection_sdna(prop, NULL, "edbo", NULL); RNA_def_property_struct_type(prop, "EditBone"); RNA_def_property_ui_text(prop, "Edit Bones", ""); + { /* Collection active property */ + prop_act= RNA_def_property(srna, "edit_bones_active", PROP_POINTER, PROP_NONE); + RNA_def_property_struct_type(prop_act, "EditBone"); + RNA_def_property_pointer_sdna(prop_act, NULL, "act_edbone"); + RNA_def_property_flag(prop_act, PROP_EDITABLE); + RNA_def_property_ui_text(prop_act, "Active EditBone", "Armatures active edit bone."); + //RNA_def_property_update(prop_act, 0, "rna_Armature_act_editbone_update"); + RNA_def_property_pointer_funcs(prop_act, NULL, "rna_Armature_act_edit_bone_set", NULL); + RNA_def_property_collection_active(prop, prop_act); + } + /* Enum values */ // prop= RNA_def_property(srna, "rest_position", PROP_BOOLEAN, PROP_NONE); // RNA_def_property_boolean_sdna(prop, NULL, "flag", ARM_RESTPOS); diff --git a/source/blender/makesrna/intern/rna_constraint.c b/source/blender/makesrna/intern/rna_constraint.c index 02cf44dcc7a..7f7976c365f 100644 --- a/source/blender/makesrna/intern/rna_constraint.c +++ b/source/blender/makesrna/intern/rna_constraint.c @@ -1679,6 +1679,12 @@ static void rna_def_constraint_spline_ik(BlenderRNA *brna) { StructRNA *srna; PropertyRNA *prop; + + static EnumPropertyItem splineik_xz_scale_mode[] = { + {CONSTRAINT_SPLINEIK_XZS_NONE, "NONE", 0, "None", "Don't scale the x and z axes, giving a volume preservation effect. (Default)"}, + {CONSTRAINT_SPLINEIK_XZS_RADIUS, "CURVE_RADIUS", 0, "Curve Radius", "Use the radius of the curve."}, + {CONSTRAINT_SPLINEIK_XZS_ORIGINAL, "ORIGINAL", 0, "Original", "Use the original scaling of the bones."}, + {0, NULL, 0, NULL, NULL}}; srna= RNA_def_struct(brna, "SplineIKConstraint", "Constraint"); RNA_def_struct_ui_text(srna, "Spline IK Constraint", "Align 'n' bones along a curve."); @@ -1715,9 +1721,10 @@ static void rna_def_constraint_spline_ik(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Keep Max Length", "Maintain the maximum length of the chain when spline is stretched."); RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update"); - prop= RNA_def_property(srna, "radius_to_thickness", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_SPLINEIK_RAD2FAT); - RNA_def_property_ui_text(prop, "Radius to Thickness", "Radius of the spline affects the x/z scaling of the bones."); + prop= RNA_def_property(srna, "xz_scaling_mode", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "xzScaleMode"); + RNA_def_property_enum_items(prop, splineik_xz_scale_mode); + RNA_def_property_ui_text(prop, "XZ Scale Mode", "Method used for determining the scaling of the X and Z axes of the bone."); RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update"); } diff --git a/source/blender/makesrna/intern/rna_curve.c b/source/blender/makesrna/intern/rna_curve.c index 995be6d5023..2ebf47bac99 100644 --- a/source/blender/makesrna/intern/rna_curve.c +++ b/source/blender/makesrna/intern/rna_curve.c @@ -221,6 +221,12 @@ static void rna_Curve_update_data(bContext *C, PointerRNA *ptr) WM_event_add_notifier(C, NC_GEOM|ND_DATA, id); } +static void rna_Curve_update_deps(bContext *C, PointerRNA *ptr) +{ + DAG_scene_sort(CTX_data_scene(C)); + rna_Curve_update_data(C, ptr); +} + static void rna_Nurb_update_handle_data(bContext *C, PointerRNA *ptr) { Nurb *nu= (Nurb*)ptr->data; @@ -552,7 +558,7 @@ static void rna_def_font(BlenderRNA *brna, StructRNA *srna) RNA_def_property_pointer_sdna(prop, NULL, "textoncurve"); RNA_def_property_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Text on Curve", "Curve deforming text object."); - RNA_def_property_update(prop, 0, "rna_Curve_update_data"); + RNA_def_property_update(prop, 0, "rna_Curve_update_deps"); prop= RNA_def_property(srna, "font", PROP_POINTER, PROP_NONE); RNA_def_property_pointer_sdna(prop, NULL, "vfont"); @@ -776,13 +782,13 @@ static void rna_def_curve(BlenderRNA *brna) RNA_def_property_pointer_sdna(prop, NULL, "bevobj"); RNA_def_property_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Bevel Object", "Curve object name that defines the bevel shape."); - RNA_def_property_update(prop, 0, "rna_Curve_update_data"); + RNA_def_property_update(prop, 0, "rna_Curve_update_deps"); prop= RNA_def_property(srna, "taper_object", PROP_POINTER, PROP_NONE); RNA_def_property_pointer_sdna(prop, NULL, "taperobj"); RNA_def_property_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Taper Object", "Curve object name that defines the taper (width)."); - RNA_def_property_update(prop, 0, "rna_Curve_update_data"); + RNA_def_property_update(prop, 0, "rna_Curve_update_deps"); /* Flags */ diff --git a/source/blender/makesrna/intern/rna_fcurve.c b/source/blender/makesrna/intern/rna_fcurve.c index e69e2cd0e2c..cdaebb2a3db 100644 --- a/source/blender/makesrna/intern/rna_fcurve.c +++ b/source/blender/makesrna/intern/rna_fcurve.c @@ -83,6 +83,7 @@ static StructRNA *rna_FModifierType_refine(struct PointerRNA *ptr) /* ****************************** */ +#include "BKE_fcurve.h" #include "BKE_depsgraph.h" static void rna_ChannelDriver_update_data(bContext *C, PointerRNA *ptr) @@ -610,8 +611,12 @@ static void rna_def_channeldriver(BlenderRNA *brna) /* Collections */ prop= RNA_def_property(srna, "targets", PROP_COLLECTION, PROP_NONE); RNA_def_property_collection_sdna(prop, NULL, "targets", NULL); + RNA_def_property_collection_funcs(prop, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "add_target", "remove_target"); RNA_def_property_struct_type(prop, "DriverTarget"); RNA_def_property_ui_text(prop, "Target Variables", "Properties acting as targets for this driver."); + + /* Functions */ + RNA_api_drivers(srna); } /* *********************** */ @@ -647,8 +652,8 @@ static void rna_def_fcurve(BlenderRNA *brna) {FCURVE_EXTRAPOLATE_LINEAR, "LINEAR", 0, "Linear", ""}, {0, NULL, 0, NULL, NULL}}; static EnumPropertyItem prop_mode_color_items[] = { - {FCURVE_COLOR_AUTO_RAINBOW, "AUTO_RAINBOW", 0, "Automatic Rainbow", ""}, - {FCURVE_COLOR_AUTO_RGB, "AUTO_RGB", 0, "Automatic XYZ to RGB", ""}, + {FCURVE_COLOR_AUTO_RAINBOW, "AUTO_RAINBOW", 0, "Auto Rainbow", ""}, + {FCURVE_COLOR_AUTO_RGB, "AUTO_RGB", 0, "Auto XYZ to RGB", ""}, {FCURVE_COLOR_CUSTOM, "CUSTOM", 0, "User Defined", ""}, {0, NULL, 0, NULL, NULL}}; diff --git a/source/blender/makesrna/intern/rna_fcurve_api.c b/source/blender/makesrna/intern/rna_fcurve_api.c new file mode 100644 index 00000000000..12ffb3e26fb --- /dev/null +++ b/source/blender/makesrna/intern/rna_fcurve_api.c @@ -0,0 +1,90 @@ +/** + * ***** BEGIN GPL 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. + * + * 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) 2009 Blender Foundation. + * All rights reserved. + * + * + * Contributor(s): Joshua Leung + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <time.h> + +#include "RNA_define.h" +#include "RNA_types.h" + +#include "DNA_anim_types.h" + +#ifdef RNA_RUNTIME + +#include <stddef.h> + +#include "BLI_blenlib.h" + +#include "BKE_animsys.h" +#include "BKE_fcurve.h" + +DriverTarget *rna_Driver_add_target(ChannelDriver *driver, char *name) +{ + DriverTarget *dtar= driver_add_new_target(driver); + + /* set the name if given */ + if (name && name[0]) { + BLI_strncpy(dtar->name, name, 64); + BLI_uniquename(&driver->targets, dtar, "var", '_', offsetof(DriverTarget, name), 64); + } + + /* return this target for the users to play with */ + return dtar; +} + +void rna_Driver_remove_target(ChannelDriver *driver, DriverTarget *dtar) +{ + /* call the API function for this */ + driver_free_target(driver, dtar); +} + +#else + +void RNA_api_drivers(StructRNA *srna) +{ + FunctionRNA *func; + PropertyRNA *parm; + + /* add target */ + func= RNA_def_function(srna, "add_target", "rna_Driver_add_target"); + RNA_def_function_ui_description(func, "Add a new target for the driver."); + /* return type */ + parm= RNA_def_pointer(func, "target", "DriverTarget", "", "Newly created Driver Target."); + RNA_def_function_return(func, parm); + /* optional name parameter */ + parm= RNA_def_string(func, "name", "", 64, "Name", "Name to use in scripted expressions/functions. (No spaces or dots are allowed. Also, must not start with a symbol or digit)"); + + /* remove target */ + func= RNA_def_function(srna, "remove_target", "rna_Driver_remove_target"); + RNA_def_function_ui_description(func, "Remove an existing target from the driver."); + /* target to remove*/ + parm= RNA_def_pointer(func, "target", "DriverTarget", "", "Target to remove from the driver."); + RNA_def_property_flag(parm, PROP_REQUIRED); +} + +#endif diff --git a/source/blender/makesrna/intern/rna_internal.h b/source/blender/makesrna/intern/rna_internal.h index 0e557b59b22..d90b4f17c85 100644 --- a/source/blender/makesrna/intern/rna_internal.h +++ b/source/blender/makesrna/intern/rna_internal.h @@ -204,6 +204,7 @@ char *rna_TextureSlot_path(struct PointerRNA *ptr); /* API functions */ void RNA_api_action(StructRNA *srna); +void RNA_api_drivers(StructRNA *srna); void RNA_api_image(struct StructRNA *srna); void RNA_api_keyconfig(struct StructRNA *srna); void RNA_api_keyingset(struct StructRNA *srna); diff --git a/source/blender/makesrna/intern/rna_material.c b/source/blender/makesrna/intern/rna_material.c index 35eab7645f3..e311cad4568 100644 --- a/source/blender/makesrna/intern/rna_material.c +++ b/source/blender/makesrna/intern/rna_material.c @@ -1393,13 +1393,13 @@ static void rna_def_material_strand(BlenderRNA *brna) prop= RNA_def_property(srna, "root_size", PROP_FLOAT, PROP_UNSIGNED); RNA_def_property_float_sdna(prop, NULL, "strand_sta"); RNA_def_property_float_funcs(prop, NULL, NULL, "rna_MaterialStrand_start_size_range"); - RNA_def_property_ui_text(prop, "Root Size", "Start size of strands in pixels Blender units."); + RNA_def_property_ui_text(prop, "Root Size", "Start size of strands in pixels or Blender units."); RNA_def_property_update(prop, 0, "rna_Material_update"); prop= RNA_def_property(srna, "tip_size", PROP_FLOAT, PROP_UNSIGNED); RNA_def_property_float_sdna(prop, NULL, "strand_end"); RNA_def_property_float_funcs(prop, NULL, NULL, "rna_MaterialStrand_end_size_range"); - RNA_def_property_ui_text(prop, "Tip Size", "Start size of strands in pixels or Blender units."); + RNA_def_property_ui_text(prop, "Tip Size", "End size of strands in pixels or Blender units."); RNA_def_property_update(prop, 0, "rna_Material_update"); prop= RNA_def_property(srna, "min_size", PROP_FLOAT, PROP_UNSIGNED); diff --git a/source/blender/makesrna/intern/rna_mesh.c b/source/blender/makesrna/intern/rna_mesh.c index ab745394ce5..9217a7a7b98 100644 --- a/source/blender/makesrna/intern/rna_mesh.c +++ b/source/blender/makesrna/intern/rna_mesh.c @@ -39,7 +39,7 @@ #include "DNA_scene_types.h" #include "BLI_editVert.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BKE_customdata.h" #include "BKE_depsgraph.h" @@ -123,9 +123,9 @@ static void rna_MeshFace_normal_get(PointerRNA *ptr, float *values) MFace *mface= (MFace*)ptr->data; if(mface->v4) - CalcNormFloat4(me->mvert[mface->v1].co, me->mvert[mface->v2].co, me->mvert[mface->v3].co, me->mvert[mface->v4].co, values); + normal_quad_v3( values,me->mvert[mface->v1].co, me->mvert[mface->v2].co, me->mvert[mface->v3].co, me->mvert[mface->v4].co); else - CalcNormFloat(me->mvert[mface->v1].co, me->mvert[mface->v2].co, me->mvert[mface->v3].co, values); + normal_tri_v3( values,me->mvert[mface->v1].co, me->mvert[mface->v2].co, me->mvert[mface->v3].co); } static float rna_MeshFace_area_get(PointerRNA *ptr) @@ -134,9 +134,9 @@ static float rna_MeshFace_area_get(PointerRNA *ptr) MFace *mface= (MFace*)ptr->data; if(mface->v4) - return AreaQ3Dfl(me->mvert[mface->v1].co, me->mvert[mface->v2].co, me->mvert[mface->v3].co, me->mvert[mface->v4].co); + return area_quad_v3(me->mvert[mface->v1].co, me->mvert[mface->v2].co, me->mvert[mface->v3].co, me->mvert[mface->v4].co); else - return AreaT3Dfl(me->mvert[mface->v1].co, me->mvert[mface->v2].co, me->mvert[mface->v3].co); + return area_tri_v3(me->mvert[mface->v1].co, me->mvert[mface->v2].co, me->mvert[mface->v3].co); } /* notice red and blue are swapped */ @@ -493,9 +493,10 @@ static void rna_MeshTextureFaceLayer_active_set(PointerRNA *ptr, int value) static void rna_MeshTextureFaceLayer_name_set(PointerRNA *ptr, const char *value) { Mesh *me= (Mesh*)ptr->id.data; + CustomData *fdata= rna_mesh_fdata(me); CustomDataLayer *cdl= (CustomDataLayer*)ptr->data; BLI_strncpy(cdl->name, value, sizeof(cdl->name)); - CustomData_set_layer_unique_name(&me->fdata, cdl - me->fdata.layers); + CustomData_set_layer_unique_name(fdata, cdl - fdata->layers); } static int rna_vertex_color_check(CollectionPropertyIterator *iter, void *data) @@ -604,9 +605,10 @@ static void rna_MeshColorLayer_active_set(PointerRNA *ptr, int value) static void rna_MeshColorLayer_name_set(PointerRNA *ptr, const char *value) { Mesh *me= (Mesh*)ptr->id.data; + CustomData *fdata= rna_mesh_fdata(me); CustomDataLayer *cdl= (CustomDataLayer*)ptr->data; BLI_strncpy(cdl->name, value, sizeof(cdl->name)); - CustomData_set_layer_unique_name(&me->fdata, cdl - me->fdata.layers); + CustomData_set_layer_unique_name(fdata, cdl - fdata->layers); } static void rna_MeshFloatPropertyLayer_data_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) diff --git a/source/blender/makesrna/intern/rna_meta.c b/source/blender/makesrna/intern/rna_meta.c index 1a4e4da886b..62466047ef4 100644 --- a/source/blender/makesrna/intern/rna_meta.c +++ b/source/blender/makesrna/intern/rna_meta.c @@ -65,6 +65,8 @@ static void rna_MetaBall_update_data(bContext *C, PointerRNA *ptr) WM_event_add_notifier(C, NC_GEOM|ND_DATA, mb); } + + #else static void rna_def_metaelement(BlenderRNA *brna) @@ -105,6 +107,7 @@ static void rna_def_metaelement(BlenderRNA *brna) prop= RNA_def_property(srna, "radius", PROP_FLOAT, PROP_UNSIGNED|PROP_UNIT_LENGTH); RNA_def_property_float_sdna(prop, NULL, "rad"); RNA_def_property_ui_text(prop, "Radius", ""); + RNA_def_property_range(prop, 0.0f, FLT_MAX); RNA_def_property_update(prop, 0, "rna_MetaBall_update_data"); prop= RNA_def_property(srna, "size_x", PROP_FLOAT, PROP_DISTANCE); diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c index f2648503003..93972894ef1 100644 --- a/source/blender/makesrna/intern/rna_modifier.c +++ b/source/blender/makesrna/intern/rna_modifier.c @@ -795,7 +795,7 @@ static void rna_def_modifier_wave(BlenderRNA *brna) prop= RNA_def_property(srna, "start_position_object", PROP_POINTER, PROP_NONE); RNA_def_property_pointer_sdna(prop, NULL, "objectcenter"); RNA_def_property_ui_text(prop, "Start Position Object", ""); - RNA_def_property_flag(prop, PROP_EDITABLE); + RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK); RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update"); prop= RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE); @@ -824,7 +824,7 @@ static void rna_def_modifier_wave(BlenderRNA *brna) prop= RNA_def_property(srna, "texture_coordinates_object", PROP_POINTER, PROP_NONE); RNA_def_property_pointer_sdna(prop, NULL, "map_object"); RNA_def_property_ui_text(prop, "Texture Coordinates Object", ""); - RNA_def_property_flag(prop, PROP_EDITABLE); + RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK); RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update"); prop= RNA_def_property(srna, "speed", PROP_FLOAT, PROP_NONE); @@ -1196,7 +1196,7 @@ static void rna_def_modifier_displace(BlenderRNA *brna) prop= RNA_def_property(srna, "texture_coordinate_object", PROP_POINTER, PROP_NONE); RNA_def_property_pointer_sdna(prop, NULL, "map_object"); RNA_def_property_ui_text(prop, "Texture Coordinate Object", ""); - RNA_def_property_flag(prop, PROP_EDITABLE); + RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK); RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update"); } @@ -1257,7 +1257,7 @@ static void rna_def_modifier_uvproject(BlenderRNA *brna) prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE); RNA_def_property_struct_type(prop, "Object"); RNA_def_property_pointer_funcs(prop, "rna_UVProjector_object_get", "rna_UVProjector_object_set", NULL); - RNA_def_property_flag(prop, PROP_EDITABLE); + RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK); RNA_def_property_ui_text(prop, "Object", "Object to use as projector transform."); } @@ -1330,7 +1330,7 @@ static void rna_def_modifier_cast(BlenderRNA *brna) prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE); RNA_def_property_ui_text(prop, "Object", "Control object: if available, its location determines the center of the effect"); RNA_def_property_pointer_funcs(prop, NULL, "rna_CastModifier_object_set", NULL); - RNA_def_property_flag(prop, PROP_EDITABLE); + RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK); RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update"); prop= RNA_def_property(srna, "x", PROP_BOOLEAN, PROP_NONE); @@ -1397,7 +1397,7 @@ static void rna_def_modifier_meshdeform(BlenderRNA *brna) prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE); RNA_def_property_ui_text(prop, "Object", "Mesh object to deform with."); RNA_def_property_pointer_funcs(prop, NULL, "rna_MeshDeformModifier_object_set", NULL); - RNA_def_property_flag(prop, PROP_EDITABLE); + RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK); RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update"); prop= RNA_def_property(srna, "is_bound", PROP_BOOLEAN, PROP_NONE); @@ -1459,7 +1459,7 @@ static void rna_def_modifier_particleinstance(BlenderRNA *brna) prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE); RNA_def_property_pointer_sdna(prop, NULL, "ob"); RNA_def_property_ui_text(prop, "Object", "Object that has the particle system."); - RNA_def_property_flag(prop, PROP_EDITABLE); + RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK); RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update"); prop= RNA_def_property(srna, "particle_system_number", PROP_INT, PROP_NONE); @@ -1723,14 +1723,14 @@ static void rna_def_modifier_shrinkwrap(BlenderRNA *brna) prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE); RNA_def_property_ui_text(prop, "Target", "Mesh target to shrink to."); RNA_def_property_pointer_funcs(prop, NULL, "rna_ShrinkwrapModifier_target_set", NULL); - RNA_def_property_flag(prop, PROP_EDITABLE); + RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK); RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update"); prop= RNA_def_property(srna, "auxiliary_target", PROP_POINTER, PROP_NONE); RNA_def_property_pointer_sdna(prop, NULL, "auxTarget"); RNA_def_property_ui_text(prop, "Auxiliary Target", "Additional mesh target to shrink to."); RNA_def_property_pointer_funcs(prop, NULL, "rna_ShrinkwrapModifier_auxiliary_target_set", NULL); - RNA_def_property_flag(prop, PROP_EDITABLE); + RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK); RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update"); prop= RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE); @@ -1834,7 +1834,7 @@ static void rna_def_modifier_mask(BlenderRNA *brna) RNA_def_property_pointer_sdna(prop, NULL, "ob_arm"); RNA_def_property_ui_text(prop, "Armature", "Armature to use as source of bones to mask."); RNA_def_property_pointer_funcs(prop, NULL, "rna_MaskModifier_armature_set", NULL); - RNA_def_property_flag(prop, PROP_EDITABLE); + RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK); RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update"); prop= RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE); @@ -1879,7 +1879,7 @@ static void rna_def_modifier_simpledeform(BlenderRNA *brna) prop= RNA_def_property(srna, "origin", PROP_POINTER, PROP_NONE); RNA_def_property_ui_text(prop, "Origin", "Origin of modifier space coordinates."); - RNA_def_property_flag(prop, PROP_EDITABLE); + RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK); RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update"); prop= RNA_def_property(srna, "relative", PROP_BOOLEAN, PROP_NONE); diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c index 2c8243a4f16..b856e35cf4c 100644 --- a/source/blender/makesrna/intern/rna_nodetree.c +++ b/source/blender/makesrna/intern/rna_nodetree.c @@ -36,80 +36,20 @@ #include "DNA_scene_types.h" #include "DNA_texture_types.h" +#include "BKE_animsys.h" #include "BKE_main.h" #include "BKE_node.h" #include "BKE_image.h" +#include "BKE_texture.h" -static EnumPropertyItem node_blend_type_items[] = { - { 0, "MIX", 0, "Mix", ""}, - { 1, "ADD", 0, "Add", ""}, - { 3, "SUBTRACT", 0, "Subtract", ""}, - { 2, "MULTIPLY", 0, "Multiply", ""}, - { 4, "SCREEN", 0, "Screen", ""}, - { 9, "OVERLAY", 0, "Overlay", ""}, - { 5, "DIVIDE", 0, "Divide", ""}, - { 6, "DIFFERENCE", 0, "Difference", ""}, - { 7, "DARKEN", 0, "Darken", ""}, - { 8, "LIGHTEN", 0, "Lighten", ""}, - {10, "DODGE", 0, "Dodge", ""}, - {11, "BURN", 0, "Burn", ""}, - {15, "COLOR", 0, "Color", ""}, - {14, "VALUE", 0, "Value", ""}, - {13, "SATURATION", 0, "Saturation", ""}, - {12, "HUE", 0, "Hue", ""}, - {16, "SOFT_LIGHT", 0, "Soft Light", ""}, - {17, "LINEAR_LIGHT", 0, "Linear Light",""}, - {0, NULL, 0, NULL, NULL}}; - -static EnumPropertyItem node_flip_items[] = { - {0, "X", 0, "Flip X", ""}, - {1, "Y", 0, "Flip Y", ""}, - {2, "XY", 0, "Flip X & Y", ""}, - {0, NULL, 0, NULL, NULL}}; - -static EnumPropertyItem node_math_items[] = { - { 0, "ADD", 0, "Add", ""}, - { 1, "SUBTRACT", 0, "Subtract", ""}, - { 2, "MULTIPLY", 0, "Multiply", ""}, - { 3, "DIVIDE", 0, "Divide", ""}, - { 4, "SINE", 0, "Sine", ""}, - { 5, "COSINE", 0, "Cosine", ""}, - { 6, "TANGENT", 0, "Tangent", ""}, - { 7, "ARCSINE", 0, "Arcsine", ""}, - { 8, "ARCCOSINE", 0, "Arccosine", ""}, - { 9, "ARCTANGENT", 0, "Arctangent", ""}, - {10, "POWER", 0, "Power", ""}, - {11, "LOGARITHM", 0, "Logarithm", ""}, - {12, "MINIMUM", 0, "Minimum", ""}, - {13, "MAXIMUM", 0, "Maximum", ""}, - {14, "ROUND", 0, "Round", ""}, - {15, "LESS_THAN", 0, "Less Than", ""}, - {16, "GREATER_THAN", 0, "Greater Than", ""}, - {0, NULL, 0, NULL, NULL}}; - -static EnumPropertyItem node_vec_math_items[] = { - {0, "ADD", 0, "Add", ""}, - {1, "SUBTRACT", 0, "Subtract", ""}, - {2, "AVERAGE", 0, "Average", ""}, - {3, "DOT_PRODUCT", 0, "Dot Product", ""}, - {4, "CROSS_PRODUCT", 0, "Cross Product", ""}, - {5, "NORMALIZE", 0, "Normalize", ""}, - {0, NULL, 0, NULL, NULL}}; - -static EnumPropertyItem node_filter_items[] = { - {0, "SOFTEN", 0, "Soften", ""}, - {1, "SHARPEN", 0, "Sharpen", ""}, - {2, "LAPLACE", 0, "Laplace", ""}, - {3, "SOBEL", 0, "Sobel", ""}, - {4, "PREWITT", 0, "Prewitt", ""}, - {5, "KIRSCH", 0, "Kirsch", ""}, - {6, "SHADOW", 0, "Shadow", ""}, - {0, NULL, 0, NULL, NULL}}; +#include "WM_types.h" #ifdef RNA_RUNTIME #include "ED_node.h" +#include "RE_pipeline.h" + static StructRNA *rna_Node_refine(struct PointerRNA *ptr) { bNode *node = (bNode*)ptr->data; @@ -128,13 +68,47 @@ static StructRNA *rna_Node_refine(struct PointerRNA *ptr) } } +static StructRNA *rna_NodeSocketType_refine(struct PointerRNA *ptr) +{ + bNodeSocket *ns= (bNodeSocket*)ptr->data; + + switch(ns->type) { + case SOCK_VALUE: + return &RNA_ValueNodeSocket; + case SOCK_VECTOR: + return &RNA_VectorNodeSocket; + case SOCK_RGBA: + return &RNA_RGBANodeSocket; + default: + return &RNA_UnknownType; + } +} + static char *rna_Node_path(PointerRNA *ptr) { - bNodeTree *ntree= (bNodeTree*)ptr->id.data; bNode *node= (bNode*)ptr->data; - int index = BLI_findindex(&ntree->nodes, node); + + return BLI_sprintfN("nodes[\"%s\"]", node->name); +} + +static char *rna_NodeSocket_path(PointerRNA *ptr) +{ + bNodeTree *ntree= (bNodeTree*)ptr->id.data; + bNodeSocket *sock= (bNodeSocket*)ptr->data; + bNode *node; + int socketindex; - return BLI_sprintfN("nodes[%d]", index); + if (!nodeFindNode(ntree, sock, &node, NULL)) return NULL; + + socketindex = BLI_findindex(&node->inputs, sock); + if (socketindex != -1) + return BLI_sprintfN("nodes[\"%s\"].inputs[%d]", node->name, socketindex); + + socketindex = BLI_findindex(&node->outputs, sock); + if (socketindex != -1) + return BLI_sprintfN("nodes[\"%s\"].outputs[%d]", node->name, socketindex); + + return NULL; } static int has_nodetree(bNodeTree *ntree, bNodeTree *lookup) @@ -175,71 +149,340 @@ static void rna_Matte_t2_set(PointerRNA *ptr, float value) chroma->t2 = value; } -static void rna_Node_update(bContext *C, PointerRNA *ptr) +static void node_update(bContext *C, bNodeTree *ntree, bNode *node) { Main *bmain= CTX_data_main(C); - bNodeTree *ntree= (bNodeTree*)ptr->id.data; - bNode *node= (bNode*)ptr->data; Material *ma; Tex *tex; Scene *sce; - + /* look through all datablocks, to support groups */ for(ma=bmain->mat.first; ma; ma=ma->id.next) if(ma->nodetree && ma->use_nodes && has_nodetree(ma->nodetree, ntree)) ED_node_changed_update(&ma->id, node); - + for(tex=bmain->tex.first; tex; tex=tex->id.next) if(tex->nodetree && tex->use_nodes && has_nodetree(tex->nodetree, ntree)) ED_node_changed_update(&tex->id, node); - + for(sce=bmain->scene.first; sce; sce=sce->id.next) if(sce->nodetree && sce->use_nodes && has_nodetree(sce->nodetree, ntree)) ED_node_changed_update(&sce->id, node); } +static void rna_Node_update(bContext *C, PointerRNA *ptr) +{ + bNodeTree *ntree= (bNodeTree*)ptr->id.data; + bNode *node= (bNode*)ptr->data; + + node_update(C, ntree, node); +} + static void rna_Node_update_name(bContext *C, PointerRNA *ptr) { + bNodeTree *ntree= (bNodeTree*)ptr->id.data; + bNode *node= (bNode*)ptr->data; + char oldname[32]; + + /* make a copy of the old name first */ + BLI_strncpy(oldname, node->name, sizeof(oldname)); + + nodeUniqueName(ntree, node); + node->flag |= NODE_CUSTOM_NAME; + + /* fix all the animation data which may link to this */ + BKE_all_animdata_fix_paths_rename("nodes", oldname, node->name); + + node_update(C, ntree, node); +} + +/* this should be done at display time! if no custom names are set */ +#if 0 +static void rna_Node_update_username(bContext *C, PointerRNA *ptr) +{ bNode *node= (bNode*)ptr->data; const char *name; - if(node->id) { - BLI_strncpy(node->name, node->id->name+2, NODE_MAXSTR); - } - else { - switch(node->typeinfo->type) { - case SH_NODE_MIX_RGB: - case CMP_NODE_MIX_RGB: - case TEX_NODE_MIX_RGB: - if(RNA_enum_name(node_blend_type_items, node->custom1, &name)) - BLI_strncpy(node->name, name, NODE_MAXSTR); - break; - case CMP_NODE_FILTER: - if(RNA_enum_name(node_filter_items, node->custom1, &name)) - BLI_strncpy(node->name, name, NODE_MAXSTR); - break; - case CMP_NODE_FLIP: - if(RNA_enum_name(node_flip_items, node->custom1, &name)) - BLI_strncpy(node->name, name, NODE_MAXSTR); - break; - case SH_NODE_MATH: - case CMP_NODE_MATH: - case TEX_NODE_MATH: - if(RNA_enum_name(node_math_items, node->custom1, &name)) - BLI_strncpy(node->name, name, NODE_MAXSTR); - break; - case SH_NODE_VECT_MATH: - if(RNA_enum_name(node_vec_math_items, node->custom1, &name)) - BLI_strncpy(node->name, name, NODE_MAXSTR); - break; + + /* + if (!node->username[0]) { + if(node->id) { + BLI_strncpy(node->username, node->id->name+2, NODE_MAXSTR); + } + else { + + switch(node->typeinfo->type) { + case SH_NODE_MIX_RGB: + case CMP_NODE_MIX_RGB: + case TEX_NODE_MIX_RGB: + if(RNA_enum_name(node_blend_type_items, node->custom1, &name)) + BLI_strncpy(node->username, name, NODE_MAXSTR); + break; + case CMP_NODE_FILTER: + if(RNA_enum_name(node_filter_items, node->custom1, &name)) + BLI_strncpy(node->username, name, NODE_MAXSTR); + break; + case CMP_NODE_FLIP: + if(RNA_enum_name(node_flip_items, node->custom1, &name)) + BLI_strncpy(node->username, name, NODE_MAXSTR); + break; + case SH_NODE_MATH: + case CMP_NODE_MATH: + case TEX_NODE_MATH: + if(RNA_enum_name(node_math_items, node->custom1, &name)) + BLI_strncpy(node->username, name, NODE_MAXSTR); + break; + case SH_NODE_VECT_MATH: + if(RNA_enum_name(node_vec_math_items, node->custom1, &name)) + BLI_strncpy(node->username, name, NODE_MAXSTR); + break; + } + */ } } rna_Node_update(C, ptr); } +#endif + +static void rna_NodeSocket_update(bContext *C, PointerRNA *ptr) +{ + bNodeTree *ntree= (bNodeTree*)ptr->id.data; + bNodeSocket *sock= (bNodeSocket*)ptr->data; + bNode *node; + + if (nodeFindNode(ntree, sock, &node, NULL)) + node_update(C, ntree, node); +} + +static void rna_NodeSocket_defvalue_range(PointerRNA *ptr, float *min, float *max) +{ + bNodeSocket *sock= (bNodeSocket*)ptr->data; + + *min = sock->ns.min; + *max = sock->ns.max; +} + +static void rna_Node_mapping_update(bContext *C, PointerRNA *ptr) +{ + bNode *node= (bNode*)ptr->data; + + init_mapping((TexMapping *)node->storage); + + rna_Node_update(C, ptr); +} + +static void rna_Node_image_layer_update(bContext *C, PointerRNA *ptr) +{ + bNode *node= (bNode*)ptr->data; + Image *ima = (Image *)node->id; + ImageUser *iuser= node->storage; + + BKE_image_multilayer_index(ima->rr, iuser); + BKE_image_signal(ima, iuser, IMA_SIGNAL_SRC_CHANGE); + + rna_Node_update(C, ptr); +} + +static void rna_Node_scene_layer_update(bContext *C, PointerRNA *ptr) +{ + bNode *node= (bNode*)ptr->data; + Image *ima = (Image *)node->id; + ImageUser *iuser= node->storage; + + BKE_image_multilayer_index(ima->rr, iuser); + + rna_Node_update(C, ptr); +} + + +static EnumPropertyItem *renderresult_layers_add_enum(RenderLayer *rl) +{ + EnumPropertyItem *item= NULL; + EnumPropertyItem tmp = {0, "", 0, "", ""}; + int i=0, totitem=0; + + while (rl) { + tmp.identifier = rl->name; + tmp.name= rl->name; + tmp.value = i++; + RNA_enum_item_add(&item, &totitem, &tmp); + rl=rl->next; + } + + RNA_enum_item_end(&item, &totitem); + + return item; +} + +static EnumPropertyItem *rna_Node_image_layer_itemf(bContext *C, PointerRNA *ptr, int *free) +{ + bNode *node= (bNode*)ptr->data; + Image *ima = (Image *)node->id; + EnumPropertyItem *item= NULL; + RenderLayer *rl; + + if (!ima || !(ima->rr)) return NULL; + + rl = ima->rr->layers.first; + item = renderresult_layers_add_enum(rl); + + *free= 1; + + return item; +} + +static EnumPropertyItem *rna_Node_scene_layer_itemf(bContext *C, PointerRNA *ptr, int *free) +{ + bNode *node= (bNode*)ptr->data; + Scene *sce = (Scene *)node->id; + EnumPropertyItem *item= NULL; + RenderLayer *rl; + + if (!sce) return NULL; + + rl = sce->r.layers.first; + item = renderresult_layers_add_enum(rl); + + *free= 1; + + return item; +} + +static EnumPropertyItem *rna_Node_channel_itemf(bContext *C, PointerRNA *ptr, int *free) +{ + bNode *node= (bNode*)ptr->data; + EnumPropertyItem *item= NULL; + EnumPropertyItem tmp = {0, "", 0, "", ""}; + int totitem=0; + + switch(node->custom1) { + case CMP_NODE_CHANNEL_MATTE_CS_RGB: + tmp.identifier= "R"; tmp.name= "R"; tmp.value= 1; + RNA_enum_item_add(&item, &totitem, &tmp); + tmp.identifier= "G"; tmp.name= "G"; tmp.value= 2; + RNA_enum_item_add(&item, &totitem, &tmp); + tmp.identifier= "B"; tmp.name= "B"; tmp.value= 3; + RNA_enum_item_add(&item, &totitem, &tmp); + break; + case CMP_NODE_CHANNEL_MATTE_CS_HSV: + tmp.identifier= "H"; tmp.name= "H"; tmp.value= 1; + RNA_enum_item_add(&item, &totitem, &tmp); + tmp.identifier= "S"; tmp.name= "S"; tmp.value= 2; + RNA_enum_item_add(&item, &totitem, &tmp); + tmp.identifier= "V"; tmp.name= "V"; tmp.value= 3; + RNA_enum_item_add(&item, &totitem, &tmp); + break; + case CMP_NODE_CHANNEL_MATTE_CS_YUV: + tmp.identifier= "Y"; tmp.name= "Y"; tmp.value= 1; + RNA_enum_item_add(&item, &totitem, &tmp); + tmp.identifier= "G"; tmp.name= "U"; tmp.value= 2; + RNA_enum_item_add(&item, &totitem, &tmp); + tmp.identifier= "V"; tmp.name= "V"; tmp.value= 3; + RNA_enum_item_add(&item, &totitem, &tmp); + break; + case CMP_NODE_CHANNEL_MATTE_CS_YCC: + tmp.identifier= "Y"; tmp.name= "Y"; tmp.value= 1; + RNA_enum_item_add(&item, &totitem, &tmp); + tmp.identifier= "CB"; tmp.name= "Cr"; tmp.value= 2; + RNA_enum_item_add(&item, &totitem, &tmp); + tmp.identifier= "CR"; tmp.name= "Cb"; tmp.value= 3; + RNA_enum_item_add(&item, &totitem, &tmp); + break; + default: + break; + } + + RNA_enum_item_end(&item, &totitem); + *free= 1; + + return item; +} + #else +static EnumPropertyItem prop_image_layer_items[] = { +{ 0, "PLACEHOLDER", 0, "Placeholder", ""}, +{0, NULL, 0, NULL, NULL}}; + +static EnumPropertyItem prop_scene_layer_items[] = { +{ 0, "PLACEHOLDER", 0, "Placeholder", ""}, +{0, NULL, 0, NULL, NULL}}; + +static EnumPropertyItem prop_tri_channel_items[] = { +{ 1, "R", 0, "R", ""}, +{ 2, "G", 0, "G", ""}, +{ 3, "B", 0, "B", ""}, +{0, NULL, 0, NULL, NULL}}; + +static EnumPropertyItem node_blend_type_items[] = { +{ 0, "MIX", 0, "Mix", ""}, +{ 1, "ADD", 0, "Add", ""}, +{ 3, "SUBTRACT", 0, "Subtract", ""}, +{ 2, "MULTIPLY", 0, "Multiply", ""}, +{ 4, "SCREEN", 0, "Screen", ""}, +{ 9, "OVERLAY", 0, "Overlay", ""}, +{ 5, "DIVIDE", 0, "Divide", ""}, +{ 6, "DIFFERENCE", 0, "Difference", ""}, +{ 7, "DARKEN", 0, "Darken", ""}, +{ 8, "LIGHTEN", 0, "Lighten", ""}, +{10, "DODGE", 0, "Dodge", ""}, +{11, "BURN", 0, "Burn", ""}, +{15, "COLOR", 0, "Color", ""}, +{14, "VALUE", 0, "Value", ""}, +{13, "SATURATION", 0, "Saturation", ""}, +{12, "HUE", 0, "Hue", ""}, +{16, "SOFT_LIGHT", 0, "Soft Light", ""}, +{17, "LINEAR_LIGHT", 0, "Linear Light",""}, +{0, NULL, 0, NULL, NULL}}; + +static EnumPropertyItem node_flip_items[] = { +{0, "X", 0, "Flip X", ""}, +{1, "Y", 0, "Flip Y", ""}, +{2, "XY", 0, "Flip X & Y", ""}, +{0, NULL, 0, NULL, NULL}}; + +static EnumPropertyItem node_math_items[] = { +{ 0, "ADD", 0, "Add", ""}, +{ 1, "SUBTRACT", 0, "Subtract", ""}, +{ 2, "MULTIPLY", 0, "Multiply", ""}, +{ 3, "DIVIDE", 0, "Divide", ""}, +{ 4, "SINE", 0, "Sine", ""}, +{ 5, "COSINE", 0, "Cosine", ""}, +{ 6, "TANGENT", 0, "Tangent", ""}, +{ 7, "ARCSINE", 0, "Arcsine", ""}, +{ 8, "ARCCOSINE", 0, "Arccosine", ""}, +{ 9, "ARCTANGENT", 0, "Arctangent", ""}, +{10, "POWER", 0, "Power", ""}, +{11, "LOGARITHM", 0, "Logarithm", ""}, +{12, "MINIMUM", 0, "Minimum", ""}, +{13, "MAXIMUM", 0, "Maximum", ""}, +{14, "ROUND", 0, "Round", ""}, +{15, "LESS_THAN", 0, "Less Than", ""}, +{16, "GREATER_THAN", 0, "Greater Than", ""}, +{0, NULL, 0, NULL, NULL}}; + +static EnumPropertyItem node_vec_math_items[] = { +{0, "ADD", 0, "Add", ""}, +{1, "SUBTRACT", 0, "Subtract", ""}, +{2, "AVERAGE", 0, "Average", ""}, +{3, "DOT_PRODUCT", 0, "Dot Product", ""}, +{4, "CROSS_PRODUCT", 0, "Cross Product", ""}, +{5, "NORMALIZE", 0, "Normalize", ""}, +{0, NULL, 0, NULL, NULL}}; + +static EnumPropertyItem node_filter_items[] = { +{0, "SOFTEN", 0, "Soften", ""}, +{1, "SHARPEN", 0, "Sharpen", ""}, +{2, "LAPLACE", 0, "Laplace", ""}, +{3, "SOBEL", 0, "Sobel", ""}, +{4, "PREWITT", 0, "Prewitt", ""}, +{5, "KIRSCH", 0, "Kirsch", ""}, +{6, "SHADOW", 0, "Shadow", ""}, +{0, NULL, 0, NULL, NULL}}; + + #define MaxNodes 1000 enum @@ -264,15 +507,9 @@ typedef struct NodeInfo static NodeInfo nodes[MaxNodes]; -static void reg_node( - int ID, - int category, - const char *enum_name, - const char *struct_name, - const char *base_name, - const char *ui_name, - const char *ui_desc -){ +static void reg_node(int ID, int category, const char *enum_name, const char *struct_name, + const char *base_name, const char *ui_name, const char *ui_desc) +{ NodeInfo *ni = nodes + ID; ni->defined = 1; @@ -359,7 +596,7 @@ static void def_math(StructRNA *srna) RNA_def_property_enum_sdna(prop, NULL, "custom1"); RNA_def_property_enum_items(prop, node_math_items); RNA_def_property_ui_text(prop, "Operation", ""); - RNA_def_property_update(prop, 0, "rna_Node_update_name"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } static void def_vector_math(StructRNA *srna) @@ -370,7 +607,7 @@ static void def_vector_math(StructRNA *srna) RNA_def_property_enum_sdna(prop, NULL, "custom1"); RNA_def_property_enum_items(prop, node_vec_math_items); RNA_def_property_ui_text(prop, "Operation", ""); - RNA_def_property_update(prop, 0, "rna_Node_update_name"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } static void def_rgb_curve(StructRNA *srna) @@ -381,7 +618,7 @@ static void def_rgb_curve(StructRNA *srna) RNA_def_property_pointer_sdna(prop, NULL, "storage"); RNA_def_property_struct_type(prop, "CurveMapping"); RNA_def_property_ui_text(prop, "Mapping", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } static void def_vector_curve(StructRNA *srna) @@ -392,7 +629,7 @@ static void def_vector_curve(StructRNA *srna) RNA_def_property_pointer_sdna(prop, NULL, "storage"); RNA_def_property_struct_type(prop, "CurveMapping"); RNA_def_property_ui_text(prop, "Mapping", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } static void def_time(StructRNA *srna) @@ -403,20 +640,20 @@ static void def_time(StructRNA *srna) RNA_def_property_pointer_sdna(prop, NULL, "storage"); RNA_def_property_struct_type(prop, "CurveMapping"); RNA_def_property_ui_text(prop, "Curve", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "start", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "custom1"); RNA_def_property_ui_text(prop, "Start Frame", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "end", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "custom2"); RNA_def_property_ui_text(prop, "End Frame", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } -static void def_val_to_rgb(StructRNA *srna) +static void def_colorramp(StructRNA *srna) { PropertyRNA *prop; @@ -424,7 +661,7 @@ static void def_val_to_rgb(StructRNA *srna) RNA_def_property_pointer_sdna(prop, NULL, "storage"); RNA_def_property_struct_type(prop, "ColorRamp"); RNA_def_property_ui_text(prop, "Color Ramp", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } static void def_mix_rgb(StructRNA *srna) @@ -435,12 +672,12 @@ static void def_mix_rgb(StructRNA *srna) RNA_def_property_enum_sdna(prop, NULL, "custom1"); RNA_def_property_enum_items(prop, node_blend_type_items); RNA_def_property_ui_text(prop, "Blend Type", ""); - RNA_def_property_update(prop, 0, "rna_Node_update_name"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "alpha", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "custom2", 1); RNA_def_property_ui_text(prop, "Alpha", "Include alpha of second input in this operation"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } static void def_texture(StructRNA *srna) @@ -452,12 +689,12 @@ static void def_texture(StructRNA *srna) RNA_def_property_struct_type(prop, "Texture"); RNA_def_property_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Texture", ""); - RNA_def_property_update(prop, 0, "rna_Node_update_name"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "node_output", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "custom1"); RNA_def_property_ui_text(prop, "Node Output", "For node-based textures, which output node to use"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } @@ -472,33 +709,69 @@ static void def_sh_material(StructRNA *srna) RNA_def_property_struct_type(prop, "Material"); RNA_def_property_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Material", ""); - RNA_def_property_update(prop, 0, "rna_Node_update_name"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "diffuse", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "custom1", SH_NODE_MAT_DIFF); RNA_def_property_ui_text(prop, "Diffuse", "Material Node outputs Diffuse"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "specular", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "custom1", SH_NODE_MAT_SPEC); RNA_def_property_ui_text(prop, "Specular", "Material Node outputs Specular"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "invert_normal", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "custom1", SH_NODE_MAT_NEG); RNA_def_property_ui_text(prop, "Invert Normal", "Material Node uses inverted normal"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } static void def_sh_mapping(StructRNA *srna) { PropertyRNA *prop; - prop = RNA_def_property(srna, "mapping", PROP_POINTER, PROP_NONE); - RNA_def_property_pointer_sdna(prop, NULL, "storage"); - RNA_def_property_struct_type(prop, "TexMapping"); - RNA_def_property_ui_text(prop, "Mapping", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_struct_sdna_from(srna, "TexMapping", "storage"); + + prop= RNA_def_property(srna, "location", PROP_FLOAT, PROP_TRANSLATION); + RNA_def_property_float_sdna(prop, NULL, "loc"); + RNA_def_property_ui_text(prop, "Location", "Location offset for the input coordinate"); + RNA_def_property_ui_range(prop, -10.f, 10.f, 0.1f, 2); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_mapping_update"); + + prop= RNA_def_property(srna, "rotation", PROP_FLOAT, PROP_EULER); + RNA_def_property_float_sdna(prop, NULL, "rot"); + RNA_def_property_ui_text(prop, "Rotation", "Rotation offset for the input coordinate"); + RNA_def_property_ui_range(prop, -360.f, 360.f, 1.f, 2); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_mapping_update"); + + prop= RNA_def_property(srna, "scale", PROP_FLOAT, PROP_XYZ); + RNA_def_property_float_sdna(prop, NULL, "size"); + RNA_def_property_ui_text(prop, "Scale", "Scale adjustment for the input coordinate"); + RNA_def_property_ui_range(prop, -10.f, 10.f, 0.1f, 2); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_mapping_update"); + + prop = RNA_def_property(srna, "clamp_minimum", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", TEXMAP_CLIP_MIN); + RNA_def_property_ui_text(prop, "Clamp Minimum", "Clamp the output coordinate to a minimum value"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); + + prop= RNA_def_property(srna, "minimum", PROP_FLOAT, PROP_XYZ); + RNA_def_property_float_sdna(prop, NULL, "min"); + RNA_def_property_ui_text(prop, "Minimum", "Minimum value to clamp coordinate to"); + RNA_def_property_ui_range(prop, -10.f, 10.f, 0.1f, 2); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); + + prop = RNA_def_property(srna, "clamp_maximum", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", TEXMAP_CLIP_MAX); + RNA_def_property_ui_text(prop, "Clamp Maximum", "Clamp the output coordinate to a maximum value"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); + + prop= RNA_def_property(srna, "maximum", PROP_FLOAT, PROP_XYZ); + RNA_def_property_float_sdna(prop, NULL, "max"); + RNA_def_property_ui_text(prop, "Maximum", "Maximum value to clamp coordinate to"); + RNA_def_property_ui_range(prop, -10.f, 10.f, 0.1f, 2); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } static void def_sh_geometry(StructRNA *srna) @@ -510,12 +783,12 @@ static void def_sh_geometry(StructRNA *srna) prop = RNA_def_property(srna, "uv_layer", PROP_STRING, PROP_NONE); RNA_def_property_string_sdna(prop, NULL, "uvname"); RNA_def_property_ui_text(prop, "UV Layer", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "color_layer", PROP_STRING, PROP_NONE); RNA_def_property_string_sdna(prop, NULL, "colname"); RNA_def_property_ui_text(prop, "Vertex Color Layer", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } @@ -529,7 +802,7 @@ static void def_cmp_alpha_over(StructRNA *srna) prop = RNA_def_property(srna, "convert_premul", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "custom1", 1); RNA_def_property_ui_text(prop, "Convert Premul", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); RNA_def_struct_sdna_from(srna, "NodeTwoFloats", "storage"); @@ -537,7 +810,7 @@ static void def_cmp_alpha_over(StructRNA *srna) RNA_def_property_float_sdna(prop, NULL, "x"); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Premul", "Mix Factor"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } static void def_cmp_hue_saturation(StructRNA *srna) @@ -550,19 +823,19 @@ static void def_cmp_hue_saturation(StructRNA *srna) RNA_def_property_float_sdna(prop, NULL, "hue"); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Hue", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "sat", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "sat"); RNA_def_property_range(prop, 0.0f, 2.0f); RNA_def_property_ui_text(prop, "Saturation", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "val", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "val"); RNA_def_property_range(prop, 0.0f, 2.0f); RNA_def_property_ui_text(prop, "Value", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } static void def_cmp_blur(StructRNA *srna) @@ -586,79 +859,52 @@ static void def_cmp_blur(StructRNA *srna) RNA_def_property_int_sdna(prop, NULL, "sizex"); RNA_def_property_range(prop, 0, 256); RNA_def_property_ui_text(prop, "Size X", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "sizey", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "sizey"); RNA_def_property_range(prop, 0, 256); RNA_def_property_ui_text(prop, "Size Y", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); - - prop = RNA_def_property(srna, "samples", PROP_INT, PROP_NONE); - RNA_def_property_int_sdna(prop, NULL, "samples"); - RNA_def_property_range(prop, 1, 256); - RNA_def_property_ui_text(prop, "Samples", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); - - prop = RNA_def_property(srna, "max_speed", PROP_INT, PROP_NONE); - RNA_def_property_int_sdna(prop, NULL, "maxspeed"); - RNA_def_property_range(prop, 1, 1024); - RNA_def_property_ui_text(prop, "Max Speed", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); - - prop = RNA_def_property(srna, "min_speed", PROP_INT, PROP_NONE); - RNA_def_property_int_sdna(prop, NULL, "minspeed"); - RNA_def_property_range(prop, 1, 1024); - RNA_def_property_ui_text(prop, "Min Speed", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "relative", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "relative", 1); RNA_def_property_ui_text(prop, "Relative", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "fac"); RNA_def_property_range(prop, 0.0f, 2.0f); RNA_def_property_ui_text(prop, "Factor", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "factor_x", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "percentx"); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Relative Size X", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "factor_y", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "percenty"); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Relative Size Y", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "filter_type", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "filtertype"); RNA_def_property_enum_items(prop, filter_type_items); RNA_def_property_ui_text(prop, "Filter Type", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "bokeh", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "bokeh", 1); RNA_def_property_ui_text(prop, "Bokeh", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "gamma", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "gamma", 1); RNA_def_property_ui_text(prop, "Gamma", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); - - /* - TODO: - curved - image_in_width - image_in_height - - Don't know if these need wrapping, can't find them in interface - */ + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } @@ -670,7 +916,7 @@ static void def_cmp_filter(StructRNA *srna) RNA_def_property_enum_sdna(prop, NULL, "custom1"); RNA_def_property_enum_items(prop, node_filter_items); RNA_def_property_ui_text(prop, "Filter Type", ""); - RNA_def_property_update(prop, 0, "rna_Node_update_name"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } static void def_cmp_map_value(StructRNA *srna) @@ -684,38 +930,38 @@ static void def_cmp_map_value(StructRNA *srna) RNA_def_property_array(prop, 1); RNA_def_property_range(prop, -1000.0f, 1000.0f); RNA_def_property_ui_text(prop, "Offset", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "size", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "size"); RNA_def_property_array(prop, 1); RNA_def_property_range(prop, -1000.0f, 1000.0f); RNA_def_property_ui_text(prop, "Size", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "use_min", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", TEXMAP_CLIP_MIN); RNA_def_property_ui_text(prop, "Use Minimum", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "use_max", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", TEXMAP_CLIP_MAX); RNA_def_property_ui_text(prop, "Use Maximum", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "min", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "min"); RNA_def_property_array(prop, 1); RNA_def_property_range(prop, -1000.0f, 1000.0f); RNA_def_property_ui_text(prop, "Minimum", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "max", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "max"); RNA_def_property_array(prop, 1); RNA_def_property_range(prop, -1000.0f, 1000.0f); RNA_def_property_ui_text(prop, "Maximum", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } static void def_cmp_vector_blur(StructRNA *srna) @@ -727,112 +973,104 @@ static void def_cmp_vector_blur(StructRNA *srna) prop = RNA_def_property(srna, "samples", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "samples"); RNA_def_property_ui_text(prop, "Samples", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "min_speed", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "minspeed"); RNA_def_property_ui_text(prop, "Min Speed", "Minimum speed for a pixel to be blurred; used to separate background from foreground"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "max_speed", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "maxspeed"); RNA_def_property_ui_text(prop, "Max Speed", "Maximum speed, or zero for none"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "fac"); RNA_def_property_ui_text(prop, "Blur Factor", "Scaling factor for motion vectors; actually 'shutter speed' in frames"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "curved", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "curved", 1); RNA_def_property_ui_text(prop, "Curved", "Interpolate between frames in a bezier curve, rather than linearly"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } static void def_cmp_levels(StructRNA *srna) { PropertyRNA *prop; - static EnumPropertyItem space_items[] = { - {1, "COMNINED_RGB", 0, "C", "Combined RGB"}, + static EnumPropertyItem channel_items[] = { + {1, "COMBINED_RGB", 0, "C", "Combined RGB"}, {2, "RED", 0, "R", "Red Channel"}, {3, "GREEN", 0, "G", "Green Channel"}, {4, "BLUE", 0, "B", "Blue Channel"}, {5, "LUMINANCE", 0, "L", "Luminance Channel"}, {0, NULL, 0, NULL, NULL}}; - prop = RNA_def_property(srna, "color_space", PROP_ENUM, PROP_NONE); + prop = RNA_def_property(srna, "channel", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "custom1"); - RNA_def_property_enum_items(prop, space_items); - RNA_def_property_ui_text(prop, "Color Space", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_enum_items(prop, channel_items); + RNA_def_property_ui_text(prop, "Channel", ""); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } static void def_cmp_image(StructRNA *srna) { PropertyRNA *prop; - /*static EnumPropertyItem type_items[] = { + /* + static EnumPropertyItem type_items[] = { {IMA_SRC_FILE, "IMAGE", 0, "Image", ""}, {IMA_SRC_MOVIE, "MOVIE", "Movie", ""}, {IMA_SRC_SEQUENCE, "SEQUENCE", "Sequence", ""}, {IMA_SRC_GENERATED, "GENERATED", "Generated", ""}, - {0, NULL, 0, NULL, NULL}};*/ + {0, NULL, 0, NULL, NULL}}; + */ prop = RNA_def_property(srna, "image", PROP_POINTER, PROP_NONE); RNA_def_property_pointer_sdna(prop, NULL, "id"); RNA_def_property_struct_type(prop, "Image"); RNA_def_property_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Image", ""); - RNA_def_property_update(prop, 0, "rna_Node_update_name"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); RNA_def_struct_sdna_from(srna, "ImageUser", "storage"); - - /* TODO: if movie or sequence { */ prop = RNA_def_property(srna, "frames", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "frames"); RNA_def_property_range(prop, 1, MAXFRAMEF); RNA_def_property_ui_text(prop, "Frames", "Number of images used in animation"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "start", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "sfra"); RNA_def_property_range(prop, 1, MAXFRAMEF); RNA_def_property_ui_text(prop, "Start Frame", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "offset", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "offset"); RNA_def_property_range(prop, MINAFRAMEF, MAXFRAMEF); RNA_def_property_ui_text(prop, "Offset", "Offsets the number of the frame to use in the animation"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "cyclic", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "cycl", 1); RNA_def_property_ui_text(prop, "Cyclic", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "auto_refresh", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", IMA_ANIM_ALWAYS); RNA_def_property_ui_text(prop, "Auto-Refresh", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); - - /* } */ + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); - /* if type == multilayer { */ - - prop = RNA_def_property(srna, "layer", PROP_INT, PROP_NONE); - RNA_def_property_int_sdna(prop, NULL, "layer"); - RNA_def_property_range(prop, 0, 10000); + prop= RNA_def_property(srna, "layer", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "layer"); + RNA_def_property_enum_items(prop, prop_image_layer_items); + RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_Node_image_layer_itemf"); RNA_def_property_ui_text(prop, "Layer", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); - - /* } */ - - /* TODO: refresh on change */ - + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_image_layer_update"); } static void def_cmp_render_layers(StructRNA *srna) @@ -844,19 +1082,20 @@ static void def_cmp_render_layers(StructRNA *srna) RNA_def_property_struct_type(prop, "Scene"); RNA_def_property_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Scene", ""); - RNA_def_property_update(prop, 0, "rna_Node_update_name"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); - /* TODO: layers in menu */ - prop = RNA_def_property(srna, "layer", PROP_INT, PROP_NONE); - RNA_def_property_int_sdna(prop, NULL, "custom1"); + prop= RNA_def_property(srna, "layer", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "custom1"); + RNA_def_property_enum_items(prop, prop_scene_layer_items); + RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_Node_scene_layer_itemf"); RNA_def_property_ui_text(prop, "Layer", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_scene_layer_update"); /* TODO: comments indicate this might be a hack */ prop = RNA_def_property(srna, "re_render", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "custom2", 1); RNA_def_property_ui_text(prop, "Re-render", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } static void def_cmp_output_file(StructRNA *srna) @@ -889,37 +1128,42 @@ static void def_cmp_output_file(StructRNA *srna) prop = RNA_def_property(srna, "filename", PROP_STRING, PROP_DIRPATH); RNA_def_property_string_sdna(prop, NULL, "name"); RNA_def_property_ui_text(prop, "Filename", ""); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "image_type", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "imtype"); RNA_def_property_enum_items(prop, type_items); RNA_def_property_ui_text(prop, "Image Type", ""); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "exr_half", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "subimtype", R_OPENEXR_HALF); RNA_def_property_ui_text(prop, "Half", ""); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "exr_codec", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "codec"); RNA_def_property_enum_items(prop, openexr_codec_items); RNA_def_property_ui_text(prop, "Codec", ""); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "quality", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "quality"); RNA_def_property_range(prop, 1, 100); RNA_def_property_ui_text(prop, "Quality", ""); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "start_frame", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "sfra"); RNA_def_property_range(prop, MINFRAMEF, MAXFRAMEF); RNA_def_property_ui_text(prop, "Start Frame", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "end_frame", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "efra"); RNA_def_property_range(prop, MINFRAMEF, MAXFRAMEF); RNA_def_property_ui_text(prop, "End Frame", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } static void def_cmp_dilate_erode(StructRNA *srna) @@ -930,7 +1174,7 @@ static void def_cmp_dilate_erode(StructRNA *srna) RNA_def_property_int_sdna(prop, NULL, "custom2"); RNA_def_property_range(prop, -100, 100); RNA_def_property_ui_text(prop, "Distance", "Distance to grow/shrink (number of iterations)"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } static void def_cmp_scale(StructRNA *srna) @@ -947,7 +1191,7 @@ static void def_cmp_scale(StructRNA *srna) RNA_def_property_enum_sdna(prop, NULL, "custom1"); RNA_def_property_enum_items(prop, space_items); RNA_def_property_ui_text(prop, "Space", "Coordinate space to scale relative to"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } static void def_cmp_diff_matte(StructRNA *srna) @@ -961,14 +1205,14 @@ static void def_cmp_diff_matte(StructRNA *srna) RNA_def_property_float_funcs(prop, NULL, "rna_Matte_t1_set", NULL); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Tolerance", "Color distances below this threshold are keyed."); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "falloff", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "t2"); RNA_def_property_float_funcs(prop, NULL, "rna_Matte_t2_set", NULL); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Falloff", "Color distances below this additional threshold are partially keyed."); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } static void def_cmp_color_matte(StructRNA *srna) @@ -981,19 +1225,19 @@ static void def_cmp_color_matte(StructRNA *srna) RNA_def_property_float_sdna(prop, NULL, "t1"); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "H", "Hue tolerance for colors to be considered a keying color"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "s", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "t2"); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "S", "Saturation Tolerance for the color"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "v", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "t3"); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "V", "Value Tolerance for the color"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } static void def_cmp_distance_matte(StructRNA *srna) @@ -1007,14 +1251,14 @@ static void def_cmp_distance_matte(StructRNA *srna) RNA_def_property_float_funcs(prop, NULL, "rna_Matte_t1_set", NULL); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Tolerance", "Color distances below this threshold are keyed."); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "falloff", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "t2"); RNA_def_property_float_funcs(prop, NULL, "rna_Matte_t2_set", NULL); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Falloff", "Color distances below this additional threshold are partially keyed."); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } static void def_cmp_color_spill(StructRNA *srna) @@ -1031,7 +1275,7 @@ static void def_cmp_color_spill(StructRNA *srna) RNA_def_property_enum_sdna(prop, NULL, "custom1"); RNA_def_property_enum_items(prop, channel_items); RNA_def_property_ui_text(prop, "Channel", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); RNA_def_struct_sdna_from(srna, "NodeChroma", "storage"); @@ -1039,7 +1283,7 @@ static void def_cmp_color_spill(StructRNA *srna) RNA_def_property_float_sdna(prop, NULL, "t1"); RNA_def_property_range(prop, 0.0f, 0.5f); RNA_def_property_ui_text(prop, "Amount", "How much the selected channel is affected by"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } static void def_cmp_luma_matte(StructRNA *srna) @@ -1053,14 +1297,14 @@ static void def_cmp_luma_matte(StructRNA *srna) RNA_def_property_float_funcs(prop, NULL, "rna_Matte_t1_set", NULL); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "High", "Values higher than this setting are 100% opaque"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "low", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "t2"); RNA_def_property_float_funcs(prop, NULL, "rna_Matte_t2_set", NULL); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Low", "Values lower than this setting are 100% keyed"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } static void def_cmp_chroma_matte(StructRNA *srna) @@ -1074,32 +1318,32 @@ static void def_cmp_chroma_matte(StructRNA *srna) RNA_def_property_float_funcs(prop, NULL, "rna_Matte_t1_set", NULL); RNA_def_property_range(prop, 1.0f, 80.0f); RNA_def_property_ui_text(prop, "Acceptance", "Tolerance for a color to be considered a keying color"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "cutoff", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "t2"); RNA_def_property_float_funcs(prop, NULL, "rna_Matte_t2_set", NULL); RNA_def_property_range(prop, 0.0f, 30.0f); RNA_def_property_ui_text(prop, "Cutoff", "Tolerance below which colors will be considered as exact matches"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "lift", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "fsize"); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Lift", "Alpha lift"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "gain", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "fstrength"); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Gain", "Alpha gain"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "shadow_adjust", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "t3"); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Shadow Adjust", "Adjusts the brightness of any shadows captured"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } static void def_cmp_channel_matte(StructRNA *srna) @@ -1107,23 +1351,25 @@ static void def_cmp_channel_matte(StructRNA *srna) PropertyRNA *prop; static EnumPropertyItem color_space_items[] = { - {1, "RGB", 0, "RGB", "RGB Color Space"}, - {2, "HSV", 0, "HSV", "HSV Color Space"}, - {3, "YUV", 0, "YUV", "YUV Color Space"}, - {4, "YCC", 0, "YCbCr", "YCbCr Color Space"}, + {CMP_NODE_CHANNEL_MATTE_CS_RGB, "RGB", 0, "RGB", "RGB Color Space"}, + {CMP_NODE_CHANNEL_MATTE_CS_HSV, "HSV", 0, "HSV", "HSV Color Space"}, + {CMP_NODE_CHANNEL_MATTE_CS_YUV, "YUV", 0, "YUV", "YUV Color Space"}, + {CMP_NODE_CHANNEL_MATTE_CS_YCC, "YCC", 0, "YCbCr", "YCbCr Color Space"}, {0, NULL, 0, NULL, NULL}}; prop = RNA_def_property(srna, "color_space", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "custom1"); RNA_def_property_enum_items(prop, color_space_items); RNA_def_property_ui_text(prop, "Color Space", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); - /* TODO: channel must be 1, 2 or 3 */ - prop = RNA_def_property(srna, "channel", PROP_INT, PROP_NONE); - RNA_def_property_int_sdna(prop, NULL, "custom2"); - RNA_def_property_update(prop, 0, "rna_Node_update"); - RNA_def_property_ui_text(prop, "Channel", ""); + + prop= RNA_def_property(srna, "channel", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "custom2"); + RNA_def_property_enum_items(prop, prop_tri_channel_items); + RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_Node_channel_itemf"); + RNA_def_property_ui_text(prop, "Channel", "Channel used to determine matte"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); RNA_def_struct_sdna_from(srna, "NodeChroma", "storage"); @@ -1132,14 +1378,14 @@ static void def_cmp_channel_matte(StructRNA *srna) RNA_def_property_float_funcs(prop, NULL, "rna_Matte_t1_set", NULL); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "High", "Values higher than this setting are 100% opaque"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "low", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "t2"); RNA_def_property_float_funcs(prop, NULL, "rna_Matte_t2_set", NULL); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Low", "Values lower than this setting are 100% keyed"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } static void def_cmp_flip(StructRNA *srna) @@ -1150,7 +1396,7 @@ static void def_cmp_flip(StructRNA *srna) RNA_def_property_enum_sdna(prop, NULL, "custom1"); RNA_def_property_enum_items(prop, node_flip_items); RNA_def_property_ui_text(prop, "Axis", ""); - RNA_def_property_update(prop, 0, "rna_Node_update_name"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } static void def_cmp_splitviewer(StructRNA *srna) @@ -1166,13 +1412,13 @@ static void def_cmp_splitviewer(StructRNA *srna) RNA_def_property_enum_sdna(prop, NULL, "custom2"); RNA_def_property_enum_items(prop, axis_items); RNA_def_property_ui_text(prop, "Axis", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "factor", PROP_INT, PROP_FACTOR); RNA_def_property_int_sdna(prop, NULL, "custom1"); RNA_def_property_range(prop, 0, 100); RNA_def_property_ui_text(prop, "Factor", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } static void def_cmp_id_mask(StructRNA *srna) @@ -1183,7 +1429,7 @@ static void def_cmp_id_mask(StructRNA *srna) RNA_def_property_int_sdna(prop, NULL, "custom1"); RNA_def_property_range(prop, 0, 10000); RNA_def_property_ui_text(prop, "Index", "Pass index number to convert to alpha"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } static void def_cmp_map_uv(StructRNA *srna) @@ -1194,7 +1440,7 @@ static void def_cmp_map_uv(StructRNA *srna) RNA_def_property_int_sdna(prop, NULL, "custom1"); RNA_def_property_range(prop, 0, 100); RNA_def_property_ui_text(prop, "Alpha", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } static void def_cmp_defocus(StructRNA *srna) @@ -1217,60 +1463,60 @@ static void def_cmp_defocus(StructRNA *srna) RNA_def_property_enum_sdna(prop, NULL, "bktype"); RNA_def_property_enum_items(prop, bokeh_items); RNA_def_property_ui_text(prop, "Bokeh Type", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); /* TODO: angle in degrees */ prop = RNA_def_property(srna, "angle", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "rotation"); RNA_def_property_range(prop, 0, 90); RNA_def_property_ui_text(prop, "Angle", "Bokeh shape rotation offset in degrees"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "gamma_correction", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "gamco", 1); RNA_def_property_ui_text(prop, "Gamma Correction", "Enable gamma correction before and after main process"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); /* TODO */ prop = RNA_def_property(srna, "f_stop", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "fstop"); RNA_def_property_range(prop, 0.0f, 128.0f); RNA_def_property_ui_text(prop, "fStop", "Amount of focal blur, 128=infinity=perfect focus, half the value doubles the blur radius"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "max_blur", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "maxblur"); RNA_def_property_range(prop, 0.0f, 10000.0f); RNA_def_property_ui_text(prop, "Max Blur", "blur limit, maximum CoC radius, 0=no limit"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "threshold", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "bthresh"); RNA_def_property_range(prop, 0.0f, 100.0f); RNA_def_property_ui_text(prop, "Threshold", "CoC radius threshold, prevents background bleed on in-focus midground, 0=off"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "preview", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "preview", 1); RNA_def_property_ui_text(prop, "Preview", "Enable sampling mode, useful for preview when using low samplecounts"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "samples", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "samples"); RNA_def_property_range(prop, 16, 256); RNA_def_property_ui_text(prop, "Samples", "Number of samples (16=grainy, higher=less noise)"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "use_zbuffer", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "no_zbuf", 1); RNA_def_property_ui_text(prop, "Use Z-Buffer", "Disable when using an image as input instead of actual zbuffer (auto enabled if node not image based, eg. time node)"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "z_scale", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "scale"); RNA_def_property_range(prop, 0.0f, 1000.0f); RNA_def_property_ui_text(prop, "Z-Scale", "Scales the Z input when not using a zbuffer, controls maximum blur designated by the color white or input value 1"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } static void def_cmp_invert(StructRNA *srna) @@ -1280,12 +1526,12 @@ static void def_cmp_invert(StructRNA *srna) prop = RNA_def_property(srna, "rgb", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "custom1", CMP_CHAN_RGB); RNA_def_property_ui_text(prop, "RGB", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "alpha", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "custom1", CMP_CHAN_A); RNA_def_property_ui_text(prop, "Alpha", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } static void def_cmp_crop(StructRNA *srna) @@ -1295,7 +1541,7 @@ static void def_cmp_crop(StructRNA *srna) prop = RNA_def_property(srna, "crop_size", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "custom1", 1); RNA_def_property_ui_text(prop, "Crop Image Size", "Whether to crop the size of the input image"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); RNA_def_struct_sdna_from(srna, "NodeTwoXYs", "storage"); @@ -1303,25 +1549,25 @@ static void def_cmp_crop(StructRNA *srna) RNA_def_property_int_sdna(prop, NULL, "x1"); RNA_def_property_range(prop, 0, 10000); RNA_def_property_ui_text(prop, "X1", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "x2", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "x2"); RNA_def_property_range(prop, 0, 10000); RNA_def_property_ui_text(prop, "X2", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "y1", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "y1"); RNA_def_property_range(prop, 0, 10000); RNA_def_property_ui_text(prop, "Y1", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "y2", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "y2"); RNA_def_property_range(prop, 0, 10000); RNA_def_property_ui_text(prop, "Y2", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } static void def_cmp_dblur(StructRNA *srna) @@ -1334,48 +1580,48 @@ static void def_cmp_dblur(StructRNA *srna) RNA_def_property_int_sdna(prop, NULL, "iter"); RNA_def_property_range(prop, 1, 32); RNA_def_property_ui_text(prop, "Iterations", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "wrap", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "wrap", 1); RNA_def_property_ui_text(prop, "Wrap", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "center_x", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "center_x"); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Center X", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "center_y", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "center_y"); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Center Y", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "distance", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "distance"); RNA_def_property_range(prop, -1.0f, 1.0f); RNA_def_property_ui_text(prop, "Distance", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "angle", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "angle"); RNA_def_property_range(prop, 0.0f, 360.0f); RNA_def_property_ui_text(prop, "Angle", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "spin", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "spin"); RNA_def_property_range(prop, -360.0f, 360.0f); RNA_def_property_ui_text(prop, "Spin", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "zoom", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "zoom"); RNA_def_property_range(prop, 0.0f, 100.0f); RNA_def_property_ui_text(prop, "Zoom", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } static void def_cmp_bilateral_blur(StructRNA *srna) @@ -1388,19 +1634,19 @@ static void def_cmp_bilateral_blur(StructRNA *srna) RNA_def_property_int_sdna(prop, NULL, "iter"); RNA_def_property_range(prop, 1, 128); RNA_def_property_ui_text(prop, "Iterations", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "sigma_color", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "sigma_color"); RNA_def_property_range(prop, 0.01f, 3.0f); RNA_def_property_ui_text(prop, "Color Sigma", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "sigma_space", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "sigma_space"); RNA_def_property_range(prop, 0.01f, 30.0f); RNA_def_property_ui_text(prop, "Space Sigma", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } static void def_cmp_premul_key(StructRNA *srna) @@ -1416,7 +1662,7 @@ static void def_cmp_premul_key(StructRNA *srna) RNA_def_property_enum_sdna(prop, NULL, "custom1"); RNA_def_property_enum_items(prop, type_items); RNA_def_property_ui_text(prop, "Mapping", "Conversion between premultiplied alpha and key alpha"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } @@ -1443,66 +1689,66 @@ static void def_cmp_glare(StructRNA *srna) RNA_def_property_enum_sdna(prop, NULL, "type"); RNA_def_property_enum_items(prop, type_items); RNA_def_property_ui_text(prop, "Glare Type", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "quality", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "quality"); RNA_def_property_enum_items(prop, quality_items); RNA_def_property_ui_text(prop, "Quality", "If not set to high quality, the effect will be applied to a low-res copy of the source image"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "iterations", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "iter"); RNA_def_property_range(prop, 2, 5); RNA_def_property_ui_text(prop, "Iterations", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "color_modulation", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "colmod"); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Color Modulation", "Amount of Color Modulation, modulates colors of streaks and ghosts for a spectral dispersion effect"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "mix", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "mix"); RNA_def_property_range(prop, -1.0f, 1.0f); RNA_def_property_ui_text(prop, "Mix", "-1 is original image only, 0 is exact 50/50 mix, 1 is processed image only"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "threshold", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "threshold"); RNA_def_property_range(prop, 0.0f, 1000.0f); RNA_def_property_ui_text(prop, "Threshold", "The glare filter will only be applied to pixels brighter than this value"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "streaks", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "angle"); RNA_def_property_range(prop, 2, 16); RNA_def_property_ui_text(prop, "Streaks", "Total number of streaks"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "angle_offset", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "angle_ofs"); RNA_def_property_range(prop, 0.0f, 180.0f); RNA_def_property_ui_text(prop, "Angle Offset", "Streak angle offset in degrees"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "fade", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "fade"); RNA_def_property_range(prop, 0.75f, 1.0f); RNA_def_property_ui_text(prop, "Fade", "Streak fade-out factor"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "rotate_45", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "angle", 1); RNA_def_property_ui_text(prop, "Rotate 45", "Simple star filter: add 45 degree rotation offset"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "size", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "size"); RNA_def_property_range(prop, 6, 9); RNA_def_property_ui_text(prop, "Size", "Glow/glare size (not actual size; relative to initial size of bright area of pixels)"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); /* TODO */ } @@ -1522,49 +1768,49 @@ static void def_cmp_tonemap(StructRNA *srna) RNA_def_property_enum_sdna(prop, NULL, "type"); RNA_def_property_enum_items(prop, type_items); RNA_def_property_ui_text(prop, "Tonemap Type", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "key", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "key"); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Key", "The value the average luminance is mapped to"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "offset", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "offset"); RNA_def_property_range(prop, 0.001f, 10.0f); RNA_def_property_ui_text(prop, "Offset", "Normally always 1, but can be used as an extra control to alter the brightness curve"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "gamma", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "gamma"); RNA_def_property_range(prop, 0.001f, 3.0f); RNA_def_property_ui_text(prop, "Gamma", "If not used, set to 1"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "intensity", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "f"); RNA_def_property_range(prop, -8.0f, 8.0f); RNA_def_property_ui_text(prop, "Intensity", "If less than zero, darkens image; otherwise, makes it brighter"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "contrast", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "m"); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Contrast", "Set to 0 to use estimate from input image"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "adaptation", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "a"); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Adaptation", "If 0, global; if 1, based on pixel intensity"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "correction", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "c"); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Color Correction", "If 0, same for all channels; if 1, each independent"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } static void def_cmp_lensdist(StructRNA *srna) @@ -1576,17 +1822,17 @@ static void def_cmp_lensdist(StructRNA *srna) prop = RNA_def_property(srna, "projector", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "proj", 1); RNA_def_property_ui_text(prop, "Projector", "Enable/disable projector mode. Effect is applied in horizontal direction only."); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "jitter", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "jit", 1); RNA_def_property_ui_text(prop, "Jitter", "Enable/disable jittering; faster, but also noisier"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "fit", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "fit", 1); RNA_def_property_ui_text(prop, "Fit", "For positive distortion factor only: scale image such that black areas are not visible"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } @@ -1602,7 +1848,7 @@ static void def_tex_output(StructRNA *srna) prop = RNA_def_property(srna, "output_name", PROP_STRING, PROP_NONE); RNA_def_property_string_sdna(prop, NULL, "name"); RNA_def_property_ui_text(prop, "Output Name", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } static void def_tex_image(StructRNA *srna) @@ -1613,7 +1859,7 @@ static void def_tex_image(StructRNA *srna) RNA_def_property_pointer_sdna(prop, NULL, "storage"); RNA_def_property_struct_type(prop, "ImageUser"); RNA_def_property_ui_text(prop, "Settings", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } static void def_tex_bricks(StructRNA *srna) @@ -1624,25 +1870,25 @@ static void def_tex_bricks(StructRNA *srna) RNA_def_property_float_sdna(prop, NULL, "custom3"); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Offset Amount", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "offset_frequency", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "custom1"); RNA_def_property_range(prop, 2, 99); RNA_def_property_ui_text(prop, "Offset Frequency", "Offset every N rows"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "squash", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "custom4"); RNA_def_property_range(prop, 0.0f, 99.0f); RNA_def_property_ui_text(prop, "Squash Amount", ""); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "squash_frequency", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "custom2"); RNA_def_property_range(prop, 2, 99); RNA_def_property_ui_text(prop, "Squash Frequency", "Squash every N rows"); - RNA_def_property_update(prop, 0, "rna_Node_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } /* -------------------------------------------------------------------------- */ @@ -1703,6 +1949,91 @@ static void rna_def_texture_node(BlenderRNA *brna) /* -------------------------------------------------------------------------- */ +static void rna_def_node_socket(BlenderRNA *brna) +{ + StructRNA *srna; + + srna = RNA_def_struct(brna, "NodeSocket", NULL); + RNA_def_struct_ui_text(srna, "Node Socket", "Input or output socket of a node"); + RNA_def_struct_refine_func(srna, "rna_NodeSocketType_refine"); + RNA_def_struct_sdna(srna, "bNodeSocket"); + RNA_def_struct_ui_icon(srna, ICON_PLUG); + RNA_def_struct_path_func(srna, "rna_NodeSocket_path"); + +} + +static void rna_def_node_socket_value(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + srna = RNA_def_struct(brna, "ValueNodeSocket", NULL); + RNA_def_struct_ui_text(srna, "Value Node Socket", "Input or output socket of a node"); + RNA_def_struct_sdna(srna, "bNodeSocket"); + RNA_def_struct_ui_icon(srna, ICON_PLUG); + RNA_def_struct_path_func(srna, "rna_NodeSocket_path"); + + prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Name", "Socket name."); + RNA_def_struct_name_property(srna, prop); + + prop = RNA_def_property(srna, "default_value", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "ns.vec"); + RNA_def_property_array(prop, 1); + RNA_def_property_ui_text(prop, "Default Value", "Default value of the socket when no link is attached."); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_NodeSocket_update"); + RNA_def_property_float_funcs(prop, NULL, NULL, "rna_NodeSocket_defvalue_range"); +} + +static void rna_def_node_socket_vector(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + srna = RNA_def_struct(brna, "VectorNodeSocket", NULL); + RNA_def_struct_ui_text(srna, "Vector Node Socket", "Input or output socket of a node"); + RNA_def_struct_sdna(srna, "bNodeSocket"); + RNA_def_struct_ui_icon(srna, ICON_PLUG); + RNA_def_struct_path_func(srna, "rna_NodeSocket_path"); + + prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Name", "Socket name."); + RNA_def_struct_name_property(srna, prop); + + prop = RNA_def_property(srna, "default_value", PROP_FLOAT, PROP_XYZ); + RNA_def_property_float_sdna(prop, NULL, "ns.vec"); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "Default Value", "Default value of the socket when no link is attached."); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_NodeSocket_update"); + RNA_def_property_float_funcs(prop, NULL, NULL, "rna_NodeSocket_defvalue_range"); +} + +static void rna_def_node_socket_rgba(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + srna = RNA_def_struct(brna, "RGBANodeSocket", NULL); + RNA_def_struct_ui_text(srna, "RGBA Node Socket", "Input or output socket of a node"); + RNA_def_struct_sdna(srna, "bNodeSocket"); + RNA_def_struct_ui_icon(srna, ICON_PLUG); + RNA_def_struct_path_func(srna, "rna_NodeSocket_path"); + + prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Name", "Socket name."); + RNA_def_struct_name_property(srna, prop); + + prop = RNA_def_property(srna, "default_value", PROP_FLOAT, PROP_COLOR); + RNA_def_property_float_sdna(prop, NULL, "ns.vec"); + RNA_def_property_array(prop, 4); + RNA_def_property_ui_text(prop, "Default Value", "Default value of the socket when no link is attached."); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_NodeSocket_update"); + RNA_def_property_float_funcs(prop, NULL, NULL, "rna_NodeSocket_defvalue_range"); +} + static void rna_def_node(BlenderRNA *brna) { StructRNA *srna; @@ -1711,6 +2042,7 @@ static void rna_def_node(BlenderRNA *brna) srna = RNA_def_struct(brna, "Node", NULL); RNA_def_struct_ui_text(srna, "Node", "Node in a node tree."); RNA_def_struct_sdna(srna, "bNode"); + RNA_def_struct_ui_icon(srna, ICON_NODE); RNA_def_struct_refine_func(srna, "rna_Node_refine"); RNA_def_struct_path_func(srna, "rna_Node_path"); @@ -1719,10 +2051,22 @@ static void rna_def_node(BlenderRNA *brna) RNA_def_property_array(prop, 2); RNA_def_property_range(prop, -10000.0f, 10000.0f); RNA_def_property_ui_text(prop, "Location", ""); + RNA_def_property_update(prop, NC_NODE, "rna_Node_update"); prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE); RNA_def_property_ui_text(prop, "Name", "Node name."); RNA_def_struct_name_property(srna, prop); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update_name"); + + prop = RNA_def_property(srna, "inputs", PROP_COLLECTION, PROP_NONE); + RNA_def_property_collection_sdna(prop, NULL, "inputs", NULL); + RNA_def_property_struct_type(prop, "NodeSocket"); + RNA_def_property_ui_text(prop, "Inputs", ""); + + prop = RNA_def_property(srna, "outputs", PROP_COLLECTION, PROP_NONE); + RNA_def_property_collection_sdna(prop, NULL, "outputs", NULL); + RNA_def_property_struct_type(prop, "NodeSocket"); + RNA_def_property_ui_text(prop, "Outputs", ""); } static void rna_def_nodetree(BlenderRNA *brna) @@ -1733,14 +2077,23 @@ static void rna_def_nodetree(BlenderRNA *brna) srna = RNA_def_struct(brna, "NodeTree", "ID"); RNA_def_struct_ui_text(srna, "Node Tree", "Node tree consisting of linked nodes used for materials, textures and compositing."); RNA_def_struct_sdna(srna, "bNodeTree"); - RNA_def_struct_ui_icon(srna, ICON_NODE); + RNA_def_struct_ui_icon(srna, ICON_NODETREE); + /* AnimData */ rna_def_animdata_common(srna); - + + /* Nodes Collection */ prop = RNA_def_property(srna, "nodes", PROP_COLLECTION, PROP_NONE); RNA_def_property_collection_sdna(prop, NULL, "nodes", NULL); RNA_def_property_struct_type(prop, "Node"); RNA_def_property_ui_text(prop, "Nodes", ""); + + /* Grease Pencil */ + prop= RNA_def_property(srna, "grease_pencil", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "gpd"); + RNA_def_property_flag(prop, PROP_EDITABLE); + RNA_def_property_struct_type(prop, "GreasePencil"); + RNA_def_property_ui_text(prop, "Grease Pencil Data", "Grease Pencil datablock"); } static void define_specific_node(BlenderRNA *brna, int id, void (*func)(StructRNA*)) @@ -1755,6 +2108,10 @@ void RNA_def_nodetree(BlenderRNA *brna) { init(); rna_def_nodetree(brna); + rna_def_node_socket(brna); + rna_def_node_socket_value(brna); + rna_def_node_socket_vector(brna); + rna_def_node_socket_rgba(brna); rna_def_node(brna); rna_def_shader_node(brna); rna_def_compositor_node(brna); diff --git a/source/blender/makesrna/intern/rna_nodetree_types.h b/source/blender/makesrna/intern/rna_nodetree_types.h index 69424649b3b..d9a1db996de 100644 --- a/source/blender/makesrna/intern/rna_nodetree_types.h +++ b/source/blender/makesrna/intern/rna_nodetree_types.h @@ -28,7 +28,7 @@ DefNode( ShaderNode, SH_NODE_MATERIAL, def_sh_material, "MATER DefNode( ShaderNode, SH_NODE_RGB, 0, "RGB", RGB, "RGB", "" ) DefNode( ShaderNode, SH_NODE_VALUE, 0, "VALUE", Value, "Value", "" ) DefNode( ShaderNode, SH_NODE_MIX_RGB, def_mix_rgb, "MIX_RGB", MixRGB, "MixRGB", "" ) -DefNode( ShaderNode, SH_NODE_VALTORGB, def_val_to_rgb, "VALTORGB", ValToRGB, "Value to RGB", "" ) +DefNode( ShaderNode, SH_NODE_VALTORGB, def_colorramp, "VALTORGB", ValToRGB, "Value to RGB", "" ) DefNode( ShaderNode, SH_NODE_RGBTOBW, 0, "RGBTOBW", RGBToBW, "RGB to BW", "" ) DefNode( ShaderNode, SH_NODE_TEXTURE, def_texture, "TEXTURE", Texture, "Texture", "" ) DefNode( ShaderNode, SH_NODE_NORMAL, 0, "NORMAL", Normal, "Normal", "" ) @@ -50,7 +50,7 @@ DefNode( CompositorNode, CMP_NODE_VIEWER, 0, "VIEWE DefNode( CompositorNode, CMP_NODE_RGB, 0, "RGB", RGB, "RGB", "" ) DefNode( CompositorNode, CMP_NODE_VALUE, 0, "VALUE", Value, "Value", "" ) DefNode( CompositorNode, CMP_NODE_MIX_RGB, def_mix_rgb, "MIX_RGB", MixRGB, "Mix RGB", "" ) -DefNode( CompositorNode, CMP_NODE_VALTORGB, def_val_to_rgb, "VALTORGB", ValToRGB, "Val to RGB", "" ) +DefNode( CompositorNode, CMP_NODE_VALTORGB, def_colorramp, "VALTORGB", ValToRGB, "Val to RGB", "" ) DefNode( CompositorNode, CMP_NODE_RGBTOBW, 0, "RGBTOBW", RGBToBW, "RGB to BW", "" ) DefNode( CompositorNode, CMP_NODE_NORMAL, 0, "NORMAL", Normal, "Normal", "" ) DefNode( CompositorNode, CMP_NODE_CURVE_VEC, def_vector_curve, "CURVE_VEC", CurveVec, "Vector Curve", "" ) @@ -115,7 +115,7 @@ DefNode( TextureNode, TEX_NODE_BRICKS, def_tex_bricks, "BRICK DefNode( TextureNode, TEX_NODE_MATH, def_math, "MATH", Math, "Math", "" ) DefNode( TextureNode, TEX_NODE_MIX_RGB, def_mix_rgb, "MIX_RGB", MixRGB, "Mix RGB", "" ) DefNode( TextureNode, TEX_NODE_RGBTOBW, 0, "RGBTOBW", RGBToBW, "RGB To BW", "" ) -DefNode( TextureNode, TEX_NODE_VALTORGB, def_val_to_rgb, "VALTORGB", ValToRGB, "Val To RGB", "" ) +DefNode( TextureNode, TEX_NODE_VALTORGB, def_colorramp, "VALTORGB", ValToRGB, "Val To RGB", "" ) DefNode( TextureNode, TEX_NODE_IMAGE, def_tex_image, "IMAGE", Image, "Image", "" ) DefNode( TextureNode, TEX_NODE_CURVE_RGB, def_rgb_curve, "CURVE_RGB", CurveRGB, "RGB Curve", "" ) DefNode( TextureNode, TEX_NODE_INVERT, 0, "INVERT", Invert, "Invert", "" ) diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c index 5b6cb16a462..63a7d68a0cd 100644 --- a/source/blender/makesrna/intern/rna_object.c +++ b/source/blender/makesrna/intern/rna_object.c @@ -83,7 +83,7 @@ EnumPropertyItem object_type_items[] = { #ifdef RNA_RUNTIME -#include "BLI_arithb.h" +#include "BLI_math.h" #include "DNA_key_types.h" @@ -94,6 +94,7 @@ EnumPropertyItem object_type_items[] = { #include "BKE_depsgraph.h" #include "BKE_effect.h" #include "BKE_key.h" +#include "BKE_object.h" #include "BKE_material.h" #include "BKE_mesh.h" #include "BKE_particle.h" @@ -507,7 +508,7 @@ static void rna_Object_rotation_axis_angle_get(PointerRNA *ptr, float *value) /* for now, assume that rotation mode is axis-angle */ value[0]= ob->rotAngle; - VecCopyf(&value[1], ob->rotAxis); + copy_v3_v3(&value[1], ob->rotAxis); } /* rotation - axis-angle */ @@ -517,7 +518,7 @@ static void rna_Object_rotation_axis_angle_set(PointerRNA *ptr, const float *val /* for now, assume that rotation mode is axis-angle */ ob->rotAngle= value[0]; - VecCopyf(ob->rotAxis, (float *)&value[1]); + copy_v3_v3(ob->rotAxis, (float *)&value[1]); // TODO: validate axis? } @@ -533,32 +534,47 @@ static void rna_Object_rotation_mode_set(PointerRNA *ptr, int value) ob->rotmode= value; } -/* not called directly */ -static void rna_Object_scale_linked_set(Object *ob, float value, int axis) +static void rna_Object_dimensions_get(PointerRNA *ptr, float *value) { - if(ob->size[axis]==0.0f || value==0.0f) { - ob->size[0]= ob->size[1]= ob->size[2]= value; - } - else { - VecMulf(ob->size, value / ob->size[axis]); + Object *ob= ptr->data; + BoundBox *bb = NULL; + + bb= object_get_boundbox(ob); + if (bb) { + float scale[3]; + + mat4_to_size( scale,ob->obmat); + + value[0] = fabs(scale[0]) * (bb->vec[4][0] - bb->vec[0][0]); + value[1] = fabs(scale[1]) * (bb->vec[2][1] - bb->vec[0][1]); + value[2] = fabs(scale[2]) * (bb->vec[1][2] - bb->vec[0][2]); + } else { + value[0] = value[1] = value[2] = 0.f; } } -static void rna_Object_scale_x_linked_set(PointerRNA *ptr, float value) +static void rna_Object_dimensions_set(PointerRNA *ptr, const float *value) { - rna_Object_scale_linked_set(ptr->data, value, 0); -} -static void rna_Object_scale_y_linked_set(PointerRNA *ptr, float value) -{ - rna_Object_scale_linked_set(ptr->data, value, 1); -} -static void rna_Object_scale_z_linked_set(PointerRNA *ptr, float value) -{ - rna_Object_scale_linked_set(ptr->data, value, 2); + Object *ob= ptr->data; + BoundBox *bb = NULL; + + bb= object_get_boundbox(ob); + if (bb) { + float scale[3], len[3]; + + mat4_to_size( scale,ob->obmat); + + len[0] = bb->vec[4][0] - bb->vec[0][0]; + len[1] = bb->vec[2][1] - bb->vec[0][1]; + len[2] = bb->vec[1][2] - bb->vec[0][2]; + + if (len[0] > 0.f) ob->size[0] = value[0] / len[0]; + if (len[1] > 0.f) ob->size[1] = value[1] / len[1]; + if (len[2] > 0.f) ob->size[2] = value[2] / len[2]; + } } - static PointerRNA rna_MaterialSlot_material_get(PointerRNA *ptr) { Object *ob= (Object*)ptr->id.data; @@ -723,7 +739,7 @@ static PointerRNA rna_Object_game_settings_get(PointerRNA *ptr) static unsigned int rna_Object_layer_validate__internal(const int *values, unsigned int lay) { - int i, tot; + int i, tot= 0; /* ensure we always have some layer selected */ for(i=0; i<20; i++) @@ -1337,26 +1353,13 @@ static void rna_def_object(BlenderRNA *brna) RNA_def_property_float_sdna(prop, NULL, "size"); RNA_def_property_ui_text(prop, "Scale", "Scaling of the object."); RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_update"); - - /* linked scale for the transform panel */ - prop= RNA_def_property(srna, "scale_linked_x", PROP_FLOAT, PROP_NONE); - RNA_def_property_float_sdna(prop, NULL, "size[0]"); - RNA_def_property_float_funcs(prop, NULL, "rna_Object_scale_x_linked_set", NULL); - RNA_def_property_ui_text(prop, "Scale X", "Scaling of the objects X axis."); - RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_update"); - - prop= RNA_def_property(srna, "scale_linked_y", PROP_FLOAT, PROP_NONE); - RNA_def_property_float_sdna(prop, NULL, "size[1]"); - RNA_def_property_float_funcs(prop, NULL, "rna_Object_scale_y_linked_set", NULL); - RNA_def_property_ui_text(prop, "Scale Y", "Scaling of the objects X axis."); - RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_update"); - prop= RNA_def_property(srna, "scale_linked_z", PROP_FLOAT, PROP_NONE); - RNA_def_property_float_sdna(prop, NULL, "size[2]"); - RNA_def_property_float_funcs(prop, NULL, "rna_Object_scale_z_linked_set", NULL); - RNA_def_property_ui_text(prop, "Scale Z", "Scaling of the objects Z axis."); + prop= RNA_def_property(srna, "dimensions", PROP_FLOAT, PROP_XYZ|PROP_UNIT_LENGTH); + RNA_def_property_array(prop, 3); + RNA_def_property_float_funcs(prop, "rna_Object_dimensions_get", "rna_Object_dimensions_set", NULL); + RNA_def_property_ui_text(prop, "Dimensions", "Absolute bounding box dimensions of the object."); RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_update"); - + /* delta transforms */ prop= RNA_def_property(srna, "delta_location", PROP_FLOAT, PROP_TRANSLATION); @@ -1760,7 +1763,7 @@ static void rna_def_base(BlenderRNA *brna) StructRNA *srna; PropertyRNA *prop; - srna= RNA_def_struct(brna, "Base", NULL); + srna= RNA_def_struct(brna, "ObjectBase", NULL); RNA_def_struct_sdna(srna, "Base"); RNA_def_struct_ui_text(srna, "Object Base", "An objects instance in a scene."); RNA_def_struct_ui_icon(srna, ICON_OBJECT_DATA); diff --git a/source/blender/makesrna/intern/rna_object_api.c b/source/blender/makesrna/intern/rna_object_api.c index 098604c1eab..8fcc4e49986 100644 --- a/source/blender/makesrna/intern/rna_object_api.c +++ b/source/blender/makesrna/intern/rna_object_api.c @@ -57,7 +57,7 @@ #include "BKE_font.h" #include "BKE_mball.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "DNA_mesh_types.h" #include "DNA_scene_types.h" diff --git a/source/blender/makesrna/intern/rna_object_force.c b/source/blender/makesrna/intern/rna_object_force.c index 9ecea76ab0d..d6239d92911 100644 --- a/source/blender/makesrna/intern/rna_object_force.c +++ b/source/blender/makesrna/intern/rna_object_force.c @@ -412,6 +412,19 @@ static void rna_SoftBodySettings_goal_vgroup_set(PointerRNA *ptr, const char *va rna_object_vgroup_name_index_set(ptr, value, &sb->vertgroup); } +static void rna_SoftBodySettings_mass_vgroup_set(PointerRNA *ptr, const char *value) +{ + SoftBody *sb= (SoftBody*)ptr->data; + rna_object_vgroup_name_set(ptr, value, sb->namedVG_Mass, sizeof(sb->namedVG_Mass)); +} + +static void rna_SoftBodySettings_spring_vgroup_set(PointerRNA *ptr, const char *value) +{ + SoftBody *sb= (SoftBody*)ptr->data; + rna_object_vgroup_name_set(ptr, value, sb->namedVG_Spring_K, sizeof(sb->namedVG_Spring_K)); +} + + static char *rna_SoftBodySettings_path(PointerRNA *ptr) { Object *ob= (Object*)ptr->id.data; @@ -1392,6 +1405,12 @@ static void rna_def_softbody(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Mass", ""); RNA_def_property_update(prop, 0, "rna_softbody_update"); + prop= RNA_def_property(srna, "mass_vertex_group", PROP_STRING, PROP_NONE); + RNA_def_property_string_sdna(prop, NULL, "namedVG_Mass"); + RNA_def_property_ui_text(prop, "Mass Vertex Group", "Control point mass values."); + RNA_def_property_string_funcs(prop, NULL, NULL, "rna_SoftBodySettings_mass_vgroup_set"); + RNA_def_property_update(prop, 0, "rna_softbody_update"); + prop= RNA_def_property(srna, "gravity", PROP_FLOAT, PROP_ACCELERATION); RNA_def_property_float_sdna(prop, NULL, "grav"); RNA_def_property_range(prop, -10.0f, 10.0f); @@ -1490,6 +1509,12 @@ static void rna_def_softbody(BlenderRNA *brna) RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Shear", "Shear Stiffness"); + prop= RNA_def_property(srna, "spring_vertex_group", PROP_STRING, PROP_NONE); + RNA_def_property_string_sdna(prop, NULL, "namedVG_Spring_K"); + RNA_def_property_ui_text(prop, "Spring Vertex Group", "Control point spring strength values."); + RNA_def_property_string_funcs(prop, NULL, NULL, "rna_SoftBodySettings_spring_vgroup_set"); + RNA_def_property_update(prop, 0, "rna_softbody_update"); + /* Collision */ prop= RNA_def_property(srna, "collision_type", PROP_ENUM, PROP_NONE); diff --git a/source/blender/makesrna/intern/rna_particle.c b/source/blender/makesrna/intern/rna_particle.c index a70a5572ef0..f458ee86091 100644 --- a/source/blender/makesrna/intern/rna_particle.c +++ b/source/blender/makesrna/intern/rna_particle.c @@ -105,7 +105,7 @@ EnumPropertyItem part_hair_ren_as_items[] = { #include "BKE_particle.h" #include "BKE_pointcache.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_listbase.h" /* property update functions */ @@ -593,7 +593,7 @@ static void psys_vg_name_set__internal(PointerRNA *ptr, const char *value, int i psys->vgroup[index]= 0; } else { - int vgroup_num = get_named_vertexgroup_num(ob, value); + int vgroup_num = get_named_vertexgroup_num(ob, (char*)value); if(vgroup_num == -1) return; diff --git a/source/blender/makesrna/intern/rna_pose.c b/source/blender/makesrna/intern/rna_pose.c index 584c971951a..5d2c281fb62 100644 --- a/source/blender/makesrna/intern/rna_pose.c +++ b/source/blender/makesrna/intern/rna_pose.c @@ -43,7 +43,7 @@ #include "BIK_api.h" #include "BKE_action.h" #include "BKE_armature.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "DNA_userdef_types.h" @@ -163,7 +163,7 @@ static void rna_PoseChannel_rotation_axis_angle_get(PointerRNA *ptr, float *valu /* for now, assume that rotation mode is axis-angle */ value[0]= pchan->rotAngle; - VecCopyf(&value[1], pchan->rotAxis); + copy_v3_v3(&value[1], pchan->rotAxis); } /* rotation - axis-angle */ @@ -173,7 +173,7 @@ static void rna_PoseChannel_rotation_axis_angle_set(PointerRNA *ptr, const float /* for now, assume that rotation mode is axis-angle */ pchan->rotAngle= value[0]; - VecCopyf(pchan->rotAxis, (float *)&value[1]); + copy_v3_v3(pchan->rotAxis, (float *)&value[1]); // TODO: validate axis? } diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c index 667f88a3a33..6d198e10b38 100644 --- a/source/blender/makesrna/intern/rna_scene.c +++ b/source/blender/makesrna/intern/rna_scene.c @@ -956,13 +956,13 @@ void rna_def_render_layer_common(StructRNA *srna, int scene) prop= RNA_def_property(srna, "pass_reflection", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_REFLECT); - RNA_def_property_ui_text(prop, "Reflection", "Deliver ratraced reflection pass."); + RNA_def_property_ui_text(prop, "Reflection", "Deliver raytraced reflection pass."); if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); else RNA_def_property_clear_flag(prop, PROP_EDITABLE); prop= RNA_def_property(srna, "pass_refraction", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_REFRACT); - RNA_def_property_ui_text(prop, "Refraction", "Deliver ratraced refraction pass."); + RNA_def_property_ui_text(prop, "Refraction", "Deliver raytraced refraction pass."); if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); else RNA_def_property_clear_flag(prop, PROP_EDITABLE); @@ -986,13 +986,13 @@ void rna_def_render_layer_common(StructRNA *srna, int scene) prop= RNA_def_property(srna, "pass_reflection_exclude", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "pass_xor", SCE_PASS_REFLECT); - RNA_def_property_ui_text(prop, "Reflection Exclude", "Exclude ratraced reflection pass from combined."); + RNA_def_property_ui_text(prop, "Reflection Exclude", "Exclude raytraced reflection pass from combined."); if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); else RNA_def_property_clear_flag(prop, PROP_EDITABLE); prop= RNA_def_property(srna, "pass_refraction_exclude", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "pass_xor", SCE_PASS_REFRACT); - RNA_def_property_ui_text(prop, "Refraction Exclude", "Exclude ratraced refraction pass from combined."); + RNA_def_property_ui_text(prop, "Refraction Exclude", "Exclude raytraced refraction pass from combined."); if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); else RNA_def_property_clear_flag(prop, PROP_EDITABLE); } @@ -2221,12 +2221,12 @@ void RNA_def_scene(BlenderRNA *brna) /* Bases/Objects */ prop= RNA_def_property(srna, "bases", PROP_COLLECTION, PROP_NONE); RNA_def_property_collection_sdna(prop, NULL, "base", NULL); - RNA_def_property_struct_type(prop, "Base"); + RNA_def_property_struct_type(prop, "ObjectBase"); RNA_def_property_ui_text(prop, "Bases", ""); { /* Collection active property */ prop_act= RNA_def_property(srna, "base_active", PROP_POINTER, PROP_NONE); - RNA_def_property_struct_type(prop_act, "Base"); + RNA_def_property_struct_type(prop_act, "ObjectBase"); RNA_def_property_pointer_sdna(prop_act, NULL, "basact"); RNA_def_property_flag(prop_act, PROP_EDITABLE); RNA_def_property_ui_text(prop_act, "Active Base", "Active object in the scene."); @@ -2287,7 +2287,7 @@ void RNA_def_scene(BlenderRNA *brna) prop= RNA_def_property(srna, "frame_step", PROP_INT, PROP_TIME); RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); - RNA_def_property_int_sdna(prop, NULL, "frame_step"); + RNA_def_property_int_sdna(prop, NULL, "r.frame_step"); RNA_def_property_range(prop, 0, MAXFRAME); RNA_def_property_ui_range(prop, 0, 100, 1, 0); RNA_def_property_ui_text(prop, "Frame Step", "Number of frames to skip forward while rendering/playing back each frame"); diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index 40b918b1ea2..c77dabe5e4d 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -265,8 +265,8 @@ static EnumPropertyItem *rna_SpaceImageEditor_draw_channels_itemf(bContext *C, P RNA_enum_items_add_value(&item, &totitem, draw_channels_items, 0); if(alpha) { - RNA_enum_items_add_value(&item, &totitem, draw_channels_items, SI_SHOW_ALPHA); RNA_enum_items_add_value(&item, &totitem, draw_channels_items, SI_USE_ALPHA); + RNA_enum_items_add_value(&item, &totitem, draw_channels_items, SI_SHOW_ALPHA); } else if(zbuf) { RNA_enum_items_add_value(&item, &totitem, draw_channels_items, SI_SHOW_ZBUF); @@ -1440,6 +1440,10 @@ static void rna_def_space_console(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Prompt", "Command line prompt."); RNA_def_struct_name_property(srna, prop); + prop= RNA_def_property(srna, "language", PROP_STRING, PROP_NONE); + RNA_def_property_ui_text(prop, "Language", "Command line prompt language."); + RNA_def_struct_name_property(srna, prop); + prop= RNA_def_property(srna, "history", PROP_COLLECTION, PROP_NONE); RNA_def_property_collection_sdna(prop, NULL, "history", NULL); RNA_def_property_struct_type(prop, "ConsoleLine"); diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c index a54e1b84709..6343a60cde8 100644 --- a/source/blender/makesrna/intern/rna_userdef.c +++ b/source/blender/makesrna/intern/rna_userdef.c @@ -1434,7 +1434,7 @@ static void rna_def_userdef_themes(BlenderRNA *brna) {8, "PROPERTIES", ICON_BUTS, "Properties", ""}, {9, "TEXT_EDITOR", ICON_TEXT, "Text Editor", ""}, {10, "TIMELINE", ICON_TIME, "Timeline", ""}, - {11, "NODE_EDITOR", ICON_NODE, "Node Editor", ""}, + {11, "NODE_EDITOR", ICON_NODETREE, "Node Editor", ""}, {12, "LOGIC_EDITOR", ICON_LOGIC, "Logic Editor", ""}, {13, "OUTLINER", ICON_OOPS, "Outliner", ""}, {14, "INFO", ICON_INFO, "Info", ""}, diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_channelMatte.c b/source/blender/nodes/intern/CMP_nodes/CMP_channelMatte.c index ac940d76ed6..7b0476229fd 100644 --- a/source/blender/nodes/intern/CMP_nodes/CMP_channelMatte.c +++ b/source/blender/nodes/intern/CMP_nodes/CMP_channelMatte.c @@ -131,15 +131,15 @@ static void node_composit_exec_channel_matte(void *data, bNode *node, bNodeStack /*convert to colorspace*/ switch(node->custom1) { - case 1: /*RGB */ + case CMP_NODE_CHANNEL_MATTE_CS_RGB: break; - case 2: /*HSV*/ + case CMP_NODE_CHANNEL_MATTE_CS_HSV: /*HSV*/ composit1_pixel_processor(node, outbuf, cbuf, in[1]->vec, do_rgba_to_hsva, CB_RGBA); break; - case 3: /*YUV*/ + case CMP_NODE_CHANNEL_MATTE_CS_YUV: /*YUV*/ composit1_pixel_processor(node, outbuf, cbuf, in[1]->vec, do_rgba_to_yuva, CB_RGBA); break; - case 4: /*YCC*/ + case CMP_NODE_CHANNEL_MATTE_CS_YCC: /*YCC*/ composit1_pixel_processor(node, outbuf, cbuf, in[1]->vec, do_normalized_rgba_to_ycca2, CB_RGBA); break; default: @@ -151,15 +151,15 @@ static void node_composit_exec_channel_matte(void *data, bNode *node, bNodeStack /*convert back to RGB colorspace in place*/ switch(node->custom1) { - case 1: /*RGB*/ + case CMP_NODE_CHANNEL_MATTE_CS_RGB: /*RGB*/ break; - case 2: /*HSV*/ + case CMP_NODE_CHANNEL_MATTE_CS_HSV: /*HSV*/ composit1_pixel_processor(node, outbuf, outbuf, in[1]->vec, do_hsva_to_rgba, CB_RGBA); break; - case 3: /*YUV*/ + case CMP_NODE_CHANNEL_MATTE_CS_YUV: /*YUV*/ composit1_pixel_processor(node, outbuf, outbuf, in[1]->vec, do_yuva_to_rgba, CB_RGBA); break; - case 4: /*YCC*/ + case CMP_NODE_CHANNEL_MATTE_CS_YCC: /*YCC*/ composit1_pixel_processor(node, outbuf, outbuf, in[1]->vec, do_normalized_ycca_to_rgba2, CB_RGBA); break; default: diff --git a/source/blender/nodes/intern/CMP_util.h b/source/blender/nodes/intern/CMP_util.h index bb08a448bf4..6f37a876169 100644 --- a/source/blender/nodes/intern/CMP_util.h +++ b/source/blender/nodes/intern/CMP_util.h @@ -60,7 +60,7 @@ #include "../CMP_node.h" #include "node_util.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_rand.h" #include "BLI_threads.h" diff --git a/source/blender/nodes/intern/SHD_nodes/SHD_camera.c b/source/blender/nodes/intern/SHD_nodes/SHD_camera.c index 20136d75540..91dc1c7ceb5 100644 --- a/source/blender/nodes/intern/SHD_nodes/SHD_camera.c +++ b/source/blender/nodes/intern/SHD_nodes/SHD_camera.c @@ -45,7 +45,7 @@ static void node_shader_exec_camera(void *data, bNode *node, bNodeStack **in, bN VECCOPY(out[0]->vec, shi->co); /* get view vector */ out[1]->vec[0]= fabs(shi->co[2]); /* get view z-depth */ - out[2]->vec[0]= Normalize(out[0]->vec); /* get view distance */ + out[2]->vec[0]= normalize_v3(out[0]->vec); /* get view distance */ } } diff --git a/source/blender/nodes/intern/SHD_nodes/SHD_curves.c b/source/blender/nodes/intern/SHD_nodes/SHD_curves.c index d277547b636..c4f1dba57d3 100644 --- a/source/blender/nodes/intern/SHD_nodes/SHD_curves.c +++ b/source/blender/nodes/intern/SHD_nodes/SHD_curves.c @@ -32,6 +32,7 @@ /* **************** CURVE VEC ******************** */ static bNodeSocketType sh_node_curve_vec_in[]= { + { SOCK_VALUE, 0, "Fac", 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f}, { SOCK_VECTOR, 1, "Vector", 0.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f}, { -1, 0, "" } }; @@ -47,7 +48,7 @@ static void node_shader_exec_curve_vec(void *data, bNode *node, bNodeStack **in, /* stack order input: vec */ /* stack order output: vec */ - nodestack_get_vec(vec, SOCK_VECTOR, in[0]); + nodestack_get_vec(vec, SOCK_VECTOR, in[1]); curvemapping_evaluate3F(node->storage, out[0]->vec, vec); } @@ -86,6 +87,7 @@ bNodeType sh_node_curve_vec= { /* **************** CURVE RGB ******************** */ static bNodeSocketType sh_node_curve_rgb_in[]= { + { SOCK_VALUE, 1, "Fac", 1.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f}, { SOCK_RGBA, 1, "Color", 0.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f}, { -1, 0, "" } }; @@ -101,8 +103,11 @@ static void node_shader_exec_curve_rgb(void *data, bNode *node, bNodeStack **in, /* stack order input: vec */ /* stack order output: vec */ - nodestack_get_vec(vec, SOCK_VECTOR, in[0]); + nodestack_get_vec(vec, SOCK_VECTOR, in[1]); curvemapping_evaluateRGBF(node->storage, out[0]->vec, vec); + if(in[0]->vec[0] != 1.0f) { + interp_v3_v3v3(out[0]->vec, vec, out[0]->vec, *in[0]->vec); + } } static void node_shader_init_curve_rgb(bNode *node) @@ -114,7 +119,6 @@ static int gpu_shader_curve_rgb(GPUMaterial *mat, bNode *node, GPUNodeStack *in, { float *array; int size; - curvemapping_table_RGBA(node->storage, &array, &size); return GPU_stack_link(mat, "curves_rgb", in, out, GPU_texture(size, array)); } diff --git a/source/blender/nodes/intern/SHD_nodes/SHD_mapping.c b/source/blender/nodes/intern/SHD_nodes/SHD_mapping.c index c081929a2fc..987525f52b6 100644 --- a/source/blender/nodes/intern/SHD_nodes/SHD_mapping.c +++ b/source/blender/nodes/intern/SHD_nodes/SHD_mapping.c @@ -49,7 +49,7 @@ static void node_shader_exec_mapping(void *data, bNode *node, bNodeStack **in, b /* stack order input: vector */ /* stack order output: vector */ nodestack_get_vec(vec, SOCK_VECTOR, in[0]); - Mat4MulVecfl(texmap->mat, vec); + mul_m4_v3(texmap->mat, vec); if(texmap->flag & TEXMAP_CLIP_MIN) { if(vec[0]<texmap->min[0]) vec[0]= texmap->min[0]; diff --git a/source/blender/nodes/intern/SHD_nodes/SHD_material.c b/source/blender/nodes/intern/SHD_nodes/SHD_material.c index 69c2c0a345c..551958d190d 100644 --- a/source/blender/nodes/intern/SHD_nodes/SHD_material.c +++ b/source/blender/nodes/intern/SHD_nodes/SHD_material.c @@ -101,7 +101,7 @@ static void node_shader_exec_material(void *data, bNode *node, bNodeStack **in, /* retrieve normal */ if(in[MAT_IN_NORMAL]->hasinput) { nodestack_get_vec(shi->vn, SOCK_VECTOR, in[MAT_IN_NORMAL]); - Normalize(shi->vn); + normalize_v3(shi->vn); } else VECCOPY(shi->vn, shi->vno); @@ -138,7 +138,7 @@ static void node_shader_exec_material(void *data, bNode *node, bNodeStack **in, if(node->custom1 & SH_NODE_MAT_DIFF) { VECCOPY(col, shrnode.combined); if(!(node->custom1 & SH_NODE_MAT_SPEC)) { - VecSubf(col, col, shrnode.spec); + sub_v3_v3v3(col, col, shrnode.spec); } } else if(node->custom1 & SH_NODE_MAT_SPEC) { diff --git a/source/blender/nodes/intern/SHD_nodes/SHD_vectMath.c b/source/blender/nodes/intern/SHD_nodes/SHD_vectMath.c index 8a73a318f70..b377dbd2e03 100644 --- a/source/blender/nodes/intern/SHD_nodes/SHD_vectMath.c +++ b/source/blender/nodes/intern/SHD_nodes/SHD_vectMath.c @@ -70,7 +70,7 @@ static void node_shader_exec_vect_math(void *data, bNode *node, bNodeStack **in, out[0]->vec[1]= vec1[1] + vec2[1]; out[0]->vec[2]= vec1[2] + vec2[2]; - out[1]->vec[0] = Normalize( out[0]->vec ); + out[1]->vec[0] = normalize_v3( out[0]->vec ); } else if(node->custom1 == 3) { /* Dot product */ out[1]->vec[0]= (vec1[0] * vec2[0]) + (vec1[1] * vec2[1]) + (vec1[2] * vec2[2]); @@ -80,7 +80,7 @@ static void node_shader_exec_vect_math(void *data, bNode *node, bNodeStack **in, out[0]->vec[1]= (vec1[2] * vec2[0]) - (vec1[0] * vec2[2]); out[0]->vec[2]= (vec1[0] * vec2[1]) - (vec1[1] * vec2[0]); - out[1]->vec[0] = Normalize( out[0]->vec ); + out[1]->vec[0] = normalize_v3( out[0]->vec ); } else if(node->custom1 == 5) { /* Normalize */ if(in[0]->hasinput || !in[1]->hasinput) { /* This one only takes one input, so we've got to choose. */ @@ -94,7 +94,7 @@ static void node_shader_exec_vect_math(void *data, bNode *node, bNodeStack **in, out[0]->vec[2]= vec2[2]; } - out[1]->vec[0] = Normalize( out[0]->vec ); + out[1]->vec[0] = normalize_v3( out[0]->vec ); } } diff --git a/source/blender/nodes/intern/SHD_util.h b/source/blender/nodes/intern/SHD_util.h index a6fe5f4e9cc..76d5eb79490 100644 --- a/source/blender/nodes/intern/SHD_util.h +++ b/source/blender/nodes/intern/SHD_util.h @@ -58,7 +58,7 @@ #include "../SHD_node.h" #include "node_util.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_rand.h" #include "BLI_threads.h" diff --git a/source/blender/nodes/intern/TEX_nodes/TEX_distance.c b/source/blender/nodes/intern/TEX_nodes/TEX_distance.c index 297fc02939d..5355b3f0fff 100644 --- a/source/blender/nodes/intern/TEX_nodes/TEX_distance.c +++ b/source/blender/nodes/intern/TEX_nodes/TEX_distance.c @@ -27,7 +27,7 @@ */ #include <math.h> -#include "BLI_arithb.h" +#include "BLI_math.h" #include "../TEX_util.h" static bNodeSocketType inputs[]= { @@ -48,7 +48,7 @@ static void valuefn(float *out, TexParams *p, bNode *node, bNodeStack **in, shor tex_input_vec(coord1, in[0], p, thread); tex_input_vec(coord2, in[1], p, thread); - *out = VecLenf(coord2, coord1); + *out = len_v3v3(coord2, coord1); } static void exec(void *data, bNode *node, bNodeStack **in, bNodeStack **out) diff --git a/source/blender/nodes/intern/TEX_nodes/TEX_rotate.c b/source/blender/nodes/intern/TEX_nodes/TEX_rotate.c index 2184d32fcf2..1f550e32135 100644 --- a/source/blender/nodes/intern/TEX_nodes/TEX_rotate.c +++ b/source/blender/nodes/intern/TEX_nodes/TEX_rotate.c @@ -65,19 +65,19 @@ static void colorfn(float *out, TexParams *p, bNode *node, bNodeStack **in, shor if(magsq == 0) magsq = 1; - ndx = Inpf(coord, ax); + ndx = dot_v3v3(coord, ax); para[0] = ax[0] * ndx * (1 - cos_a); para[1] = ax[1] * ndx * (1 - cos_a); para[2] = ax[2] * ndx * (1 - cos_a); - VecSubf(perp, coord, para); + sub_v3_v3v3(perp, coord, para); perp[0] = coord[0] * cos_a; perp[1] = coord[1] * cos_a; perp[2] = coord[2] * cos_a; - Crossf(cp, ax, coord); + cross_v3_v3v3(cp, ax, coord); cp[0] = cp[0] * sin_a; cp[1] = cp[1] * sin_a; diff --git a/source/blender/nodes/intern/TEX_util.h b/source/blender/nodes/intern/TEX_util.h index 14e2773414a..e0bb907b0db 100644 --- a/source/blender/nodes/intern/TEX_util.h +++ b/source/blender/nodes/intern/TEX_util.h @@ -57,7 +57,7 @@ #include "../SHD_node.h" #include "node_util.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_rand.h" #include "BLI_threads.h" diff --git a/source/blender/python/BPY_extern.h b/source/blender/python/BPY_extern.h index acb45790ed2..e73dec097a3 100644 --- a/source/blender/python/BPY_extern.h +++ b/source/blender/python/BPY_extern.h @@ -49,6 +49,7 @@ struct bConstraintTarget; /* DNA_constraint_types.h*/ struct Script; /* DNA_screen_types.h */ struct BPyMenu; struct bContext; +struct bContextDataResult; struct ReportList; #ifdef __cplusplus @@ -104,7 +105,7 @@ extern "C" { // int BPY_run_script_space_listener(struct bContext *C, struct SpaceScript * sc, struct ARegion *ar, struct wmNotifier *wmn); // 2.5 working void BPY_update_modules( void ); // XXX - annoying, need this for pointers that get out of date - + int BPY_context_get(struct bContext *C, const char *member, struct bContextDataResult *result); int BPY_run_script(struct Script *script); void BPY_free_compiled_text( struct Text *text ); diff --git a/source/blender/python/generic/Geometry.c b/source/blender/python/generic/Geometry.c index f7b7ee866f0..a49b93adabd 100644 --- a/source/blender/python/generic/Geometry.c +++ b/source/blender/python/generic/Geometry.c @@ -30,7 +30,7 @@ #include "Geometry.h" /* - Not needed for now though other geometry functions will probably need them -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BKE_utildefines.h" */ @@ -42,7 +42,7 @@ #include "BKE_utildefines.h" #include "BKE_curve.h" #include "BLI_boxpack2d.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #define SWAP_FLOAT(a,b,tmp) tmp=a; a=b; b=tmp #define eul 0.000001 @@ -346,7 +346,7 @@ static PyObject *M_Geometry_ClosestPointOnLine( PyObject * self, PyObject * args else { l2[2]=0.0; VECCOPY2D(l2, line_2->vec) } /* do the calculation */ - lambda = lambda_cp_line_ex(pt_in, l1, l2, pt_out); + lambda = closest_to_line_v3( pt_out,pt_in, l1, l2); ret = PyTuple_New(2); PyTuple_SET_ITEM( ret, 0, newVectorObject(pt_out, 3, Py_NEW, NULL) ); @@ -371,7 +371,7 @@ static PyObject *M_Geometry_PointInTriangle2D( PyObject * self, PyObject * args if(!BaseMath_ReadCallback(pt_vec) || !BaseMath_ReadCallback(tri_p1) || !BaseMath_ReadCallback(tri_p2) || !BaseMath_ReadCallback(tri_p3)) return NULL; - return PyLong_FromLong(IsectPT2Df(pt_vec->vec, tri_p1->vec, tri_p2->vec, tri_p3->vec)); + return PyLong_FromLong(isect_point_tri_v2(pt_vec->vec, tri_p1->vec, tri_p2->vec, tri_p3->vec)); } static PyObject *M_Geometry_PointInQuad2D( PyObject * self, PyObject * args ) @@ -392,7 +392,7 @@ static PyObject *M_Geometry_PointInQuad2D( PyObject * self, PyObject * args ) if(!BaseMath_ReadCallback(pt_vec) || !BaseMath_ReadCallback(quad_p1) || !BaseMath_ReadCallback(quad_p2) || !BaseMath_ReadCallback(quad_p3) || !BaseMath_ReadCallback(quad_p4)) return NULL; - return PyLong_FromLong(IsectPQ2Df(pt_vec->vec, quad_p1->vec, quad_p2->vec, quad_p3->vec, quad_p4->vec)); + return PyLong_FromLong(isect_point_quad_v2(pt_vec->vec, quad_p1->vec, quad_p2->vec, quad_p3->vec, quad_p4->vec)); } static int boxPack_FromPyObject(PyObject * value, boxPack **boxarray ) diff --git a/source/blender/python/generic/Mathutils.c b/source/blender/python/generic/Mathutils.c index 431f1987383..b44d6450145 100644 --- a/source/blender/python/generic/Mathutils.c +++ b/source/blender/python/generic/Mathutils.c @@ -29,7 +29,7 @@ #include "Mathutils.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "PIL_time.h" #include "BLI_rand.h" #include "BKE_utildefines.h" @@ -437,7 +437,7 @@ static PyObject *M_Mathutils_RotationMatrix(PyObject * self, PyObject * args) mat[8] = 1.0f; } else if((strcmp(axis, "r") == 0) || (strcmp(axis, "R") == 0)) { //arbitrary rotation - AxisAngleToMat3(vec->vec, angle, (float (*)[3])mat); + axis_angle_to_mat3( (float (*)[3])mat,vec->vec, angle); } else { PyErr_SetString(PyExc_AttributeError, "Mathutils.RotationMatrix(): unrecognizable axis of rotation type - expected x,y,z or r\n"); @@ -477,7 +477,7 @@ static PyObject *M_Mathutils_TranslationMatrix(PyObject * self, VectorObject * v return NULL; //create a identity matrix and add translation - Mat4One((float(*)[4]) mat); + unit_m4((float(*)[4]) mat); mat[12] = vec->vec[0]; mat[13] = vec->vec[1]; mat[14] = vec->vec[2]; @@ -762,7 +762,7 @@ static PyObject *M_Mathutils_DifferenceQuats(PyObject * self, PyObject * args) for(x = 0; x < 4; x++) { tempQuat[x] /= (float)(dot * dot); } - QuatMul(quat, tempQuat, quatV->quat); + mul_qt_qtqt(quat, tempQuat, quatV->quat); return newQuaternionObject(quat, Py_NEW, NULL); } //----------------------------------Mathutils.Slerp() ------------------ @@ -853,19 +853,19 @@ static PyObject *M_Mathutils_Intersect( PyObject * self, PyObject * args ) VECCOPY(v3, vec3->vec); VECCOPY(dir, ray->vec); - Normalize(dir); + normalize_v3(dir); VECCOPY(orig, ray_off->vec); /* find vectors for two edges sharing v1 */ - VecSubf(e1, v2, v1); - VecSubf(e2, v3, v1); + sub_v3_v3v3(e1, v2, v1); + sub_v3_v3v3(e2, v3, v1); /* begin calculating determinant - also used to calculated U parameter */ - Crossf(pvec, dir, e2); + cross_v3_v3v3(pvec, dir, e2); /* if determinant is near zero, ray lies in plane of triangle */ - det = Inpf(e1, pvec); + det = dot_v3v3(e1, pvec); if (det > -0.000001 && det < 0.000001) { Py_RETURN_NONE; @@ -874,29 +874,29 @@ static PyObject *M_Mathutils_Intersect( PyObject * self, PyObject * args ) inv_det = 1.0f / det; /* calculate distance from v1 to ray origin */ - VecSubf(tvec, orig, v1); + sub_v3_v3v3(tvec, orig, v1); /* calculate U parameter and test bounds */ - u = Inpf(tvec, pvec) * inv_det; + u = dot_v3v3(tvec, pvec) * inv_det; if (clip && (u < 0.0f || u > 1.0f)) { Py_RETURN_NONE; } /* prepare to test the V parameter */ - Crossf(qvec, tvec, e1); + cross_v3_v3v3(qvec, tvec, e1); /* calculate V parameter and test bounds */ - v = Inpf(dir, qvec) * inv_det; + v = dot_v3v3(dir, qvec) * inv_det; if (clip && (v < 0.0f || u + v > 1.0f)) { Py_RETURN_NONE; } /* calculate t, ray intersects triangle */ - t = Inpf(e2, qvec) * inv_det; + t = dot_v3v3(e2, qvec) * inv_det; - VecMulf(dir, t); - VecAddf(pvec, orig, dir); + mul_v3_fl(dir, t); + add_v3_v3v3(pvec, orig, dir); return newVectorObject(pvec, 3, Py_NEW, NULL); } @@ -947,7 +947,7 @@ static PyObject *M_Mathutils_LineIntersect( PyObject * self, PyObject * args ) v4[2] = 0.0f; } - result = LineIntersectLine(v1, v2, v3, v4, i1, i2); + result = isect_line_line_v3(v1, v2, v3, v4, i1, i2); if (result == 0) { /* colinear */ @@ -1000,22 +1000,22 @@ static PyObject *M_Mathutils_QuadNormal( PyObject * self, PyObject * args ) VECCOPY(v4, vec4->vec); /* find vectors for two edges sharing v2 */ - VecSubf(e1, v1, v2); - VecSubf(e2, v3, v2); + sub_v3_v3v3(e1, v1, v2); + sub_v3_v3v3(e2, v3, v2); - Crossf(n1, e2, e1); - Normalize(n1); + cross_v3_v3v3(n1, e2, e1); + normalize_v3(n1); /* find vectors for two edges sharing v4 */ - VecSubf(e1, v3, v4); - VecSubf(e2, v1, v4); + sub_v3_v3v3(e1, v3, v4); + sub_v3_v3v3(e2, v1, v4); - Crossf(n2, e2, e1); - Normalize(n2); + cross_v3_v3v3(n2, e2, e1); + normalize_v3(n2); /* adding and averaging the normals of both triangles */ - VecAddf(n1, n2, n1); - Normalize(n1); + add_v3_v3v3(n1, n2, n1); + normalize_v3(n1); return newVectorObject(n1, 3, Py_NEW, NULL); } @@ -1047,11 +1047,11 @@ static PyObject *M_Mathutils_TriangleNormal( PyObject * self, PyObject * args ) VECCOPY(v3, vec3->vec); /* find vectors for two edges sharing v2 */ - VecSubf(e1, v1, v2); - VecSubf(e2, v3, v2); + sub_v3_v3v3(e1, v1, v2); + sub_v3_v3v3(e2, v3, v2); - Crossf(n, e2, e1); - Normalize(n); + cross_v3_v3v3(n, e2, e1); + normalize_v3(n); return newVectorObject(n, 3, Py_NEW, NULL); } @@ -1082,7 +1082,7 @@ static PyObject *M_Mathutils_TriangleArea( PyObject * self, PyObject * args ) VECCOPY(v2, vec2->vec); VECCOPY(v3, vec3->vec); - return PyFloat_FromDouble( AreaT3Dfl(v1, v2, v3) ); + return PyFloat_FromDouble( area_tri_v3(v1, v2, v3) ); } else if (vec1->size == 2) { v1[0] = vec1->vec[0]; @@ -1094,7 +1094,7 @@ static PyObject *M_Mathutils_TriangleArea( PyObject * self, PyObject * args ) v3[0] = vec3->vec[0]; v3[1] = vec3->vec[1]; - return PyFloat_FromDouble( AreaF2Dfl(v1, v2, v3) ); + return PyFloat_FromDouble( area_tri_v2(v1, v2, v3) ); } else { PyErr_SetString( PyExc_TypeError, "only 2D,3D vectors are supported\n" ); diff --git a/source/blender/python/generic/euler.c b/source/blender/python/generic/euler.c index 73fcaeb457b..f6f2e337211 100644 --- a/source/blender/python/generic/euler.c +++ b/source/blender/python/generic/euler.c @@ -28,7 +28,7 @@ #include "Mathutils.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BKE_utildefines.h" #include "BLI_blenlib.h" @@ -123,9 +123,9 @@ static PyObject *Euler_ToQuat(EulerObject * self) for(x = 0; x < 3; x++) { eul[x] = self->eul[x] * ((float)Py_PI / 180); } - EulToQuat(eul, quat); + eul_to_quat( quat,eul); #else - EulToQuat(self->eul, quat); + eul_to_quat( quat,self->eul); #endif return newQuaternionObject(quat, Py_NEW, NULL); @@ -147,10 +147,10 @@ static PyObject *Euler_ToMatrix(EulerObject * self) for(x = 0; x < 3; x++) { eul[x] = self->eul[x] * ((float)Py_PI / 180); } - EulToMat3(eul, (float (*)[3]) mat); + eul_to_mat3( (float (*)[3]) mat,eul); } #else - EulToMat3(self->eul, (float (*)[3]) mat); + eul_to_mat3( (float (*)[3]) mat,self->eul); #endif return newMatrixObject(mat, 3, 3 , Py_NEW, NULL); } @@ -261,7 +261,7 @@ static PyObject *Euler_Rotate(EulerObject * self, PyObject *args) } } #endif - euler_rot(self->eul, angle, *axis); + rotate_eul(self->eul, *axis, angle); #ifdef USE_MATHUTILS_DEG { diff --git a/source/blender/python/generic/matrix.c b/source/blender/python/generic/matrix.c index 16ae3501b93..a1ef4b53615 100644 --- a/source/blender/python/generic/matrix.c +++ b/source/blender/python/generic/matrix.c @@ -28,7 +28,7 @@ #include "Mathutils.h" #include "BKE_utildefines.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" static PyObject *column_vector_multiplication(MatrixObject * mat, VectorObject* vec); /* utility func */ @@ -229,9 +229,9 @@ static PyObject *Matrix_toQuat(MatrixObject * self) return NULL; } if(self->colSize == 3){ - Mat3ToQuat((float (*)[3])*self->matrix, quat); + mat3_to_quat( quat,(float (*)[3])*self->matrix); }else{ - Mat4ToQuat((float (*)[4])*self->matrix, quat); + mat4_to_quat( quat,(float (*)[4])*self->matrix); } return newQuaternionObject(quat, Py_NEW, NULL); @@ -266,14 +266,14 @@ PyObject *Matrix_toEuler(MatrixObject * self, PyObject *args) /*must be 3-4 cols, 3-4 rows, square matrix*/ if(self->colSize ==3 && self->rowSize ==3) { - if(eul_compat) Mat3ToCompatibleEul((float (*)[3])*self->matrix, eul, eul_compatf); - else Mat3ToEul((float (*)[3])*self->matrix, eul); + if(eul_compat) mat3_to_compatible_eul( eul, eul_compatf,(float (*)[3])*self->matrix); + else mat3_to_eul( eul,(float (*)[3])*self->matrix); }else if (self->colSize ==4 && self->rowSize ==4) { float tempmat3[3][3]; - Mat3CpyMat4(tempmat3, (float (*)[4])*self->matrix); - Mat3ToEul(tempmat3, eul); - if(eul_compat) Mat3ToCompatibleEul(tempmat3, eul, eul_compatf); - else Mat3ToEul(tempmat3, eul); + copy_m3_m4(tempmat3, (float (*)[4])*self->matrix); + mat3_to_eul( eul,tempmat3); + if(eul_compat) mat3_to_compatible_eul( eul, eul_compatf,tempmat3); + else mat3_to_eul( eul,tempmat3); }else { PyErr_SetString(PyExc_AttributeError, "Matrix.toEuler(): inappropriate matrix size - expects 3x3 or 4x4 matrix\n"); @@ -400,18 +400,18 @@ PyObject *Matrix_scalePart(MatrixObject * self) /*must be 3-4 cols, 3-4 rows, square matrix*/ if(self->colSize == 4 && self->rowSize == 4) - Mat3CpyMat4(mat, (float (*)[4])*self->matrix); + copy_m3_m4(mat, (float (*)[4])*self->matrix); else if(self->colSize == 3 && self->rowSize == 3) - Mat3CpyMat3(mat, (float (*)[3])*self->matrix); + copy_m3_m3(mat, (float (*)[3])*self->matrix); else { PyErr_SetString(PyExc_AttributeError, "Matrix.scalePart(): inappropriate matrix size - expects 3x3 or 4x4 matrix\n"); return NULL; } /* functionality copied from editobject.c apply_obmat */ - Mat3ToEul(mat, rot); - EulToMat3(rot, tmat); - Mat3Inv(imat, tmat); - Mat3MulMat3(tmat, imat, mat); + mat3_to_eul( rot,mat); + eul_to_mat3( tmat,rot); + invert_m3_m3(imat, tmat); + mul_m3_m3m3(tmat, imat, mat); scale[0]= tmat[0][0]; scale[1]= tmat[1][1]; @@ -449,9 +449,9 @@ PyObject *Matrix_Invert(MatrixObject * self) mat[2] = -self->matrix[1][0]; mat[3] = self->matrix[0][0]; } else if(self->rowSize == 3) { - Mat3Adj((float (*)[3]) mat,(float (*)[3]) *self->matrix); + adjoint_m3_m3((float (*)[3]) mat,(float (*)[3]) *self->matrix); } else if(self->rowSize == 4) { - Mat4Adj((float (*)[4]) mat, (float (*)[4]) *self->matrix); + adjoint_m4_m4((float (*)[4]) mat, (float (*)[4]) *self->matrix); } /*divide by determinate*/ for(x = 0; x < (self->rowSize * self->colSize); x++) { @@ -491,16 +491,16 @@ PyObject *Matrix_Determinant(MatrixObject * self) } if(self->rowSize == 2) { - det = Det2x2(self->matrix[0][0], self->matrix[0][1], + det = determinant_m2(self->matrix[0][0], self->matrix[0][1], self->matrix[1][0], self->matrix[1][1]); } else if(self->rowSize == 3) { - det = Det3x3(self->matrix[0][0], self->matrix[0][1], + det = determinant_m3(self->matrix[0][0], self->matrix[0][1], self->matrix[0][2], self->matrix[1][0], self->matrix[1][1], self->matrix[1][2], self->matrix[2][0], self->matrix[2][1], self->matrix[2][2]); } else { - det = Det4x4((float (*)[4]) *self->matrix); + det = determinant_m4((float (*)[4]) *self->matrix); } return PyFloat_FromDouble( (double) det ); @@ -523,9 +523,9 @@ PyObject *Matrix_Transpose(MatrixObject * self) self->matrix[1][0] = self->matrix[0][1]; self->matrix[0][1] = t; } else if(self->rowSize == 3) { - Mat3Transp((float (*)[3])*self->matrix); + transpose_m3((float (*)[3])*self->matrix); } else { - Mat4Transp((float (*)[4])*self->matrix); + transpose_m4((float (*)[4])*self->matrix); } BaseMath_WriteCallback(self); @@ -568,9 +568,9 @@ PyObject *Matrix_Identity(MatrixObject * self) self->matrix[1][0] = 0.0f; self->matrix[1][1] = 1.0f; } else if(self->rowSize == 3) { - Mat3One((float (*)[3]) *self->matrix); + unit_m3((float (*)[3]) *self->matrix); } else { - Mat4One((float (*)[4]) *self->matrix); + unit_m4((float (*)[4]) *self->matrix); } if(!BaseMath_WriteCallback(self)) diff --git a/source/blender/python/generic/quat.c b/source/blender/python/generic/quat.c index 7e12fe7925a..2ee78235224 100644 --- a/source/blender/python/generic/quat.c +++ b/source/blender/python/generic/quat.c @@ -28,7 +28,7 @@ #include "Mathutils.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BKE_utildefines.h" #include "BLI_blenlib.h" @@ -152,9 +152,9 @@ static PyObject *Quaternion_new(PyTypeObject *type, PyObject *args, PyObject *kw if(size == 3) //calculate the quat based on axis/angle #ifdef USE_MATHUTILS_DEG - AxisAngleToQuat(quat, quat, angle * (Py_PI / 180)); + axis_angle_to_quat(quat, quat, angle * (Py_PI / 180)); #else - AxisAngleToQuat(quat, quat, angle); + axis_angle_to_quat(quat, quat, angle); #endif return newQuaternionObject(quat, Py_NEW, NULL); @@ -180,7 +180,7 @@ static PyObject *Quaternion_ToEuler(QuaternionObject * self, PyObject *args) if(!BaseMath_ReadCallback(eul_compat)) return NULL; - QuatToMat3(self->quat, mat); + quat_to_mat3( mat,self->quat); #ifdef USE_MATHUTILS_DEG { @@ -190,14 +190,14 @@ static PyObject *Quaternion_ToEuler(QuaternionObject * self, PyObject *args) for(x = 0; x < 3; x++) { eul_compatf[x] = eul_compat->eul[x] * ((float)Py_PI / 180); } - Mat3ToCompatibleEul(mat, eul, eul_compatf); + mat3_to_compatible_eul( eul, eul_compatf,mat); } #else - Mat3ToCompatibleEul(mat, eul, eul_compat->eul); + mat3_to_compatible_eul( eul, eul_compat->eul,mat); #endif } else { - QuatToEul(self->quat, eul); + quat_to_eul( eul,self->quat); } #ifdef USE_MATHUTILS_DEG @@ -220,7 +220,7 @@ static PyObject *Quaternion_ToMatrix(QuaternionObject * self) if(!BaseMath_ReadCallback(self)) return NULL; - QuatToMat3(self->quat, (float (*)[3]) mat); + quat_to_mat3( (float (*)[3]) mat,self->quat); return newMatrixObject(mat, 3, 3, Py_NEW, NULL); } @@ -238,7 +238,7 @@ static PyObject *Quaternion_Cross(QuaternionObject * self, QuaternionObject * va if(!BaseMath_ReadCallback(self) || !BaseMath_ReadCallback(value)) return NULL; - QuatMul(quat, self->quat, value->quat); + mul_qt_qtqt(quat, self->quat, value->quat); return newQuaternionObject(quat, Py_NEW, NULL); } @@ -254,7 +254,7 @@ static PyObject *Quaternion_Dot(QuaternionObject * self, QuaternionObject * valu if(!BaseMath_ReadCallback(self) || !BaseMath_ReadCallback(value)) return NULL; - return PyFloat_FromDouble(QuatDot(self->quat, value->quat)); + return PyFloat_FromDouble(dot_qtqt(self->quat, value->quat)); } //----------------------------Quaternion.normalize()---------------- @@ -264,7 +264,7 @@ static PyObject *Quaternion_Normalize(QuaternionObject * self) if(!BaseMath_ReadCallback(self)) return NULL; - NormalQuat(self->quat); + normalize_qt(self->quat); BaseMath_WriteCallback(self); Py_INCREF(self); @@ -277,7 +277,7 @@ static PyObject *Quaternion_Inverse(QuaternionObject * self) if(!BaseMath_ReadCallback(self)) return NULL; - QuatInv(self->quat); + invert_qt(self->quat); BaseMath_WriteCallback(self); Py_INCREF(self); @@ -290,7 +290,7 @@ static PyObject *Quaternion_Identity(QuaternionObject * self) if(!BaseMath_ReadCallback(self)) return NULL; - QuatOne(self->quat); + unit_qt(self->quat); BaseMath_WriteCallback(self); Py_INCREF(self); @@ -303,7 +303,7 @@ static PyObject *Quaternion_Negate(QuaternionObject * self) if(!BaseMath_ReadCallback(self)) return NULL; - QuatMulf(self->quat, -1.0f); + mul_qt_fl(self->quat, -1.0f); BaseMath_WriteCallback(self); Py_INCREF(self); @@ -316,7 +316,7 @@ static PyObject *Quaternion_Conjugate(QuaternionObject * self) if(!BaseMath_ReadCallback(self)) return NULL; - QuatConj(self->quat); + conjugate_qt(self->quat); BaseMath_WriteCallback(self); Py_INCREF(self); @@ -525,7 +525,7 @@ static PyObject *Quaternion_add(PyObject * q1, PyObject * q2) if(!BaseMath_ReadCallback(quat1) || !BaseMath_ReadCallback(quat2)) return NULL; - QuatAdd(quat, quat1->quat, quat2->quat, 1.0f); + add_qt_qtqt(quat, quat1->quat, quat2->quat, 1.0f); return newQuaternionObject(quat, Py_NEW, NULL); } //------------------------obj - obj------------------------------ @@ -573,7 +573,7 @@ static PyObject *Quaternion_mul(PyObject * q1, PyObject * q2) } if(quat1 && quat2) { /* QUAT*QUAT (dot product) */ - return PyFloat_FromDouble(QuatDot(quat1->quat, quat2->quat)); + return PyFloat_FromDouble(dot_qtqt(quat1->quat, quat2->quat)); } /* the only case this can happen (for a supported type is "FLOAT*QUAT" ) */ @@ -581,7 +581,7 @@ static PyObject *Quaternion_mul(PyObject * q1, PyObject * q2) scalar= PyFloat_AsDouble(q1); if ((scalar == -1.0 && PyErr_Occurred())==0) { /* FLOAT*QUAT */ QUATCOPY(quat, quat2->quat); - QuatMulf(quat, scalar); + mul_qt_fl(quat, scalar); return newQuaternionObject(quat, Py_NEW, NULL); } PyErr_SetString(PyExc_TypeError, "Quaternion multiplication: val * quat, val is not an acceptable type"); @@ -600,7 +600,7 @@ static PyObject *Quaternion_mul(PyObject * q1, PyObject * q2) scalar= PyFloat_AsDouble(q2); if ((scalar == -1.0 && PyErr_Occurred())==0) { /* QUAT*FLOAT */ QUATCOPY(quat, quat1->quat); - QuatMulf(quat, scalar); + mul_qt_fl(quat, scalar); return newQuaternionObject(quat, Py_NEW, NULL); } } @@ -669,7 +669,7 @@ static int Quaternion_setAxis( QuaternionObject * self, PyObject * value, void * static PyObject *Quaternion_getMagnitude( QuaternionObject * self, void *type ) { - return PyFloat_FromDouble(sqrt(QuatDot(self->quat, self->quat))); + return PyFloat_FromDouble(sqrt(dot_qtqt(self->quat, self->quat))); } static PyObject *Quaternion_getAngle( QuaternionObject * self, void *type ) @@ -692,7 +692,7 @@ static PyObject *Quaternion_getAxisVec( QuaternionObject * self, void *type ) for(i = 0; i < 3; i++) vec[i] = (float)(self->quat[i + 1] / mag); - Normalize(vec); + normalize_v3(vec); //If the axis of rotation is 0,0,0 set it to 1,0,0 - for zero-degree rotations if( EXPP_FloatsAreEqual(vec[0], 0.0f, 10) && EXPP_FloatsAreEqual(vec[1], 0.0f, 10) && @@ -820,7 +820,7 @@ PyObject *newQuaternionObject(float *quat, int type, PyTypeObject *base_type) }else if (type == Py_NEW){ self->quat = PyMem_Malloc(4 * sizeof(float)); if(!quat) { //new empty - QuatOne(self->quat); + unit_qt(self->quat); }else{ QUATCOPY(self->quat, quat); } diff --git a/source/blender/python/generic/vector.c b/source/blender/python/generic/vector.c index 0ce7b83e653..8d1356f62f4 100644 --- a/source/blender/python/generic/vector.c +++ b/source/blender/python/generic/vector.c @@ -29,7 +29,7 @@ #include "BLI_blenlib.h" #include "BKE_utildefines.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #define MAX_DIMENSIONS 4 /* Swizzle axes get packed into a single value that is used as a closure. Each @@ -347,7 +347,7 @@ static PyObject *Vector_ToTrackQuat( VectorObject * self, PyObject * args ) vec[1] = -self->vec[1]; vec[2] = -self->vec[2]; - vectoquat(vec, track, up, quat); + vec_to_quat( quat,vec, track, up); return newQuaternionObject(quat, Py_NEW, NULL); } @@ -379,7 +379,7 @@ static PyObject *Vector_Reflect( VectorObject * self, VectorObject * value ) if (self->size > 2) vec[2] = self->vec[2]; else vec[2] = 0.0; - VecReflect(reflect, vec, mirror); + reflect_v3_v3v3(reflect, vec, mirror); return newVectorObject(reflect, self->size, Py_NEW, NULL); } @@ -402,7 +402,7 @@ static PyObject *Vector_Cross( VectorObject * self, VectorObject * value ) return NULL; vecCross = (VectorObject *)newVectorObject(NULL, 3, Py_NEW, NULL); - Crossf(vecCross->vec, self->vec, value->vec); + cross_v3_v3v3(vecCross->vec, self->vec, value->vec); return (PyObject *)vecCross; } diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c index ef3827d970e..27aa2744bfa 100644 --- a/source/blender/python/intern/bpy_interface.c +++ b/source/blender/python/intern/bpy_interface.c @@ -64,6 +64,7 @@ #include "BKE_fcurve.h" #include "BKE_text.h" #include "BKE_context.h" +#include "BKE_global.h" #include "BPY_extern.h" @@ -101,8 +102,6 @@ void bpy_context_set(bContext *C, PyGILState_STATE *gilstate) if(py_call_level==1) { - BPY_update_modules(); /* can give really bad results if this isnt here */ - if(C) { // XXX - should always be true. BPy_SetContext(C); bpy_import_main_set(CTX_data_main(C)); @@ -111,6 +110,8 @@ void bpy_context_set(bContext *C, PyGILState_STATE *gilstate) fprintf(stderr, "ERROR: Python context called with a NULL Context. this should not happen!\n"); } + BPY_update_modules(); /* can give really bad results if this isnt here */ + #ifdef TIME_PY_RUN if(bpy_timer_count==0) { /* record time from the beginning */ @@ -171,43 +172,58 @@ void BPY_free_compiled_text( struct Text *text ) /***************************************************************************** * Description: Creates the bpy module and adds it to sys.modules for importing *****************************************************************************/ +static BPy_StructRNA *bpy_context_module= NULL; /* for fast access */ static void bpy_init_modules( void ) { PyObject *mod; - mod = PyModule_New("bpy"); + /* Needs to be first since this dir is needed for future modules */ + char *modpath= BLI_gethome_folder("scripts/modules", BLI_GETHOME_ALL); + if(modpath) { + PyObject *sys_path= PySys_GetObject("path"); /* borrow */ + PyObject *py_modpath= PyUnicode_FromString(modpath); + PyList_Insert(sys_path, 0, py_modpath); /* add first */ + Py_DECREF(py_modpath); + } - PyModule_AddObject( mod, "data", BPY_rna_module() ); + mod = PyModule_New("bpy"); + + /* add the module so we can import it */ + PyDict_SetItemString(PySys_GetObject("modules"), "bpy", mod); + Py_DECREF(mod); + + /* run first, initializes rna types */ + BPY_rna_init(); + + PyModule_AddObject( mod, "types", BPY_rna_types() ); /* needs to be first so bpy_types can run */ + bpy_import_test("bpy_types"); + PyModule_AddObject( mod, "data", BPY_rna_module() ); /* imports bpy_types by running this */ + bpy_import_test("bpy_types"); /* PyModule_AddObject( mod, "doc", BPY_rna_doc() ); */ - PyModule_AddObject( mod, "types", BPY_rna_types() ); PyModule_AddObject( mod, "props", BPY_rna_props() ); PyModule_AddObject( mod, "__ops__", BPY_operator_module() ); /* ops is now a python module that does the conversion from SOME_OT_foo -> some.foo */ PyModule_AddObject( mod, "ui", BPY_ui_module() ); // XXX very experimental, consider this a test, especially PyCObject is not meant to be permanent - - /* add the module so we can import it */ - PyDict_SetItemString(PySys_GetObject("modules"), "bpy", mod); - Py_DECREF(mod); - /* add our own modules dir */ + + + /* bpy context */ { - char *modpath= BLI_gethome_folder("scripts/modules", BLI_GETHOME_ALL); - - if(modpath) { - PyObject *sys_path= PySys_GetObject("path"); /* borrow */ - PyObject *py_modpath= PyUnicode_FromString(modpath); - PyList_Insert(sys_path, 0, py_modpath); /* add first */ - Py_DECREF(py_modpath); - } - - bpy_import_test("bpy_ops"); /* adds its self to bpy.ops */ - bpy_import_test("bpy_utils"); /* adds its self to bpy.sys */ - bpy_import_test("bpy_ext"); /* extensions to our existing types */ + bpy_context_module= ( BPy_StructRNA * ) PyObject_NEW( BPy_StructRNA, &pyrna_struct_Type ); + RNA_pointer_create(NULL, &RNA_Context, NULL, &bpy_context_module->ptr); + + PyModule_AddObject(mod, "context", (PyObject *)bpy_context_module); } - + /* stand alone utility modules not related to blender directly */ Geometry_Init(); Mathutils_Init(); BGL_Init(); + + /* add our own modules dir */ + { + bpy_import_test("bpy_ops"); /* adds its self to bpy.ops */ + bpy_import_test("bpy_utils"); /* adds its self to bpy.sys */ + } } void BPY_update_modules( void ) @@ -220,7 +236,7 @@ void BPY_update_modules( void ) /* refreshes the main struct */ BPY_update_rna_module(); - + bpy_context_module->ptr.data= (void *)BPy_GetContext(); } /***************************************************************************** @@ -951,7 +967,7 @@ int BPY_button_eval(bContext *C, char *expr, double *value) -int bpy_context_get(bContext *C, const char *member, bContextDataResult *result) +int BPY_context_get(bContext *C, const char *member, bContextDataResult *result) { PyObject *pyctx= (PyObject *)CTX_py_dict_get(C); PyObject *item= PyDict_GetItemString(pyctx, member); @@ -1004,8 +1020,11 @@ int bpy_context_get(bContext *C, const char *member, bContextDataResult *result) } if(done==0) { - if (item) printf("Context '%s' not found\n", member); - else printf("Context '%s' not a valid type\n", member); + if (item) printf("Context '%s' not a valid type\n", member); + else printf("Context '%s' not found\n", member); + } + else if (G.f & G_DEBUG) { + printf("Context '%s' found\n", member); } return done; diff --git a/source/blender/python/intern/bpy_operator_wrap.c b/source/blender/python/intern/bpy_operator_wrap.c index b0754ee1cde..95ffd3e1121 100644 --- a/source/blender/python/intern/bpy_operator_wrap.c +++ b/source/blender/python/intern/bpy_operator_wrap.c @@ -178,8 +178,10 @@ static int PYTHON_OT_generic(int mode, bContext *C, wmOperatorType *ot, wmOperat } else if (BPY_flag_from_seq(pyop_ret_flags, ret, &ret_flag) == -1) { /* the returned value could not be converted into a flag */ - if(op) + if(op) { + fprintf(stderr, "error using return value from \"%s\"\n", op->idname); // for some reason the error raised doesnt include file:line... this helps BPy_errors_to_report(op->reports); + } ret_flag = OPERATOR_CANCELLED; } diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c index f96c2b49b92..76a1b860520 100644 --- a/source/blender/python/intern/bpy_rna.c +++ b/source/blender/python/intern/bpy_rna.c @@ -320,8 +320,11 @@ static void pyrna_struct_dealloc( BPy_StructRNA * self ) { if (self->freeptr && self->ptr.data) { IDP_FreeProperty(self->ptr.data); - MEM_freeN(self->ptr.data); - self->ptr.data= NULL; + if (self->ptr.type != &RNA_Context) + { + MEM_freeN(self->ptr.data); + self->ptr.data= NULL; + } } /* Note, for subclassed PyObjects we cant just call PyObject_DEL() directly or it will crash */ @@ -1346,7 +1349,7 @@ static PyObject *pyrna_struct_dir(BPy_StructRNA * self) } /* Hard coded names */ - { + if(self->ptr.id.data) { pystring = PyUnicode_FromString("id_data"); PyList_Append(ret, pystring); Py_DECREF(pystring); @@ -1364,16 +1367,6 @@ static PyObject *pyrna_struct_getattro( BPy_StructRNA * self, PyObject *pyname ) PropertyRNA *prop; FunctionRNA *func; - /* Include this incase this instance is a subtype of a python class - * In these instances we may want to return a function or variable provided by the subtype - * - * Also needed to return methods when its not a subtype - * */ - ret = PyObject_GenericGetAttr((PyObject *)self, pyname); - if (ret) return ret; - else PyErr_Clear(); - /* done with subtypes */ - if ((prop = RNA_struct_find_property(&self->ptr, name))) { ret = pyrna_prop_to_py(&self->ptr, prop); } @@ -1383,27 +1376,38 @@ static PyObject *pyrna_struct_getattro( BPy_StructRNA * self, PyObject *pyname ) else if (self->ptr.type == &RNA_Context) { PointerRNA newptr; ListBase newlb; + int done; - CTX_data_get(self->ptr.data, name, &newptr, &newlb); + done= CTX_data_get(self->ptr.data, name, &newptr, &newlb); - if (newptr.data) { - ret = pyrna_struct_CreatePyObject(&newptr); - } - else if (newlb.first) { - CollectionPointerLink *link; - PyObject *linkptr; + if(done==1) { /* found */ + if (newptr.data) { + ret = pyrna_struct_CreatePyObject(&newptr); + } + else if (newlb.first) { + CollectionPointerLink *link; + PyObject *linkptr; - ret = PyList_New(0); + ret = PyList_New(0); - for(link=newlb.first; link; link=link->next) { - linkptr= pyrna_struct_CreatePyObject(&link->ptr); - PyList_Append(ret, linkptr); - Py_DECREF(linkptr); + for(link=newlb.first; link; link=link->next) { + linkptr= pyrna_struct_CreatePyObject(&link->ptr); + PyList_Append(ret, linkptr); + Py_DECREF(linkptr); + } } + else { + ret = Py_None; + Py_INCREF(ret); + } + } + else if (done==-1) { /* found but not set */ + ret = Py_None; + Py_INCREF(ret); } - else { - ret = Py_None; - Py_INCREF(ret); + else { /* not found in the context */ + /* lookup the subclass. raise an error if its not found */ + ret = PyObject_GenericGetAttr((PyObject *)self, pyname); } BLI_freelistN(&newlb); @@ -1412,15 +1416,26 @@ static PyObject *pyrna_struct_getattro( BPy_StructRNA * self, PyObject *pyname ) if(self->ptr.id.data) { PointerRNA id_ptr; RNA_id_pointer_create((ID *)self->ptr.id.data, &id_ptr); - return pyrna_struct_CreatePyObject(&id_ptr); + ret = pyrna_struct_CreatePyObject(&id_ptr); } else { - Py_RETURN_NONE; + ret = Py_None; + Py_INCREF(ret); } } else { +#if 0 PyErr_Format( PyExc_AttributeError, "StructRNA - Attribute \"%.200s\" not found", name); ret = NULL; +#endif + /* Include this incase this instance is a subtype of a python class + * In these instances we may want to return a function or variable provided by the subtype + * + * Also needed to return methods when its not a subtype + * */ + + /* The error raised here will be displayed */ + ret = PyObject_GenericGetAttr((PyObject *)self, pyname); } return ret; @@ -2539,7 +2554,83 @@ PyObject *BPy_GetStructRNA(PyObject *self) } */ -PyObject* pyrna_srna_Subtype(StructRNA *srna) +static PyObject* pyrna_srna_Subtype(StructRNA *srna); + +/* return a borrowed reference */ +static PyObject* pyrna_srna_PyBase(StructRNA *srna) //, PyObject *bpy_types_dict) +{ + /* Assume RNA_struct_py_type_get(srna) was already checked */ + StructRNA *base; + + PyObject *py_base= NULL; + + /* get the base type */ + base= RNA_struct_base(srna); + + if(base && base != srna) { + /*/printf("debug subtype %s %p\n", RNA_struct_identifier(srna), srna); */ + py_base= pyrna_srna_Subtype(base); //, bpy_types_dict); + Py_DECREF(py_base); /* srna owns, this is only to pass as an arg */ + } + + if(py_base==NULL) { + py_base= (PyObject *)&pyrna_struct_Type; + } + + return py_base; +} + +/* check if we have a native python subclass, use it when it exists + * return a borrowed reference */ +static PyObject* pyrna_srna_ExternalType(StructRNA *srna) +{ + PyObject *bpy_types_dict= NULL; + const char *idname= RNA_struct_identifier(srna); + PyObject *newclass; + + if(bpy_types_dict==NULL) { + PyObject *bpy_types= PyImport_ImportModuleLevel("bpy_types", NULL, NULL, NULL, 0); + + if(bpy_types==NULL) { + PyErr_Print(); + PyErr_Clear(); + fprintf(stderr, "pyrna_srna_ExternalType: failed to find 'bpy_types' module\n"); + return NULL; + } + + bpy_types_dict = PyModule_GetDict(bpy_types); // borrow + Py_DECREF(bpy_types); // fairly safe to assume the dict is kept + } + + newclass= PyDict_GetItemString(bpy_types_dict, idname); + + /* sanity check, could skip this unless in debug mode */ + if(newclass) { + PyObject *base_compare= pyrna_srna_PyBase(srna); + PyObject *bases= PyObject_GetAttrString(newclass, "__bases__"); + + if(PyTuple_GET_SIZE(bases)) { + PyObject *base= PyTuple_GET_ITEM(bases, 0); + + if(base_compare != base) { + PyLineSpit(); + fprintf(stderr, "pyrna_srna_ExternalType: incorrect subclassing of SRNA '%s'\n", idname); + PyObSpit("Expected! ", base_compare); + newclass= NULL; + } + else { + if(G.f & G_DEBUG) + fprintf(stderr, "SRNA Subclassed: '%s'\n", idname); + } + } + + Py_DECREF(bases); + } + + return newclass; +} + +static PyObject* pyrna_srna_Subtype(StructRNA *srna) { PyObject *newclass = NULL; @@ -2547,6 +2638,9 @@ PyObject* pyrna_srna_Subtype(StructRNA *srna) newclass= NULL; /* Nothing to do */ } else if ((newclass= RNA_struct_py_type_get(srna))) { Py_INCREF(newclass); + } else if ((newclass= pyrna_srna_ExternalType(srna))) { + pyrna_subtype_set_rna(newclass, srna); + Py_INCREF(newclass); } else { /* subclass equivelents - class myClass(myBase): @@ -2555,27 +2649,13 @@ PyObject* pyrna_srna_Subtype(StructRNA *srna) */ /* Assume RNA_struct_py_type_get(srna) was alredy checked */ - StructRNA *base; - - PyObject *py_base= NULL; + PyObject *py_base= pyrna_srna_PyBase(srna); const char *idname= RNA_struct_identifier(srna); const char *descr= RNA_struct_ui_description(srna); if(!descr) descr= "(no docs)"; - /* get the base type */ - base= RNA_struct_base(srna); - if(base && base != srna) { - /*/printf("debug subtype %s %p\n", RNA_struct_identifier(srna), srna); */ - py_base= pyrna_srna_Subtype(base); - Py_DECREF(py_base); /* srna owns, this is only to pass as an arg */ - } - - if(py_base==NULL) { - py_base= (PyObject *)&pyrna_struct_Type; - } - /* always use O not N when calling, N causes refcount errors */ newclass = PyObject_CallFunction( (PyObject*)&PyType_Type, "s(O){ssss}", idname, py_base, "__module__","bpy.types", "__doc__",descr); /* newclass will now have 2 ref's, ???, probably 1 is internal since decrefing here segfaults */ @@ -2611,7 +2691,7 @@ static StructRNA *srna_from_ptr(PointerRNA *ptr) } /* always returns a new ref, be sure to decref when done */ -PyObject* pyrna_struct_Subtype(PointerRNA *ptr) +static PyObject* pyrna_struct_Subtype(PointerRNA *ptr) { return pyrna_srna_Subtype(srna_from_ptr(ptr)); } @@ -2670,23 +2750,26 @@ PyObject *pyrna_prop_CreatePyObject( PointerRNA *ptr, PropertyRNA *prop ) return ( PyObject * ) pyrna; } -/* bpy.data from python */ -static PointerRNA *rna_module_ptr= NULL; -PyObject *BPY_rna_module( void ) +void BPY_rna_init(void) { - BPy_StructRNA *pyrna; - PointerRNA ptr; - #ifdef USE_MATHUTILS // register mathutils callbacks, ok to run more then once. mathutils_rna_array_cb_index= Mathutils_RegisterCallback(&mathutils_rna_array_cb); mathutils_rna_matrix_cb_index= Mathutils_RegisterCallback(&mathutils_rna_matrix_cb); #endif - + if( PyType_Ready( &pyrna_struct_Type ) < 0 ) - return NULL; - + return; + if( PyType_Ready( &pyrna_prop_Type ) < 0 ) - return NULL; + return; +} + +/* bpy.data from python */ +static PointerRNA *rna_module_ptr= NULL; +PyObject *BPY_rna_module(void) +{ + BPy_StructRNA *pyrna; + PointerRNA ptr; /* for now, return the base RNA type rather then a real module */ RNA_main_pointer_create(G.main, &ptr); @@ -2724,21 +2807,22 @@ static PyObject *pyrna_basetype_getattro( BPy_BaseTypeRNA * self, PyObject *pyna PointerRNA newptr; PyObject *ret; - ret = PyObject_GenericGetAttr((PyObject *)self, pyname); - if (ret) return ret; - else PyErr_Clear(); - if (RNA_property_collection_lookup_string(&self->ptr, self->prop, _PyUnicode_AsString(pyname), &newptr)) { ret= pyrna_struct_Subtype(&newptr); if (ret==NULL) { PyErr_Format(PyExc_SystemError, "bpy.types.%.200s subtype could not be generated, this is a bug!", _PyUnicode_AsString(pyname)); } - return ret; } - else { /* Override the error */ + else { +#if 0 PyErr_Format(PyExc_AttributeError, "bpy.types.%.200s RNA_Struct does not exist", _PyUnicode_AsString(pyname)); return NULL; +#endif + /* The error raised here will be displayed */ + ret= PyObject_GenericGetAttr((PyObject *)self, pyname); } + + return ret; } static PyObject *pyrna_basetype_dir(BPy_BaseTypeRNA *self); diff --git a/source/blender/python/intern/bpy_rna.h b/source/blender/python/intern/bpy_rna.h index d480fd3ec9b..fe38ddb6bd9 100644 --- a/source/blender/python/intern/bpy_rna.h +++ b/source/blender/python/intern/bpy_rna.h @@ -64,6 +64,7 @@ typedef struct { /* cheap trick */ #define BPy_BaseTypeRNA BPy_PropertyRNA +void BPY_rna_init( void ); PyObject *BPY_rna_module( void ); void BPY_update_rna_module( void ); /*PyObject *BPY_rna_doc( void );*/ diff --git a/source/blender/python/intern/bpy_util.c b/source/blender/python/intern/bpy_util.c index 1766be62c83..174d1aa342f 100644 --- a/source/blender/python/intern/bpy_util.c +++ b/source/blender/python/intern/bpy_util.c @@ -69,7 +69,7 @@ static char *bpy_flag_error_str(BPY_flag_def *flagdef) BLI_dynstr_appendf(dynstr, fd!=flagdef?", '%s'":"'%s'", fd->name); fd++; } - + cstring = BLI_dynstr_get_cstring(dynstr); BLI_dynstr_free(dynstr); return cstring; @@ -162,12 +162,15 @@ void BPY_getFileAndNum(char **filename, int *lineno) getframe = PySys_GetObject("_getframe"); // borrowed if (getframe==NULL) { + PyErr_Clear(); return; } frame = PyObject_CallObject(getframe, NULL); - if (frame==NULL) + if (frame==NULL) { + PyErr_Clear(); return; + } if (filename) { co_filename= PyObject_GetAttrStringArgs(frame, 1, "f_code", "co_filename"); @@ -414,7 +417,10 @@ int BPy_errors_to_report(ReportList *reports) { PyObject *pystring; char *cstring; - + + char *filename; + int lineno; + if (!PyErr_Occurred()) return 1; @@ -432,10 +438,15 @@ int BPy_errors_to_report(ReportList *reports) return 0; } + BPY_getFileAndNum(&filename, &lineno); + cstring= _PyUnicode_AsString(pystring); - BKE_report(reports, RPT_ERROR, cstring); - fprintf(stderr, "%s\n", cstring); // not exactly needed. just for testing + BKE_reportf(reports, RPT_ERROR, "%s\nlocation:%s:%d\n", cstring, filename, lineno); + + fprintf(stderr, "%s\nlocation:%s:%d\n", cstring, filename, lineno); // not exactly needed. just for testing + Py_DECREF(pystring); return 1; } + diff --git a/source/blender/quicktime/apple/quicktime_export.c b/source/blender/quicktime/apple/quicktime_export.c index de8c4179132..a2727963032 100644 --- a/source/blender/quicktime/apple/quicktime_export.c +++ b/source/blender/quicktime/apple/quicktime_export.c @@ -317,7 +317,7 @@ static void QT_StartAddVideoSamplesToMedia (const Rect *trackFrame, int rectx, i k32ARGBPixelFormat, trackFrame, NULL, NULL, 0, - (unsigned char *)qtexport->ibuf->rect, + (Ptr)qtexport->ibuf->rect, rectx * 4 ); CheckError (err, "NewGWorldFromPtr error"); @@ -438,7 +438,7 @@ void makeqtstring (RenderData *rd, char *string) { } -void start_qt(struct RenderData *rd, int rectx, int recty) { +void start_qt(struct Scene *scene, struct RenderData *rd, int rectx, int recty) { OSErr err = noErr; char name[2048]; @@ -460,7 +460,7 @@ void start_qt(struct RenderData *rd, int rectx, int recty) { qtdata = MEM_callocN(sizeof(QuicktimeComponentData), "QuicktimeCodecDataExt"); - if(rd->qtcodecdata == NULL && rd->qtcodecdata->cdParms == NULL) { + if(rd->qtcodecdata == NULL || rd->qtcodecdata->cdParms == NULL) { get_qtcodec_settings(rd); } else { qtdata->theComponent = OpenDefaultComponent(StandardCompressionType, StandardCompressionSubType); @@ -484,7 +484,7 @@ void start_qt(struct RenderData *rd, int rectx, int recty) { /* do something? */ } close(myFile); - err = FSPathMakeRef(theFullPath, &myRef, 0); + err = FSPathMakeRef((const UInt8 *)theFullPath, &myRef, 0); CheckError(err, "FsPathMakeRef error"); err = FSGetCatalogInfo(&myRef, kFSCatInfoNone, NULL, NULL, &qtexport->theSpec, NULL); CheckError(err, "FsGetCatalogInfoRef error"); @@ -574,10 +574,13 @@ static void check_renderbutton_framerate(RenderData *rd) if( (rd->frs_sec == 24 || rd->frs_sec == 30 || rd->frs_sec == 60) && (qtdata->gTemporalSettings.frameRate == 1571553 || qtdata->gTemporalSettings.frameRate == 1964113 || - qtdata->gTemporalSettings.frameRate == 3928227)) {;} else - qtdata->gTemporalSettings.frameRate = - (rd->frs_sec << 16) / rd->frs_sec_base ; - + qtdata->gTemporalSettings.frameRate == 3928227)) {;} + else { + if (rd->frs_sec_base > 0) + qtdata->gTemporalSettings.frameRate = + (rd->frs_sec << 16) / rd->frs_sec_base ; + } + err = SCSetInfo(qtdata->theComponent, scTemporalSettingsType, &qtdata->gTemporalSettings); CheckError( err, "SCSetInfo error" ); @@ -634,7 +637,7 @@ int get_qtcodec_settings(RenderData *rd) check_renderbutton_framerate(rd); - // put up the dialog box + // put up the dialog box - it needs to be called from the main thread err = SCRequestSequenceSettings(qtdata->theComponent); if (err == scUserCancelled) { diff --git a/source/blender/quicktime/quicktime_export.h b/source/blender/quicktime/quicktime_export.h index b5c0dcff232..4afcebab7bd 100644 --- a/source/blender/quicktime/quicktime_export.h +++ b/source/blender/quicktime/quicktime_export.h @@ -36,7 +36,7 @@ // quicktime movie output functions struct RenderData; -void start_qt(struct RenderData *rd, int rectx, int recty); //for movie handle (BKE writeavi.c now) +void start_qt(struct Scene *scene, struct RenderData *rd, int rectx, int recty); //for movie handle (BKE writeavi.c now) void append_qt(struct RenderData *rd, int frame, int *pixels, int rectx, int recty); void end_qt(void); diff --git a/source/blender/render/CMakeLists.txt b/source/blender/render/CMakeLists.txt index 279ba7698b7..40f697c7776 100644 --- a/source/blender/render/CMakeLists.txt +++ b/source/blender/render/CMakeLists.txt @@ -47,6 +47,13 @@ IF(WITH_QUICKTIME) ADD_DEFINITIONS(-DWITH_QUICKTIME) ENDIF(WITH_QUICKTIME) +IF(APPLE) + IF(CMAKE_OSX_ARCHITECTURES MATCHES "i386" OR CMAKE_OSX_ARCHITECTURES MATCHES "x86_64") + SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -mfpmath=sse") + SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -mfpmath=sse") + ENDIF(CMAKE_OSX_ARCHITECTURES MATCHES "i386" OR CMAKE_OSX_ARCHITECTURES MATCHES "x86_64") +ENDIF(APPLE) + #TODO #if env['OURPLATFORM']=='linux2': # cflags='-pthread' diff --git a/source/blender/render/SConscript b/source/blender/render/SConscript index f89e81708b4..795e7247597 100644 --- a/source/blender/render/SConscript +++ b/source/blender/render/SConscript @@ -5,9 +5,14 @@ if env['OURPLATFORM'] in ('win32-vc', 'win64-vc', 'win32-mingw'): # FIXME: need to set the appropriate flags for msvc, otherwise we get warnings cflags = [] cxxflags = [] -else: - cflags = ['-O2','-msse2','-mfpmath=sse'] - cxxflags = ['-O2','-msse2','-mfpmath=sse'] + +if env['OURPLATFORM'] == 'darwin': + if env['MACOSX_ARCHITECTURE'] in ('i386', 'x86_64'): + cflags = env['CFLAGS'] + ['-mfpmath=sse'] + cxxflags = env['CXXFLAGS'] + ['-mfpmath=sse'] + else: + cflags = env['CFLAGS'] + cxxflags = env['CXXFLAGS'] sources = env.Glob('intern/source/*.c') raysources = env.Glob('intern/raytrace/*.cpp') @@ -25,12 +30,9 @@ if env['WITH_BF_QUICKTIME']: if env['WITH_BF_OPENEXR']: defs.append('WITH_OPENEXR') -if env['OURPLATFORM']=='linux2': - cflags += ['-pthread'] - - if env['OURPLATFORM'] == 'linux2': - cflags='-pthread' + cflags = ['-O2','-msse2','-mfpmath=sse', '-pthread'] + cxxflags = ['-O2','-msse2','-mfpmath=sse', '-pthread'] incs += ' ../../../extern/binreloc/include' if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'): diff --git a/source/blender/render/intern/raytrace/rayobject.cpp b/source/blender/render/intern/raytrace/rayobject.cpp index 8aff7a38317..869405e0fbc 100644 --- a/source/blender/render/intern/raytrace/rayobject.cpp +++ b/source/blender/render/intern/raytrace/rayobject.cpp @@ -29,7 +29,7 @@ #include <assert.h> #include "BKE_utildefines.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "DNA_material_types.h" #include "RE_raytrace.h" @@ -170,8 +170,8 @@ static inline int rayface_check_cullface(RayFace *face, Isect *is) float nor[3]; /* don't intersect if the ray faces along the face normal */ - if(face->quad) CalcNormFloat4(face->v1, face->v2, face->v3, face->v4, nor); - else CalcNormFloat(face->v1, face->v2, face->v3, nor); + if(face->quad) normal_quad_v3( nor,face->v1, face->v2, face->v3, face->v4); + else normal_tri_v3( nor,face->v1, face->v2, face->v3); return (INPR(nor, is->vec) < 0); } @@ -376,7 +376,7 @@ int RE_rayobject_raycast(RayObject *r, Isect *isec) RE_RC_COUNT(isec->raycounter->raycast.test); /* Setup vars used on raycast */ - isec->dist = VecLength(isec->vec); + isec->dist = len_v3(isec->vec); for(i=0; i<3; i++) { @@ -435,11 +435,11 @@ int RE_rayobject_intersect(RayObject *r, Isect *i) if(face->ob->transform_primitives) { - Mat4MulVecfl(face->ob->mat, nface.v1); - Mat4MulVecfl(face->ob->mat, nface.v2); - Mat4MulVecfl(face->ob->mat, nface.v3); + mul_m4_v3(face->ob->mat, nface.v1); + mul_m4_v3(face->ob->mat, nface.v2); + mul_m4_v3(face->ob->mat, nface.v3); if(RE_rayface_isQuad(&nface)) - Mat4MulVecfl(face->ob->mat, nface.v4); + mul_m4_v3(face->ob->mat, nface.v4); } return intersect_rayface(r, &nface, i); diff --git a/source/blender/render/intern/raytrace/rayobject_rtbuild.cpp b/source/blender/render/intern/raytrace/rayobject_rtbuild.cpp index a16499d4f91..09026929829 100644 --- a/source/blender/render/intern/raytrace/rayobject_rtbuild.cpp +++ b/source/blender/render/intern/raytrace/rayobject_rtbuild.cpp @@ -33,7 +33,7 @@ #include "rayobject_rtbuild.h" #include "MEM_guardedalloc.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BKE_utildefines.h" static bool selected_node(RTBuilder::Object *node) diff --git a/source/blender/render/intern/raytrace/rayobject_vbvh.cpp b/source/blender/render/intern/raytrace/rayobject_vbvh.cpp index 11f04c04141..4a2a56fa8ef 100644 --- a/source/blender/render/intern/raytrace/rayobject_vbvh.cpp +++ b/source/blender/render/intern/raytrace/rayobject_vbvh.cpp @@ -38,7 +38,7 @@ int tot_hints = 0; #include "BLI_memarena.h" #include "MEM_guardedalloc.h" #include "BKE_utildefines.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "reorganize.h" #include "bvh.h" diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c index cb8970a356f..d09c6a48ef3 100644 --- a/source/blender/render/intern/source/convertblender.c +++ b/source/blender/render/intern/source/convertblender.c @@ -35,7 +35,7 @@ #include "MEM_guardedalloc.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_rand.h" #include "BLI_memarena.h" @@ -191,8 +191,8 @@ void RE_make_stars(Render *re, Scene *scenev3d, void (*initfunc)(void), if (re) re->flag |= R_HALO; else stargrid *= 1.0; /* then it draws fewer */ - if(re) Mat4Invert(mat, re->viewmat); - else Mat4One(mat); + if(re) invert_m4_m4(mat, re->viewmat); + else unit_m4(mat); /* BOUNDING BOX CALCULATION * bbox goes from z = loc_near_var | loc_far_var, @@ -240,7 +240,7 @@ void RE_make_stars(Render *re, Scene *scenev3d, void (*initfunc)(void), done++; } else { - Mat4MulVecfl(re->viewmat, vec); + mul_m4_v3(re->viewmat, vec); /* in vec are global coordinates * calculate distance to camera @@ -372,7 +372,7 @@ static int check_vnormal(float *n, float *veno) static void calc_edge_stress_add(float *accum, VertRen *v1, VertRen *v2) { - float len= VecLenf(v1->co, v2->co)/VecLenf(v1->orco, v2->orco); + float len= len_v3v3(v1->co, v2->co)/len_v3v3(v1->orco, v2->orco); float *acc; acc= accum + 2*v1->index; @@ -459,11 +459,11 @@ static void calc_tangent_vector(ObjectRen *obr, VertexTangent **vtangents, MemAr } else if(v1->orco) { uv1= uv[0]; uv2= uv[1]; uv3= uv[2]; uv4= uv[3]; - spheremap(v1->orco[0], v1->orco[1], v1->orco[2], &uv[0][0], &uv[0][1]); - spheremap(v2->orco[0], v2->orco[1], v2->orco[2], &uv[1][0], &uv[1][1]); - spheremap(v3->orco[0], v3->orco[1], v3->orco[2], &uv[2][0], &uv[2][1]); + map_to_sphere( &uv[0][0], &uv[0][1],v1->orco[0], v1->orco[1], v1->orco[2]); + map_to_sphere( &uv[1][0], &uv[1][1],v2->orco[0], v2->orco[1], v2->orco[2]); + map_to_sphere( &uv[2][0], &uv[2][1],v3->orco[0], v3->orco[1], v3->orco[2]); if(v4) - spheremap(v4->orco[0], v4->orco[1], v4->orco[2], &uv[3][0], &uv[3][1]); + map_to_sphere( &uv[3][0], &uv[3][1],v4->orco[0], v4->orco[1], v4->orco[2]); } else return; @@ -539,23 +539,23 @@ static void calc_vertexnormals(Render *re, ObjectRen *obr, int do_tangent, int d if(re->flag & R_GLOB_NOPUNOFLIP) vlr->flag |= R_NOPUNOFLIP; - VecSubf(n1, v2->co, v1->co); - Normalize(n1); - VecSubf(n2, v3->co, v2->co); - Normalize(n2); + sub_v3_v3v3(n1, v2->co, v1->co); + normalize_v3(n1); + sub_v3_v3v3(n2, v3->co, v2->co); + normalize_v3(n2); if(v4==NULL) { - VecSubf(n3, v1->co, v3->co); - Normalize(n3); + sub_v3_v3v3(n3, v1->co, v3->co); + normalize_v3(n3); fac1= saacos(-n1[0]*n3[0]-n1[1]*n3[1]-n1[2]*n3[2]); fac2= saacos(-n1[0]*n2[0]-n1[1]*n2[1]-n1[2]*n2[2]); fac3= saacos(-n2[0]*n3[0]-n2[1]*n3[1]-n2[2]*n3[2]); } else { - VecSubf(n3, v4->co, v3->co); - Normalize(n3); - VecSubf(n4, v1->co, v4->co); - Normalize(n4); + sub_v3_v3v3(n3, v4->co, v3->co); + normalize_v3(n3); + sub_v3_v3v3(n4, v1->co, v4->co); + normalize_v3(n4); fac1= saacos(-n4[0]*n1[0]-n4[1]*n1[1]-n4[2]*n1[2]); fac2= saacos(-n1[0]*n2[0]-n1[1]*n2[1]-n1[2]*n2[2]); @@ -622,17 +622,17 @@ static void calc_vertexnormals(Render *re, ObjectRen *obr, int do_tangent, int d vtang= find_vertex_tangent(vtangents[v1->index], tface->uv[0]); VECCOPY(ftang, vtang); - Normalize(ftang); + normalize_v3(ftang); vtang= find_vertex_tangent(vtangents[v2->index], tface->uv[1]); VECCOPY(ftang+3, vtang); - Normalize(ftang+3); + normalize_v3(ftang+3); vtang= find_vertex_tangent(vtangents[v3->index], tface->uv[2]); VECCOPY(ftang+6, vtang); - Normalize(ftang+6); + normalize_v3(ftang+6); if(v4) { vtang= find_vertex_tangent(vtangents[v4->index], tface->uv[3]); VECCOPY(ftang+9, vtang); - Normalize(ftang+9); + normalize_v3(ftang+9); } } } @@ -641,7 +641,7 @@ static void calc_vertexnormals(Render *re, ObjectRen *obr, int do_tangent, int d /* normalize vertex normals */ for(a=0; a<obr->totvert; a++) { VertRen *ver= RE_findOrAddVert(obr, a); - Normalize(ver->n); + normalize_v3(ver->n); if(do_tangent) { float *tav= RE_vertren_get_tangent(obr, ver, 0); if (tav) { @@ -650,7 +650,7 @@ static void calc_vertexnormals(Render *re, ObjectRen *obr, int do_tangent, int d tav[0] -= ver->n[0]*tdn; tav[1] -= ver->n[1]*tdn; tav[2] -= ver->n[2]*tdn; - Normalize(tav); + normalize_v3(tav); } } } @@ -829,7 +829,7 @@ static void autosmooth(Render *re, ObjectRen *obr, float mat[][4], int degr) /* rotate vertices and calculate normal of faces */ for(a=0; a<obr->totvert; a++) { ver= RE_findOrAddVert(obr, a); - Mat4MulVecfl(mat, ver->co); + mul_m4_v3(mat, ver->co); } for(a=0; a<obr->totvlak; a++) { vlr= RE_findOrAddVlak(obr, a); @@ -837,9 +837,9 @@ static void autosmooth(Render *re, ObjectRen *obr, float mat[][4], int degr) /* skip wire faces */ if(vlr->v2 != vlr->v3) { if(vlr->v4) - CalcNormFloat4(vlr->v4->co, vlr->v3->co, vlr->v2->co, vlr->v1->co, vlr->n); + normal_quad_v3( vlr->n,vlr->v4->co, vlr->v3->co, vlr->v2->co, vlr->v1->co); else - CalcNormFloat(vlr->v3->co, vlr->v2->co, vlr->v1->co, vlr->n); + normal_tri_v3( vlr->n,vlr->v3->co, vlr->v2->co, vlr->v1->co); } } } @@ -982,9 +982,9 @@ static void static_particle_strand(Render *re, ObjectRen *obr, Material *ma, Par int flag, i; static int second=0; - VecSubf(nor, vec, vec1); - Normalize(nor); // nor needed as tangent - Crossf(cross, vec, nor); + sub_v3_v3v3(nor, vec, vec1); + normalize_v3(nor); // nor needed as tangent + cross_v3_v3v3(cross, vec, nor); /* turn cross in pixelsize */ w= vec[2]*re->winmat[2][3] + re->winmat[3][3]; @@ -1006,19 +1006,19 @@ static void static_particle_strand(Render *re, ObjectRen *obr, Material *ma, Par /* use actual Blender units for strand width and fall back to minimum width */ if(ma->mode & MA_STR_B_UNITS){ - crosslen= VecLength(cross); + crosslen= len_v3(cross); w= 2.0f*crosslen*ma->strand_min/w; if(width < w) width= w; /*cross is the radius of the strand so we want it to be half of full width */ - VecMulf(cross,0.5/crosslen); + mul_v3_fl(cross,0.5/crosslen); } else width/=w; - VecMulf(cross, width); + mul_v3_fl(cross, width); } else width= 1.0f; @@ -1041,30 +1041,30 @@ static void static_particle_strand(Render *re, ObjectRen *obr, Material *ma, Par vlr->v4= RE_findOrAddVert(obr, obr->totvert++); VECCOPY(vlr->v1->co, vec); - VecAddf(vlr->v1->co, vlr->v1->co, cross); + add_v3_v3v3(vlr->v1->co, vlr->v1->co, cross); VECCOPY(vlr->v1->n, nor); vlr->v1->orco= sd->orco; vlr->v1->accum= -1.0f; // accum abuse for strand texco VECCOPY(vlr->v2->co, vec); - VecSubf(vlr->v2->co, vlr->v2->co, cross); + sub_v3_v3v3(vlr->v2->co, vlr->v2->co, cross); VECCOPY(vlr->v2->n, nor); vlr->v2->orco= sd->orco; vlr->v2->accum= vlr->v1->accum; VECCOPY(vlr->v4->co, vec1); - VecAddf(vlr->v4->co, vlr->v4->co, cross); + add_v3_v3v3(vlr->v4->co, vlr->v4->co, cross); VECCOPY(vlr->v4->n, nor); vlr->v4->orco= sd->orco; vlr->v4->accum= 1.0f; // accum abuse for strand texco VECCOPY(vlr->v3->co, vec1); - VecSubf(vlr->v3->co, vlr->v3->co, cross); + sub_v3_v3v3(vlr->v3->co, vlr->v3->co, cross); VECCOPY(vlr->v3->n, nor); vlr->v3->orco= sd->orco; vlr->v3->accum= vlr->v4->accum; - CalcNormFloat4(vlr->v4->co, vlr->v3->co, vlr->v2->co, vlr->v1->co, vlr->n); + normal_quad_v3( vlr->n,vlr->v4->co, vlr->v3->co, vlr->v2->co, vlr->v1->co); vlr->mat= ma; vlr->ec= ME_V2V3; @@ -1115,13 +1115,13 @@ static void static_particle_strand(Render *re, ObjectRen *obr, Material *ma, Par v2= RE_findOrAddVert(obr, obr->totvert++); VECCOPY(v1->co, vec); - VecAddf(v1->co, v1->co, cross); + add_v3_v3v3(v1->co, v1->co, cross); VECCOPY(v1->n, nor); v1->orco= sd->orco; v1->accum= -1.0f; // accum abuse for strand texco VECCOPY(v2->co, vec); - VecSubf(v2->co, v2->co, cross); + sub_v3_v3v3(v2->co, v2->co, cross); VECCOPY(v2->n, nor); v2->orco= sd->orco; v2->accum= v1->accum; @@ -1149,15 +1149,15 @@ static void static_particle_strand(Render *re, ObjectRen *obr, Material *ma, Par } else if(sd->adapt){ float dvec[3],pvec[3]; - VecSubf(dvec,avec,vec); - Projf(pvec,dvec,vec); - VecSubf(dvec,dvec,pvec); + sub_v3_v3v3(dvec,avec,vec); + project_v3_v3v3(pvec,dvec,vec); + sub_v3_v3v3(dvec,dvec,pvec); w= vec[2]*re->winmat[2][3] + re->winmat[3][3]; dx= re->winx*dvec[0]*re->winmat[0][0]/w; dy= re->winy*dvec[1]*re->winmat[1][1]/w; w= sqrt(dx*dx + dy*dy); - if(Inpf(anor,nor)<sd->adapt_angle && w>sd->adapt_pix){ + if(dot_v3v3(anor,nor)<sd->adapt_angle && w>sd->adapt_pix){ vlr= RE_findOrAddVlak(obr, obr->totvlak++); vlr->flag= flag; vlr->v1= v1; @@ -1177,18 +1177,18 @@ static void static_particle_strand(Render *re, ObjectRen *obr, Material *ma, Par } VECCOPY(vlr->v4->co, vec); - VecAddf(vlr->v4->co, vlr->v4->co, cross); + add_v3_v3v3(vlr->v4->co, vlr->v4->co, cross); VECCOPY(vlr->v4->n, nor); vlr->v4->orco= sd->orco; vlr->v4->accum= -1.0f + 2.0f*sd->time; // accum abuse for strand texco VECCOPY(vlr->v3->co, vec); - VecSubf(vlr->v3->co, vlr->v3->co, cross); + sub_v3_v3v3(vlr->v3->co, vlr->v3->co, cross); VECCOPY(vlr->v3->n, nor); vlr->v3->orco= sd->orco; vlr->v3->accum= vlr->v4->accum; - CalcNormFloat4(vlr->v4->co, vlr->v3->co, vlr->v2->co, vlr->v1->co, vlr->n); + normal_quad_v3( vlr->n,vlr->v4->co, vlr->v3->co, vlr->v2->co, vlr->v1->co); vlr->mat= ma; vlr->ec= ME_V2V3; @@ -1244,8 +1244,8 @@ static void static_particle_wire(ObjectRen *obr, Material *ma, float *vec, float VECCOPY(vlr->v1->co, vec); VECCOPY(vlr->v2->co, vec1); - VecSubf(vlr->n, vec, vec1); - Normalize(vlr->n); + sub_v3_v3v3(vlr->n, vec, vec1); + normalize_v3(vlr->n); VECCOPY(vlr->v1->n, vlr->n); VECCOPY(vlr->v2->n, vlr->n); @@ -1267,8 +1267,8 @@ static void static_particle_wire(ObjectRen *obr, Material *ma, float *vec, float v1= vlr->v2; // cycle VECCOPY(v1->co, vec); - VecSubf(vlr->n, vec, vec1); - Normalize(vlr->n); + sub_v3_v3v3(vlr->n, vec, vec1); + normalize_v3(vlr->n); VECCOPY(v1->n, vlr->n); vlr->mat= ma; @@ -1307,21 +1307,21 @@ static void particle_billboard(Render *re, ObjectRen *obr, Material *ma, Particl VECADD(vlr->v1->co, bb_center, xvec); VECADD(vlr->v1->co, vlr->v1->co, yvec); - Mat4MulVecfl(re->viewmat, vlr->v1->co); + mul_m4_v3(re->viewmat, vlr->v1->co); VECSUB(vlr->v2->co, bb_center, xvec); VECADD(vlr->v2->co, vlr->v2->co, yvec); - Mat4MulVecfl(re->viewmat, vlr->v2->co); + mul_m4_v3(re->viewmat, vlr->v2->co); VECSUB(vlr->v3->co, bb_center, xvec); VECSUB(vlr->v3->co, vlr->v3->co, yvec); - Mat4MulVecfl(re->viewmat, vlr->v3->co); + mul_m4_v3(re->viewmat, vlr->v3->co); VECADD(vlr->v4->co, bb_center, xvec); VECSUB(vlr->v4->co, vlr->v4->co, yvec); - Mat4MulVecfl(re->viewmat, vlr->v4->co); + mul_m4_v3(re->viewmat, vlr->v4->co); - CalcNormFloat4(vlr->v4->co, vlr->v3->co, vlr->v2->co, vlr->v1->co, vlr->n); + normal_quad_v3( vlr->n,vlr->v4->co, vlr->v3->co, vlr->v2->co, vlr->v1->co); VECCOPY(vlr->v1->n,vlr->n); VECCOPY(vlr->v2->n,vlr->n); VECCOPY(vlr->v3->n,vlr->n); @@ -1352,10 +1352,10 @@ static void particle_billboard(Render *re, ObjectRen *obr, Material *ma, Particl axis2[(bb->align + 2) % 3] = 1.0f; if(bb->lock == 0) { zvec[bb->align] = 0.0f; - Normalize(zvec); + normalize_v3(zvec); } - time = saacos(Inpf(zvec, axis1)) / (float)M_PI; - if(Inpf(zvec, axis2) < 0.0f) + time = saacos(dot_v3v3(zvec, axis1)) / (float)M_PI; + if(dot_v3v3(zvec, axis2) < 0.0f) time = 1.0f - time / 2.0f; else time = time / 2.0f; @@ -1419,7 +1419,7 @@ static void particle_normal_ren(short ren_as, ParticleSettings *part, Render *re VECCOPY(loc, state->co); if(ren_as != PART_DRAW_BB) - Mat4MulVecfl(re->viewmat, loc); + mul_m4_v3(re->viewmat, loc); switch(ren_as) { case PART_DRAW_LINE: @@ -1428,11 +1428,11 @@ static void particle_normal_ren(short ren_as, ParticleSettings *part, Render *re sd->size = hasize; VECCOPY(vel, state->vel); - Mat4Mul3Vecfl(re->viewmat, vel); - Normalize(vel); + mul_mat3_m4_v3(re->viewmat, vel); + normalize_v3(vel); if(part->draw & PART_DRAW_VEL_LENGTH) - VecMulf(vel, VecLength(state->vel)); + mul_v3_fl(vel, len_v3(state->vel)); VECADDFAC(loc0, loc, vel, -part->draw_line[0]); VECADDFAC(loc1, loc, vel, part->draw_line[1]); @@ -1651,10 +1651,10 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem // } /* 2.5 setup matrices */ - Mat4MulMat4(mat, ob->obmat, re->viewmat); - Mat4Invert(ob->imat, mat); /* need to be that way, for imat texture */ - Mat3CpyMat4(nmat, ob->imat); - Mat3Transp(nmat); + mul_m4_m4m4(mat, ob->obmat, re->viewmat); + invert_m4_m4(ob->imat, mat); /* need to be that way, for imat texture */ + copy_m3_m4(nmat, ob->imat); + transpose_m3(nmat); /* 2.6 setup strand rendering */ if(part->ren_as == PART_DRAW_PATH && psys->pathcache){ @@ -1677,7 +1677,7 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem strandbuf= RE_addStrandBuffer(obr, (totpart+totchild)*(path_nbr+1)); strandbuf->ma= ma; strandbuf->lay= ob->lay; - Mat4CpyMat4(strandbuf->winmat, re->winmat); + copy_m4_m4(strandbuf->winmat, re->winmat); strandbuf->winx= re->winx; strandbuf->winy= re->winy; strandbuf->maxdepth= 2; @@ -1865,7 +1865,7 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem /* surface normal shading setup */ if(ma->mode_l & MA_STR_SURFDIFF) { - Mat3MulVecfl(nmat, nor); + mul_m3_v3(nmat, nor); sd.surfnor= nor; } else @@ -1920,7 +1920,7 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem curlen= 0.0f; for(k=1; k<=path_nbr; k++) if(k<=max_k) - strandlen += VecLenf((cache+k-1)->co, (cache+k)->co); + strandlen += len_v3v3((cache+k-1)->co, (cache+k)->co); } if(path_nbr) { @@ -1934,11 +1934,11 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem continue; if(k > 0) - curlen += VecLenf((cache+k-1)->co, (cache+k)->co); + curlen += len_v3v3((cache+k-1)->co, (cache+k)->co); time= curlen/strandlen; VECCOPY(loc,state.co); - Mat4MulVecfl(re->viewmat,loc); + mul_m4_v3(re->viewmat,loc); if(strandbuf) { VECCOPY(svert->co, loc); @@ -1989,7 +1989,7 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem psys_get_particle_on_path(&sim,a,&state,1); if(psys->parent) - Mat4MulVecfl(psys->parent->obmat, state.co); + mul_m4_v3(psys->parent->obmat, state.co); if(part->ren_as == PART_DRAW_BB) { bb.random = random; @@ -2009,7 +2009,7 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem continue; if(psys->parent) - Mat4MulVecfl(psys->parent->obmat, state.co); + mul_m4_v3(psys->parent->obmat, state.co); if(part->ren_as == PART_DRAW_BB) { bb.random = random; @@ -2080,8 +2080,8 @@ static void make_render_halos(Render *re, ObjectRen *obr, Mesh *me, int totvert, float vec[3], hasize, mat[4][4], imat[3][3]; int a, ok, seed= ma->seed1; - Mat4MulMat4(mat, ob->obmat, re->viewmat); - Mat3CpyMat4(imat, ob->imat); + mul_m4_m4m4(mat, ob->obmat, re->viewmat); + copy_m3_m4(imat, ob->imat); re->flag |= R_HALO; @@ -2092,7 +2092,7 @@ static void make_render_halos(Render *re, ObjectRen *obr, Mesh *me, int totvert, hasize= ma->hasize; VECCOPY(vec, mvert->co); - Mat4MulVecfl(mat, vec); + mul_m4_v3(mat, vec); if(ma->mode & MA_HALOPUNO) { xn= mvert->no[0]; @@ -2103,10 +2103,10 @@ static void make_render_halos(Render *re, ObjectRen *obr, Mesh *me, int totvert, nor[0]= imat[0][0]*xn+imat[0][1]*yn+imat[0][2]*zn; nor[1]= imat[1][0]*xn+imat[1][1]*yn+imat[1][2]*zn; nor[2]= imat[2][0]*xn+imat[2][1]*yn+imat[2][2]*zn; - Normalize(nor); + normalize_v3(nor); VECCOPY(view, vec); - Normalize(view); + normalize_v3(view); zn= nor[0]*view[0]+nor[1]*view[1]+nor[2]*view[2]; if(zn>=0.0) hasize= 0.0; @@ -2187,7 +2187,7 @@ static void displace_render_vert(Render *re, ObjectRen *obr, ShadeInput *shi, Ve VECCOPY(shi->vn, vr->n); if(mat) - Mat4MulVecfl(mat, shi->co); + mul_m4_v3(mat, shi->co); if(imat) { shi->vn[0]= imat[0][0]*vr->n[0]+imat[0][1]*vr->n[1]+imat[0][2]*vr->n[2]; @@ -2225,7 +2225,7 @@ static void displace_render_vert(Render *re, ObjectRen *obr, ShadeInput *shi, Ve } if (texco & TEXCO_GLOB) { VECCOPY(shi->gl, shi->co); - Mat4MulVecfl(re->viewinv, shi->gl); + mul_m4_v3(re->viewinv, shi->gl); } if (texco & TEXCO_NORM) { VECCOPY(shi->orn, shi->vn); @@ -2246,7 +2246,7 @@ static void displace_render_vert(Render *re, ObjectRen *obr, ShadeInput *shi, Ve displace[2]= shi->displace[2] * scale[2]; if(mat) - Mat3MulVecfl(imat, displace); + mul_m3_v3(imat, displace); /* 0.5 could become button once? */ vr->co[0] += displace[0]; @@ -2310,10 +2310,10 @@ static void displace_render_face(Render *re, ObjectRen *obr, VlakRen *vlr, float /* Recalculate the face normal - if flipped before, flip now */ if(vlr->v4) { - CalcNormFloat4(vlr->v4->co, vlr->v3->co, vlr->v2->co, vlr->v1->co, vlr->n); + normal_quad_v3( vlr->n,vlr->v4->co, vlr->v3->co, vlr->v2->co, vlr->v1->co); } else { - CalcNormFloat(vlr->v3->co, vlr->v2->co, vlr->v1->co, vlr->n); + normal_tri_v3( vlr->n,vlr->v3->co, vlr->v2->co, vlr->v1->co); } } @@ -2329,7 +2329,7 @@ static void do_displacement(Render *re, ObjectRen *obr, float mat[][4], float im /* Object Size with parenting */ obt=obr->ob; while(obt){ - VecAddf(temp, obt->size, obt->dsize); + add_v3_v3v3(temp, obt->size, obt->dsize); scale[0]*=temp[0]; scale[1]*=temp[1]; scale[2]*=temp[2]; obt=obt->parent; } @@ -2366,9 +2366,9 @@ static void init_render_mball(Render *re, ObjectRen *obr) if (ob!=find_basis_mball(re->scene, ob)) return; - Mat4MulMat4(mat, ob->obmat, re->viewmat); - Mat4Invert(ob->imat, mat); - Mat3CpyMat4(imat, ob->imat); + mul_m4_m4m4(mat, ob->obmat, re->viewmat); + invert_m4_m4(ob->imat, mat); + copy_m3_m4(imat, ob->imat); ma= give_render_material(re, ob, 1); @@ -2389,7 +2389,7 @@ static void init_render_mball(Render *re, ObjectRen *obr) ver= RE_findOrAddVert(obr, obr->totvert++); VECCOPY(ver->co, data); - Mat4MulVecfl(mat, ver->co); + mul_m4_v3(mat, ver->co); /* render normals are inverted */ xn= -nors[0]; @@ -2400,8 +2400,8 @@ static void init_render_mball(Render *re, ObjectRen *obr) ver->n[0]= imat[0][0]*xn+imat[0][1]*yn+imat[0][2]*zn; ver->n[1]= imat[1][0]*xn+imat[1][1]*yn+imat[1][2]*zn; ver->n[2]= imat[2][0]*xn+imat[2][1]*yn+imat[2][2]*zn; - Normalize(ver->n); - //if(ob->transflag & OB_NEG_SCALE) VecMulf(ver->n. -1.0); + normalize_v3(ver->n); + //if(ob->transflag & OB_NEG_SCALE) mul_v3_fl(ver->n. -1.0); if(need_orco) ver->orco= orco; } @@ -2416,9 +2416,9 @@ static void init_render_mball(Render *re, ObjectRen *obr) vlr->v4= 0; if(ob->transflag & OB_NEG_SCALE) - CalcNormFloat(vlr->v1->co, vlr->v2->co, vlr->v3->co, vlr->n); + normal_tri_v3( vlr->n,vlr->v1->co, vlr->v2->co, vlr->v3->co); else - CalcNormFloat(vlr->v3->co, vlr->v2->co, vlr->v1->co, vlr->n); + normal_tri_v3( vlr->n,vlr->v3->co, vlr->v2->co, vlr->v1->co); vlr->mat= ma; vlr->flag= ME_SMOOTH+R_NOPUNOFLIP; @@ -2433,9 +2433,9 @@ static void init_render_mball(Render *re, ObjectRen *obr) vlr1->v2= vlr1->v3; vlr1->v3= RE_findOrAddVert(obr, index[3]); if(ob->transflag & OB_NEG_SCALE) - CalcNormFloat(vlr1->v1->co, vlr1->v2->co, vlr1->v3->co, vlr1->n); + normal_tri_v3( vlr1->n,vlr1->v1->co, vlr1->v2->co, vlr1->v3->co); else - CalcNormFloat(vlr1->v3->co, vlr1->v2->co, vlr1->v1->co, vlr1->n); + normal_tri_v3( vlr1->n,vlr1->v3->co, vlr1->v2->co, vlr1->v1->co); } } @@ -2473,7 +2473,7 @@ static int dl_surf_to_renderdata(ObjectRen *obr, DispList *dl, Material **matar, if(orco) { v1->orco= orco; orco+= 3; orcoret++; } - Mat4MulVecfl(mat, v1->co); + mul_m4_v3(mat, v1->co); for (v = 1; v < sizev; v++) { ver= RE_findOrAddVert(obr, obr->totvert++); @@ -2481,7 +2481,7 @@ static int dl_surf_to_renderdata(ObjectRen *obr, DispList *dl, Material **matar, if(orco) { ver->orco= orco; orco+= 3; orcoret++; } - Mat4MulVecfl(mat, ver->co); + mul_m4_v3(mat, ver->co); } /* if V-cyclic, add extra vertices at end of the row */ if (dl->flag & DL_CYCL_U) { @@ -2529,7 +2529,7 @@ static int dl_surf_to_renderdata(ObjectRen *obr, DispList *dl, Material **matar, vlr= RE_findOrAddVlak(obr, obr->totvlak++); vlr->v1= v1; vlr->v2= v2; vlr->v3= v3; vlr->v4= v4; - CalcNormFloat4(vlr->v4->co, vlr->v3->co, vlr->v2->co, vlr->v1->co, n1); + normal_quad_v3( n1,vlr->v4->co, vlr->v3->co, vlr->v2->co, vlr->v1->co); VECCOPY(vlr->n, n1); @@ -2540,10 +2540,10 @@ static int dl_surf_to_renderdata(ObjectRen *obr, DispList *dl, Material **matar, vlr->flag |= R_NOPUNOFLIP; } - VecAddf(v1->n, v1->n, n1); - VecAddf(v2->n, v2->n, n1); - VecAddf(v3->n, v3->n, n1); - VecAddf(v4->n, v4->n, n1); + add_v3_v3v3(v1->n, v1->n, n1); + add_v3_v3v3(v2->n, v2->n, n1); + add_v3_v3v3(v3->n, v3->n, n1); + add_v3_v3v3(v4->n, v4->n, n1); p1++; p2++; p3++; p4++; } @@ -2557,10 +2557,10 @@ static int dl_surf_to_renderdata(ObjectRen *obr, DispList *dl, Material **matar, /* optimize! :*/ vlr= RE_findOrAddVlak(obr, UVTOINDEX(sizeu - 1, v)); vlr1= RE_findOrAddVlak(obr, UVTOINDEX(0, v)); - VecAddf(vlr1->v1->n, vlr1->v1->n, vlr->n); - VecAddf(vlr1->v2->n, vlr1->v2->n, vlr->n); - VecAddf(vlr->v3->n, vlr->v3->n, vlr1->n); - VecAddf(vlr->v4->n, vlr->v4->n, vlr1->n); + add_v3_v3v3(vlr1->v1->n, vlr1->v1->n, vlr->n); + add_v3_v3v3(vlr1->v2->n, vlr1->v2->n, vlr->n); + add_v3_v3v3(vlr->v3->n, vlr->v3->n, vlr1->n); + add_v3_v3v3(vlr->v4->n, vlr->v4->n, vlr1->n); } } if (dl->flag & DL_CYCL_U) { @@ -2570,10 +2570,10 @@ static int dl_surf_to_renderdata(ObjectRen *obr, DispList *dl, Material **matar, /* optimize! :*/ vlr= RE_findOrAddVlak(obr, UVTOINDEX(u, 0)); vlr1= RE_findOrAddVlak(obr, UVTOINDEX(u, sizev-1)); - VecAddf(vlr1->v2->n, vlr1->v2->n, vlr->n); - VecAddf(vlr1->v3->n, vlr1->v3->n, vlr->n); - VecAddf(vlr->v1->n, vlr->v1->n, vlr1->n); - VecAddf(vlr->v4->n, vlr->v4->n, vlr1->n); + add_v3_v3v3(vlr1->v2->n, vlr1->v2->n, vlr->n); + add_v3_v3v3(vlr1->v3->n, vlr1->v3->n, vlr->n); + add_v3_v3v3(vlr->v1->n, vlr->v1->n, vlr1->n); + add_v3_v3v3(vlr->v4->n, vlr->v4->n, vlr1->n); } } /* last vertex is an extra case: @@ -2597,11 +2597,11 @@ static int dl_surf_to_renderdata(ObjectRen *obr, DispList *dl, Material **matar, { vlr= RE_findOrAddVlak(obr, UVTOINDEX(sizeu - 1, sizev - 1)); /* (m,n) */ vlr1= RE_findOrAddVlak(obr, UVTOINDEX(0,0)); /* (0,0) */ - VecAddf(n1, vlr->n, vlr1->n); + add_v3_v3v3(n1, vlr->n, vlr1->n); vlr2= RE_findOrAddVlak(obr, UVTOINDEX(0, sizev-1)); /* (0,n) */ - VecAddf(n1, n1, vlr2->n); + add_v3_v3v3(n1, n1, vlr2->n); vlr3= RE_findOrAddVlak(obr, UVTOINDEX(sizeu-1, 0)); /* (m,0) */ - VecAddf(n1, n1, vlr3->n); + add_v3_v3v3(n1, n1, vlr3->n); VECCOPY(vlr->v3->n, n1); VECCOPY(vlr1->v1->n, n1); VECCOPY(vlr2->v2->n, n1); @@ -2609,7 +2609,7 @@ static int dl_surf_to_renderdata(ObjectRen *obr, DispList *dl, Material **matar, } for(a = startvert; a < obr->totvert; a++) { ver= RE_findOrAddVert(obr, a); - Normalize(ver->n); + normalize_v3(ver->n); } @@ -2631,8 +2631,8 @@ static void init_render_surf(Render *re, ObjectRen *obr) nu= cu->nurb.first; if(nu==0) return; - Mat4MulMat4(mat, ob->obmat, re->viewmat); - Mat4Invert(ob->imat, mat); + mul_m4_m4m4(mat, ob->obmat, re->viewmat); + invert_m4_m4(ob->imat, mat); /* material array */ totmat= ob->totcol+1; @@ -2692,8 +2692,8 @@ static void init_render_curve(Render *re, ObjectRen *obr, int timeoffset) dl= cu->disp.first; if(cu->disp.first==NULL) return; - Mat4MulMat4(mat, ob->obmat, re->viewmat); - Mat4Invert(ob->imat, mat); + mul_m4_m4m4(mat, ob->obmat, re->viewmat); + invert_m4_m4(ob->imat, mat); /* material array */ totmat= ob->totcol+1; @@ -2719,7 +2719,7 @@ static void init_render_curve(Render *re, ObjectRen *obr, int timeoffset) n[0]= ob->imat[0][2]; n[1]= ob->imat[1][2]; n[2]= ob->imat[2][2]; - Normalize(n); + normalize_v3(n); for(a=0; a<dl->nr; a++, data+=3) { ver= RE_findOrAddVert(obr, obr->totvert++); @@ -2735,7 +2735,7 @@ static void init_render_curve(Render *re, ObjectRen *obr, int timeoffset) ver->flag = 0; } - Mat4MulVecfl(mat, ver->co); + mul_m4_v3(mat, ver->co); if (orco) { ver->orco = orco; @@ -2787,7 +2787,7 @@ static void init_render_curve(Render *re, ObjectRen *obr, int timeoffset) ver= RE_findOrAddVert(obr, obr->totvert++); VECCOPY(ver->co, fp); - Mat4MulVecfl(mat, ver->co); + mul_m4_v3(mat, ver->co); fp+= 3; if (orco) { @@ -2828,9 +2828,9 @@ static void init_render_curve(Render *re, ObjectRen *obr, int timeoffset) */ if(frontside) - CalcNormFloat(vlr->v2->co, vlr->v3->co, vlr->v4->co, vlr->n); + normal_tri_v3( vlr->n,vlr->v2->co, vlr->v3->co, vlr->v4->co); else - CalcNormFloat(vlr->v1->co, vlr->v2->co, vlr->v3->co, vlr->n); + normal_tri_v3( vlr->n,vlr->v1->co, vlr->v2->co, vlr->v3->co); vlr->mat= matar[ dl->col ]; @@ -2851,14 +2851,14 @@ static void init_render_curve(Render *re, ObjectRen *obr, int timeoffset) for(a= startvlak; a<obr->totvlak; a++) { vlr= RE_findOrAddVlak(obr, a); - VecAddf(vlr->v1->n, vlr->v1->n, vlr->n); - VecAddf(vlr->v3->n, vlr->v3->n, vlr->n); - VecAddf(vlr->v2->n, vlr->v2->n, vlr->n); - VecAddf(vlr->v4->n, vlr->v4->n, vlr->n); + add_v3_v3v3(vlr->v1->n, vlr->v1->n, vlr->n); + add_v3_v3v3(vlr->v3->n, vlr->v3->n, vlr->n); + add_v3_v3v3(vlr->v2->n, vlr->v2->n, vlr->n); + add_v3_v3v3(vlr->v4->n, vlr->v4->n, vlr->n); } for(a=startvert; a<obr->totvert; a++) { ver= RE_findOrAddVert(obr, a); - len= Normalize(ver->n); + len= normalize_v3(ver->n); if(len==0.0) ver->flag= 1; /* flag abuse, its only used in zbuf now */ else ver->flag= 0; } @@ -3084,9 +3084,9 @@ static void init_render_mesh(Render *re, ObjectRen *obr, int timeoffset) me= ob->data; - Mat4MulMat4(mat, ob->obmat, re->viewmat); - Mat4Invert(ob->imat, mat); - Mat3CpyMat4(imat, ob->imat); + mul_m4_m4m4(mat, ob->obmat, re->viewmat); + invert_m4_m4(ob->imat, mat); + copy_m3_m4(imat, ob->imat); if(me->totvert==0) return; @@ -3167,7 +3167,7 @@ static void init_render_mesh(Render *re, ObjectRen *obr, int timeoffset) ver= RE_findOrAddVert(obr, obr->totvert++); VECCOPY(ver->co, mvert->co); if(do_autosmooth==0) /* autosmooth on original unrotated data to prevent differences between frames */ - Mat4MulVecfl(mat, ver->co); + mul_m4_v3(mat, ver->co); if(orco) { ver->orco= orco; @@ -3240,15 +3240,15 @@ static void init_render_mesh(Render *re, ObjectRen *obr, int timeoffset) MVert *mv= me->mvert; if(vlr->v4) - len= CalcNormFloat4( mv[mf->v4].co, mv[mf->v3].co, mv[mf->v2].co, mv[mf->v1].co, vlr->n); + len= normal_quad_v3( vlr->n, mv[mf->v4].co, mv[mf->v3].co, mv[mf->v2].co, mv[mf->v1].co); else - len= CalcNormFloat(mv[mf->v3].co, mv[mf->v2].co, mv[mf->v1].co, vlr->n); + len= normal_tri_v3( vlr->n,mv[mf->v3].co, mv[mf->v2].co, mv[mf->v1].co); } else { if(vlr->v4) - len= CalcNormFloat4(vlr->v4->co, vlr->v3->co, vlr->v2->co, vlr->v1->co, vlr->n); + len= normal_quad_v3( vlr->n,vlr->v4->co, vlr->v3->co, vlr->v2->co, vlr->v1->co); else - len= CalcNormFloat(vlr->v3->co, vlr->v2->co, vlr->v1->co, vlr->n); + len= normal_tri_v3( vlr->n,vlr->v3->co, vlr->v2->co, vlr->v1->co); } vlr->mat= ma; @@ -3322,7 +3322,7 @@ static void init_render_mesh(Render *re, ObjectRen *obr, int timeoffset) vlr->n[0]= imat[0][0]*xn+imat[0][1]*yn+imat[0][2]*zn; vlr->n[1]= imat[1][0]*xn+imat[1][1]*yn+imat[1][2]*zn; vlr->n[2]= imat[2][0]*xn+imat[2][1]*yn+imat[2][2]*zn; - Normalize(vlr->n); + normalize_v3(vlr->n); vlr->mat= ma; vlr->flag= 0; @@ -3388,13 +3388,13 @@ static void initshadowbuf(Render *re, LampRen *lar, float mat[][4]) shb->soft= lar->soft; shb->shadhalostep= lar->shadhalostep; - Mat4Ortho(mat); - Mat4Invert(shb->winmat, mat); /* winmat is temp */ + normalize_m4(mat); + invert_m4_m4(shb->winmat, mat); /* winmat is temp */ /* matrix: combination of inverse view and lampmat */ /* calculate again: the ortho-render has no correct viewinv */ - Mat4Invert(viewinv, re->viewmat); - Mat4MulMat4(shb->viewmat, viewinv, shb->winmat); + invert_m4_m4(viewinv, re->viewmat); + mul_m4_m4m4(shb->viewmat, viewinv, shb->winmat); /* projection */ shb->d= lar->clipsta; @@ -3473,11 +3473,11 @@ static GroupObject *add_render_lamp(Render *re, Object *ob) BLI_addtail(&re->lampren, lar); go->lampren= lar; - Mat4MulMat4(mat, ob->obmat, re->viewmat); - Mat4Invert(ob->imat, mat); + mul_m4_m4m4(mat, ob->obmat, re->viewmat); + invert_m4_m4(ob->imat, mat); - Mat3CpyMat4(lar->mat, mat); - Mat3CpyMat4(lar->imat, ob->imat); + copy_m3_m4(lar->mat, mat); + copy_m3_m4(lar->imat, ob->imat); lar->bufsize = la->bufsize; lar->samp = la->samp; @@ -3502,7 +3502,7 @@ static GroupObject *add_render_lamp(Render *re, Object *ob) lar->vec[0]= -mat[2][0]; lar->vec[1]= -mat[2][1]; lar->vec[2]= -mat[2][2]; - Normalize(lar->vec); + normalize_v3(lar->vec); lar->co[0]= mat[3][0]; lar->co[1]= mat[3][1]; lar->co[2]= mat[3][2]; @@ -3581,7 +3581,7 @@ static GroupObject *add_render_lamp(Render *re, Object *ob) lar->sunsky->effect_type = la->sun_effect_type; VECCOPY(vec,ob->obmat[2]); - Normalize(vec); + normalize_v3(vec); InitSunSky(lar->sunsky, la->atm_turbidity, vec, la->horizon_brightness, la->spread, la->sun_brightness, la->sun_size, la->backscattered_light, @@ -3611,9 +3611,9 @@ static GroupObject *add_render_lamp(Render *re, Object *ob) if(lar->type==LA_SPOT) { - Normalize(lar->imat[0]); - Normalize(lar->imat[1]); - Normalize(lar->imat[2]); + normalize_v3(lar->imat[0]); + normalize_v3(lar->imat[1]); + normalize_v3(lar->imat[2]); xn= saacos(lar->spotsi); xn= sin(xn)/cos(xn); @@ -3634,7 +3634,7 @@ static GroupObject *add_render_lamp(Render *re, Object *ob) lar->sh_invcampos[0]= -lar->co[0]; lar->sh_invcampos[1]= -lar->co[1]; lar->sh_invcampos[2]= -lar->co[2]; - Mat3MulVecfl(lar->imat, lar->sh_invcampos); + mul_m3_v3(lar->imat, lar->sh_invcampos); /* z factor, for a normalized volume */ angle= saacos(lar->spotsi); @@ -3681,7 +3681,7 @@ static GroupObject *add_render_lamp(Render *re, Object *ob) else if (la->type==LA_SPOT && (lar->mode & LA_SHAD_BUF) ) { /* Per lamp, one shadow buffer is made. */ lar->bufflag= la->bufflag; - Mat4CpyMat4(mat, ob->obmat); + copy_m4_m4(mat, ob->obmat); initshadowbuf(re, lar, mat); // mat is altered } @@ -3796,8 +3796,8 @@ void init_render_world(Render *re) cp[3]= 1; VECCOPY(re->grvec, re->viewmat[2]); - Normalize(re->grvec); - Mat3CpyMat4(re->imat, re->viewinv); + normalize_v3(re->grvec); + copy_m3_m4(re->imat, re->viewinv); for(a=0; a<MAX_MTEX; a++) if(re->wrld.mtex[a] && re->wrld.mtex[a]->tex) re->wrld.skytype |= WO_SKYTEX; @@ -3950,8 +3950,8 @@ static void split_quads(ObjectRen *obr, int dir) vlr->v4 = vlr1->v4 = NULL; /* new normals */ - CalcNormFloat(vlr->v3->co, vlr->v2->co, vlr->v1->co, vlr->n); - CalcNormFloat(vlr1->v3->co, vlr1->v2->co, vlr1->v1->co, vlr1->n); + normal_tri_v3( vlr->n,vlr->v3->co, vlr->v2->co, vlr->v1->co); + normal_tri_v3( vlr1->n,vlr1->v3->co, vlr1->v2->co, vlr1->v1->co); } /* clear the flag when not divided */ else vlr->flag &= ~R_DIVIDE_24; @@ -4015,8 +4015,8 @@ static void check_non_flat_quads(ObjectRen *obr) /* 1---2 1---2 0 = orig face, 1 = new face */ /* render normals are inverted in render! we calculate normal of single tria here */ - flen= CalcNormFloat(vlr->v4->co, vlr->v3->co, vlr->v1->co, nor); - if(flen==0.0) CalcNormFloat(vlr->v4->co, vlr->v2->co, vlr->v1->co, nor); + flen= normal_tri_v3( nor,vlr->v4->co, vlr->v3->co, vlr->v1->co); + if(flen==0.0) normal_tri_v3( nor,vlr->v4->co, vlr->v2->co, vlr->v1->co); xn= nor[0]*vlr->n[0] + nor[1]*vlr->n[1] + nor[2]*vlr->n[2]; @@ -4028,10 +4028,10 @@ static void check_non_flat_quads(ObjectRen *obr) vlr1->flag |= R_FACE_SPLIT; /* split direction based on vnorms */ - CalcNormFloat(vlr->v1->co, vlr->v2->co, vlr->v3->co, nor); + normal_tri_v3( nor,vlr->v1->co, vlr->v2->co, vlr->v3->co); d1= nor[0]*vlr->v1->n[0] + nor[1]*vlr->v1->n[1] + nor[2]*vlr->v1->n[2]; - CalcNormFloat(vlr->v2->co, vlr->v3->co, vlr->v4->co, nor); + normal_tri_v3( nor,vlr->v2->co, vlr->v3->co, vlr->v4->co); d2= nor[0]*vlr->v2->n[0] + nor[1]*vlr->v2->n[1] + nor[2]*vlr->v2->n[2]; if( fabs(d1) < fabs(d2) ) vlr->flag |= R_DIVIDE_24; @@ -4057,8 +4057,8 @@ static void check_non_flat_quads(ObjectRen *obr) vlr->v4 = vlr1->v4 = NULL; /* new normals */ - CalcNormFloat(vlr->v3->co, vlr->v2->co, vlr->v1->co, vlr->n); - CalcNormFloat(vlr1->v3->co, vlr1->v2->co, vlr1->v1->co, vlr1->n); + normal_tri_v3( vlr->n,vlr->v3->co, vlr->v2->co, vlr->v1->co); + normal_tri_v3( vlr1->n,vlr1->v3->co, vlr1->v2->co, vlr1->v1->co); } /* clear the flag when not divided */ else vlr->flag &= ~R_DIVIDE_24; @@ -4147,8 +4147,8 @@ static void find_dupli_instances(Render *re, ObjectRen *obr) float imat[4][4], obmat[4][4], obimat[4][4], nmat[3][3]; int first = 1; - Mat4MulMat4(obmat, obr->obmat, re->viewmat); - Mat4Invert(imat, obmat); + mul_m4_m4m4(obmat, obr->obmat, re->viewmat); + invert_m4_m4(imat, obmat); /* for objects instanced by dupliverts/faces/particles, we go over the * list of instances to find ones that instance obr, and setup their @@ -4159,12 +4159,12 @@ static void find_dupli_instances(Render *re, ObjectRen *obr) /* compute difference between object matrix and * object matrix with dupli transform, in viewspace */ - Mat4CpyMat4(obimat, obi->mat); - Mat4MulMat4(obi->mat, imat, obimat); + copy_m4_m4(obimat, obi->mat); + mul_m4_m4m4(obi->mat, imat, obimat); - Mat3CpyMat4(nmat, obi->mat); - Mat3Inv(obi->nmat, nmat); - Mat3Transp(obi->nmat); + copy_m3_m4(nmat, obi->mat); + invert_m3_m3(obi->nmat, nmat); + transpose_m3(obi->nmat); if(!first) { re->totvert += obr->totvert; @@ -4182,19 +4182,19 @@ static void assign_dupligroup_dupli(Render *re, ObjectInstanceRen *obi, ObjectRe { float imat[4][4], obmat[4][4], obimat[4][4], nmat[3][3]; - Mat4MulMat4(obmat, obr->obmat, re->viewmat); - Mat4Invert(imat, obmat); + mul_m4_m4m4(obmat, obr->obmat, re->viewmat); + invert_m4_m4(imat, obmat); obi->obr= obr; /* compute difference between object matrix and * object matrix with dupli transform, in viewspace */ - Mat4CpyMat4(obimat, obi->mat); - Mat4MulMat4(obi->mat, imat, obimat); + copy_m4_m4(obimat, obi->mat); + mul_m4_m4m4(obi->mat, imat, obimat); - Mat3CpyMat4(nmat, obi->mat); - Mat3Inv(obi->nmat, nmat); - Mat3Transp(obi->nmat); + copy_m3_m4(nmat, obi->mat); + invert_m3_m3(obi->nmat, nmat); + transpose_m3(obi->nmat); re->totvert += obr->totvert; re->totvlak += obr->totvlak; @@ -4257,8 +4257,8 @@ static void set_dupli_tex_mat(Render *re, ObjectInstanceRen *obi, DupliObject *d float imat[4][4]; obi->duplitexmat= BLI_memarena_alloc(re->memArena, sizeof(float)*4*4); - Mat4Invert(imat, dob->mat); - Mat4MulSerie(obi->duplitexmat, re->viewmat, dob->omat, imat, re->viewinv, 0, 0, 0, 0); + invert_m4_m4(imat, dob->mat); + mul_serie_m4(obi->duplitexmat, re->viewmat, dob->omat, imat, re->viewinv, 0, 0, 0, 0); } } @@ -4329,7 +4329,7 @@ static void add_render_object(Render *re, Object *ob, Object *par, DupliObject * obr= RE_addRenderObject(re, ob, par, index, 0, ob->lay); if((dob && !dob->animated) || (ob->transflag & OB_RENDER_DUPLI)) { obr->flag |= R_INSTANCEABLE; - Mat4CpyMat4(obr->obmat, ob->obmat); + copy_m4_m4(obr->obmat, ob->obmat); } if(obr->lay & vectorlay) obr->flag |= R_NEED_VECTORS; @@ -4357,7 +4357,7 @@ static void add_render_object(Render *re, Object *ob, Object *par, DupliObject * obr= RE_addRenderObject(re, ob, par, index, psysindex, ob->lay); if((dob && !dob->animated) || (ob->transflag & OB_RENDER_DUPLI)) { obr->flag |= R_INSTANCEABLE; - Mat4CpyMat4(obr->obmat, ob->obmat); + copy_m4_m4(obr->obmat, ob->obmat); } if(obr->lay & vectorlay) obr->flag |= R_NEED_VECTORS; @@ -4388,8 +4388,8 @@ static void init_render_object(Render *re, Object *ob, Object *par, DupliObject else if(render_object_type(ob->type)) add_render_object(re, ob, par, dob, timeoffset, vectorlay); else { - Mat4MulMat4(mat, ob->obmat, re->viewmat); - Mat4Invert(ob->imat, mat); + mul_m4_m4m4(mat, ob->obmat, re->viewmat); + invert_m4_m4(ob->imat, mat); } time= PIL_check_seconds_timer(); @@ -4639,8 +4639,8 @@ static void database_init_objects(Render *re, unsigned int renderlay, int nolamp for(SETLOOPER(re->scene, base)) { ob= base->object; /* imat objects has to be done here, since displace can have texture using Object map-input */ - Mat4MulMat4(mat, ob->obmat, re->viewmat); - Mat4Invert(ob->imat, mat); + mul_m4_m4m4(mat, ob->obmat, re->viewmat); + invert_m4_m4(ob->imat, mat); /* each object should only be rendered once */ ob->flag &= ~OB_DONE; ob->transflag &= ~OB_RENDER_DUPLI; @@ -4685,7 +4685,7 @@ static void database_init_objects(Render *re, unsigned int renderlay, int nolamp for(dob= lb->first; dob; dob= dob->next) { Object *obd= dob->ob; - Mat4CpyMat4(obd->obmat, dob->mat); + copy_m4_m4(obd->obmat, dob->mat); /* group duplis need to set ob matrices correct, for deform. so no_draw is part handled */ if(!(obd->transflag & OB_RENDER_DUPLI) && dob->no_draw) @@ -4710,7 +4710,7 @@ static void database_init_objects(Render *re, unsigned int renderlay, int nolamp * this is a duplivert/face/particle, or it is a non-animated object in * a dupligroup that has already been created before */ if(dob->type != OB_DUPLIGROUP || (obr=find_dupligroup_dupli(re, obd, 0))) { - Mat4MulMat4(mat, dob->mat, re->viewmat); + mul_m4_m4m4(mat, dob->mat, re->viewmat); obi= RE_addRenderInstance(re, NULL, obd, ob, dob->index, 0, mat, obd->lay); /* fill in instance variables for texturing */ @@ -4786,8 +4786,8 @@ static void database_init_objects(Render *re, unsigned int renderlay, int nolamp if(redoimat) { for(SETLOOPER(re->scene, base)) { ob= base->object; - Mat4MulMat4(mat, ob->obmat, re->viewmat); - Mat4Invert(ob->imat, mat); + mul_m4_m4m4(mat, ob->obmat, re->viewmat); + invert_m4_m4(ob->imat, mat); } } @@ -4831,8 +4831,8 @@ void RE_Database_FromScene(Render *re, Scene *scene, int use_camera_view) /* if no camera, viewmat should have been set! */ if(use_camera_view && re->scene->camera) { - Mat4Ortho(re->scene->camera->obmat); - Mat4Invert(mat, re->scene->camera->obmat); + normalize_m4(re->scene->camera->obmat); + invert_m4_m4(mat, re->scene->camera->obmat); RE_SetView(re, mat); re->scene->camera->recalc= OB_RECALC_OB; /* force correct matrix for scaled cameras */ } @@ -4952,7 +4952,7 @@ void RE_DataBase_ApplyWindow(Render *re) void RE_DataBase_GetView(Render *re, float mat[][4]) { - Mat4CpyMat4(mat, re->viewmat); + copy_m4_m4(mat, re->viewmat); } /* ------------------------------------------------------------------------- */ @@ -4986,8 +4986,8 @@ static void database_fromscene_vectors(Render *re, Scene *scene, int timeoffset) /* if no camera, viewmat should have been set! */ if(re->scene->camera) { - Mat4Ortho(re->scene->camera->obmat); - Mat4Invert(mat, re->scene->camera->obmat); + normalize_m4(re->scene->camera->obmat); + invert_m4_m4(mat, re->scene->camera->obmat); RE_SetView(re, mat); } @@ -5095,9 +5095,9 @@ static float *calculate_strandsurface_speedvectors(Render *re, ObjectInstanceRen if(mesh->co && mesh->prevco && mesh->nextco) { if(obi->flag & R_TRANSFORMED) - Mat4MulMat4(winmat, obi->mat, re->winmat); + mul_m4_m4m4(winmat, obi->mat, re->winmat); else - Mat4CpyMat4(winmat, re->winmat); + copy_m4_m4(winmat, re->winmat); winspeed= MEM_callocN(sizeof(float)*4*mesh->totvert, "StrandSurfWin"); @@ -5132,9 +5132,9 @@ static void calculate_speedvectors(Render *re, ObjectInstanceRen *obi, float *ve int a, *face, *index; if(obi->flag & R_TRANSFORMED) - Mat4MulMat4(winmat, obi->mat, re->winmat); + mul_m4_m4m4(winmat, obi->mat, re->winmat); else - Mat4CpyMat4(winmat, re->winmat); + copy_m4_m4(winmat, re->winmat); if(obr->vertnodes) { for(a=0; a<obr->totvert; a++, vectors+=2) { @@ -5172,7 +5172,7 @@ static void calculate_speedvectors(Render *re, ObjectInstanceRen *obi, float *ve co3= mesh->co[face[2]]; co4= (face[3])? mesh->co[face[3]]: NULL; - InterpWeightsQ3Dfl(co1, co2, co3, co4, strand->vert->co, w); + interp_weights_face_v3( w,co1, co2, co3, co4, strand->vert->co); speed[0]= speed[1]= speed[2]= speed[3]= 0.0f; QUATADDFAC(speed, speed, winspeed[face[0]], w[0]); @@ -5212,8 +5212,8 @@ static int load_fluidsimspeedvectors(Render *re, ObjectInstanceRen *obi, float * else return 0; - Mat4CpyMat4(mat, re->viewmat); - Mat4Invert(imat, mat); + copy_m4_m4(mat, re->viewmat); + invert_m4_m4(imat, mat); /* set first vertex OK */ if(!fss->meshSurfNormals) return 0; @@ -5226,9 +5226,9 @@ static int load_fluidsimspeedvectors(Render *re, ObjectInstanceRen *obi, float * velarray = (float *)fss->meshSurfNormals; if(obi->flag & R_TRANSFORMED) - Mat4MulMat4(winmat, obi->mat, re->winmat); + mul_m4_m4m4(winmat, obi->mat, re->winmat); else - Mat4CpyMat4(winmat, re->winmat); + copy_m4_m4(winmat, re->winmat); /* (bad) HACK calculate average velocity */ /* better solution would be fixing getVelocityAt() in intern/elbeem/intern/solver_util.cpp @@ -5316,9 +5316,9 @@ static void copy_dbase_object_vectors(Render *re, ListBase *lb) vec= obilb->vectors= MEM_mallocN(2*sizeof(float)*totvector, "vector array"); if(obi->flag & R_TRANSFORMED) - Mat4MulMat4(winmat, obi->mat, re->winmat); + mul_m4_m4m4(winmat, obi->mat, re->winmat); else - Mat4CpyMat4(winmat, re->winmat); + copy_m4_m4(winmat, re->winmat); for(a=0; a<obr->totvert; a++, vec+=2) { if((a & 255)==0) ver= obr->vertnodes[a>>8].vert; @@ -5517,12 +5517,12 @@ void RE_Database_Baking(Render *re, Scene *scene, int type, Object *actob) /* if no camera, set unit */ if(re->scene->camera) { - Mat4Ortho(re->scene->camera->obmat); - Mat4Invert(mat, re->scene->camera->obmat); + normalize_m4(re->scene->camera->obmat); + invert_m4_m4(mat, re->scene->camera->obmat); RE_SetView(re, mat); } else { - Mat4One(mat); + unit_m4(mat); RE_SetView(re, mat); } @@ -5605,8 +5605,8 @@ void RE_make_sticky(Scene *scene, View3D *v3d) RE_SetCamera(re, scene->camera); /* and set view matrix */ - Mat4Ortho(scene->camera->obmat); - Mat4Invert(mat, scene->camera->obmat); + normalize_m4(scene->camera->obmat); + invert_m4_m4(mat, scene->camera->obmat); RE_SetView(re, mat); for(base= FIRSTBASE; base; base= base->next) { @@ -5622,12 +5622,12 @@ void RE_make_sticky(Scene *scene, View3D *v3d) CD_CALLOC, NULL, me->totvert); where_is_object(scene, ob); - Mat4MulMat4(mat, ob->obmat, re->viewmat); + mul_m4_m4m4(mat, ob->obmat, re->viewmat); ms= me->msticky; for(a=0; a<me->totvert; a++, ms++, mvert++) { VECCOPY(ho, mvert->co); - Mat4MulVecfl(mat, ho); + mul_m4_v3(mat, ho); projectverto(ho, re->winmat, ho); ms->co[0]= ho[0]/ho[3]; ms->co[1]= ho[1]/ho[3]; diff --git a/source/blender/render/intern/source/envmap.c b/source/blender/render/intern/source/envmap.c index b5774d11799..323eb6a9500 100644 --- a/source/blender/render/intern/source/envmap.c +++ b/source/blender/render/intern/source/envmap.c @@ -31,7 +31,7 @@ /* external modules: */ #include "MEM_guardedalloc.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_threads.h" @@ -211,9 +211,9 @@ static void envmap_transmatrix(float mat[][4], int part) eul[2]= -M_PI/2.0; } - Mat4CpyMat4(tmat, mat); - EulToMat4(eul, rotmat); - Mat4MulSerie(mat, tmat, rotmat, + copy_m4_m4(tmat, mat); + eul_to_mat4( rotmat,eul); + mul_serie_m4(mat, tmat, rotmat, 0, 0, 0, 0, 0, 0); } @@ -231,28 +231,28 @@ static void env_rotate_scene(Render *re, float mat[][4], int mode) int a; if(mode==0) { - Mat4Invert(tmat, mat); - Mat3CpyMat4(imat, tmat); + invert_m4_m4(tmat, mat); + copy_m3_m4(imat, tmat); } else { - Mat4CpyMat4(tmat, mat); - Mat3CpyMat4(imat, mat); + copy_m4_m4(tmat, mat); + copy_m3_m4(imat, mat); } for(obi=re->instancetable.first; obi; obi=obi->next) { /* append or set matrix depending on dupli */ if(obi->flag & R_DUPLI_TRANSFORMED) { - Mat4CpyMat4(tmpmat, obi->mat); - Mat4MulMat4(obi->mat, tmpmat, tmat); + copy_m4_m4(tmpmat, obi->mat); + mul_m4_m4m4(obi->mat, tmpmat, tmat); } else if(mode==1) - Mat4CpyMat4(obi->mat, tmat); + copy_m4_m4(obi->mat, tmat); else - Mat4One(obi->mat); + unit_m4(obi->mat); - Mat3CpyMat4(cmat, obi->mat); - Mat3Inv(obi->nmat, cmat); - Mat3Transp(obi->nmat); + copy_m3_m4(cmat, obi->mat); + invert_m3_m3(obi->nmat, cmat); + transpose_m3(obi->nmat); /* indicate the renderer has to use transform matrices */ if(mode==0) @@ -267,7 +267,7 @@ static void env_rotate_scene(Render *re, float mat[][4], int mode) if((a & 255)==0) har= obr->bloha[a>>8]; else har++; - Mat4MulVecfl(tmat, har->co); + mul_m4_v3(tmat, har->co); } } @@ -277,25 +277,25 @@ static void env_rotate_scene(Render *re, float mat[][4], int mode) /* removed here some horrible code of someone in NaN who tried to fix prototypes... just solved by introducing a correct cmat[3][3] instead of using smat. this works, check square spots in reflections (ton) */ - Mat3CpyMat3(cmat, lar->imat); - Mat3MulMat3(lar->imat, cmat, imat); + copy_m3_m3(cmat, lar->imat); + mul_m3_m3m3(lar->imat, cmat, imat); - Mat3MulVecfl(imat, lar->vec); - Mat4MulVecfl(tmat, lar->co); + mul_m3_v3(imat, lar->vec); + mul_m4_v3(tmat, lar->co); lar->sh_invcampos[0]= -lar->co[0]; lar->sh_invcampos[1]= -lar->co[1]; lar->sh_invcampos[2]= -lar->co[2]; - Mat3MulVecfl(lar->imat, lar->sh_invcampos); + mul_m3_v3(lar->imat, lar->sh_invcampos); lar->sh_invcampos[2]*= lar->sh_zfac; if(lar->shb) { if(mode==1) { - Mat4Invert(pmat, mat); - Mat4MulMat4(smat, pmat, lar->shb->viewmat); - Mat4MulMat4(lar->shb->persmat, smat, lar->shb->winmat); + invert_m4_m4(pmat, mat); + mul_m4_m4m4(smat, pmat, lar->shb->viewmat); + mul_m4_m4m4(lar->shb->persmat, smat, lar->shb->winmat); } - else Mat4MulMat4(lar->shb->persmat, lar->shb->viewmat, lar->shb->winmat); + else mul_m4_m4m4(lar->shb->persmat, lar->shb->viewmat, lar->shb->winmat); } } @@ -373,8 +373,8 @@ static void env_set_imats(Render *re) base= re->scene->base.first; while(base) { - Mat4MulMat4(mat, base->object->obmat, re->viewmat); - Mat4Invert(base->object->imat, mat); + mul_m4_m4m4(mat, base->object->obmat, re->viewmat); + invert_m4_m4(base->object->imat, mat); base= base->next; } @@ -393,18 +393,18 @@ static void render_envmap(Render *re, EnvMap *env) short part; /* need a recalc: ortho-render has no correct viewinv */ - Mat4Invert(oldviewinv, re->viewmat); + invert_m4_m4(oldviewinv, re->viewmat); envre= envmap_render_copy(re, env); /* precalc orthmat for object */ - Mat4CpyMat4(orthmat, env->object->obmat); - Mat4Ortho(orthmat); + copy_m4_m4(orthmat, env->object->obmat); + normalize_m4(orthmat); /* need imat later for texture imat */ - Mat4MulMat4(mat, orthmat, re->viewmat); - Mat4Invert(tmat, mat); - Mat3CpyMat4(env->obimat, tmat); + mul_m4_m4m4(mat, orthmat, re->viewmat); + invert_m4_m4(tmat, mat); + copy_m3_m4(env->obimat, tmat); for(part=0; part<6; part++) { if(env->type==ENV_PLANE && part!=1) @@ -412,17 +412,17 @@ static void render_envmap(Render *re, EnvMap *env) re->display_clear(re->dch, envre->result); - Mat4CpyMat4(tmat, orthmat); + copy_m4_m4(tmat, orthmat); envmap_transmatrix(tmat, part); - Mat4Invert(mat, tmat); + invert_m4_m4(mat, tmat); /* mat now is the camera 'viewmat' */ - Mat4CpyMat4(envre->viewmat, mat); - Mat4CpyMat4(envre->viewinv, tmat); + copy_m4_m4(envre->viewmat, mat); + copy_m4_m4(envre->viewinv, tmat); /* we have to correct for the already rotated vertexcoords */ - Mat4MulMat4(tmat, oldviewinv, envre->viewmat); - Mat4Invert(env->imat, tmat); + mul_m4_m4m4(tmat, oldviewinv, envre->viewmat); + invert_m4_m4(env->imat, tmat); env_rotate_scene(envre, tmat, 1); init_render_world(envre); @@ -503,13 +503,13 @@ void make_envmaps(Render *re) float orthmat[4][4], mat[4][4], tmat[4][4]; /* precalc orthmat for object */ - Mat4CpyMat4(orthmat, env->object->obmat); - Mat4Ortho(orthmat); + copy_m4_m4(orthmat, env->object->obmat); + normalize_m4(orthmat); /* need imat later for texture imat */ - Mat4MulMat4(mat, orthmat, re->viewmat); - Mat4Invert(tmat, mat); - Mat3CpyMat4(env->obimat, tmat); + mul_m4_m4m4(mat, orthmat, re->viewmat); + invert_m4_m4(tmat, mat); + copy_m3_m4(env->obimat, tmat); } else { @@ -678,20 +678,20 @@ int envmaptex(Tex *tex, float *texvec, float *dxt, float *dyt, int osatex, TexRe /* rotate to envmap space, if object is set */ VECCOPY(vec, texvec); - if(env->object) Mat3MulVecfl(env->obimat, vec); - else Mat4Mul3Vecfl(R.viewinv, vec); + if(env->object) mul_m3_v3(env->obimat, vec); + else mul_mat3_m4_v3(R.viewinv, vec); face= envcube_isect(env, vec, sco); ibuf= env->cube[face]; if(osatex) { if(env->object) { - Mat3MulVecfl(env->obimat, dxt); - Mat3MulVecfl(env->obimat, dyt); + mul_m3_v3(env->obimat, dxt); + mul_m3_v3(env->obimat, dyt); } else { - Mat4Mul3Vecfl(R.viewinv, dxt); - Mat4Mul3Vecfl(R.viewinv, dyt); + mul_mat3_m4_v3(R.viewinv, dxt); + mul_mat3_m4_v3(R.viewinv, dyt); } set_dxtdyt(dxts, dyts, dxt, dyt, face); imagewraposa(tex, NULL, ibuf, sco, dxts, dyts, texres); @@ -703,9 +703,9 @@ int envmaptex(Tex *tex, float *texvec, float *dxt, float *dyt, int osatex, TexRe texr1.nor= texr2.nor= NULL; - VecAddf(vec, vec, dxt); + add_v3_v3v3(vec, vec, dxt); face1= envcube_isect(env, vec, sco); - VecSubf(vec, vec, dxt); + sub_v3_v3v3(vec, vec, dxt); if(face!=face1) { ibuf= env->cube[face1]; @@ -716,9 +716,9 @@ int envmaptex(Tex *tex, float *texvec, float *dxt, float *dyt, int osatex, TexRe /* here was the nasty bug! results were not zero-ed. FPE! */ - VecAddf(vec, vec, dyt); + add_v3_v3v3(vec, vec, dyt); face1= envcube_isect(env, vec, sco); - VecSubf(vec, vec, dyt); + sub_v3_v3v3(vec, vec, dyt); if(face!=face1) { ibuf= env->cube[face1]; diff --git a/source/blender/render/intern/source/imagetexture.c b/source/blender/render/intern/source/imagetexture.c index 01131f09b96..3d46fdfaaee 100644 --- a/source/blender/render/intern/source/imagetexture.c +++ b/source/blender/render/intern/source/imagetexture.c @@ -48,7 +48,7 @@ #include "DNA_scene_types.h" #include "DNA_texture_types.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_threads.h" diff --git a/source/blender/render/intern/source/initrender.c b/source/blender/render/intern/source/initrender.c index d388e81a745..abff8bf2655 100644 --- a/source/blender/render/intern/source/initrender.c +++ b/source/blender/render/intern/source/initrender.c @@ -37,7 +37,7 @@ #include "PIL_time.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_jitter.h" @@ -562,7 +562,7 @@ void RE_GetCameraWindow(struct Render *re, struct Object *camera, int frame, flo { re->r.cfra= frame; RE_SetCamera(re, camera); - Mat4CpyMat4(mat, re->winmat); + copy_m4_m4(mat, re->winmat); } /* ~~~~~~~~~~~~~~~~ part (tile) calculus ~~~~~~~~~~~~~~~~~~~~~~ */ diff --git a/source/blender/render/intern/source/occlusion.c b/source/blender/render/intern/source/occlusion.c index a15377a8c6d..f62668b84c0 100644 --- a/source/blender/render/intern/source/occlusion.c +++ b/source/blender/render/intern/source/occlusion.c @@ -36,7 +36,7 @@ #include "DNA_material_types.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_memarena.h" #include "BLI_threads.h" @@ -165,7 +165,7 @@ static void occ_shade(ShadeSample *ssamp, ObjectInstanceRen *obi, VlakRen *vlr, /* set up view vector */ VECCOPY(shi->view, shi->co); - Normalize(shi->view); + normalize_v3(shi->view); /* cache for shadow */ shi->samplenr++; @@ -181,8 +181,8 @@ static void occ_shade(ShadeSample *ssamp, ObjectInstanceRen *obi, VlakRen *vlr, /* not a pretty solution, but fixes common cases */ if(shi->obr->ob && shi->obr->ob->transflag & OB_NEG_SCALE) { - VecNegf(shi->vn); - VecNegf(shi->vno); + negate_v3(shi->vn); + negate_v3(shi->vno); } /* init material vars */ @@ -311,12 +311,12 @@ static void occ_face(const OccFace *face, float *co, float *normal, float *area) if(co) { if(vlr->v4) - VecLerpf(co, vlr->v1->co, vlr->v3->co, 0.5f); + interp_v3_v3v3(co, vlr->v1->co, vlr->v3->co, 0.5f); else - CalcCent3f(co, vlr->v1->co, vlr->v2->co, vlr->v3->co); + cent_tri_v3(co, vlr->v1->co, vlr->v2->co, vlr->v3->co); if(obi->flag & R_TRANSFORMED) - Mat4MulVecfl(obi->mat, co); + mul_m4_v3(obi->mat, co); } if(normal) { @@ -325,7 +325,7 @@ static void occ_face(const OccFace *face, float *co, float *normal, float *area) normal[2]= -vlr->n[2]; if(obi->flag & R_TRANSFORMED) - Mat3MulVecfl(obi->nmat, normal); + mul_m3_v3(obi->nmat, normal); } if(area) { @@ -335,17 +335,17 @@ static void occ_face(const OccFace *face, float *co, float *normal, float *area) if(vlr->v4) VECCOPY(v4, vlr->v4->co); if(obi->flag & R_TRANSFORMED) { - Mat4MulVecfl(obi->mat, v1); - Mat4MulVecfl(obi->mat, v2); - Mat4MulVecfl(obi->mat, v3); - if(vlr->v4) Mat4MulVecfl(obi->mat, v4); + mul_m4_v3(obi->mat, v1); + mul_m4_v3(obi->mat, v2); + mul_m4_v3(obi->mat, v3); + if(vlr->v4) mul_m4_v3(obi->mat, v4); } /* todo: correct area for instances */ if(vlr->v4) - *area= AreaQ3Dfl(v1, v2, v3, v4); + *area= area_quad_v3(v1, v2, v3, v4); else - *area= AreaT3Dfl(v1, v2, v3); + *area= area_tri_v3(v1, v2, v3); } } @@ -591,7 +591,7 @@ static void occ_build_recursive(OcclusionTree *tree, OccNode *node, int begin, i } if(node->area != 0.0f) - VecMulf(node->co, 1.0f/node->area); + mul_v3_fl(node->co, 1.0f/node->area); /* compute maximum distance from center */ node->dco= 0.0f; @@ -1116,10 +1116,10 @@ static float occ_quad_form_factor(float *p, float *n, float *q0, float *q1, floa normalizef(r2); normalizef(r3); - Crossf(g0, r1, r0); normalizef(g0); - Crossf(g1, r2, r1); normalizef(g1); - Crossf(g2, r3, r2); normalizef(g2); - Crossf(g3, r0, r3); normalizef(g3); + cross_v3_v3v3(g0, r1, r0); normalizef(g0); + cross_v3_v3v3(g1, r2, r1); normalizef(g1); + cross_v3_v3v3(g2, r3, r2); normalizef(g2); + cross_v3_v3v3(g3, r0, r3); normalizef(g3); a1= saacosf(INPR(r0, r1)); a2= saacosf(INPR(r1, r2)); @@ -1151,9 +1151,9 @@ static float occ_form_factor(OccFace *face, float *p, float *n) VECCOPY(v3, vlr->v3->co); if(obi->flag & R_TRANSFORMED) { - Mat4MulVecfl(obi->mat, v1); - Mat4MulVecfl(obi->mat, v2); - Mat4MulVecfl(obi->mat, v3); + mul_m4_v3(obi->mat, v1); + mul_m4_v3(obi->mat, v2); + mul_m4_v3(obi->mat, v3); } if(occ_visible_quad(p, n, v1, v2, v3, q0, q1, q2, q3)) @@ -1162,7 +1162,7 @@ static float occ_form_factor(OccFace *face, float *p, float *n) if(vlr->v4) { VECCOPY(v4, vlr->v4->co); if(obi->flag & R_TRANSFORMED) - Mat4MulVecfl(obi->mat, v4); + mul_m4_v3(obi->mat, v4); if(occ_visible_quad(p, n, v1, v3, v4, q0, q1, q2, q3)) contrib += occ_quad_form_factor(p, n, q0, q1, q2, q3); @@ -1269,7 +1269,7 @@ static void occ_lookup(OcclusionTree *tree, int thread, OccFace *exclude, float } if(occ) *occ= resultocc; - if(bentn) Normalize(bentn); + if(bentn) normalize_v3(bentn); } static void occ_compute_passes(Render *re, OcclusionTree *tree, int totpass) @@ -1282,7 +1282,7 @@ static void occ_compute_passes(Render *re, OcclusionTree *tree, int totpass) for(pass=0; pass<totpass; pass++) { for(i=0; i<tree->totface; i++) { occ_face(&tree->face[i], co, n, NULL); - VecNegf(n); + negate_v3(n); VECADDFAC(co, co, n, 1e-8f); occ_lookup(tree, 0, &tree->face[i], co, n, &occ[i], NULL); @@ -1315,7 +1315,7 @@ static void sample_occ_tree(Render *re, OcclusionTree *tree, OccFace *exclude, f aocolor= WO_AOPLAIN; VECCOPY(nn, n); - VecNegf(nn); + negate_v3(nn); occ_lookup(tree, thread, exclude, co, nn, &occ, (aocolor)? bn: NULL); @@ -1347,7 +1347,7 @@ static void sample_occ_tree(Render *re, OcclusionTree *tree, OccFace *exclude, f } #endif - VecMulf(skycol, occlusion); + mul_v3_fl(skycol, occlusion); } else { skycol[0]= occlusion; @@ -1477,7 +1477,7 @@ static void sample_occ_surface(ShadeInput *shi) co3= mesh->co[face[2]]; co4= (face[3])? mesh->co[face[3]]: NULL; - InterpWeightsQ3Dfl(co1, co2, co3, co4, strand->vert->co, w); + interp_weights_face_v3( w,co1, co2, co3, co4, strand->vert->co); shi->ao[0]= shi->ao[1]= shi->ao[2]= 0.0f; VECADDFAC(shi->ao, shi->ao, mesh->col[face[0]], w[0]); @@ -1512,14 +1512,14 @@ static void *exec_strandsurface_sample(void *data) if(face[3]) { co4= mesh->co[face[3]]; - VecLerpf(co, co1, co3, 0.5f); - CalcNormFloat4(co1, co2, co3, co4, n); + interp_v3_v3v3(co, co1, co3, 0.5f); + normal_quad_v3( n,co1, co2, co3, co4); } else { - CalcCent3f(co, co1, co2, co3); - CalcNormFloat(co1, co2, co3, n); + cent_tri_v3(co, co1, co2, co3); + normal_tri_v3( n,co1, co2, co3); } - VecNegf(n); + negate_v3(n); sample_occ_tree(re, re->occlusiontree, NULL, co, n, othread->thread, 0, col); VECCOPY(othread->facecol[a], col); @@ -1597,7 +1597,7 @@ void make_occ_tree(Render *re) for(a=0; a<mesh->totvert; a++) if(count[a]) - VecMulf(mesh->col[a], 1.0f/count[a]); + mul_v3_fl(mesh->col[a], 1.0f/count[a]); MEM_freeN(count); MEM_freeN(facecol); diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index 5dcfb12a080..9c4c83a82f9 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -53,7 +53,7 @@ #include "MEM_guardedalloc.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_rand.h" #include "BLI_threads.h" @@ -95,7 +95,7 @@ - tiles, rect, baking - layers/tiles optionally to disk or directly in Render Result -4) Composit Render Result +4) Composite Render Result - also read external files etc 5) Image Files @@ -1264,7 +1264,7 @@ void RE_SetWindow(Render *re, rctf *viewplane, float clipsta, float clipend) re->clipend= clipend; re->r.mode &= ~R_ORTHO; - i_window(re->viewplane.xmin, re->viewplane.xmax, re->viewplane.ymin, re->viewplane.ymax, re->clipsta, re->clipend, re->winmat); + perspective_m4( re->winmat,re->viewplane.xmin, re->viewplane.xmax, re->viewplane.ymin, re->viewplane.ymax, re->clipsta, re->clipend); } @@ -1277,14 +1277,14 @@ void RE_SetOrtho(Render *re, rctf *viewplane, float clipsta, float clipend) re->clipend= clipend; re->r.mode |= R_ORTHO; - i_ortho(re->viewplane.xmin, re->viewplane.xmax, re->viewplane.ymin, re->viewplane.ymax, re->clipsta, re->clipend, re->winmat); + orthographic_m4( re->winmat,re->viewplane.xmin, re->viewplane.xmax, re->viewplane.ymin, re->viewplane.ymax, re->clipsta, re->clipend); } void RE_SetView(Render *re, float mat[][4]) { /* re->ok flag? */ - Mat4CpyMat4(re->viewmat, mat); - Mat4Invert(re->viewinv, re->viewmat); + copy_m4_m4(re->viewmat, mat); + invert_m4_m4(re->viewinv, re->viewmat); } /* image and movie output has to move to either imbuf or kernel */ @@ -1511,7 +1511,7 @@ static RenderPart *find_next_pano_slice(Render *re, int *minx, rctf *viewplane) R.viewplane.xmin = viewplane->xmin + R.panodxv; R.viewplane.xmax = viewplane->xmax + R.panodxv; RE_SetWindow(re, &R.viewplane, R.clipsta, R.clipend); - Mat4CpyMat4(R.winmat, re->winmat); + copy_m4_m4(R.winmat, re->winmat); /* rotate database according to part coordinates */ project_renderdata(re, projectverto, 1, -R.panodxp*phi, 1); diff --git a/source/blender/render/intern/source/pixelblending.c b/source/blender/render/intern/source/pixelblending.c index 0e453d461ab..da9a698291c 100644 --- a/source/blender/render/intern/source/pixelblending.c +++ b/source/blender/render/intern/source/pixelblending.c @@ -34,7 +34,7 @@ #include <string.h> /* global includes */ -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_rand.h" /* own includes */ diff --git a/source/blender/render/intern/source/pixelshading.c b/source/blender/render/intern/source/pixelshading.c index de3a50acddf..d4b7c403f50 100644 --- a/source/blender/render/intern/source/pixelshading.c +++ b/source/blender/render/intern/source/pixelshading.c @@ -27,7 +27,7 @@ #include <float.h> #include <math.h> #include <string.h> -#include "BLI_arithb.h" +#include "BLI_math.h" /* External modules: */ #include "IMB_imbuf_types.h" @@ -155,7 +155,7 @@ static void render_lighting_halo(HaloRen *har, float *colf) /* rotate view to lampspace */ VECCOPY(lvrot, lv); - Mat3MulVecfl(lar->imat, lvrot); + mul_m3_v3(lar->imat, lvrot); x= MAX2(fabs(lvrot[0]/lvrot[2]) , fabs(lvrot[1]/lvrot[2])); /* 1.0/(sqrt(1+x*x)) is equivalent to cos(atan(x)) */ @@ -553,7 +553,7 @@ void shadeSkyView(float *colf, float *rco, float *view, float *dxyview, short th VECCOPY(lo, view); if(R.wrld.skytype & WO_SKYREAL) { - Mat3MulVecfl(R.imat, lo); + mul_m3_v3(R.imat, lo); SWAP(float, lo[1], lo[2]); @@ -594,11 +594,11 @@ void shadeSunView(float *colf, float *view) if(do_init) { VECCOPY(sview, view); - Normalize(sview); - Mat3MulVecfl(R.imat, sview); + normalize_v3(sview); + mul_m3_v3(R.imat, sview); if (sview[2] < 0.0) sview[2] = 0.0; - Normalize(sview); + normalize_v3(sview); do_init= 0; } @@ -654,7 +654,7 @@ void shadeSkyPixel(float *collector, float fx, float fy, short thread) } else { calc_view_vector(view, fx, fy); - fac= Normalize(view); + fac= normalize_v3(view); if(R.wrld.skytype & WO_SKYTEX) { dxyview[0]= -R.viewdx/fac; @@ -677,8 +677,8 @@ void shadeAtmPixel(struct SunSky *sunsky, float *collector, float fx, float fy, float view[3]; calc_view_vector(view, fx, fy); - Normalize(view); - /*Mat3MulVecfl(R.imat, view);*/ + normalize_v3(view); + /*mul_m3_v3(R.imat, view);*/ AtmospherePixleShader(sunsky, view, distance, collector); } diff --git a/source/blender/render/intern/source/pointdensity.c b/source/blender/render/intern/source/pointdensity.c index 2b3e6047af4..9ce77f751c0 100644 --- a/source/blender/render/intern/source/pointdensity.c +++ b/source/blender/render/intern/source/pointdensity.c @@ -29,7 +29,7 @@ #include "MEM_guardedalloc.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_kdopbvh.h" @@ -106,7 +106,7 @@ static void pointdensity_cache_psys(Render *re, PointDensity *pd, Object *ob, Pa /* init everything */ if (!psys || !ob || !pd) return; - Mat4MulMat4(obview, re->viewinv, ob->obmat); + mul_m4_m4m4(obview, re->viewinv, ob->obmat); /* Just to create a valid rendering context for particles */ psys_render_set(ob, psys, re->viewmat, re->winmat, re->winx, re->winy, 0); @@ -119,7 +119,7 @@ static void pointdensity_cache_psys(Render *re, PointDensity *pd, Object *ob, Pa } /* in case ob->imat isn't up-to-date */ - Mat4Invert(ob->imat, ob->obmat); + invert_m4_m4(ob->imat, ob->obmat); total_particles = psys->totpart+psys->totchild; psys->lattice=psys_get_lattice(&sim); @@ -140,11 +140,11 @@ static void pointdensity_cache_psys(Render *re, PointDensity *pd, Object *ob, Pa VECCOPY(partco, state.co); if (pd->psys_cache_space == TEX_PD_OBJECTSPACE) - Mat4MulVecfl(ob->imat, partco); + mul_m4_v3(ob->imat, partco); else if (pd->psys_cache_space == TEX_PD_OBJECTLOC) { float obloc[3]; VECCOPY(obloc, ob->loc); - VecSubf(partco, partco, obloc); + sub_v3_v3v3(partco, partco, obloc); } else { /* TEX_PD_WORLDSPACE */ } @@ -190,7 +190,6 @@ static void pointdensity_cache_object(Render *re, PointDensity *pd, Object *ob) int i; DerivedMesh *dm; MVert *mvert = NULL; - float cam_mat[4][4]; dm = mesh_create_derived_render(re->scene, ob, CD_MASK_BAREMESH|CD_MASK_MTFACE|CD_MASK_MCOL); mvert= dm->getVertArray(dm); /* local object space */ @@ -209,12 +208,12 @@ static void pointdensity_cache_object(Render *re, PointDensity *pd, Object *ob) case TEX_PD_OBJECTSPACE: break; case TEX_PD_OBJECTLOC: - Mat4MulVecfl(ob->obmat, co); - VecSubf(co, co, ob->loc); + mul_m4_v3(ob->obmat, co); + sub_v3_v3v3(co, co, ob->loc); break; case TEX_PD_WORLDSPACE: default: - Mat4MulVecfl(ob->obmat, co); + mul_m4_v3(ob->obmat, co); break; } @@ -391,7 +390,7 @@ int pointdensitytex(Tex *tex, float *texvec, TexResult *texres) num = BLI_bvhtree_range_query(pd->point_tree, co, pd->radius, accum_density, &pdr); if (num > 0) { age /= num; - VecMulf(vec, 1.0f/num); + mul_v3_fl(vec, 1.0f/num); } /* reset */ @@ -424,7 +423,7 @@ int pointdensitytex(Tex *tex, float *texvec, TexResult *texres) num = BLI_bvhtree_range_query(pd->point_tree, co, pd->radius, accum_density, &pdr); if (num > 0) { age /= num; - VecMulf(vec, 1.0f/num); + mul_v3_fl(vec, 1.0f/num); } texres->tin = density; @@ -448,7 +447,7 @@ int pointdensitytex(Tex *tex, float *texvec, TexResult *texres) break; case TEX_PD_COLOR_PARTSPEED: { - float speed = VecLength(vec) * pd->speed_scale; + float speed = len_v3(vec) * pd->speed_scale; if (pd->coba) { if (do_colorband(pd->coba, speed, col)) { @@ -462,7 +461,7 @@ int pointdensitytex(Tex *tex, float *texvec, TexResult *texres) } case TEX_PD_COLOR_PARTVEL: texres->talpha= 1; - VecMulf(vec, pd->speed_scale); + mul_v3_fl(vec, pd->speed_scale); VECCOPY(&texres->tr, vec); texres->ta = texres->tin; break; diff --git a/source/blender/render/intern/source/rayobject_blibvh.c b/source/blender/render/intern/source/rayobject_blibvh.c index 3fd71862f54..3579eb9007f 100644 --- a/source/blender/render/intern/source/rayobject_blibvh.c +++ b/source/blender/render/intern/source/rayobject_blibvh.c @@ -31,7 +31,7 @@ #include "MEM_guardedalloc.h" #include "BKE_utildefines.h" #include "BLI_kdopbvh.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "RE_raytrace.h" #include "render_types.h" #include "rayobject.h" @@ -120,7 +120,7 @@ static int RE_rayobject_blibvh_intersect(RayObject *o, Isect *isec) data.leafs = obj->leafs; VECCOPY(dir, isec->vec); - Normalize(dir); + normalize_v3(dir); hit.index = 0; hit.dist = isec->labda*isec->dist; diff --git a/source/blender/render/intern/source/rayobject_instance.c b/source/blender/render/intern/source/rayobject_instance.c index e2f4dc5a9dd..9ed184e532c 100644 --- a/source/blender/render/intern/source/rayobject_instance.c +++ b/source/blender/render/intern/source/rayobject_instance.c @@ -30,7 +30,7 @@ #include "MEM_guardedalloc.h" #include "BKE_utildefines.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "RE_raytrace.h" #include "rayobject.h" @@ -79,8 +79,8 @@ RayObject *RE_rayobject_instance_create(RayObject *target, float transform[][4], obj->ob = ob; obj->target_ob = target_ob; - Mat4CpyMat4(obj->target2global, transform); - Mat4Invert(obj->global2target, obj->target2global); + copy_m4_m4(obj->target2global, transform); + invert_m4_m4(obj->global2target, obj->target2global); return RE_rayobject_unalignRayAPI((RayObject*) obj); } @@ -111,10 +111,10 @@ static int RE_rayobject_instance_intersect(RayObject *o, Isect *isec) //Transform to target coordinates system VECADD( isec->vec, isec->vec, isec->start ); - Mat4MulVecfl(obj->global2target, isec->start); - Mat4MulVecfl(obj->global2target, isec->vec ); + mul_m4_v3(obj->global2target, isec->start); + mul_m4_v3(obj->global2target, isec->vec ); - isec->dist = VecLenf( isec->start, isec->vec ); + isec->dist = len_v3v3( isec->start, isec->vec ); VECSUB( isec->vec, isec->vec, isec->start ); isec->labda *= isec->dist / dist; @@ -194,7 +194,7 @@ static void RE_rayobject_instance_bb(RayObject *o, float *min, float *max) for(i=0; i<8; i++) { for(j=0; j<3; j++) t[j] = i&(1<<j) ? M[j] : m[j]; - Mat4MulVecfl(obj->target2global, t); + mul_m4_v3(obj->target2global, t); DO_MINMAX(t, min, max); } } diff --git a/source/blender/render/intern/source/rayobject_octree.c b/source/blender/render/intern/source/rayobject_octree.c index 2f0a1a3f53b..7c29db6a4bb 100644 --- a/source/blender/render/intern/source/rayobject_octree.c +++ b/source/blender/render/intern/source/rayobject_octree.c @@ -40,7 +40,7 @@ #include "BKE_utildefines.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "rayobject.h" @@ -226,7 +226,7 @@ static int face_in_node(RayFace *face, short x, short y, short z, float rtf[][3] // init static vars if(face) { - CalcNormFloat(rtf[0], rtf[1], rtf[2], nor); + normal_tri_v3( nor,rtf[0], rtf[1], rtf[2]); d= -nor[0]*rtf[0][0] - nor[1]*rtf[0][1] - nor[2]*rtf[0][2]; return 0; } diff --git a/source/blender/render/intern/source/rayshade.c b/source/blender/render/intern/source/rayshade.c index 7043837166a..85442480a9c 100644 --- a/source/blender/render/intern/source/rayshade.c +++ b/source/blender/render/intern/source/rayshade.c @@ -41,7 +41,7 @@ #include "BKE_node.h" #include "BKE_utildefines.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_jitter.h" #include "BLI_rand.h" @@ -397,11 +397,11 @@ static void makeraytree_single(Render *re) RE_rayface_from_vlak(face, obi, vlr); if((obi->flag & R_TRANSFORMED)) { - Mat4MulVecfl(obi->mat, face->v1); - Mat4MulVecfl(obi->mat, face->v2); - Mat4MulVecfl(obi->mat, face->v3); + mul_m4_v3(obi->mat, face->v1); + mul_m4_v3(obi->mat, face->v2); + mul_m4_v3(obi->mat, face->v3); if(RE_rayface_isQuad(face)) - Mat4MulVecfl(obi->mat, face->v4); + mul_m4_v3(obi->mat, face->v4); } RE_rayobject_add( raytree, RE_rayobject_unalignRayFace(face) ); @@ -481,7 +481,7 @@ void shade_ray(Isect *is, ShadeInput *shi, ShadeResult *shr) shi->co[1]= is->start[1]+is->labda*(shi->view[1]); shi->co[2]= is->start[2]+is->labda*(shi->view[2]); - Normalize(shi->view); + normalize_v3(shi->view); shi->obi= obi; shi->obr= obi->obr; @@ -674,7 +674,7 @@ static void ray_fadeout_endcolor(float *col, ShadeInput *origshi, ShadeInput *sh VECCOPY(col, shr->combined); } else if (origshi->mat->fadeto_mir == MA_RAYMIR_FADETOSKY) { VECCOPY(shi->view, vec); - Normalize(shi->view); + normalize_v3(shi->view); shadeSkyView(col, isec->start, shi->view, NULL, shi->thread); shadeSunView(col, shi->view); @@ -686,7 +686,7 @@ static void ray_fadeout(Isect *is, ShadeInput *shi, float *col, float *blendcol, /* if fading out, linear blend against fade color */ float blendfac; - blendfac = 1.0 - VecLenf(shi->co, is->start)/dist_mir; + blendfac = 1.0 - len_v3v3(shi->co, is->start)/dist_mir; col[0] = col[0]*blendfac + (1.0 - blendfac)*blendcol[0]; col[1] = col[1]*blendfac + (1.0 - blendfac)*blendcol[1]; @@ -1297,15 +1297,15 @@ static void trace_refract(float *col, ShadeInput *shi, ShadeResult *shr) /* get a quasi-random vector from a phong-weighted disc */ QMC_samplePhong(samp3d, qsa, shi->thread, samples, blur); - VecOrthoBasisf(v_refract, orthx, orthy); - VecMulf(orthx, samp3d[0]); - VecMulf(orthy, samp3d[1]); + ortho_basis_v3v3_v3( orthx, orthy,v_refract); + mul_v3_fl(orthx, samp3d[0]); + mul_v3_fl(orthy, samp3d[1]); /* and perturb the refraction vector in it */ - VecAddf(v_refract_new, v_refract, orthx); - VecAddf(v_refract_new, v_refract_new, orthy); + add_v3_v3v3(v_refract_new, v_refract, orthx); + add_v3_v3v3(v_refract_new, v_refract_new, orthy); - Normalize(v_refract_new); + normalize_v3(v_refract_new); } else { /* no blurriness, use the original normal */ VECCOPY(v_refract_new, v_refract); @@ -1384,20 +1384,20 @@ static void trace_reflect(float *col, ShadeInput *shi, ShadeResult *shr, float f /* find the normal's perpendicular plane, blurring along tangents * if tangent shading enabled */ if (shi->mat->mode & (MA_TANGENT_V)) { - Crossf(orthx, shi->vn, shi->tang); // bitangent + cross_v3_v3v3(orthx, shi->vn, shi->tang); // bitangent VECCOPY(orthy, shi->tang); - VecMulf(orthx, samp3d[0]); - VecMulf(orthy, samp3d[1]*aniso); + mul_v3_fl(orthx, samp3d[0]); + mul_v3_fl(orthy, samp3d[1]*aniso); } else { - VecOrthoBasisf(shi->vn, orthx, orthy); - VecMulf(orthx, samp3d[0]); - VecMulf(orthy, samp3d[1]); + ortho_basis_v3v3_v3( orthx, orthy,shi->vn); + mul_v3_fl(orthx, samp3d[0]); + mul_v3_fl(orthy, samp3d[1]); } /* and perturb the normal in it */ - VecAddf(v_nor_new, shi->vn, orthx); - VecAddf(v_nor_new, v_nor_new, orthy); - Normalize(v_nor_new); + add_v3_v3v3(v_nor_new, shi->vn, orthx); + add_v3_v3v3(v_nor_new, v_nor_new, orthy); + normalize_v3(v_nor_new); } else { /* no blurriness, use the original normal */ VECCOPY(v_nor_new, shi->vn); @@ -1706,7 +1706,7 @@ static void DS_energy(float *sphere, int tot, float *vec) res[0]= res[1]= res[2]= 0.0f; for(a=0, fp=sphere; a<tot; a++, fp+=3) { - VecSubf(force, vec, fp); + sub_v3_v3v3(force, vec, fp); fac= force[0]*force[0] + force[1]*force[1] + force[2]*force[2]; if(fac!=0.0f) { fac= 1.0f/fac; @@ -1716,9 +1716,9 @@ static void DS_energy(float *sphere, int tot, float *vec) } } - VecMulf(res, 0.5); - VecAddf(vec, vec, res); - Normalize(vec); + mul_v3_fl(res, 0.5); + add_v3_v3v3(vec, vec, res); + normalize_v3(vec); } @@ -1881,7 +1881,7 @@ static void ray_ao_qmc(ShadeInput *shi, float *shadfac) VECCOPY(nrm, shi->facenor); } - VecOrthoBasisf(nrm, up, side); + ortho_basis_v3v3_v3( up, side,nrm); /* sampling init */ if (R.wrld.ao_samp_method==WO_AOSAMP_HALTON) { @@ -1908,7 +1908,7 @@ static void ray_ao_qmc(ShadeInput *shi, float *shadfac) dir[1] = (samp3d[0]*up[1] + samp3d[1]*side[1] + samp3d[2]*nrm[1]); dir[2] = (samp3d[0]*up[2] + samp3d[1]*side[2] + samp3d[2]*nrm[2]); - Normalize(dir); + normalize_v3(dir); isec.vec[0] = -dir[0]; isec.vec[1] = -dir[1]; @@ -1928,7 +1928,7 @@ static void ray_ao_qmc(ShadeInput *shi, float *shadfac) view[0]= -dir[0]; view[1]= -dir[1]; view[2]= -dir[2]; - Normalize(view); + normalize_v3(view); if(aocolor==WO_AOSKYCOL) { skyfac= 0.5*(1.0f+view[0]*R.grvec[0]+ view[1]*R.grvec[1]+ view[2]*R.grvec[2]); @@ -2064,7 +2064,7 @@ static void ray_ao_spheresamp(ShadeInput *shi, float *shadfac) view[0]= -vec[0]; view[1]= -vec[1]; view[2]= -vec[2]; - Normalize(view); + normalize_v3(view); if(aocolor==WO_AOSKYCOL) { fac= 0.5*(1.0f+view[0]*R.grvec[0]+ view[1]*R.grvec[1]+ view[2]*R.grvec[2]); @@ -2230,8 +2230,8 @@ static void ray_shadow_qmc(ShadeInput *shi, LampRen *lar, float *lampco, float * v[0] = co[0] - lampco[0]; v[1] = co[1] - lampco[1]; v[2] = co[2] - lampco[2]; - Normalize(v); - VecOrthoBasisf(v, ru, rv); + normalize_v3(v); + ortho_basis_v3v3_v3( ru, rv,v); /* sampling, returns quasi-random vector in area_size disc */ QMC_sampleDisc(samp3d, qsa, shi->thread, samples,lar->area_size); @@ -2248,7 +2248,7 @@ static void ray_shadow_qmc(ShadeInput *shi, LampRen *lar, float *lampco, float * QMC_sampleRect(samp3d, qsa, shi->thread, samples, lar->area_size, lar->area_sizey); /* align samples to lamp vector */ - Mat3MulVecfl(lar->mat, samp3d); + mul_m3_v3(lar->mat, samp3d); } end[0] = vec[0]+samp3d[0]; end[1] = vec[1]+samp3d[1]; @@ -2259,11 +2259,11 @@ static void ray_shadow_qmc(ShadeInput *shi, LampRen *lar, float *lampco, float * if(shi->strand) { /* bias away somewhat to avoid self intersection */ - float jitbias= 0.5f*(VecLength(shi->dxco) + VecLength(shi->dyco)); + float jitbias= 0.5f*(len_v3(shi->dxco) + len_v3(shi->dyco)); float v[3]; VECSUB(v, co, end); - Normalize(v); + normalize_v3(v); co[0] -= jitbias*v[0]; co[1] -= jitbias*v[1]; @@ -2274,7 +2274,7 @@ static void ray_shadow_qmc(ShadeInput *shi, LampRen *lar, float *lampco, float * isec->vec[0] = end[0]-isec->start[0]; isec->vec[1] = end[1]-isec->start[1]; isec->vec[2] = end[2]-isec->start[2]; - isec->labda = 1.0f; // * Normalize(isec->vec); + isec->labda = 1.0f; // * normalize_v3(isec->vec); /* trace the ray */ if(isec->mode==RE_RAY_SHADOW_TRA) { @@ -2370,7 +2370,7 @@ static void ray_shadow_jitter(ShadeInput *shi, LampRen *lar, float *lampco, floa vec[0]= jitlamp[0]; vec[1]= jitlamp[1]; vec[2]= 0.0f; - Mat3MulVecfl(lar->mat, vec); + mul_m3_v3(lar->mat, vec); /* set start and vec */ isec->vec[0] = vec[0]+lampco[0]-isec->start[0]; @@ -2537,7 +2537,7 @@ static void ray_translucent(ShadeInput *shi, LampRen *lar, float *distfac, float co[1]= isec.start[1]+isec.labda*(isec.vec[1]); co[2]= isec.start[2]+isec.labda*(isec.vec[2]); - *distfac= VecLength(isec.vec); + *distfac= len_v3(isec.vec); } else *distfac= 0.0f; diff --git a/source/blender/render/intern/source/rendercore.c b/source/blender/render/intern/source/rendercore.c index 6c18592b8d2..cae6c640f8b 100644 --- a/source/blender/render/intern/source/rendercore.c +++ b/source/blender/render/intern/source/rendercore.c @@ -36,7 +36,7 @@ /* External modules: */ #include "MEM_guardedalloc.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_jitter.h" #include "BLI_rand.h" @@ -1498,13 +1498,13 @@ static void shade_sample_sss(ShadeSample *ssamp, Material *mat, ObjectInstanceRe VECCOPY(nor, shi->facenor); calc_view_vector(shi->facenor, sx, sy); - Normalize(shi->facenor); + normalize_v3(shi->facenor); shade_input_set_viewco(shi, x, y, sx, sy, z); - orthoarea= VecLength(shi->dxco)*VecLength(shi->dyco); + orthoarea= len_v3(shi->dxco)*len_v3(shi->dyco); VECCOPY(shi->facenor, nor); shade_input_set_viewco(shi, x, y, sx, sy, z); - *area= VecLength(shi->dxco)*VecLength(shi->dyco); + *area= len_v3(shi->dxco)*len_v3(shi->dyco); *area= MIN2(*area, 2.0f*orthoarea); shade_input_set_uv(shi); @@ -1516,8 +1516,8 @@ static void shade_sample_sss(ShadeSample *ssamp, Material *mat, ObjectInstanceRe /* not a pretty solution, but fixes common cases */ if(shi->obr->ob && shi->obr->ob->transflag & OB_NEG_SCALE) { - VecNegf(shi->vn); - VecNegf(shi->vno); + negate_v3(shi->vn); + negate_v3(shi->vno); } /* if nodetree, use the material that we are currently preprocessing @@ -2148,24 +2148,24 @@ static void bake_shade(void *handle, Object *ob, ShadeInput *shi, int quad, int /* bitangent */ if(tvn && ttang) { VECCOPY(mat[0], ttang); - Crossf(mat[1], tvn, ttang); + cross_v3_v3v3(mat[1], tvn, ttang); VECCOPY(mat[2], tvn); } else { VECCOPY(mat[0], shi->nmaptang); - Crossf(mat[1], shi->vn, shi->nmaptang); + cross_v3_v3v3(mat[1], shi->vn, shi->nmaptang); VECCOPY(mat[2], shi->vn); } - Mat3Inv(imat, mat); - Mat3MulVecfl(imat, nor); + invert_m3_m3(imat, mat); + mul_m3_v3(imat, nor); } else if(R.r.bake_normal_space == R_BAKE_SPACE_OBJECT) - Mat4Mul3Vecfl(ob->imat, nor); /* ob->imat includes viewinv! */ + mul_mat3_m4_v3(ob->imat, nor); /* ob->imat includes viewinv! */ else if(R.r.bake_normal_space == R_BAKE_SPACE_WORLD) - Mat4Mul3Vecfl(R.viewinv, nor); + mul_mat3_m4_v3(R.viewinv, nor); - Normalize(nor); /* in case object has scaling */ + normalize_v3(nor); /* in case object has scaling */ shr.combined[0]= nor[0]/2.0f + 0.5f; shr.combined[1]= 0.5f - nor[1]/2.0f; @@ -2278,7 +2278,7 @@ static int bake_intersect_tree(RayObject* raytree, Isect* isect, float *start, f hitco[1] = isect->start[1] + isect->labda*isect->vec[1]; hitco[2] = isect->start[2] + isect->labda*isect->vec[2]; - *dist= VecLenf(start, hitco); + *dist= len_v3v3(start, hitco); } return hit; @@ -2330,8 +2330,8 @@ static void bake_set_vlr_dxyco(BakeShade *bs, float *uv1, float *uv2, float *uv3 } if(bs->obi->flag & R_TRANSFORMED) { - Mat3MulVecfl(bs->obi->nmat, bs->dxco); - Mat3MulVecfl(bs->obi->nmat, bs->dyco); + mul_m3_v3(bs->obi->nmat, bs->dxco); + mul_m3_v3(bs->obi->nmat, bs->dyco); } } @@ -2370,7 +2370,7 @@ static void do_bake_shade(void *handle, int x, int y, float u, float v) shi->co[2]= l*v3[2]+u*v1[2]+v*v2[2]; if(obi->flag & R_TRANSFORMED) - Mat4MulVecfl(obi->mat, shi->co); + mul_m4_v3(obi->mat, shi->co); VECCOPY(shi->dxco, bs->dxco); VECCOPY(shi->dyco, bs->dyco); @@ -2406,7 +2406,7 @@ static void do_bake_shade(void *handle, int x, int y, float u, float v) isec.userdata= bs; if(bake_intersect_tree(R.raytree, &isec, shi->co, shi->vn, sign, co, &dist)) { - if(!hit || VecLenf(shi->co, co) < VecLenf(shi->co, minco)) { + if(!hit || len_v3v3(shi->co, co) < len_v3v3(shi->co, minco)) { minisec= isec; mindist= dist; VECCOPY(minco, co); diff --git a/source/blender/render/intern/source/renderdatabase.c b/source/blender/render/intern/source/renderdatabase.c index 54863ef3295..75e58648cd5 100644 --- a/source/blender/render/intern/source/renderdatabase.c +++ b/source/blender/render/intern/source/renderdatabase.c @@ -60,7 +60,7 @@ #include "MEM_guardedalloc.h" #include "BKE_utildefines.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_ghash.h" #include "BLI_memarena.h" @@ -448,8 +448,8 @@ int RE_vlakren_get_normal(Render *re, ObjectInstanceRen *obi, VlakRen *vlr, floa if(obi->flag & R_TRANSFORMED) { VECCOPY(nor, vlr->n); - Mat3MulVecfl(nmat, nor); - Normalize(nor); + mul_m3_v3(nmat, nor); + normalize_v3(nor); } else VECCOPY(nor, vlr->n); @@ -462,7 +462,7 @@ int RE_vlakren_get_normal(Render *re, ObjectInstanceRen *obi, VlakRen *vlr, floa else { VECCOPY(v1, vlr->v1->co); if(obi->flag & R_TRANSFORMED) - Mat4MulVecfl(obi->mat, v1); + mul_m4_v3(obi->mat, v1); if(INPR(v1, nor) < 0.0f) { flipped= 1; } @@ -995,12 +995,12 @@ HaloRen *RE_inithalo(Render *re, ObjectRen *obr, Material *ma, float *vec, f har->sin= sin(zn); har->cos= cos(zn); - zn= VecLenf(vec1, vec); + zn= len_v3v3(vec1, vec); har->hasize= vectsize*zn + (1.0-vectsize)*hasize; - VecSubf(har->no, vec, vec1); - Normalize(har->no); + sub_v3_v3v3(har->no, vec, vec1); + normalize_v3(har->no); } if(ma->mode & MA_HALO_XALPHA) har->type |= HA_XALPHA; @@ -1035,7 +1035,7 @@ HaloRen *RE_inithalo(Render *re, ObjectRen *obr, Material *ma, float *vec, f /* texvec[0]+= imatbase->ivec[0]; */ /* texvec[1]+= imatbase->ivec[1]; */ /* texvec[2]+= imatbase->ivec[2]; */ - /* Mat3MulVecfl(imatbase->imat, texvec); */ + /* mul_m3_v3(imatbase->imat, texvec); */ } else { if(orco) { @@ -1108,12 +1108,12 @@ HaloRen *RE_inithalo_particle(Render *re, ObjectRen *obr, DerivedMesh *dm, Mater har->sin= sin(zn); har->cos= cos(zn); - zn= VecLenf(vec1, vec)*0.5; + zn= len_v3v3(vec1, vec)*0.5; har->hasize= vectsize*zn + (1.0-vectsize)*hasize; - VecSubf(har->no, vec, vec1); - Normalize(har->no); + sub_v3_v3v3(har->no, vec, vec1); + normalize_v3(har->no); } if(ma->mode & MA_HALO_XALPHA) har->type |= HA_XALPHA; @@ -1149,13 +1149,13 @@ HaloRen *RE_inithalo_particle(Render *re, ObjectRen *obr, DerivedMesh *dm, Mater if(mtex->object){ float imat[4][4]; /* imat should really be cached somewhere before this */ - Mat4Invert(imat,mtex->object->obmat); - Mat4MulVecfl(imat,texvec); + invert_m4_m4(imat,mtex->object->obmat); + mul_m4_v3(imat,texvec); } /* texvec[0]+= imatbase->ivec[0]; */ /* texvec[1]+= imatbase->ivec[1]; */ /* texvec[2]+= imatbase->ivec[2]; */ - /* Mat3MulVecfl(imatbase->imat, texvec); */ + /* mul_m3_v3(imatbase->imat, texvec); */ } else if(mtex->texco & TEXCO_GLOB){ VECCOPY(texvec,vec); @@ -1349,10 +1349,10 @@ ObjectInstanceRen *RE_addRenderInstance(Render *re, ObjectRen *obr, Object *ob, obi->lay= lay; if(mat) { - Mat4CpyMat4(obi->mat, mat); - Mat3CpyMat4(mat3, mat); - Mat3Inv(obi->nmat, mat3); - Mat3Transp(obi->nmat); + copy_m4_m4(obi->mat, mat); + copy_m3_m4(mat3, mat); + invert_m3_m3(obi->nmat, mat3); + transpose_m3(obi->nmat); obi->flag |= R_DUPLI_TRANSFORMED; } @@ -1395,14 +1395,14 @@ int clip_render_object(float boundbox[][3], float *bounds, float winmat[][4]) float mat[4][4], vec[4]; int a, fl, flag= -1; - Mat4CpyMat4(mat, winmat); + copy_m4_m4(mat, winmat); for(a=0; a<8; a++) { vec[0]= (a & 1)? boundbox[0][0]: boundbox[1][0]; vec[1]= (a & 2)? boundbox[0][1]: boundbox[1][1]; vec[2]= (a & 4)? boundbox[0][2]: boundbox[1][2]; vec[3]= 1.0; - Mat4MulVec4fl(mat, vec); + mul_m4_v4(mat, vec); fl= 0; if(bounds) { diff --git a/source/blender/render/intern/source/shadbuf.c b/source/blender/render/intern/source/shadbuf.c index 50e0321a6eb..f8428680135 100644 --- a/source/blender/render/intern/source/shadbuf.c +++ b/source/blender/render/intern/source/shadbuf.c @@ -37,7 +37,7 @@ #include "BKE_scene.h" #include "BKE_utildefines.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_jitter.h" #include "BLI_memarena.h" @@ -613,7 +613,7 @@ static void shadowbuf_autoclip(Render *re, LampRen *lar) char *clipflag; minz= 1.0e30f; maxz= -1.0e30f; - Mat4CpyMat4(viewmat, lar->shb->viewmat); + copy_m4_m4(viewmat, lar->shb->viewmat); if(lar->mode & (LA_LAYER|LA_LAYER_SHADOW)) lay= lar->lay; @@ -628,9 +628,9 @@ static void shadowbuf_autoclip(Render *re, LampRen *lar) obr= obi->obr; if(obi->flag & R_TRANSFORMED) - Mat4MulMat4(obviewmat, obi->mat, viewmat); + mul_m4_m4m4(obviewmat, obi->mat, viewmat); else - Mat4CpyMat4(obviewmat, viewmat); + copy_m4_m4(obviewmat, viewmat); memset(clipflag, 0, sizeof(char)*obr->totvert); @@ -661,7 +661,7 @@ static void shadowbuf_autoclip(Render *re, LampRen *lar) if(clipflag[a]) { VECCOPY(vec, ver->co); - Mat4MulVecfl(obviewmat, vec); + mul_m4_v3(obviewmat, vec); /* Z on visible side of lamp space */ if(vec[2] < 0.0f) { float inpr, z= -vec[2]; @@ -669,7 +669,7 @@ static void shadowbuf_autoclip(Render *re, LampRen *lar) /* since vec is rotated in lampspace, this is how to get the cosine of angle */ /* precision is set 20% larger */ vec[2]*= 1.2f; - Normalize(vec); + normalize_v3(vec); inpr= - vec[2]; if(inpr>=lar->spotsi) { @@ -764,8 +764,8 @@ void makeshadowbuf(Render *re, LampRen *lar) shb->pixsize= (shb->d)/temp; wsize= shb->pixsize*(shb->size/2.0); - i_window(-wsize, wsize, -wsize, wsize, shb->d, shb->clipend, shb->winmat); - Mat4MulMat4(shb->persmat, shb->viewmat, shb->winmat); + perspective_m4( shb->winmat,-wsize, wsize, -wsize, wsize, shb->d, shb->clipend); + mul_m4_m4m4(shb->persmat, shb->viewmat, shb->winmat); if(ELEM3(lar->buftype, LA_SHADBUF_REGULAR, LA_SHADBUF_HALFWAY, LA_SHADBUF_DEEP)) { shb->totbuf= lar->buffers; @@ -1107,7 +1107,7 @@ float testshadowbuf(Render *re, ShadBuf *shb, float *rco, float *dxco, float *dy VECCOPY(co, rco); co[3]= 1.0f; - Mat4MulVec4fl(shb->persmat, co); /* rational hom co */ + mul_m4_v4(shb->persmat, co); /* rational hom co */ xs1= siz*(1.0f+co[0]/co[3]); ys1= siz*(1.0f+co[1]/co[3]); @@ -1148,7 +1148,7 @@ float testshadowbuf(Render *re, ShadBuf *shb, float *rco, float *dxco, float *dy co[1]= rco[1]+dxco[1]; co[2]= rco[2]+dxco[2]; co[3]= 1.0; - Mat4MulVec4fl(shb->persmat,co); /* rational hom co */ + mul_m4_v4(shb->persmat,co); /* rational hom co */ dx[0]= xs1- siz*(1.0+co[0]/co[3]); dx[1]= ys1- siz*(1.0+co[1]/co[3]); @@ -1156,7 +1156,7 @@ float testshadowbuf(Render *re, ShadBuf *shb, float *rco, float *dxco, float *dy co[1]= rco[1]+dyco[1]; co[2]= rco[2]+dyco[2]; co[3]= 1.0; - Mat4MulVec4fl(shb->persmat,co); /* rational hom co */ + mul_m4_v4(shb->persmat,co); /* rational hom co */ dy[0]= xs1- siz*(1.0+co[0]/co[3]); dy[1]= ys1- siz*(1.0+co[1]/co[3]); @@ -1292,7 +1292,7 @@ float shadow_halo(LampRen *lar, float *p1, float *p2) co[1]= p1[1]; co[2]= p1[2]/lar->sh_zfac; co[3]= 1.0; - Mat4MulVec4fl(shb->winmat, co); /* rational hom co */ + mul_m4_v4(shb->winmat, co); /* rational hom co */ xf1= siz*(1.0+co[0]/co[3]); yf1= siz*(1.0+co[1]/co[3]); zf1= (co[2]/co[3]); @@ -1302,7 +1302,7 @@ float shadow_halo(LampRen *lar, float *p1, float *p2) co[1]= p2[1]; co[2]= p2[2]/lar->sh_zfac; co[3]= 1.0; - Mat4MulVec4fl(shb->winmat, co); /* rational hom co */ + mul_m4_v4(shb->winmat, co); /* rational hom co */ xf2= siz*(1.0+co[0]/co[3]); yf2= siz*(1.0+co[1]/co[3]); zf2= (co[2]/co[3]); @@ -1635,9 +1635,9 @@ static void bspface_init_strand(BSPFace *face) face->radline= 0.5f*VecLen2f(face->v1, face->v2); - VecMidf(face->vec1, face->v1, face->v2); + mid_v3_v3v3(face->vec1, face->v1, face->v2); if(face->v4) - VecMidf(face->vec2, face->v3, face->v4); + mid_v3_v3v3(face->vec2, face->v3, face->v4); else VECCOPY(face->vec2, face->v3); @@ -1659,7 +1659,7 @@ static int point_behind_strand(float *p, BSPFace *face) /* v1 - v2 is radius, v1 - v3 length */ float dist, rc[2], pt[2]; - /* using code from PdistVL2Dfl(), distance vec to line-piece */ + /* using code from dist_to_line_segment_v2(), distance vec to line-piece */ if(face->len==0.0f) { rc[0]= p[0]-face->vec1[0]; @@ -1977,9 +1977,9 @@ static void isb_bsp_fillfaces(Render *re, LampRen *lar, ISBBranch *root) obr= obi->obr; if(obi->flag & R_TRANSFORMED) - Mat4MulMat4(winmat, obi->mat, shb->persmat); + mul_m4_m4m4(winmat, obi->mat, shb->persmat); else - Mat4CpyMat4(winmat, shb->persmat); + copy_m4_m4(winmat, shb->persmat); for(a=0; a<obr->totvlak; a++) { @@ -2055,7 +2055,7 @@ static int viewpixel_to_lampbuf(ShadBuf *shb, ObjectInstanceRen *obi, VlakRen *v RE_vlakren_get_normal(&R, obi, vlr, nor); VECCOPY(v1, vlr->v1->co); if(obi->flag & R_TRANSFORMED) - Mat4MulVecfl(obi->mat, v1); + mul_m4_v3(obi->mat, v1); /* from shadepixel() */ dface= v1[0]*nor[0] + v1[1]*nor[1] + v1[2]*nor[2]; @@ -2093,7 +2093,7 @@ static int viewpixel_to_lampbuf(ShadBuf *shb, ObjectInstanceRen *obi, VlakRen *v } /* move 3d vector to lampbuf */ - Mat4MulVec4fl(shb->persmat, hoco); /* rational hom co */ + mul_m4_v4(shb->persmat, hoco); /* rational hom co */ /* clip We can test for -1.0/1.0 because of the properties of the * coordinate transformations. */ diff --git a/source/blender/render/intern/source/shadeinput.c b/source/blender/render/intern/source/shadeinput.c index 79ee6c89460..396c713cfb7 100644 --- a/source/blender/render/intern/source/shadeinput.c +++ b/source/blender/render/intern/source/shadeinput.c @@ -30,7 +30,7 @@ #include <string.h> -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "DNA_curve_types.h" @@ -212,7 +212,7 @@ void shade_input_do_shade(ShadeInput *shi, ShadeResult *shr) if(R.r.mode & R_ORTHO) shr->mist= mistfactor(-shi->co[2], shi->co); else - shr->mist= mistfactor(VecLength(shi->co), shi->co); + shr->mist= mistfactor(len_v3(shi->co), shi->co); } else shr->mist= 0.0f; @@ -227,7 +227,7 @@ void shade_input_do_shade(ShadeInput *shi, ShadeResult *shr) shr->combined[3]= fac; if (shi->mat->material_type!= MA_TYPE_VOLUME) - VecMulf(shr->combined, fac); + mul_v3_fl(shr->combined, fac); } else shr->combined[3]= 1.0f; @@ -314,9 +314,9 @@ void shade_input_set_triangle_i(ShadeInput *shi, ObjectInstanceRen *obi, VlakRen VECCOPY(shi->n3, shi->v3->n); if(obi->flag & R_TRANSFORMED) { - Mat3MulVecfl(obi->nmat, shi->n1); - Mat3MulVecfl(obi->nmat, shi->n2); - Mat3MulVecfl(obi->nmat, shi->n3); + mul_m3_v3(obi->nmat, shi->n1); + mul_m3_v3(obi->nmat, shi->n2); + mul_m3_v3(obi->nmat, shi->n3); } if(!(vlr->flag & (R_NOPUNOFLIP|R_TANGENT))) { @@ -384,7 +384,7 @@ void shade_input_set_strand(ShadeInput *shi, StrandRen *strand, StrandPoint *spo /* shade_input_set_viewco equivalent */ VECCOPY(shi->co, spoint->co); VECCOPY(shi->view, shi->co); - Normalize(shi->view); + normalize_v3(shi->view); shi->xs= (int)spoint->x; shi->ys= (int)spoint->y; @@ -407,12 +407,12 @@ void shade_input_set_strand(ShadeInput *shi, StrandRen *strand, StrandPoint *spo else { float cross[3]; - Crossf(cross, spoint->co, spoint->tan); - Crossf(shi->vn, cross, spoint->tan); - Normalize(shi->vn); + cross_v3_v3v3(cross, spoint->co, spoint->tan); + cross_v3_v3v3(shi->vn, cross, spoint->tan); + normalize_v3(shi->vn); if(INPR(shi->vn, shi->view) < 0.0f) - VecNegf(shi->vn); + negate_v3(shi->vn); } VECCOPY(shi->vno, shi->vn); @@ -450,8 +450,8 @@ void shade_input_set_strand_texco(ShadeInput *shi, StrandRen *strand, StrandVert if(shi->mat->strand_surfnor > 0.0f) { shi->surfdist= 0.0f; for(sv=strand->vert; sv!=svert; sv++) - shi->surfdist+=VecLenf(sv->co, (sv+1)->co); - shi->surfdist += spoint->t*VecLenf(sv->co, (sv+1)->co); + shi->surfdist+=len_v3v3(sv->co, (sv+1)->co); + shi->surfdist += spoint->t*len_v3v3(sv->co, (sv+1)->co); } } @@ -474,13 +474,13 @@ void shade_input_set_strand_texco(ShadeInput *shi, StrandRen *strand, StrandVert if(texco & TEXCO_GLOB) { VECCOPY(shi->gl, shi->co); - Mat4MulVecfl(R.viewinv, shi->gl); + mul_m4_v3(R.viewinv, shi->gl); if(shi->osatex) { VECCOPY(shi->dxgl, shi->dxco); - Mat3MulVecfl(R.imat, shi->dxco); + mul_m3_v3(R.imat, shi->dxco); VECCOPY(shi->dygl, shi->dyco); - Mat3MulVecfl(R.imat, shi->dyco); + mul_m3_v3(R.imat, shi->dyco); } } @@ -652,7 +652,7 @@ void shade_input_calc_viewco(ShadeInput *shi, float x, float y, float z, float * VECCOPY(v1, shi->v1->co); if(shi->obi->flag & R_TRANSFORMED) - Mat4MulVecfl(shi->obi->mat, v1); + mul_m4_v3(shi->obi->mat, v1); dface= v1[0]*shi->facenor[0]+v1[1]*shi->facenor[1]+v1[2]*shi->facenor[2]; @@ -731,7 +731,7 @@ void shade_input_calc_viewco(ShadeInput *shi, float x, float y, float z, float * shi->camera_co[0] = shi->camera_co[1] = shi->camera_co[2] = 0.0f; /* cannot normalize earlier, code above needs it at viewplane level */ - Normalize(view); + normalize_v3(view); } /* from scanline pixel coordinates to 3d coordinates, requires set_triangle */ @@ -773,17 +773,17 @@ void shade_input_set_uv(ShadeInput *shi) VECCOPY(v3, shi->v3->co); if(shi->obi->flag & R_TRANSFORMED) { - Mat4MulVecfl(shi->obi->mat, v1); - Mat4MulVecfl(shi->obi->mat, v2); - Mat4MulVecfl(shi->obi->mat, v3); + mul_m4_v3(shi->obi->mat, v1); + mul_m4_v3(shi->obi->mat, v2); + mul_m4_v3(shi->obi->mat, v3); } /* exception case for wire render of edge */ if(vlr->v2==vlr->v3) { float lend, lenc; - lend= VecLenf(v2, v1); - lenc= VecLenf(shi->co, v1); + lend= len_v3v3(v2, v1); + lenc= len_v3v3(shi->co, v1); if(lend==0.0f) { shi->u=shi->v= 0.0f; @@ -851,7 +851,7 @@ void shade_input_set_normals(ShadeInput *shi) shi->vn[1]= l*n3[1]-u*n1[1]-v*n2[1]; shi->vn[2]= l*n3[2]-u*n1[2]-v*n2[2]; - Normalize(shi->vn); + normalize_v3(shi->vn); } else VECCOPY(shi->vn, shi->facenor); @@ -939,9 +939,9 @@ void shade_input_set_shade_texco(ShadeInput *shi) shi->tang[2]= (tl*s3[2] - tu*s1[2] - tv*s2[2]); if(obi->flag & R_TRANSFORMED) - Mat3MulVecfl(obi->nmat, shi->tang); + mul_m3_v3(obi->nmat, shi->tang); - Normalize(shi->tang); + normalize_v3(shi->tang); VECCOPY(shi->nmaptang, shi->tang); } } @@ -963,9 +963,9 @@ void shade_input_set_shade_texco(ShadeInput *shi) shi->nmaptang[2]= (tl*s3[2] - tu*s1[2] - tv*s2[2]); if(obi->flag & R_TRANSFORMED) - Mat3MulVecfl(obi->nmat, shi->nmaptang); + mul_m3_v3(obi->nmat, shi->nmaptang); - Normalize(shi->nmaptang); + normalize_v3(shi->nmaptang); } } } @@ -976,7 +976,7 @@ void shade_input_set_shade_texco(ShadeInput *shi) if(surfnor) { VECCOPY(shi->surfnor, surfnor) if(obi->flag & R_TRANSFORMED) - Mat3MulVecfl(obi->nmat, shi->surfnor); + mul_m3_v3(obi->nmat, shi->surfnor); } else VECCOPY(shi->surfnor, shi->vn) @@ -1037,15 +1037,15 @@ void shade_input_set_shade_texco(ShadeInput *shi) if(texco & TEXCO_GLOB) { VECCOPY(shi->gl, shi->co); - Mat4MulVecfl(R.viewinv, shi->gl); + mul_m4_v3(R.viewinv, shi->gl); if(shi->osatex) { VECCOPY(shi->dxgl, shi->dxco); // TXF: bug was here, but probably should be in convertblender.c, R.imat only valid if there is a world - //Mat3MulVecfl(R.imat, shi->dxco); - Mat4Mul3Vecfl(R.viewinv, shi->dxco); + //mul_m3_v3(R.imat, shi->dxco); + mul_mat3_m4_v3(R.viewinv, shi->dxco); VECCOPY(shi->dygl, shi->dyco); - //Mat3MulVecfl(R.imat, shi->dyco); - Mat4Mul3Vecfl(R.viewinv, shi->dyco); + //mul_m3_v3(R.imat, shi->dyco); + mul_mat3_m4_v3(R.viewinv, shi->dyco); } } @@ -1242,9 +1242,9 @@ void shade_input_set_shade_texco(ShadeInput *shi) zbuf_make_winmat(&R, winmat); if(shi->obi->flag & R_TRANSFORMED) - Mat4MulMat4(obwinmat, obi->mat, winmat); + mul_m4_m4m4(obwinmat, obi->mat, winmat); else - Mat4CpyMat4(obwinmat, winmat); + copy_m4_m4(obwinmat, winmat); zbuf_render_project(obwinmat, v1->co, ho1); zbuf_render_project(obwinmat, v2->co, ho2); diff --git a/source/blender/render/intern/source/shadeoutput.c b/source/blender/render/intern/source/shadeoutput.c index 5e523199755..f167122f497 100644 --- a/source/blender/render/intern/source/shadeoutput.c +++ b/source/blender/render/intern/source/shadeoutput.c @@ -31,7 +31,7 @@ #include <string.h> -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BKE_colortools.h" #include "BKE_material.h" @@ -168,7 +168,7 @@ static void spothalo(struct LampRen *lar, ShadeInput *shi, float *intens) p1[0]= shi->co[0]-lar->co[0]; p1[1]= shi->co[1]-lar->co[1]; p1[2]= -lar->co[2]; - Mat3MulVecfl(lar->imat, p1); + mul_m3_v3(lar->imat, p1); VECCOPY(npos, p1); // npos is double! /* pre-scale */ @@ -180,7 +180,7 @@ static void spothalo(struct LampRen *lar, ShadeInput *shi, float *intens) /* rotate view */ VECCOPY(nray, shi->view); - Mat3MulVecd(lar->imat, nray); + mul_m3_v3_double(lar->imat, nray); if(R.wrld.mode & WO_MIST) { /* patchy... */ @@ -311,7 +311,7 @@ static void spothalo(struct LampRen *lar, ShadeInput *shi, float *intens) a= sqrt(p1[0]*p1[0]+p1[1]*p1[1]+p1[2]*p1[2]); b= sqrt(p2[0]*p2[0]+p2[1]*p2[1]+p2[2]*p2[2]); - c= VecLenf(p1, p2); + c= len_v3v3(p1, p2); a/= ladist; a= sqrt(a); @@ -489,7 +489,7 @@ static float area_lamp_energy_multisample(LampRen *lar, float *co, float *vn) vec[0]= jitlamp[0]; vec[1]= jitlamp[1]; vec[2]= 0.0f; - Mat3MulVecfl(lar->mat, vec); + mul_m3_v3(lar->mat, vec); VECADD(area[0], lar->area[0], vec); VECADD(area[1], lar->area[1], vec); @@ -553,7 +553,7 @@ static float Phong_Spec( float *n, float *l, float *v, int hard, int tangent ) h[0] = l[0] + v[0]; h[1] = l[1] + v[1]; h[2] = l[2] + v[2]; - Normalize(h); + normalize_v3(h); rslt = h[0]*n[0] + h[1]*n[1] + h[2]*n[2]; if(tangent) rslt= sasqrt(1.0f - rslt*rslt); @@ -573,7 +573,7 @@ static float CookTorr_Spec(float *n, float *l, float *v, int hard, int tangent) h[0]= v[0]+l[0]; h[1]= v[1]+l[1]; h[2]= v[2]+l[2]; - Normalize(h); + normalize_v3(h); nh= n[0]*h[0]+n[1]*h[1]+n[2]*h[2]; if(tangent) nh= sasqrt(1.0f - nh*nh); @@ -606,7 +606,7 @@ static float Blinn_Spec(float *n, float *l, float *v, float refrac, float spec_p h[0]= v[0]+l[0]; h[1]= v[1]+l[1]; h[2]= v[2]+l[2]; - Normalize(h); + normalize_v3(h); nh= n[0]*h[0]+n[1]*h[1]+n[2]*h[2]; /* Dot product between surface normal and half-way vector */ if(tangent) nh= sasqrt(1.0f - nh*nh); @@ -653,7 +653,7 @@ static float Toon_Spec( float *n, float *l, float *v, float size, float smooth, h[0] = l[0] + v[0]; h[1] = l[1] + v[1]; h[2] = l[2] + v[2]; - Normalize(h); + normalize_v3(h); rslt = h[0]*n[0] + h[1]*n[1] + h[2]*n[2]; if(tangent) rslt = sasqrt(1.0f - rslt*rslt); @@ -677,7 +677,7 @@ static float WardIso_Spec( float *n, float *l, float *v, float rms, int tangent) h[0] = l[0] + v[0]; h[1] = l[1] + v[1]; h[2] = l[2] + v[2]; - Normalize(h); + normalize_v3(h); nh = n[0]*h[0]+n[1]*h[1]+n[2]*h[2]; /* Dot product between surface normal and half-way vector */ if(tangent) nh = sasqrt(1.0f - nh*nh); @@ -728,7 +728,7 @@ static float OrenNayar_Diff(float nl, float *n, float *l, float *v, float rough h[0]= v[0]+l[0]; h[1]= v[1]+l[1]; h[2]= v[2]+l[2]; - Normalize(h); + normalize_v3(h); nh= n[0]*h[0]+n[1]*h[1]+n[2]*h[2]; /* Dot product between surface normal and half-way vector */ if(nh<0.0f) nh = 0.0f; @@ -749,12 +749,12 @@ static float OrenNayar_Diff(float nl, float *n, float *l, float *v, float rough Lit_B[0] = l[0] - (realnl * n[0]); Lit_B[1] = l[1] - (realnl * n[1]); Lit_B[2] = l[2] - (realnl * n[2]); - Normalize( Lit_B ); + normalize_v3( Lit_B ); View_B[0] = v[0] - (nv * n[0]); View_B[1] = v[1] - (nv * n[1]); View_B[2] = v[2] - (nv * n[2]); - Normalize( View_B ); + normalize_v3( View_B ); t = Lit_B[0]*View_B[0] + Lit_B[1]*View_B[1] + Lit_B[2]*View_B[2]; if( t < 0 ) t = 0; @@ -1143,7 +1143,7 @@ float lamp_get_visibility(LampRen *lar, float *co, float *lv, float *dist) /* rotate view to lampspace */ VECCOPY(lvrot, lv); - Mat3MulVecfl(lar->imat, lvrot); + mul_m3_v3(lar->imat, lvrot); x= MAX2(fabs(lvrot[0]/lvrot[2]) , fabs(lvrot[1]/lvrot[2])); /* 1.0f/(sqrt(1+x*x)) is equivalent to cos(atan(x)) */ @@ -1235,27 +1235,27 @@ static void shade_one_light(LampRen *lar, ShadeInput *shi, ShadeResult *shr, int float cross[3], nstrand[3], blend; if(ma->mode & MA_STR_SURFDIFF) { - Crossf(cross, shi->surfnor, vn); - Crossf(nstrand, vn, cross); + cross_v3_v3v3(cross, shi->surfnor, vn); + cross_v3_v3v3(nstrand, vn, cross); blend= INPR(nstrand, shi->surfnor); blend= 1.0f - blend; CLAMP(blend, 0.0f, 1.0f); - VecLerpf(vnor, nstrand, shi->surfnor, blend); - Normalize(vnor); + interp_v3_v3v3(vnor, nstrand, shi->surfnor, blend); + normalize_v3(vnor); } else { - Crossf(cross, lv, vn); - Crossf(vnor, cross, vn); - Normalize(vnor); + cross_v3_v3v3(cross, lv, vn); + cross_v3_v3v3(vnor, cross, vn); + normalize_v3(vnor); } if(ma->strand_surfnor > 0.0f) { if(ma->strand_surfnor > shi->surfdist) { blend= (ma->strand_surfnor - shi->surfdist)/ma->strand_surfnor; - VecLerpf(vnor, vnor, shi->surfnor, blend); - Normalize(vnor); + interp_v3_v3v3(vnor, vnor, shi->surfnor, blend); + normalize_v3(vnor); } } @@ -1264,9 +1264,9 @@ static void shade_one_light(LampRen *lar, ShadeInput *shi, ShadeResult *shr, int } else if (ma->mode & MA_TANGENT_V) { float cross[3]; - Crossf(cross, lv, shi->tang); - Crossf(vnor, cross, shi->tang); - Normalize(vnor); + cross_v3_v3v3(cross, lv, shi->tang); + cross_v3_v3v3(vnor, cross, shi->tang); + normalize_v3(vnor); vnor[0]= -vnor[0];vnor[1]= -vnor[1];vnor[2]= -vnor[2]; vn= vnor; } @@ -1404,7 +1404,7 @@ static void shade_one_light(LampRen *lar, ShadeInput *shi, ShadeResult *shr, int lv[1]+= view[1]; lv[2]+= view[2]; - Normalize(lv); + normalize_v3(lv); t= vn[0]*lv[0]+vn[1]*lv[1]+vn[2]*lv[2]; @@ -1662,15 +1662,15 @@ void shade_lamp_loop(ShadeInput *shi, ShadeResult *shr) if(texfac==0.0f) { VECCOPY(col, shr->col); - VecMulf(col, invalpha); + mul_v3_fl(col, invalpha); } else if(texfac==1.0f) { col[0]= col[1]= col[2]= 1.0f; - VecMulf(col, invalpha); + mul_v3_fl(col, invalpha); } else { VECCOPY(col, shr->col); - VecMulf(col, invalpha); + mul_v3_fl(col, invalpha); col[0]= pow(col[0], 1.0f-texfac); col[1]= pow(col[1], 1.0f-texfac); col[2]= pow(col[2], 1.0f-texfac); @@ -1746,6 +1746,10 @@ void shade_lamp_loop(ShadeInput *shi, ShadeResult *shr) shr->combined[0] += shi->r*aodiff[0]; shr->combined[1] += shi->g*aodiff[1]; shr->combined[2] += shi->b*aodiff[2]; + + if (shr->combined[0] < 0.f) shr->combined[0]= 0.f; + if (shr->combined[1] < 0.f) shr->combined[1]= 0.f; + if (shr->combined[2] < 0.f) shr->combined[2]= 0.f; } } diff --git a/source/blender/render/intern/source/sss.c b/source/blender/render/intern/source/sss.c index a416c2d2764..25cfc0f1253 100644 --- a/source/blender/render/intern/source/sss.c +++ b/source/blender/render/intern/source/sss.c @@ -47,7 +47,7 @@ /* external modules: */ #include "MEM_guardedalloc.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_ghash.h" #include "BLI_memarena.h" @@ -443,8 +443,8 @@ static void compute_radiance(ScatterTree *tree, float *co, float *rad) of the mesh not visible from the camera. this can not only make it darker, but also lead to ugly color shifts */ - VecMulf(result.rad, tree->ss[0]->frontweight); - VecMulf(result.backrad, tree->ss[0]->backweight); + mul_v3_fl(result.rad, tree->ss[0]->frontweight); + mul_v3_fl(result.backrad, tree->ss[0]->backweight); VECCOPY(rad, result.rad); VECADD(backrad, result.rad, result.backrad); @@ -760,7 +760,7 @@ ScatterTree *scatter_tree_new(ScatterSettings *ss[3], float scale, float error, points[i].area= fabs(area[i])/(tree->scale*tree->scale); points[i].back= (area[i] < 0.0f); - VecMulf(points[i].co, 1.0f/tree->scale); + mul_v3_fl(points[i].co, 1.0f/tree->scale); DO_MINMAX(points[i].co, tree->min, tree->max); refpoints[i]= points + i; @@ -813,7 +813,7 @@ void scatter_tree_sample(ScatterTree *tree, float *co, float *color) float sco[3]; VECCOPY(sco, co); - VecMulf(sco, 1.0f/tree->scale); + mul_v3_fl(sco, 1.0f/tree->scale); compute_radiance(tree, sco, color); } diff --git a/source/blender/render/intern/source/strand.c b/source/blender/render/intern/source/strand.c index 61080c7d807..47a7c052b18 100644 --- a/source/blender/render/intern/source/strand.c +++ b/source/blender/render/intern/source/strand.c @@ -37,7 +37,7 @@ #include "DNA_material_types.h" #include "DNA_meshdata_types.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_ghash.h" #include "BLI_memarena.h" @@ -99,10 +99,10 @@ void strand_eval_point(StrandSegment *sseg, StrandPoint *spoint) VECCOPY(p[3], sseg->v[3]->co); if(sseg->obi->flag & R_TRANSFORMED) { - Mat4MulVecfl(sseg->obi->mat, p[0]); - Mat4MulVecfl(sseg->obi->mat, p[1]); - Mat4MulVecfl(sseg->obi->mat, p[2]); - Mat4MulVecfl(sseg->obi->mat, p[3]); + mul_m4_v3(sseg->obi->mat, p[0]); + mul_m4_v3(sseg->obi->mat, p[1]); + mul_m4_v3(sseg->obi->mat, p[2]); + mul_m4_v3(sseg->obi->mat, p[3]); } if(t == 0.0f) { @@ -135,11 +135,11 @@ void strand_eval_point(StrandSegment *sseg, StrandPoint *spoint) spoint->dtco[2]= data[0]*p[0][2] + data[1]*p[1][2] + data[2]*p[2][2] + data[3]*p[3][2]; VECCOPY(spoint->tan, spoint->dtco); - Normalize(spoint->tan); + normalize_v3(spoint->tan); VECCOPY(spoint->nor, spoint->co); VECMUL(spoint->nor, -1.0f); - Normalize(spoint->nor); + normalize_v3(spoint->nor); spoint->width= strand_eval_width(ma, spoint->strandco); @@ -148,7 +148,7 @@ void strand_eval_point(StrandSegment *sseg, StrandPoint *spoint) spoint->alpha= (simplify)? simplify[1]: 1.0f; /* outer points */ - Crossf(cross, spoint->co, spoint->tan); + cross_v3_v3v3(cross, spoint->co, spoint->tan); w= spoint->co[2]*strandbuf->winmat[2][3] + strandbuf->winmat[3][3]; dx= strandbuf->winx*cross[0]*strandbuf->winmat[0][0]/w; @@ -157,7 +157,7 @@ void strand_eval_point(StrandSegment *sseg, StrandPoint *spoint) if(w > 0.0f) { if(strandbuf->flag & R_STRAND_B_UNITS) { - crosslen= VecLength(cross); + crosslen= len_v3(cross); w= 2.0f*crosslen*strandbuf->minwidth/w; if(spoint->width < w) { @@ -169,14 +169,14 @@ void strand_eval_point(StrandSegment *sseg, StrandPoint *spoint) /* squared because we only change width, not length */ spoint->width *= simplify[0]*simplify[0]; - VecMulf(cross, spoint->width*0.5f/crosslen); + mul_v3_fl(cross, spoint->width*0.5f/crosslen); } else - VecMulf(cross, spoint->width/w); + mul_v3_fl(cross, spoint->width/w); } - VecSubf(spoint->co1, spoint->co, cross); - VecAddf(spoint->co2, spoint->co, cross); + sub_v3_v3v3(spoint->co1, spoint->co, cross); + add_v3_v3v3(spoint->co2, spoint->co, cross); VECCOPY(spoint->dsco, cross); } @@ -220,7 +220,7 @@ void interpolate_shade_result(ShadeResult *shr1, ShadeResult *shr2, float t, Sha interpolate_vec4(shr1->col, shr2->col, t, negt, shr->col); if(addpassflag & SCE_PASS_NORMAL) { interpolate_vec3(shr1->nor, shr2->nor, t, negt, shr->nor); - Normalize(shr->nor); + normalize_v3(shr->nor); } if(addpassflag & SCE_PASS_DIFFUSE) interpolate_vec3(shr1->diff, shr2->diff, t, negt, shr->diff); @@ -825,9 +825,9 @@ int zbuffer_strands_abuf(Render *re, RenderPart *pa, APixstrand *apixbuf, ListBa /* compute matrix and try clipping whole object */ if(obi->flag & R_TRANSFORMED) - Mat4MulMat4(obwinmat, obi->mat, winmat); + mul_m4_m4m4(obwinmat, obi->mat, winmat); else - Mat4CpyMat4(obwinmat, winmat); + copy_m4_m4(obwinmat, winmat); if(clip_render_object(obi->obr->boundbox, bounds, winmat)) continue; @@ -903,9 +903,9 @@ int zbuffer_strands_abuf(Render *re, RenderPart *pa, APixstrand *apixbuf, ListBa obr= obi->obr; if(obi->flag & R_TRANSFORMED) - Mat4MulMat4(obwinmat, obi->mat, winmat); + mul_m4_m4m4(obwinmat, obi->mat, winmat); else - Mat4CpyMat4(obwinmat, winmat); + copy_m4_m4(obwinmat, winmat); sseg.obi= obi; sseg.strand= RE_findOrAddStrand(obr, sortseg->strand); @@ -975,7 +975,7 @@ StrandSurface *cache_strand_surface(Render *re, ObjectRen *obr, DerivedMesh *dm, mvert= dm->getVertArray(dm); for(a=0; a<mesh->totvert; a++, mvert++) { VECCOPY(co[a], mvert->co); - Mat4MulVecfl(mat, co[a]); + mul_m4_v3(mat, co[a]); } mface= dm->getFaceArray(dm); diff --git a/source/blender/render/intern/source/sunsky.c b/source/blender/render/intern/source/sunsky.c index 2b490e71142..54032833196 100644 --- a/source/blender/render/intern/source/sunsky.c +++ b/source/blender/render/intern/source/sunsky.c @@ -21,7 +21,7 @@ #include "sunsky.h" #include "math.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BKE_global.h" /** @@ -289,12 +289,12 @@ void GetSkyXYZRadiancef(struct SunSky* sunsky, const float varg[3], float color_ float theta, phi; float v[3]; - VecCopyf(v, (float*)varg); - Normalize(v); + copy_v3_v3(v, (float*)varg); + normalize_v3(v); if (v[2] < 0.001){ v[2] = 0.001; - Normalize(v); + normalize_v3(v); } DirectionToThetaPhi(v, &theta, &phi); @@ -448,7 +448,7 @@ void AtmospherePixleShader( struct SunSky* sunSky, float view[3], float s, float sunDirection[1] = sunSky->toSun[1]; sunDirection[2] = sunSky->toSun[2]; - costheta = Inpf(view, sunDirection); // cos(theta) + costheta = dot_v3v3(view, sunDirection); // cos(theta) Phase_1 = 1 + (costheta * costheta); // Phase_1 vec3opf(sunSky->atm_BetaRay, sunSky->atm_BetaRay, *, sunSky->atm_BetaRayMultiplier); @@ -461,7 +461,7 @@ void AtmospherePixleShader( struct SunSky* sunSky, float view[3], float s, float E1[1] = exp(E1[1]); E1[2] = exp(E1[2]); - VecCopyf(E, E1); + copy_v3_v3(E, E1); //Phase2(theta) = (1-g^2)/(1+g-2g*cos(theta))^(3/2) fTemp = 1 + sunSky->atm_HGg - 2 * sunSky->atm_HGg * costheta; diff --git a/source/blender/render/intern/source/texture.c b/source/blender/render/intern/source/texture.c index 9510dc15e5a..d2e36a7a286 100644 --- a/source/blender/render/intern/source/texture.c +++ b/source/blender/render/intern/source/texture.c @@ -33,7 +33,7 @@ #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_rand.h" #include "DNA_texture_types.h" @@ -832,7 +832,7 @@ static int cubemap_glob(float *n, float x, float y, float z, float *adr1, float else { VECCOPY(nor, n); } - Mat4Mul3Vecfl(R.viewinv, nor); + mul_mat3_m4_v3(R.viewinv, nor); x1= fabs(nor[0]); y1= fabs(nor[1]); @@ -871,7 +871,7 @@ static int cubemap(MTex *mtex, VlakRen *vlr, float *n, float x, float y, float z /* test for v1, vlr can be faked for baking */ if(vlr->v1 && vlr->v1->orco) { float nor[3]; - CalcNormFloat(vlr->v1->orco, vlr->v2->orco, vlr->v3->orco, nor); + normal_tri_v3( nor,vlr->v1->orco, vlr->v2->orco, vlr->v3->orco); if( fabs(nor[0])<fabs(nor[2]) && fabs(nor[1])<fabs(nor[2]) ) vlr->puno |= ME_PROJXY; else if( fabs(nor[0])<fabs(nor[1]) && fabs(nor[2])<fabs(nor[1]) ) vlr->puno |= ME_PROJXZ; @@ -925,7 +925,7 @@ static int cubemap_ob(Object *ob, float *n, float x, float y, float z, float *ad if(n==NULL) return 0; VECCOPY(nor, n); - if(ob) Mat4Mul3Vecfl(ob->imat, nor); + if(ob) mul_mat3_m4_v3(ob->imat, nor); x1= fabs(nor[0]); y1= fabs(nor[1]); @@ -970,8 +970,8 @@ static void do_2d_mapping(MTex *mtex, float *t, VlakRen *vlr, float *n, float *d fx = (t[0] + 1.0) / 2.0; fy = (t[1] + 1.0) / 2.0; } - else if(wrap==MTEX_TUBE) tubemap(t[0], t[1], t[2], &fx, &fy); - else if(wrap==MTEX_SPHERE) spheremap(t[0], t[1], t[2], &fx, &fy); + else if(wrap==MTEX_TUBE) map_to_tube( &fx, &fy,t[0], t[1], t[2]); + else if(wrap==MTEX_SPHERE) map_to_sphere( &fx, &fy,t[0], t[1], t[2]); else { if(texco==TEXCO_OBJECT) cubemap_ob(ob, n, t[0], t[1], t[2], &fx, &fy); else if(texco==TEXCO_GLOB) cubemap_glob(n, t[0], t[1], t[2], &fx, &fy); @@ -1042,20 +1042,20 @@ static void do_2d_mapping(MTex *mtex, float *t, VlakRen *vlr, float *n, float *d } if(ok) { if(wrap==MTEX_TUBE) { - tubemap(t[0], t[1], t[2], area, area+1); - tubemap(t[0]+dxt[0], t[1]+dxt[1], t[2]+dxt[2], area+2, area+3); - tubemap(t[0]+dyt[0], t[1]+dyt[1], t[2]+dyt[2], area+4, area+5); + map_to_tube( area, area+1,t[0], t[1], t[2]); + map_to_tube( area+2, area+3,t[0]+dxt[0], t[1]+dxt[1], t[2]+dxt[2]); + map_to_tube( area+4, area+5,t[0]+dyt[0], t[1]+dyt[1], t[2]+dyt[2]); } else { - spheremap(t[0], t[1], t[2],area,area+1); - spheremap(t[0]+dxt[0], t[1]+dxt[1], t[2]+dxt[2], area+2, area+3); - spheremap(t[0]+dyt[0], t[1]+dyt[1], t[2]+dyt[2], area+4, area+5); + map_to_sphere(area,area+1,t[0], t[1], t[2]); + map_to_sphere( area+2, area+3,t[0]+dxt[0], t[1]+dxt[1], t[2]+dxt[2]); + map_to_sphere( area+4, area+5,t[0]+dyt[0], t[1]+dyt[1], t[2]+dyt[2]); } areaflag= 1; } else { - if(wrap==MTEX_TUBE) tubemap(t[0], t[1], t[2], &fx, &fy); - else spheremap(t[0], t[1], t[2], &fx, &fy); + if(wrap==MTEX_TUBE) map_to_tube( &fx, &fy,t[0], t[1], t[2]); + else map_to_sphere( &fx, &fy,t[0], t[1], t[2]); dxt[0]/= 2.0; dxt[1]/= 2.0; dyt[0]/= 2.0; @@ -1230,7 +1230,7 @@ static int multitex(Tex *tex, float *texvec, float *dxt, float *dyt, int osatex, * artificer: added the use of tmpvec to avoid scaling texvec */ VECCOPY(tmpvec, texvec); - VecMulf(tmpvec, 1.0/tex->noisesize); + mul_v3_fl(tmpvec, 1.0/tex->noisesize); switch(tex->stype) { case TEX_MFRACTAL: @@ -1252,7 +1252,7 @@ static int multitex(Tex *tex, float *texvec, float *dxt, float *dyt, int osatex, * artificer: added the use of tmpvec to avoid scaling texvec */ VECCOPY(tmpvec, texvec); - VecMulf(tmpvec, 1.0/tex->noisesize); + mul_v3_fl(tmpvec, 1.0/tex->noisesize); retval= voronoiTex(tex, tmpvec, texres); break; @@ -1261,7 +1261,7 @@ static int multitex(Tex *tex, float *texvec, float *dxt, float *dyt, int osatex, * artificer: added the use of tmpvec to avoid scaling texvec */ VECCOPY(tmpvec, texvec); - VecMulf(tmpvec, 1.0/tex->noisesize); + mul_v3_fl(tmpvec, 1.0/tex->noisesize); retval= mg_distNoiseTex(tex, tmpvec, texres); break; @@ -1416,11 +1416,11 @@ void texture_rgb_blend(float *in, float *tex, float *out, float fact, float facg fact*= facg; facm= 1.0-fact; - col= fact*tex[0]; + col= tex[0]+((1-tex[0])*facm); if(col < out[0]) in[0]= col; else in[0]= out[0]; - col= fact*tex[1]; + col= tex[1]+((1-tex[1])*facm); if(col < out[1]) in[1]= col; else in[1]= out[1]; - col= fact*tex[2]; + col= tex[2]+((1-tex[2])*facm); if(col < out[2]) in[2]= col; else in[2]= out[2]; break; @@ -1675,13 +1675,13 @@ void do_material_tex(ShadeInput *shi) VECCOPY(tempvec, shi->co); if(mtex->texflag & MTEX_OB_DUPLI_ORIG) if(shi->obi && shi->obi->duplitexmat) - Mat4MulVecfl(shi->obi->duplitexmat, tempvec); - Mat4MulVecfl(ob->imat, tempvec); + mul_m4_v3(shi->obi->duplitexmat, tempvec); + mul_m4_v3(ob->imat, tempvec); if(shi->osatex) { VECCOPY(dxt, shi->dxco); VECCOPY(dyt, shi->dyco); - Mat4Mul3Vecfl(ob->imat, dxt); - Mat4Mul3Vecfl(ob->imat, dyt); + mul_mat3_m4_v3(ob->imat, dxt); + mul_mat3_m4_v3(ob->imat, dyt); } } else { @@ -1742,7 +1742,7 @@ void do_material_tex(ShadeInput *shi) nn[0] = -shi->vn[0]; nn[1] = -shi->vn[1]; nn[2] = -shi->vn[2]; - VecOrthoBasisf(nn, nu, nv); + ortho_basis_v3v3_v3( nu, nv,nn); nunvdone= 1; } @@ -1819,7 +1819,7 @@ void do_material_tex(ShadeInput *shi) nn[0] = -shi->vn[0]; nn[1] = -shi->vn[1]; nn[2] = -shi->vn[2]; - VecOrthoBasisf(nn, nu, nv); + ortho_basis_v3v3_v3( nu, nv,nn); nunvdone= 1; } @@ -1897,20 +1897,20 @@ void do_material_tex(ShadeInput *shi) idv = (dv < 1e-6f) ? bf : (bf/dv); if ((mtex->texco == TEXCO_ORCO) && shi->obr && shi->obr->ob) { - Mat4Mul3Vecfl(shi->obr->ob->imat, tu); - Mat4Mul3Vecfl(shi->obr->ob->imat, tv); - Normalize(tu); - Normalize(tv); + mul_mat3_m4_v3(shi->obr->ob->imat, tu); + mul_mat3_m4_v3(shi->obr->ob->imat, tv); + normalize_v3(tu); + normalize_v3(tv); } else if (mtex->texco == TEXCO_GLOB) { - Mat4Mul3Vecfl(R.viewinv, tu); - Mat4Mul3Vecfl(R.viewinv, tv); + mul_mat3_m4_v3(R.viewinv, tu); + mul_mat3_m4_v3(R.viewinv, tv); } else if (mtex->texco == TEXCO_OBJECT && mtex->object) { - Mat4Mul3Vecfl(mtex->object->imat, tu); - Mat4Mul3Vecfl(mtex->object->imat, tv); - Normalize(tu); - Normalize(tv); + mul_mat3_m4_v3(mtex->object->imat, tu); + mul_mat3_m4_v3(mtex->object->imat, tv); + normalize_v3(tu); + normalize_v3(tv); } // +u val @@ -1937,7 +1937,7 @@ void do_material_tex(ShadeInput *shi) nv[0] += vd*nn[0]; nv[1] += vd*nn[1]; nv[2] += vd*nn[2]; - Crossf(nvec, nu, nv); + cross_v3_v3v3(nvec, nu, nv); nvec[0] = -nvec[0]; nvec[1] = -nvec[1]; @@ -2020,12 +2020,12 @@ void do_material_tex(ShadeInput *shi) // rotate to global coords if(mtex->texco==TEXCO_ORCO || mtex->texco==TEXCO_UV) { if(shi->vlr && shi->obr && shi->obr->ob) { - float len= Normalize(texres.nor); + float len= normalize_v3(texres.nor); // can be optimized... (ton) - Mat4Mul3Vecfl(shi->obr->ob->obmat, texres.nor); - Mat4Mul3Vecfl(R.viewmat, texres.nor); - Normalize(texres.nor); - VecMulf(texres.nor, len); + mul_mat3_m4_v3(shi->obr->ob->obmat, texres.nor); + mul_mat3_m4_v3(R.viewmat, texres.nor); + normalize_v3(texres.nor); + mul_v3_fl(texres.nor, len); } } } @@ -2100,7 +2100,7 @@ void do_material_tex(ShadeInput *shi) if(mtex->normapspace == MTEX_NSPACE_TANGENT) { /* qdn: tangent space */ float B[3], tv[3]; - Crossf(B, shi->vn, shi->nmaptang); /* bitangent */ + cross_v3_v3v3(B, shi->vn, shi->nmaptang); /* bitangent */ /* transform norvec from tangent space to object surface in camera space */ tv[0] = texres.nor[0]*shi->nmaptang[0] + texres.nor[1]*B[0] + texres.nor[2]*shi->vn[0]; tv[1] = texres.nor[0]*shi->nmaptang[1] + texres.nor[1]*B[1] + texres.nor[2]*shi->vn[1]; @@ -2116,15 +2116,15 @@ void do_material_tex(ShadeInput *shi) if(mtex->normapspace == MTEX_NSPACE_CAMERA); else if(mtex->normapspace == MTEX_NSPACE_WORLD) { - Mat4Mul3Vecfl(R.viewmat, nor); + mul_mat3_m4_v3(R.viewmat, nor); } else if(mtex->normapspace == MTEX_NSPACE_OBJECT) { if(shi->obr && shi->obr->ob) - Mat4Mul3Vecfl(shi->obr->ob->obmat, nor); - Mat4Mul3Vecfl(R.viewmat, nor); + mul_mat3_m4_v3(shi->obr->ob->obmat, nor); + mul_mat3_m4_v3(R.viewmat, nor); } - Normalize(nor); + normalize_v3(nor); /* qdn: worldspace */ shi->vn[0]= facm*shi->vn[0] + fact*nor[0]; @@ -2159,7 +2159,7 @@ void do_material_tex(ShadeInput *shi) shi->vn[2]+= dot*nor[2]; } } - Normalize(shi->vn); + normalize_v3(shi->vn); /* this makes sure the bump is passed on to the next texture */ shi->orn[0]= -shi->vn[0]; @@ -2316,9 +2316,9 @@ void do_volume_tex(ShadeInput *shi, float *xyz, int mapto_flag, float *col, floa VECCOPY(co, xyz); if(mtex->texflag & MTEX_OB_DUPLI_ORIG) { if(shi->obi && shi->obi->duplitexmat) - Mat4MulVecfl(shi->obi->duplitexmat, co); + mul_m4_v3(shi->obi->duplitexmat, co); } - Mat4MulVecfl(ob->imat, co); + mul_m4_v3(ob->imat, co); } } /* not really orco, but 'local' */ @@ -2330,12 +2330,12 @@ void do_volume_tex(ShadeInput *shi, float *xyz, int mapto_flag, float *col, floa else { Object *ob= shi->obi->ob; VECCOPY(co, xyz); - Mat4MulVecfl(ob->imat, co); + mul_m4_v3(ob->imat, co); } } else if(mtex->texco==TEXCO_GLOB) { VECCOPY(co, xyz); - Mat4MulVecfl(R.viewinv, co); + mul_m4_v3(R.viewinv, co); } else continue; // can happen when texco defines disappear and it renders old files @@ -2648,8 +2648,8 @@ void do_sky_tex(float *rco, float *lo, float *dxyview, float *hor, float *zen, f case TEXCO_H_SPHEREMAP: case TEXCO_H_TUBEMAP: if(skyflag & WO_ZENUP) { - if(mtex->texco==TEXCO_H_TUBEMAP) tubemap(lo[0], lo[2], lo[1], tempvec, tempvec+1); - else spheremap(lo[0], lo[2], lo[1], tempvec, tempvec+1); + if(mtex->texco==TEXCO_H_TUBEMAP) map_to_tube( tempvec, tempvec+1,lo[0], lo[2], lo[1]); + else map_to_sphere( tempvec, tempvec+1,lo[0], lo[2], lo[1]); /* tube/spheremap maps for outside view, not inside */ tempvec[0]= 1.0-tempvec[0]; /* only top half */ @@ -2668,7 +2668,7 @@ void do_sky_tex(float *rco, float *lo, float *dxyview, float *hor, float *zen, f case TEXCO_OBJECT: if(mtex->object) { VECCOPY(tempvec, lo); - Mat4MulVecfl(mtex->object->imat, tempvec); + mul_m4_v3(mtex->object->imat, tempvec); co= tempvec; } break; @@ -2676,16 +2676,16 @@ void do_sky_tex(float *rco, float *lo, float *dxyview, float *hor, float *zen, f case TEXCO_GLOB: if(rco) { VECCOPY(tempvec, rco); - Mat4MulVecfl(R.viewinv, tempvec); + mul_m4_v3(R.viewinv, tempvec); co= tempvec; } else co= lo; // VECCOPY(shi->dxgl, shi->dxco); -// Mat3MulVecfl(R.imat, shi->dxco); +// mul_m3_v3(R.imat, shi->dxco); // VECCOPY(shi->dygl, shi->dyco); -// Mat3MulVecfl(R.imat, shi->dyco); +// mul_m3_v3(R.imat, shi->dyco); break; } @@ -2812,12 +2812,12 @@ void do_lamp_tex(LampRen *la, float *lavec, ShadeInput *shi, float *colf, int ef dx= dxt; dy= dyt; VECCOPY(tempvec, shi->co); - Mat4MulVecfl(ob->imat, tempvec); + mul_m4_v3(ob->imat, tempvec); if(shi->osatex) { VECCOPY(dxt, shi->dxco); VECCOPY(dyt, shi->dyco); - Mat4Mul3Vecfl(ob->imat, dxt); - Mat4Mul3Vecfl(ob->imat, dyt); + mul_mat3_m4_v3(ob->imat, dxt); + mul_mat3_m4_v3(ob->imat, dyt); } } else { @@ -2828,12 +2828,12 @@ void do_lamp_tex(LampRen *la, float *lavec, ShadeInput *shi, float *colf, int ef else if(mtex->texco==TEXCO_GLOB) { co= shi->gl; dx= shi->dxco; dy= shi->dyco; VECCOPY(shi->gl, shi->co); - Mat4MulVecfl(R.viewinv, shi->gl); + mul_m4_v3(R.viewinv, shi->gl); } else if(mtex->texco==TEXCO_VIEW) { VECCOPY(tempvec, lavec); - Mat3MulVecfl(la->imat, tempvec); + mul_m3_v3(la->imat, tempvec); if(la->type==LA_SPOT) { tempvec[0]*= la->spottexfac; @@ -2846,11 +2846,11 @@ void do_lamp_tex(LampRen *la, float *lavec, ShadeInput *shi, float *colf, int ef VECCOPY(dxt, shi->dxlv); VECCOPY(dyt, shi->dylv); /* need some matrix conversion here? la->imat is a [3][3] matrix!!! **/ - Mat3MulVecfl(la->imat, dxt); - Mat3MulVecfl(la->imat, dyt); + mul_m3_v3(la->imat, dxt); + mul_m3_v3(la->imat, dyt); - VecMulf(dxt, la->spottexfac); - VecMulf(dyt, la->spottexfac); + mul_v3_fl(dxt, la->spottexfac); + mul_v3_fl(dyt, la->spottexfac); } } diff --git a/source/blender/render/intern/source/volume_precache.c b/source/blender/render/intern/source/volume_precache.c index 25645d9cce2..e9162b7367f 100644 --- a/source/blender/render/intern/source/volume_precache.c +++ b/source/blender/render/intern/source/volume_precache.c @@ -34,7 +34,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_threads.h" #include "BLI_voxel.h" @@ -175,6 +175,7 @@ static void lightcache_filter(VolumePrecache *vp) } } +#if 0 static void lightcache_filter2(VolumePrecache *vp) { int x, y, z; @@ -211,6 +212,7 @@ static void lightcache_filter2(VolumePrecache *vp) if (new_g) { MEM_freeN(new_g); new_g=NULL; } if (new_b) { MEM_freeN(new_b); new_b=NULL; } } +#endif static inline int ms_I(int x, int y, int z, int *n) //has a pad of 1 voxel surrounding the core for boundary simulation { @@ -444,8 +446,8 @@ static void *vol_precache_part(void *data) continue; } - VecCopyf(shi->view, co); - Normalize(shi->view); + copy_v3_v3(shi->view, co); + normalize_v3(shi->view); vol_get_scattering(shi, scatter_col, co); obi->volume_precache->data_r[ V_I(x, y, z, res) ] = scatter_col[0]; @@ -495,7 +497,7 @@ static void precache_init_parts(Render *re, RayObject *tree, ShadeInput *shi, Ob parts[0] = parts[1] = parts[2] = totthread; res = vp->res; - VecSubf(voxel, bbmax, bbmin); + sub_v3_v3v3(voxel, bbmax, bbmin); voxel[0] /= res[0]; voxel[1] /= res[1]; @@ -564,7 +566,7 @@ static int precache_resolution(VolumePrecache *vp, float *bbmin, float *bbmax, i { float dim[3], div; - VecSubf(dim, bbmax, bbmin); + sub_v3_v3v3(dim, bbmax, bbmin); div = MAX3(dim[0], dim[1], dim[2]); dim[0] /= div; @@ -622,6 +624,11 @@ void vol_precache_objectinstance_threads(Render *re, ObjectInstanceRen *obi, Mat vp->data_r = MEM_callocN(sizeof(float)*vp->res[0]*vp->res[1]*vp->res[2], "volume light cache data red channel"); vp->data_g = MEM_callocN(sizeof(float)*vp->res[0]*vp->res[1]*vp->res[2], "volume light cache data green channel"); vp->data_b = MEM_callocN(sizeof(float)*vp->res[0]*vp->res[1]*vp->res[2], "volume light cache data blue channel"); + if (vp->data_r==0 || vp->data_g==0 || vp->data_b==0) { + MEM_freeN(vp); + vp = NULL; + return; + } obi->volume_precache = vp; /* Need a shadeinput to calculate scattering */ diff --git a/source/blender/render/intern/source/volumetric.c b/source/blender/render/intern/source/volumetric.c index cf4b6b4002f..32ab2980316 100644 --- a/source/blender/render/intern/source/volumetric.c +++ b/source/blender/render/intern/source/volumetric.c @@ -34,7 +34,7 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_rand.h" #include "BLI_voxel.h" @@ -85,7 +85,7 @@ static float vol_get_shadow(ShadeInput *shi, LampRen *lar, float *co) /* trace shadow manually, no good lamp api atm */ Isect is; - VecCopyf(is.start, co); + copy_v3_v3(is.start, co); if(lar->type==LA_SUN || lar->type==LA_HEMI) { is.vec[0] = -lar->vec[0]; is.vec[1] = -lar->vec[1]; @@ -93,7 +93,7 @@ static float vol_get_shadow(ShadeInput *shi, LampRen *lar, float *co) is.labda = R.maxdist; } else { VECSUB( is.vec, lar->co, is.start ); - is.labda = VecLength( is.vec ); + is.labda = len_v3( is.vec ); } is.mode = RE_RAY_MIRROR; @@ -122,9 +122,9 @@ static int vol_get_bounds(ShadeInput *shi, float *co, float *vec, float *hitco, /* XXX TODO - get raytrace max distance from object instance's bounding box */ /* need to account for scaling only, but keep coords in camera space... * below code is WIP and doesn't work! - VecSubf(bb_dim, shi->obi->obr->boundbox[1], shi->obi->obr->boundbox[2]); - Mat3MulVecfl(shi->obi->nmat, bb_dim); - maxsize = VecLength(bb_dim); + sub_v3_v3v3(bb_dim, shi->obi->obr->boundbox[1], shi->obi->obr->boundbox[2]); + mul_m3_v3(shi->obi->nmat, bb_dim); + maxsize = len_v3(bb_dim); */ VECCOPY(isect->start, co); @@ -184,7 +184,7 @@ static void shade_intersection(ShadeInput *shi, float *col, Isect *is) shade_ray(is, &shi_new, &shr_new); } - VecCopyf(col, shr_new.combined); + copy_v3_v3(col, shr_new.combined); col[3] = shr_new.alpha; } @@ -225,7 +225,7 @@ static void vol_get_precached_scattering(ShadeInput *shi, float *scatter_col, fl /* convert input coords to 0.0, 1.0 */ VECCOPY(bbmin, shi->obi->obr->boundbox[0]); VECCOPY(bbmax, shi->obi->obr->boundbox[1]); - VecSubf(dim, bbmax, bbmin); + sub_v3_v3v3(dim, bbmax, bbmin); sample_co[0] = ((co[0] - bbmin[0]) / dim[0]); sample_co[1] = ((co[1] - bbmin[1]) / dim[1]); @@ -246,18 +246,18 @@ static float metadensity(Object* ob, float* co) /* transform co to meta-element */ float tco[3] = {co[0], co[1], co[2]}; - Mat4MulMat4(mat, ob->obmat, R.viewmat); - Mat4Invert(imat, mat); - Mat4MulVecfl(imat, tco); + mul_m4_m4m4(mat, ob->obmat, R.viewmat); + invert_m4_m4(imat, mat); + mul_m4_v3(imat, tco); for (ml = mb->elems.first; ml; ml=ml->next) { float bmat[3][3], dist2; /* element rotation transform */ float tp[3] = {ml->x - tco[0], ml->y - tco[1], ml->z - tco[2]}; - QuatToMat3(ml->quat, bmat); - Mat3Transp(bmat); // rot.only, so inverse == transpose - Mat3MulVecfl(bmat, tp); + quat_to_mat3( bmat,ml->quat); + transpose_m3(bmat); // rot.only, so inverse == transpose + mul_m3_v3(bmat, tp); /* MB_BALL default */ switch (ml->type) { @@ -379,7 +379,7 @@ float vol_get_phasefunc(ShadeInput *shi, float g, float *w, float *wp) return normalize * 1.f; } else { /* schlick */ const float k = 1.55f * g - .55f * g * g * g; - const float kcostheta = k * Inpf(w, wp); + const float kcostheta = k * dot_v3v3(w, wp); return normalize * (1.f - k*k) / ((1.f - kcostheta) * (1.f - kcostheta)); } @@ -435,14 +435,14 @@ static void vol_get_transmittance(ShadeInput *shi, float *tr, float *co, float * float tau[3] = {0.f, 0.f, 0.f}; float t0 = 0.f; - float t1 = Normalize(step_vec); + float t1 = normalize_v3(step_vec); float pt0 = t0; t0 += shi->mat->vol.stepsize * ((shi->mat->vol.stepsize_type == MA_VOL_STEP_CONSTANT) ? 0.5f : BLI_thread_frand(shi->thread)); p[0] += t0 * step_vec[0]; p[1] += t0 * step_vec[1]; p[2] += t0 * step_vec[2]; - VecMulf(step_vec, shi->mat->vol.stepsize); + mul_v3_fl(step_vec, shi->mat->vol.stepsize); for (; t0 < t1; pt0 = t0, t0 += shi->mat->vol.stepsize) { const float d = vol_get_density(shi, p); @@ -455,7 +455,7 @@ static void vol_get_transmittance(ShadeInput *shi, float *tr, float *co, float * tau[1] += stepd * sigma_t[1]; tau[2] += stepd * sigma_t[2]; - VecAddf(p, p, step_vec); + add_v3_v3v3(p, p, step_vec); } /* return transmittance */ @@ -477,34 +477,34 @@ void vol_shade_one_lamp(struct ShadeInput *shi, float *co, LampRen *lar, float * if ((visifac= lamp_get_visibility(lar, co, lv, &lampdist)) == 0.f) return; - VecCopyf(lacol, &lar->r); + copy_v3_v3(lacol, &lar->r); if(lar->mode & LA_TEXTURE) { shi->osatex= 0; do_lamp_tex(lar, lv, shi, lacol, LA_TEXTURE); } - VecMulf(lacol, visifac); + mul_v3_fl(lacol, visifac); if (ELEM(lar->type, LA_SUN, LA_HEMI)) VECCOPY(lv, lar->vec); - VecMulf(lv, -1.0f); + mul_v3_fl(lv, -1.0f); if (shi->mat->vol.shade_type == MA_VOL_SHADE_SHADOWED) { - VecMulf(lacol, vol_get_shadow(shi, lar, co)); + mul_v3_fl(lacol, vol_get_shadow(shi, lar, co)); } else if (shi->mat->vol.shade_type == MA_VOL_SHADE_SHADED) { Isect is; if (shi->mat->vol.shadeflag & MA_VOL_RECV_EXT_SHADOW) { - VecMulf(lacol, vol_get_shadow(shi, lar, co)); + mul_v3_fl(lacol, vol_get_shadow(shi, lar, co)); if (luminance(lacol) < 0.001f) return; } /* find minimum of volume bounds, or lamp coord */ if (vol_get_bounds(shi, co, lv, hitco, &is, VOL_BOUNDS_SS)) { - float dist = VecLenf(co, hitco); + float dist = len_v3v3(co, hitco); VlakRen *vlr = (VlakRen *)is.hit.face; /* simple internal shadowing */ @@ -523,7 +523,7 @@ void vol_shade_one_lamp(struct ShadeInput *shi, float *co, LampRen *lar, float * vol_get_transmittance(shi, tr, co, atten_co); - VecMulVecf(lacol, lacol, tr); + mul_v3_v3v3(lacol, lacol, tr); } else { /* Point is on the outside edge of the volume, @@ -561,7 +561,7 @@ void vol_get_scattering(ShadeInput *shi, float *scatter_col, float *co) if (lar) { vol_shade_one_lamp(shi, co, lar, lacol); - VecAddf(scatter_col, scatter_col, lacol); + add_v3_v3v3(scatter_col, scatter_col, lacol); } } } @@ -594,13 +594,13 @@ static void volumeintegrate(struct ShadeInput *shi, float *col, float *co, float float t0 = 0.f; float pt0 = t0; - float t1 = Normalize(step_vec); /* returns vector length */ + float t1 = normalize_v3(step_vec); /* returns vector length */ t0 += stepsize * ((shi->mat->vol.stepsize_type == MA_VOL_STEP_CONSTANT) ? 0.5f : BLI_thread_frand(shi->thread)); p[0] += t0 * step_vec[0]; p[1] += t0 * step_vec[1]; p[2] += t0 * step_vec[2]; - VecMulf(step_vec, stepsize); + mul_v3_fl(step_vec, stepsize); for (; t0 < t1; pt0 = t0, t0 += stepsize) { const float density = vol_get_density(shi, p); @@ -631,12 +631,12 @@ static void volumeintegrate(struct ShadeInput *shi, float *col, float *co, float radiance[1] += stepd * tr[1] * (emit_col[1] + scatter_col[1]); radiance[2] += stepd * tr[2] * (emit_col[2] + scatter_col[2]); } - VecAddf(p, p, step_vec); + add_v3_v3v3(p, p, step_vec); } /* multiply original color (from behind volume) with transmittance over entire distance */ - VecMulVecf(col, tr, col); - VecAddf(col, col, radiance); + mul_v3_v3v3(col, tr, col); + add_v3_v3v3(col, col, radiance); /* alpha <-- transmission luminance */ col[3] = 1.0f - luminance(tr); @@ -729,7 +729,7 @@ static void volume_trace(struct ShadeInput *shi, struct ShadeResult *shr, int in else col[3] = 1.f; - VecCopyf(shr->combined, col); + copy_v3_v3(shr->combined, col); shr->alpha = col[3]; VECCOPY(shr->diff, shr->combined); @@ -768,7 +768,7 @@ void shade_volume_shadow(struct ShadeInput *shi, struct ShadeResult *shr, struct density = vol_get_density(shi, startco); vol_get_transmittance(shi, tr, startco, endco); - VecCopyf(shr->combined, tr); + copy_v3_v3(shr->combined, tr); shr->combined[3] = 1.0f - luminance(tr); } diff --git a/source/blender/render/intern/source/voxeldata.c b/source/blender/render/intern/source/voxeldata.c index 479f33c9ff2..8e71fec4db9 100644 --- a/source/blender/render/intern/source/voxeldata.c +++ b/source/blender/render/intern/source/voxeldata.c @@ -32,7 +32,7 @@ #include "MEM_guardedalloc.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_voxel.h" @@ -277,9 +277,9 @@ int voxeldatatex(struct Tex *tex, float *texvec, struct TexResult *texres) /* scale lookup from 0.0-1.0 (original location) to -1.0, 1.0, consistent with image texture tex coords */ /* in implementation this works backwards, bringing sample locations from -1.0, 1.0 * to the range 0.0, 1.0, before looking up in the voxel structure. */ - VecCopyf(co, texvec); - VecMulf(co, 0.5f); - VecAddf(co, co, offset); + copy_v3_v3(co, texvec); + mul_v3_fl(co, 0.5f); + add_v3_v3v3(co, co, offset); /* co is now in the range 0.0, 1.0 */ switch (tex->extend) { diff --git a/source/blender/render/intern/source/zbuf.c b/source/blender/render/intern/source/zbuf.c index 6c1055ec9e0..a3a714553d2 100644 --- a/source/blender/render/intern/source/zbuf.c +++ b/source/blender/render/intern/source/zbuf.c @@ -37,7 +37,7 @@ #include <limits.h> #include <string.h> -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_jitter.h" #include "BLI_threads.h" @@ -1808,16 +1808,16 @@ void zbuf_make_winmat(Render *re, float winmat[][4]) float panomat[4][4]; if(re->r.mode & R_PANORAMA) { - Mat4One(panomat); + unit_m4(panomat); panomat[0][0]= re->panoco; panomat[0][2]= re->panosi; panomat[2][0]= -re->panosi; panomat[2][2]= re->panoco; - Mat4MulMat4(winmat, panomat, re->winmat); + mul_m4_m4m4(winmat, panomat, re->winmat); } else - Mat4CpyMat4(winmat, re->winmat); + copy_m4_m4(winmat, re->winmat); } /* do zbuffering and clip, f1 f2 f3 are hocos, c1 c2 c3 are clipping flags */ @@ -2133,9 +2133,9 @@ void zbuffer_solid(RenderPart *pa, RenderLayer *rl, void(*fillfunc)(RenderPart*, continue; if(obi->flag & R_TRANSFORMED) - Mat4MulMat4(obwinmat, obi->mat, winmat); + mul_m4_m4m4(obwinmat, obi->mat, winmat); else - Mat4CpyMat4(obwinmat, winmat); + copy_m4_m4(obwinmat, winmat); if(clip_render_object(obi->obr->boundbox, bounds, obwinmat)) continue; @@ -2312,9 +2312,9 @@ void zbuffer_shadow(Render *re, float winmat[][4], LampRen *lar, int *rectz, int continue; if(obi->flag & R_TRANSFORMED) - Mat4MulMat4(obwinmat, obi->mat, winmat); + mul_m4_m4m4(obwinmat, obi->mat, winmat); else - Mat4CpyMat4(obwinmat, winmat); + copy_m4_m4(obwinmat, winmat); if(clip_render_object(obi->obr->boundbox, NULL, obwinmat)) continue; @@ -2551,9 +2551,9 @@ void zbuffer_sss(RenderPart *pa, unsigned int lay, void *handle, void (*func)(vo continue; if(obi->flag & R_TRANSFORMED) - Mat4MulMat4(obwinmat, obi->mat, winmat); + mul_m4_m4m4(obwinmat, obi->mat, winmat); else - Mat4CpyMat4(obwinmat, winmat); + copy_m4_m4(obwinmat, winmat); if(clip_render_object(obi->obr->boundbox, bounds, obwinmat)) continue; @@ -3297,9 +3297,9 @@ static int zbuffer_abuf(Render *re, RenderPart *pa, APixstr *APixbuf, ListBase * continue; if(obi->flag & R_TRANSFORMED) - Mat4MulMat4(obwinmat, obi->mat, winmat); + mul_m4_m4m4(obwinmat, obi->mat, winmat); else - Mat4CpyMat4(obwinmat, winmat); + copy_m4_m4(obwinmat, winmat); if(clip_render_object(obi->obr->boundbox, bounds, obwinmat)) continue; diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index 224338e557a..554418e6483 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -52,6 +52,9 @@ void WM_init (struct bContext *C); void WM_exit (struct bContext *C); void WM_main (struct bContext *C); + +void WM_check (struct bContext *C); + struct wmWindow *WM_window_open (struct bContext *C, struct rcti *rect); /* defines for 'type' WM_window_open_temp */ @@ -83,6 +86,8 @@ void WM_timecursor (struct wmWindow *win, int nr); void *WM_paint_cursor_activate(struct wmWindowManager *wm, int (*poll)(struct bContext *C), void (*draw)(struct bContext *C, int, int, void *customdata), void *customdata); void WM_paint_cursor_end(struct wmWindowManager *wm, void *handle); +void WM_cursor_warp (struct wmWindow *win, int x, int y); + /* keyconfig and keymap */ wmKeyConfig *WM_keyconfig_add (struct wmWindowManager *wm, char *idname); void WM_keyconfig_free (struct wmKeyConfig *keyconf); @@ -185,6 +190,7 @@ void WM_operator_properties_alloc(struct PointerRNA **ptr, struct IDProperty ** void WM_operator_properties_create(struct PointerRNA *ptr, const char *opstring); void WM_operator_properties_free(struct PointerRNA *ptr); void WM_operator_properties_filesel(struct wmOperatorType *ot, int filter, short type); +void WM_operator_properties_gesture_border(wmOperatorType *ot, int extend); /* operator as a python command (resultuing string must be free'd) */ char *WM_operator_pystring(struct bContext *C, struct wmOperatorType *ot, struct PointerRNA *opptr, int all_args); diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h index 3d31341c66a..891ed8358fb 100644 --- a/source/blender/windowmanager/WM_types.h +++ b/source/blender/windowmanager/WM_types.h @@ -133,8 +133,8 @@ typedef struct wmNotifier { #define NC_WORLD (13<<24) #define NC_ANIMATION (14<<24) #define NC_SPACE (15<<24) -#define NC_NODE (15<<24) #define NC_GEOM (16<<24) +#define NC_NODE (17<<24) /* data type, 256 entries is enough, it can overlap */ #define NOTE_DATA 0x00FF0000 @@ -211,6 +211,10 @@ typedef struct wmNotifier { #define ND_SELECT (80<<16) #define ND_DATA (81<<16) + /* NC_NODE Nodes */ +#define ND_NODE_SELECT (1<<16) + + /* NC_SPACE */ #define ND_SPACE_CONSOLE (1<<16) /* general redraw */ #define ND_SPACE_CONSOLE_REPORT (2<<16) /* update for reports, could specify type */ diff --git a/source/blender/windowmanager/intern/wm.c b/source/blender/windowmanager/intern/wm.c index 1d173005d85..d455c8b2bc1 100644 --- a/source/blender/windowmanager/intern/wm.c +++ b/source/blender/windowmanager/intern/wm.c @@ -43,6 +43,7 @@ #include "BKE_main.h" #include "BKE_screen.h" #include "BKE_report.h" +#include "BKE_global.h" #include "WM_api.h" #include "WM_types.h" @@ -196,7 +197,7 @@ void WM_keymap_init(bContext *C) WM_keyconfig_userdef(wm); } -void wm_check(bContext *C) +void WM_check(bContext *C) { wmWindowManager *wm= CTX_wm_manager(C); @@ -208,19 +209,21 @@ void wm_check(bContext *C) if(wm==NULL) return; if(wm->windows.first==NULL) return; - /* case: fileread */ - if((wm->initialized & WM_INIT_WINDOW) == 0) { - WM_keymap_init(C); - WM_autosave_init(C); - } - - /* case: no open windows at all, for old file reads */ - wm_window_add_ghostwindows(wm); - - /* case: fileread */ - if((wm->initialized & WM_INIT_WINDOW) == 0) { - ED_screens_initialize(wm); - wm->initialized |= WM_INIT_WINDOW; + if (!G.background) { + /* case: fileread */ + if((wm->initialized & WM_INIT_WINDOW) == 0) { + WM_keymap_init(C); + WM_autosave_init(C); + } + + /* case: no open windows at all, for old file reads */ + wm_window_add_ghostwindows(wm); + + /* case: fileread */ + if((wm->initialized & WM_INIT_WINDOW) == 0) { + ED_screens_initialize(wm); + wm->initialized |= WM_INIT_WINDOW; + } } } diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index f301a20a7c1..fc453756ffa 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -498,12 +498,25 @@ static int wm_operator_call_internal(bContext *C, wmOperatorType *ot, int contex int retval; /* dummie test */ - if(ot && C && window) { - event= window->eventstate; + if(ot && C) { + switch(context) { + case WM_OP_INVOKE_DEFAULT: + case WM_OP_INVOKE_REGION_WIN: + case WM_OP_INVOKE_AREA: + case WM_OP_INVOKE_SCREEN: + /* window is needed for invoke, cancel operator */ + if (window == NULL) + return 0; + else + event= window->eventstate; + break; + default: + event = NULL; + } + switch(context) { case WM_OP_EXEC_REGION_WIN: - event= NULL; /* pass on without break */ case WM_OP_INVOKE_REGION_WIN: { /* forces operator to go to the region window, for header menus */ @@ -527,7 +540,6 @@ static int wm_operator_call_internal(bContext *C, wmOperatorType *ot, int contex return retval; } case WM_OP_EXEC_AREA: - event= NULL; /* pass on without break */ case WM_OP_INVOKE_AREA: { /* remove region from context */ @@ -540,7 +552,6 @@ static int wm_operator_call_internal(bContext *C, wmOperatorType *ot, int contex return retval; } case WM_OP_EXEC_SCREEN: - event= NULL; /* pass on without break */ case WM_OP_INVOKE_SCREEN: { /* remove region + area from context */ @@ -556,7 +567,6 @@ static int wm_operator_call_internal(bContext *C, wmOperatorType *ot, int contex return retval; } case WM_OP_EXEC_DEFAULT: - event= NULL; /* pass on without break */ case WM_OP_INVOKE_DEFAULT: return wm_operator_invoke(C, ot, event, properties, reports); } diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c index b2e55c8532e..6348e1a2717 100644 --- a/source/blender/windowmanager/intern/wm_files.c +++ b/source/blender/windowmanager/intern/wm_files.c @@ -256,8 +256,8 @@ void WM_read_file(bContext *C, char *name, ReportList *reports) G.save_over = 1; /* match the read WM with current WM */ - wm_window_match_do(C, &wmbase); - wm_check(C); /* opens window(s), checks keymaps */ + wm_window_match_do(C, &wmbase); + WM_check(C); /* opens window(s), checks keymaps */ // XXX mainwindow_set_filename_to_title(G.main->name); @@ -322,14 +322,14 @@ int WM_read_homefile(bContext *C, wmOperator *op) /* match the read WM with current WM */ wm_window_match_do(C, &wmbase); - wm_check(C); /* opens window(s), checks keymaps */ + WM_check(C); /* opens window(s), checks keymaps */ strcpy(G.sce, scestr); /* restore */ wm_init_userdef(); /* When loading factory settings, the reset solid OpenGL lights need to be applied. */ - GPU_default_lights(); + if (!G.background) GPU_default_lights(); /* XXX */ G.save_over = 0; // start with save preference untitled.blend diff --git a/source/blender/windowmanager/intern/wm_gesture.c b/source/blender/windowmanager/intern/wm_gesture.c index 05471329f32..882da1794c6 100644 --- a/source/blender/windowmanager/intern/wm_gesture.c +++ b/source/blender/windowmanager/intern/wm_gesture.c @@ -76,9 +76,13 @@ wmGesture *WM_gesture_new(bContext *C, wmEvent *event, int type) gesture->customdata= rect; rect->xmin= event->x - sx; rect->ymin= event->y - sy; - if(type==WM_GESTURE_CIRCLE) + if(type==WM_GESTURE_CIRCLE) { +#ifdef GESTURE_MEMORY + rect->xmax= circle_select_size; +#else rect->xmax= 25; // XXX temp - else { +#endif + } else { rect->xmax= event->x - sx; rect->ymax= event->y - sy; } diff --git a/source/blender/windowmanager/intern/wm_init_exit.c b/source/blender/windowmanager/intern/wm_init_exit.c index 8097822acbc..06227086006 100644 --- a/source/blender/windowmanager/intern/wm_init_exit.c +++ b/source/blender/windowmanager/intern/wm_init_exit.c @@ -108,8 +108,10 @@ static void wm_free_reports(bContext *C) void WM_init(bContext *C) { - wm_ghost_init(C); /* note: it assigns C to ghost! */ - wm_init_cursor_data(); + if (!G.background) { + wm_ghost_init(C); /* note: it assigns C to ghost! */ + wm_init_cursor_data(); + } wm_operatortype_init(); set_free_windowmanager_cb(wm_close_and_free); /* library.c */ @@ -130,10 +132,12 @@ void WM_init(bContext *C) WM_read_homefile(C, NULL); wm_init_reports(C); /* reports cant be initialized before the wm */ - - GPU_extensions_init(); - UI_init(); + if (!G.background) { + GPU_extensions_init(); + + UI_init(); + } // clear_matcopybuf(); /* XXX */ diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index db09619046e..22c5f1c15ae 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -81,6 +81,7 @@ #include "wm.h" #include "wm_draw.h" #include "wm_event_system.h" +#include "wm_event_types.h" #include "wm_subwindow.h" #include "wm_window.h" @@ -570,6 +571,19 @@ void WM_operator_properties_filesel(wmOperatorType *ot, int filter, short type) RNA_def_property_flag(prop, PROP_HIDDEN); } +void WM_operator_properties_gesture_border(wmOperatorType *ot, int extend) +{ + RNA_def_int(ot->srna, "gesture_mode", 0, INT_MIN, INT_MAX, "Gesture Mode", "", INT_MIN, INT_MAX); + RNA_def_int(ot->srna, "xmin", 0, INT_MIN, INT_MAX, "X Min", "", INT_MIN, INT_MAX); + RNA_def_int(ot->srna, "xmax", 0, INT_MIN, INT_MAX, "X Max", "", INT_MIN, INT_MAX); + RNA_def_int(ot->srna, "ymin", 0, INT_MIN, INT_MAX, "Y Min", "", INT_MIN, INT_MAX); + RNA_def_int(ot->srna, "ymax", 0, INT_MIN, INT_MAX, "Y Max", "", INT_MIN, INT_MAX); + + if(extend) + RNA_def_boolean(ot->srna, "extend", 0, "Extend", "Extend selection instead of deselecting everything first."); +} + + /* op->poll */ int WM_operator_winactive(bContext *C) { @@ -1524,7 +1538,7 @@ void WM_paint_cursor_end(wmWindowManager *wm, void *handle) It stores 4 values (xmin, xmax, ymin, ymax) and event it ended with (event_type) */ -static int border_apply(bContext *C, wmOperator *op, int event_type, int event_orig) +static int border_apply(bContext *C, wmOperator *op, int gesture_mode) { wmGesture *gesture= op->customdata; rcti *rect= gesture->customdata; @@ -1544,12 +1558,9 @@ static int border_apply(bContext *C, wmOperator *op, int event_type, int event_o RNA_int_set(op->ptr, "ymax", rect->ymax); /* XXX weak; border should be configured for this without reading event types */ - if( RNA_struct_find_property(op->ptr, "event_type") ) { - if(ELEM4(event_orig, EVT_TWEAK_L, EVT_TWEAK_R, EVT_TWEAK_A, EVT_TWEAK_S)) - event_type= LEFTMOUSE; - - RNA_int_set(op->ptr, "event_type", event_type); - } + if( RNA_struct_find_property(op->ptr, "gesture_mode") ) + RNA_int_set(op->ptr, "gesture_mode", gesture_mode); + op->type->exec(C, op); return 1; @@ -1589,52 +1600,59 @@ int WM_border_select_modal(bContext *C, wmOperator *op, wmEvent *event) rcti *rect= gesture->customdata; int sx, sy; - switch(event->type) { - case MOUSEMOVE: - - wm_subwindow_getorigin(CTX_wm_window(C), gesture->swinid, &sx, &sy); - + if(event->type== MOUSEMOVE) { + wm_subwindow_getorigin(CTX_wm_window(C), gesture->swinid, &sx, &sy); + + if(gesture->type==WM_GESTURE_CROSS_RECT && gesture->mode==0) { + rect->xmin= rect->xmax= event->x - sx; + rect->ymin= rect->ymax= event->y - sy; + } + else { + rect->xmax= event->x - sx; + rect->ymax= event->y - sy; + } + + wm_gesture_tag_redraw(C); + } + else if (event->type==EVT_MODAL_MAP) { + switch (event->val) { + case GESTURE_MODAL_BORDER_BEGIN: if(gesture->type==WM_GESTURE_CROSS_RECT && gesture->mode==0) { - rect->xmin= rect->xmax= event->x - sx; - rect->ymin= rect->ymax= event->y - sy; - } - else { - rect->xmax= event->x - sx; - rect->ymax= event->y - sy; + gesture->mode= 1; + wm_gesture_tag_redraw(C); } - - wm_gesture_tag_redraw(C); - break; - - case LEFTMOUSE: - case MIDDLEMOUSE: - case RIGHTMOUSE: - if(event->val==KM_PRESS) { - if(gesture->type==WM_GESTURE_CROSS_RECT && gesture->mode==0) { - gesture->mode= 1; - wm_gesture_tag_redraw(C); - } - } - else { - if(border_apply(C, op, event->type, gesture->event_type)) { - wm_gesture_end(C, op); - return OPERATOR_FINISHED; - } + case GESTURE_MODAL_SELECT: + case GESTURE_MODAL_DESELECT: + if(border_apply(C, op, event->val)) { wm_gesture_end(C, op); - return OPERATOR_CANCELLED; + return OPERATOR_FINISHED; } + wm_gesture_end(C, op); + return OPERATOR_CANCELLED; break; - case ESCKEY: + + case GESTURE_MODAL_CANCEL: wm_gesture_end(C, op); return OPERATOR_CANCELLED; + } + } +// // Allow view navigation??? +// else { +// return OPERATOR_PASS_THROUGH; +// } + return OPERATOR_RUNNING_MODAL; } /* **************** circle gesture *************** */ /* works now only for selection or modal paint stuff, calls exec while hold mouse, exit on release */ +#ifdef GESTURE_MEMORY +int circle_select_size= 25; // XXX - need some operator memory thing\! +#endif + int WM_gesture_circle_invoke(bContext *C, wmOperator *op, wmEvent *event) { op->customdata= WM_gesture_new(C, event, WM_GESTURE_CIRCLE); @@ -1652,6 +1670,9 @@ static void gesture_circle_apply(bContext *C, wmOperator *op) wmGesture *gesture= op->customdata; rcti *rect= gesture->customdata; + if(RNA_int_get(op->ptr, "gesture_mode")==GESTURE_MODAL_NOP) + return; + /* operator arguments and storage. */ RNA_int_set(op->ptr, "x", rect->xmin); RNA_int_set(op->ptr, "y", rect->ymin); @@ -1659,6 +1680,10 @@ static void gesture_circle_apply(bContext *C, wmOperator *op) if(op->type->exec) op->type->exec(C, op); + +#ifdef GESTURE_MEMORY + circle_select_size= rect->xmax; +#endif } int WM_gesture_circle_modal(bContext *C, wmOperator *op, wmEvent *event) @@ -1666,50 +1691,53 @@ int WM_gesture_circle_modal(bContext *C, wmOperator *op, wmEvent *event) wmGesture *gesture= op->customdata; rcti *rect= gesture->customdata; int sx, sy; - - switch(event->type) { - case MOUSEMOVE: - - wm_subwindow_getorigin(CTX_wm_window(C), gesture->swinid, &sx, &sy); - - rect->xmin= event->x - sx; - rect->ymin= event->y - sy; - - wm_gesture_tag_redraw(C); - - if(gesture->mode) - gesture_circle_apply(C, op); - break; - case WHEELUPMOUSE: + if(event->type== MOUSEMOVE) { + wm_subwindow_getorigin(CTX_wm_window(C), gesture->swinid, &sx, &sy); + + rect->xmin= event->x - sx; + rect->ymin= event->y - sy; + + wm_gesture_tag_redraw(C); + + if(gesture->mode) + gesture_circle_apply(C, op); + } + else if (event->type==EVT_MODAL_MAP) { + switch (event->val) { + case GESTURE_MODAL_CIRCLE_ADD: rect->xmax += 2 + rect->xmax/10; wm_gesture_tag_redraw(C); break; - case WHEELDOWNMOUSE: + case GESTURE_MODAL_CIRCLE_SUB: rect->xmax -= 2 + rect->xmax/10; if(rect->xmax < 1) rect->xmax= 1; wm_gesture_tag_redraw(C); break; - case LEFTMOUSE: - case MIDDLEMOUSE: - case RIGHTMOUSE: - if(event->val==KM_RELEASE) { /* key release */ - wm_gesture_end(C, op); - return OPERATOR_FINISHED; - } - else { - if( RNA_struct_find_property(op->ptr, "event_type") ) - RNA_int_set(op->ptr, "event_type", event->type); - + case GESTURE_MODAL_SELECT: + case GESTURE_MODAL_DESELECT: + case GESTURE_MODAL_NOP: + if(RNA_struct_find_property(op->ptr, "gesture_mode")) + RNA_int_set(op->ptr, "gesture_mode", event->val); + + if(event->val != GESTURE_MODAL_NOP) { /* apply first click */ gesture_circle_apply(C, op); gesture->mode= 1; } break; - case ESCKEY: + + case GESTURE_MODAL_CANCEL: + case GESTURE_MODAL_CONFIRM: wm_gesture_end(C, op); return OPERATOR_CANCELLED; + } } +// // Allow view navigation??? +// else { +// return OPERATOR_PASS_THROUGH; +// } + return OPERATOR_RUNNING_MODAL; } @@ -2356,6 +2384,106 @@ void wm_operatortype_init(void) } +/* called in transform_ops.c, on each regeneration of keymaps */ +static void gesture_circle_modal_keymap(wmKeyConfig *keyconf) +{ + static EnumPropertyItem modal_items[] = { + {GESTURE_MODAL_CANCEL, "CANCEL", 0, "Cancel", ""}, + {GESTURE_MODAL_CONFIRM, "CONFIRM", 0, "Confirm", ""}, + {GESTURE_MODAL_CIRCLE_ADD, "ADD", 0, "Add", ""}, + {GESTURE_MODAL_CIRCLE_SUB, "SUBTRACT", 0, "Subtract", ""}, + + {GESTURE_MODAL_SELECT, "SELECT", 0, "Select", ""}, + {GESTURE_MODAL_DESELECT,"DESELECT", 0, "DeSelect", ""}, + {GESTURE_MODAL_NOP,"NOP", 0, "No Operation", ""}, + + + {0, NULL, 0, NULL, NULL}}; + + wmKeyMap *keymap= WM_modalkeymap_get(keyconf, "View3D Gesture Circle"); + + /* this function is called for each spacetype, only needs to add map once */ + if(keymap) return; + + keymap= WM_modalkeymap_add(keyconf, "View3D Gesture Circle", modal_items); + + /* items for modal map */ + WM_modalkeymap_add_item(keymap, ESCKEY, KM_PRESS, KM_ANY, 0, GESTURE_MODAL_CANCEL); + WM_modalkeymap_add_item(keymap, RIGHTMOUSE, KM_ANY, KM_ANY, 0, GESTURE_MODAL_CANCEL); + + WM_modalkeymap_add_item(keymap, RETKEY, KM_PRESS, KM_ANY, 0, GESTURE_MODAL_CONFIRM); + WM_modalkeymap_add_item(keymap, PADENTER, KM_PRESS, 0, 0, GESTURE_MODAL_CONFIRM); + + WM_modalkeymap_add_item(keymap, LEFTMOUSE, KM_PRESS, 0, 0, GESTURE_MODAL_SELECT); + +#if 0 // Durien guys like this :S + WM_modalkeymap_add_item(keymap, LEFTMOUSE, KM_PRESS, KM_SHIFT, 0, GESTURE_MODAL_DESELECT); + WM_modalkeymap_add_item(keymap, LEFTMOUSE, KM_RELEASE, KM_SHIFT, 0, GESTURE_MODAL_NOP); +#else + WM_modalkeymap_add_item(keymap, MIDDLEMOUSE, KM_PRESS, 0, 0, GESTURE_MODAL_DESELECT); // defailt 2.4x + WM_modalkeymap_add_item(keymap, MIDDLEMOUSE, KM_RELEASE, 0, 0, GESTURE_MODAL_NOP); // defailt 2.4x +#endif + + WM_modalkeymap_add_item(keymap, LEFTMOUSE, KM_RELEASE, 0, 0, GESTURE_MODAL_NOP); + + WM_modalkeymap_add_item(keymap, WHEELUPMOUSE, KM_PRESS, 0, 0, GESTURE_MODAL_CIRCLE_SUB); + WM_modalkeymap_add_item(keymap, PADMINUS, KM_PRESS, 0, 0, GESTURE_MODAL_CIRCLE_SUB); + WM_modalkeymap_add_item(keymap, WHEELDOWNMOUSE, KM_PRESS, 0, 0, GESTURE_MODAL_CIRCLE_ADD); + WM_modalkeymap_add_item(keymap, PADPLUSKEY, KM_PRESS, 0, 0, GESTURE_MODAL_CIRCLE_ADD); + + /* assign map to operators */ + WM_modalkeymap_assign(keymap, "VIEW3D_OT_select_circle"); + WM_modalkeymap_assign(keymap, "UV_OT_circle_select"); + +} + +/* called in transform_ops.c, on each regeneration of keymaps */ +static void gesture_border_modal_keymap(wmKeyConfig *keyconf) +{ + static EnumPropertyItem modal_items[] = { + {GESTURE_MODAL_CANCEL, "CANCEL", 0, "Cancel", ""}, + {GESTURE_MODAL_SELECT, "SELECT", 0, "Select", ""}, + {GESTURE_MODAL_DESELECT,"DESELECT", 0, "DeSelect", ""}, + {GESTURE_MODAL_BORDER_BEGIN, "BEGIN", 0, "Begin", ""}, + {0, NULL, 0, NULL, NULL}}; + + wmKeyMap *keymap= WM_modalkeymap_get(keyconf, "View3D Gesture Border"); + + /* this function is called for each spacetype, only needs to add map once */ + if(keymap) return; + + keymap= WM_modalkeymap_add(keyconf, "View3D Gesture Border", modal_items); + + /* items for modal map */ + WM_modalkeymap_add_item(keymap, ESCKEY, KM_PRESS, KM_ANY, 0, GESTURE_MODAL_CANCEL); + WM_modalkeymap_add_item(keymap, RIGHTMOUSE, KM_ANY, KM_ANY, 0, GESTURE_MODAL_CANCEL); + + WM_modalkeymap_add_item(keymap, LEFTMOUSE, KM_PRESS, 0, 0, GESTURE_MODAL_BORDER_BEGIN); + WM_modalkeymap_add_item(keymap, LEFTMOUSE, KM_RELEASE, 0, 0, GESTURE_MODAL_SELECT); + +#if 0 // Durian guys like this + WM_modalkeymap_add_item(keymap, LEFTMOUSE, KM_PRESS, KM_SHIFT, 0, GESTURE_MODAL_BORDER_BEGIN); + WM_modalkeymap_add_item(keymap, LEFTMOUSE, KM_RELEASE, KM_SHIFT, 0, GESTURE_MODAL_DESELECT); +#else + WM_modalkeymap_add_item(keymap, MIDDLEMOUSE, KM_PRESS, 0, 0, GESTURE_MODAL_BORDER_BEGIN); + WM_modalkeymap_add_item(keymap, MIDDLEMOUSE, KM_RELEASE, 0, 0, GESTURE_MODAL_DESELECT); +#endif + + /* assign map to operators */ + WM_modalkeymap_assign(keymap, "ANIM_OT_channels_select_border"); + WM_modalkeymap_assign(keymap, "MARKER_OT_select_border"); +// WM_modalkeymap_assign(keymap, "SCREEN_OT_border_select"); // template + WM_modalkeymap_assign(keymap, "ACT_OT_select_border"); + WM_modalkeymap_assign(keymap, "CONSOLE_OT_select_border"); + WM_modalkeymap_assign(keymap, "FILE_OT_select_border"); + WM_modalkeymap_assign(keymap, "GRAPH_OT_select_border"); + WM_modalkeymap_assign(keymap, "NLA_OT_select_border"); + WM_modalkeymap_assign(keymap, "NODE_OT_select_border"); + WM_modalkeymap_assign(keymap, "SEQUENCER_OT_select_border"); + WM_modalkeymap_assign(keymap, "VIEW3D_OT_select_border"); + WM_modalkeymap_assign(keymap, "UV_OT_select_border"); +} + /* default keymap for windows and screens, only call once per WM */ void wm_window_keymap(wmKeyConfig *keyconf) { @@ -2444,6 +2572,9 @@ void wm_window_keymap(wmKeyConfig *keyconf) km = WM_keymap_add_item(keymap, "WM_OT_context_set_enum", F12KEY, KM_PRESS, KM_SHIFT, 0); RNA_string_set(km->ptr, "path", "area.type"); RNA_string_set(km->ptr, "value", "DOPESHEET_EDITOR"); + + gesture_circle_modal_keymap(keyconf); + gesture_border_modal_keymap(keyconf); } /* Generic itemf's for operators that take library args */ @@ -2470,9 +2601,9 @@ static EnumPropertyItem *rna_id_itemf(bContext *C, PointerRNA *ptr, int *free, I /* can add more */ EnumPropertyItem *RNA_group_itemf(bContext *C, PointerRNA *ptr, int *free) { - rna_id_itemf(C, ptr, free, (ID *)CTX_data_main(C)->group.first); + return rna_id_itemf(C, ptr, free, (ID *)CTX_data_main(C)->group.first); } EnumPropertyItem *RNA_scene_itemf(bContext *C, PointerRNA *ptr, int *free) { - rna_id_itemf(C, ptr, free, (ID *)CTX_data_main(C)->scene.first); + return rna_id_itemf(C, ptr, free, (ID *)CTX_data_main(C)->scene.first); } diff --git a/source/blender/windowmanager/intern/wm_subwindow.c b/source/blender/windowmanager/intern/wm_subwindow.c index 081125bf7f6..00af9eb0bb9 100644 --- a/source/blender/windowmanager/intern/wm_subwindow.c +++ b/source/blender/windowmanager/intern/wm_subwindow.c @@ -38,7 +38,7 @@ #include "DNA_screen_types.h" #include "BLI_blenlib.h" -#include "BLI_arithb.h" +#include "BLI_math.h" #include "BKE_context.h" #include "BKE_global.h" @@ -133,7 +133,7 @@ void wm_subwindow_getmatrix(wmWindow *win, int swinid, float mat[][4]) wmSubWindow *swin= swin_from_swinid(win, swinid); if(swin) - Mat4MulMat4(mat, swin->viewmat, swin->winmat); + mul_m4_m4m4(mat, swin->viewmat, swin->winmat); } /* always sets pixel-precise 2D window/view matrices */ @@ -155,8 +155,8 @@ int wm_subwindow_open(wmWindow *win, rcti *winrct) swin->swinid= freewinid; swin->winrct= *winrct; - Mat4One(swin->viewmat); - Mat4One(swin->winmat); + unit_m4(swin->viewmat); + unit_m4(swin->winmat); /* and we appy it all right away */ wmSubWindowSet(win, swin->swinid); @@ -279,9 +279,9 @@ void wmLoadMatrix(float mat[][4]) glLoadMatrixf(mat); if (glaGetOneInteger(GL_MATRIX_MODE)==GL_MODELVIEW) - Mat4CpyMat4(_curswin->viewmat, mat); + copy_m4_m4(_curswin->viewmat, mat); else - Mat4CpyMat4(_curswin->winmat, mat); + copy_m4_m4(_curswin->winmat, mat); } void wmGetMatrix(float mat[][4]) @@ -289,9 +289,9 @@ void wmGetMatrix(float mat[][4]) if(_curswin==NULL) return; if (glaGetOneInteger(GL_MATRIX_MODE)==GL_MODELVIEW) { - Mat4CpyMat4(mat, _curswin->viewmat); + copy_m4_m4(mat, _curswin->viewmat); } else { - Mat4CpyMat4(mat, _curswin->winmat); + copy_m4_m4(mat, _curswin->winmat); } } @@ -317,8 +317,8 @@ void wmPushMatrix(void) printf("wmPushMatrix error already pushed\n"); debugpush= 1; - Mat4CpyMat4(_curswin->viewmat1, _curswin->viewmat); - Mat4CpyMat4(_curswin->winmat1, _curswin->winmat); + copy_m4_m4(_curswin->viewmat1, _curswin->viewmat); + copy_m4_m4(_curswin->winmat1, _curswin->winmat); } void wmPopMatrix(void) @@ -329,8 +329,8 @@ void wmPopMatrix(void) printf("wmPopMatrix error nothing popped\n"); debugpush= 0; - Mat4CpyMat4(_curswin->viewmat, _curswin->viewmat1); - Mat4CpyMat4(_curswin->winmat, _curswin->winmat1); + copy_m4_m4(_curswin->viewmat, _curswin->viewmat1); + copy_m4_m4(_curswin->winmat, _curswin->winmat1); glMatrixMode(GL_PROJECTION); glLoadMatrixf(&_curswin->winmat[0][0]); @@ -342,7 +342,7 @@ void wmPopMatrix(void) void wmGetSingleMatrix(float mat[][4]) { if(_curswin) - Mat4MulMat4(mat, _curswin->viewmat, _curswin->winmat); + mul_m4_m4m4(mat, _curswin->viewmat, _curswin->winmat); } void wmScale(float x, float y, float z) @@ -363,9 +363,9 @@ void wmLoadIdentity(void) if(_curswin==NULL) return; if (glaGetOneInteger(GL_MATRIX_MODE)==GL_MODELVIEW) - Mat4One(_curswin->viewmat); + unit_m4(_curswin->viewmat); else - Mat4One(_curswin->winmat); + unit_m4(_curswin->winmat); glLoadIdentity(); } diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c index 70d40df4532..a4a22f347b7 100644 --- a/source/blender/windowmanager/intern/wm_window.c +++ b/source/blender/windowmanager/intern/wm_window.c @@ -335,7 +335,7 @@ static void wm_window_add_ghostwindow(wmWindowManager *wm, char *title, wmWindow /* for wmWindows without ghostwin, open these and clear */ /* window size is read from window, if 0 it uses prefsize */ -/* called in wm_check, also inits stuff after file read */ +/* called in WM_check, also inits stuff after file read */ void wm_window_add_ghostwindows(wmWindowManager *wm) { wmKeyMap *keymap; @@ -403,7 +403,7 @@ wmWindow *WM_window_open(bContext *C, rcti *rect) win->drawmethod= -1; win->drawdata= NULL; - wm_check(C); + WM_check(C); return win; } @@ -448,7 +448,7 @@ void WM_window_open_temp(bContext *C, rcti *position, int type) /* make window active, and validate/resize */ CTX_wm_window_set(C, win); - wm_check(C); + WM_check(C); /* ensure it shows the right spacetype editor */ sa= win->screen->areabase.first; @@ -480,7 +480,7 @@ void WM_window_open_temp(bContext *C, rcti *position, int type) int wm_window_duplicate_op(bContext *C, wmOperator *op) { wm_window_copy(C, CTX_wm_window(C)); - wm_check(C); + WM_check(C); return OPERATOR_FINISHED; } @@ -972,3 +972,17 @@ void WM_setprefsize(int stax, int stay, int sizx, int sizy) prefsizy= sizy; } +/* This function requires access to the GHOST_SystemHandle (g_system) */ +void WM_cursor_warp(wmWindow *win, int x, int y) +{ + if (win && win->ghostwin) { + int oldx=x, oldy=y; + + y= win->sizey -y - 1; + GHOST_ClientToScreen(win->ghostwin, x, y, &x, &y); + GHOST_SetCursorPosition(g_system, x, y); + + win->eventstate->prevx= oldx; + win->eventstate->prevy= oldy; + } +}
\ No newline at end of file diff --git a/source/blender/windowmanager/wm.h b/source/blender/windowmanager/wm.h index 609b6142640..9b888a0e347 100644 --- a/source/blender/windowmanager/wm.h +++ b/source/blender/windowmanager/wm.h @@ -44,7 +44,6 @@ extern void wm_close_and_free(bContext *C, wmWindowManager *); extern void wm_close_and_free_all(bContext *C, ListBase *); extern void wm_add_default(bContext *C); -extern void wm_check(bContext *C); extern void wm_clear_default_size(bContext *C); /* register to windowmanager for redo or macro */ @@ -76,5 +75,12 @@ void wm_autosave_delete(void); void wm_autosave_read(bContext *C, struct ReportList *reports); void wm_autosave_location(char *filename); +/* hack to store circle select size - campbell, must replace with nice operator memory */ +#define GESTURE_MEMORY + +#ifdef GESTURE_MEMORY +extern int circle_select_size; +#endif + #endif /* WM_H */ diff --git a/source/blender/windowmanager/wm_event_types.h b/source/blender/windowmanager/wm_event_types.h index c7588795a15..8412e7f0b16 100644 --- a/source/blender/windowmanager/wm_event_types.h +++ b/source/blender/windowmanager/wm_event_types.h @@ -261,6 +261,19 @@ #define EVT_BUT_OPEN 0x5021 #define EVT_MODAL_MAP 0x5022 +/* NOTE: these defines are saved in keymap files, do not change values but just add new ones */ +#define GESTURE_MODAL_CANCEL 1 +#define GESTURE_MODAL_CONFIRM 2 + +#define GESTURE_MODAL_SELECT 3 +#define GESTURE_MODAL_DESELECT 4 + +#define GESTURE_MODAL_NOP 5 /* circle select when no mouse button is pressed */ + +#define GESTURE_MODAL_CIRCLE_ADD 6 /* circle sel: larger brush */ +#define GESTURE_MODAL_CIRCLE_SUB 7 /* circle sel: smaller brush */ + +#define GESTURE_MODAL_BORDER_BEGIN 8 /* border select, activate, use release to detect which button */ #endif /* WM_EVENT_TYPES_H */ |