diff options
| author | John Wilbert M. Villamor <lameguy64@gmail.com> | 2019-04-06 10:11:07 +0800 |
|---|---|---|
| committer | John Wilbert M. Villamor <lameguy64@gmail.com> | 2019-04-06 10:11:07 +0800 |
| commit | f3e040230772f978540a71aea43dfde200992922 (patch) | |
| tree | bd8ca31b72dd01e24980b073854e263589530f56 | |
| download | psn00bsdk-f3e040230772f978540a71aea43dfde200992922.tar.gz | |
First commit
222 files changed, 32100 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..50d3fdc --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +.svn +build +bin +*.a +*.o +*.elf +*.exe +*.lzp +*.qlp +*.iso
\ No newline at end of file diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..fa0086a --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,373 @@ +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0.
\ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..e059473 --- /dev/null +++ b/README.md @@ -0,0 +1,53 @@ +# PSn00bSDK + +PSn00bSDK is a 100% free and open source SDK for developing homebrew games and applications for the original Sony PlayStation. The SDK consists mainly of libraries and some tools for converting and building resources to be used on the console. + +While PSn00bSDK is currently a work in progress the project aims to develop an SDK that is as close to the official Sony SDK as possiblein in terms of supported hardware features which include GPU, GTE, SPU, CD, MDEC and controller/memory card peripherals and a library API written to follow the official SDK's API syntax. With extensive low-level technical documentation of the PSX readily available (such as nocash's PSX specs) there should be no excuse to not have full support of the aforementioned hardware features. + +The PSn00bSDK libraries are written mostly in MIPS assembly language with compiler generated code limited to small and moderately sized support functions for best possible performance and to keep the runtime library footprint as small as possible. Many of the library functions avoid using BIOS calls such as C string and memory manipulation functions and use pure assembly equivalents for improved performance for memory and string manipulation operations. + + +## Building the SDK + +For most users (particularly those who run Windows) it is recommended to just download a release package containing the GCC toolchain and libraries in binary form ready to be used. + +If you wish to build the SDK yourself building PSn00bSDK requires a GNU GCC toolchain targeting mipsel-unknown-elf. For instructions on how to build the GCC toolchain please read toolchain.txt. + +To build the PSn00bSDK libraries simply enter the libpsn00b directory and run make. Make sure you have the path of the toolchain binaries in your PATH environment variable. If things go accordingly it should run through all library directories and produce library files. + +To build the PSn00bSDK tools simply enter the tools directory and run make. You'll need tinyxml2 to satisfy the lzpack and smxlink tools. + +To build the PSn00bSDK examples which also tests if your SDK setup works correctly simply enter the examples directory and run make. You may want to modify the sdk-common.mk file first and make sure the library paths are correct and that your PATH environment variable has the tools/bin directory in it as elf2x and lzpack are required for the examples to build correctly. + + +## Examples + +There are a few graphics examples and complete source code of n00bdemo included in the examples directory. More example programs may be added in future updates and contributions are welcome. + + +## To-do + +* Support functions to get C++ classes working are yet to be implemented. glibc won't compile and likely depends on a Linux kernel that does not exist on the PS1. Newlib might be undesirable as it appears to be too bloated for PS1. + +* psxspu needs to be expanded upon. Currently lacks support for reverb and many voice controls. + +* Controller library that polls the pads on every vblank and support for multitaps are yet to be made. + +* An 'IRQ handler for all' implementation through BIOS function SetCustomExitFromException() is yet to be implemented for better/more reliable interrupt handling. Details can be found in the readme of psxgpu. + +* CD-ROM library is yet to be made. + + +## Usage terms + +PSn00bSDK falls under the terms and conditions of the Mozilla Public License. A quick summary of this license is that PSn00bSDK can be used freely in both free and open source projects and commercial closed source projects. But if modifications to the SDK were made as part of the development of such projects such changes must be contributed back in return. + + +## Credits + +Main developer: +* Lameguy64 + +Important references used: +* nocash's PlayStation specs document (http://problemkaputt.de/psx-spx.htm) +* Tails92's PSXSDK project (bits and pieces used as reference). diff --git a/doc/libn00bref.odt b/doc/libn00bref.odt Binary files differnew file mode 100644 index 0000000..6ed8285 --- /dev/null +++ b/doc/libn00bref.odt diff --git a/examples/balls/ball16c.h b/examples/balls/ball16c.h new file mode 100644 index 0000000..c79f273 --- /dev/null +++ b/examples/balls/ball16c.h @@ -0,0 +1,16 @@ +unsigned int ball16c_size=192; +unsigned char ball16c[] = { +0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0xc0,0x03,0x10, +0x01,0x10,0x00,0x01,0x00,0x00,0x00,0x31,0xc6,0x73,0xce,0x94,0xd2,0x07,0x9d, +0xd6,0xda,0x38,0xe3,0xef,0xbd,0x9b,0xef,0x8c,0xb1,0xc6,0x98,0xde,0xfb,0x4a, +0xa9,0xa4,0x90,0xad,0xb5,0x00,0x00,0x8c,0x00,0x00,0x00,0xc0,0x03,0x00,0x01, +0x04,0x00,0x10,0x00,0x00,0x00,0x10,0x22,0x12,0x02,0x00,0x00,0x00,0x10,0x32, +0x33,0x23,0x11,0x04,0x00,0x00,0x23,0x55,0x66,0x35,0x72,0x47,0x00,0x20,0x52, +0x86,0x68,0x36,0x12,0x97,0x0a,0x20,0x65,0xbb,0x8b,0x36,0x12,0x91,0x04,0x31, +0x85,0xbb,0x68,0x35,0x12,0x97,0xdc,0x32,0x86,0x8b,0x56,0x35,0x73,0x97,0xa4, +0x32,0x66,0x68,0x55,0x23,0x71,0x9e,0xac,0x32,0x65,0x56,0x33,0x13,0x71,0xce, +0xa4,0x21,0x33,0x33,0x23,0x11,0xe7,0xc9,0xd4,0x12,0x22,0x22,0x13,0x71,0xe7, +0xc9,0xda,0x10,0x17,0x11,0x77,0x77,0x9e,0x4c,0x0d,0x40,0x77,0x71,0xe7,0x9e, +0xc9,0xd4,0x0d,0x00,0x94,0x99,0x99,0xcc,0x4c,0xda,0x00,0x00,0xa0,0xc4,0xc4, +0x44,0xda,0x0d,0x00,0x00,0x00,0xd0,0xaa,0xda,0x0d,0x00,0x00 +}; diff --git a/examples/balls/ball16c.tim b/examples/balls/ball16c.tim Binary files differnew file mode 100644 index 0000000..e2a5d17 --- /dev/null +++ b/examples/balls/ball16c.tim diff --git a/examples/balls/balls b/examples/balls/balls Binary files differnew file mode 100644 index 0000000..b3fbe8f --- /dev/null +++ b/examples/balls/balls diff --git a/examples/balls/main.c b/examples/balls/main.c new file mode 100644 index 0000000..3e23fb5 --- /dev/null +++ b/examples/balls/main.c @@ -0,0 +1,225 @@ +/* + * LibPSn00b Example Programs + * + * Balls Example + * 2019 Meido-Tek Productions / PSn00bSDK Project + * + * To build, simply run make. + * + * Example by Lameguy64 + * + * Changelog: + * + * November 20, 2018 - Initial version. + * + */ + +#include <stdio.h> +#include <stdlib.h> +#include <psxetc.h> +#include <psxgte.h> +#include <psxgpu.h> +#include "ball16c.h" + + +#define MAX_BALLS 384 + +#define OT_LEN 8 + +#define SCREEN_XRES 640 +#define SCREEN_YRES 480 + +#define CENTER_X SCREEN_XRES/2 +#define CENTER_Y SCREEN_YRES/2 + + +/* Display and drawing environments */ +DISPENV disp; +DRAWENV draw; + +char pribuff[2][65536]; /* Primitive packet buffers */ +unsigned int ot[2][OT_LEN]; /* Ordering tables */ +char *nextpri; /* Pointer to next packet buffer offset */ +int db = 0; /* Double buffer index */ + + +/* Ball struct and array */ +typedef struct { + short x,y; + short xdir,ydir; + unsigned char r,g,b,p; +} BALL_TYPE; + +BALL_TYPE balls[MAX_BALLS]; + + +/* TIM image parameters for loading the ball texture and drawing sprites */ +TIM_IMAGE tim; + + +void init() { + + int i; + + /* Reset GPU (also installs event handler for VSync) */ + printf("Init GPU... "); + ResetGraph( 0 ); + printf("Done.\n"); + + + printf("Set video mode... "); + + /* Set display and draw environment parameters */ + SetDefDispEnv( &disp, 0, 0, SCREEN_XRES, SCREEN_YRES ); + SetDefDrawEnv( &draw, 0, 0, SCREEN_XRES, SCREEN_YRES ); + disp.isinter = 1; /* Enable interlace (required for hires) */ + + /* Set clear color, area clear and dither processing */ + setRGB0( &draw, 63, 0, 127 ); + draw.isbg = 1; + draw.dtd = 1; + + /* Apply the display and drawing environments */ + PutDispEnv( &disp ); + PutDrawEnv( &draw ); + + /* Enable video output */ + SetDispMask( 1 ); + + printf("Done.\n"); + + + /* Upload the ball texture */ + printf("Upload texture... "); + GetTimInfo( (unsigned int*)ball16c, &tim ); /* Get TIM parameters */ + + LoadImage( tim.prect, tim.paddr ); /* Upload texture to VRAM */ + if( tim.mode & 0x8 ) { + LoadImage( tim.crect, tim.caddr ); /* Upload CLUT if present */ + } + + printf("Done.\n"); + + + /* Calculate ball positions */ + printf("Calculating balls... "); + + for(i=0; i<MAX_BALLS; i++) { + + balls[i].x = (rand()%624); + balls[i].y = (rand()%464); + balls[i].xdir = 1-(rand()%3); + balls[i].ydir = 1-(rand()%3); + if( !balls[i].xdir ) balls[i].xdir = 1; + if( !balls[i].ydir ) balls[i].ydir = 1; + balls[i].xdir *= 2; + balls[i].ydir *= 2; + balls[i].r = (rand()%256); + balls[i].g = (rand()%256); + balls[i].b = (rand()%256); + + } + + printf("Done.\n"); + +} + +int main(int argc, const char* argv[]) { + + SPRT_16 *sprt; + DR_TPAGE *tpri; + + int i,counter=0; + + + /* Init graphics and stuff before doing anything else */ + init(); + + + /* Main loop */ + printf("Entering loop...\n"); + + while(1) { + + /* Clear ordering table and set start address of primitive */ + /* buffer for next frame */ + ClearOTagR( ot[db], OT_LEN ); + nextpri = pribuff[db]; + + /* Sort a balls snake */ + sprt = (SPRT_16*)nextpri; + srand( 64 ); + for( i=0; i<32; i++ ) { + + setSprt16( sprt ); + setXY0( sprt, + (CENTER_X-8)+(isin((counter-(i<<4))<<3)>>5), + (CENTER_Y-8)-(icos((counter-(i<<2))<<3)>>5) ); + setRGB0( sprt, rand()%256, rand()%256, rand()%256 ); + setUV0( sprt, 0, 0 ); + setClut( sprt, tim.crect->x, tim.crect->y ); + + addPrim( ot[db]+(OT_LEN-1), sprt ); + sprt++; + + } + + /* Sort the balls */ + for( i=0; i<MAX_BALLS; i++ ) { + + setSprt16( sprt ); + setXY0( sprt, balls[i].x, balls[i].y ); + setRGB0( sprt, balls[i].r, balls[i].g, balls[i].b ); + setUV0( sprt, 0, 0 ); + setClut( sprt, tim.crect->x, tim.crect->y ); + + addPrim( ot[db]+(OT_LEN-1), sprt ); + sprt++; + + balls[i].x += balls[i].xdir; + balls[i].y += balls[i].ydir; + + if( ( balls[i].x+16 ) > 640 ) { + balls[i].xdir = -2; + } else if( balls[i].x < 0 ) { + balls[i].xdir = 2; + } + + if( ( balls[i].y+16 ) > 480 ) { + balls[i].ydir = -2; + } else if( balls[i].y < 0 ) { + balls[i].ydir = 2; + } + + } + nextpri = (char*)sprt; + + + /* Sort a TPage primitive so the sprites will draw pixels from */ + /* the correct texture page in VRAM */ + tpri = (DR_TPAGE*)nextpri; + setDrawTPage( tpri, 0, 0, tim.prect->x, tim.prect->y ); + addPrim( ot[db]+(OT_LEN-1), tpri ); + nextpri += sizeof(DR_TPAGE); + + /* Wait for GPU and VSync */ + DrawSync(); + VSync(); + + /* Since draw.isbg is non-zero this clears the screen */ + PutDrawEnv( &draw ); + + /* Begin drawing the new frame */ + DrawOTag( ot[db]+(OT_LEN-1) ); + + /* Alternate to the next buffer */ + db = !db; + + /* Increment counter for the snake animation */ + counter++; + + } + + return 0; + +} diff --git a/examples/balls/makefile b/examples/balls/makefile new file mode 100644 index 0000000..b5c8d91 --- /dev/null +++ b/examples/balls/makefile @@ -0,0 +1,39 @@ +include ../sdk-common.mk + +TARGET = balls.elf + +CFILES = $(notdir $(wildcard *.c)) +CPPFILES = $(notdir $(wildcard *.cpp)) +AFILES = $(notdir $(wildcard *.s)) + +OFILES = $(addprefix build/,$(CFILES:.c=.o) $(CPPFILES:.cpp=.o) $(AFILES:.s=.o)) + +INCLUDE += +LIBDIRS += + +LIBS = -lc -lpsxetc -lpsxgpu -lpsxgte -lpsxspu -lpsxapi -lgcc + +CFLAGS = -g -O2 -fno-builtin -fdata-sections -ffunction-sections +CPPFLAGS = $(CFLAGS) -fno-exceptions +AFLAGS = -g -msoft-float +LDFLAGS = -g -Ttext=0x80010000 -gc-sections + +CC = $(PREFIX)gcc +CXX = $(PREFIX)g++ +AS = $(PREFIX)as +LD = $(PREFIX)ld + +all: $(OFILES) + $(LD) $(LDFLAGS) $(LIBDIRS) $(OFILES) $(LIBS) -o $(TARGET) + elf2x -q $(TARGET) + +build/%.o: %.c + @mkdir -p $(dir $@) + $(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@ + +build/%.o: %.s + @mkdir -p $(dir $@) + $(CC) $(AFLAGS) $(INCLUDE) -c $< -o $@ + +clean: + rm -rf build $(TARGET) $(TARGET:.elf=.exe) diff --git a/examples/gte/main.c b/examples/gte/main.c new file mode 100644 index 0000000..aa7042d --- /dev/null +++ b/examples/gte/main.c @@ -0,0 +1,311 @@ +/* + * LibPSn00b Example Programs + * + * GTE Graphics Example + * 2019 Meido-Tek Productions / PSn00bSDK Project + * + * To build, simply run make. + * + * Example by Lameguy64 + * + * Changelog: + * + * Jan 26, 2019 - Initial version. + * + */ + +#include <stdio.h> +#include <psxgpu.h> +#include <psxgte.h> +#include <inline_c.h> + +/* OT and Packet Buffer sizes */ +#define OT_LEN 256 +#define PACKET_LEN 1024 + +/* Screen resolution */ +#define SCREEN_XRES 320 +#define SCREEN_YRES 240 + +/* Screen center position */ +#define CENTERX SCREEN_XRES>>1 +#define CENTERY SCREEN_YRES>>1 + + +/* Double buffer structure */ +typedef struct { + DISPENV disp; /* Display environment */ + DRAWENV draw; /* Drawing environment */ + int ot[OT_LEN]; /* Ordering table */ + char p[PACKET_LEN]; /* Packet buffer */ +} DB; + +/* Double buffer variables */ +DB db[2]; +int db_active = 0; +char *db_nextpri; + + +/* For easier handling of vertex indices */ +typedef struct { + short v0,v1,v2,v3; +} INDEX; + +/* Cube vertices */ +SVECTOR cube_verts[] = { + { -100, -100, -100, 0 }, + { 100, -100, -100, 0 }, + { -100, 100, -100, 0 }, + { 100, 100, -100, 0 }, + { 100, -100, 100, 0 }, + { -100, -100, 100, 0 }, + { 100, 100, 100, 0 }, + { -100, 100, 100, 0 } +}; + +/* Cube face normals */ +SVECTOR cube_norms[] = { + { 0, 0, -ONE, 0 }, + { 0, 0, ONE, 0 }, + { 0, -ONE, 0, 0 }, + { 0, ONE, 0, 0 }, + { -ONE, 0, 0, 0 }, + { ONE, 0, 0, 0 } +}; + +/* Cube vertex indices */ +INDEX cube_indices[] = { + { 0, 1, 2, 3 }, + { 4, 5, 6, 7 }, + { 5, 4, 0, 1 }, + { 6, 7, 3, 2 }, + { 0, 2, 5, 7 }, + { 3, 1, 6, 4 } +}; + +/* Number of faces of cube */ +#define CUBE_FACES 6 + + +/* Light color matrix */ +/* Each column represents the color matrix of each light source and is */ +/* used as material color when using gte_ncs() or multiplied by a */ +/* source color when using gte_nccs(). 4096 is 1.0 in this matrix */ +/* A column of zeroes disables the light source. */ +MATRIX color_mtx = { + ONE, 0, 0, /* Red */ + ONE, 0, 0, /* Green */ + ONE, 0, 0 /* Blue */ +}; + +/* Light matrix */ +/* Each row represents a vector direction of each light source. */ +/* An entire row of zeroes disables the light source. */ +MATRIX light_mtx = { + /* X, Y, Z */ + -2048 , -2048 , -2048, + 0 , 0 , 0, + 0 , 0 , 0 +}; + + +/* Function declarations */ +void init(); +void display(); + + +/* Main function */ +int main() { + + int i,p,xy_temp; + + SVECTOR rot = { 0 }; /* Rotation vector for Rotmatrix */ + VECTOR pos = { 0, 0, 400 }; /* Translation vector for TransMatrix */ + MATRIX mtx,lmtx; /* Rotation matrices for geometry and lighting */ + + POLY_F4 *pol4; /* Flat shaded quad primitive pointer */ + + + /* Init graphics and GTE */ + init(); + + + /* Main loop */ + while( 1 ) { + + /* Set rotation and translation to the matrix */ + RotMatrix( &rot, &mtx ); + TransMatrix( &mtx, &pos ); + + /* Multiply light matrix by rotation matrix so light source */ + /* won't appear relative to the model's rotation */ + MulMatrix0( &light_mtx, &mtx, &lmtx ); + + /* Set rotation and translation matrix */ + gte_SetRotMatrix( &mtx ); + gte_SetTransMatrix( &mtx ); + + /* Set light matrix */ + gte_SetLightMatrix( &lmtx ); + + /* Make the cube SPEEN */ + rot.vx += 16; + rot.vz += 16; + + + /* Draw the cube */ + pol4 = (POLY_F4*)db_nextpri; + + for( i=0; i<CUBE_FACES; i++ ) { + + /* Load the first 3 vertices of a quad to the GTE */ + gte_ldv3( + &cube_verts[cube_indices[i].v0], + &cube_verts[cube_indices[i].v1], + &cube_verts[cube_indices[i].v2] ); + + /* Rotation, Translation and Perspective Triple */ + gte_rtpt(); + + /* Compute normal clip for backface culling */ + gte_nclip(); + + /* Get result*/ + gte_stopz( &p ); + + /* Skip this face if backfaced */ + if( p < 0 ) + continue; + + /* Calculate average Z for depth sorting */ + gte_avsz4(); + gte_stotz( &p ); + + /* Skip if clipping off */ + /* (the shift right operator is to scale the depth precision) */ + if( (p>>2) > OT_LEN ) + continue; + + /* Initialize a quad primitive */ + setPolyF4( pol4 ); + + /* Set the projected vertices to the primitive */ + gte_stsxy0( &pol4->x0 ); + gte_stsxy1( &pol4->x1 ); + gte_stsxy2( &pol4->x2 ); + + /* Compute the last vertex and set the result */ + gte_ldv0( &cube_verts[cube_indices[i].v3] ); + gte_rtps(); + gte_stsxy( &pol4->x3 ); + + /* Load primitive color even though gte_ncs() doesn't use it. */ + /* This is so the GTE will output a color result with the */ + /* correct primitive code. */ + gte_ldrgb( &pol4->r0 ); + + /* Load the face normal */ + gte_ldv0( &cube_norms[i] ); + + /* Normal Color Single */ + gte_ncs(); + + /* Store result to the primitive */ + gte_strgb( &pol4->r0 ); + + /* Sort primitive to the ordering table */ + addPrim( db[db_active].ot+(p>>2), pol4 ); + + /* Advance to make another primitive */ + pol4++; + + } + + /* Update nextpri variable */ + /* (IMPORTANT if you plan to sort more primitives after this) */ + db_nextpri = (char*)pol4; + + /* Swap buffers and draw the primitives */ + display(); + + } + + return 0; + +} + +void init() { + + /* Reset the GPU, also installs a VSync event handler */ + ResetGraph( 0 ); + + /* Set display and draw environment areas */ + /* (display and draw areas must be separate, otherwise hello flicker) */ + SetDefDispEnv( &db[0].disp, 0, 0, SCREEN_XRES, SCREEN_YRES ); + SetDefDrawEnv( &db[0].draw, SCREEN_XRES, 0, SCREEN_XRES, SCREEN_YRES ); + + /* Enable draw area clear and dither processing */ + setRGB0( &db[0].draw, 63, 0, 127 ); + db[0].draw.isbg = 1; + db[0].draw.dtd = 1; + + + /* Define the second set of display/draw environments */ + SetDefDispEnv( &db[1].disp, SCREEN_XRES, 0, SCREEN_XRES, SCREEN_YRES ); + SetDefDrawEnv( &db[1].draw, 0, 0, SCREEN_XRES, SCREEN_YRES ); + + setRGB0( &db[1].draw, 63, 0, 127 ); + db[1].draw.isbg = 1; + db[1].draw.dtd = 1; + + + /* Apply the drawing environment of the first double buffer */ + PutDrawEnv( &db[0].draw ); + + + /* Clear both ordering tables to make sure they are clean at the start */ + ClearOTagR( db[0].ot, OT_LEN ); + ClearOTagR( db[1].ot, OT_LEN ); + + /* Set primitive pointer address */ + db_nextpri = db[0].p; + + /* Initialize the GTE */ + InitGeom(); + + /* Set GTE offset (recommended method of centering) */ + gte_SetGeomOffset( CENTERX, CENTERY ); + + /* Set screen depth (basically FOV control, W/2 works best) */ + gte_SetGeomScreen( CENTERX ); + + /* Set light ambient color and light color matrix */ + gte_SetBackColor( 63, 63, 63 ); + gte_SetColorMatrix( &color_mtx ); + +} + +void display() { + + /* Wait for GPU to finish drawing and vertical retrace */ + DrawSync(); + VSync(); + + /* Swap buffers */ + db_active ^= 1; + db_nextpri = db[db_active].p; + + /* Clear the OT of the next frame */ + ClearOTagR( db[db_active].ot, OT_LEN ); + + /* Apply display/drawing environments */ + PutDrawEnv( &db[db_active].draw ); + PutDispEnv( &db[db_active].disp ); + + /* Enable display */ + SetDispMask( 1 ); + + /* Start drawing the OT of the last buffer */ + DrawOTag( db[1-db_active].ot+(OT_LEN-1) ); + +}
\ No newline at end of file diff --git a/examples/gte/makefile b/examples/gte/makefile new file mode 100644 index 0000000..763b3d8 --- /dev/null +++ b/examples/gte/makefile @@ -0,0 +1,39 @@ +include ../sdk-common.mk + +TARGET = gte.elf + +CFILES = $(notdir $(wildcard *.c)) +CPPFILES = $(notdir $(wildcard *.cpp)) +AFILES = $(notdir $(wildcard *.s)) + +OFILES = $(addprefix build/,$(CFILES:.c=.o) $(CPPFILES:.cpp=.o) $(AFILES:.s=.o)) + +INCLUDE += +LIBDIRS += + +LIBS = -lc -lpsxetc -lpsxgpu -lpsxgte -lpsxspu -lpsxapi -lgcc + +CFLAGS = -g -O2 -fno-builtin -fdata-sections -ffunction-sections +CPPFLAGS = $(CFLAGS) -fno-exceptions +AFLAGS = -g -msoft-float +LDFLAGS = -g -Ttext=0x80010000 -gc-sections + +CC = $(PREFIX)gcc +CXX = $(PREFIX)g++ +AS = $(PREFIX)as +LD = $(PREFIX)ld + +all: $(OFILES) + $(LD) $(LDFLAGS) $(LIBDIRS) $(OFILES) $(LIBS) -o $(TARGET) + elf2x -q $(TARGET) + +build/%.o: %.c + @mkdir -p $(dir $@) + $(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@ + +build/%.o: %.s + @mkdir -p $(dir $@) + $(CC) $(AFLAGS) $(INCLUDE) -c $< -o $@ + +clean: + rm -rf build $(TARGET) $(TARGET:.elf=.exe) diff --git a/examples/makefile b/examples/makefile new file mode 100644 index 0000000..dda76ce --- /dev/null +++ b/examples/makefile @@ -0,0 +1,16 @@ +# Run using make (Linux) or gmake (BSD) +# Part of the PSn00bSDK Project +# 2019 Lameguy64 / Meido-Tek Productions + +TOPTARGETS = all clean + +DIRS = balls gte n00bdemo + + +$(TOPTARGETS): $(DIRS) +$(DIRS): + @$(MAKE) -C $@ $(MAKECMDGOALS) + +clean: $(DIRS) + +.PHONY: $(TOPTARGETS) $(DIRS) diff --git a/examples/n00bdemo/data.h b/examples/n00bdemo/data.h new file mode 100644 index 0000000..3be0e3d --- /dev/null +++ b/examples/n00bdemo/data.h @@ -0,0 +1,12 @@ +#ifndef _DATA_H +#define _DATA_H + +extern unsigned char lz_resources[]; + +/*extern unsigned char smd_mtekdisk[]; +extern unsigned char smd_mtektext[]; +extern unsigned char smd_star[]; +extern unsigned char smd_psn00b[]; +extern unsigned char smd_scarletlogo[];*/ + +#endif
\ No newline at end of file diff --git a/examples/n00bdemo/data.s b/examples/n00bdemo/data.s new file mode 100644 index 0000000..3ca33cb --- /dev/null +++ b/examples/n00bdemo/data.s @@ -0,0 +1,31 @@ +.section .data + +.global lz_resources +.type lz_resources, @object +lz_resources: + .incbin "data.lzp" + +#.global smd_mtekdisk +#.type smd_mtekdisk, @object +#smd_mtekdisk: +# .incbin "data/mtekdisk.smd" + +#.global smd_mtektext +#.type smd_mtektext, @object +#smd_mtektext: +# .incbin "data/mtektext.smd" + +#.global smd_star +#.type smd_star, @object +#smd_star: +# .incbin "data/star.smd" + +#.global smd_psn00b +#.type smd_psn00b, @object +#smd_psn00b: +# .incbin "data/psn00blogo.smd" + +#.global smd_scarletlogo +#.type smd_scarletlogo, @object +#smd_scarletlogo: +# .incbin "data/scarletlogo.smd"
\ No newline at end of file diff --git a/examples/n00bdemo/data.xml b/examples/n00bdemo/data.xml new file mode 100644 index 0000000..292a325 --- /dev/null +++ b/examples/n00bdemo/data.xml @@ -0,0 +1,49 @@ +<lzp_project> + + <create packname="textures.qlp" format="qlp"> + + <file alias="petscum">data/petscum16c.tim</file> + <file alias="bungirl">data/bungirl.tim</file> + + <!-- These are for the timerift background --> + <file alias="clocktex">data/clktower.tim</file> + <file alias="riftbldg1">data/riftbld1.tim</file> + <file alias="riftbldg2">data/riftbld2.tim</file> + <file alias="hatkid">data/hatkid.tim</file> + + <file alias="celmap">data/celmapi.tim</file> + + <file alias="lamelotl">data/lamelotl16c.tim</file> + <file alias="n00blogo">data/n00blogo-pixel.tim</file> + <file alias="font">data/font.tim</file> + + </create> + + <create packname="data.lzp" format="lzp"> + + <!-- intro assets --> + <file alias="mtekdisk">data/mtekdisk.smd</file> + <file alias="mtektext">data/mtektext.smd</file> + <file alias="starsprite">data/star.smd</file> + <file alias="psn00blogo">data/psn00blogo.smd</file> + <file alias="n00blogo">data/logo.smd</file> + + <!-- lighting demo assets --> + <file alias="lightworld">data/petscum.smd</file> + <file alias="lightbulb">data/bulb.smd</file> + + <!-- Hi-res bungirl demo assets --> + <file alias="bungirl">data/bungirl.smd</file> + + <file alias="starmask">data/star_mask.smd</file> + <file alias="timerift">data/timerift.smd</file> + <file alias="rbowshade">data/rbowshade.smd</file> + + <file alias="hatkid">data/hatkid.smd</file> + + <!-- Global textures --> + <file alias="textures">textures.qlp</file> + + </create> + +</lzp_project>
\ No newline at end of file diff --git a/examples/n00bdemo/data/bulb.smd b/examples/n00bdemo/data/bulb.smd Binary files differnew file mode 100644 index 0000000..9b77c6d --- /dev/null +++ b/examples/n00bdemo/data/bulb.smd diff --git a/examples/n00bdemo/data/bulb.smx b/examples/n00bdemo/data/bulb.smx new file mode 100644 index 0000000..89225e6 --- /dev/null +++ b/examples/n00bdemo/data/bulb.smx @@ -0,0 +1,147 @@ +<!-- Created using Project Scarlet SMX Export Plug-in for Blender --> +<!-- NOTE: If you plan to use this model as a static mesh, it is recommended that you run this file through smxopt --> +<!-- or smxtool to clean up duplicate/unused normals which are kept for animation purposes. --> +<model version="1"> +<vertices count="66"> +<v x="-0.587785" y="-1.609017" z="0.000000"/> +<v x="-0.951057" y="-1.109017" z="0.000000"/> +<v x="-0.951056" y="-0.490983" z="0.000000"/> +<v x="-0.587785" y="0.009017" z="0.000000"/> +<v x="-0.415627" y="-1.609017" z="0.415627"/> +<v x="-0.672498" y="-1.109017" z="0.672499"/> +<v x="-0.672498" y="-0.490983" z="0.672499"/> +<v x="-0.415627" y="0.009017" z="0.415627"/> +<v x="0.000000" y="-1.609017" z="0.587785"/> +<v x="0.000000" y="-1.109017" z="0.951057"/> +<v x="0.000000" y="-0.490983" z="0.951057"/> +<v x="0.000000" y="0.009017" z="0.587785"/> +<v x="0.415627" y="-1.609017" z="0.415627"/> +<v x="0.672499" y="-1.109017" z="0.672499"/> +<v x="0.672499" y="-0.490983" z="0.672499"/> +<v x="0.415627" y="0.009017" z="0.415627"/> +<v x="0.587785" y="-1.609017" z="-0.000000"/> +<v x="0.951057" y="-1.109017" z="-0.000000"/> +<v x="0.951057" y="-0.490983" z="-0.000000"/> +<v x="0.587785" y="0.009017" z="-0.000000"/> +<v x="0.415627" y="-1.609017" z="-0.415627"/> +<v x="0.672499" y="-1.109017" z="-0.672499"/> +<v x="0.672499" y="-0.490983" z="-0.672499"/> +<v x="0.415627" y="0.009017" z="-0.415627"/> +<v x="-0.249376" y="0.609017" z="-0.249376"/> +<v x="-0.000000" y="-1.609017" z="-0.587785"/> +<v x="-0.000000" y="-1.109017" z="-0.951057"/> +<v x="-0.000000" y="-0.490983" z="-0.951057"/> +<v x="-0.000000" y="0.009017" z="-0.587785"/> +<v x="-0.000000" y="0.609017" z="-0.352671"/> +<v x="0.000000" y="-1.800000" z="-0.000000"/> +<v x="-0.415627" y="-1.609017" z="-0.415627"/> +<v x="-0.672499" y="-1.109017" z="-0.672498"/> +<v x="-0.672499" y="-0.490983" z="-0.672498"/> +<v x="-0.415627" y="0.009017" z="-0.415627"/> +<v x="0.249376" y="0.609017" z="-0.249376"/> +<v x="0.352671" y="0.609017" z="-0.000000"/> +<v x="-0.249376" y="1.198659" z="-0.249376"/> +<v x="0.249376" y="0.609017" z="0.249376"/> +<v x="0.000000" y="0.609017" z="0.352671"/> +<v x="-0.249376" y="0.609017" z="0.249376"/> +<v x="-0.352671" y="0.609017" z="-0.000000"/> +<v x="-0.299252" y="0.998660" z="-0.299251"/> +<v x="-0.000000" y="0.998660" z="-0.423205"/> +<v x="0.299251" y="0.998660" z="-0.299251"/> +<v x="0.423206" y="0.998660" z="-0.000000"/> +<v x="0.299252" y="0.998660" z="0.299251"/> +<v x="0.000000" y="0.998660" z="0.423205"/> +<v x="-0.299251" y="0.998660" z="0.299251"/> +<v x="-0.423205" y="0.998660" z="0.000000"/> +<v x="-0.000000" y="1.198659" z="-0.352671"/> +<v x="0.249376" y="1.198659" z="-0.249376"/> +<v x="0.352671" y="1.198659" z="-0.000000"/> +<v x="0.000000" y="1.389642" z="0.000000"/> +<v x="0.249376" y="1.198659" z="0.249376"/> +<v x="0.000000" y="1.198659" z="0.352671"/> +<v x="-0.249376" y="1.198659" z="0.249376"/> +<v x="-0.352671" y="1.198659" z="0.000000"/> +<v x="-0.299252" y="0.798660" z="-0.299251"/> +<v x="-0.000000" y="0.798660" z="-0.423205"/> +<v x="0.299251" y="0.798660" z="-0.299251"/> +<v x="0.423206" y="0.798660" z="-0.000000"/> +<v x="0.299252" y="0.798660" z="0.299251"/> +<v x="0.000000" y="0.798660" z="0.423205"/> +<v x="-0.299251" y="0.798660" z="0.299251"/> +<v x="-0.423205" y="0.798660" z="0.000000"/> +</vertices> +<primitives count="72"> +<poly v0="7" v1="6" v2="3" v3="2" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="6" v1="5" v2="2" v3="1" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="5" v1="4" v2="1" v3="0" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="11" v1="10" v2="7" v3="6" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="10" v1="9" v2="6" v3="5" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="9" v1="8" v2="5" v3="4" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="15" v1="14" v2="11" v3="10" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="14" v1="13" v2="10" v3="9" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="13" v1="12" v2="9" v3="8" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="19" v1="18" v2="15" v3="14" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="18" v1="17" v2="14" v3="13" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="17" v1="16" v2="13" v3="12" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="22" v1="21" v2="18" v3="17" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="21" v1="20" v2="17" v3="16" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="23" v1="22" v2="19" v3="18" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="26" v1="25" v2="21" v3="20" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="28" v1="27" v2="23" v3="22" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="27" v1="26" v2="22" v3="21" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="34" v1="33" v2="28" v3="27" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="33" v1="32" v2="27" v3="26" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="32" v1="31" v2="26" v3="25" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="0" v1="4" v2="30" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="24" v1="41" v2="34" v3="3" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="4" v1="8" v2="30" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="41" v1="40" v2="3" v3="7" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="39" v1="38" v2="11" v3="15" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="8" v1="12" v2="30" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="12" v1="16" v2="30" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="38" v1="36" v2="15" v3="19" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="16" v1="20" v2="30" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="40" v1="39" v2="7" v3="11" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="20" v1="25" v2="30" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="36" v1="35" v2="19" v3="23" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="25" v1="31" v2="30" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="35" v1="29" v2="23" v3="28" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="29" v1="24" v2="28" v3="34" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="3" v1="2" v2="34" v3="33" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="2" v1="1" v2="33" v3="32" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="31" v1="32" v2="0" v3="1" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="31" v1="0" v2="30" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="51" v1="50" v2="44" v3="43" r0="128" g0="128" b0="128" type="F4" /> +<poly v0="56" v1="55" v2="48" v3="47" r0="128" g0="128" b0="128" type="F4" /> +<poly v0="37" v1="57" v2="42" v3="49" r0="128" g0="128" b0="128" type="F4" /> +<poly v0="52" v1="51" v2="45" v3="44" r0="128" g0="128" b0="128" type="F4" /> +<poly v0="57" v1="56" v2="49" v3="48" r0="128" g0="128" b0="128" type="F4" /> +<poly v0="54" v1="52" v2="46" v3="45" r0="128" g0="128" b0="128" type="F4" /> +<poly v0="55" v1="54" v2="47" v3="46" r0="128" g0="128" b0="128" type="F4" /> +<poly v0="50" v1="37" v2="43" v3="42" r0="128" g0="128" b0="128" type="F4" /> +<poly v0="53" v1="57" v2="37" r0="128" g0="128" b0="128" type="F3" /> +<poly v0="53" v1="37" v2="50" r0="128" g0="128" b0="128" type="F3" /> +<poly v0="53" v1="50" v2="51" r0="128" g0="128" b0="128" type="F3" /> +<poly v0="53" v1="51" v2="52" r0="128" g0="128" b0="128" type="F3" /> +<poly v0="53" v1="52" v2="54" r0="128" g0="128" b0="128" type="F3" /> +<poly v0="53" v1="54" v2="55" r0="128" g0="128" b0="128" type="F3" /> +<poly v0="53" v1="55" v2="56" r0="128" g0="128" b0="128" type="F3" /> +<poly v0="53" v1="56" v2="57" r0="128" g0="128" b0="128" type="F3" /> +<poly v0="62" v1="63" v2="46" v3="47" r0="128" g0="128" b0="128" type="F4" /> +<poly v0="61" v1="62" v2="45" v3="46" r0="128" g0="128" b0="128" type="F4" /> +<poly v0="64" v1="65" v2="48" v3="49" r0="128" g0="128" b0="128" type="F4" /> +<poly v0="60" v1="61" v2="44" v3="45" r0="128" g0="128" b0="128" type="F4" /> +<poly v0="65" v1="58" v2="49" v3="42" r0="128" g0="128" b0="128" type="F4" /> +<poly v0="63" v1="64" v2="47" v3="48" r0="128" g0="128" b0="128" type="F4" /> +<poly v0="59" v1="60" v2="43" v3="44" r0="128" g0="128" b0="128" type="F4" /> +<poly v0="58" v1="59" v2="42" v3="43" r0="128" g0="128" b0="128" type="F4" /> +<poly v0="29" v1="59" v2="24" v3="58" r0="128" g0="128" b0="128" type="F4" /> +<poly v0="35" v1="60" v2="29" v3="59" r0="128" g0="128" b0="128" type="F4" /> +<poly v0="36" v1="61" v2="35" v3="60" r0="128" g0="128" b0="128" type="F4" /> +<poly v0="62" v1="61" v2="38" v3="36" r0="128" g0="128" b0="128" type="F4" /> +<poly v0="39" v1="63" v2="38" v3="62" r0="128" g0="128" b0="128" type="F4" /> +<poly v0="40" v1="64" v2="39" v3="63" r0="128" g0="128" b0="128" type="F4" /> +<poly v0="41" v1="65" v2="40" v3="64" r0="128" g0="128" b0="128" type="F4" /> +<poly v0="24" v1="58" v2="41" v3="65" r0="128" g0="128" b0="128" type="F4" /> +</primitives> +</model>
\ No newline at end of file diff --git a/examples/n00bdemo/data/bungirl.smd b/examples/n00bdemo/data/bungirl.smd Binary files differnew file mode 100644 index 0000000..63f96b5 --- /dev/null +++ b/examples/n00bdemo/data/bungirl.smd diff --git a/examples/n00bdemo/data/bungirl.smx b/examples/n00bdemo/data/bungirl.smx new file mode 100644 index 0000000..6093d70 --- /dev/null +++ b/examples/n00bdemo/data/bungirl.smx @@ -0,0 +1,5608 @@ +<!-- Created using Project Scarlet SMX Export Plug-in for Blender --> +<!-- NOTE: If you plan to use this model as a static mesh, it is recommended that you run this file through smxopt --> +<!-- or smxtool to clean up duplicate/unused normals which are kept for animation purposes. --> +<model version="1"> +<vertices count="1406"> +<v x="0.889385" y="6.862468" z="2.084870"/> +<v x="0.723602" y="4.878849" z="1.451329"/> +<v x="0.766471" y="5.268315" z="1.748606"/> +<v x="0.861083" y="6.190279" z="2.324935"/> +<v x="0.798414" y="5.602079" z="1.914457"/> +<v x="0.356866" y="6.585550" z="1.856824"/> +<v x="1.340524" y="7.205857" z="0.971807"/> +<v x="1.352899" y="6.520680" z="1.796509"/> +<v x="0.836558" y="7.555555" z="0.684304"/> +<v x="0.812546" y="6.956409" z="0.790292"/> +<v x="0.872694" y="7.515097" z="1.222409"/> +<v x="0.344716" y="7.265649" z="1.040895"/> +<v x="0.759779" y="6.075702" z="0.592672"/> +<v x="0.295855" y="6.012013" z="1.411768"/> +<v x="0.789442" y="6.354539" z="0.853151"/> +<v x="1.292002" y="5.944604" z="1.355840"/> +<v x="1.338090" y="5.417282" z="0.989391"/> +<v x="0.736767" y="5.893660" z="0.398565"/> +<v x="0.142658" y="5.499662" z="1.053852"/> +<v x="0.743981" y="5.023285" z="1.644678"/> +<v x="1.311031" y="5.634251" z="1.141094"/> +<v x="0.215218" y="5.709766" z="1.200184"/> +<v x="0.664128" y="5.098207" z="0.054578"/> +<v x="0.717108" y="5.662301" z="0.329664"/> +<v x="1.249334" y="5.234121" z="0.861973"/> +<v x="0.191376" y="5.307028" z="0.919021"/> +<v x="0.566669" y="3.955665" z="-0.517087"/> +<v x="1.133169" y="4.784701" z="0.564991"/> +<v x="0.212652" y="4.848362" z="0.613677"/> +<v x="0.681693" y="4.534857" z="1.124090"/> +<v x="0.041673" y="3.874043" z="0.099446"/> +<v x="-0.146297" y="3.304561" z="-0.070564"/> +<v x="0.135110" y="3.006097" z="-0.768724"/> +<v x="0.148426" y="2.767676" z="-0.848448"/> +<v x="1.278871" y="2.198446" z="-0.076173"/> +<v x="0.309545" y="2.146909" z="-1.022685"/> +<v x="0.861603" y="2.108120" z="-0.871691"/> +<v x="0.129855" y="1.872283" z="1.073228"/> +<v x="1.144505" y="3.806345" z="0.118237"/> +<v x="0.744385" y="2.982621" z="-0.834918"/> +<v x="0.309545" y="1.362344" z="-0.984702"/> +<v x="0.922521" y="1.430562" z="-0.744980"/> +<v x="1.014921" y="1.605031" z="0.857529"/> +<v x="0.332132" y="2.394775" z="1.106284"/> +<v x="1.244763" y="2.923049" z="-0.100486"/> +<v x="0.619509" y="3.724722" z="0.734769"/> +<v x="4.916069" y="-3.034567" z="-1.453140"/> +<v x="5.361381" y="-2.851606" z="-1.639864"/> +<v x="5.117781" y="-2.493986" z="-1.534655"/> +<v x="5.206973" y="-2.764508" z="-1.025149"/> +<v x="4.826877" y="-2.764046" z="-1.962646"/> +<v x="4.644950" y="-2.296885" z="-1.326426"/> +<v x="4.387812" y="-2.599526" z="-1.753944"/> +<v x="4.715858" y="-2.581668" z="-0.833896"/> +<v x="4.458720" y="-2.884310" z="-1.261413"/> +<v x="4.309852" y="-2.062607" z="-1.190168"/> +<v x="4.114642" y="-2.674094" z="-1.121526"/> +<v x="3.850556" y="-2.216509" z="-1.842312"/> +<v x="4.058632" y="-2.339109" z="-2.085921"/> +<v x="3.956389" y="-2.599298" z="-1.868481"/> +<v x="4.145934" y="-2.115279" z="-1.945091"/> +<v x="4.251767" y="-2.498068" z="-1.971260"/> +<v x="4.284086" y="-2.522474" z="-1.724812"/> +<v x="4.148139" y="-2.077285" z="-1.687676"/> +<v x="3.957890" y="-2.675479" z="-1.621039"/> +<v x="3.821941" y="-2.230290" z="-1.583902"/> +<v x="4.362157" y="-2.359404" z="-0.730631"/> +<v x="3.678753" y="-2.539970" z="-0.944410"/> +<v x="4.029527" y="-2.168039" z="-0.477896"/> +<v x="3.605735" y="-2.167525" z="-1.523170"/> +<v x="3.956509" y="-1.795595" z="-1.056656"/> +<v x="3.841296" y="-2.094046" z="-0.375921"/> +<v x="2.924047" y="-1.866581" z="-1.160255"/> +<v x="3.472596" y="-2.490097" z="-0.860802"/> +<v x="3.399660" y="-2.093511" z="-1.465207"/> +<v x="3.768360" y="-1.697459" z="-0.980326"/> +<v x="1.784712" y="-1.306300" z="-0.739143"/> +<v x="3.230448" y="-1.535316" z="-0.759375"/> +<v x="3.285269" y="-1.873219" z="-0.262245"/> +<v x="2.978868" y="-2.204485" z="-0.663124"/> +<v x="2.044337" y="-0.905426" z="-0.255541"/> +<v x="2.066025" y="-1.354517" z="0.248894"/> +<v x="1.806401" y="-1.755390" z="-0.234709"/> +<v x="0.167559" y="-0.871958" z="-0.945905"/> +<v x="1.228445" y="0.257265" z="0.075442"/> +<v x="0.331922" y="0.616689" z="-0.912450"/> +<v x="0.971188" y="0.435187" z="-0.659783"/> +<v x="1.021032" y="-1.618905" z="0.058823"/> +<v x="0.708701" y="-1.725242" z="0.115575"/> +<v x="0.499394" y="-1.439356" z="-0.607030"/> +<v x="0.823003" y="-1.459916" z="-0.580454"/> +<v x="0.826767" y="-0.475004" z="-1.052221"/> +<v x="0.043891" y="-0.361955" z="-1.136677"/> +<v x="0.188108" y="0.083136" z="-1.048704"/> +<v x="0.805106" y="-0.074536" z="-0.970529"/> +<v x="1.092445" y="-0.437914" z="-0.815419"/> +<v x="0.791086" y="-1.018851" z="-0.850781"/> +<v x="0.414272" y="-0.479507" z="-1.178531"/> +<v x="0.480518" y="-0.892976" z="-1.031127"/> +<v x="0.520938" y="-0.043931" z="-1.067617"/> +<v x="0.426064" y="0.444884" z="0.758710"/> +<v x="1.200027" y="-1.260415" z="0.595728"/> +<v x="0.909496" y="-0.869135" z="0.816673"/> +<v x="0.510557" y="-1.469783" z="0.843084"/> +<v x="0.317702" y="-0.687050" z="0.941634"/> +<v x="0.209768" y="-1.908366" z="-0.392785"/> +<v x="0.134598" y="-1.547453" z="-0.528847"/> +<v x="0.134977" y="-1.609712" z="0.704679"/> +<v x="0.272511" y="-1.882752" z="0.573185"/> +<v x="0.517308" y="-1.895559" z="0.072425"/> +<v x="0.383919" y="-2.787065" z="-1.329192"/> +<v x="0.292649" y="-2.194960" z="-0.870506"/> +<v x="0.393400" y="-3.356114" z="-1.254231"/> +<v x="0.411664" y="-4.172819" z="-1.181579"/> +<v x="1.244850" y="-3.409245" z="-1.262713"/> +<v x="1.256504" y="-3.953715" z="-1.214142"/> +<v x="1.430570" y="-4.448681" z="-1.368579"/> +<v x="1.341566" y="-2.899322" z="-1.212284"/> +<v x="0.700674" y="-2.199695" z="0.639249"/> +<v x="0.948757" y="-2.238595" z="-0.588143"/> +<v x="1.352168" y="-2.306023" z="-0.092580"/> +<v x="1.508363" y="-5.807549" z="1.650048"/> +<v x="1.671319" y="-4.379017" z="1.804047"/> +<v x="0.615101" y="-5.660187" z="-1.561082"/> +<v x="0.700301" y="-6.484450" z="-1.263291"/> +<v x="1.672382" y="-2.782017" z="1.654731"/> +<v x="2.213110" y="-4.195673" z="-1.033917"/> +<v x="2.568823" y="-0.995617" z="0.581435"/> +<v x="1.594469" y="-1.005516" z="1.536084"/> +<v x="2.539690" y="0.968984" z="0.623886"/> +<v x="1.635568" y="0.919484" z="1.637866"/> +<v x="2.722300" y="-2.722617" z="0.387535"/> +<v x="0.522170" y="-4.935031" z="-1.373641"/> +<v x="2.649406" y="-4.231699" z="0.240402"/> +<v x="1.733552" y="-3.965192" z="-1.293417"/> +<v x="2.323430" y="-2.752316" z="-0.623493"/> +<v x="1.735615" y="-3.116483" z="-0.986531"/> +<v x="1.011168" y="-6.663831" z="-0.090947"/> +<v x="2.042990" y="-5.898885" z="-0.895213"/> +<v x="2.259161" y="-5.808501" z="0.097876"/> +<v x="1.851431" y="-2.664087" z="-0.971742"/> +<v x="2.005561" y="-2.254872" z="-0.405497"/> +<v x="1.223145" y="-7.588950" z="0.666086"/> +<v x="1.926506" y="-7.418492" z="0.933097"/> +<v x="2.355589" y="-7.161445" z="0.345832"/> +<v x="1.652228" y="-7.331903" z="0.078821"/> +<v x="2.265728" y="-9.457086" z="-2.087622"/> +<v x="1.468718" y="-9.145989" z="-0.494063"/> +<v x="2.039351" y="-8.468077" z="-1.040585"/> +<v x="2.503183" y="-9.217969" z="-0.401461"/> +<v x="3.073815" y="-8.540054" z="-0.947983"/> +<v x="-0.489769" y="1.321167" z="1.190666"/> +<v x="0.004153" y="1.232059" z="1.539980"/> +<v x="0.469145" y="1.394076" z="1.172779"/> +<v x="-0.024777" y="1.483184" z="0.823466"/> +<v x="-0.048974" y="1.815889" z="1.338139"/> +<v x="0.028350" y="0.899354" z="1.025306"/> +<v x="1.046094" y="2.426771" z="-0.824309"/> +<v x="1.093089" y="2.436982" z="0.766424"/> +<v x="0.037210" y="3.057830" z="0.798764"/> +<v x="1.060717" y="2.792017" z="0.774178"/> +<v x="0.583751" y="3.137378" z="0.780851"/> +<v x="0.832078" y="2.199656" z="0.985495"/> +<v x="1.205829" y="1.568619" z="0.031047"/> +<v x="1.018910" y="-0.144276" z="-0.759470"/> +<v x="1.070489" y="-0.858226" z="-0.664490"/> +<v x="1.052016" y="0.112249" z="0.724466"/> +<v x="0.394017" y="1.249570" z="0.899109"/> +<v x="2.211966" y="-0.922830" z="0.561546"/> +<v x="1.434396" y="-0.629789" z="1.321439"/> +<v x="2.368656" y="0.972501" z="0.570979"/> +<v x="1.497627" y="0.922805" z="1.422739"/> +<v x="2.546801" y="1.964005" z="0.571839"/> +<v x="1.634387" y="1.912881" z="1.599106"/> +<v x="2.224267" y="-1.099936" z="0.151211"/> +<v x="2.301639" y="1.019748" z="0.201237"/> +<v x="1.074294" y="-1.536716" z="1.310527"/> +<v x="1.263428" y="-6.618152" z="0.878515"/> +<v x="0.850485" y="-6.607274" z="-0.702090"/> +<v x="1.867586" y="-5.601389" z="-1.388094"/> +<v x="1.546664" y="-1.958533" z="0.793715"/> +<v x="-1.577960" y="7.070351" z="-1.281129"/> +<v x="-1.261589" y="5.335835" z="-0.176897"/> +<v x="-1.341567" y="5.810421" z="-0.278224"/> +<v x="-1.518112" y="6.837883" z="-0.601146"/> +<v x="-1.401186" y="6.150133" z="-0.423021"/> +<v x="-1.017970" y="6.753365" z="-1.218794"/> +<v x="-1.990091" y="6.290780" z="-2.235634"/> +<v x="-2.004659" y="6.593995" z="-1.186437"/> +<v x="-1.488976" y="6.231452" z="-2.699540"/> +<v x="-1.439129" y="6.034982" z="-2.147192"/> +<v x="-1.554365" y="6.705946" z="-2.356433"/> +<v x="-1.003403" y="6.450149" z="-2.267991"/> +<v x="-1.329555" y="5.458826" z="-1.643631"/> +<v x="-0.900831" y="6.059381" z="-1.064878"/> +<v x="-1.387165" y="5.809259" z="-1.674378"/> +<v x="-1.887520" y="5.900012" z="-1.032521"/> +<v x="-1.885126" y="5.289325" z="-0.876848"/> +<v x="-1.286638" y="5.195435" z="-1.632226"/> +<v x="-0.701100" y="5.480569" z="-0.915677"/> +<v x="-1.299587" y="5.574459" z="-0.160298"/> +<v x="-1.878240" y="5.546970" z="-0.943131"/> +<v x="-0.792882" y="5.722277" z="-0.978724"/> +<v x="-1.156426" y="4.460517" z="-1.281297"/> +<v x="-1.249933" y="4.994663" z="-1.501826"/> +<v x="-1.779693" y="5.080624" z="-0.822180"/> +<v x="-0.731830" y="5.249874" z="-0.856543"/> +<v x="-0.994651" y="3.446397" z="-0.983882"/> +<v x="-1.623222" y="4.572241" z="-0.687197"/> +<v x="-0.711521" y="4.719499" z="-0.717094"/> +<v x="-1.178317" y="4.831223" z="-0.122994"/> +<v x="-0.487837" y="3.766179" z="-0.351120"/> +<v x="-0.279325" y="3.292567" z="-0.067561"/> +<v x="-0.462922" y="2.998101" z="-0.766722"/> +<v x="-0.360921" y="2.767676" z="-0.848447"/> +<v x="-1.483228" y="2.038306" z="0.036764"/> +<v x="-0.452835" y="2.112616" z="-1.014096"/> +<v x="-1.021047" y="1.984304" z="-0.840683"/> +<v x="-0.284184" y="1.872283" z="1.073228"/> +<v x="-1.549258" y="3.534728" z="-0.390664"/> +<v x="-1.035740" y="2.743020" z="-0.825319"/> +<v x="-0.452835" y="1.328050" z="-0.976113"/> +<v x="-1.067147" y="1.337701" z="-0.721724"/> +<v x="-1.131213" y="1.518312" z="0.879246"/> +<v x="-0.545046" y="2.353019" z="1.116741"/> +<v x="-1.562816" y="2.771491" z="-0.099215"/> +<v x="-1.042445" y="3.854510" z="0.242099"/> +<v x="-4.456693" y="2.234098" z="0.535575"/> +<v x="-4.446303" y="2.750077" z="0.552981"/> +<v x="-4.021496" y="2.621204" z="0.517868"/> +<v x="-4.197689" y="2.404136" z="1.030285"/> +<v x="-4.280500" y="2.451168" z="0.023158"/> +<v x="-3.662951" y="2.201584" z="0.484084"/> +<v x="-3.961848" y="2.049183" z="0.006677"/> +<v x="-3.850874" y="1.970813" z="0.974129"/> +<v x="-4.149772" y="1.818412" z="0.496722"/> +<v x="-3.322287" y="1.940629" z="0.444149"/> +<v x="-3.828480" y="1.540226" z="0.457575"/> +<v x="-3.470549" y="1.754856" z="-0.332663"/> +<v x="-3.692642" y="1.987607" z="-0.451713"/> +<v x="-3.864761" y="1.726289" z="-0.285825"/> +<v x="-3.478315" y="2.081958" z="-0.300991"/> +<v x="-3.872527" y="2.053391" z="-0.254154"/> +<v x="-3.854770" y="1.975108" z="-0.017651"/> +<v x="-3.391370" y="1.994695" z="-0.071783"/> +<v x="-3.886861" y="1.603811" z="-0.058792"/> +<v x="-3.423460" y="1.623397" z="-0.112923"/> +<v x="-3.522971" y="1.702990" z="0.897196"/> +<v x="-3.545623" y="1.143203" z="0.416079"/> +<v x="-3.199826" y="1.383504" z="0.965342"/> +<v x="-3.292158" y="1.435943" z="-0.157566"/> +<v x="-2.946361" y="1.676244" z="0.391697"/> +<v x="-3.057445" y="1.207386" z="0.969262"/> +<v x="-2.749206" y="0.809605" z="-0.151136"/> +<v x="-3.424613" y="0.950909" z="0.397149"/> +<v x="-3.153665" y="1.262033" z="-0.200927"/> +<v x="-2.786497" y="1.518510" z="0.371186"/> +<v x="-1.923683" y="-0.153731" z="-0.343668"/> +<v x="-2.440214" y="1.026709" z="0.319746"/> +<v x="-2.669966" y="0.764603" z="0.812549"/> +<v x="-2.978958" y="0.547499" z="0.341666"/> +<v x="-1.641338" y="0.093993" z="0.162778"/> +<v x="-1.862552" y="-0.224737" z="0.694756"/> +<v x="-2.144897" y="-0.472461" z="0.188310"/> +<v x="-0.267734" y="-0.871958" z="-0.945905"/> +<v x="-1.213691" y="0.297413" z="0.081281"/> +<v x="-0.432098" y="0.616689" z="-0.912450"/> +<v x="-1.013237" y="0.455765" z="-0.656799"/> +<v x="-1.351673" y="-1.390208" z="0.104197"/> +<v x="-0.808877" y="-1.725242" z="0.115575"/> +<v x="-0.599569" y="-1.439357" z="-0.607030"/> +<v x="-1.160008" y="-1.303653" z="-0.562308"/> +<v x="-0.925485" y="-0.475044" z="-1.052225"/> +<v x="-0.144067" y="-0.361955" z="-1.136677"/> +<v x="-0.288284" y="0.083136" z="-1.048704"/> +<v x="-0.903478" y="-0.074537" z="-0.970529"/> +<v x="-1.114088" y="-0.410531" z="-0.811445"/> +<v x="-1.068780" y="-0.901694" z="-0.837175"/> +<v x="-0.513762" y="-0.479507" z="-1.178531"/> +<v x="-0.580682" y="-0.892976" z="-1.031127"/> +<v x="-0.620212" y="-0.043931" z="-1.067617"/> +<v x="-0.526240" y="0.444884" z="0.758710"/> +<v x="-1.294924" y="-1.085656" z="0.641886"/> +<v x="-0.952809" y="-0.850112" z="0.819465"/> +<v x="-0.610673" y="-1.470331" z="0.843022"/> +<v x="-0.417818" y="-0.687597" z="0.941571"/> +<v x="-0.342004" y="-1.908366" z="-0.357271"/> +<v x="-0.234774" y="-1.547454" z="-0.528847"/> +<v x="-0.235153" y="-1.609712" z="0.704679"/> +<v x="-0.280394" y="-1.882752" z="0.608773"/> +<v x="-0.587368" y="-1.895559" z="0.143526"/> +<v x="-1.019764" y="-2.787065" z="-0.960133"/> +<v x="-0.692720" y="-2.194960" z="-0.648153"/> +<v x="-0.991150" y="-3.356114" z="-0.890203"/> +<v x="-0.971319" y="-4.172819" z="-0.817963"/> +<v x="-1.736665" y="-3.409245" z="-0.478809"/> +<v x="-1.722923" y="-3.953713" z="-0.430786"/> +<v x="-1.950438" y="-4.448681" z="-0.479639"/> +<v x="-1.796071" y="-2.899322" z="-0.387331"/> +<v x="-0.425701" y="-2.199694" z="0.898601"/> +<v x="-1.194286" y="-2.238595" z="-0.098209"/> +<v x="-1.326155" y="-2.306023" z="0.562547"/> +<v x="-0.533480" y="-5.807549" z="2.186893"/> +<v x="-0.599619" y="-4.379017" z="2.401126"/> +<v x="-1.335104" y="-5.660186" z="-1.048330"/> +<v x="-1.262820" y="-6.484451" z="-0.747144"/> +<v x="-0.673986" y="-2.782017" z="2.271642"/> +<v x="-2.467183" y="-4.195674" z="0.196633"/> +<v x="-1.982396" y="-0.995617" z="1.778049"/> +<v x="-0.664504" y="-1.005517" z="2.130017"/> +<v x="-1.936151" y="0.968983" z="1.800682"/> +<v x="-0.650226" y="0.919483" z="2.238851"/> +<v x="-2.211394" y="-2.722617" z="1.684711"/> +<v x="-1.161999" y="-4.935031" z="-0.930836"/> +<v x="-2.220293" y="-4.231699" z="1.520752"/> +<v x="-2.177272" y="-3.965192" z="-0.265176"/> +<v x="-2.361372" y="-2.752316" z="0.608243"/> +<v x="-2.028129" y="-3.116483" z="0.003039"/> +<v x="-0.956877" y="-6.663832" z="0.426495"/> +<v x="-2.250841" y="-5.898885" z="0.233729"/> +<v x="-1.950613" y="-5.808501" z="1.204716"/> +<v x="-2.121693" y="-2.664087" z="0.072878"/> +<v x="-1.977388" y="-2.254872" z="0.641707"/> +<v x="-0.769101" y="-7.588950" z="1.189891"/> +<v x="-1.250178" y="-7.418492" z="1.768316"/> +<v x="-1.912616" y="-7.161445" z="1.468036"/> +<v x="-1.431539" y="-7.331902" z="0.889611"/> +<v x="-3.031253" y="-9.457086" z="-0.694931"/> +<v x="-1.553529" y="-9.145991" z="0.300551"/> +<v x="-2.319172" y="-8.468077" z="0.105366"/> +<v x="-2.408675" y="-9.217967" z="0.889972"/> +<v x="-3.174318" y="-8.540054" z="0.694787"/> +<v x="0.468866" y="1.394052" z="1.172786"/> +<v x="0.010212" y="1.226867" z="1.542225"/> +<v x="-0.487014" y="1.307870" z="1.194368"/> +<v x="-0.028360" y="1.475055" z="0.824929"/> +<v x="-0.046219" y="1.802593" z="1.341841"/> +<v x="0.028071" y="0.899328" z="1.025312"/> +<v x="-1.230259" y="2.263200" z="-0.747398"/> +<v x="-1.332938" y="2.370659" z="0.868472"/> +<v x="-0.376658" y="3.020515" z="0.808109"/> +<v x="-1.370392" y="2.859655" z="0.775534"/> +<v x="-0.935008" y="3.134867" z="0.714337"/> +<v x="-1.006953" y="2.071180" z="1.017670"/> +<v x="-1.339420" y="1.422475" z="0.067647"/> +<v x="-1.040680" y="-0.116839" z="-0.755491"/> +<v x="-1.329865" y="-0.674579" z="-0.642371"/> +<v x="-1.076455" y="0.138343" z="0.728272"/> +<v x="-0.494193" y="1.249570" z="0.899109"/> +<v x="-1.681468" y="-0.922831" z="1.585214"/> +<v x="-0.633018" y="-0.629790" z="1.865007"/> +<v x="-1.813256" y="0.972501" z="1.670494"/> +<v x="-0.635933" y="0.922805" z="1.983698"/> +<v x="-1.967942" y="1.964005" z="1.758863"/> +<v x="-0.668263" y="1.912881" z="2.204522"/> +<v x="-1.893999" y="-1.099936" z="1.233992"/> +<v x="-1.936760" y="1.019748" z="1.315604"/> +<v x="-0.325623" y="-1.536716" z="1.678595"/> +<v x="-0.699692" y="-6.618152" z="1.394662"/> +<v x="-1.117560" y="-6.607275" z="-0.184648"/> +<v x="-2.340539" y="-5.601390" z="-0.281686"/> +<v x="-0.988010" y="-1.958532" z="1.460136"/> +<v x="1.320551" y="6.795769" z="2.025280"/> +<v x="0.890713" y="6.519396" z="2.465619"/> +<v x="1.176564" y="5.340920" z="1.581956"/> +<v x="0.881955" y="7.198330" z="1.635200"/> +<v x="0.354704" y="5.397557" z="1.626273"/> +<v x="0.449560" y="6.851526" z="2.079656"/> +<v x="0.349686" y="6.003097" z="0.759323"/> +<v x="1.171545" y="5.946460" z="0.715006"/> +<v x="1.233086" y="6.255717" z="2.179399"/> +<v x="1.346665" y="6.874337" z="1.339550"/> +<v x="0.350768" y="6.936047" z="1.405356"/> +<v x="0.485980" y="6.306260" z="2.221337"/> +<v x="0.828008" y="5.879840" z="2.108294"/> +<v x="0.322938" y="6.280158" z="1.603082"/> +<v x="0.812455" y="6.628771" z="1.007073"/> +<v x="1.319037" y="6.213994" z="1.544947"/> +<v x="0.860537" y="7.750287" z="0.859505"/> +<v x="1.211485" y="7.453507" z="0.738364"/> +<v x="0.464663" y="7.497702" z="0.791268"/> +<v x="0.817576" y="7.272389" z="0.638924"/> +<v x="1.193509" y="7.003499" z="0.818943"/> +<v x="1.304317" y="7.454384" z="1.164272"/> +<v x="0.446620" y="7.048991" z="0.869671"/> +<v x="0.433523" y="7.505700" z="1.226321"/> +<v x="1.170860" y="5.670547" z="1.761373"/> +<v x="1.164107" y="6.235513" z="0.964289"/> +<v x="0.417020" y="6.285450" z="1.007339"/> +<v x="0.423726" y="5.721725" z="1.802214"/> +<v x="0.772053" y="5.352521" z="1.744509"/> +<v x="0.267643" y="5.761451" z="1.236039"/> +<v x="0.765674" y="6.101377" z="0.673376"/> +<v x="1.270084" y="5.692447" z="1.181846"/> +<v x="1.191367" y="5.101189" z="1.464741"/> +<v x="1.185956" y="5.753970" z="0.530156"/> +<v x="0.289382" y="5.815755" z="0.578502"/> +<v x="0.294792" y="5.162974" z="1.513087"/> +<v x="1.313171" y="5.264950" z="0.883136"/> +<v x="0.727642" y="4.875813" z="1.530149"/> +<v x="0.720519" y="5.735279" z="0.299653"/> +<v x="0.134990" y="5.346141" z="0.946666"/> +<v x="0.758803" y="5.170887" z="1.730916"/> +<v x="0.169997" y="5.638533" z="1.150691"/> +<v x="0.751720" y="6.025515" z="0.507348"/> +<v x="1.340525" y="5.557869" z="1.087573"/> +<v x="1.178976" y="5.223650" z="0.855066"/> +<v x="0.721621" y="4.907103" z="1.378492"/> +<v x="0.715848" y="5.603631" z="0.381274"/> +<v x="0.258493" y="5.287083" z="0.904701"/> +<v x="0.326056" y="5.004121" z="1.332514"/> +<v x="1.119524" y="4.949440" z="1.289728"/> +<v x="1.114654" y="5.537029" z="0.448479"/> +<v x="0.321186" y="5.591709" z="0.491265"/> +<v x="1.100282" y="4.333147" z="0.291656"/> +<v x="0.643982" y="4.154375" z="0.884682"/> +<v x="0.613159" y="4.576257" z="-0.261862"/> +<v x="0.156860" y="4.397485" z="0.331164"/> +<v x="1.011518" y="5.003916" z="0.170010"/> +<v x="0.321130" y="5.051661" z="0.206525"/> +<v x="1.024691" y="4.581403" z="0.972144"/> +<v x="0.334303" y="4.629149" z="1.008658"/> +<v x="-0.083464" y="3.338443" z="-0.123762"/> +<v x="0.167610" y="3.925000" z="-0.362887"/> +<v x="0.191445" y="3.806160" z="0.566476"/> +<v x="-0.210970" y="3.284621" z="-0.043214"/> +<v x="-0.096418" y="3.273161" z="0.444932"/> +<v x="-0.079947" y="3.199662" z="-0.543268"/> +<v x="0.931541" y="2.675695" z="-0.868697"/> +<v x="0.311948" y="2.887935" z="-0.879022"/> +<v x="0.194726" y="2.886624" z="-0.784422"/> +<v x="0.280454" y="2.493798" z="-0.967087"/> +<v x="-0.120287" y="2.827019" z="-0.817463"/> +<v x="0.913751" y="1.833185" z="-0.814839"/> +<v x="0.298357" y="1.759071" z="-1.025228"/> +<v x="1.233695" y="1.880933" z="-0.184809"/> +<v x="1.187329" y="2.343807" z="-0.600256"/> +<v x="-0.071830" y="2.127432" z="-1.042454"/> +<v x="0.638340" y="2.148116" z="-0.963020"/> +<v x="1.085698" y="3.015071" z="-0.629257"/> +<v x="0.572981" y="2.279040" z="1.102489"/> +<v x="0.946622" y="1.891297" z="0.914164"/> +<v x="-0.087305" y="1.943074" z="1.034992"/> +<v x="0.261189" y="1.519027" z="1.047837"/> +<v x="0.198692" y="2.738417" z="1.012144"/> +<v x="-0.166564" y="2.995424" z="0.768681"/> +<v x="0.239926" y="3.134894" z="0.840493"/> +<v x="1.232721" y="2.813162" z="0.463343"/> +<v x="0.978938" y="3.928594" z="-0.358322"/> +<v x="0.588228" y="3.393845" z="-0.719029"/> +<v x="0.928229" y="0.948485" z="-0.685499"/> +<v x="0.326328" y="0.975344" z="-0.935609"/> +<v x="1.109056" y="1.485175" z="-0.479804"/> +<v x="1.173635" y="1.576371" z="0.571459"/> +<v x="-0.071830" y="1.339760" z="-1.031247"/> +<v x="0.653569" y="1.393409" z="-0.876079"/> +<v x="-0.050088" y="1.189891" z="0.865094"/> +<v x="0.468817" y="0.934620" z="0.758811"/> +<v x="1.274848" y="2.569955" z="-0.125430"/> +<v x="1.273621" y="2.276976" z="0.461668"/> +<v x="1.016139" y="2.615676" z="0.800391"/> +<v x="1.034364" y="3.701020" z="0.590099"/> +<v x="1.198140" y="3.315817" z="-0.014783"/> +<v x="0.599442" y="3.358942" z="0.678831"/> +<v x="4.913057" y="-2.675134" z="-0.901660"/> +<v x="4.787097" y="-2.411767" z="-1.393981"/> +<v x="4.543791" y="-2.679250" z="-1.840179"/> +<v x="4.630999" y="-2.949330" z="-1.332829"/> +<v x="5.083818" y="-2.967168" z="-1.111768"/> +<v x="4.798747" y="-2.966822" z="-1.814890"/> +<v x="5.198129" y="-3.036499" z="-1.572200"/> +<v x="5.416711" y="-2.829946" z="-1.254503"/> +<v x="5.133822" y="-2.829602" z="-1.952242"/> +<v x="5.352405" y="-2.623048" z="-1.634545"/> +<v x="5.235103" y="-2.561732" z="-1.172904"/> +<v x="4.950031" y="-2.561386" z="-1.876027"/> +<v x="4.553011" y="-2.478346" z="-0.788129"/> +<v x="4.498483" y="-2.179423" z="-1.261835"/> +<v x="4.305964" y="-2.532423" z="-1.699790"/> +<v x="4.314758" y="-2.804299" z="-1.202958"/> +<v x="4.753456" y="-2.368192" z="-0.979390"/> +<v x="4.489886" y="-2.372436" z="-1.657210"/> +<v x="4.367749" y="-2.822153" z="-1.620666"/> +<v x="4.596248" y="-2.799609" z="-0.918415"/> +<v x="4.100137" y="-1.946114" z="-1.114963"/> +<v x="4.406651" y="-2.136908" z="-0.868783"/> +<v x="4.185700" y="-2.066175" z="-1.521046"/> +<v x="3.886448" y="-2.518792" z="-1.028607"/> +<v x="4.009266" y="-2.683489" z="-1.465121"/> +<v x="4.242709" y="-2.586373" z="-0.805087"/> +<v x="3.829287" y="-2.232253" z="-1.476303"/> +<v x="4.192973" y="-2.446058" z="-2.103655"/> +<v x="4.120140" y="-2.182792" z="-2.066753"/> +<v x="3.993388" y="-2.504516" z="-2.015522"/> +<v x="3.920556" y="-2.241249" z="-1.978619"/> +<v x="3.965159" y="-2.081971" z="-1.884478"/> +<v x="3.804986" y="-2.478110" z="-1.572600"/> +<v x="4.158355" y="-2.723300" z="-1.686137"/> +<v x="4.279323" y="-2.269592" z="-1.986552"/> +<v x="3.954432" y="-2.055516" z="-1.630432"/> +<v x="3.836256" y="-2.421437" z="-1.832383"/> +<v x="4.123909" y="-2.656154" z="-1.923731"/> +<v x="4.294282" y="-2.248603" z="-1.728260"/> +<v x="4.270357" y="-2.516438" z="-1.805918"/> +<v x="4.150454" y="-2.094224" z="-1.794283"/> +<v x="3.945326" y="-2.648078" z="-1.713940"/> +<v x="3.825422" y="-2.225863" z="-1.702304"/> +<v x="4.157299" y="-2.232652" z="-0.667267"/> +<v x="3.820362" y="-1.660393" z="-1.001391"/> +<v x="3.486853" y="-2.554186" z="-0.866614"/> +<v x="3.400379" y="-2.106983" z="-1.558586"/> +<v x="3.906837" y="-2.107596" z="-0.309419"/> +<v x="3.554551" y="-2.446731" z="-1.350419"/> +<v x="3.872395" y="-2.447116" z="-0.566463"/> +<v x="4.080712" y="-1.888834" z="-0.650648"/> +<v x="3.762867" y="-1.888449" z="-1.434603"/> +<v x="3.723840" y="-1.749843" z="-0.962301"/> +<v x="3.474133" y="-2.419045" z="-0.861390"/> +<v x="3.417136" y="-2.084224" z="-1.360375"/> +<v x="3.780837" y="-2.084664" z="-0.463316"/> +<v x="3.897003" y="-1.796741" z="-0.556903"/> +<v x="3.675180" y="-2.391218" z="-0.467260"/> +<v x="3.343953" y="-2.390817" z="-1.284225"/> +<v x="3.565776" y="-1.796338" z="-1.373867"/> +<v x="2.712043" y="-1.295586" z="-0.544153"/> +<v x="2.460771" y="-1.987417" z="-0.460857"/> +<v x="2.411739" y="-1.633253" z="-0.957515"/> +<v x="2.761076" y="-1.649751" z="-0.047495"/> +<v x="2.874857" y="-2.118349" z="-1.011909"/> +<v x="3.063543" y="-1.616473" z="-1.084098"/> +<v x="3.334459" y="-1.621451" z="-0.410590"/> +<v x="3.145773" y="-2.123328" z="-0.338402"/> +<v x="1.408571" y="-0.456868" z="0.018283"/> +<v x="1.271458" y="-1.604002" z="-0.046251"/> +<v x="1.239947" y="-1.005289" z="-0.582615"/> +<v x="1.444372" y="-1.138587" z="0.510999"/> +<v x="1.705165" y="-1.637877" z="-0.602978"/> +<v x="1.934588" y="-0.986776" z="-0.628300"/> +<v x="2.094602" y="-1.036568" z="0.122426"/> +<v x="1.967121" y="-1.660412" z="0.128353"/> +<v x="1.164131" y="0.306509" z="-0.411211"/> +<v x="1.184338" y="0.216247" z="0.540545"/> +<v x="-0.050088" y="0.623242" z="-0.974018"/> +<v x="0.682744" y="0.564760" z="-0.787717"/> +<v x="0.295969" y="0.311059" z="-0.941419"/> +<v x="1.013912" y="0.025867" z="-0.680289"/> +<v x="0.888865" y="-1.694512" z="0.104703"/> +<v x="1.117381" y="-1.525361" z="0.459605"/> +<v x="0.919924" y="-1.583079" z="-0.367551"/> +<v x="0.558772" y="-1.771966" z="0.101472"/> +<v x="0.659937" y="-1.647612" z="0.555468"/> +<v x="0.655602" y="-1.667536" z="-0.323092"/> +<v x="0.271968" y="-1.467700" z="-0.586590"/> +<v x="0.716523" y="-1.443176" z="-0.601281"/> +<v x="0.074606" y="-0.617466" z="-1.059749"/> +<v x="0.805883" y="-0.734174" z="-0.997404"/> +<v x="0.080147" y="-0.122671" z="-1.143919"/> +<v x="0.833315" y="-0.251679" z="-1.036255"/> +<v x="0.655597" y="-0.490448" z="-1.126491"/> +<v x="0.961232" y="-0.451413" z="-0.950328"/> +<v x="-0.050088" y="-0.315245" z="-1.095287"/> +<v x="-0.050088" y="0.104704" z="-1.058784"/> +<v x="0.390414" y="0.029801" z="-1.043352"/> +<v x="1.113538" y="-0.312145" z="-0.765996"/> +<v x="0.312553" y="-1.140798" z="-0.795036"/> +<v x="0.793189" y="-1.277833" z="-0.686936"/> +<v x="0.930357" y="-1.007686" z="-0.749039"/> +<v x="-0.050088" y="-0.837076" z="-0.927876"/> +<v x="0.354622" y="-0.912093" z="-0.985240"/> +<v x="0.183476" y="-0.438053" z="-1.188530"/> +<v x="0.687545" y="-0.024174" z="-0.993306"/> +<v x="0.644024" y="-0.958392" z="-0.951036"/> +<v x="0.446023" y="-0.222198" z="-1.164920"/> +<v x="0.425749" y="-0.731290" z="-1.127563"/> +<v x="-0.050088" y="0.443360" z="0.745544"/> +<v x="-0.050088" y="-0.758752" z="0.886212"/> +<v x="0.275139" y="-1.549983" z="0.766963"/> +<v x="0.348209" y="-0.126663" z="0.839439"/> +<v x="1.094131" y="-1.093849" z="0.671246"/> +<v x="0.751816" y="-1.274404" z="0.878001"/> +<v x="1.003071" y="-0.368683" z="0.738896"/> +<v x="0.362500" y="-1.160136" z="0.973460"/> +<v x="0.649546" y="-0.696720" z="0.938104"/> +<v x="0.530078" y="-2.057588" z="0.035904"/> +<v x="0.215627" y="-1.727464" z="0.616441"/> +<v x="0.199562" y="-1.743137" z="-0.418438"/> +<v x="-0.050088" y="-1.494725" z="-0.567044"/> +<v x="-0.050088" y="-1.584966" z="0.732362"/> +<v x="0.317512" y="-2.056809" z="0.552422"/> +<v x="0.192595" y="-2.058366" z="-0.409511"/> +<v x="-0.066118" y="-1.908366" z="-0.375028"/> +<v x="0.424596" y="-1.905165" z="-0.285362"/> +<v x="0.471936" y="-1.885954" z="0.439098"/> +<v x="-0.003941" y="-1.882752" z="0.590979"/> +<v x="-0.200035" y="-2.170153" z="-0.759330"/> +<v x="-0.317923" y="-2.762258" z="-1.144663"/> +<v x="-0.298875" y="-3.356114" z="-1.072217"/> +<v x="1.083836" y="-2.342578" z="0.726076"/> +<v x="0.407098" y="-3.617059" z="-1.199742"/> +<v x="1.731842" y="-2.430629" z="-0.397287"/> +<v x="0.952400" y="-3.369397" z="-1.347359"/> +<v x="0.974252" y="-2.839935" z="-1.392230"/> +<v x="0.365493" y="-2.411283" z="-1.215675"/> +<v x="0.381897" y="-3.157083" z="-1.309297"/> +<v x="0.411664" y="-4.875986" z="-1.181579"/> +<v x="-0.279827" y="-4.172819" z="-0.999771"/> +<v x="0.968620" y="-4.118043" z="-1.280624"/> +<v x="1.588169" y="-4.220983" z="-1.351086"/> +<v x="1.304452" y="-3.266662" z="-1.224938"/> +<v x="1.291927" y="-3.587029" z="-1.188973"/> +<v x="1.256298" y="-2.494281" z="-1.056202"/> +<v x="1.597371" y="-2.961966" z="-0.910846"/> +<v x="0.703018" y="-2.230675" z="-0.855504"/> +<v x="1.119451" y="-2.253839" z="0.293743"/> +<v x="0.163177" y="-2.172132" z="0.866636"/> +<v x="1.131322" y="-2.252463" z="-0.267483"/> +<v x="-0.360001" y="-5.731942" z="-1.304706"/> +<v x="0.310405" y="-6.741902" z="1.245127"/> +<v x="0.593583" y="-4.437482" z="2.322171"/> +<v x="1.700089" y="-3.602017" z="1.771126"/> +<v x="1.394156" y="-6.346717" z="1.384573"/> +<v x="2.425841" y="-4.283722" z="1.044282"/> +<v x="0.535389" y="-5.903139" z="2.100834"/> +<v x="1.480238" y="-6.139935" z="-1.433662"/> +<v x="1.415774" y="-5.573730" z="-1.646023"/> +<v x="0.600655" y="-5.145843" z="-1.516532"/> +<v x="0.627614" y="-6.199307" z="-1.484324"/> +<v x="1.624932" y="-1.917142" z="1.546003"/> +<v x="0.542424" y="-2.806767" z="2.127592"/> +<v x="2.478228" y="-2.742417" z="1.019299"/> +<v x="2.158576" y="-5.712197" z="0.945431"/> +<v x="2.722099" y="-3.476088" z="0.284680"/> +<v x="2.604175" y="-2.725092" z="-0.180186"/> +<v x="2.665909" y="-1.914666" z="0.502082"/> +<v x="1.593759" y="-0.056766" z="1.581272"/> +<v x="2.502823" y="-0.017167" z="0.622926"/> +<v x="2.376683" y="-1.003042" z="1.049601"/> +<v x="2.431236" y="-1.016747" z="0.244375"/> +<v x="0.491101" y="-1.005517" z="1.932388"/> +<v x="1.666806" y="1.662833" z="1.659325"/> +<v x="2.627991" y="1.958983" z="0.604582"/> +<v x="2.397865" y="0.931859" z="1.100314"/> +<v x="2.371280" y="1.018483" z="0.178021"/> +<v x="0.527852" y="0.919483" z="2.072170"/> +<v x="-0.319914" y="-4.944913" z="-1.152239"/> +<v x="1.170312" y="-4.803563" z="-1.483076"/> +<v x="1.896030" y="-4.135234" z="-1.322984"/> +<v x="1.333178" y="-4.195745" z="-1.139519"/> +<v x="2.024403" y="-2.750059" z="-0.901105"/> +<v x="2.317925" y="-3.449756" z="-0.830992"/> +<v x="2.221887" y="-2.291356" z="-0.464101"/> +<v x="1.807673" y="-2.903628" z="-1.000554"/> +<v x="1.761118" y="-3.505673" z="-1.083375"/> +<v x="1.602076" y="-5.113900" z="1.761140"/> +<v x="2.497376" y="-5.004241" z="0.197276"/> +<v x="2.049494" y="-4.932179" z="-1.222781"/> +<v x="2.519375" y="-4.207498" z="-0.491146"/> +<v x="-0.125544" y="-6.731025" z="-0.412968"/> +<v x="1.801856" y="-6.326249" z="-0.223770"/> +<v x="0.897897" y="-6.571942" z="-0.434059"/> +<v x="2.165482" y="-5.650773" z="-0.705296"/> +<v x="1.849795" y="-2.371426" z="-0.788641"/> +<v x="2.177471" y="-1.951889" z="-0.024737"/> +<v x="0.849710" y="-6.692151" z="0.494229"/> +<v x="1.261847" y="-7.503040" z="0.305701"/> +<v x="1.471256" y="-8.426609" z="0.461978"/> +<v x="1.467555" y="-7.567983" z="0.946408"/> +<v x="1.402203" y="-6.497534" z="0.752831"/> +<v x="2.332826" y="-8.328841" z="0.689591"/> +<v x="2.316887" y="-7.247354" z="0.706218"/> +<v x="1.754146" y="-6.350720" z="0.238456"/> +<v x="2.835867" y="-7.911459" z="0.076067"/> +<v x="2.111179" y="-7.182411" z="0.065511"/> +<v x="1.201652" y="-6.545337" z="-0.020146"/> +<v x="1.974297" y="-8.009229" z="-0.151546"/> +<v x="1.604040" y="-9.553884" z="-1.558456"/> +<v x="2.470007" y="-9.717006" z="-1.580414"/> +<v x="2.930185" y="-9.053254" z="-1.933489"/> +<v x="2.064218" y="-8.890134" z="-1.911531"/> +<v x="1.495419" y="-8.789039" z="-0.790474"/> +<v x="1.843293" y="-9.351457" z="-0.311132"/> +<v x="2.699241" y="-8.334587" z="-1.130914"/> +<v x="3.047115" y="-8.897006" z="-0.651572"/> +<v x="-0.399660" y="1.677299" z="1.304819"/> +<v x="-0.378342" y="1.425186" z="0.919933"/> +<v x="-0.340150" y="0.983262" z="1.072042"/> +<v x="-0.361467" y="1.235374" z="1.456928"/> +<v x="-0.030871" y="1.606417" z="1.567532"/> +<v x="0.031944" y="0.920483" z="1.333299"/> +<v x="0.362540" y="1.291525" z="1.443903"/> +<v x="0.321043" y="1.725346" z="1.293251"/> +<v x="0.377519" y="1.044580" z="1.056779"/> +<v x="0.336021" y="1.478400" z="0.906127"/> +<v x="-0.047746" y="1.796228" z="1.030538"/> +<v x="0.005425" y="1.107358" z="0.795522"/> +<v x="0.958265" y="2.258614" z="-0.814878"/> +<v x="0.225410" y="2.153229" z="1.088878"/> +<v x="0.868153" y="2.977552" z="0.839862"/> +<v x="0.962607" y="2.388087" z="0.883269"/> +<v x="1.275175" y="1.903512" z="0.139110"/> +<v x="1.161205" y="0.958768" z="0.079382"/> +<v x="0.882283" y="-0.057657" z="-0.873956"/> +<v x="1.112272" y="-0.591125" z="-0.737415"/> +<v x="0.820628" y="0.363250" z="0.763314"/> +<v x="0.771296" y="1.398114" z="0.922729"/> +<v x="2.132253" y="-0.703906" z="0.942294"/> +<v x="2.281005" y="0.000405" z="0.584562"/> +<v x="0.414078" y="-0.628932" z="1.646502"/> +<v x="1.445564" y="0.037920" z="1.359760"/> +<v x="1.349011" y="-1.136081" z="1.305715"/> +<v x="2.219228" y="0.935821" z="0.957182"/> +<v x="2.465611" y="1.969028" z="0.539096"/> +<v x="2.231997" y="1.021013" z="0.224453"/> +<v x="0.460394" y="0.922213" z="1.815596"/> +<v x="1.568073" y="1.667060" z="1.504485"/> +<v x="2.409495" y="1.752437" z="0.282129"/> +<v x="2.394713" y="1.926729" z="1.025715"/> +<v x="0.526502" y="1.911814" z="2.067034"/> +<v x="0.374808" y="-1.623284" z="1.497927"/> +<v x="2.235730" y="-0.006797" z="0.200489"/> +<v x="2.100362" y="-1.112770" z="0.268187"/> +<v x="2.015773" y="-1.631158" z="0.598930"/> +<v x="0.040467" y="-6.787581" z="0.218443"/> +<v x="1.632630" y="-6.306427" z="-0.910132"/> +<v x="-0.278595" y="-6.608202" z="-0.995084"/> +<v x="1.974604" y="-6.291989" z="0.445780"/> +<v x="1.130869" y="-6.698356" z="0.322975"/> +<v x="0.789233" y="-6.594234" z="-0.976406"/> +<v x="2.050128" y="-5.718121" z="-1.050192"/> +<v x="1.357202" y="-1.729504" z="1.093480"/> +<v x="-2.001031" y="6.950887" z="-1.257128"/> +<v x="-1.574278" y="7.153243" z="-0.760599"/> +<v x="-1.747075" y="5.700731" z="-0.435553"/> +<v x="-1.569505" y="6.904442" z="-1.840467"/> +<v x="-0.933057" y="5.832211" z="-0.462247"/> +<v x="-1.138162" y="7.090258" z="-1.285425"/> +<v x="-0.924047" y="5.568515" z="-1.486303"/> +<v x="-1.738065" y="5.437035" z="-1.459608"/> +<v x="-1.886421" y="6.737068" z="-0.739380"/> +<v x="-1.997618" y="6.436090" z="-1.749470"/> +<v x="-1.010930" y="6.595459" z="-1.781828"/> +<v x="-1.146405" y="6.856595" z="-0.763648"/> +<v x="-1.456401" y="6.474903" z="-0.507136"/> +<v x="-0.952545" y="6.364194" z="-1.140515"/> +<v x="-1.432708" y="6.071631" z="-1.770892"/> +<v x="-1.939233" y="6.204824" z="-1.108158"/> +<v x="-1.532315" y="6.485520" z="-2.769714"/> +<v x="-1.860927" y="6.206441" z="-2.575474"/> +<v x="-1.120911" y="6.325968" z="-2.599742"/> +<v x="-1.453062" y="6.052481" z="-2.485867"/> +<v x="-1.823542" y="6.059089" z="-2.161213"/> +<v x="-1.978569" y="6.594162" z="-2.329156"/> +<v x="-1.083525" y="6.178616" z="-2.185481"/> +<v x="-1.115700" y="6.733532" z="-2.357453"/> +<v x="-1.769441" y="6.047760" z="-0.567307"/> +<v x="-1.758926" y="5.792105" z="-1.505824"/> +<v x="-1.018909" y="5.911633" z="-1.530092"/> +<v x="-1.029425" y="6.167287" z="-0.591575"/> +<v x="-1.351999" y="5.861509" z="-0.344704"/> +<v x="-0.849900" y="5.778227" z="-0.993533"/> +<v x="-1.340680" y="5.534575" z="-1.609801"/> +<v x="-1.842779" y="5.617857" z="-0.960973"/> +<v x="-1.741979" y="5.455365" z="-0.329728"/> +<v x="-1.732266" y="5.171097" z="-1.433675"/> +<v x="-0.844247" y="5.314529" z="-1.462796"/> +<v x="-0.853959" y="5.598797" z="-0.358850"/> +<v x="-1.846182" y="5.111897" z="-0.830817"/> +<v x="-1.269107" y="5.393275" z="-0.123211"/> +<v x="-1.256319" y="5.019001" z="-1.576692"/> +<v x="-0.679243" y="5.300380" z="-0.869085"/> +<v x="-1.327247" y="5.734407" z="-0.215927"/> +<v x="-0.741209" y="5.641953" z="-0.957586"/> +<v x="-1.314531" y="5.362241" z="-1.661226"/> +<v x="-1.900568" y="5.454694" z="-0.919567"/> +<v x="-1.708588" y="5.073838" z="-0.819807"/> +<v x="-1.257920" y="5.299127" z="-0.245791"/> +<v x="-1.247556" y="4.995808" z="-1.423721"/> +<v x="-0.796888" y="5.221096" z="-0.849705"/> +<v x="-0.867184" y="5.356658" z="-0.355399"/> +<v x="-1.653081" y="5.229720" z="-0.329627"/> +<v x="-1.644339" y="4.973841" z="-1.323324"/> +<v x="-0.858441" y="5.100779" z="-1.349096"/> +<v x="-1.549999" y="4.066338" z="-0.550657"/> +<v x="-1.101643" y="4.358187" z="0.014799"/> +<v x="-1.067866" y="3.932312" z="-1.137297"/> +<v x="-0.619510" y="4.224161" z="-0.571841"/> +<v x="-1.501050" y="4.451634" z="-1.125298"/> +<v x="-0.817275" y="4.562077" z="-1.147721"/> +<v x="-1.517468" y="4.729663" z="-0.256570"/> +<v x="-0.833693" y="4.840106" z="-0.278993"/> +<v x="-0.349520" y="3.314456" z="-0.117755"/> +<v x="-0.612006" y="3.608253" z="-0.817119"/> +<v x="-0.629024" y="3.866243" z="0.104994"/> +<v x="-0.299656" y="3.254837" z="0.449521"/> +<v x="-0.329226" y="3.188667" z="-0.540515"/> +<v x="-1.140236" y="2.510792" z="-0.804054"/> +<v x="-0.585100" y="2.875941" z="-0.876019"/> +<v x="-0.464129" y="2.884625" z="-0.783921"/> +<v x="-0.419488" y="2.485225" z="-0.964940"/> +<v x="-1.084306" y="1.686154" z="-0.778017"/> +<v x="-0.463204" y="1.707631" z="-1.012345"/> +<v x="-1.397952" y="1.686722" z="-0.117963"/> +<v x="-1.397539" y="2.140201" z="-0.495111"/> +<v x="-0.785298" y="2.074295" z="-0.944533"/> +<v x="-1.392829" y="2.683677" z="-0.618444"/> +<v x="-0.763954" y="2.205165" z="1.120990"/> +<v x="-1.081589" y="1.772458" z="0.943926"/> +<v x="-0.374903" y="1.519027" z="1.047837"/> +<v x="-0.471423" y="2.687333" z="1.024937"/> +<v x="-0.587810" y="3.060266" z="0.859182"/> +<v x="-1.552928" y="2.874227" z="0.457174"/> +<v x="-1.389244" y="3.386569" z="-0.844150"/> +<v x="-0.969600" y="3.031137" z="-0.866745"/> +<v x="-1.024985" y="0.930414" z="-0.678939"/> +<v x="-0.437282" y="0.966771" z="-0.933461"/> +<v x="-1.251961" y="1.366856" z="-0.450173"/> +<v x="-1.298281" y="1.453115" z="0.602327"/> +<v x="-0.796823" y="1.327327" z="-0.859529"/> +<v x="-0.568992" y="0.934620" z="0.758811"/> +<v x="-1.543996" y="2.474535" z="-0.001457"/> +<v x="-1.495577" y="2.201936" z="0.584107"/> +<v x="-1.296276" y="2.631303" z="0.886491"/> +<v x="-1.443918" y="3.740749" z="0.072708"/> +<v x="-1.558349" y="3.075960" z="-0.235840"/> +<v x="-0.987451" y="3.420194" z="0.481306"/> +<v x="-4.007143" y="2.134457" z="1.006008"/> +<v x="-3.823983" y="2.310909" z="0.493246"/> +<v x="-4.097471" y="2.189594" z="0.003016"/> +<v x="-4.273132" y="1.971834" z="0.512601"/> +<v x="-4.371239" y="2.264850" z="0.911034"/> +<v x="-4.433348" y="2.300124" z="0.155689"/> +<v x="-4.560926" y="2.521436" z="0.553187"/> +<v x="-4.363685" y="2.651968" z="0.921196"/> +<v x="-4.425318" y="2.686972" z="0.171635"/> +<v x="-4.228076" y="2.817505" z="0.539644"/> +<v x="-4.044841" y="2.555180" z="0.897754"/> +<v x="-4.106950" y="2.590453" z="0.142409"/> +<v x="-3.699334" y="1.848543" z="0.937055"/> +<v x="-3.498890" y="2.090618" z="0.470206"/> +<v x="-3.865154" y="1.980514" z="0.015008"/> +<v x="-4.022820" y="1.699366" z="0.480770"/> +<v x="-3.690154" y="2.132658" z="0.847129"/> +<v x="-3.757453" y="2.174716" z="0.124198"/> +<v x="-4.138500" y="1.904058" z="0.131019"/> +<v x="-4.039339" y="1.828560" z="0.859266"/> +<v x="-3.139412" y="1.771132" z="0.412002"/> +<v x="-3.354217" y="1.870860" z="0.779248"/> +<v x="-3.357799" y="1.964505" z="0.093328"/> +<v x="-3.600448" y="1.361041" z="0.430760"/> +<v x="-3.877247" y="1.583202" z="0.103988"/> +<v x="-3.717931" y="1.553838" z="0.791976"/> +<v x="-3.405662" y="1.586380" z="-0.013181"/> +<v x="-3.834014" y="2.073209" z="-0.401849"/> +<v x="-3.559069" y="2.085329" z="-0.417148"/> +<v x="-3.815662" y="1.848145" z="-0.407126"/> +<v x="-3.540718" y="1.860263" z="-0.422424"/> +<v x="-3.384554" y="1.914851" z="-0.328323"/> +<v x="-3.649218" y="1.520738" z="-0.094918"/> +<v x="-4.000630" y="1.784605" z="-0.025913"/> +<v x="-3.668688" y="2.160148" z="-0.269868"/> +<v x="-3.305530" y="1.813984" z="-0.107110"/> +<v x="-3.657039" y="1.669495" z="-0.317375"/> +<v x="-3.975871" y="1.872000" z="-0.258066"/> +<v x="-3.601082" y="2.077684" z="-0.033208"/> +<v x="-3.861629" y="1.997556" z="-0.096722"/> +<v x="-3.429406" y="2.033184" z="-0.165213"/> +<v x="-3.876354" y="1.639143" z="-0.149238"/> +<v x="-3.444132" y="1.674771" z="-0.217729"/> +<v x="-3.334198" y="1.545793" z="0.855943"/> +<v x="-2.770389" y="1.583775" z="0.372909"/> +<v x="-3.489940" y="0.943738" z="0.402186"/> +<v x="-3.185336" y="1.295090" z="-0.283425"/> +<v x="-3.074993" y="1.232422" z="1.058520"/> +<v x="-3.505340" y="1.229497" z="-0.008059"/> +<v x="-3.436090" y="1.190168" z="0.834122"/> +<v x="-2.986644" y="1.589949" z="0.815835"/> +<v x="-3.055893" y="1.629278" z="-0.026346"/> +<v x="-2.819684" y="1.455665" z="0.370980"/> +<v x="-3.358429" y="0.976454" z="0.392900"/> +<v x="-3.128676" y="1.238561" z="-0.099902"/> +<v x="-3.049436" y="1.193558" z="0.863782"/> +<v x="-2.830179" y="1.427068" z="0.813252"/> +<v x="-3.308766" y="1.001367" z="0.832725"/> +<v x="-3.380931" y="1.042352" z="-0.044917"/> +<v x="-2.902344" y="1.468052" z="-0.064389"/> +<v x="-2.055732" y="0.588367" z="0.261673"/> +<v x="-2.590061" y="0.098208" z="0.284046"/> +<v x="-2.361380" y="0.367420" z="-0.213672"/> +<v x="-2.284413" y="0.319155" z="0.759392"/> +<v x="-2.941330" y="0.624276" z="-0.022456"/> +<v x="-2.537271" y="0.983684" z="-0.038896"/> +<v x="-2.477842" y="0.949932" z="0.683868"/> +<v x="-2.881900" y="0.590525" z="0.700308"/> +<v x="-1.263049" y="-0.288674" z="0.070040"/> +<v x="-1.719295" y="-0.997399" z="0.116221"/> +<v x="-1.529977" y="-0.591958" z="-0.487793"/> +<v x="-1.485194" y="-0.739520" z="0.642280"/> +<v x="-2.110917" y="-0.380668" z="-0.204013"/> +<v x="-1.721167" y="0.055454" z="-0.223717"/> +<v x="-1.687399" y="-0.009082" z="0.555655"/> +<v x="-2.052987" y="-0.422640" z="0.574250"/> +<v x="-1.162915" y="0.342268" z="-0.406021"/> +<v x="-1.180044" y="0.252378" z="0.545810"/> +<v x="-0.768388" y="0.569904" z="-0.786970"/> +<v x="-0.396144" y="0.311059" z="-0.941419"/> +<v x="-1.021827" y="0.058448" z="-0.675564"/> +<v x="-1.046657" y="-1.637339" z="0.116046"/> +<v x="-1.326697" y="-1.312999" z="0.514252"/> +<v x="-1.314545" y="-1.369641" z="-0.338062"/> +<v x="-0.651418" y="-1.771966" z="0.119248"/> +<v x="-0.760098" y="-1.647749" z="0.555453"/> +<v x="-0.755778" y="-1.667536" z="-0.323092"/> +<v x="-0.372144" y="-1.467701" z="-0.586590"/> +<v x="-0.875905" y="-1.404111" z="-0.596745"/> +<v x="-0.174782" y="-0.617466" z="-1.059749"/> +<v x="-0.949970" y="-0.704934" z="-0.994007"/> +<v x="-0.180323" y="-0.122671" z="-1.143919"/> +<v x="-0.931322" y="-0.251689" z="-1.036256"/> +<v x="-0.754551" y="-0.490458" z="-1.126492"/> +<v x="-1.040639" y="-0.444618" z="-0.949339"/> +<v x="-0.490364" y="0.029801" z="-1.043352"/> +<v x="-1.115676" y="-0.277863" z="-0.761023"/> +<v x="-0.412729" y="-1.140798" z="-0.795036"/> +<v x="-1.174573" y="-1.092280" z="-0.665389"/> +<v x="-1.292239" y="-0.815328" z="-0.726503"/> +<v x="-0.454794" y="-0.912093" z="-0.985240"/> +<v x="-0.283480" y="-0.438053" z="-1.188530"/> +<v x="-0.786368" y="-0.024174" z="-0.993306"/> +<v x="-0.788567" y="-0.929103" z="-0.947635"/> +<v x="-0.545125" y="-0.222198" z="-1.164920"/> +<v x="-0.525742" y="-0.731290" z="-1.127563"/> +<v x="-0.375299" y="-1.550120" z="0.766948"/> +<v x="-0.448370" y="-0.126801" z="0.839424"/> +<v x="-1.121968" y="-1.025832" z="0.686337"/> +<v x="-0.837701" y="-1.270332" z="0.878621"/> +<v x="-1.013295" y="-0.337833" z="0.743400"/> +<v x="-0.462586" y="-1.160957" z="0.973367"/> +<v x="-0.735431" y="-0.692649" z="0.938725"/> +<v x="-0.570021" y="-2.057588" z="0.178108"/> +<v x="-0.292729" y="-1.727464" z="0.625338"/> +<v x="-0.307753" y="-1.743138" z="-0.409560"/> +<v x="-0.233102" y="-2.056809" z="0.623596"/> +<v x="-0.356891" y="-2.058366" z="-0.338482"/> +<v x="-0.541288" y="-1.905165" z="-0.223193"/> +<v x="-0.495364" y="-1.885954" z="0.501358"/> +<v x="-0.618301" y="-2.342578" z="1.173605"/> +<v x="-0.976277" y="-3.617059" z="-0.836023"/> +<v x="-1.735028" y="-2.430629" z="0.514228"/> +<v x="-1.523666" y="-3.369397" z="-0.696347"/> +<v x="-1.564762" y="-2.839935" z="-0.724668"/> +<v x="-0.942395" y="-2.411283" z="-0.880984"/> +<v x="-1.008219" y="-3.157083" z="-0.943806"/> +<v x="-0.971319" y="-4.875986" z="-0.817963"/> +<v x="-1.504966" y="-4.118043" z="-0.630265"/> +<v x="-2.079053" y="-4.220983" z="-0.386894"/> +<v x="-1.769981" y="-3.266662" z="-0.416603"/> +<v x="-1.741387" y="-3.587029" z="-0.391449"/> +<v x="-1.656864" y="-2.494281" z="-0.308648"/> +<v x="-1.870536" y="-2.961966" z="0.000942"/> +<v x="-1.064453" y="-2.230675" z="-0.455079"/> +<v x="-0.958099" y="-2.253839" z="0.781714"/> +<v x="-1.231694" y="-2.252463" z="0.286363"/> +<v x="-0.640861" y="-3.602017" z="2.386612"/> +<v x="-0.564614" y="-6.346717" z="1.899576"/> +<v x="-1.630255" y="-4.283722" z="2.110718"/> +<v x="-2.025694" y="-6.139935" z="-0.511877"/> +<v x="-2.074015" y="-5.573731" z="-0.728482"/> +<v x="-1.300615" y="-5.145843" z="-1.016647"/> +<v x="-1.308246" y="-6.199307" z="-0.975344"/> +<v x="-0.686148" y="-1.917142" z="2.153636"/> +<v x="-1.688156" y="-2.742417" z="2.114731"/> +<v x="-1.446171" y="-5.712197" z="1.893197"/> +<v x="-2.261807" y="-3.476088" z="1.595057"/> +<v x="-2.387775" y="-2.725092" z="1.132306"/> +<v x="-2.105956" y="-1.914666" z="1.756709"/> +<v x="-0.641660" y="-0.056767" z="2.169012"/> +<v x="-1.904524" y="-0.017167" z="1.781713"/> +<v x="-1.584838" y="-1.003042" z="2.091171"/> +<v x="-2.028382" y="-1.016747" z="1.416905"/> +<v x="-0.666871" y="1.662833" z="2.272899"/> +<v x="-2.022528" y="1.958983" z="1.827304"/> +<v x="-1.578338" y="0.931858" z="2.145744"/> +<v x="-2.008815" y="1.018483" z="1.329643"/> +<v x="-1.780151" y="-4.803563" z="-0.707336"/> +<v x="-2.333281" y="-4.135234" z="-0.211006"/> +<v x="-1.752979" y="-4.195745" z="-0.328101"/> +<v x="-2.237555" y="-2.750059" z="0.219456"/> +<v x="-2.458636" y="-3.449756" z="0.424869"/> +<v x="-2.194564" y="-2.291356" z="0.697080"/> +<v x="-2.097765" y="-2.903628" z="0.026270"/> +<v x="-2.097965" y="-3.505673" z="-0.068738"/> +<v x="-0.560434" y="-5.113900" z="2.329711"/> +<v x="-2.109134" y="-5.004241" z="1.408427"/> +<v x="-2.417616" y="-4.932181" z="-0.048281"/> +<v x="-2.466884" y="-4.207499" z="0.819849"/> +<v x="-1.710644" y="-6.326249" z="0.699742"/> +<v x="-1.027011" y="-6.571942" z="0.072042"/> +<v x="-2.264083" y="-5.650773" z="0.459333"/> +<v x="-2.030212" y="-2.371426" z="0.231497"/> +<v x="-1.939793" y="-1.951889" z="1.057781"/> +<v x="-0.528483" y="-6.692151" z="0.856586"/> +<v x="-0.980050" y="-7.503040" z="0.895144"/> +<v x="-1.085516" y="-8.426610" z="1.134208"/> +<v x="-0.844030" y="-7.567983" z="1.554173"/> +<v x="-0.882339" y="-6.497534" z="1.353487"/> +<v x="-1.723721" y="-8.328841" z="1.756145"/> +<v x="-1.701666" y="-7.247354" z="1.762782"/> +<v x="-1.441761" y="-6.350720" z="1.078729"/> +<v x="-2.463469" y="-7.911459" z="1.469377"/> +<v x="-1.837687" y="-7.182411" z="1.103753"/> +<v x="-1.087906" y="-6.545337" z="0.581828"/> +<v x="-1.825264" y="-8.009228" z="0.847441"/> +<v x="-2.194865" y="-9.553885" z="-0.559642"/> +<v x="-2.959649" y="-9.717006" z="-0.152840"/> +<v x="-3.533976" y="-9.053254" z="-0.233921"/> +<v x="-2.769193" y="-8.890134" z="-0.640722"/> +<v x="-1.722564" y="-8.789039" z="0.055603"/> +<v x="-1.789691" y="-9.351459" z="0.644058"/> +<v x="-2.938156" y="-8.334587" z="0.351280"/> +<v x="-3.005283" y="-8.897004" z="0.939735"/> +<v x="0.321522" y="1.722003" z="1.294182"/> +<v x="0.334916" y="1.476349" z="0.906497"/> +<v x="0.377240" y="1.044555" z="1.056785"/> +<v x="0.363845" y="1.290208" z="1.444470"/> +<v x="-0.022468" y="1.596615" z="1.571262"/> +<v x="0.033249" y="0.919166" z="1.333865"/> +<v x="-0.353065" y="1.225572" z="1.460657"/> +<v x="-0.395388" y="1.657367" z="1.310369"/> +<v x="-0.339670" y="0.979918" z="1.072972"/> +<v x="-0.381994" y="1.411714" z="0.922684"/> +<v x="-0.051398" y="1.782756" z="1.033289"/> +<v x="0.004320" y="1.105308" z="0.795892"/> +<v x="-1.104968" y="2.141478" z="-0.785542"/> +<v x="-0.407924" y="2.142790" z="1.091492"/> +<v x="-1.191869" y="2.997948" z="0.772185"/> +<v x="-1.174857" y="2.265141" z="0.938843"/> +<v x="-1.428255" y="1.702829" z="0.207577"/> +<v x="-1.241002" y="0.932269" z="0.089991"/> +<v x="-0.961729" y="-0.050799" z="-0.872961"/> +<v x="-1.174392" y="-0.517830" z="-0.727911"/> +<v x="-0.901869" y="0.369774" z="0.764266"/> +<v x="-0.875501" y="1.376434" z="0.928158"/> +<v x="-1.425373" y="-0.703906" z="1.877671"/> +<v x="-1.730259" y="0.000405" z="1.639210"/> +<v x="-0.622157" y="0.037920" z="1.903408"/> +<v x="-0.567759" y="-1.136082" z="1.809675"/> +<v x="-1.493201" y="0.935821" z="1.933259"/> +<v x="-1.913355" y="1.969028" z="1.690421"/> +<v x="-1.864705" y="1.021013" z="1.301565"/> +<v x="-0.657063" y="1.667060" z="2.089521"/> +<v x="-1.990883" y="1.752436" z="1.439084"/> +<v x="-1.612285" y="1.926729" z="2.079242"/> +<v x="-1.879742" y="-0.006797" z="1.282535"/> +<v x="-1.728583" y="-1.112771" z="1.274899"/> +<v x="-1.492259" y="-1.631158" z="1.521268"/> +<v x="-1.900885" y="-6.306427" z="0.018906"/> +<v x="-1.531740" y="-6.291989" z="1.367674"/> +<v x="-0.857514" y="-6.698356" z="0.845764"/> +<v x="-1.199149" y="-6.594234" z="-0.453617"/> +<v x="-2.333281" y="-5.718122" z="0.102301"/> +<v x="-0.676383" y="-1.729504" z="1.628154"/> +<v x="1.210811" y="6.543504" z="2.318964"/> +<v x="1.313208" y="7.135291" z="1.572231"/> +<v x="0.442360" y="7.187799" z="1.632225"/> +<v x="0.560960" y="6.586882" z="2.356448"/> +<v x="1.200165" y="5.948133" z="1.957237"/> +<v x="1.203133" y="6.531574" z="1.125499"/> +<v x="0.429046" y="6.581509" z="1.173315"/> +<v x="0.453044" y="5.998996" z="1.998628"/> +<v x="1.184845" y="7.636194" z="0.905847"/> +<v x="0.535223" y="7.674428" z="0.952218"/> +<v x="1.100072" y="7.244418" z="0.704280"/> +<v x="0.546846" y="7.277635" z="0.742662"/> +<v x="1.147172" y="5.420232" z="1.590330"/> +<v x="1.142386" y="5.981914" z="0.786910"/> +<v x="0.390557" y="6.033627" z="0.827625"/> +<v x="0.395339" y="5.472023" z="1.630905"/> +<v x="1.196865" y="5.247467" z="1.554301"/> +<v x="1.168570" y="4.952799" z="1.352513"/> +<v x="1.191553" y="5.888437" z="0.636625"/> +<v x="1.163227" y="5.597398" z="0.429641"/> +<v x="0.313657" y="5.948936" z="0.683964"/> +<v x="0.279592" y="5.658292" z="0.477289"/> +<v x="0.318970" y="5.307965" z="1.601639"/> +<v x="0.284934" y="5.013693" z="1.400161"/> +<v x="1.066081" y="4.970381" z="1.235227"/> +<v x="1.061751" y="5.492777" z="0.487313"/> +<v x="0.375718" y="5.017956" z="1.272453"/> +<v x="0.371389" y="5.540352" z="0.524540"/> +<v x="0.994904" y="4.179572" z="0.727147"/> +<v x="0.969804" y="4.502806" z="-0.133957"/> +<v x="0.285355" y="4.234648" z="0.755581"/> +<v x="0.264220" y="4.544237" z="-0.103131"/> +<v x="0.000669" y="3.333994" z="0.448249"/> +<v x="0.012103" y="3.179378" z="-0.643525"/> +<v x="1.155660" y="2.683723" z="-0.651960"/> +<v x="0.674519" y="2.551788" z="-0.909669"/> +<v x="1.132425" y="1.974450" z="-0.629287"/> +<v x="0.642873" y="1.794732" z="-0.939617"/> +<v x="1.231481" y="2.036345" z="0.627898"/> +<v x="0.601598" y="2.764830" z="1.032571"/> +<v x="0.564668" y="1.778965" z="1.085440"/> +<v x="1.245494" y="2.520845" z="0.444275"/> +<v x="1.014454" y="3.406984" z="-0.531570"/> +<v x="1.096475" y="0.932656" z="-0.430120"/> +<v x="0.667752" y="0.973600" z="-0.812185"/> +<v x="1.024814" y="0.987071" z="0.690550"/> +<v x="1.111681" y="3.188237" z="0.581502"/> +<v x="4.942160" y="-2.472690" z="-1.049070"/> +<v x="4.660827" y="-2.473489" z="-1.749905"/> +<v x="4.791638" y="-2.878609" z="-0.988880"/> +<v x="4.519072" y="-2.883983" z="-1.695823"/> +<v x="5.370083" y="-2.660979" z="-1.338683"/> +<v x="5.159888" y="-2.660724" z="-1.857121"/> +<v x="5.256691" y="-2.964864" z="-1.292859"/> +<v x="5.046496" y="-2.964608" z="-1.811298"/> +<v x="4.598462" y="-2.254258" z="-0.930436"/> +<v x="4.353922" y="-2.234535" z="-1.628374"/> +<v x="4.434366" y="-2.709191" z="-0.867955"/> +<v x="4.235238" y="-2.784067" z="-1.604604"/> +<v x="4.196431" y="-2.017848" z="-0.800780"/> +<v x="3.950421" y="-2.017549" z="-1.407557"/> +<v x="4.036164" y="-2.447356" z="-0.736013"/> +<v x="3.790155" y="-2.447058" z="-1.342790"/> +<v x="4.212602" y="-2.293480" z="-2.069508"/> +<v x="4.108254" y="-2.554493" z="-2.027330"/> +<v x="3.996478" y="-2.150351" z="-1.982897"/> +<v x="3.903914" y="-2.390433" z="-1.945487"/> +<v x="3.953836" y="-2.066577" z="-1.744356"/> +<v x="3.808242" y="-2.457793" z="-1.686157"/> +<v x="4.133691" y="-2.699899" z="-1.761809"/> +<v x="4.295789" y="-2.260335" z="-1.824125"/> +<v x="3.968596" y="-1.772348" z="-0.516106"/> +<v x="3.588752" y="-1.771887" z="-1.452982"/> +<v x="3.718463" y="-2.442692" z="-0.415023"/> +<v x="3.338620" y="-2.442231" z="-1.351899"/> +<v x="3.829014" y="-1.833658" z="-0.613290"/> +<v x="3.556239" y="-1.833327" z="-1.286085"/> +<v x="3.368959" y="-2.335230" z="-1.210401"/> +<v x="3.641734" y="-2.335561" z="-0.537607"/> +<v x="2.808438" y="-1.389107" z="-0.191875"/> +<v x="2.552831" y="-1.375023" z="-0.875607"/> +<v x="2.357980" y="-1.895606" z="-0.811918"/> +<v x="2.626380" y="-1.906270" z="-0.130620"/> +<v x="1.359788" y="-0.627362" z="0.491325"/> +<v x="1.314954" y="-0.491363" z="-0.460017"/> +<v x="0.949771" y="-0.683562" z="-0.886406"/> +<v x="1.413340" y="-1.501307" z="0.344940"/> +<v x="0.689613" y="0.186959" z="-0.835258"/> +<v x="0.832056" y="-1.643658" z="-0.339700"/> +<v x="0.914101" y="-1.554668" z="0.597554"/> +<v x="0.456477" y="-1.731587" z="-0.338719"/> +<v x="0.465306" y="-1.713433" z="0.541933"/> +<v x="0.643559" y="-0.748302" z="-1.075945"/> +<v x="0.961436" y="-0.258837" z="-0.925908"/> +<v x="0.672729" y="-0.233012" z="-1.099878"/> +<v x="0.594223" y="-1.140347" z="-0.799628"/> +<v x="1.026985" y="-1.434163" z="-0.518533"/> +<v x="0.236733" y="-0.176531" z="-1.175153"/> +<v x="0.224739" y="-0.701122" z="-1.114791"/> +<v x="0.711073" y="-0.184445" z="0.820128"/> +<v x="0.590854" y="-1.055453" z="0.950763"/> +<v x="0.414337" y="-2.058171" z="-0.315914"/> +<v x="0.508307" y="-2.057004" z="0.405499"/> +<v x="0.915167" y="-2.469241" z="-1.259480"/> +<v x="0.960065" y="-3.190679" z="-1.379580"/> +<v x="1.619991" y="-2.419717" z="0.137931"/> +<v x="0.974149" y="-3.609551" z="-1.287980"/> +<v x="0.987788" y="-4.705926" z="-1.261968"/> +<v x="1.514237" y="-3.547179" z="-0.970416"/> +<v x="1.648074" y="-2.552362" z="-0.780054"/> +<v x="1.548777" y="-4.878387" z="-1.639771"/> +<v x="1.212391" y="-5.989540" z="-1.560396"/> +<v x="2.485259" y="-3.524981" z="1.034287"/> +<v x="1.897599" y="-6.129936" z="0.941855"/> +<v x="2.432715" y="-1.910335" z="1.018132"/> +<v x="2.602393" y="-3.452093" z="-0.372233"/> +<v x="2.521499" y="-1.990913" z="0.026289"/> +<v x="2.351333" y="-0.046866" z="1.086173"/> +<v x="2.360275" y="0.005226" z="0.293656"/> +<v x="2.438314" y="1.675576" z="1.083127"/> +<v x="2.479127" y="1.748609" z="0.273180"/> +<v x="1.979700" y="-3.381553" z="-1.081038"/> +<v x="2.022658" y="-2.442232" z="-0.734962"/> +<v x="2.312705" y="-5.014256" z="1.023319"/> +<v x="2.359425" y="-5.059679" z="-0.636819"/> +<v x="1.685363" y="-6.217900" z="-0.668928"/> +<v x="0.887557" y="-6.667397" z="0.172391"/> +<v x="1.507384" y="-8.242362" z="0.098312"/> +<v x="1.037971" y="-6.631546" z="0.752124"/> +<v x="1.776281" y="-8.482070" z="0.729165"/> +<v x="1.565884" y="-6.411325" z="-0.019439"/> +<v x="2.530842" y="-7.855998" z="-0.191121"/> +<v x="1.716298" y="-6.375473" z="0.560294"/> +<v x="2.799739" y="-8.095708" z="0.439732"/> +<v x="1.653434" y="-9.095675" z="-1.491064"/> +<v x="1.936859" y="-9.629817" z="-1.201874"/> +<v x="2.882945" y="-9.272662" z="-1.469426"/> +<v x="2.599521" y="-8.738523" z="-1.758616"/> +<v x="-0.304386" y="1.663846" z="1.074321"/> +<v x="-0.262897" y="1.151058" z="0.901172"/> +<v x="-0.292600" y="1.523027" z="1.472037"/> +<v x="-0.246825" y="1.011543" z="1.299236"/> +<v x="0.226875" y="1.700750" z="1.065031"/> +<v x="0.267016" y="1.193859" z="0.890240"/> +<v x="0.242947" y="1.561236" z="1.463095"/> +<v x="0.287374" y="1.055651" z="1.288651"/> +<v x="1.263954" y="1.957807" z="-0.016047"/> +<v x="1.939932" y="-1.282280" z="0.968151"/> +<v x="2.152554" y="0.028000" z="0.957956"/> +<v x="2.189277" y="-0.019612" z="0.308949"/> +<v x="2.308029" y="1.681437" z="0.969819"/> +<v x="2.339863" y="1.756265" z="0.291079"/> +<v x="1.596224" y="-6.251456" z="-1.145817"/> +<v x="1.677284" y="-6.463988" z="0.143833"/> +<v x="-1.888564" y="7.029919" z="-0.870579"/> +<v x="-1.992754" y="6.785983" z="-1.816930"/> +<v x="-1.129885" y="6.925354" z="-1.845227"/> +<v x="-1.244853" y="7.133891" z="-0.891689"/> +<v x="-1.824486" y="6.371876" z="-0.649438"/> +<v x="-1.822400" y="6.077789" z="-1.614355"/> +<v x="-1.055569" y="6.201647" z="-1.639502"/> +<v x="-1.084469" y="6.491403" z="-0.673706"/> +<v x="-1.853101" y="6.451667" z="-2.637215"/> +<v x="-1.209389" y="6.555640" z="-2.658325"/> +<v x="-1.736881" y="6.079426" z="-2.423095"/> +<v x="-1.188721" y="6.167964" z="-2.441071"/> +<v x="-1.722914" y="5.760504" z="-0.490631"/> +<v x="-1.714425" y="5.515303" z="-1.439454"/> +<v x="-0.969765" y="5.635580" z="-1.463874"/> +<v x="-0.978254" y="5.880781" z="-0.515051"/> +<v x="-1.760417" y="5.617664" z="-0.382332"/> +<v x="-1.705111" y="5.275810" z="-0.290545"/> +<v x="-1.750880" y="5.338539" z="-1.466306"/> +<v x="-1.695520" y="4.995104" z="-1.380656"/> +<v x="-0.881361" y="5.478983" z="-1.494821"/> +<v x="-0.820316" y="5.136467" z="-1.409357"/> +<v x="-0.890898" y="5.758109" z="-0.410847"/> +<v x="-0.829906" y="5.417172" z="-0.319246"/> +<v x="-1.598512" y="5.205990" z="-0.381820"/> +<v x="-1.590739" y="4.978501" z="-1.265268"/> +<v x="-0.914737" y="5.316433" z="-0.404244"/> +<v x="-0.906964" y="5.088944" z="-1.287691"/> +<v x="-1.447535" y="4.248786" z="-0.121434"/> +<v x="-1.419840" y="3.923345" z="-0.985176"/> +<v x="-0.747306" y="4.361118" z="-0.136992"/> +<v x="-0.724337" y="4.047748" z="-1.001393"/> +<v x="-0.405807" y="3.297347" z="0.457427"/> +<v x="-0.411701" y="3.158389" z="-0.638269"/> +<v x="-0.195771" y="3.238163" z="0.444420"/> +<v x="-0.194655" y="3.147550" z="-0.570751"/> +<v x="-1.406857" y="2.465461" z="-0.545346"/> +<v x="-0.829571" y="2.519506" z="-0.901584"/> +<v x="-0.073073" y="2.503764" z="-0.970838"/> +<v x="-1.312219" y="1.781229" z="-0.572232"/> +<v x="-0.808592" y="1.693674" z="-0.914308"/> +<v x="-0.082702" y="1.729078" z="-1.055020"/> +<v x="-1.391243" y="1.849734" z="0.691216"/> +<v x="-0.857003" y="2.687952" z="1.036618"/> +<v x="-0.690615" y="1.753270" z="1.091875"/> +<v x="-0.127127" y="2.561305" z="0.975709"/> +<v x="-0.058549" y="1.464387" z="1.016497"/> +<v x="-1.525134" y="2.563417" z="0.564664"/> +<v x="-1.379082" y="2.941747" z="-0.717135"/> +<v x="-1.181985" y="0.912016" z="-0.421415"/> +<v x="-0.775064" y="0.958366" z="-0.807861"/> +<v x="-0.055523" y="0.968230" z="-0.995968"/> +<v x="-1.116101" y="0.977390" z="0.694565"/> +<v x="-0.050088" y="0.911174" z="0.729456"/> +<v x="-1.470887" y="3.244869" z="0.367780"/> +<v x="-3.854806" y="2.286083" z="0.874235"/> +<v x="-3.918570" y="2.323255" z="0.122656"/> +<v x="-4.182061" y="1.996615" z="0.887033"/> +<v x="-4.253790" y="2.042149" z="0.134125"/> +<v x="-4.208991" y="2.702577" z="0.814805"/> +<v x="-4.254786" y="2.728585" z="0.257861"/> +<v x="-4.453635" y="2.484967" z="0.824759"/> +<v x="-4.499430" y="2.510976" z="0.267815"/> +<v x="-3.530189" y="2.019415" z="0.815709"/> +<v x="-3.584323" y="2.093785" z="0.081648"/> +<v x="-3.899240" y="1.700896" z="0.827618"/> +<v x="-4.062648" y="1.797422" z="0.084725"/> +<v x="-3.170242" y="1.704650" z="0.740268"/> +<v x="-3.223841" y="1.735090" z="0.088425"/> +<v x="-3.516019" y="1.397083" z="0.754337"/> +<v x="-3.569617" y="1.427523" z="0.102494"/> +<v x="-3.689289" y="2.127976" z="-0.372067"/> +<v x="-3.896918" y="1.934013" z="-0.364053"/> +<v x="-3.477318" y="1.957483" z="-0.398468"/> +<v x="-3.669525" y="1.782539" z="-0.390833"/> +<v x="-3.338711" y="1.854871" z="-0.208739"/> +<v x="-3.653927" y="1.575366" z="-0.196466"/> +<v x="-3.987044" y="1.801430" z="-0.106003"/> +<v x="-3.631839" y="2.112986" z="-0.117693"/> +<v x="-2.818954" y="1.480270" z="0.879798"/> +<v x="-2.901711" y="1.527270" z="-0.126661"/> +<v x="-3.358618" y="1.000242" z="0.901756"/> +<v x="-3.441375" y="1.047243" z="-0.104703"/> +<v x="-2.857312" y="1.378888" z="0.735102"/> +<v x="-2.916742" y="1.412640" z="0.012338"/> +<v x="-3.320801" y="1.053231" z="0.028778"/> +<v x="-3.261371" y="1.019480" z="0.751542"/> +<v x="-2.094419" y="0.508289" z="0.629403"/> +<v x="-2.150628" y="0.545904" z="-0.100464"/> +<v x="-2.552891" y="0.176870" z="-0.083614"/> +<v x="-2.493649" y="0.142086" z="0.646114"/> +<v x="-1.267025" y="-0.468822" z="0.536536"/> +<v x="-1.264436" y="-0.345078" z="-0.428362"/> +<v x="-1.095504" y="-0.628690" z="-0.879784"/> +<v x="-1.646693" y="-0.937334" z="0.521839"/> +<v x="-0.050088" y="0.327749" z="-0.987566"/> +<v x="-0.779312" y="0.190578" z="-0.834733"/> +<v x="-1.005844" y="-1.590299" z="-0.332328"/> +<v x="-1.020364" y="-1.516909" z="0.606853"/> +<v x="-0.559295" y="-1.731587" z="-0.328772"/> +<v x="-0.553200" y="-1.713455" z="0.551892"/> +<v x="-0.050088" y="-0.562265" z="-1.021660"/> +<v x="-0.754484" y="-0.740992" z="-1.075096"/> +<v x="-1.035521" y="-0.250278" z="-0.924666"/> +<v x="-0.050088" y="-0.093694" z="-1.117936"/> +<v x="-0.771077" y="-0.233015" z="-1.099878"/> +<v x="-0.050088" y="-1.187194" z="-0.774686"/> +<v x="-0.739389" y="-1.110657" z="-0.796181"/> +<v x="-1.636773" y="-0.961247" z="-0.432807"/> +<v x="-0.336641" y="-0.176531" z="-1.175153"/> +<v x="-0.324869" y="-0.701122" z="-1.114791"/> +<v x="-0.050084" y="-0.129421" z="0.833611"/> +<v x="-0.050078" y="-1.355389" z="0.894441"/> +<v x="-0.788742" y="-0.176904" z="0.821234"/> +<v x="-0.684619" y="-1.054191" z="0.950977"/> +<v x="-0.054095" y="-1.729956" z="-0.423548"/> +<v x="-0.038551" y="-1.721277" z="0.627810"/> +<v x="-0.547545" y="-2.058171" z="-0.191577"/> +<v x="-0.454986" y="-2.057004" z="0.530018"/> +<v x="-0.082148" y="-2.058366" z="-0.373996"/> +<v x="0.042205" y="-2.056809" z="0.588009"/> +<v x="-0.288451" y="-2.374072" z="-1.048330"/> +<v x="-0.313161" y="-3.150882" z="-1.126551"/> +<v x="0.284148" y="-2.287452" z="1.145263"/> +<v x="-0.284589" y="-3.617060" z="-1.017883"/> +<v x="-1.447984" y="-2.469241" z="-0.654227"/> +<v x="-1.546188" y="-3.190679" z="-0.720632"/> +<v x="-1.374397" y="-2.419717" z="0.925220"/> +<v x="-1.513398" y="-3.609551" z="-0.633950"/> +<v x="-0.279827" y="-4.875986" z="-0.999771"/> +<v x="-1.512480" y="-4.705926" z="-0.604593"/> +<v x="-1.827453" y="-3.547179" z="-0.091814"/> +<v x="-1.850354" y="-2.552362" z="0.139759"/> +<v x="-0.349980" y="-5.176132" z="-1.266589"/> +<v x="-0.339650" y="-6.310060" z="-1.227301"/> +<v x="0.585184" y="-3.647571" z="2.290225"/> +<v x="0.454436" y="-6.463428" z="1.792937"/> +<v x="-2.186744" y="-4.878387" z="-0.657622"/> +<v x="-1.854817" y="-5.989540" z="-0.753961"/> +<v x="-1.686905" y="-3.524981" z="2.131239"/> +<v x="-1.220702" y="-6.129936" z="1.761724"/> +<v x="0.499623" y="-1.923329" z="1.964803"/> +<v x="-1.649102" y="-1.910336" z="2.091330"/> +<v x="-2.480680" y="-3.452093" z="0.964216"/> +<v x="-2.214236" y="-1.990913" z="1.271417"/> +<v x="0.504597" y="-0.056767" z="1.983720"/> +<v x="-1.544778" y="-0.046866" z="2.110545"/> +<v x="-1.942358" y="0.005226" z="1.424911"/> +<v x="0.541582" y="1.662566" z="2.124391"/> +<v x="-1.622009" y="1.675576" z="2.150674"/> +<v x="-2.055912" y="1.748609" z="1.465540"/> +<v x="-2.287132" y="-3.381553" z="0.040804"/> +<v x="-2.154319" y="-2.442232" z="0.363256"/> +<v x="0.574644" y="-5.186128" z="2.250139"/> +<v x="-1.542060" y="-5.014256" z="2.036820"/> +<v x="-2.399266" y="-5.059679" z="0.614344"/> +<v x="-0.053900" y="-6.695692" z="-0.140474"/> +<v x="-1.828164" y="-6.217900" z="0.254855"/> +<v x="-0.719731" y="-6.667397" z="0.594982"/> +<v x="-1.295839" y="-8.242362" z="0.835340"/> +<v x="-0.565555" y="-6.631546" z="1.173726"/> +<v x="-1.219682" y="-8.482070" z="1.516868"/> +<v x="-1.404689" y="-6.411325" z="0.761589"/> +<v x="-2.329303" y="-7.855998" z="1.086717"/> +<v x="-1.250514" y="-6.375473" z="1.340333"/> +<v x="-2.253146" y="-8.095708" z="1.768245"/> +<v x="-2.204726" y="-9.095675" z="-0.476670"/> +<v x="-2.309263" y="-9.629817" z="-0.085476"/> +<v x="-3.264599" y="-9.272662" z="0.146897"/> +<v x="-3.160062" y="-8.738523" z="-0.244297"/> +<v x="0.225097" y="1.694748" z="1.066257"/> +<v x="0.266370" y="1.192934" z="0.890408"/> +<v x="0.246526" y="1.556866" z="1.464756"/> +<v x="0.287799" y="1.055051" z="1.288906"/> +<v x="-0.305947" y="1.646870" z="1.078248"/> +<v x="-0.264675" y="1.145055" z="0.902398"/> +<v x="-0.284518" y="1.508987" z="1.476746"/> +<v x="-0.243246" y="1.007173" z="1.300897"/> +<v x="-1.433880" y="1.757629" z="0.052294"/> +<v x="-1.245543" y="-1.282280" z="1.805682"/> +<v x="-1.434913" y="0.028000" z="1.901178"/> +<v x="-1.785951" y="-0.019612" z="1.354123"/> +<v x="0.399414" y="-1.157126" z="1.594457"/> +<v x="0.430503" y="0.038460" z="1.703676"/> +<v x="-1.564303" y="1.681437" z="1.987939"/> +<v x="-1.925854" y="1.756265" z="1.412628"/> +<v x="0.495232" y="1.665579" z="1.948102"/> +<v x="0.155135" y="-6.822106" z="0.654572"/> +<v x="-1.985106" y="-6.251456" z="-0.204207"/> +<v x="-0.199629" y="-6.717984" z="-0.694744"/> +<v x="-1.421379" y="-6.463988" z="0.958539"/> +</vertices> +<normals count="2796"> +<!-- Smooth normals begin here --> +<v x="0.088748" y="0.764092" z="0.638936"/> +<v x="-0.076815" y="-0.982543" z="-0.169378"/> +<v x="0.048555" y="-0.074465" z="0.996033"/> +<v x="0.016724" y="-0.489364" z="0.871883"/> +<v x="0.006256" y="-0.569079" z="0.822230"/> +<v x="-0.983490" y="0.038362" z="0.176702"/> +<v x="0.952910" y="-0.008667" z="-0.303049"/> +<v x="0.994751" y="-0.082980" z="0.059481"/> +<v x="-0.037263" y="0.448103" z="-0.893185"/> +<v x="-0.087649" y="-0.480300" z="-0.872677"/> +<v x="0.088687" y="0.817377" z="0.569201"/> +<v x="-0.980499" y="0.098025" z="-0.170202"/> +<v x="0.040468" y="0.909024" z="-0.414686"/> +<v x="-0.996826" y="0.057131" z="0.054964"/> +<v x="-0.013215" y="0.530015" z="-0.847865"/> +<v x="0.996338" y="-0.068209" z="-0.051180"/> +<v x="0.997223" y="-0.057985" z="-0.046266"/> +<v x="-0.003449" y="0.584582" z="-0.811304"/> +<v x="-0.994964" y="0.079257" z="0.061129"/> +<v x="0.006012" y="-0.560503" z="0.828120"/> +<v x="0.921384" y="0.320994" z="0.218970"/> +<v x="-0.840602" y="0.441725" z="0.313364"/> +<v x="-0.007874" y="0.532945" z="-0.846095"/> +<v x="-0.080844" y="-0.497665" z="-0.863582"/> +<v x="0.375622" y="-0.758751" z="-0.532121"/> +<v x="-0.530656" y="-0.696280" z="-0.483261"/> +<v x="0.002686" y="0.376629" z="-0.926328"/> +<v x="0.997009" y="-0.057466" z="-0.051485"/> +<v x="-0.995636" y="0.076479" z="0.053285"/> +<v x="0.003174" y="-0.545793" z="0.837886"/> +<v x="-0.974120" y="0.224555" z="0.024720"/> +<v x="-0.400708" y="0.913175" z="-0.074404"/> +<v x="-0.483139" y="0.204993" z="-0.851161"/> +<v x="0.024201" y="0.466811" z="-0.883999"/> +<v x="0.995575" y="-0.027436" z="-0.089541"/> +<v x="0.115543" y="0.076540" z="-0.990326"/> +<v x="0.492111" y="-0.021455" z="-0.870235"/> +<v x="-0.116184" y="-0.038362" z="0.992462"/> +<v x="0.993072" y="0.111301" z="-0.037294"/> +<v x="0.218268" y="0.295450" z="-0.930052"/> +<v x="0.212867" y="-0.104617" z="-0.971435"/> +<v x="0.639088" y="-0.122654" z="-0.759270"/> +<v x="0.645375" y="-0.133152" z="0.752129"/> +<v x="-0.092593" y="0.107364" z="0.989868"/> +<v x="0.983673" y="0.155522" z="-0.090182"/> +<v x="-0.042177" y="-0.195776" z="0.979736"/> +<v x="-0.110294" y="-0.992859" z="0.044923"/> +<v x="0.872066" y="-0.335643" z="-0.356090"/> +<v x="0.347819" y="0.926939" z="-0.140629"/> +<v x="0.569475" y="-0.086154" z="0.817469"/> +<v x="-0.185430" y="-0.074435" z="-0.979827"/> +<v x="0.538530" y="0.819453" z="-0.196020"/> +<v x="-0.367229" y="0.006012" z="-0.930082"/> +<v x="0.323679" y="-0.001404" z="0.946135"/> +<v x="-0.348216" y="-0.924406" z="0.155400"/> +<v x="0.458998" y="0.882260" z="-0.104404"/> +<v x="-0.475082" y="-0.842738" z="0.253121"/> +<v x="-0.889615" y="0.333171" z="-0.312296"/> +<v x="-0.339396" y="0.026337" z="-0.940245"/> +<v x="-0.614826" y="-0.677297" z="-0.404004"/> +<v x="0.384472" y="0.854488" z="-0.349254"/> +<v x="0.828791" y="-0.414808" z="-0.375469"/> +<v x="0.838588" y="-0.297769" z="-0.456130"/> +<v x="0.391064" y="0.903836" z="-0.173498"/> +<v x="-0.576342" y="-0.814325" z="-0.068087"/> +<v x="-0.939909" y="0.339579" z="-0.034700"/> +<v x="0.309671" y="0.025452" z="0.950499"/> +<v x="0.073366" y="-0.996826" z="-0.030213"/> +<v x="0.770226" y="-0.191382" z="0.608356"/> +<v x="0.129002" y="-0.190588" z="-0.973144"/> +<v x="0.635426" y="0.727989" z="-0.257271"/> +<v x="-0.675954" y="0.349071" z="0.649007"/> +<v x="-0.368297" y="0.005982" z="-0.929655"/> +<v x="-0.920499" y="-0.115757" z="0.373150"/> +<v x="-0.936949" y="0.349376" z="0.005249"/> +<v x="-0.594867" y="0.766625" z="0.241554"/> +<v x="-0.229957" y="0.054353" z="-0.971679"/> +<v x="0.358318" y="0.923948" z="-0.133763"/> +<v x="0.374706" y="-0.009308" z="0.927091"/> +<v x="-0.344737" y="-0.929411" z="0.131565"/> +<v x="0.529679" y="0.847377" z="-0.037172"/> +<v x="0.380932" y="-0.080050" z="0.921110"/> +<v x="-0.277749" y="-0.957549" z="0.076937"/> +<v x="-0.215583" y="-0.515000" z="-0.829615"/> +<v x="0.985443" y="0.169561" z="0.010407"/> +<v x="0.244819" y="0.008789" z="-0.969512"/> +<v x="0.646779" y="0.080081" z="-0.758446"/> +<v x="0.318613" y="-0.947783" z="-0.012604"/> +<v x="0.250923" y="-0.967162" z="0.039827"/> +<v x="0.046449" y="-0.630757" z="-0.774560"/> +<v x="0.212714" y="-0.667714" z="-0.713340"/> +<v x="0.520768" y="-0.078341" z="-0.850063"/> +<v x="-0.365886" y="-0.136509" z="-0.920560"/> +<v x="0.119022" y="0.391797" z="-0.912290"/> +<v x="0.505509" y="0.459181" z="-0.730461"/> +<v x="0.775170" y="-0.056642" z="-0.629170"/> +<v x="0.386914" y="-0.473495" z="-0.791223"/> +<v x="0.107242" y="-0.091800" z="-0.989959"/> +<v x="0.022828" y="-0.587786" z="-0.808649"/> +<v x="0.229102" y="0.487594" z="-0.842433"/> +<v x="0.011536" y="0.079684" z="0.996734"/> +<v x="0.421155" y="-0.292306" z="0.858577"/> +<v x="0.506394" y="-0.030915" z="0.861721"/> +<v x="0.144932" y="-0.578722" z="0.802515"/> +<v x="-0.047548" y="0.105594" z="0.993255"/> +<v x="0.186987" y="-0.071841" z="-0.979705"/> +<v x="0.054659" y="-0.540605" z="-0.839473"/> +<v x="0.041749" y="-0.621204" z="0.782525"/> +<v x="0.295083" y="-0.156621" z="0.942534"/> +<v x="0.995422" y="-0.067019" z="-0.067843"/> +<v x="-0.164800" y="0.124363" z="-0.978423"/> +<v x="0.011414" y="0.910916" z="-0.412366"/> +<v x="-0.199927" y="-0.233314" z="-0.951598"/> +<v x="-0.206244" y="-0.018342" z="-0.978301"/> +<v x="0.465285" y="-0.142582" z="-0.873562"/> +<v x="0.476760" y="-0.017426" z="-0.878842"/> +<v x="-0.430677" y="0.458968" z="-0.777032"/> +<v x="0.597491" y="0.144780" z="-0.788659"/> +<v x="0.266152" y="0.911557" z="0.313334"/> +<v x="0.302622" y="0.934019" z="-0.189673"/> +<v x="0.297464" y="0.953887" z="-0.039918"/> +<v x="0.571642" y="-0.336894" z="0.748100"/> +<v x="0.578448" y="-0.051363" z="0.814081"/> +<v x="-0.177221" y="-0.042177" z="-0.983245"/> +<v x="0.065828" y="-0.790399" z="-0.608997"/> +<v x="0.503128" y="0.123386" z="0.855342"/> +<v x="0.773583" y="0.023743" z="-0.633198"/> +<v x="0.996551" y="0.082034" z="0.009674"/> +<v x="0.442793" y="-0.008484" z="0.896573"/> +<v x="0.997406" y="-0.063448" z="-0.033326"/> +<v x="0.472274" y="-0.056490" z="0.879635"/> +<v x="0.996368" y="0.051668" z="0.067507"/> +<v x="-0.243843" y="0.677023" z="-0.694357"/> +<v x="0.990417" y="-0.131260" z="0.042726"/> +<v x="-0.196142" y="0.383953" z="-0.902249"/> +<v x="0.732444" y="0.250191" z="-0.633168"/> +<v x="-0.326487" y="0.175604" z="-0.928709"/> +<v x="0.200415" y="-0.953032" z="-0.226936"/> +<v x="0.806696" y="-0.578417" z="-0.121006"/> +<v x="0.894986" y="-0.444166" z="-0.040620"/> +<v x="-0.039796" y="0.390118" z="-0.919889"/> +<v x="-0.260506" y="0.885372" z="-0.384991"/> +<v x="-0.892331" y="-0.329325" z="0.308603"/> +<v x="0.239937" y="0.084292" z="0.967101"/> +<v x="0.811182" y="0.565905" z="-0.147282"/> +<v x="-0.262215" y="-0.027955" z="-0.964568"/> +<v x="-0.049898" y="-0.435041" z="-0.898984"/> +<v x="-0.886532" y="-0.431410" z="0.166997"/> +<v x="-0.425092" y="0.789178" z="-0.443220"/> +<v x="0.425245" y="-0.771722" z="0.472823"/> +<v x="0.907682" y="0.368786" z="-0.200201"/> +<v x="-0.996399" y="-0.084262" z="0.006806"/> +<v x="0.041932" y="-0.320933" z="0.946165"/> +<v x="0.996155" y="0.085910" z="-0.016663"/> +<v x="-0.040864" y="0.321024" z="-0.946165"/> +<v x="-0.063173" y="0.941862" z="0.329936"/> +<v x="0.073489" y="-0.941374" z="-0.329173"/> +<v x="0.569536" y="-0.053041" z="-0.820215"/> +<v x="0.786615" y="0.147618" z="0.599506"/> +<v x="-0.307840" y="0.578234" z="0.755516"/> +<v x="0.711173" y="0.095614" z="0.696463"/> +<v x="0.102512" y="0.602161" z="0.791742"/> +<v x="0.517350" y="0.028657" z="0.855251"/> +<v x="0.990204" y="-0.135258" z="-0.034425"/> +<v x="0.752037" y="0.410596" z="-0.515549"/> +<v x="0.646870" y="-0.202765" z="-0.735099"/> +<v x="0.483169" y="0.040895" z="0.874569"/> +<v x="0.065065" y="-0.418409" z="0.905911"/> +<v x="-0.985107" y="0.170629" z="-0.020417"/> +<v x="-0.396161" y="0.080081" z="-0.914670"/> +<v x="-0.995483" y="0.093326" z="0.015870"/> +<v x="-0.447523" y="0.111362" z="-0.887295"/> +<v x="0.053407" y="0.948180" z="-0.313150"/> +<v x="0.071383" y="0.987548" z="0.139958"/> +<v x="-0.194922" y="0.179174" z="-0.964293"/> +<v x="-0.224097" y="0.060823" z="-0.972655"/> +<v x="-0.324381" y="0.337779" z="-0.883541"/> +<v x="0.361187" y="-0.906339" z="0.219153"/> +<v x="0.255257" y="-0.966826" z="-0.006745"/> +<v x="0.683920" y="-0.227027" z="-0.693319"/> +<v x="-0.514115" y="0.593127" z="-0.619526"/> +<v x="-0.162603" y="0.964110" z="-0.209845"/> +<v x="0.143498" y="-0.759789" z="0.634114"/> +<v x="-0.090365" y="0.702811" z="0.705557"/> +<v x="-0.025636" y="0.349010" z="0.936735"/> +<v x="-0.009186" y="0.253395" z="0.967315"/> +<v x="0.970336" y="0.234443" z="0.058626"/> +<v x="-0.940672" y="-0.315531" z="-0.124607"/> +<v x="-0.989013" y="-0.082003" z="0.122898"/> +<v x="0.055727" y="-0.518296" z="-0.853359"/> +<v x="0.159093" y="-0.987182" z="-0.010590"/> +<v x="-0.158147" y="0.894040" z="-0.419080"/> +<v x="0.982208" y="-0.004944" z="-0.187658"/> +<v x="-0.076296" y="0.277963" z="-0.957549"/> +<v x="0.987152" y="0.157445" z="-0.026368"/> +<v x="0.015931" y="-0.292795" z="-0.956023"/> +<v x="-0.986145" y="-0.161229" z="0.038331"/> +<v x="-0.988708" y="-0.146916" z="0.029115"/> +<v x="0.006104" y="-0.235237" z="-0.971892"/> +<v x="0.984466" y="0.171789" z="-0.035554"/> +<v x="-0.010895" y="0.263375" z="0.964599"/> +<v x="-0.947478" y="0.307505" z="-0.087588"/> +<v x="0.795068" y="0.588977" z="-0.144719"/> +<v x="0.013245" y="-0.257057" z="-0.966277"/> +<v x="0.150731" y="-0.970916" z="-0.185858"/> +<v x="-0.304178" y="-0.923154" z="0.235023"/> +<v x="0.593432" y="-0.778161" z="0.205573"/> +<v x="0.081881" y="-0.262917" z="-0.961333"/> +<v x="-0.988433" y="-0.149052" z="0.027223"/> +<v x="0.985717" y="0.164495" z="-0.035859"/> +<v x="-0.012421" y="0.265969" z="0.963866"/> +<v x="0.957213" y="0.284280" z="-0.053957"/> +<v x="0.241676" y="0.967467" z="-0.074740"/> +<v x="0.414777" y="0.409131" z="-0.812738"/> +<v x="-0.038850" y="0.462813" z="-0.885586"/> +<v x="-0.985626" y="-0.151799" z="-0.073855"/> +<v x="-0.140904" y="0.065157" z="-0.987854"/> +<v x="-0.515580" y="-0.025269" z="-0.856441"/> +<v x="0.132237" y="-0.024506" z="0.990905"/> +<v x="-0.997620" y="-0.009857" z="-0.067873"/> +<v x="-0.289834" y="0.040925" z="-0.956175"/> +<v x="-0.225196" y="-0.113956" z="-0.967620"/> +<v x="-0.645466" y="-0.173070" z="-0.743889"/> +<v x="-0.581225" y="-0.232521" z="0.779778"/> +<v x="0.101840" y="0.120457" z="0.987457"/> +<v x="-0.992859" y="-0.020997" z="-0.117405"/> +<v x="-0.092868" y="0.469253" z="0.878140"/> +<v x="-0.892758" y="-0.447340" z="0.053133"/> +<v x="-0.629475" y="0.772271" z="0.085604"/> +<v x="0.745506" y="0.665792" z="-0.030274"/> +<v x="-0.074526" y="0.133244" z="0.988250"/> +<v x="-0.215796" y="0.204688" z="-0.954711"/> +<v x="0.580401" y="0.814234" z="0.010681"/> +<v x="-0.079653" y="0.056948" z="-0.995178"/> +<v x="0.099338" y="-0.098910" z="0.990112"/> +<v x="-0.740043" y="-0.671133" z="0.043184"/> +<v x="0.679952" y="0.731254" z="0.053865"/> +<v x="-0.608386" y="-0.790551" z="0.069796"/> +<v x="0.497330" y="-0.523270" z="-0.691946"/> +<v x="-0.070345" y="0.091586" z="-0.993286"/> +<v x="-0.546556" y="-0.593677" z="-0.590594"/> +<v x="0.625233" y="0.755242" z="-0.196539"/> +<v x="-0.695700" y="0.716269" z="0.054109"/> +<v x="-0.604755" y="0.796106" z="-0.021058"/> +<v x="0.705191" y="0.707907" z="-0.039247"/> +<v x="-0.618275" y="-0.740165" z="-0.264260"/> +<v x="0.573290" y="-0.674032" z="-0.465804"/> +<v x="0.129337" y="-0.103519" z="0.986175"/> +<v x="-0.962706" y="-0.262032" z="0.066897"/> +<v x="-0.271279" y="0.351939" z="0.895810"/> +<v x="-0.410993" y="0.431288" z="-0.803125"/> +<v x="0.455214" y="0.890347" z="0.004120"/> +<v x="0.646565" y="-0.716330" z="0.262246"/> +<v x="-0.087222" y="0.052919" z="-0.994751"/> +<v x="0.222388" y="-0.972869" z="-0.063692"/> +<v x="0.589709" y="-0.684042" z="-0.429304"/> +<v x="0.934111" y="-0.344646" z="-0.092898"/> +<v x="-0.208563" y="0.136387" z="-0.968444"/> +<v x="0.748222" y="0.662831" z="-0.028138"/> +<v x="0.083682" y="-0.046144" z="0.995392"/> +<v x="-0.750359" y="-0.660268" z="0.031129"/> +<v x="0.733909" y="0.678671" z="0.027345"/> +<v x="0.060091" y="-0.053316" z="0.996765"/> +<v x="-0.784845" y="-0.618946" z="0.029572"/> +<v x="0.206885" y="-0.517197" z="-0.830470"/> +<v x="-0.998688" y="0.049196" z="0.012513"/> +<v x="-0.250160" y="0.006043" z="-0.968169"/> +<v x="-0.698019" y="0.023743" z="-0.715659"/> +<v x="-0.680105" y="-0.732109" z="0.037935"/> +<v x="-0.324534" y="-0.945402" z="0.029298"/> +<v x="-0.092929" y="-0.624043" z="-0.775811"/> +<v x="-0.419965" y="-0.564196" z="-0.710807"/> +<v x="-0.533219" y="-0.043764" z="-0.844813"/> +<v x="0.366039" y="-0.136509" z="-0.920530"/> +<v x="-0.119816" y="0.391919" z="-0.912137"/> +<v x="-0.540513" y="0.457137" z="-0.706290"/> +<v x="-0.886898" y="0.121128" z="-0.445723"/> +<v x="-0.443251" y="-0.413739" z="-0.795160"/> +<v x="-0.107425" y="-0.091586" z="-0.989959"/> +<v x="-0.049715" y="-0.608936" z="-0.791620"/> +<v x="-0.229926" y="0.487503" z="-0.842280"/> +<v x="-0.009980" y="0.079348" z="0.996765"/> +<v x="-0.284127" y="-0.175237" z="0.942625"/> +<v x="-0.560717" y="-0.002380" z="0.827967"/> +<v x="-0.160405" y="-0.575945" z="0.801569"/> +<v x="0.048585" y="0.105014" z="0.993255"/> +<v x="-0.299966" y="-0.211707" z="-0.930143"/> +<v x="-0.061586" y="-0.548814" z="-0.833644"/> +<v x="-0.036592" y="-0.614917" z="0.787713"/> +<v x="-0.184515" y="-0.094241" z="0.978271"/> +<v x="-0.970183" y="-0.232551" z="0.068148"/> +<v x="-0.335124" y="0.114383" z="-0.935179"/> +<v x="-0.195898" y="0.899472" z="-0.390545"/> +<v x="-0.293954" y="-0.233314" z="-0.926878"/> +<v x="-0.301584" y="-0.018342" z="-0.953246"/> +<v x="-0.834773" y="-0.142582" z="-0.531754"/> +<v x="-0.847346" y="-0.017426" z="-0.530686"/> +<v x="-0.007172" y="0.458968" z="-0.888394"/> +<v x="-0.910123" y="0.132878" z="-0.392407"/> +<v x="-0.101321" y="0.912168" z="0.397076"/> +<v x="-0.366070" y="0.928770" z="-0.057619"/> +<v x="-0.311533" y="0.941862" z="0.125736"/> +<v x="-0.129765" y="-0.336894" z="0.932524"/> +<v x="-0.103214" y="-0.051363" z="0.993316"/> +<v x="-0.329295" y="-0.042177" z="-0.943266"/> +<v x="-0.356853" y="-0.790399" z="-0.497848"/> +<v x="-0.017365" y="0.123386" z="0.992187"/> +<v x="-0.984985" y="0.023743" z="-0.170812"/> +<v x="-0.862941" y="0.082034" z="0.498581"/> +<v x="0.055422" y="-0.008484" z="0.998413"/> +<v x="-0.884823" y="-0.063448" z="0.461531"/> +<v x="0.021424" y="-0.056490" z="0.998169"/> +<v x="-0.834315" y="0.051668" z="0.548845"/> +<v x="-0.129185" y="0.677023" z="-0.724509"/> +<v x="-0.841304" y="-0.131260" z="0.524338"/> +<v x="-0.272958" y="0.383953" z="-0.882046"/> +<v x="-0.949156" y="0.250191" z="-0.191046"/> +<v x="-0.172491" y="0.175604" z="-0.969207"/> +<v x="-0.286111" y="-0.953032" z="-0.099002"/> +<v x="-0.761895" y="-0.578417" z="0.291360"/> +<v x="-0.799249" y="-0.444166" z="0.404797"/> +<v x="-0.417768" y="0.390118" z="-0.820521"/> +<v x="0.037446" y="0.885372" z="-0.463332"/> +<v x="0.928739" y="-0.329325" z="-0.170171"/> +<v x="0.266732" y="0.084292" z="0.960051"/> +<v x="-0.778741" y="0.565905" z="0.270730"/> +<v x="-0.246071" y="-0.027955" z="-0.968841"/> +<v x="-0.398724" y="-0.435041" z="-0.807276"/> +<v x="0.854030" y="-0.431410" z="-0.290628"/> +<v x="0.152104" y="0.789178" z="-0.594989"/> +<v x="-0.137700" y="-0.771722" z="0.620838"/> +<v x="-0.888760" y="0.368786" z="0.272103"/> +<v x="0.995697" y="0.089755" z="-0.022462"/> +<v x="0.050752" y="-0.326548" z="0.943785"/> +<v x="-0.995697" y="-0.089755" z="0.022462"/> +<v x="-0.050752" y="0.326548" z="-0.943785"/> +<v x="-0.077364" y="0.940886" z="0.329691"/> +<v x="0.077364" y="-0.940886" z="-0.329691"/> +<v x="-0.618122" y="-0.073519" z="-0.782586"/> +<v x="-0.669210" y="-0.039430" z="0.741997"/> +<v x="0.234413" y="0.627094" z="0.742821"/> +<v x="-0.654073" y="0.297250" z="0.695547"/> +<v x="-0.137577" y="0.663320" z="0.735557"/> +<v x="-0.451918" y="-0.063051" z="0.889798"/> +<v x="-0.968108" y="-0.250069" z="-0.013459"/> +<v x="-0.832270" y="0.396435" z="-0.387463"/> +<v x="-0.640431" y="0.311563" z="-0.701956"/> +<v x="-0.548357" y="0.014161" z="0.836085"/> +<v x="-0.050905" y="-0.428907" z="0.901883"/> +<v x="0.847987" y="0.170598" z="-0.501785"/> +<v x="-0.104617" y="0.079836" z="-0.991302"/> +<v x="0.874599" y="0.093295" z="-0.475753"/> +<v x="-0.046754" y="0.111332" z="-0.992676"/> +<v x="-0.200507" y="0.948180" z="-0.246376"/> +<v x="0.006684" y="0.987548" z="0.156987"/> +<v x="-0.304544" y="0.179174" z="-0.935453"/> +<v x="-0.283273" y="0.060823" z="-0.957091"/> +<v x="-0.151799" y="0.338023" z="-0.928800"/> +<v x="-0.206702" y="-0.906339" z="0.368480"/> +<v x="-0.225562" y="-0.966826" z="0.119663"/> +<v x="-0.936460" y="-0.227027" z="-0.267251"/> +<v x="0.142979" y="0.593341" z="-0.792138"/> +<v x="0.757530" y="0.449568" z="0.473281"/> +<v x="0.066744" y="0.145848" z="0.987030"/> +<v x="0.699667" y="0.044465" z="0.713065"/> +<v x="0.089328" y="0.793146" z="0.602405"/> +<v x="-0.606830" y="0.134129" z="0.783410"/> +<v x="-0.632282" y="0.535813" z="0.559526"/> +<v x="-0.612659" y="0.777795" z="-0.140110"/> +<v x="0.694784" y="0.687887" z="-0.209784"/> +<v x="0.756737" y="-0.350841" z="0.551592"/> +<v x="0.991028" y="-0.057070" z="-0.120823"/> +<v x="-0.998321" y="0.057344" z="0.004486"/> +<v x="-0.727470" y="-0.256294" z="0.636433"/> +<v x="0.006409" y="-0.577471" z="0.816370"/> +<v x="-0.998108" y="0.000641" z="0.061342"/> +<v x="-0.067721" y="-0.108127" z="-0.991821"/> +<v x="0.991180" y="-0.122257" z="-0.050539"/> +<v x="0.045076" y="0.982849" z="-0.178655"/> +<v x="0.646443" y="0.279153" z="-0.710013"/> +<v x="-0.704672" y="0.355693" z="-0.613910"/> +<v x="-0.077456" y="-0.133854" z="-0.987945"/> +<v x="0.561754" y="-0.378826" z="-0.735435"/> +<v x="0.747276" y="0.601581" z="0.282235"/> +<v x="-0.695669" y="-0.309732" z="-0.648122"/> +<v x="-0.627155" y="0.680624" z="0.378674"/> +<v x="0.763054" y="-0.417127" z="0.493667"/> +<v x="0.757256" y="0.293130" z="-0.583575"/> +<v x="-0.772790" y="0.387738" z="-0.502396"/> +<v x="-0.753380" y="-0.318552" z="0.575213"/> +<v x="0.036134" y="-0.238929" z="0.970336"/> +<v x="-0.919523" y="0.319285" z="0.229072"/> +<v x="0.026582" y="0.826716" z="-0.561937"/> +<v x="0.972259" y="0.194494" z="0.129765"/> +<v x="0.755760" y="-0.415784" z="0.505844"/> +<v x="0.749535" y="0.335917" z="-0.570360"/> +<v x="-0.753258" y="0.439467" z="-0.489334"/> +<v x="-0.747002" y="-0.312235" z="0.586901"/> +<v x="0.851619" y="-0.427381" z="-0.303446"/> +<v x="-0.035920" y="-0.884823" z="0.464492"/> +<v x="-0.044343" y="0.131321" z="-0.990326"/> +<v x="-0.929594" y="-0.304636" z="-0.207373"/> +<v x="0.025971" y="-0.354198" z="0.934782"/> +<v x="-0.951994" y="0.248299" z="0.178930"/> +<v x="0.016785" y="0.755852" z="-0.654500"/> +<v x="0.990631" y="0.114414" z="0.074190"/> +<v x="0.694052" y="-0.587176" z="-0.416486"/> +<v x="-0.058107" y="-0.982086" z="0.179205"/> +<v x="-0.065889" y="-0.191412" z="-0.979278"/> +<v x="-0.808313" y="-0.483474" z="-0.335917"/> +<v x="-0.411237" y="-0.870479" z="-0.270333"/> +<v x="0.256996" y="-0.916532" z="-0.306375"/> +<v x="0.254372" y="-0.601733" z="-0.757073"/> +<v x="-0.413862" y="-0.555681" z="-0.721030"/> +<v x="0.998596" y="0.023988" z="-0.046663"/> +<v x="-0.011994" y="-0.422193" z="0.906400"/> +<v x="-0.009735" y="0.456557" z="-0.889615"/> +<v x="-0.989685" y="0.133366" z="0.051943"/> +<v x="0.749443" y="0.301004" z="-0.589648"/> +<v x="-0.758965" y="0.404096" z="-0.510544"/> +<v x="0.763970" y="-0.398297" z="0.507614"/> +<v x="-0.754875" y="-0.298135" z="0.584155"/> +<v x="-0.757134" y="0.638478" z="-0.138066"/> +<v x="-0.703757" y="0.365337" z="-0.609272"/> +<v x="-0.746818" y="-0.027955" z="0.664418"/> +<v x="-0.080203" y="0.995788" z="-0.043733"/> +<v x="-0.390820" y="0.848537" z="0.356670"/> +<v x="-0.410871" y="0.755882" z="-0.509690"/> +<v x="0.409497" y="0.123722" z="-0.903867"/> +<v x="-0.350383" y="-0.052980" z="-0.935087"/> +<v x="-0.306192" y="0.127415" z="-0.943388"/> +<v x="0.069704" y="0.286813" z="-0.955412"/> +<v x="-0.004608" y="0.511826" z="-0.859035"/> +<v x="0.587634" y="-0.119419" z="-0.800226"/> +<v x="0.164617" y="-0.051546" z="-0.984985"/> +<v x="0.975402" y="-0.132115" z="-0.176336"/> +<v x="0.902249" y="-0.046175" z="-0.428694"/> +<v x="-0.012391" y="0.091952" z="-0.995666"/> +<v x="0.285165" y="0.035615" z="-0.957793"/> +<v x="0.763390" y="0.272713" z="-0.585528"/> +<v x="0.214301" y="0.047456" z="0.975585"/> +<v x="0.591723" y="-0.058962" z="0.803949"/> +<v x="0.004608" y="0.016846" z="0.999817"/> +<v x="0.002686" y="-0.283822" z="0.958861"/> +<v x="-0.180364" y="0.298685" z="0.937132"/> +<v x="-0.039064" y="0.636311" z="0.770409"/> +<v x="-0.158452" y="0.602405" z="0.782281"/> +<v x="0.943571" y="0.099490" z="0.315806"/> +<v x="0.717643" y="0.270638" z="-0.641621"/> +<v x="0.054872" y="0.366649" z="-0.928709"/> +<v x="0.647481" y="-0.037721" z="-0.761101"/> +<v x="0.241218" y="-0.084078" z="-0.966796"/> +<v x="0.917112" y="-0.114811" z="-0.381664"/> +<v x="0.914731" y="-0.150395" z="0.374981"/> +<v x="-0.007233" y="-0.094119" z="-0.995514"/> +<v x="0.370891" y="-0.121403" z="-0.920682"/> +<v x="0.000000" y="-0.451033" z="0.892483"/> +<v x="0.040925" y="-0.193762" z="0.980163"/> +<v x="0.993255" y="0.070559" z="-0.091739"/> +<v x="0.966430" y="0.056703" z="0.250557"/> +<v x="0.679067" y="0.107517" z="0.726127"/> +<v x="0.752678" y="-0.051393" z="0.656362"/> +<v x="0.983245" y="0.169408" z="-0.067141"/> +<v x="-0.007996" y="0.279061" z="0.960234"/> +<v x="0.362896" y="-0.021546" z="0.931547"/> +<v x="0.365459" y="0.918790" z="-0.149022"/> +<v x="-0.423383" y="0.000519" z="-0.905942"/> +<v x="-0.282937" y="-0.952025" z="0.116520"/> +<v x="0.181127" y="-0.823359" z="0.537797"/> +<v x="-0.258858" y="-0.819178" z="-0.511765"/> +<v x="0.365276" y="-0.918760" z="-0.149724"/> +<v x="0.909848" y="-0.244575" z="0.335093"/> +<v x="0.407910" y="-0.240211" z="-0.880825"/> +<v x="0.780145" y="0.539079" z="-0.317331"/> +<v x="0.575396" y="0.715537" z="0.396100"/> +<v x="0.119999" y="0.722800" z="-0.680532"/> +<v x="0.313242" y="0.023804" z="0.949339"/> +<v x="0.558946" y="0.814539" z="-0.154973"/> +<v x="0.266854" y="-0.110904" z="-0.957305"/> +<v x="-0.400616" y="-0.891201" z="0.212653"/> +<v x="0.595508" y="0.686239" z="0.417585"/> +<v x="0.204047" y="0.668111" z="-0.715506"/> +<v x="-0.502091" y="-0.748253" z="-0.433607"/> +<v x="-0.117466" y="-0.718589" z="0.685415"/> +<v x="0.526353" y="0.830226" z="-0.183294"/> +<v x="0.556536" y="0.695669" z="0.454146"/> +<v x="0.371441" y="0.899045" z="-0.231758"/> +<v x="-0.227668" y="-0.966430" z="0.118870"/> +<v x="-0.550645" y="-0.831935" z="0.067965"/> +<v x="-0.183050" y="-0.653493" z="0.734428"/> +<v x="-0.673238" y="0.132389" z="-0.727439"/> +<v x="0.359081" y="-0.273476" z="-0.892331"/> +<v x="0.080111" y="0.564379" z="-0.821589"/> +<v x="-0.557726" y="-0.407361" z="-0.723136"/> +<v x="-0.712821" y="0.219916" z="-0.665944"/> +<v x="-0.387158" y="0.861812" z="-0.327586"/> +<v x="-0.943876" y="-0.330271" z="-0.002594"/> +<v x="0.129063" y="-0.904233" z="-0.407025"/> +<v x="0.889309" y="0.295602" z="-0.348857"/> +<v x="-0.412275" y="0.905820" z="-0.097232"/> +<v x="-0.913999" y="-0.211371" z="-0.346202"/> +<v x="0.173406" y="-0.876461" z="-0.449141"/> +<v x="0.883297" y="0.378002" z="-0.277261"/> +<v x="0.913022" y="-0.371319" z="-0.168737"/> +<v x="0.461348" y="0.879635" z="-0.115482"/> +<v x="-0.607349" y="-0.765557" z="-0.212134"/> +<v x="-0.933622" y="0.347453" z="-0.087222"/> +<v x="0.602710" y="-0.076327" z="0.794275"/> +<v x="0.092349" y="0.995025" z="-0.036927"/> +<v x="-0.536302" y="-0.815607" z="0.217017"/> +<v x="-0.585681" y="0.090121" z="-0.805475"/> +<v x="0.140629" y="0.089236" z="0.986023"/> +<v x="0.000153" y="-0.813471" z="-0.581561"/> +<v x="0.404828" y="-0.813959" z="0.416547"/> +<v x="0.837367" y="0.481216" z="0.259224"/> +<v x="0.420576" y="0.481704" z="-0.768792"/> +<v x="-0.257393" y="0.960387" z="0.106510"/> +<v x="-0.803278" y="-0.499893" z="0.323710"/> +<v x="-0.873989" y="0.265938" z="-0.406659"/> +<v x="-0.344554" y="0.263344" z="0.901059"/> +<v x="-0.585101" y="0.649129" z="0.486038"/> +<v x="-0.814081" y="0.027497" z="0.580065"/> +<v x="-0.988189" y="0.027711" z="0.150639"/> +<v x="-0.758171" y="0.649342" z="0.059206"/> +<v x="0.418043" y="0.901181" z="-0.114475"/> +<v x="-0.326273" y="-0.938597" z="0.112156"/> +<v x="-0.332286" y="0.017090" z="-0.942991"/> +<v x="0.377239" y="-0.032441" z="0.925535"/> +<v x="-0.503769" y="-0.706809" z="-0.496567"/> +<v x="0.036409" y="0.711356" z="-0.701865"/> +<v x="0.511368" y="0.702658" z="0.494675"/> +<v x="-0.023957" y="-0.717002" z="0.696646"/> +<v x="0.848537" y="0.528489" z="0.025361"/> +<v x="-0.042268" y="-0.999084" z="0.002991"/> +<v x="0.188360" y="-0.035127" z="-0.981445"/> +<v x="0.420057" y="-0.101840" z="0.901730"/> +<v x="-0.400586" y="-0.678426" z="-0.615802"/> +<v x="0.202826" y="0.671346" z="-0.712821"/> +<v x="0.579821" y="0.572222" z="0.579913"/> +<v x="0.019898" y="-0.740013" z="0.672262"/> +<v x="0.916257" y="0.144963" z="-0.373394"/> +<v x="0.855373" y="0.120487" z="0.503769"/> +<v x="0.000275" y="-0.001251" z="-0.999969"/> +<v x="0.380261" y="0.026795" z="-0.924467"/> +<v x="0.229377" y="0.223395" z="-0.947325"/> +<v x="0.709464" y="0.275155" z="-0.648762"/> +<v x="0.316691" y="-0.947722" z="0.038667"/> +<v x="0.376049" y="-0.756249" z="0.535386"/> +<v x="0.280374" y="-0.860134" z="-0.426038"/> +<v x="0.719077" y="-0.694876" z="0.004883"/> +<v x="0.252327" y="-0.861385" z="0.440779"/> +<v x="0.159795" y="-0.892911" z="-0.420850"/> +<v x="0.069918" y="-0.577502" z="-0.813349"/> +<v x="0.073702" y="-0.650990" z="-0.755486"/> +<v x="-0.386120" y="-0.375530" z="-0.842524"/> +<v x="0.514512" y="-0.318644" z="-0.796045"/> +<v x="-0.118046" y="0.215247" z="-0.969390"/> +<v x="0.517655" y="0.225745" z="-0.825251"/> +<v x="0.315714" y="-0.076632" z="-0.945738"/> +<v x="0.680227" y="-0.066775" z="-0.729942"/> +<v x="0.000000" y="-0.145726" z="-0.989319"/> +<v x="0.000000" y="0.349467" z="-0.936918"/> +<v x="0.193670" y="0.466842" z="-0.862850"/> +<v x="0.812860" y="0.213599" z="-0.541826"/> +<v x="-0.047395" y="-0.549608" z="-0.834040"/> +<v x="0.262612" y="-0.497177" z="-0.826930"/> +<v x="0.533555" y="-0.335490" z="-0.776330"/> +<v x="0.000000" y="-0.425855" z="-0.904782"/> +<v x="-0.164678" y="-0.616718" z="-0.769738"/> +<v x="-0.215369" y="-0.134617" z="-0.967193"/> +<v x="0.355205" y="0.508499" z="-0.784356"/> +<v x="0.192633" y="-0.565203" z="-0.802118"/> +<v x="0.173650" y="0.230476" z="-0.957427"/> +<v x="0.030854" y="-0.384777" z="-0.922483"/> +<v x="0.000000" y="0.083224" z="0.996521"/> +<v x="-0.000122" y="0.075045" z="0.997162"/> +<v x="0.062136" y="-0.624317" z="0.778649"/> +<v x="-0.005829" y="0.147130" z="0.989074"/> +<v x="0.521378" y="-0.126896" z="0.843806"/> +<v x="0.384320" y="-0.323649" z="0.864589"/> +<v x="0.506119" y="0.053896" z="0.860744"/> +<v x="-0.014130" y="-0.168340" z="0.985595"/> +<v x="0.228858" y="0.096927" z="0.968596"/> +<v x="0.733329" y="0.669912" z="-0.115696"/> +<v x="0.154576" y="-0.469466" z="0.869289"/> +<v x="0.136601" y="-0.385693" z="-0.912442"/> +<v x="-0.002869" y="-0.544237" z="-0.838893"/> +<v x="0.002777" y="-0.599963" z="0.799982"/> +<v x="0.345836" y="0.570788" z="0.744682"/> +<v x="0.102390" y="0.687155" z="-0.719230"/> +<v x="-0.068819" y="-0.119633" z="-0.990417"/> +<v x="0.777215" y="-0.094424" z="-0.622059"/> +<v x="0.844844" y="-0.102969" z="0.524979"/> +<v x="0.069552" y="-0.092807" z="0.993225"/> +<v x="-0.093783" y="0.903256" z="-0.418683"/> +<v x="-0.251167" y="0.107578" z="-0.961913"/> +<v x="-0.246895" y="-0.239204" z="-0.939024"/> +<v x="-0.118259" y="0.945280" z="-0.303964"/> +<v x="-0.206488" y="-0.124943" z="-0.970428"/> +<v x="-0.263192" y="0.950530" z="-0.164830"/> +<v x="0.072817" y="-0.190924" z="-0.978881"/> +<v x="0.201422" y="0.164678" z="-0.965545"/> +<v x="-0.080050" y="0.605213" z="-0.792016"/> +<v x="-0.192724" y="-0.144871" z="-0.970489"/> +<v x="-0.214637" y="0.568041" z="-0.794488"/> +<v x="-0.254219" y="-0.016816" z="-0.966979"/> +<v x="0.079165" y="-0.031007" z="-0.996368"/> +<v x="-0.307291" y="0.391125" z="-0.867489"/> +<v x="0.593005" y="-0.057802" z="-0.803095"/> +<v x="0.537553" y="-0.086764" z="-0.838740"/> +<v x="0.489914" y="0.671621" z="-0.555742"/> +<v x="0.182470" y="0.214881" z="-0.959410"/> +<v x="0.186132" y="0.923429" z="-0.335582"/> +<v x="0.319773" y="0.938566" z="0.129551"/> +<v x="0.087161" y="0.912076" z="0.400616"/> +<v x="0.288522" y="0.950652" z="-0.113834"/> +<v x="-0.254067" y="-0.038118" z="-0.966399"/> +<v x="0.077364" y="-0.952574" z="0.294259"/> +<v x="0.254128" y="-0.034089" z="0.966552"/> +<v x="0.550829" y="0.064669" z="0.832087"/> +<v x="0.494522" y="-0.673910" z="0.548814"/> +<v x="0.862148" y="-0.104190" z="0.495804"/> +<v x="0.237892" y="-0.352947" z="0.904874"/> +<v x="0.419996" y="-0.582965" z="-0.695486"/> +<v x="0.214087" y="-0.104923" z="-0.971129"/> +<v x="-0.218024" y="0.261177" z="-0.940306"/> +<v x="-0.094028" y="-0.399823" z="-0.911740"/> +<v x="0.460860" y="0.073275" z="0.884426"/> +<v x="0.250710" y="0.166509" z="0.953612"/> +<v x="0.806574" y="0.045228" z="0.589373"/> +<v x="0.848537" y="-0.341319" z="0.404309"/> +<v x="0.997833" y="-0.037049" z="0.054353"/> +<v x="0.905332" y="0.158300" z="-0.394086"/> +<v x="0.993896" y="0.097018" z="0.052431"/> +<v x="0.450819" y="-0.054262" z="0.890927"/> +<v x="0.999573" y="0.006897" z="-0.028352"/> +<v x="0.768578" y="0.018433" z="0.639485"/> +<v x="0.720481" y="0.126347" z="-0.681814"/> +<v x="0.254250" y="-0.010559" z="0.967071"/> +<v x="0.487167" y="0.106876" z="0.866726"/> +<v x="0.916929" y="0.398053" z="0.027375"/> +<v x="0.803827" y="-0.050203" z="0.592700"/> +<v x="0.568163" y="-0.010346" z="-0.822810"/> +<v x="0.253639" y="-0.069491" z="0.964782"/> +<v x="-0.170812" y="0.740684" z="-0.649739"/> +<v x="-0.328288" y="0.540849" z="-0.774377"/> +<v x="0.375622" y="0.219062" z="-0.900479"/> +<v x="-0.107913" y="0.245949" z="-0.963225"/> +<v x="0.511795" y="0.290689" z="-0.808405"/> +<v x="0.760216" y="0.115055" z="-0.639363"/> +<v x="0.483749" y="0.609333" z="-0.628224"/> +<v x="-0.125309" y="0.242683" z="-0.961943"/> +<v x="-0.251747" y="0.289834" z="-0.923338"/> +<v x="0.586138" y="-0.161077" z="0.794000"/> +<v x="0.974303" y="-0.223609" z="0.026673"/> +<v x="0.761773" y="-0.044618" z="-0.646290"/> +<v x="0.937498" y="-0.082522" z="-0.338054"/> +<v x="0.011628" y="-0.998932" z="0.044282"/> +<v x="0.593432" y="-0.766686" z="-0.244911"/> +<v x="0.237983" y="-0.966887" z="-0.092044"/> +<v x="0.898831" y="-0.397809" z="-0.183905"/> +<v x="-0.188971" y="0.802393" z="-0.566057"/> +<v x="-0.213111" y="0.549303" z="-0.807947"/> +<v x="-0.913358" y="-0.353862" z="0.201270"/> +<v x="-0.786126" y="-0.269326" z="-0.556261"/> +<v x="-0.855342" y="-0.399335" z="0.329997"/> +<v x="-0.346049" y="-0.156835" z="0.924986"/> +<v x="0.145207" y="0.277322" z="0.949705"/> +<v x="0.390057" y="-0.407178" z="0.825831"/> +<v x="0.682363" y="0.361675" z="0.635243"/> +<v x="0.793603" y="0.539720" z="-0.280770"/> +<v x="0.881283" y="0.468245" z="-0.063448"/> +<v x="0.349010" y="0.355388" z="-0.867092"/> +<v x="-0.203070" y="-0.226539" z="-0.952574"/> +<v x="-0.408307" y="0.532670" z="-0.741295"/> +<v x="-0.743675" y="-0.554613" z="-0.373272"/> +<v x="0.329661" y="-0.937895" z="-0.107883"/> +<v x="0.704215" y="0.034852" z="-0.709098"/> +<v x="-0.400647" y="0.520493" z="-0.753990"/> +<v x="-0.884091" y="0.379559" z="-0.272561"/> +<v x="-0.181433" y="-0.857845" z="0.480789"/> +<v x="0.198096" y="0.858760" z="-0.472457"/> +<v x="0.882748" y="-0.391919" z="0.259072"/> +<v x="-0.756371" y="0.609790" z="0.236671"/> +<v x="-0.685659" y="0.185675" z="-0.703818"/> +<v x="-0.653127" y="-0.723808" z="-0.222388"/> +<v x="-0.629383" y="-0.298898" z="0.717277"/> +<v x="-0.014588" y="0.376293" z="0.926359"/> +<v x="0.082980" y="-0.864315" z="0.495987"/> +<v x="0.690207" y="-0.184057" z="0.699789"/> +<v x="0.657552" y="0.719443" z="0.223640"/> +<v x="0.758599" y="-0.602985" z="-0.246773"/> +<v x="0.626484" y="0.297830" z="-0.720237"/> +<v x="-0.068819" y="0.865566" z="-0.495987"/> +<v x="0.012635" y="-0.376934" z="-0.926145"/> +<v x="0.524735" y="-0.067812" z="-0.848537"/> +<v x="-0.127201" y="0.016480" z="0.991729"/> +<v x="0.424879" y="0.358562" z="0.831172"/> +<v x="0.609821" y="0.105808" z="0.785424"/> +<v x="0.992218" y="-0.124058" z="0.009583"/> +<v x="0.999847" y="0.008393" z="0.013916"/> +<v x="0.619800" y="0.467330" z="-0.630390"/> +<v x="0.752434" y="-0.149236" z="-0.641499"/> +<v x="0.248543" y="0.064638" z="0.966430"/> +<v x="0.355602" y="-0.284799" z="0.890164"/> +<v x="-0.776330" y="0.112064" z="-0.620258"/> +<v x="-0.997345" y="0.072481" z="0.006592"/> +<v x="-0.253365" y="0.082583" z="-0.963805"/> +<v x="-0.413465" y="0.073366" z="-0.907529"/> +<v x="-0.382000" y="0.177313" z="-0.906980"/> +<v x="-0.781823" y="0.092044" z="-0.616627"/> +<v x="-0.651997" y="0.663594" z="-0.366741"/> +<v x="-0.942930" y="0.105380" z="-0.315775"/> +<v x="-0.251991" y="0.134007" z="-0.958373"/> +<v x="-0.463759" y="0.281381" z="-0.840083"/> +<v x="-0.040101" y="0.490158" z="-0.870663"/> +<v x="0.063326" y="0.954711" z="0.290597"/> +<v x="0.046022" y="0.983459" z="0.175146"/> +<v x="-0.237526" y="0.355815" z="-0.903836"/> +<v x="-0.236763" y="0.022065" z="-0.971313"/> +<v x="-0.931394" y="0.232307" z="-0.280160"/> +<v x="-0.862758" y="0.446089" z="-0.237892"/> +<v x="-0.040651" y="-0.987121" z="-0.154668"/> +<v x="0.551408" y="-0.830042" z="-0.083224"/> +<v x="-0.144871" y="-0.821772" z="-0.551042"/> +<v x="0.714682" y="-0.693930" z="0.087436"/> +<v x="0.260170" y="-0.964690" z="-0.040254"/> +<v x="0.186316" y="-0.945585" z="-0.266701"/> +<v x="0.843349" y="-0.330424" z="-0.423688"/> +<v x="-0.419294" y="0.467513" z="-0.778191"/> +<v x="-0.803156" y="0.593554" z="-0.050905"/> +<v x="-0.119755" y="0.846736" z="0.518296"/> +<v x="-0.733329" y="0.517472" z="0.440870"/> +<v x="-0.161321" y="0.934233" z="-0.318003"/> +<v x="0.559954" y="0.726371" z="0.398480"/> +<v x="0.570757" y="0.815455" z="-0.095981"/> +<v x="0.568072" y="0.448286" z="-0.690115"/> +<v x="-0.723075" y="0.239753" z="-0.647786"/> +<v x="-0.758660" y="0.138218" z="0.636616"/> +<v x="-0.980316" y="-0.197394" z="0.000824"/> +<v x="0.990600" y="0.120914" z="-0.063753"/> +<v x="0.715720" y="0.376354" z="0.588244"/> +<v x="-0.007813" y="0.245277" z="0.969390"/> +<v x="0.991943" y="0.124454" z="0.022675"/> +<v x="0.126011" y="-0.875149" z="-0.467116"/> +<v x="-0.977172" y="-0.193579" z="0.087252"/> +<v x="-0.085940" y="0.342112" z="-0.935697"/> +<v x="-0.636708" y="-0.497299" z="-0.589282"/> +<v x="0.721793" y="-0.277871" z="-0.633839"/> +<v x="0.135350" y="-0.915098" z="-0.379772"/> +<v x="-0.505844" y="-0.862239" z="-0.024934"/> +<v x="-0.785302" y="0.505814" z="-0.356945"/> +<v x="0.748650" y="-0.659627" z="-0.066073"/> +<v x="0.561876" y="0.723411" z="-0.401135"/> +<v x="-0.756371" y="0.044832" z="0.652577"/> +<v x="-0.747703" y="-0.309488" z="-0.587451"/> +<v x="0.767968" y="-0.064669" z="-0.637165"/> +<v x="0.743950" y="0.287149" z="0.603351"/> +<v x="-0.066561" y="0.577410" z="0.813715"/> +<v x="0.883755" y="0.454878" z="-0.109714"/> +<v x="-0.052339" y="0.122990" z="-0.990997"/> +<v x="-0.987060" y="0.152715" z="-0.048372"/> +<v x="-0.752159" y="0.057314" z="0.656453"/> +<v x="-0.740989" y="-0.270028" z="-0.614795"/> +<v x="0.747459" y="-0.029603" z="-0.663625"/> +<v x="0.736259" y="0.297708" z="0.607624"/> +<v x="-0.809351" y="-0.570421" z="0.139744"/> +<v x="0.067324" y="-0.219214" z="0.973327"/> +<v x="0.082430" y="-0.661733" z="-0.745140"/> +<v x="0.954863" y="-0.285470" z="0.081912"/> +<v x="-0.048158" y="0.476516" z="0.877834"/> +<v x="0.925993" y="0.367443" z="-0.086459"/> +<v x="-0.031648" y="-0.006867" z="-0.999451"/> +<v x="-0.998108" y="0.056673" z="-0.023377"/> +<v x="-0.637806" y="-0.747276" z="0.186346"/> +<v x="0.108982" y="-0.500351" z="0.858913"/> +<v x="0.121494" y="-0.854762" z="-0.504562"/> +<v x="0.850978" y="-0.506821" z="0.137516"/> +<v x="0.474929" y="-0.738701" z="0.478256"/> +<v x="-0.186926" y="-0.845607" z="0.499954"/> +<v x="-0.182257" y="-0.982696" z="-0.032380"/> +<v x="0.479598" y="-0.875790" z="-0.054109"/> +<v x="-0.996734" y="-0.079745" z="-0.011414"/> +<v x="-0.039857" y="0.350017" z="0.935881"/> +<v x="0.043825" y="-0.270241" z="-0.961760"/> +<v x="0.978057" y="0.200720" z="-0.055696"/> +<v x="-0.744407" y="-0.281716" z="-0.605335"/> +<v x="0.757744" y="-0.044954" z="-0.650960"/> +<v x="-0.761406" y="0.055422" z="0.645863"/> +<v x="0.745140" y="0.296609" z="0.597278"/> +<v x="0.681356" y="0.725242" z="-0.098697"/> +<v x="0.762505" y="-0.021699" z="-0.646565"/> +<v x="0.658956" y="0.494339" z="0.566881"/> +<v x="0.248390" y="0.906156" z="0.342235"/> +<v x="0.266366" y="0.848384" z="-0.457411"/> +<v x="-0.479019" y="-0.007050" z="-0.877773"/> +<v x="0.329112" y="0.033753" z="-0.943663"/> +<v x="0.274270" y="0.259041" z="-0.926084"/> +<v x="-0.091708" y="0.265419" z="-0.959746"/> +<v x="-0.596912" y="-0.131169" z="-0.791467"/> +<v x="-0.188452" y="-0.055239" z="-0.980499"/> +<v x="-0.963164" y="-0.222144" z="-0.151402"/> +<v x="-0.894620" y="-0.121006" z="-0.430036"/> +<v x="-0.313273" y="0.021180" z="-0.949400"/> +<v x="-0.789850" y="-0.092868" z="-0.606189"/> +<v x="-0.169866" y="0.015809" z="0.985321"/> +<v x="-0.513901" y="-0.166112" z="0.841578"/> +<v x="0.014801" y="-0.283303" z="0.958892"/> +<v x="0.157903" y="0.327067" z="0.931700"/> +<v x="0.080630" y="0.622883" z="0.778130"/> +<v x="-0.935911" y="0.164464" z="0.311411"/> +<v x="-0.698355" y="-0.216620" z="-0.682119"/> +<v x="-0.017090" y="-0.071780" z="-0.997253"/> +<v x="-0.668538" y="-0.102969" z="-0.736503"/> +<v x="-0.246590" y="-0.093478" z="-0.964599"/> +<v x="-0.910520" y="-0.207251" z="-0.357707"/> +<v x="-0.873104" y="-0.274117" z="0.403119"/> +<v x="-0.380169" y="-0.140751" z="-0.914121"/> +<v x="-0.034669" y="-0.200262" z="0.979095"/> +<v x="-0.991028" y="-0.096774" z="-0.092105"/> +<v x="-0.935759" y="-0.125217" z="0.329600"/> +<v x="-0.572161" y="0.137913" z="0.808435"/> +<v x="-0.796869" y="0.260475" z="0.545091"/> +<v x="-0.993255" y="0.008820" z="-0.115360"/> +<v x="-0.117466" y="0.610889" z="0.782922"/> +<v x="0.066561" y="-0.066469" z="0.995544"/> +<v x="0.731284" y="0.681417" z="-0.029511"/> +<v x="-0.064333" y="-0.002411" z="-0.997894"/> +<v x="-0.791955" y="-0.609302" z="0.038789"/> +<v x="-0.715293" y="-0.336497" z="0.612445"/> +<v x="-0.800501" y="-0.294931" z="-0.521653"/> +<v x="-0.994629" y="0.060854" z="0.083499"/> +<v x="-0.415174" y="0.561449" z="0.715812"/> +<v x="-0.516526" y="0.616108" z="-0.594623"/> +<v x="0.225410" y="0.973907" z="0.025727"/> +<v x="0.591876" y="0.576037" z="0.563768"/> +<v x="0.508316" y="0.616199" z="-0.601520"/> +<v x="0.126591" y="-0.100558" z="0.986816"/> +<v x="0.578356" y="0.813776" z="0.056734"/> +<v x="-0.371288" y="0.569628" z="-0.733238"/> +<v x="-0.682760" y="-0.727317" z="0.069338"/> +<v x="0.563097" y="0.574816" z="0.593677"/> +<v x="0.426557" y="0.683340" z="-0.592486"/> +<v x="-0.650502" y="-0.509629" z="-0.563066"/> +<v x="-0.504105" y="-0.614551" z="0.606769"/> +<v x="0.596454" y="0.802454" z="0.016053"/> +<v x="0.590136" y="0.530229" z="0.608722"/> +<v x="0.694388" y="0.712638" z="-0.099765"/> +<v x="-0.820399" y="-0.567888" z="0.066103"/> +<v x="-0.614551" y="-0.778069" z="-0.129948"/> +<v x="-0.414869" y="-0.667959" z="0.617786"/> +<v x="0.164953" y="-0.241890" z="-0.956145"/> +<v x="-0.536515" y="0.567705" z="-0.624348"/> +<v x="0.342204" y="0.584521" z="-0.735649"/> +<v x="-0.373241" y="-0.327311" z="-0.868038"/> +<v x="0.270547" y="-0.270486" z="-0.923917"/> +<v x="0.851039" y="0.090304" z="-0.517228"/> +<v x="-0.048280" y="-0.916379" z="-0.397320"/> +<v x="-0.967162" y="-0.033967" z="-0.251808"/> +<v x="-0.039918" y="0.997345" z="0.060579"/> +<v x="0.945799" y="-0.007508" z="-0.324625"/> +<v x="-0.014130" y="-0.714621" z="-0.699362"/> +<v x="-0.961882" y="0.029939" z="-0.271737"/> +<v x="0.053529" y="0.991668" z="0.116977"/> +<v x="-0.636586" y="0.720969" z="0.273690"/> +<v x="0.674581" y="0.736778" z="0.045137"/> +<v x="-0.592883" y="-0.693075" z="-0.409955"/> +<v x="0.568316" y="-0.645192" z="-0.510575"/> +<v x="-0.079226" y="0.174139" z="0.981506"/> +<v x="0.901395" y="0.429579" z="-0.054048"/> +<v x="-0.573168" y="-0.819361" z="0.008850"/> +<v x="0.085177" y="-0.150487" z="-0.984924"/> +<v x="0.243416" y="-0.240364" z="0.939634"/> +<v x="-0.881252" y="-0.044221" z="-0.470504"/> +<v x="-0.793085" y="-0.094272" z="0.601733"/> +<v x="0.271340" y="0.774773" z="0.571001"/> +<v x="0.180548" y="0.826350" z="-0.533372"/> +<v x="0.994903" y="0.062624" z="-0.078860"/> +<v x="-0.180670" y="-0.983032" z="-0.031037"/> +<v x="0.409986" y="-0.495956" z="-0.765435"/> +<v x="0.525498" y="-0.561541" z="0.639119"/> +<v x="0.870296" y="-0.472854" z="0.137669"/> +<v x="0.369091" y="-0.915555" z="0.159581"/> +<v x="0.331156" y="-0.894009" z="-0.301675"/> +<v x="0.832606" y="-0.451430" z="-0.320841"/> +<v x="0.757653" y="0.652516" z="-0.012177"/> +<v x="-0.770531" y="-0.636494" z="0.033479"/> +<v x="-0.122471" y="0.088870" z="-0.988464"/> +<v x="0.093997" y="-0.045991" z="0.994507"/> +<v x="-0.630818" y="-0.474013" z="-0.614246"/> +<v x="0.518815" y="0.543382" z="-0.659932"/> +<v x="0.627949" y="0.476669" z="0.615131"/> +<v x="-0.522019" y="-0.536546" z="0.662984"/> +<v x="-0.394726" y="0.916715" z="0.061678"/> +<v x="-0.765831" y="-0.642415" z="0.027558"/> +<v x="-0.441969" y="0.220771" z="-0.869411"/> +<v x="-0.095126" y="-0.057649" z="0.993774"/> +<v x="-0.701621" y="-0.399426" z="-0.590014"/> +<v x="0.444227" y="0.629383" z="-0.637562"/> +<v x="0.623371" y="0.459059" z="0.632923"/> +<v x="-0.561876" y="-0.516007" z="0.646535"/> +<v x="-0.946287" y="0.043611" z="-0.320353"/> +<v x="-0.898892" y="0.035707" z="0.436689"/> +<v x="-0.413129" y="0.011200" z="-0.910581"/> +<v x="-0.233345" y="0.224067" z="-0.946196"/> +<v x="-0.779382" y="0.254830" z="-0.572344"/> +<v x="-0.483902" y="-0.873989" z="0.044343"/> +<v x="-0.590014" y="-0.585009" z="0.556413"/> +<v x="-0.615772" y="-0.693319" z="-0.374279"/> +<v x="-0.661702" y="-0.749352" z="0.023743"/> +<v x="-0.299539" y="-0.850459" z="0.432356"/> +<v x="-0.237251" y="-0.872646" z="-0.426801"/> +<v x="-0.069063" y="-0.583728" z="-0.808985"/> +<v x="-0.228126" y="-0.618976" z="-0.751518"/> +<v x="0.386242" y="-0.375561" z="-0.842433"/> +<v x="-0.497024" y="-0.256111" z="-0.829066"/> +<v x="0.118076" y="0.215278" z="-0.969359"/> +<v x="-0.554643" y="0.221992" z="-0.801904"/> +<v x="-0.309671" y="-0.070040" z="-0.948241"/> +<v x="-0.771966" y="0.031129" z="-0.634877"/> +<v x="-0.195044" y="0.467879" z="-0.861965"/> +<v x="-0.885433" y="0.256172" z="-0.387738"/> +<v x="0.016755" y="-0.547472" z="-0.836634"/> +<v x="-0.427229" y="-0.474960" z="-0.769311"/> +<v x="-0.620655" y="-0.091067" z="-0.778741"/> +<v x="0.135411" y="-0.626484" z="-0.767541"/> +<v x="0.215552" y="-0.134678" z="-0.967132"/> +<v x="-0.364452" y="0.511612" z="-0.778069"/> +<v x="-0.239479" y="-0.578082" z="-0.780023"/> +<v x="-0.174078" y="0.230323" z="-0.957396"/> +<v x="-0.034791" y="-0.387982" z="-0.920988"/> +<v x="-0.061068" y="-0.619861" z="0.782281"/> +<v x="0.007263" y="0.147252" z="0.989044"/> +<v x="-0.443007" y="-0.077578" z="0.893124"/> +<v x="-0.422620" y="-0.304270" z="0.853664"/> +<v x="-0.564531" y="0.053285" z="0.823664"/> +<v x="0.012024" y="-0.169256" z="0.985473"/> +<v x="-0.258736" y="0.100192" z="0.960723"/> +<v x="-0.792138" y="0.604633" z="0.083193"/> +<v x="-0.136967" y="-0.439528" z="0.887692"/> +<v x="-0.164830" y="-0.438398" z="-0.883511"/> +<v x="-0.104587" y="0.605365" z="0.788995"/> +<v x="-0.307443" y="0.617420" z="-0.724021"/> +<v x="-0.825892" y="-0.242103" z="-0.509140"/> +<v x="-0.749046" y="-0.224616" z="0.623249"/> +<v x="-0.046175" y="0.949095" z="-0.311533"/> +<v x="-0.297494" y="-0.124943" z="-0.946501"/> +<v x="0.127110" y="0.955626" z="-0.265633"/> +<v x="-0.544877" y="-0.190924" z="-0.816462"/> +<v x="-0.649556" y="0.151067" z="-0.745140"/> +<v x="-0.312906" y="0.584765" z="-0.748375"/> +<v x="-0.309519" y="-0.144871" z="-0.939787"/> +<v x="-0.203864" y="0.568041" z="-0.797327"/> +<v x="-0.558977" y="-0.031007" z="-0.828578"/> +<v x="-0.159093" y="0.391125" z="-0.906461"/> +<v x="-0.911313" y="-0.057802" z="-0.407575"/> +<v x="-0.880551" y="-0.086764" z="-0.465865"/> +<v x="-0.715354" y="0.647694" z="-0.262185"/> +<v x="-0.635365" y="0.208838" z="-0.743400"/> +<v x="-0.320750" y="0.914151" z="-0.247749"/> +<v x="-0.233741" y="0.930357" z="0.282449"/> +<v x="-0.335307" y="0.941832" z="0.022431"/> +<v x="-0.070345" y="0.064669" z="0.995392"/> +<v x="-0.160649" y="-0.673910" z="0.721091"/> +<v x="-0.506790" y="-0.104190" z="0.855739"/> +<v x="-0.707755" y="-0.582965" z="-0.398938"/> +<v x="-0.664052" y="-0.104923" z="-0.740257"/> +<v x="-0.272622" y="0.261177" z="-0.925962"/> +<v x="-0.366558" y="-0.399823" z="-0.840083"/> +<v x="0.033723" y="0.073275" z="0.996734"/> +<v x="-0.412366" y="0.045228" z="0.909879"/> +<v x="-0.539933" y="-0.341319" z="0.769372"/> +<v x="-0.842036" y="-0.037049" z="0.538102"/> +<v x="-0.982086" y="0.158300" z="0.102145"/> +<v x="-0.839564" y="0.097018" z="0.534471"/> +<v x="0.045656" y="-0.054262" z="0.997467"/> +<v x="-0.884243" y="0.006897" z="0.466903"/> +<v x="-0.354656" y="0.018433" z="0.934782"/> +<v x="-0.962676" y="0.126347" z="-0.239265"/> +<v x="0.002106" y="0.106876" z="0.994263"/> +<v x="-0.784875" y="0.398053" z="0.474837"/> +<v x="-0.408368" y="-0.050203" z="0.911405"/> +<v x="-0.899411" y="-0.010346" z="-0.436933"/> +<v x="-0.095004" y="0.540849" z="-0.835688"/> +<v x="-0.769951" y="0.219062" z="-0.599292"/> +<v x="-0.379803" y="0.245949" z="-0.891751"/> +<v x="-0.843226" y="0.290689" z="-0.452132"/> +<v x="-0.976379" y="0.115055" z="-0.182775"/> +<v x="-0.730186" y="0.609333" z="-0.309061"/> +<v x="-0.363994" y="0.242683" z="-0.899197"/> +<v x="-0.234931" y="0.289834" z="-0.927763"/> +<v x="-0.119816" y="-0.161077" z="0.979614"/> +<v x="-0.835170" y="-0.223609" z="0.502426"/> +<v x="-0.981140" y="-0.044618" z="-0.188025"/> +<v x="-0.982513" y="-0.082522" z="0.166753"/> +<v x="-0.637165" y="-0.766686" z="0.078616"/> +<v x="-0.252480" y="-0.966887" z="0.036866"/> +<v x="-0.873043" y="-0.397809" z="0.281930"/> +<v x="-0.113865" y="0.802393" z="-0.585803"/> +<v x="-0.211829" y="0.549303" z="-0.808283"/> +<v x="0.894253" y="-0.353862" z="-0.273965"/> +<v x="0.410871" y="-0.269326" z="-0.870968"/> +<v x="0.907041" y="-0.399335" z="-0.133335"/> +<v x="0.756249" y="-0.156835" z="0.635151"/> +<v x="0.340648" y="0.277322" z="0.898343"/> +<v x="0.066530" y="-0.407178" z="0.910916"/> +<v x="-0.281686" y="0.361675" z="0.888699"/> +<v x="-0.829066" y="0.539720" z="0.145848"/> +<v x="-0.798547" y="0.468245" z="0.378185"/> +<v x="-0.730369" y="0.355388" z="-0.583270"/> +<v x="-0.291696" y="-0.226539" z="-0.929289"/> +<v x="-0.009064" y="0.532670" z="-0.846248"/> +<v x="0.463912" y="-0.554613" z="-0.690756"/> +<v x="-0.340098" y="-0.937895" z="0.068209"/> +<v x="-0.961913" y="0.034852" z="-0.271035"/> +<v x="-0.021973" y="0.520493" z="-0.853572"/> +<v x="0.635701" y="0.379559" z="-0.672140"/> +<v x="0.394452" y="-0.857845" z="0.329386"/> +<v x="-0.404889" y="0.858760" z="-0.313913"/> +<v x="-0.641163" y="-0.391919" z="0.659749"/> +<v x="0.649342" y="0.728782" z="0.217231"/> +<v x="0.620075" y="0.304361" z="-0.723075"/> +<v x="0.758782" y="-0.601825" z="-0.249031"/> +<v x="0.696219" y="-0.185705" z="0.693350"/> +<v x="-0.013062" y="0.376873" z="0.926145"/> +<v x="0.089236" y="-0.866970" z="0.490249"/> +<v x="-0.620075" y="-0.304361" z="0.723075"/> +<v x="-0.758782" y="0.601825" z="0.249031"/> +<v x="-0.649342" y="-0.728782" z="-0.217231"/> +<v x="-0.696219" y="0.185705" z="-0.693350"/> +<v x="-0.089236" y="0.866970" z="-0.490249"/> +<v x="0.013062" y="-0.376873" z="-0.926145"/> +<v x="-0.532151" y="-0.047823" z="-0.845271"/> +<v x="0.156957" y="0.027619" z="0.987213"/> +<v x="-0.380902" y="0.514450" z="0.768273"/> +<v x="-0.517289" y="-0.036256" z="0.855007"/> +<v x="-0.967681" y="-0.248848" z="0.040407"/> +<v x="-0.992737" y="-0.118442" z="0.019715"/> +<v x="-0.703574" y="0.474807" z="-0.528672"/> +<v x="-0.786523" y="0.268441" z="-0.556108"/> +<v x="-0.288644" y="0.046968" z="0.956267"/> +<v x="-0.293069" y="-0.334666" z="0.895566"/> +<v x="0.371685" y="0.111850" z="-0.921567"/> +<v x="0.871761" y="0.072390" z="-0.484542"/> +<v x="-0.086306" y="0.073183" z="-0.993561"/> +<v x="-0.112918" y="0.177465" z="-0.977599"/> +<v x="0.377483" y="0.092013" z="-0.921415"/> +<v x="0.387280" y="0.663594" z="-0.640004"/> +<v x="0.665670" y="0.105380" z="-0.738731"/> +<v x="-0.009400" y="0.281381" z="-0.959532"/> +<v x="-0.393292" y="0.490158" z="-0.777825"/> +<v x="0.087771" y="0.954711" z="0.284188"/> +<v x="-0.271554" y="0.022065" z="-0.962157"/> +<v x="0.673147" y="0.232307" z="-0.702017"/> +<v x="0.634327" y="0.446272" z="-0.631214"/> +<v x="-0.521043" y="-0.830042" z="0.198737"/> +<v x="-0.579241" y="-0.693930" z="0.427656"/> +<v x="-0.246345" y="-0.964690" z="0.092898"/> +<v x="-0.293405" y="-0.945585" z="-0.140568"/> +<v x="-0.942686" y="-0.330424" z="0.045869"/> +<v x="-0.017304" y="0.468062" z="-0.883511"/> +<v x="0.642537" y="0.166295" z="0.747978"/> +<v x="0.743980" y="0.536790" z="0.397870"/> +<v x="-0.616138" y="0.619007" z="0.486984"/> +<v x="-0.523301" y="0.240211" z="0.817560"/> +<v x="0.760491" y="-0.427931" z="0.488327"/> +<v x="0.810694" y="-0.071932" z="-0.581011"/> +<v x="-0.875820" y="0.023713" z="-0.481979"/> +<v x="-0.750328" y="-0.330454" z="0.572497"/> +<v x="0.579180" y="0.807947" z="-0.108310"/> +<v x="-0.492294" y="0.869839" z="-0.031678"/> +<v x="0.385357" y="-0.166601" z="-0.907590"/> +<v x="-0.525498" y="-0.115421" z="-0.842921"/> +<v x="0.748100" y="-0.096530" z="0.656484"/> +<v x="0.742576" y="0.586291" z="-0.323740"/> +<v x="-0.687613" y="0.681356" z="-0.250801"/> +<v x="-0.680135" y="-0.001434" z="0.733055"/> +<v x="0.752434" y="-0.218238" z="0.621448"/> +<v x="0.630848" y="-0.752831" z="0.187597"/> +<v x="0.746361" y="0.512406" z="-0.424635"/> +<v x="0.625294" y="-0.079562" z="-0.776299"/> +<v x="-0.710379" y="0.612812" z="-0.346080"/> +<v x="-0.709738" y="0.012421" z="-0.704306"/> +<v x="-0.704337" y="-0.117832" z="0.700003"/> +<v x="-0.704154" y="-0.660848" z="0.259590"/> +<v x="0.477767" y="-0.875637" z="-0.070467"/> +<v x="0.462020" y="-0.373760" z="-0.804224"/> +<v x="-0.597980" y="-0.801386" z="-0.012513"/> +<v x="-0.591906" y="-0.301279" z="-0.747551"/> +<v x="0.773553" y="-0.262520" z="0.576739"/> +<v x="0.723319" y="0.290353" z="-0.626453"/> +<v x="-0.754936" y="-0.201910" z="0.623890"/> +<v x="-0.735466" y="0.385937" z="-0.556841"/> +<v x="-0.626240" y="0.567064" z="0.534989"/> +<v x="-0.510178" y="0.368450" z="-0.777123"/> +<v x="0.859249" y="0.152806" z="-0.488144"/> +<v x="0.139927" y="0.113010" z="-0.983673"/> +<v x="0.857356" y="-0.129582" z="-0.498123"/> +<v x="0.333384" y="-0.090884" z="-0.938383"/> +<v x="0.899380" y="-0.039216" z="0.435347"/> +<v x="0.203436" y="0.301523" z="0.931486"/> +<v x="0.190985" y="-0.141270" z="0.971343"/> +<v x="0.961852" y="0.078677" z="0.261940"/> +<v x="0.715537" y="0.287576" z="-0.636586"/> +<v x="0.932371" y="0.009949" z="-0.361309"/> +<v x="0.379254" y="-0.077670" z="-0.921995"/> +<v x="0.710440" y="-0.102603" z="0.696219"/> +<v x="0.782067" y="0.212165" z="0.585925"/> +<v x="0.493851" y="0.749962" z="0.440046"/> +<v x="0.019593" y="0.761986" z="-0.647267"/> +<v x="-0.023164" y="-0.768517" z="0.639363"/> +<v x="-0.477401" y="-0.760460" z="-0.440168"/> +<v x="0.852840" y="0.503739" z="0.137455"/> +<v x="0.508621" y="0.509384" z="-0.694082"/> +<v x="0.472488" y="-0.843165" z="0.256447"/> +<v x="0.151402" y="-0.843165" z="-0.515824"/> +<v x="0.593616" y="0.681539" z="0.427839"/> +<v x="0.596606" y="0.628071" z="-0.499496"/> +<v x="-0.176702" y="-0.672811" z="0.718375"/> +<v x="-0.323649" y="-0.862392" z="-0.389233"/> +<v x="0.720725" y="0.611744" z="0.325968"/> +<v x="0.175848" y="0.836695" z="-0.518632"/> +<v x="0.141514" y="-0.787133" z="0.600299"/> +<v x="-0.506729" y="-0.813013" z="-0.286691"/> +<v x="0.552355" y="0.235359" z="-0.799646"/> +<v x="-0.025544" y="-0.643055" z="-0.765374"/> +<v x="-0.408856" y="0.621723" z="-0.668050"/> +<v x="-0.789788" y="-0.149846" z="-0.594745"/> +<v x="-0.400189" y="0.909452" z="-0.112644"/> +<v x="-0.955443" y="-0.260933" z="-0.137730"/> +<v x="0.221564" y="-0.929136" z="-0.295907"/> +<v x="0.948576" y="0.299875" z="-0.101230"/> +<v x="0.259468" y="0.768273" z="0.585131"/> +<v x="-0.220985" y="0.768853" z="-0.599994"/> +<v x="-0.219306" y="-0.590075" z="0.776971"/> +<v x="-0.698660" y="-0.589496" z="-0.405347"/> +<v x="-0.232643" y="0.788446" z="0.569353"/> +<v x="-0.561541" y="0.790216" z="-0.245338"/> +<v x="-0.958678" y="-0.271096" z="-0.086215"/> +<v x="-0.628407" y="-0.273537" z="0.728172"/> +<v x="0.538896" y="0.665273" z="0.516678"/> +<v x="0.088870" y="0.697317" z="-0.711203"/> +<v x="-0.479843" y="-0.697348" z="-0.532365"/> +<v x="-0.012421" y="-0.725608" z="0.687979"/> +<v x="0.716117" y="0.249245" z="0.651936"/> +<v x="0.749321" y="0.364360" z="-0.552904"/> +<v x="0.670919" y="-0.278664" z="-0.687155"/> +<v x="0.183874" y="-0.757683" z="0.626118"/> +<v x="0.415265" y="0.315928" z="-0.853053"/> +<v x="0.224952" y="-0.898160" z="-0.377697"/> +<v x="0.399670" y="-0.699118" z="0.592822"/> +<v x="0.425520" y="-0.616962" z="-0.661977"/> +<v x="0.397595" y="-0.684835" z="0.610614"/> +<v x="0.303415" y="-0.341868" z="-0.889401"/> +<v x="0.694113" y="0.261299" z="-0.670736"/> +<v x="0.326548" y="0.229377" z="-0.916898"/> +<v x="0.039979" y="-0.589160" z="-0.807001"/> +<v x="0.116611" y="-0.659108" z="-0.742912"/> +<v x="-0.011933" y="0.246590" z="-0.969024"/> +<v x="-0.279824" y="-0.438459" z="-0.854060"/> +<v x="0.177160" y="0.110843" z="0.977905"/> +<v x="0.208167" y="-0.071383" z="0.975463"/> +<v x="0.493423" y="0.726768" z="-0.477798"/> +<v x="0.652028" y="0.678213" z="0.338847"/> +<v x="0.218329" y="0.636311" z="-0.739860"/> +<v x="0.130894" y="-0.090945" z="-0.987182"/> +<v x="-0.275796" y="0.931791" z="-0.235969"/> +<v x="0.063173" y="-0.128025" z="-0.989746"/> +<v x="-0.259865" y="0.464309" z="-0.846675"/> +<v x="0.154118" y="0.168493" z="-0.973571"/> +<v x="-0.058321" y="0.776513" z="-0.627369"/> +<v x="0.177587" y="0.186926" z="-0.966186"/> +<v x="0.111454" y="-0.348460" z="-0.930662"/> +<v x="0.843654" y="-0.012391" z="0.536699"/> +<v x="0.719901" y="-0.576525" z="0.386425"/> +<v x="0.773461" y="0.048524" z="0.631947"/> +<v x="0.931730" y="0.027589" z="-0.362011"/> +<v x="0.731773" y="0.323771" z="-0.599689"/> +<v x="0.786950" y="-0.025452" z="0.616474"/> +<v x="0.724815" y="0.004273" z="-0.688925"/> +<v x="0.781762" y="0.126621" z="0.610523"/> +<v x="0.488693" y="0.343791" z="-0.801813"/> +<v x="0.307199" y="0.209540" z="-0.928281"/> +<v x="0.472640" y="0.582812" z="-0.660970"/> +<v x="0.866237" y="-0.199896" z="0.457869"/> +<v x="0.933805" y="-0.174047" z="-0.312479"/> +<v x="0.605914" y="-0.794427" z="-0.041383"/> +<v x="-0.690909" y="-0.404279" z="-0.599292"/> +<v x="-0.908567" y="0.136143" z="-0.394879"/> +<v x="-0.475539" y="-0.033509" z="0.879025"/> +<v x="-0.199500" y="-0.552995" z="0.808924"/> +<v x="0.331004" y="0.127384" z="-0.934965"/> +<v x="0.261238" y="0.738823" z="-0.621143"/> +<v x="0.625874" y="0.531022" z="0.571154"/> +<v x="0.824580" y="-0.065218" z="0.561907"/> +<v x="-0.834803" y="0.302164" z="-0.460158"/> +<v x="-0.179357" y="-0.971801" z="0.152867"/> +<v x="0.818964" y="-0.570849" z="-0.057894"/> +<v x="0.151555" y="0.724845" z="-0.672018"/> +<v x="-0.596149" y="0.668661" z="-0.444349"/> +<v x="-0.524094" y="-0.332255" z="-0.784143"/> +<v x="-0.546251" y="0.245064" z="0.800958"/> +<v x="-0.467605" y="-0.758934" z="0.453139"/> +<v x="0.475387" y="0.756218" z="-0.449538"/> +<v x="0.542772" y="-0.243751" z="-0.803705"/> +<v x="0.520371" y="0.334452" z="0.785699"/> +<v x="0.603870" y="-0.667776" z="0.435163"/> +<v x="0.985076" y="-0.125858" z="-0.117344"/> +<v x="-0.670614" y="0.292581" z="-0.681631"/> +<v x="-0.770928" y="0.064608" z="-0.633625"/> +<v x="-0.986572" y="0.063540" z="-0.150334"/> +<v x="-0.790490" y="0.289132" z="-0.539903"/> +<v x="-0.738639" y="0.454909" z="-0.497452"/> +<v x="0.532456" y="-0.741020" z="-0.409040"/> +<v x="0.500809" y="-0.859249" z="-0.104068"/> +<v x="-0.688040" y="0.632344" z="0.355937"/> +<v x="-0.785150" y="0.582293" z="-0.210730"/> +<v x="0.547014" y="0.797479" z="-0.254433"/> +<v x="0.475509" y="0.820276" z="0.317789"/> +<v x="-0.752495" y="0.036958" z="0.657521"/> +<v x="-0.793329" y="-0.557360" z="-0.244789"/> +<v x="0.911039" y="-0.282052" z="-0.300668"/> +<v x="0.743065" y="0.278512" z="0.608478"/> +<v x="-0.618946" y="0.284585" z="-0.732017"/> +<v x="0.449965" y="0.457259" z="-0.767083"/> +<v x="-0.345500" y="-0.889859" z="-0.297861"/> +<v x="0.588092" y="-0.739067" z="-0.328471"/> +<v x="-0.770409" y="0.378552" z="0.512955"/> +<v x="-0.758965" y="0.087710" z="-0.645192"/> +<v x="0.650014" y="0.315287" z="-0.691397"/> +<v x="0.643361" y="0.606922" z="0.466567"/> +<v x="-0.766076" y="0.273232" z="0.581744"/> +<v x="-0.592547" y="-0.393048" z="0.703085"/> +<v x="-0.755211" y="-0.044923" z="-0.653920"/> +<v x="-0.582537" y="-0.686239" z="-0.435499"/> +<v x="0.687643" y="0.188086" z="-0.701224"/> +<v x="0.739738" y="-0.472671" z="-0.478866"/> +<v x="0.676778" y="0.506272" z="0.534410"/> +<v x="0.729728" y="-0.179479" z="0.659719"/> +<v x="-0.418500" y="-0.658742" z="0.625202"/> +<v x="-0.408277" y="-0.882015" z="-0.235145"/> +<v x="0.643452" y="-0.487228" z="0.590381"/> +<v x="0.649068" y="-0.711234" z="-0.269814"/> +<v x="-0.777673" y="0.143376" z="0.612049"/> +<v x="-0.725211" y="-0.250160" z="-0.641438"/> +<v x="0.724815" y="0.373852" z="0.578600"/> +<v x="0.753746" y="-0.056368" z="-0.654714"/> +<v x="0.378918" y="0.779534" z="0.498733"/> +<v x="0.571215" y="0.361309" z="-0.736961"/> +<v x="-0.075411" y="0.927885" z="0.365093"/> +<v x="-0.041719" y="0.738914" z="-0.672475"/> +<v x="-0.873104" y="-0.064150" z="-0.483261"/> +<v x="-0.206458" y="0.117283" z="-0.971374"/> +<v x="-0.007691" y="0.295114" z="-0.955412"/> +<v x="-0.853175" y="-0.171514" z="-0.492569"/> +<v x="-0.350414" y="-0.096042" z="-0.931639"/> +<v x="-0.013123" y="-0.031861" z="-0.999390"/> +<v x="-0.857936" y="-0.202643" z="0.472030"/> +<v x="-0.173589" y="0.304971" z="0.936369"/> +<v x="-0.136540" y="-0.179601" z="0.974212"/> +<v x="-0.002533" y="0.245613" z="0.969359"/> +<v x="-0.001312" y="-0.309214" z="0.950987"/> +<v x="-0.947752" y="-0.022248" z="0.318125"/> +<v x="-0.704154" y="-0.175695" z="-0.687948"/> +<v x="-0.937162" y="-0.105716" z="-0.332469"/> +<v x="-0.394177" y="-0.100162" z="-0.913541"/> +<v x="-0.001160" y="-0.085635" z="-0.996307"/> +<v x="-0.696768" y="-0.193091" z="0.690786"/> +<v x="0.000000" y="-0.200171" z="0.979736"/> +<v x="-0.785974" y="0.380108" z="0.487564"/> +<v x="0.655721" y="0.500626" z="0.565111"/> +<v x="0.579760" y="0.530534" z="-0.618366"/> +<v x="-0.586505" y="-0.532640" z="0.610126"/> +<v x="-0.670186" y="-0.490066" z="-0.557329"/> +<v x="0.263680" y="0.843837" z="0.467330"/> +<v x="0.197089" y="0.881314" z="-0.429426"/> +<v x="-0.871578" y="0.017029" z="0.489914"/> +<v x="-0.937956" y="0.048830" z="-0.343242"/> +<v x="0.561266" y="0.567553" z="0.602344"/> +<v x="0.323313" y="0.919431" z="-0.223731"/> +<v x="-0.437971" y="-0.662740" z="0.607379"/> +<v x="-0.798395" y="-0.413434" z="-0.437727"/> +<v x="0.439863" y="0.692831" z="0.571368"/> +<v x="0.632405" y="0.638203" z="-0.438978"/> +<v x="-0.657643" y="-0.382855" z="0.648762"/> +<v x="-0.680441" y="-0.593677" z="-0.429518"/> +<v x="-0.093661" y="0.867916" z="-0.487777"/> +<v x="-0.751091" y="0.064180" z="-0.657033"/> +<v x="0.562944" y="0.125553" z="-0.816858"/> +<v x="-0.040986" y="-0.489334" z="-0.871120"/> +<v x="0.942717" y="0.010132" z="-0.333354"/> +<v x="-0.007172" y="-0.849330" z="-0.527787"/> +<v x="-0.993896" y="-0.007416" z="-0.110019"/> +<v x="-0.002472" y="0.951292" z="0.308237"/> +<v x="0.767327" y="0.249214" z="0.590808"/> +<v x="0.662648" y="0.308695" z="-0.682333"/> +<v x="-0.336650" y="-0.694357" z="0.636006"/> +<v x="-0.441084" y="-0.635029" z="-0.634144"/> +<v x="0.920286" y="-0.156896" z="0.358318"/> +<v x="0.848354" y="-0.116062" z="-0.516495"/> +<v x="-0.006287" y="-0.876278" z="-0.481704"/> +<v x="0.065615" y="-0.917142" z="0.393078"/> +<v x="0.644185" y="0.458205" z="0.612415"/> +<v x="0.510208" y="0.566759" z="-0.646840"/> +<v x="-0.662893" y="-0.440962" z="-0.605060"/> +<v x="-0.534928" y="-0.522385" z="0.663991"/> +<v x="-0.284677" y="0.295236" z="0.912015"/> +<v x="-0.591021" y="0.507981" z="-0.626576"/> +<v x="-0.706565" y="-0.010376" z="-0.707541"/> +<v x="-0.607196" y="-0.524461" z="0.596820"/> +<v x="0.000000" y="0.203467" z="-0.979064"/> +<v x="-0.466079" y="0.317820" z="-0.825648"/> +<v x="-0.394910" y="-0.834712" z="-0.383740"/> +<v x="-0.493118" y="-0.667043" z="0.558428"/> +<v x="-0.395734" y="-0.668874" z="-0.629231"/> +<v x="-0.395917" y="-0.699667" z="0.594684"/> +<v x="0.000000" y="-0.352886" z="-0.935636"/> +<v x="-0.299448" y="-0.340068" z="-0.891415"/> +<v x="-0.805322" y="0.251473" z="-0.536851"/> +<v x="0.000000" y="0.193701" z="-0.981048"/> +<v x="-0.327219" y="0.229347" z="-0.916684"/> +<v x="0.000000" y="-0.505509" z="-0.862789"/> +<v x="-0.135563" y="-0.581713" z="-0.801996"/> +<v x="-0.711905" y="-0.416913" z="-0.565111"/> +<v x="0.011933" y="0.246559" z="-0.969024"/> +<v x="0.279916" y="-0.438520" z="-0.853999"/> +<v x="-0.000061" y="0.139317" z="0.990234"/> +<v x="0.000092" y="-0.346995" z="0.937864"/> +<v x="-0.200110" y="0.107212" z="0.973876"/> +<v x="-0.231239" y="-0.065767" z="0.970641"/> +<v x="-0.023072" y="-0.386364" z="-0.922025"/> +<v x="0.024018" y="-0.405652" z="0.913694"/> +<v x="-0.659536" y="0.667257" z="-0.346019"/> +<v x="-0.527726" y="0.645619" z="0.551927"/> +<v x="-0.091708" y="0.597125" z="-0.796869"/> +<v x="0.098849" y="0.536088" z="0.838313"/> +<v x="-0.199225" y="0.585162" z="-0.786035"/> +<v x="-0.251045" y="-0.158910" z="-0.954833"/> +<v x="-0.094607" y="0.921018" z="-0.377789"/> +<v x="-0.252358" y="-0.122562" z="-0.959838"/> +<v x="-0.553606" y="0.614826" z="-0.561663"/> +<v x="-0.599536" y="-0.090945" z="-0.795129"/> +<v x="0.114261" y="0.937468" z="-0.328684"/> +<v x="-0.541795" y="-0.128025" z="-0.830653"/> +<v x="-0.211097" y="0.557421" z="-0.802911"/> +<v x="-0.190130" y="0.464309" z="-0.865017"/> +<v x="-0.613025" y="0.168493" z="-0.771844"/> +<v x="-0.277200" y="0.769250" z="-0.575671"/> +<v x="-0.244545" y="0.273751" z="-0.930174"/> +<v x="-0.231452" y="-0.414014" z="-0.880337"/> +<v x="0.252998" y="0.099307" z="0.962340"/> +<v x="0.177038" y="-0.717734" z="0.673421"/> +<v x="-0.629810" y="0.186926" z="-0.753899"/> +<v x="-0.554796" y="-0.348460" z="-0.755486"/> +<v x="-0.470595" y="-0.012391" z="0.882229"/> +<v x="-0.436720" y="-0.576525" z="0.690542"/> +<v x="0.253090" y="0.096561" z="0.962584"/> +<v x="-0.362621" y="0.048524" z="0.930662"/> +<v x="-0.989319" y="0.027589" z="0.143040"/> +<v x="-0.932096" y="0.323771" z="-0.162236"/> +<v x="0.253700" y="-0.065920" z="0.965026"/> +<v x="-0.381970" y="-0.025452" z="0.923795"/> +<v x="-0.969909" y="0.004273" z="-0.243324"/> +<v x="0.253121" y="0.095309" z="0.962706"/> +<v x="-0.380383" y="0.126621" z="0.916105"/> +<v x="-0.819880" y="0.343791" z="-0.457778"/> +<v x="-0.724021" y="0.209540" z="-0.657125"/> +<v x="-0.736625" y="0.582812" z="-0.342998"/> +<v x="0.251259" y="-0.153325" z="0.955687"/> +<v x="-0.529008" y="-0.199896" z="0.824732"/> +<v x="-0.966765" y="-0.174047" z="0.187201"/> +<v x="-0.016388" y="-0.997894" z="-0.062410"/> +<v x="-0.547929" y="-0.794427" z="0.261971"/> +<v x="0.306803" y="-0.404279" z="-0.861629"/> +<v x="0.596820" y="0.136143" z="-0.790704"/> +<v x="0.846400" y="-0.033509" z="0.531449"/> +<v x="0.571551" y="-0.552995" z="0.606189"/> +<v x="-0.748070" y="0.127384" z="-0.651265"/> +<v x="-0.532975" y="0.738823" z="-0.412336"/> +<v x="-0.264016" y="0.531022" z="0.805139"/> +<v x="-0.441572" y="-0.065218" z="0.894833"/> +<v x="0.500504" y="0.302164" z="-0.811243"/> +<v x="0.231361" y="-0.971801" z="0.044862"/> +<v x="-0.741539" y="-0.570849" z="0.352397"/> +<v x="-0.462478" y="0.724845" z="-0.510575"/> +<v x="0.458541" y="0.765130" z="-0.451949"/> +<v x="0.541398" y="-0.242409" z="-0.805048"/> +<v x="0.524827" y="0.338542" z="0.780969"/> +<v x="0.607715" y="-0.668996" z="0.427869"/> +<v x="-0.607715" y="0.668996" z="-0.427869"/> +<v x="-0.524827" y="-0.338542" z="-0.780969"/> +<v x="-0.541398" y="0.242409" z="0.805048"/> +<v x="-0.458541" y="-0.765130" z="0.451949"/> +<v x="-0.970977" y="-0.225623" z="-0.079196"/> +<v x="0.249672" y="0.292795" z="-0.922971"/> +<v x="0.359874" y="0.064425" z="-0.930754"/> +<v x="0.785058" y="0.063540" z="-0.616138"/> +<v x="-0.251503" y="0.144963" z="-0.956908"/> +<v x="-0.253212" y="0.091433" z="-0.963073"/> +<v x="0.422712" y="0.289132" z="-0.858882"/> +<v x="0.398450" y="0.454909" z="-0.796411"/> +<v x="-0.242286" y="0.303140" z="-0.921598"/> +<v x="0.008362" y="-0.999451" z="0.031831"/> +<v x="-0.664815" y="-0.741020" z="-0.094241"/> +<v x="-0.048341" y="-0.981750" z="-0.183874"/> +<v x="-0.487228" y="-0.859249" z="0.155675"/> +<!-- Flat normals begin here --> +<v x="0.222976" y="0.712765" z="0.665017"/> +<v x="0.201316" y="0.785888" z="0.584681"/> +<v x="-0.025115" y="0.799847" z="0.599679"/> +<v x="-0.047828" y="0.729442" z="0.682369"/> +<v x="0.151866" y="-0.986887" z="-0.054691"/> +<v x="-0.290397" y="-0.956409" z="-0.030843"/> +<v x="-0.183364" y="-0.916324" z="-0.355987"/> +<v x="0.017144" y="-0.930142" z="-0.366800"/> +<v x="0.373446" y="0.030126" z="0.927163"/> +<v x="-0.264456" y="0.073780" z="0.961571"/> +<v x="-0.320045" y="-0.137845" z="0.937321"/> +<v x="0.396645" y="-0.187233" z="0.898675"/> +<v x="0.391608" y="-0.560127" z="0.730001"/> +<v x="0.400908" y="-0.382867" z="0.832278"/> +<v x="-0.351155" y="-0.335197" z="0.874261"/> +<v x="-0.379271" y="-0.509045" z="0.772675"/> +<v x="0.401940" y="-0.543126" z="0.737196"/> +<v x="0.399931" y="-0.554516" z="0.729772"/> +<v x="-0.388625" y="-0.502002" z="0.772635"/> +<v x="-0.390244" y="-0.490006" z="0.779490"/> +<v x="-0.965725" y="0.199170" z="0.166454"/> +<v x="-0.994409" y="0.010517" z="-0.105074"/> +<v x="-0.961533" y="-0.095388" z="0.257596"/> +<v x="-0.925161" y="0.036378" z="0.377827"/> +<v x="0.994430" y="0.089449" z="0.055754"/> +<v x="0.906877" y="-0.260316" z="-0.331376"/> +<v x="0.724587" y="-0.149416" z="-0.672791"/> +<v x="0.930263" y="0.305358" z="-0.203391"/> +<v x="0.960962" y="-0.080054" z="0.264845"/> +<v x="0.965379" y="-0.216811" z="0.145042"/> +<v x="0.969853" y="-0.108456" z="-0.218227"/> +<v x="0.995549" y="0.081537" z="0.047255"/> +<v x="0.299849" y="0.642446" z="-0.705234"/> +<v x="0.197783" y="0.104937" z="-0.974613"/> +<v x="-0.318673" y="0.135194" z="-0.938174"/> +<v x="-0.319494" y="0.679240" z="-0.660725"/> +<v x="0.123168" y="-0.542451" z="-0.831009"/> +<v x="-0.294456" y="-0.518778" z="-0.802599"/> +<v x="-0.309258" y="-0.384751" z="-0.869670"/> +<v x="0.139573" y="-0.408697" z="-0.901935"/> +<v x="-0.017264" y="0.790029" z="0.612827"/> +<v x="0.195410" y="0.777366" z="0.597927"/> +<v x="0.200590" y="0.832591" z="0.516291"/> +<v x="-0.027024" y="0.845936" z="0.532599"/> +<v x="-0.965501" y="-0.158936" z="-0.206271"/> +<v x="-0.962586" y="0.197986" z="0.185014"/> +<v x="-0.909947" y="0.408314" z="-0.072637"/> +<v x="-0.824825" y="-0.064970" z="-0.561643"/> +<v x="-0.273008" y="0.925269" z="-0.263331"/> +<v x="0.366942" y="0.881504" z="-0.297161"/> +<v x="0.388615" y="0.781447" z="-0.488179"/> +<v x="-0.328073" y="0.830836" z="-0.449533"/> +<v x="-0.974592" y="0.164099" z="-0.152454"/> +<v x="-0.966201" y="0.210470" z="-0.148854"/> +<v x="-0.962833" y="-0.071710" z="0.260403"/> +<v x="-0.963114" y="-0.082490" z="0.256138"/> +<v x="0.367415" y="0.418886" z="-0.830386"/> +<v x="0.390626" y="0.506625" z="-0.768597"/> +<v x="-0.401822" y="0.557254" z="-0.726641"/> +<v x="-0.405183" y="0.466076" z="-0.786511"/> +<v x="0.967474" y="-0.204479" z="0.148939"/> +<v x="0.967650" y="-0.196495" z="0.158252"/> +<v x="0.964702" y="0.088962" z="-0.247861"/> +<v x="0.965608" y="0.045757" z="-0.255945"/> +<v x="0.968399" y="-0.154775" z="0.195569"/> +<v x="0.959902" y="-0.247693" z="0.131289"/> +<v x="0.957491" y="0.043219" z="-0.285208"/> +<v x="0.965993" y="0.135600" z="-0.220161"/> +<v x="0.389037" y="0.560730" z="-0.730911"/> +<v x="0.378845" y="0.461175" z="-0.802368"/> +<v x="-0.395884" y="0.514564" z="-0.760592"/> +<v x="-0.384657" y="0.614047" z="-0.689192"/> +<v x="-0.956328" y="0.268073" z="-0.116504"/> +<v x="-0.967553" y="0.175879" z="-0.181404"/> +<v x="-0.965142" y="-0.115033" z="0.235092"/> +<v x="-0.953921" y="-0.022302" z="0.299226"/> +<v x="0.387578" y="-0.592514" z="0.706194"/> +<v x="0.397755" y="-0.491100" z="0.774991"/> +<v x="-0.375938" y="-0.437782" z="0.816711"/> +<v x="-0.387150" y="-0.539126" z="0.747970"/> +<v x="0.850886" y="0.515566" z="0.100923"/> +<v x="0.852343" y="0.277674" z="0.443180"/> +<v x="0.929610" y="0.103489" z="0.353716"/> +<v x="0.927378" y="0.372771" z="-0.031812"/> +<v x="-0.754976" y="0.387039" z="0.529351"/> +<v x="-0.758340" y="0.624714" z="0.186155"/> +<v x="-0.865702" y="0.496337" z="0.064875"/> +<v x="-0.863471" y="0.227055" z="0.450404"/> +<v x="-0.405106" y="0.526363" z="-0.747550"/> +<v x="0.391884" y="0.471505" z="-0.790006"/> +<v x="0.385715" y="0.452605" z="-0.803973"/> +<v x="-0.400391" y="0.506449" z="-0.763673"/> +<v x="-0.295341" y="-0.359759" z="-0.885069"/> +<v x="0.146919" y="-0.390237" z="-0.908917"/> +<v x="0.014943" y="-0.664461" z="-0.747173"/> +<v x="-0.185567" y="-0.650643" z="-0.736361"/> +<v x="0.505983" y="-0.608083" z="-0.611732"/> +<v x="0.507418" y="-0.780904" z="-0.364302"/> +<v x="0.180240" y="-0.842851" z="-0.507065"/> +<v x="0.179597" y="-0.765220" z="-0.618210"/> +<v x="-0.645506" y="-0.701454" z="-0.302134"/> +<v x="-0.646938" y="-0.528631" z="-0.549563"/> +<v x="-0.347698" y="-0.728883" z="-0.589777"/> +<v x="-0.347055" y="-0.806514" z="-0.478632"/> +<v x="-0.382848" y="0.391706" z="-0.836657"/> +<v x="0.367270" y="0.336562" z="-0.867087"/> +<v x="0.365929" y="0.321691" z="-0.873276"/> +<v x="-0.298286" y="0.357251" z="-0.885097"/> +<v x="0.963763" y="0.068938" z="-0.257698"/> +<v x="0.966819" y="-0.204296" z="0.153373"/> +<v x="0.969393" y="-0.175485" z="0.171703"/> +<v x="0.962875" y="0.080702" z="-0.257601"/> +<v x="-0.963905" y="-0.070499" z="0.256743"/> +<v x="-0.967089" y="0.201897" z="-0.154841"/> +<v x="-0.964255" y="0.211796" z="-0.159230"/> +<v x="-0.961616" y="-0.051602" z="0.269503"/> +<v x="0.403014" y="-0.543578" z="0.736276"/> +<v x="-0.393344" y="-0.488354" z="0.778968"/> +<v x="-0.390111" y="-0.462380" z="0.796253"/> +<v x="0.394080" y="-0.508182" z="0.765801"/> +<v x="-0.947024" y="0.069396" z="0.313575"/> +<v x="-0.947517" y="0.257262" z="-0.189811"/> +<v x="-0.923884" y="0.297180" z="-0.241088"/> +<v x="-0.948344" y="0.219772" z="0.228786"/> +<v x="-0.486977" y="0.868904" z="0.088652"/> +<v x="-0.369330" y="0.881345" z="-0.294664"/> +<v x="-0.360985" y="0.899170" z="-0.247353"/> +<v x="-0.302457" y="0.948591" z="0.093246"/> +<v x="-0.530957" y="0.215267" z="-0.819600"/> +<v x="-0.558831" y="-0.446761" z="-0.698651"/> +<v x="-0.373889" y="0.337456" z="-0.863904"/> +<v x="0.073439" y="0.433640" z="-0.898088"/> +<v x="0.006560" y="0.416170" z="-0.909263"/> +<v x="-0.023328" y="0.576173" z="-0.816994"/> +<v x="0.981268" y="0.022071" z="-0.191377"/> +<v x="0.998024" y="0.055359" z="0.029712"/> +<v x="0.997376" y="-0.044903" z="0.056794"/> +<v x="0.988538" y="-0.091318" z="-0.120223"/> +<v x="0.971143" y="-0.097913" z="-0.217474"/> +<v x="0.029244" y="0.174355" z="-0.984248"/> +<v x="0.147056" y="0.140730" z="-0.979066"/> +<v x="0.212355" y="-0.029395" z="-0.976750"/> +<v x="0.063734" y="0.017388" z="-0.997815"/> +<v x="0.393504" y="0.087596" z="-0.915140"/> +<v x="0.646634" y="-0.067730" z="-0.759787"/> +<v x="0.399179" y="-0.080648" z="-0.913319"/> +<v x="-0.042353" y="-0.066900" z="0.996860"/> +<v x="-0.208727" y="0.060304" z="0.976113"/> +<v x="-0.130415" y="-0.077238" z="0.988446"/> +<v x="0.953191" y="0.142536" z="-0.266666"/> +<v x="0.972323" y="0.008834" z="0.233472"/> +<v x="0.974605" y="0.098845" z="0.200935"/> +<v x="0.940341" y="0.171708" z="-0.293726"/> +<v x="-0.141373" y="0.367860" z="-0.919072"/> +<v x="0.412340" y="0.341368" z="-0.844656"/> +<v x="0.558514" y="0.293638" z="-0.775782"/> +<v x="0.070988" y="0.159332" z="-0.984670"/> +<v x="0.104656" y="-0.078164" z="-0.991432"/> +<v x="0.280095" y="-0.116572" z="-0.952868"/> +<v x="0.322941" y="-0.119090" z="-0.938896"/> +<v x="0.141914" y="-0.103313" z="-0.984473"/> +<v x="0.439861" y="-0.136630" z="-0.887612"/> +<v x="0.768027" y="-0.164766" z="-0.618860"/> +<v x="0.826843" y="-0.064447" z="-0.558728"/> +<v x="0.437065" y="-0.112434" z="-0.892375"/> +<v x="0.795679" y="-0.079835" z="0.600435"/> +<v x="0.407648" y="-0.129220" z="0.903950"/> +<v x="0.690782" y="-0.178286" z="0.700738"/> +<v x="-0.232486" y="0.116010" z="0.965656"/> +<v x="-0.023643" y="-0.042736" z="0.998807"/> +<v x="0.001606" y="0.194231" z="0.980954"/> +<v x="0.940150" y="0.204861" z="-0.272303"/> +<v x="0.976085" y="0.181279" z="0.119982"/> +<v x="0.996979" y="0.063117" z="0.045262"/> +<v x="0.962170" y="0.156184" z="-0.223240"/> +<v x="-0.365057" y="-0.100517" z="0.925543"/> +<v x="0.241278" y="-0.055446" z="0.968871"/> +<v x="0.353239" y="-0.276555" z="0.893722"/> +<v x="-0.390082" y="-0.291271" z="0.873497"/> +<v x="-0.170318" y="-0.946971" z="0.272466"/> +<v x="-0.313411" y="-0.946674" z="-0.074711"/> +<v x="-0.044627" y="-0.977292" z="-0.207145"/> +<v x="0.117074" y="-0.977361" z="0.176235"/> +<v x="0.702207" y="-0.711679" z="-0.020429"/> +<v x="0.514854" y="-0.713343" z="-0.475465"/> +<v x="0.778882" y="0.121980" z="-0.615194"/> +<v x="0.987687" y="0.117714" z="-0.103041"/> +<v x="0.538253" y="0.842416" z="0.024878"/> +<v x="0.363666" y="0.845984" z="-0.389946"/> +<v x="0.157724" y="0.956938" z="-0.243707"/> +<v x="0.288896" y="0.955312" z="0.062587"/> +<v x="0.208113" y="-0.488125" z="0.847598"/> +<v x="0.510151" y="-0.640462" z="0.574068"/> +<v x="0.771714" y="0.363842" z="0.521610"/> +<v x="0.460566" y="0.479191" z="0.747165"/> +<v x="-0.053494" y="-0.638158" z="-0.768045"/> +<v x="-0.462764" y="-0.476039" z="-0.747821"/> +<v x="-0.217316" y="0.492745" z="-0.842601"/> +<v x="0.171718" y="0.376368" z="-0.910418"/> +<v x="0.539146" y="0.841028" z="-0.044647"/> +<v x="0.411133" y="0.846719" z="-0.337693"/> +<v x="0.549917" y="0.745783" z="-0.376030"/> +<v x="0.605358" y="0.795820" z="-0.014601"/> +<v x="-0.206250" y="0.474193" z="-0.855922"/> +<v x="-0.564614" y="-0.407220" z="-0.717902"/> +<v x="-0.433762" y="-0.322289" z="-0.841416"/> +<v x="-0.059277" y="0.319822" z="-0.945622"/> +<v x="0.123421" y="-0.434229" z="0.892307"/> +<v x="0.494510" y="0.446045" z="0.745992"/> +<v x="0.504421" y="0.405622" z="0.762254"/> +<v x="0.054856" y="-0.368899" z="0.927849"/> +<v x="-0.385629" y="-0.921057" z="-0.054269"/> +<v x="-0.239699" y="-0.919334" z="0.312040"/> +<v x="-0.351896" y="-0.863061" z="0.362346"/> +<v x="-0.395274" y="-0.918499" z="-0.010886"/> +<v x="0.532214" y="0.845973" z="0.032839"/> +<v x="0.516165" y="0.813697" z="-0.267340"/> +<v x="0.253823" y="0.940796" z="-0.224671"/> +<v x="0.500703" y="0.864370" z="0.046488"/> +<v x="-0.435555" y="-0.895131" z="0.095045"/> +<v x="-0.396604" y="-0.833490" z="0.384707"/> +<v x="-0.406840" y="-0.821190" z="0.400160"/> +<v x="-0.621760" y="-0.774383" z="0.117236"/> +<v x="-0.983082" y="0.060523" z="-0.172876"/> +<v x="-0.781407" y="0.613349" z="-0.114921"/> +<v x="-0.708639" y="0.495394" z="-0.502409"/> +<v x="-0.875552" y="0.017795" z="-0.482796"/> +<v x="-0.304761" y="-0.314747" z="-0.898919"/> +<v x="-0.656148" y="-0.076287" z="-0.750766"/> +<v x="-0.458035" y="0.304919" z="-0.835002"/> +<v x="0.059300" y="0.154640" z="-0.986190"/> +<v x="-0.350871" y="-0.898413" z="-0.264092"/> +<v x="-0.813002" y="-0.523965" z="-0.253946"/> +<v x="-0.780218" y="-0.379379" z="-0.497324"/> +<v x="-0.404792" y="-0.702643" z="-0.585181"/> +<v x="0.123791" y="0.984964" z="-0.120507"/> +<v x="0.736906" y="0.666339" z="-0.113853"/> +<v x="0.596058" y="0.597493" z="-0.536393"/> +<v x="-0.066142" y="0.848262" z="-0.525431"/> +<v x="0.987332" y="-0.115483" z="-0.108810"/> +<v x="0.752247" y="-0.632308" z="-0.185230"/> +<v x="0.484162" y="-0.655500" z="-0.579574"/> +<v x="0.856509" y="-0.080832" z="-0.509763"/> +<v x="0.837572" y="-0.020289" z="-0.545950"/> +<v x="0.496130" y="-0.437320" z="-0.750071"/> +<v x="0.758353" y="-0.581339" z="-0.294866"/> +<v x="0.995354" y="-0.069629" z="-0.066502"/> +<v x="0.108529" y="0.985092" z="-0.133471"/> +<v x="0.632319" y="0.715032" z="-0.298164"/> +<v x="0.746085" y="0.661084" z="-0.079531"/> +<v x="0.090836" y="0.988023" z="-0.124737"/> +<v x="-0.359685" y="-0.930047" z="-0.075101"/> +<v x="-0.732807" y="-0.671560" z="0.109547"/> +<v x="-0.806045" y="-0.583592" z="-0.098543"/> +<v x="-0.300329" y="-0.929562" z="-0.213814"/> +<v x="-0.993369" y="0.110550" z="-0.031570"/> +<v x="-0.835552" y="0.547024" z="-0.051167"/> +<v x="-0.791317" y="0.610798" z="-0.027265"/> +<v x="-0.997334" y="0.069731" z="-0.021526"/> +<v x="0.071429" y="-0.351696" z="0.933385"/> +<v x="0.485648" y="0.392665" z="0.780999"/> +<v x="0.481281" y="0.394311" z="0.782871"/> +<v x="0.077796" y="-0.345579" z="0.935159"/> +<v x="0.006913" y="-0.974267" z="-0.225292"/> +<v x="0.161520" y="-0.974454" z="0.156045"/> +<v x="0.139534" y="-0.975719" z="0.168829"/> +<v x="-0.017769" y="-0.975528" z="-0.219156"/> +<v x="0.608342" y="-0.530811" z="0.590051"/> +<v x="0.843433" y="0.163137" z="0.511867"/> +<v x="0.825527" y="0.178811" z="0.535287"/> +<v x="0.588094" y="-0.525271" z="0.615008"/> +<v x="0.248882" y="0.163860" z="-0.954572"/> +<v x="0.025487" y="-0.530103" z="-0.847550"/> +<v x="-0.006424" y="-0.524550" z="-0.851355"/> +<v x="0.219730" y="0.179546" z="-0.958896"/> +<v x="0.710418" y="0.701483" z="-0.056816"/> +<v x="0.549639" y="0.701680" z="-0.453367"/> +<v x="0.530230" y="0.719213" z="-0.448986"/> +<v x="0.693440" y="0.719017" z="-0.046427"/> +<v x="-0.682347" y="0.160411" z="0.713211"/> +<v x="-0.555657" y="0.507017" z="0.658923"/> +<v x="-0.704145" y="0.459931" z="0.540965"/> +<v x="-0.778398" y="0.260937" z="0.570971"/> +<v x="-0.199691" y="0.382006" z="-0.902327"/> +<v x="-0.484286" y="-0.375184" z="-0.790382"/> +<v x="-0.474693" y="-0.363295" z="-0.801675"/> +<v x="-0.185558" y="0.383709" z="-0.904619"/> +<v x="-0.945680" y="-0.223360" z="0.236220"/> +<v x="-0.843252" y="-0.223482" z="0.488858"/> +<v x="-0.891251" y="0.028937" z="0.452586"/> +<v x="-0.954781" y="0.029014" z="0.295892"/> +<v x="-0.857470" y="0.507382" z="-0.085494"/> +<v x="-0.986315" y="0.160777" z="-0.036521"/> +<v x="-0.956155" y="0.261153" z="0.132537"/> +<v x="-0.881903" y="0.460146" z="0.102529"/> +<v x="-0.461961" y="0.822440" z="0.331939"/> +<v x="-0.562409" y="0.822562" z="0.084188"/> +<v x="-0.715946" y="0.669083" z="0.199374"/> +<v x="-0.652415" y="0.669007" z="0.356068"/> +<v x="-0.129989" y="0.372081" z="-0.919053"/> +<v x="-0.425013" y="-0.308348" z="-0.851050"/> +<v x="-0.252041" y="-0.154606" z="-0.955287"/> +<v x="-0.070476" y="0.286628" z="-0.955446"/> +<v x="0.426263" y="0.899969" z="0.091407"/> +<v x="0.247716" y="0.900863" z="-0.356486"/> +<v x="0.272391" y="0.894573" z="-0.354319"/> +<v x="0.444338" y="0.890137" z="0.101092"/> +<v x="0.200689" y="-0.382439" z="0.901923"/> +<v x="0.483224" y="0.375645" z="0.790813"/> +<v x="0.485704" y="0.362799" z="0.795279"/> +<v x="0.199145" y="-0.390377" z="0.898859"/> +<v x="-0.428371" y="-0.899054" z="-0.090552"/> +<v x="-0.245658" y="-0.901757" z="0.355650"/> +<v x="-0.241851" y="-0.906028" z="0.347305"/> +<v x="-0.422922" y="-0.900188" z="-0.103916"/> +<v x="0.519235" y="0.840582" z="0.154327"/> +<v x="0.378669" y="0.860395" z="-0.341073"/> +<v x="0.529046" y="0.814733" z="-0.237319"/> +<v x="0.598081" y="0.755716" z="0.266819"/> +<v x="0.202747" y="-0.406776" z="0.890745"/> +<v x="0.495449" y="0.314084" z="0.809865"/> +<v x="0.482886" y="0.183529" z="0.856235"/> +<v x="0.223940" y="-0.420413" z="0.879263"/> +<v x="-0.391014" y="-0.907547" z="-0.153190"/> +<v x="-0.211355" y="-0.918958" z="0.332935"/> +<v x="-0.153360" y="-0.939064" z="0.307635"/> +<v x="-0.314726" y="-0.930261" z="-0.188577"/> +<v x="-0.408609" y="-0.568847" z="-0.713759"/> +<v x="-0.125086" y="-0.620700" z="-0.774006"/> +<v x="-0.050053" y="-0.449783" z="-0.891734"/> +<v x="-0.248213" y="-0.391214" z="-0.886195"/> +<v x="0.962876" y="0.221563" z="-0.154205"/> +<v x="0.987143" y="0.098883" z="-0.125581"/> +<v x="0.977181" y="0.133203" z="0.165454"/> +<v x="0.966940" y="0.210932" z="0.143298"/> +<v x="0.314818" y="0.092355" z="-0.944648"/> +<v x="0.147986" y="0.060966" z="-0.987109"/> +<v x="0.157376" y="-0.060721" z="-0.985670"/> +<v x="0.333640" y="-0.049469" z="-0.941402"/> +<v x="0.415240" y="-0.023395" z="-0.909411"/> +<v x="0.819160" y="0.057172" z="-0.570708"/> +<v x="0.781488" y="0.159920" z="-0.603078"/> +<v x="0.457539" y="0.105158" z="-0.882949"/> +<v x="0.147842" y="-0.969447" z="0.195742"/> +<v x="0.383882" y="-0.904846" z="0.184087"/> +<v x="0.476064" y="-0.862390" z="-0.172180"/> +<v x="0.214806" y="-0.930838" z="-0.295634"/> +<v x="0.251745" y="-0.941091" z="0.225770"/> +<v x="0.290772" y="-0.937339" z="0.191954"/> +<v x="0.310937" y="-0.936944" z="-0.159545"/> +<v x="0.139523" y="-0.980568" z="-0.137911"/> +<v x="-0.001704" y="-0.541126" z="-0.840940"/> +<v x="0.022547" y="-0.780604" z="-0.624619"/> +<v x="0.139342" y="-0.680745" z="-0.719146"/> +<v x="0.009962" y="-0.538494" z="-0.842570"/> +<v x="0.154726" y="-0.782550" z="-0.603056"/> +<v x="0.121925" y="-0.500540" z="-0.857085"/> +<v x="0.297512" y="-0.628461" z="-0.718696"/> +<v x="0.422656" y="-0.206735" z="-0.882396"/> +<v x="0.383575" y="0.062711" z="-0.921378"/> +<v x="0.624782" y="0.065410" z="-0.778054"/> +<v x="0.628988" y="-0.221503" z="-0.745191"/> +<v x="-0.441148" y="-0.282192" z="-0.851913"/> +<v x="-0.299394" y="-0.038283" z="-0.953361"/> +<v x="-0.246841" y="0.055972" z="-0.967438"/> +<v x="-0.473382" y="-0.305720" z="-0.826102"/> +<v x="0.284159" y="0.409595" z="-0.866883"/> +<v x="0.069268" y="0.447217" z="-0.891739"/> +<v x="0.008323" y="0.354818" z="-0.934898"/> +<v x="0.112196" y="0.342401" z="-0.932831"/> +<v x="0.500364" y="0.561792" z="-0.658807"/> +<v x="0.645142" y="0.387850" z="-0.658304"/> +<v x="0.360107" y="0.390664" z="-0.847174"/> +<v x="0.842127" y="-0.058743" z="-0.536071"/> +<v x="0.717937" y="-0.226801" z="-0.658125"/> +<v x="0.724047" y="0.109526" z="-0.680999"/> +<v x="0.395092" y="-0.450741" z="-0.800459"/> +<v x="0.609012" y="-0.363153" z="-0.705142"/> +<v x="0.428471" y="-0.403420" z="-0.808495"/> +<v x="0.154668" y="-0.585622" z="-0.795691"/> +<v x="0.205049" y="-0.191420" z="-0.959851"/> +<v x="-0.045970" y="-0.239611" z="-0.969780"/> +<v x="0.054371" y="0.042984" z="-0.997595"/> +<v x="0.244641" y="0.052427" z="-0.968195"/> +<v x="-0.163777" y="-0.569590" z="-0.805446"/> +<v x="0.191560" y="-0.480926" z="-0.855579"/> +<v x="-0.024646" y="-0.689103" z="-0.724244"/> +<v x="0.122726" y="0.453052" z="-0.882996"/> +<v x="0.237529" y="0.597348" z="-0.766000"/> +<v x="0.299750" y="0.389243" z="-0.870999"/> +<v x="-0.043151" y="0.018604" z="0.998895"/> +<v x="-0.022200" y="0.147369" z="0.988832"/> +<v x="0.040474" y="0.115192" z="0.992518"/> +<v x="0.068259" y="0.049882" z="0.996420"/> +<v x="0.413818" y="-0.454656" z="0.788697"/> +<v x="0.420242" y="0.043424" z="0.906372"/> +<v x="0.402149" y="-0.385617" z="0.830407"/> +<v x="0.399907" y="-0.024528" z="0.916227"/> +<v x="0.591922" y="-0.241782" z="0.768876"/> +<v x="0.586337" y="-0.001944" z="0.810065"/> +<v x="0.406045" y="0.113097" z="0.906828"/> +<v x="0.280319" y="-0.666232" z="0.691054"/> +<v x="0.151690" y="-0.276056" z="0.949096"/> +<v x="-0.013941" y="-0.465591" z="0.884890"/> +<v x="0.137598" y="-0.780034" z="0.610421"/> +<v x="-0.179432" y="0.029304" z="0.983334"/> +<v x="0.037773" y="0.052736" z="0.997894"/> +<v x="0.051279" y="0.196577" z="0.979146"/> +<v x="-0.091638" y="0.130792" z="0.987166"/> +<v x="-0.028583" y="-0.210755" z="-0.977121"/> +<v x="0.364854" y="-0.233527" z="-0.901303"/> +<v x="0.415340" y="0.103414" z="-0.903769"/> +<v x="-0.096108" y="0.062604" z="-0.993400"/> +<v x="0.172107" y="-0.545853" z="-0.820014"/> +<v x="0.008985" y="-0.506688" z="-0.862083"/> +<v x="-0.002712" y="-0.564609" z="-0.825354"/> +<v x="-0.019257" y="-0.606872" z="0.794566"/> +<v x="0.029167" y="-0.597496" z="0.801341"/> +<v x="0.149281" y="-0.668199" z="0.728853"/> +<v x="0.407240" y="-0.304788" z="0.860964"/> +<v x="0.050706" y="-0.231008" z="0.971630"/> +<v x="0.096210" y="-0.042609" z="0.994449"/> +<v x="0.584403" y="0.009977" z="0.811402"/> +<v x="0.938025" y="-0.251057" z="-0.238913"/> +<v x="0.963824" y="-0.194531" z="0.182212"/> +<v x="0.987941" y="0.127159" z="0.088335"/> +<v x="0.956994" y="0.067689" z="-0.282099"/> +<v x="-0.059151" y="0.307203" z="-0.949804"/> +<v x="-0.116340" y="-0.042190" z="-0.992313"/> +<v x="-0.254994" y="-0.049300" z="-0.965685"/> +<v x="-0.231325" y="0.260798" z="-0.937269"/> +<v x="0.098430" y="0.960953" z="-0.258614"/> +<v x="0.069370" y="0.864192" z="-0.498357"/> +<v x="-0.088324" y="0.831326" z="-0.548723"/> +<v x="-0.022716" y="0.959413" z="-0.281090"/> +<v x="-0.155921" y="-0.229352" z="-0.960774"/> +<v x="-0.248583" y="-0.210476" z="-0.945466"/> +<v x="-0.246113" y="-0.267783" z="-0.931515"/> +<v x="-0.147666" y="-0.224095" z="-0.963315"/> +<v x="-0.254135" y="-0.033677" z="-0.966582"/> +<v x="-0.163042" y="-0.023503" z="-0.986339"/> +<v x="-0.153184" y="-0.016552" z="-0.988059"/> +<v x="-0.254280" y="-0.000000" z="-0.967131"/> +<v x="0.342338" y="-0.055458" z="-0.937939"/> +<v x="0.705692" y="-0.106228" z="-0.700510"/> +<v x="0.272421" y="-0.250993" z="-0.928865"/> +<v x="0.348140" y="-0.064907" z="-0.935193"/> +<v x="0.261439" y="0.007411" z="-0.965192"/> +<v x="0.696253" y="-0.011127" z="-0.717710"/> +<v x="-0.340257" y="0.433145" z="-0.834632"/> +<v x="-0.475389" y="0.525994" z="-0.705221"/> +<v x="-0.569431" y="0.375763" z="-0.731129"/> +<v x="0.474365" y="0.383339" z="-0.792483"/> +<v x="0.668259" y="0.272164" z="-0.692356"/> +<v x="0.752018" y="-0.045072" z="-0.657600"/> +<v x="0.420576" y="-0.030041" z="-0.906760"/> +<v x="0.162923" y="0.897654" z="0.409479"/> +<v x="0.221177" y="0.913843" z="0.340548"/> +<v x="0.337040" y="0.916410" z="0.215862"/> +<v x="0.315825" y="0.902991" z="0.291311"/> +<v x="0.285890" y="0.957051" z="-0.048178"/> +<v x="0.347059" y="0.910649" z="-0.224207"/> +<v x="0.309113" y="0.894565" z="-0.322805"/> +<v x="0.253639" y="0.957587" z="-0.136729"/> +<v x="0.228090" y="0.943611" z="-0.239944"/> +<v x="0.287593" y="0.957716" z="0.008431"/> +<v x="0.342784" y="0.937232" z="0.063999"/> +<v x="0.430258" y="-0.202923" z="0.879602"/> +<v x="0.403454" y="-0.478382" z="0.779984"/> +<v x="0.691694" y="-0.433587" z="0.577547"/> +<v x="0.724441" y="-0.217838" z="0.654012"/> +<v x="0.426162" y="0.031888" z="0.904085"/> +<v x="0.434404" y="-0.095215" z="0.895671"/> +<v x="0.717421" y="-0.119203" z="0.686366"/> +<v x="0.698016" y="-0.020079" z="0.715800"/> +<v x="-0.128844" y="0.054211" z="-0.990182"/> +<v x="-0.082182" y="-0.151088" z="-0.985098"/> +<v x="-0.240755" y="-0.139617" z="-0.960492"/> +<v x="-0.257229" y="0.073370" z="-0.963561"/> +<v x="0.279627" y="-0.858329" z="-0.430209"/> +<v x="0.018433" y="-0.934767" z="-0.354784"/> +<v x="-0.131700" y="-0.626897" z="-0.767891"/> +<v x="0.088462" y="-0.578371" z="-0.810963"/> +<v x="0.393978" y="0.168518" z="0.903539"/> +<v x="0.648027" y="0.076173" z="0.757799"/> +<v x="0.581123" y="0.084255" z="0.809442"/> +<v x="0.360947" y="0.161283" z="0.918534"/> +<v x="0.655690" y="0.031413" z="-0.754377"/> +<v x="0.645347" y="0.141575" z="-0.750656"/> +<v x="0.861340" y="0.001142" z="-0.508028"/> +<v x="0.871290" y="-0.075336" z="-0.484953"/> +<v x="0.916608" y="0.052801" z="0.396284"/> +<v x="0.929210" y="0.145334" z="-0.339775"/> +<v x="0.918912" y="0.080438" z="-0.386173"/> +<v x="0.937365" y="0.030258" z="0.347033"/> +<v x="0.343266" y="0.029039" z="0.938789"/> +<v x="0.537703" y="0.015582" z="0.842990"/> +<v x="0.537486" y="-0.028819" z="0.842780"/> +<v x="0.341870" y="-0.050038" z="0.938414"/> +<v x="0.954563" y="-0.042783" z="0.294921"/> +<v x="0.925809" y="-0.043701" z="-0.375457"/> +<v x="0.928461" y="-0.089982" z="-0.360366"/> +<v x="0.949223" y="-0.064008" z="0.308023"/> +<v x="0.354768" y="-0.081016" z="0.931438"/> +<v x="0.561685" y="-0.055250" z="0.825504"/> +<v x="0.587622" y="-0.030650" z="0.808555"/> +<v x="0.373002" y="-0.057187" z="0.926066"/> +<v x="0.981125" y="0.036512" z="-0.189898"/> +<v x="0.957876" y="0.138725" z="-0.251455"/> +<v x="0.922774" y="0.030783" z="0.384109"/> +<v x="0.944529" y="-0.014570" z="0.328105"/> +<v x="-0.279437" y="0.815194" z="-0.507321"/> +<v x="-0.244142" y="0.488223" z="-0.837874"/> +<v x="-0.234317" y="0.469677" z="-0.851175"/> +<v x="-0.101828" y="0.925577" z="-0.364608"/> +<v x="0.956024" y="-0.178578" z="0.232653"/> +<v x="0.972251" y="-0.167743" z="-0.163068"/> +<v x="0.980420" y="-0.081680" z="-0.179179"/> +<v x="0.956485" y="-0.089727" z="0.277644"/> +<v x="-0.421635" y="0.405488" z="-0.811051"/> +<v x="-0.024591" y="0.350990" z="-0.936056"/> +<v x="-0.014209" y="0.357104" z="-0.933957"/> +<v x="0.836787" y="0.143898" z="-0.528281"/> +<v x="0.638340" y="0.193118" z="-0.745136"/> +<v x="0.634630" y="0.372080" z="-0.677348"/> +<v x="0.762066" y="0.294063" z="-0.576873"/> +<v x="-0.393328" y="0.168353" z="-0.903853"/> +<v x="-0.437549" y="0.248412" z="-0.864200"/> +<v x="-0.211879" y="0.149250" z="-0.965832"/> +<v x="0.345539" y="-0.916857" z="-0.199940"/> +<v x="0.091149" y="-0.990226" z="-0.105567"/> +<v x="0.041119" y="-0.963537" z="-0.264397"/> +<v x="0.317004" y="-0.893074" z="-0.319260"/> +<v x="0.722879" y="-0.655637" z="0.218144"/> +<v x="0.695563" y="-0.590909" z="-0.408680"/> +<v x="0.927655" y="-0.270519" z="-0.257440"/> +<v x="0.947309" y="-0.268105" z="0.175287"/> +<v x="0.870140" y="-0.449735" z="0.201484"/> +<v x="0.733340" y="-0.661878" z="-0.155339"/> +<v x="0.763807" y="-0.592944" z="-0.254981"/> +<v x="0.949211" y="-0.275754" z="-0.151516"/> +<v x="0.291676" y="0.194805" z="-0.936470"/> +<v x="-0.534166" y="0.348888" z="-0.770029"/> +<v x="0.474604" y="0.444518" z="-0.759707"/> +<v x="-0.600393" y="0.797427" z="-0.060323"/> +<v x="-0.625141" y="0.750019" z="-0.216034"/> +<v x="0.098615" y="0.792262" z="-0.602159"/> +<v x="0.228703" y="0.851284" z="-0.472240"/> +<v x="-0.894042" y="-0.415410" z="-0.167700"/> +<v x="-0.949927" y="-0.247632" z="-0.190570"/> +<v x="-0.667842" y="-0.367918" z="0.647011"/> +<v x="-0.748255" y="-0.201523" z="0.632063"/> +<v x="-0.045243" y="0.175093" z="0.983512"/> +<v x="0.110962" y="-0.202243" z="0.973029"/> +<v x="0.488234" y="-0.006221" z="0.872691"/> +<v x="0.352830" y="0.377174" z="0.856301"/> +<v x="0.786516" y="0.589559" z="0.183882"/> +<v x="0.863930" y="0.436040" z="0.251981"/> +<v x="0.592552" y="0.580928" z="-0.558036"/> +<v x="0.676616" y="0.416701" z="-0.607084"/> +<v x="0.020661" y="-0.104196" z="-0.994342"/> +<v x="-0.130713" y="0.271927" z="-0.953399"/> +<v x="-0.507343" y="0.062313" z="-0.859488"/> +<v x="-0.383285" y="-0.319006" z="-0.866792"/> +<v x="0.622168" y="-0.657449" z="-0.425050"/> +<v x="-0.185262" y="-0.949319" z="-0.253914"/> +<v x="-0.672827" y="0.074969" z="-0.735992"/> +<v x="0.051335" y="0.395943" z="-0.916839"/> +<v x="-0.577701" y="-0.647666" z="0.496781"/> +<v x="-0.996910" y="0.068204" z="-0.038969"/> +<v x="-0.982803" y="0.041171" z="-0.180008"/> +<v x="-0.507128" y="-0.830063" z="0.231984"/> +<v x="-0.586177" y="0.697576" z="-0.412048"/> +<v x="-0.249811" y="0.848372" z="-0.466754"/> +<v x="-0.181847" y="0.864996" z="-0.467667"/> +<v x="-0.637829" y="0.667717" z="-0.383834"/> +<v x="0.593704" y="-0.577166" z="0.560709"/> +<v x="0.240957" y="-0.735276" z="0.633490"/> +<v x="0.173548" y="-0.920258" z="0.350722"/> +<v x="0.625875" y="-0.735235" z="0.260211"/> +<v x="0.522495" y="0.784441" z="-0.334144"/> +<v x="0.982218" y="0.088149" z="0.165765"/> +<v x="0.975845" y="-0.209020" z="-0.063535"/> +<v x="0.524550" y="0.703714" z="-0.479201"/> +<v x="-0.878805" y="0.375404" z="-0.294575"/> +<v x="-0.827780" y="-0.245228" z="-0.504621"/> +<v x="-0.798945" y="-0.522412" z="0.297946"/> +<v x="-0.848317" y="0.105294" z="0.518914"/> +<v x="-0.267705" y="-0.048327" z="0.962288"/> +<v x="-0.227210" y="-0.588497" z="0.775917"/> +<v x="0.346738" y="-0.537978" z="0.768344"/> +<v x="0.302253" y="0.003379" z="0.953222"/> +<v x="0.828385" y="0.252824" z="0.499859"/> +<v x="0.882916" y="-0.379615" z="0.276317"/> +<v x="0.842132" y="-0.103252" z="-0.529294"/> +<v x="0.796722" y="0.523016" z="-0.302803"/> +<v x="0.235443" y="0.587385" z="-0.774303"/> +<v x="0.267917" y="0.048124" z="-0.962240"/> +<v x="-0.309073" y="-0.000920" z="-0.951038"/> +<v x="-0.344462" y="0.536552" z="-0.770362"/> +<v x="-0.370737" y="0.623228" z="0.688579"/> +<v x="0.298779" y="0.674015" z="0.675600"/> +<v x="0.273162" y="0.953661" z="-0.126149"/> +<v x="-0.405926" y="0.904830" z="-0.128479"/> +<v x="0.419805" y="-0.899519" z="0.120955"/> +<v x="-0.256113" y="-0.957208" z="0.134754"/> +<v x="-0.296849" y="-0.676076" z="-0.674390"/> +<v x="0.377530" y="-0.620982" z="-0.686915"/> +<v x="0.706141" y="-0.162381" z="-0.689200"/> +<v x="0.185832" y="-0.114026" z="-0.975943"/> +<v x="0.774252" y="0.090037" z="-0.626440"/> +<v x="0.553315" y="0.167024" z="0.816055"/> +<v x="0.812147" y="0.080743" z="0.577839"/> +<v x="0.865381" y="0.197120" z="0.460716"/> +<v x="-0.161706" y="0.406190" z="0.899367"/> +<v x="-0.408745" y="0.695680" z="0.590726"/> +<v x="-0.301379" y="0.754983" z="0.582384"/> +<v x="-0.292138" y="0.405380" z="0.866212"/> +<v x="0.483235" y="0.102782" z="0.869436"/> +<v x="0.853297" y="-0.049996" z="0.519023"/> +<v x="0.746657" y="0.210773" z="0.630934"/> +<v x="0.256341" y="0.523646" z="0.812456"/> +<v x="-0.143985" y="0.720502" z="0.678340"/> +<v x="0.140798" y="0.558900" z="0.817195"/> +<v x="0.672355" y="0.024374" z="0.739828"/> +<v x="0.462371" y="0.115327" z="0.879155"/> +<v x="0.411642" y="-0.045416" z="0.910213"/> +<v x="0.979539" y="-0.176684" z="0.096360"/> +<v x="0.979446" y="-0.137382" z="0.147687"/> +<v x="0.986847" y="-0.061184" z="-0.149631"/> +<v x="0.967185" y="-0.153941" z="-0.202124"/> +<v x="0.980425" y="-0.160266" z="-0.114378"/> +<v x="0.723077" y="0.426581" z="-0.543312"/> +<v x="0.620118" y="0.473347" z="-0.625616"/> +<v x="0.836909" y="0.352784" z="-0.418481"/> +<v x="0.720817" y="-0.297314" z="-0.626121"/> +<v x="0.689648" y="-0.057213" z="-0.721881"/> +<v x="0.459877" y="-0.250626" z="-0.851880"/> +<v x="0.536097" y="0.049340" z="0.842713"/> +<v x="0.246463" y="0.029117" z="0.968715"/> +<v x="0.668816" y="0.044386" z="0.742102"/> +<v x="0.138229" y="-0.368168" z="0.919427"/> +<v x="-0.002514" y="-0.483600" z="0.875286"/> +<v x="-0.023006" y="-0.423764" z="0.905480"/> +<v x="0.130549" y="-0.405205" z="0.904857"/> +<v x="-0.892347" y="0.251002" z="-0.375119"/> +<v x="-0.957263" y="0.058291" z="-0.283285"/> +<v x="-0.947006" y="0.064229" z="0.314728"/> +<v x="-0.925034" y="0.299799" z="0.233307"/> +<v x="-0.297099" y="0.091000" z="-0.950500"/> +<v x="-0.311336" y="0.074199" z="-0.947399"/> +<v x="-0.483348" y="0.044588" z="-0.874292"/> +<v x="-0.468319" y="0.111715" z="-0.876469"/> +<v x="-0.936823" y="0.074294" z="-0.341823"/> +<v x="-0.943737" y="0.097134" z="-0.316110"/> +<v x="-0.920186" y="0.101246" z="0.378163"/> +<v x="-0.934773" y="0.077443" z="0.346703"/> +<v x="-0.335909" y="0.108093" z="-0.935671"/> +<v x="-0.364027" y="0.157961" z="-0.917896"/> +<v x="-0.562639" y="0.112027" z="-0.819077"/> +<v x="-0.518019" y="0.063908" z="-0.852978"/> +<v x="0.733126" y="0.513898" z="0.445460"/> +<v x="0.140856" y="0.787564" z="-0.599918"/> +<v x="0.146936" y="0.740277" z="-0.656049"/> +<v x="-0.806267" y="0.587816" z="-0.066374"/> +<v x="0.373521" y="0.246144" z="0.894369"/> +<v x="0.575196" y="0.268587" z="0.772665"/> +<v x="-0.550188" y="0.396616" z="-0.734839"/> +<v x="-0.348530" y="0.430470" z="-0.832600"/> +<v x="0.477351" y="0.054296" z="-0.877033"/> +<v x="0.231674" y="0.210450" z="-0.949757"/> +<v x="-0.509358" y="0.241526" z="-0.825966"/> +<v x="-0.799661" y="0.061314" z="-0.597313"/> +<v x="-0.217399" y="0.148168" z="-0.964771"/> +<v x="0.341394" y="-0.065682" z="-0.937623"/> +<v x="-0.750585" y="0.012677" z="-0.660653"/> +<v x="-0.218646" y="0.129328" z="-0.967196"/> +<v x="-0.287684" y="0.484630" z="-0.826058"/> +<v x="-0.283811" y="0.197297" z="-0.938363"/> +<v x="-0.425740" y="0.299496" z="-0.853843"/> +<v x="0.562219" y="-0.769578" z="0.302753"/> +<v x="0.271060" y="-0.880546" z="0.388800"/> +<v x="0.161143" y="-0.982153" z="0.096993"/> +<v x="0.427283" y="-0.902662" z="0.051283"/> +<v x="0.414179" y="-0.899766" z="0.137394"/> +<v x="0.154808" y="-0.983418" z="0.094467"/> +<v x="0.104078" y="-0.991970" z="-0.071852"/> +<v x="0.330391" y="-0.925206" z="-0.186645"/> +<v x="0.865410" y="-0.106805" z="-0.489549"/> +<v x="0.706210" y="-0.486503" z="-0.514376"/> +<v x="0.396944" y="-0.282359" z="-0.873332"/> +<v x="0.576149" y="-0.030270" z="-0.816784"/> +<v x="-0.566853" y="0.498774" z="-0.655669"/> +<v x="-0.562953" y="0.645118" z="-0.516629"/> +<v x="-0.355617" y="0.591993" z="-0.723243"/> +<v x="-0.296246" y="0.946091" z="-0.130955"/> +<v x="-0.025327" y="0.989850" z="-0.139839"/> +<v x="-0.047374" y="0.957712" z="-0.283803"/> +<v x="-0.274450" y="0.921034" z="-0.276357"/> +<v x="-0.089611" y="-0.692742" z="0.715596"/> +<v x="0.055845" y="-0.882352" z="0.467265"/> +<v x="0.254441" y="-0.850276" z="0.460750"/> +<v x="0.348430" y="-0.621990" z="0.701231"/> +<v x="-0.417383" y="0.694409" z="0.586164"/> +<v x="-0.426101" y="0.529853" z="0.733276"/> +<v x="0.283750" y="0.644508" z="0.709997"/> +<v x="0.214347" y="0.796445" z="0.565447"/> +<v x="-0.390260" y="0.162664" z="0.906222"/> +<v x="0.376326" y="0.286483" z="0.881082"/> +<v x="0.339056" y="0.480733" z="0.808664"/> +<v x="-0.420676" y="0.358021" z="0.833578"/> +<v x="-0.401216" y="0.175289" z="0.899055"/> +<v x="0.382275" y="0.301838" z="0.873361"/> +<v x="0.382280" y="0.289759" z="0.877440"/> +<v x="-0.397162" y="0.163864" z="0.903001"/> +<v x="0.943131" y="0.322677" z="-0.079902"/> +<v x="0.905845" y="0.381091" z="0.184970"/> +<v x="0.953474" y="0.209353" z="0.216932"/> +<v x="0.995913" y="0.000995" z="-0.090309"/> +<v x="-0.999446" y="0.018200" z="-0.027881"/> +<v x="-0.936257" y="-0.064705" z="-0.345306"/> +<v x="-0.705497" y="-0.685437" z="-0.180140"/> +<v x="-0.873846" y="-0.480995" z="0.070965"/> +<v x="-0.965975" y="0.078756" z="0.246355"/> +<v x="-0.999830" y="0.008851" z="-0.016184"/> +<v x="-0.949318" y="-0.313198" z="-0.026517"/> +<v x="-0.955032" y="-0.098908" z="0.279520"/> +<v x="-0.315299" y="-0.263307" z="-0.911732"/> +<v x="0.323214" y="-0.160174" z="-0.932672"/> +<v x="0.372076" y="-0.703845" z="-0.605113"/> +<v x="-0.169678" y="-0.791349" z="-0.587347"/> +<v x="-0.027955" y="-0.997804" z="0.060053"/> +<v x="-0.081231" y="-0.994058" z="-0.072464"/> +<v x="0.384934" y="-0.918763" z="-0.087752"/> +<v x="0.344116" y="-0.937707" z="0.047852"/> +<v x="-0.053861" y="0.933035" z="-0.355731"/> +<v x="-0.042111" y="0.874359" z="-0.483449"/> +<v x="-0.265970" y="0.838202" z="-0.476108"/> +<v x="-0.265139" y="0.898909" z="-0.348802"/> +<v x="0.983430" y="-0.181009" z="0.010057"/> +<v x="0.872247" y="-0.430601" z="-0.231881"/> +<v x="0.885037" y="0.229470" z="-0.405034"/> +<v x="0.939080" y="0.331310" z="-0.091453"/> +<v x="0.223573" y="0.432982" z="-0.873236"/> +<v x="0.298162" y="0.222675" z="-0.928178"/> +<v x="-0.411689" y="0.108019" z="-0.904900"/> +<v x="-0.403677" y="0.331669" z="-0.852666"/> +<v x="0.967467" y="0.067920" z="-0.243709"/> +<v x="0.953704" y="0.214714" z="0.210586"/> +<v x="0.952020" y="0.225211" z="0.207213"/> +<v x="0.955758" y="0.103697" z="-0.275269"/> +<v x="-0.357003" y="-0.388783" z="-0.849351"/> +<v x="0.406158" y="-0.265518" z="-0.874378"/> +<v x="0.396178" y="-0.146473" z="-0.906415"/> +<v x="-0.387035" y="-0.272977" z="-0.880731"/> +<v x="-0.957341" y="-0.093958" z="0.273257"/> +<v x="-0.953219" y="-0.242308" z="-0.180722"/> +<v x="-0.955396" y="-0.204992" z="-0.212595"/> +<v x="-0.959264" y="-0.083499" z="0.269891"/> +<v x="-0.965411" y="-0.024303" z="0.259598"/> +<v x="-0.961091" y="-0.150754" z="-0.231469"/> +<v x="-0.944036" y="-0.259309" z="-0.203849"/> +<v x="-0.948365" y="-0.132625" z="0.288124"/> +<v x="-0.387551" y="-0.219031" z="-0.895449"/> +<v x="0.378761" y="-0.095257" z="-0.920579"/> +<v x="0.399255" y="-0.213027" z="-0.891748"/> +<v x="-0.368082" y="-0.336967" z="-0.866585"/> +<v x="0.942889" y="0.156777" z="-0.293908"/> +<v x="0.938568" y="0.283227" z="0.197159"/> +<v x="0.958312" y="0.175340" z="0.225597"/> +<v x="0.962640" y="0.048657" z="-0.266376"/> +<v x="-0.383759" y="0.121886" z="0.915354"/> +<v x="0.383577" y="0.245825" z="0.890190"/> +<v x="0.363111" y="0.362786" z="0.858217"/> +<v x="-0.403201" y="0.239012" z="0.883347"/> +<v x="-0.881162" y="0.354008" z="-0.313420"/> +<v x="-0.945601" y="0.148612" z="-0.289400"/> +<v x="-0.949608" y="0.265876" z="0.165994"/> +<v x="-0.886228" y="0.454474" z="0.089741"/> +<v x="0.702153" y="0.711030" z="0.037653"/> +<v x="0.826365" y="0.552730" z="0.107754"/> +<v x="0.830371" y="0.435465" z="-0.347641"/> +<v x="0.703209" y="0.609915" z="-0.365378"/> +<v x="0.404995" y="-0.169908" z="-0.898393"/> +<v x="0.409705" y="-0.177837" z="-0.894716"/> +<v x="-0.379936" y="-0.296674" z="-0.876147"/> +<v x="-0.387504" y="-0.297912" z="-0.872404"/> +<v x="0.357308" y="-0.881813" z="-0.307793"/> +<v x="0.258393" y="-0.965972" z="0.011450"/> +<v x="0.059798" y="-0.998049" z="0.017960"/> +<v x="-0.080735" y="-0.952566" z="-0.293426"/> +<v x="-0.439514" y="-0.895435" z="0.070875"/> +<v x="-0.104337" y="-0.977951" z="0.180905"/> +<v x="-0.105492" y="-0.944144" z="0.312191"/> +<v x="-0.442086" y="-0.820176" z="0.363141"/> +<v x="0.699833" y="-0.635733" z="0.325694"/> +<v x="0.416769" y="-0.859791" z="0.295064"/> +<v x="0.417923" y="-0.893597" z="0.163781"/> +<v x="0.702406" y="-0.710991" z="0.033426"/> +<v x="0.447072" y="-0.226166" z="-0.865434"/> +<v x="0.429449" y="-0.190181" z="-0.882839"/> +<v x="-0.280546" y="-0.272726" z="-0.920279"/> +<v x="-0.324772" y="-0.291969" z="-0.899598"/> +<v x="-0.954146" y="-0.217043" z="-0.206149"/> +<v x="-0.955647" y="-0.200431" z="-0.215793"/> +<v x="-0.963162" y="-0.068105" z="0.260154"/> +<v x="-0.958725" y="-0.092222" z="0.268965"/> +<v x="0.954194" y="0.216752" z="0.206233"/> +<v x="0.950764" y="0.233995" z="0.203209"/> +<v x="0.957421" y="0.096838" z="-0.271968"/> +<v x="0.958776" y="0.091931" z="-0.268881"/> +<v x="-0.404536" y="0.167360" z="0.899078"/> +<v x="-0.410265" y="0.192024" z="0.891521"/> +<v x="0.377280" y="0.320028" z="0.869047"/> +<v x="0.387914" y="0.295357" z="0.873090"/> +<v x="0.923159" y="0.334314" z="0.189766"/> +<v x="0.904950" y="0.401482" z="0.140987"/> +<v x="0.938132" y="0.236858" z="-0.252599"/> +<v x="0.948564" y="0.127037" z="-0.289978"/> +<v x="0.327268" y="0.942315" z="0.070267"/> +<v x="0.131869" y="0.987749" z="0.083440"/> +<v x="0.221952" y="0.946227" z="-0.235352"/> +<v x="0.209606" y="0.939886" z="-0.269593"/> +<v x="0.418741" y="0.482641" z="-0.769229"/> +<v x="0.304220" y="0.509428" z="-0.804943"/> +<v x="0.598528" y="-0.243466" z="-0.763210"/> +<v x="-0.108777" y="0.400246" z="-0.909929"/> +<v x="0.018834" y="0.584660" z="-0.811060"/> +<v x="-0.014992" y="0.407165" z="-0.913232"/> +<v x="-0.970849" y="-0.113857" z="-0.210921"/> +<v x="-0.965401" y="-0.166223" z="-0.200922"/> +<v x="-0.980744" y="-0.177001" z="-0.082536"/> +<v x="-0.977698" y="-0.193488" z="0.081667"/> +<v x="-0.993425" y="-0.110258" z="0.030815"/> +<v x="-0.053800" y="0.161218" z="-0.985451"/> +<v x="-0.093614" y="0.015877" z="-0.995482"/> +<v x="-0.237790" y="-0.029327" z="-0.970874"/> +<v x="-0.175745" y="0.107855" z="-0.978509"/> +<v x="-0.435625" y="0.053606" z="-0.898531"/> +<v x="-0.412688" y="-0.071643" z="-0.908051"/> +<v x="-0.661093" y="-0.042380" z="-0.749106"/> +<v x="0.065077" y="-0.066240" z="0.995679"/> +<v x="0.135999" y="-0.062288" z="0.988749"/> +<v x="0.224708" y="0.086152" z="0.970610"/> +<v x="-0.954921" y="-0.106123" z="-0.277245"/> +<v x="-0.944600" y="-0.098753" z="-0.313016"/> +<v x="-0.984491" y="0.103829" z="0.141410"/> +<v x="-0.977749" y="0.063958" z="0.199793"/> +<v x="0.093511" y="0.288612" z="-0.952869"/> +<v x="-0.213278" y="0.133503" z="-0.967827"/> +<v x="-0.596972" y="-0.010969" z="-0.802187"/> +<v x="-0.386896" y="-0.175640" z="-0.905242"/> +<v x="-0.123527" y="-0.080600" z="-0.989063"/> +<v x="-0.149613" y="-0.110988" z="-0.982496"/> +<v x="-0.329922" y="-0.137488" z="-0.933942"/> +<v x="-0.292531" y="-0.124364" z="-0.948135"/> +<v x="-0.443843" y="-0.155106" z="-0.882579"/> +<v x="-0.447595" y="-0.144243" z="-0.882526"/> +<v x="-0.831541" y="-0.152484" z="-0.534124"/> +<v x="-0.765555" y="-0.219123" z="-0.604905"/> +<v x="-0.730132" y="-0.202618" z="0.652575"/> +<v x="-0.618045" y="-0.269417" z="0.738536"/> +<v x="-0.332133" y="-0.209456" z="0.919683"/> +<v x="0.250150" y="0.146151" z="0.957113"/> +<v x="-0.025424" y="0.210122" z="0.977345"/> +<v x="0.072189" y="-0.058803" z="0.995656"/> +<v x="-0.946142" y="-0.098389" z="-0.308439"/> +<v x="-0.958450" y="-0.097788" z="-0.267977"/> +<v x="-0.997272" y="-0.064163" z="0.036496"/> +<v x="-0.988459" y="0.143204" z="0.049418"/> +<v x="0.192831" y="0.537580" z="0.820868"/> +<v x="0.307168" y="0.448945" z="0.839105"/> +<v x="-0.439147" y="0.322101" z="0.838690"/> +<v x="-0.401583" y="0.447009" z="0.799321"/> +<v x="-0.787122" y="-0.573214" z="0.227738"/> +<v x="-0.914964" y="-0.299981" z="0.269911"/> +<v x="-0.947200" y="-0.286137" z="-0.144698"/> +<v x="-0.817022" y="-0.557747" z="-0.146262"/> +<v x="-0.867764" y="0.367252" z="0.334831"/> +<v x="-0.184826" y="0.923866" z="0.335130"/> +<v x="-0.225975" y="0.949924" z="-0.215822"/> +<v x="-0.908934" y="0.386998" z="-0.155148"/> +<v x="0.646544" y="0.734246" z="0.207036"/> +<v x="0.829509" y="0.544537" z="0.124073"/> +<v x="0.805782" y="0.554433" z="-0.208133"/> +<v x="0.614842" y="0.750726" z="-0.241620"/> +<v x="-0.345497" y="-0.322971" z="0.881091"/> +<v x="0.472565" y="0.259085" z="0.842352"/> +<v x="0.232262" y="0.575140" z="0.784390"/> +<v x="-0.627671" y="-0.008187" z="0.778436"/> +<v x="-0.739258" y="0.043047" z="-0.672045"/> +<v x="0.122264" y="0.634410" z="-0.763266"/> +<v x="0.353399" y="0.314694" z="-0.880952"/> +<v x="-0.469128" y="-0.259639" z="-0.844101"/> +<v x="0.630986" y="0.762078" z="0.145234"/> +<v x="0.576169" y="0.791439" z="0.204093"/> +<v x="0.471753" y="0.870387" z="-0.140977"/> +<v x="0.612868" y="0.770797" z="-0.173968"/> +<v x="0.330216" y="0.323151" z="-0.886866"/> +<v x="0.126290" y="0.432033" z="-0.892972"/> +<v x="-0.351649" y="-0.145871" z="-0.924697"/> +<v x="-0.370147" y="-0.335204" z="-0.866389"/> +<v x="-0.262320" y="-0.394790" z="0.880528"/> +<v x="-0.174735" y="-0.445345" z="0.878143"/> +<v x="0.394318" y="0.265703" z="0.879724"/> +<v x="0.431761" y="0.277336" z="0.858293"/> +<v x="-0.768766" y="-0.618850" z="-0.161319"/> +<v x="-0.754933" y="-0.643414" z="-0.126863"/> +<v x="-0.639715" y="-0.735510" z="0.223136"/> +<v x="-0.733901" y="-0.638793" z="0.230939"/> +<v x="0.653169" y="0.727136" z="0.211291"/> +<v x="0.681957" y="0.701041" z="0.208509"/> +<v x="0.767735" y="0.623492" z="-0.147787"/> +<v x="0.566826" y="0.821450" z="-0.062674"/> +<v x="-0.700441" y="-0.711875" z="-0.051147"/> +<v x="-0.530789" y="-0.838865" z="-0.120700"/> +<v x="-0.577490" y="-0.783260" z="0.230234"/> +<v x="-0.595004" y="-0.772552" z="0.221659"/> +<v x="0.295343" y="-0.750422" z="-0.591303"/> +<v x="0.162861" y="-0.550270" z="-0.818950"/> +<v x="0.561052" y="-0.238673" z="-0.792626"/> +<v x="0.770158" y="-0.414466" z="-0.484844"/> +<v x="-0.392024" y="-0.010400" z="-0.919896"/> +<v x="-0.069993" y="0.493553" z="-0.866895"/> +<v x="0.245457" y="0.042718" z="-0.968466"/> +<v x="-0.040509" y="-0.288559" z="-0.956605"/> +<v x="-0.799445" y="-0.498405" z="-0.335379"/> +<v x="-0.665294" y="-0.351117" z="-0.658863"/> +<v x="-0.239599" y="-0.597271" z="-0.765415"/> +<v x="-0.317230" y="-0.770512" z="-0.552880"/> +<v x="0.866366" y="0.486121" z="-0.114436"/> +<v x="0.709179" y="0.438200" z="-0.552310"/> +<v x="0.287333" y="0.923223" z="-0.255145"/> +<v x="0.397985" y="0.899339" z="0.181101"/> +<v x="-0.404912" y="0.847080" z="0.344242"/> +<v x="-0.416794" y="0.905930" z="-0.074659"/> +<v x="-0.867057" y="0.421574" z="-0.265494"/> +<v x="-0.840344" y="0.502074" z="0.204310"/> +<v x="-0.361959" y="0.924548" z="-0.119153"/> +<v x="-0.355549" y="0.852656" z="0.382834"/> +<v x="-0.816266" y="0.567934" z="0.105640"/> +<v x="-0.699830" y="0.573029" z="-0.426469"/> +<v x="0.868115" y="0.478273" z="-0.132782"/> +<v x="0.877547" y="0.460696" z="-0.132930"/> +<v x="0.397415" y="0.891804" z="0.216211"/> +<v x="0.435654" y="0.899507" z="-0.033052"/> +<v x="-0.788619" y="-0.591484" z="-0.168007"/> +<v x="-0.832622" y="-0.485690" z="-0.266169"/> +<v x="-0.343849" y="-0.846279" z="-0.406915"/> +<v x="-0.404893" y="-0.895900" z="-0.182826"/> +<v x="0.373669" y="-0.798289" z="-0.472342"/> +<v x="0.338456" y="-0.819439" z="-0.462566"/> +<v x="0.788182" y="-0.458513" z="-0.410530"/> +<v x="0.735770" y="-0.508354" z="-0.447458"/> +<v x="-0.162071" y="-0.427577" z="0.889332"/> +<v x="-0.157739" y="-0.420778" z="0.893345"/> +<v x="0.394282" y="0.233959" z="0.888710"/> +<v x="0.391145" y="0.237875" z="0.889057"/> +<v x="-0.962347" y="-0.233921" z="-0.138454"/> +<v x="-0.955433" y="-0.257848" z="-0.143742"/> +<v x="-0.921162" y="-0.277312" z="0.273056"/> +<v x="-0.928662" y="-0.253051" z="0.271203"/> +<v x="-0.548770" y="0.106354" z="0.829181"/> +<v x="-0.532907" y="0.081051" z="0.842283"/> +<v x="0.046278" y="0.553169" z="0.831783"/> +<v x="0.021860" y="0.572439" z="0.819656"/> +<v x="-0.107675" y="0.646007" z="-0.755699"/> +<v x="-0.085707" y="0.628127" z="-0.773376"/> +<v x="-0.662436" y="0.154614" z="-0.732989"/> +<v x="-0.675758" y="0.178475" z="-0.715191"/> +<v x="0.449852" y="0.865998" z="0.218359"/> +<v x="0.473130" y="0.853311" z="0.219108"/> +<v x="0.437571" y="0.873506" z="-0.213351"/> +<v x="0.414823" y="0.885892" z="-0.207646"/> +<v x="0.484107" y="-0.810951" z="0.328631"/> +<v x="0.576564" y="-0.802654" z="0.152710"/> +<v x="0.736762" y="-0.660159" z="0.146193"/> +<v x="0.763470" y="-0.564205" z="0.314302"/> +<v x="0.230214" y="0.313682" z="-0.921198"/> +<v x="0.220568" y="0.323879" z="-0.920028"/> +<v x="-0.390937" y="-0.216753" z="-0.894532"/> +<v x="-0.379666" y="-0.228804" z="-0.896383"/> +<v x="0.100764" y="-0.976444" z="-0.190800"/> +<v x="0.352346" y="-0.922611" z="-0.156976"/> +<v x="0.366192" y="-0.930470" z="0.011357"/> +<v x="0.123085" y="-0.989118" z="0.080603"/> +<v x="0.697714" y="-0.526859" z="-0.485402"/> +<v x="0.698034" y="-0.638162" z="-0.324803"/> +<v x="0.537833" y="-0.780659" z="-0.318287"/> +<v x="0.417879" y="-0.773339" z="-0.476785"/> +<v x="0.967768" y="-0.248125" z="0.043103"/> +<v x="0.881480" y="-0.472123" z="-0.009609"/> +<v x="0.867639" y="-0.464261" z="-0.177942"/> +<v x="0.945884" y="-0.235694" z="-0.223049"/> +<v x="0.166727" y="0.371564" z="-0.913314"/> +<v x="-0.010219" y="0.375075" z="-0.926938"/> +<v x="-0.456809" y="-0.064365" z="-0.887233"/> +<v x="-0.448203" y="-0.161413" z="-0.879238"/> +<v x="0.744546" y="0.633509" z="0.210520"/> +<v x="0.749550" y="0.626904" z="0.212521"/> +<v x="0.705365" y="0.657128" z="-0.265787"/> +<v x="0.705076" y="0.655925" z="-0.269501"/> +<v x="-0.230214" y="-0.313683" z="0.921197"/> +<v x="-0.232876" y="-0.312203" z="0.921031"/> +<v x="0.385098" y="0.225246" z="0.894966"/> +<v x="0.379666" y="0.228804" z="0.896383"/> +<v x="-0.744545" y="-0.633509" z="-0.210520"/> +<v x="-0.752398" y="-0.624487" z="-0.209554"/> +<v x="-0.711293" y="-0.649288" z="0.269234"/> +<v x="-0.705074" y="-0.655925" z="0.269503"/> +<v x="0.774541" y="0.589870" z="0.228339"/> +<v x="0.718370" y="0.647192" z="0.255122"/> +<v x="0.650452" y="0.746571" z="-0.139801"/> +<v x="0.710519" y="0.662388" z="-0.237499"/> +<v x="-0.249236" y="-0.307000" z="0.918495"/> +<v x="-0.279584" y="-0.305559" z="0.910201"/> +<v x="0.327375" y="0.200141" z="0.923455"/> +<v x="0.417559" y="0.210878" z="0.883841"/> +<v x="-0.788163" y="-0.580667" z="-0.204024"/> +<v x="-0.786373" y="-0.591631" z="-0.177734"/> +<v x="-0.743473" y="-0.623789" z="0.241114"/> +<v x="-0.741194" y="-0.617232" z="0.263923"/> +<v x="0.408664" y="-0.568880" z="-0.713701"/> +<v x="0.248213" y="-0.391214" z="-0.886195"/> +<v x="0.050053" y="-0.449783" z="-0.891734"/> +<v x="0.073190" y="-0.629717" z="-0.773369"/> +<v x="-0.991600" y="0.118834" z="-0.051076"/> +<v x="-0.993109" y="0.102686" z="0.056484"/> +<v x="-0.989136" y="0.009659" z="0.146688"/> +<v x="-0.993156" y="-0.038851" z="-0.110140"/> +<v x="-0.325381" y="0.093518" z="-0.940947"/> +<v x="-0.344229" y="-0.058692" z="-0.937049"/> +<v x="-0.159378" y="-0.063328" z="-0.985184"/> +<v x="-0.147986" y="0.060966" z="-0.987109"/> +<v x="-0.451004" y="-0.054042" z="-0.890884"/> +<v x="-0.540151" y="0.085289" z="-0.837235"/> +<v x="-0.831314" y="0.105076" z="-0.545780"/> +<v x="-0.850319" y="-0.043939" z="-0.524430"/> +<v x="-0.728023" y="-0.656466" z="0.197573"/> +<v x="-0.745088" y="-0.654687" z="-0.127393"/> +<v x="-0.600301" y="-0.791803" z="-0.112638"/> +<v x="-0.603542" y="-0.770930" z="0.203482"/> +<v x="-0.372673" y="-0.901093" z="0.221690"/> +<v x="-0.314965" y="-0.938097" z="-0.144121"/> +<v x="-0.295974" y="-0.942899" z="-0.152777"/> +<v x="-0.289259" y="-0.937216" z="0.194820"/> +<v x="-0.069247" y="-0.519532" z="-0.851640"/> +<v x="-0.009962" y="-0.538493" z="-0.842571"/> +<v x="-0.126367" y="-0.693132" z="-0.709647"/> +<v x="-0.160562" y="-0.745369" z="-0.647027"/> +<v x="-0.405102" y="-0.694726" z="-0.594347"/> +<v x="-0.546315" y="-0.509160" z="-0.665054"/> +<v x="-0.269733" y="-0.446192" z="-0.853321"/> +<v x="-0.405465" y="-0.183702" z="-0.895462"/> +<v x="-0.661052" y="-0.102707" z="-0.743278"/> +<v x="-0.692345" y="0.068698" z="-0.718289"/> +<v x="-0.384126" y="0.063712" z="-0.921080"/> +<v x="0.441148" y="-0.282192" z="-0.851913"/> +<v x="0.473708" y="-0.305815" z="-0.825880"/> +<v x="0.247179" y="0.055984" z="-0.967351"/> +<v x="0.299394" y="-0.038283" z="-0.953361"/> +<v x="-0.287476" y="0.410011" z="-0.865591"/> +<v x="-0.112196" y="0.342401" z="-0.932831"/> +<v x="-0.008323" y="0.354818" z="-0.934898"/> +<v x="-0.069348" y="0.447169" z="-0.891757"/> +<v x="-0.522100" y="0.569652" z="-0.634751"/> +<v x="-0.360952" y="0.389897" z="-0.847168"/> +<v x="-0.708937" y="0.377132" z="-0.595969"/> +<v x="-0.907347" y="0.168894" z="-0.384962"/> +<v x="-0.884295" y="0.113556" z="-0.452910"/> +<v x="-0.864814" y="0.081524" z="-0.495431"/> +<v x="-0.384991" y="-0.444511" z="-0.808821"/> +<v x="-0.289444" y="-0.602216" z="-0.744015"/> +<v x="-0.507895" y="-0.385745" z="-0.770223"/> +<v x="-0.568753" y="-0.180903" z="-0.802367"/> +<v x="-0.205267" y="-0.190755" z="-0.959936"/> +<v x="-0.245289" y="0.052825" z="-0.968010"/> +<v x="-0.054538" y="0.043007" z="-0.997585"/> +<v x="0.046049" y="-0.239671" z="-0.969762"/> +<v x="0.163840" y="-0.569673" z="-0.805375"/> +<v x="-0.041564" y="-0.718758" z="-0.694017"/> +<v x="-0.212432" y="-0.487871" z="-0.846673"/> +<v x="-0.123162" y="0.452773" z="-0.883078"/> +<v x="-0.300690" y="0.388521" z="-0.870998"/> +<v x="-0.238424" y="0.598086" z="-0.765146"/> +<v x="0.043151" y="0.018604" z="0.998895"/> +<v x="-0.065078" y="0.047976" z="0.996726"/> +<v x="-0.037755" y="0.115747" z="0.992561"/> +<v x="0.022159" y="0.147337" z="0.988838"/> +<v x="-0.420733" y="-0.306870" z="0.853706"/> +<v x="-0.342854" y="-0.290842" z="0.893231"/> +<v x="0.012689" y="0.167783" z="0.985742"/> +<v x="-0.448546" y="-0.013569" z="0.893657"/> +<v x="-0.471230" y="0.112545" z="0.874801"/> +<v x="-0.642750" y="0.038067" z="0.765129"/> +<v x="-0.648606" y="-0.170788" z="0.741715"/> +<v x="-0.321045" y="-0.653200" z="0.685755"/> +<v x="-0.143218" y="-0.773367" z="0.617569"/> +<v x="0.014406" y="-0.466010" z="0.884662"/> +<v x="-0.159524" y="-0.274355" z="0.948304"/> +<v x="0.179215" y="0.029287" z="0.983374"/> +<v x="0.091423" y="0.130709" z="0.987196"/> +<v x="-0.047751" y="0.196104" z="0.979420"/> +<v x="-0.036796" y="0.052383" z="0.997949"/> +<v x="-0.050719" y="-0.274837" z="-0.960152"/> +<v x="-0.096148" y="-0.055751" z="-0.993805"/> +<v x="-0.582584" y="-0.093649" z="-0.807357"/> +<v x="-0.409677" y="-0.369074" z="-0.834236"/> +<v x="-0.179638" y="-0.561259" z="-0.807910"/> +<v x="0.002714" y="-0.564608" z="-0.825355"/> +<v x="-0.024046" y="-0.517366" z="-0.855426"/> +<v x="0.019458" y="-0.606964" z="0.794491"/> +<v x="-0.141375" y="-0.657076" z="0.740449"/> +<v x="-0.014527" y="-0.584545" z="0.811232"/> +<v x="-0.348554" y="-0.259011" z="0.900790"/> +<v x="-0.418014" y="0.008268" z="0.908403"/> +<v x="0.096126" y="0.059633" z="0.993581"/> +<v x="0.030367" y="-0.161767" z="0.986362"/> +<v x="-0.928337" y="-0.330612" z="-0.169960"/> +<v x="-0.994295" y="-0.054291" z="-0.091814"/> +<v x="-0.953500" y="-0.112129" z="0.279757"/> +<v x="-0.888127" y="-0.387512" z="0.247114"/> +<v x="-0.411176" y="0.280734" z="-0.867250"/> +<v x="-0.253932" y="0.250126" z="-0.934321"/> +<v x="-0.252947" y="-0.049300" z="-0.966223"/> +<v x="-0.386767" y="-0.042190" z="-0.921212"/> +<v x="-0.195627" y="0.954789" z="-0.223849"/> +<v x="-0.085410" y="0.954596" z="-0.285396"/> +<v x="-0.176780" y="0.819372" z="-0.545325"/> +<v x="-0.302646" y="0.843209" z="-0.444302"/> +<v x="-0.336792" y="-0.229352" z="-0.913219"/> +<v x="-0.345229" y="-0.224096" z="-0.911371"/> +<v x="-0.243874" y="-0.267783" z="-0.932104"/> +<v x="-0.248584" y="-0.210475" z="-0.945466"/> +<v x="-0.254135" y="-0.033677" z="-0.966582"/> +<v x="-0.254280" y="-0.000000" z="-0.967131"/> +<v x="-0.352596" y="-0.016552" z="-0.935629"/> +<v x="-0.343167" y="-0.023503" z="-0.938980"/> +<v x="-0.759387" y="-0.055458" z="-0.648271"/> +<v x="-0.694049" y="-0.250993" z="-0.674758"/> +<v x="-0.958976" y="-0.106228" z="-0.262833"/> +<v x="-0.763088" y="-0.064907" z="-0.643027"/> +<v x="-0.959217" y="-0.011127" z="-0.282451"/> +<v x="-0.702353" y="0.007411" z="-0.711790"/> +<v x="-0.114253" y="0.433145" z="-0.894054"/> +<v x="0.136193" y="0.375763" z="-0.916653"/> +<v x="0.067056" y="0.525994" z="-0.847841"/> +<v x="-0.804677" y="0.356764" z="-0.474568"/> +<v x="-0.812173" y="-0.030041" z="-0.582643"/> +<v x="-0.978206" y="-0.045072" z="-0.202687"/> +<v x="-0.931547" y="0.252199" z="-0.261947"/> +<v x="0.004176" y="0.906065" z="0.423117"/> +<v x="-0.168429" y="0.914656" z="0.367473"/> +<v x="-0.199149" y="0.904359" z="0.377457"/> +<v x="-0.033374" y="0.907424" z="0.418889"/> +<v x="-0.275235" y="0.960260" z="0.046332"/> +<v x="-0.274816" y="0.960302" z="-0.047913"/> +<v x="-0.435173" y="0.884471" z="-0.168334"/> +<v x="-0.444509" y="0.894596" z="-0.045944"/> +<v x="-0.366568" y="0.926471" z="-0.085319"/> +<v x="-0.295780" y="0.922042" z="0.249706"/> +<v x="-0.266555" y="0.952096" z="0.149870"/> +<v x="0.058008" y="-0.202923" z="0.977475"/> +<v x="-0.309088" y="-0.217838" z="0.925749"/> +<v x="-0.318184" y="-0.433587" z="0.843066"/> +<v x="0.032349" y="-0.478382" z="0.877556"/> +<v x="0.073616" y="0.031888" z="0.996777"/> +<v x="-0.255689" y="-0.020079" z="0.966551"/> +<v x="-0.287062" y="-0.119203" z="0.950466"/> +<v x="0.062301" y="-0.095215" z="0.993505"/> +<v x="-0.374832" y="0.054210" z="-0.925507"/> +<v x="-0.249956" y="0.073369" z="-0.965473"/> +<v x="-0.262790" y="-0.139617" z="-0.954698"/> +<v x="-0.412960" y="-0.151088" z="-0.898130"/> +<v x="-0.455061" y="-0.858330" z="-0.237041"/> +<v x="-0.475889" y="-0.578370" z="-0.662584"/> +<v x="-0.263012" y="-0.626896" z="-0.733366"/> +<v x="-0.190547" y="-0.934767" z="-0.299837"/> +<v x="0.101369" y="0.168517" z="0.980472"/> +<v x="0.137505" y="0.161283" z="0.977282"/> +<v x="-0.107856" y="0.084255" z="0.990590"/> +<v x="-0.191508" y="0.076173" z="0.978531"/> +<v x="-0.941934" y="0.031413" z="-0.334327"/> +<v x="-0.997138" y="-0.075336" z="0.006298"/> +<v x="-0.999825" y="0.001142" z="-0.018687"/> +<v x="-0.931098" y="0.141575" z="-0.336174"/> +<v x="-0.603166" y="0.052801" z="0.795866"/> +<v x="-0.645462" y="0.030258" z="0.763193"/> +<v x="-0.990019" y="0.080438" z="0.115726"/> +<v x="-0.976164" y="0.145334" z="0.161189"/> +<v x="0.162860" y="0.029039" z="0.986222"/> +<v x="0.163892" y="-0.050038" z="0.985208"/> +<v x="-0.053465" y="-0.028819" z="0.998154"/> +<v x="-0.053550" y="0.015582" z="0.998444"/> +<v x="-0.686068" y="-0.042783" z="0.726279"/> +<v x="-0.674974" y="-0.064008" z="0.735060"/> +<v x="-0.985639" y="-0.089982" z="0.142893"/> +<v x="-0.990753" y="-0.043701" z="0.128448"/> +<v x="0.149231" y="-0.081016" z="0.985478"/> +<v x="0.130713" y="-0.057188" z="0.989769"/> +<v x="-0.113951" y="-0.030650" z="0.993013"/> +<v x="-0.083031" y="-0.055250" z="0.995014"/> +<v x="-0.947649" y="0.036512" z="0.317218"/> +<v x="-0.661010" y="-0.014570" z="0.750236"/> +<v x="-0.614523" y="0.030783" z="0.788298"/> +<v x="-0.957683" y="0.138725" z="0.252187"/> +<v x="-0.006221" y="0.815194" z="-0.579155"/> +<v x="-0.090670" y="0.925577" z="-0.367542"/> +<v x="-0.214629" y="0.469677" z="-0.856351"/> +<v x="-0.199532" y="0.488223" z="-0.849603"/> +<v x="-0.717966" y="-0.178578" z="0.672781"/> +<v x="-0.696239" y="-0.089727" z="0.712180"/> +<v x="-0.941764" y="-0.081680" z="0.326204"/> +<v x="-0.926727" y="-0.167743" z="0.336214"/> +<v x="-0.031799" y="0.405488" z="-0.913547"/> +<v x="-0.446988" y="0.357104" z="-0.820170"/> +<v x="-0.438982" y="0.350990" z="-0.827104"/> +<v x="-0.988408" y="0.143898" z="-0.048397"/> +<v x="-0.947250" y="0.294063" z="-0.127457"/> +<v x="-0.885712" y="0.372080" z="-0.277618"/> +<v x="-0.922282" y="0.193118" z="-0.334815"/> +<v x="-0.102090" y="0.168353" z="-0.980426"/> +<v x="-0.290559" y="0.149250" z="-0.945146"/> +<v x="-0.044084" y="0.248412" z="-0.967651"/> +<v x="-0.399195" y="-0.916857" z="-0.004133"/> +<v x="-0.433037" y="-0.893074" z="-0.122059"/> +<v x="-0.165843" y="-0.963537" z="-0.209984"/> +<v x="-0.131284" y="-0.990226" z="-0.047084"/> +<v x="-0.522106" y="-0.655637" z="0.545477"/> +<v x="-0.934314" y="-0.270519" z="0.232112"/> +<v x="-0.806621" y="-0.590910" z="-0.013722"/> +<v x="-0.738593" y="-0.268105" z="0.618547"/> +<v x="-0.900985" y="-0.275754" z="0.334941"/> +<v x="-0.790445" y="-0.592945" z="0.153666"/> +<v x="-0.714910" y="-0.661878" z="0.225437"/> +<v x="-0.658518" y="-0.449735" z="0.603401"/> +<v x="-0.714555" y="0.194805" z="-0.671910"/> +<v x="-0.786887" y="0.444518" z="-0.428034"/> +<v x="0.086356" y="0.348888" z="-0.933177"/> +<v x="0.493082" y="0.797427" z="-0.347821"/> +<v x="-0.431396" y="0.851284" z="-0.298685"/> +<v x="-0.382031" y="0.792262" z="-0.475787"/> +<v x="0.438045" y="0.750019" z="-0.495569"/> +<v x="0.695946" y="-0.415410" z="-0.585742"/> +<v x="0.962369" y="-0.201523" z="0.182303"/> +<v x="0.899707" y="-0.367917" z="0.234869"/> +<v x="0.733355" y="-0.247632" z="-0.633142"/> +<v x="0.523126" y="0.175093" z="0.834075"/> +<v x="0.113963" y="0.377174" z="0.919104"/> +<v x="0.004130" y="-0.006221" z="0.999972"/> +<v x="0.381965" y="-0.202243" z="0.901776"/> +<v x="-0.594366" y="0.589559" z="0.546946"/> +<v x="-0.887709" y="0.416701" z="-0.195789"/> +<v x="-0.790392" y="0.580929" z="-0.194430"/> +<v x="-0.628275" y="0.436040" z="0.644314"/> +<v x="-0.507050" y="-0.104196" z="-0.855596"/> +<v x="-0.092606" y="-0.319006" z="-0.943217"/> +<v x="0.019002" y="0.062313" z="-0.997876"/> +<v x="-0.355113" y="0.271927" z="-0.894399"/> +<v x="-0.750770" y="-0.657449" z="-0.064074"/> +<v x="-0.495638" y="0.395943" z="-0.773028"/> +<v x="0.223827" y="0.074969" z="-0.971741"/> +<v x="0.036417" y="-0.949319" z="-0.312197"/> +<v x="0.747333" y="-0.647665" z="0.148402"/> +<v x="0.555646" y="-0.830064" z="-0.047442"/> +<v x="0.767175" y="0.041171" z="-0.640115"/> +<v x="0.848827" y="0.068203" z="-0.524253"/> +<v x="0.307712" y="0.697576" z="-0.647071"/> +<v x="0.366561" y="0.667717" z="-0.647910"/> +<v x="-0.071688" y="0.864997" z="-0.496631"/> +<v x="-0.012064" y="0.848372" z="-0.529263"/> +<v x="-0.241148" y="-0.577167" z="0.780209"/> +<v x="-0.416956" y="-0.735235" z="0.534395"/> +<v x="0.021392" y="-0.920258" z="0.390728"/> +<v x="0.101779" y="-0.735275" z="0.670083"/> +<v x="-0.619274" y="0.784441" z="-0.033948"/> +<v x="-0.692409" y="0.703714" z="-0.159236"/> +<v x="-0.880902" y="-0.209021" z="0.424644"/> +<v x="-0.773671" y="0.088149" z="0.627426"/> +<v x="0.789394" y="0.530516" z="-0.308885"/> +<v x="0.832505" y="0.253125" z="0.492812"/> +<v x="0.884544" y="-0.379595" z="0.271088"/> +<v x="0.841433" y="-0.102205" z="-0.530608"/> +<v x="0.311724" y="-0.000167" z="0.950173"/> +<v x="-0.263814" y="-0.052057" z="0.963168"/> +<v x="-0.219083" y="-0.595915" z="0.772585"/> +<v x="0.356454" y="-0.544026" z="0.759590"/> +<v x="-0.841433" y="0.102205" z="0.530608"/> +<v x="-0.884544" y="0.379596" z="-0.271088"/> +<v x="-0.832505" y="-0.253125" z="-0.492812"/> +<v x="-0.789394" y="-0.530516" z="0.308885"/> +<v x="-0.356455" y="0.544026" z="-0.759589"/> +<v x="0.219084" y="0.595916" z="-0.772584"/> +<v x="0.263814" y="0.052056" z="-0.963168"/> +<v x="-0.311724" y="0.000166" z="-0.950173"/> +<v x="0.291294" y="0.682390" z="0.670442"/> +<v x="0.248183" y="0.959780" z="-0.131254"/> +<v x="-0.421392" y="0.899412" z="-0.116134"/> +<v x="-0.378281" y="0.622022" z="0.685560"/> +<v x="-0.248183" y="-0.959780" z="0.131253"/> +<v x="-0.291293" y="-0.682389" z="-0.670443"/> +<v x="0.378280" y="-0.622022" z="-0.685561"/> +<v x="0.421392" y="-0.899412" z="0.116134"/> +<v x="-0.697565" y="-0.136985" z="-0.703305"/> +<v x="-0.759874" y="-0.014218" z="-0.649915"/> +<v x="-0.314511" y="-0.077456" z="-0.946089"/> +<v x="-0.344788" y="0.019846" z="0.938471"/> +<v x="-0.841916" y="0.010852" z="0.539500"/> +<v x="-0.719940" y="-0.150001" z="0.677633"/> +<v x="0.123229" y="0.434917" z="0.891999"/> +<v x="0.259770" y="0.452512" z="0.853084"/> +<v x="0.187318" y="0.799044" z="0.571350"/> +<v x="0.303824" y="0.759923" z="0.574637"/> +<v x="-0.322502" y="0.364219" z="0.873691"/> +<v x="-0.669588" y="0.450433" z="0.590561"/> +<v x="-0.842043" y="0.058115" z="0.536271"/> +<v x="-0.321649" y="0.637809" z="0.699815"/> +<v x="-0.174402" y="0.555734" z="0.812862"/> +<v x="0.078220" y="0.761885" z="0.642971"/> +<v x="-0.607247" y="-0.106833" z="0.787297"/> +<v x="-0.345550" y="-0.126816" z="0.929792"/> +<v x="-0.395983" y="0.068140" z="0.915726"/> +<v x="-0.946958" y="-0.296327" z="0.124339"/> +<v x="-0.958829" y="-0.273705" z="-0.075712"/> +<v x="-0.951971" y="-0.248032" z="-0.179530"/> +<v x="-0.975513" y="-0.180610" z="-0.125518"/> +<v x="-0.953333" y="-0.258417" z="0.156128"/> +<v x="-0.847121" y="0.404365" z="-0.344783"/> +<v x="-0.870156" y="0.334719" z="-0.361651"/> +<v x="-0.722415" y="0.487906" z="-0.489963"/> +<v x="-0.709919" y="0.278156" z="-0.647027"/> +<v x="-0.639059" y="0.129989" z="-0.758094"/> +<v x="-0.547787" y="0.529482" z="-0.647748"/> +<v x="-0.618243" y="0.002362" z="0.785984"/> +<v x="-0.737011" y="0.017966" z="0.675642"/> +<v x="-0.290040" y="0.017456" z="0.956855"/> +<v x="-0.106985" y="-0.391485" z="0.913944"/> +<v x="-0.111220" y="-0.422026" z="0.899736"/> +<v x="0.023006" y="-0.423764" z="0.905480"/> +<v x="0.002545" y="-0.483497" z="0.875343"/> +<v x="0.593670" y="0.251042" z="-0.764548"/> +<v x="0.920163" y="0.299799" z="-0.251836"/> +<v x="0.979340" y="0.064229" z="-0.191749"/> +<v x="0.694791" y="0.058054" z="-0.716864"/> +<v x="-0.208759" y="0.090860" z="-0.973737"/> +<v x="-0.022572" y="0.111520" z="-0.993506"/> +<v x="-0.008808" y="0.044196" z="-0.998984"/> +<v x="-0.194858" y="0.073997" z="-0.978036"/> +<v x="0.647670" y="0.074235" z="-0.758296"/> +<v x="0.984415" y="0.077443" z="-0.157893"/> +<v x="0.987188" y="0.101246" z="-0.123327"/> +<v x="0.666220" y="0.097135" z="-0.739402"/> +<v x="-0.167723" y="0.108020" z="-0.979898"/> +<v x="0.031576" y="0.063793" z="-0.997463"/> +<v x="0.087023" y="0.112027" z="-0.989887"/> +<v x="-0.134509" y="0.157961" z="-0.978241"/> +<v x="-0.419224" y="0.513898" z="0.748438"/> +<v x="0.669357" y="0.587817" z="-0.454348"/> +<v x="-0.450613" y="0.740275" z="-0.498940"/> +<v x="-0.417701" y="0.787567" z="-0.453062"/> +<v x="0.114671" y="0.246144" z="0.962426"/> +<v x="-0.106049" y="0.430471" z="-0.896353"/> +<v x="0.117614" y="0.396616" z="-0.910419"/> +<v x="-0.120784" y="0.268586" z="0.955653"/> +<v x="-0.846985" y="0.054296" z="-0.528837"/> +<v x="0.402467" y="0.061314" z="-0.913379"/> +<v x="0.037244" y="0.241526" z="-0.969679"/> +<v x="-0.668846" y="0.210450" z="-0.712991"/> +<v x="-0.285230" y="0.148168" z="-0.946937"/> +<v x="-0.285337" y="0.129328" z="-0.949661"/> +<v x="0.328585" y="0.012678" z="-0.944389"/> +<v x="-0.758409" y="-0.065682" z="-0.648461"/> +<v x="-0.155616" y="0.484967" z="-0.860576"/> +<v x="-0.048550" y="0.300282" z="-0.952614"/> +<v x="-0.214357" y="0.197398" z="-0.956601"/> +<v x="-0.340608" y="-0.769578" z="0.540126"/> +<v x="-0.346806" y="-0.902662" z="0.254807"/> +<v x="-0.092599" y="-0.982153" z="0.163708"/> +<v x="-0.044779" y="-0.880546" z="0.471841"/> +<v x="-0.293043" y="-0.899765" z="0.323339"/> +<v x="-0.379467" y="-0.925205" z="-0.000009"/> +<v x="-0.125958" y="-0.991970" z="-0.011372"/> +<v x="-0.088325" y="-0.983418" z="0.158394"/> +<v x="-0.994280" y="-0.106805" z="-0.000596"/> +<v x="-0.903373" y="-0.030270" z="-0.427786"/> +<v x="-0.775154" y="-0.282359" z="-0.565163"/> +<v x="-0.867877" y="-0.486504" z="-0.100513"/> +<v x="0.171448" y="0.499268" z="-0.849316"/> +<v x="-0.046031" y="0.592133" z="-0.804524"/> +<v x="0.236053" y="0.645118" z="-0.726706"/> +</normals> +<textures count="1"> +<texture file="bungirl"/> +</textures> +<primitives count="1390"> +<poly v0="362" v1="1061" v2="0" v3="363" n0="362" n1="1061" n2="0" n3="363" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="365" v1="1062" v2="0" v3="362" n0="365" n1="1062" n2="0" n3="362" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="367" v1="1063" v2="0" v3="365" n0="367" n1="1063" n2="0" n3="365" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="363" v1="1064" v2="0" v3="367" n0="363" n1="1064" n2="0" n3="367" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="399" v1="1078" v2="1" v3="411" n0="399" n1="1078" n2="1" n3="411" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="410" v1="1084" v2="1" v3="399" n0="410" n1="1084" n2="1" n3="399" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="407" v1="1087" v2="1" v3="410" n0="407" n1="1087" n2="1" n3="410" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="411" v1="1085" v2="1" v3="407" n0="411" n1="1085" n2="1" n3="407" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="390" v1="1073" v2="2" v3="364" n0="390" n1="1073" n2="2" n3="364" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="366" v1="1076" v2="2" v3="390" n0="366" n1="1076" n2="2" n3="390" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="402" v1="1083" v2="2" v3="366" n0="402" n1="1083" n2="2" n3="366" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="364" v1="1077" v2="2" v3="402" n0="364" n1="1077" n2="2" n3="402" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="370" v1="1065" v2="3" v3="374" n0="370" n1="1065" n2="3" n3="374" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="363" v1="1061" v2="3" v3="370" n0="363" n1="1061" n2="3" n3="370" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="373" v1="1064" v2="3" v3="363" n0="373" n1="1064" n2="3" n3="363" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="374" v1="1068" v2="3" v3="373" n0="374" n1="1068" n2="3" n3="373" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="386" v1="1073" v2="4" v3="390" n0="386" n1="1073" n2="4" n3="390" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="374" v1="1065" v2="4" v3="386" n0="374" n1="1065" n2="4" n3="386" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="389" v1="1068" v2="4" v3="374" n0="389" n1="1068" n2="4" n3="374" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="390" v1="1076" v2="4" v3="389" n0="390" n1="1076" n2="4" n3="389" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="372" v1="1063" v2="5" v3="367" n0="372" n1="1063" n2="5" n3="367" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="375" v1="1067" v2="5" v3="372" n0="375" n1="1067" n2="5" n3="372" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="373" v1="1068" v2="5" v3="375" n0="373" n1="1068" n2="5" n3="375" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="367" v1="1064" v2="5" v3="373" n0="367" n1="1064" n2="5" n3="373" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="371" v1="1062" v2="6" v3="383" n0="371" n1="1062" n2="6" n3="383" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="382" v1="1066" v2="6" v3="371" n0="382" n1="1066" n2="6" n3="371" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="379" v1="1071" v2="6" v3="382" n0="379" n1="1071" n2="6" n3="382" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="383" v1="1069" v2="6" v3="379" n0="383" n1="1069" n2="6" n3="379" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="370" v1="1061" v2="7" v3="362" n0="370" n1="1061" n2="7" n3="362" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="377" v1="1065" v2="7" v3="370" n0="377" n1="1065" n2="7" n3="370" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="371" v1="1066" v2="7" v3="377" n0="371" n1="1066" n2="7" n3="377" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="362" v1="1062" v2="7" v3="371" n0="362" n1="1062" n2="7" n3="371" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="379" v1="1069" v2="8" v3="378" n0="379" n1="1069" n2="8" n3="378" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="381" v1="1071" v2="8" v3="379" n0="381" n1="1071" n2="8" n3="379" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="380" v1="1072" v2="8" v3="381" n0="380" n1="1072" n2="8" n3="381" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="378" v1="1070" v2="8" v3="380" n0="378" n1="1070" n2="8" n3="380" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="376" v1="1066" v2="9" v3="382" n0="376" n1="1066" n2="9" n3="382" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="384" v1="1067" v2="9" v3="376" n0="384" n1="1067" n2="9" n3="376" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="381" v1="1072" v2="9" v3="384" n0="381" n1="1072" n2="9" n3="384" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="382" v1="1071" v2="9" v3="381" n0="382" n1="1071" n2="9" n3="381" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="365" v1="1063" v2="10" v3="385" n0="365" n1="1063" n2="10" n3="385" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="383" v1="1062" v2="10" v3="365" n0="383" n1="1062" n2="10" n3="365" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="378" v1="1069" v2="10" v3="383" n0="378" n1="1069" n2="10" n3="383" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="385" v1="1070" v2="10" v3="378" n0="385" n1="1070" n2="10" n3="378" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="372" v1="1067" v2="11" v3="384" n0="372" n1="1067" n2="11" n3="384" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="385" v1="1063" v2="11" v3="372" n0="385" n1="1063" n2="11" n3="372" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="380" v1="1070" v2="11" v3="385" n0="380" n1="1070" n2="11" n3="385" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="384" v1="1072" v2="11" v3="380" n0="384" n1="1072" n2="11" n3="380" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="392" v1="1075" v2="12" v3="368" n0="392" n1="1075" n2="12" n3="368" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="369" v1="1074" v2="12" v3="392" n0="369" n1="1074" n2="12" n3="392" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="404" v1="1079" v2="12" v3="369" n0="404" n1="1079" n2="12" n3="369" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="368" v1="1081" v2="12" v3="404" n0="368" n1="1081" n2="12" n3="404" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="388" v1="1067" v2="13" v3="375" n0="388" n1="1067" n2="13" n3="375" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="391" v1="1075" v2="13" v3="388" n0="391" n1="1075" n2="13" n3="388" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="389" v1="1076" v2="13" v3="391" n0="389" n1="1076" n2="13" n3="391" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="375" v1="1068" v2="13" v3="389" n0="375" n1="1068" n2="13" n3="389" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="387" v1="1066" v2="14" v3="376" n0="387" n1="1066" n2="14" n3="376" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="392" v1="1074" v2="14" v3="387" n0="392" n1="1074" n2="14" n3="387" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="388" v1="1075" v2="14" v3="392" n0="388" n1="1075" n2="14" n3="392" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="376" v1="1067" v2="14" v3="388" n0="376" n1="1067" n2="14" n3="388" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="386" v1="1065" v2="15" v3="377" n0="386" n1="1065" n2="15" n3="377" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="393" v1="1073" v2="15" v3="386" n0="393" n1="1073" n2="15" n3="386" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="387" v1="1074" v2="15" v3="393" n0="387" n1="1074" n2="15" n3="393" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="377" v1="1066" v2="15" v3="387" n0="377" n1="1066" n2="15" n3="387" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="394" v1="1077" v2="16" v3="405" n0="394" n1="1077" n2="16" n3="405" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="398" v1="1078" v2="16" v3="394" n0="398" n1="1078" n2="16" n3="394" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="395" v1="1080" v2="16" v3="398" n0="395" n1="1080" n2="16" n3="398" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="405" v1="1079" v2="16" v3="395" n0="405" n1="1079" n2="16" n3="395" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="395" v1="1079" v2="17" v3="404" n0="395" n1="1079" n2="17" n3="404" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="400" v1="1080" v2="17" v3="395" n0="400" n1="1080" n2="17" n3="395" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="396" v1="1082" v2="17" v3="400" n0="396" n1="1082" n2="17" n3="400" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="404" v1="1081" v2="17" v3="396" n0="404" n1="1081" n2="17" n3="396" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="396" v1="1081" v2="18" v3="403" n0="396" n1="1081" n2="18" n3="403" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="401" v1="1082" v2="18" v3="396" n0="401" n1="1082" n2="18" n3="396" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="397" v1="1084" v2="18" v3="401" n0="397" n1="1084" n2="18" n3="401" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="403" v1="1083" v2="18" v3="397" n0="403" n1="1083" n2="18" n3="397" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="394" v1="1078" v2="19" v3="399" n0="394" n1="1078" n2="19" n3="399" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="402" v1="1077" v2="19" v3="394" n0="402" n1="1077" n2="19" n3="394" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="397" v1="1083" v2="19" v3="402" n0="397" n1="1083" n2="19" n3="402" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="399" v1="1084" v2="19" v3="397" n0="399" n1="1084" n2="19" n3="397" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="393" v1="1074" v2="20" v3="369" n0="393" n1="1074" n2="20" n3="369" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="364" v1="1073" v2="20" v3="393" n0="364" n1="1073" n2="20" n3="393" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="405" v1="1077" v2="20" v3="364" n0="405" n1="1077" n2="20" n3="364" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="369" v1="1079" v2="20" v3="405" n0="369" n1="1079" n2="20" n3="405" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="391" v1="1076" v2="21" v3="366" n0="391" n1="1076" n2="21" n3="366" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="368" v1="1075" v2="21" v3="391" n0="368" n1="1075" n2="21" n3="391" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="403" v1="1081" v2="21" v3="368" n0="403" n1="1081" n2="21" n3="368" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="366" v1="1083" v2="21" v3="403" n0="366" n1="1083" n2="21" n3="403" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="408" v1="1088" v2="22" v3="419" n0="408" n1="1088" n2="22" n3="419" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="418" v1="1086" v2="22" v3="408" n0="418" n1="1086" n2="22" n3="408" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="416" v1="1090" v2="22" v3="418" n0="416" n1="1090" n2="22" n3="418" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="419" v1="1092" v2="22" v3="416" n0="419" n1="1092" n2="22" n3="416" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="400" v1="1082" v2="23" v3="413" n0="400" n1="1082" n2="23" n3="413" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="412" v1="1080" v2="23" v3="400" n0="412" n1="1080" n2="23" n3="400" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="408" v1="1086" v2="23" v3="412" n0="408" n1="1086" n2="23" n3="412" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="413" v1="1088" v2="23" v3="408" n0="413" n1="1088" n2="23" n3="408" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="398" v1="1080" v2="24" v3="412" n0="398" n1="1080" n2="24" n3="412" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="411" v1="1078" v2="24" v3="398" n0="411" n1="1078" n2="24" n3="398" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="406" v1="1085" v2="24" v3="411" n0="406" n1="1085" n2="24" n3="411" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="412" v1="1086" v2="24" v3="406" n0="412" n1="1086" n2="24" n3="406" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="401" v1="1084" v2="25" v3="410" n0="401" n1="1084" n2="25" n3="410" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="413" v1="1082" v2="25" v3="401" n0="413" n1="1082" n2="25" n3="401" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="409" v1="1088" v2="25" v3="413" n0="409" n1="1088" n2="25" n3="413" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="410" v1="1087" v2="25" v3="409" n0="410" n1="1087" n2="25" n3="409" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="416" v1="1092" v2="26" v3="423" n0="416" n1="1092" n2="26" n3="423" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="448" v1="1090" v2="26" v3="416" n0="448" n1="1090" n2="26" n3="416" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="449" v1="1103" v2="26" v3="448" n0="449" n1="1103" n2="26" n3="448" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="423" v1="1094" v2="26" v3="449" n0="423" n1="1094" n2="26" n3="449" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="406" v1="1086" v2="27" v3="418" n0="406" n1="1086" n2="27" n3="418" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="420" v1="1085" v2="27" v3="406" n0="420" n1="1085" n2="27" n3="406" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="414" v1="1089" v2="27" v3="420" n0="414" n1="1089" n2="27" n3="420" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="418" v1="1090" v2="27" v3="414" n0="418" n1="1090" n2="27" n3="414" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="409" v1="1087" v2="28" v3="421" n0="409" n1="1087" n2="28" n3="421" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="419" v1="1088" v2="28" v3="409" n0="419" n1="1088" n2="28" n3="409" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="417" v1="1092" v2="28" v3="419" n0="417" n1="1092" n2="28" n3="419" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="421" v1="1091" v2="28" v3="417" n0="421" n1="1091" n2="28" n3="417" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="407" v1="1085" v2="29" v3="420" n0="407" n1="1085" n2="29" n3="420" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="421" v1="1087" v2="29" v3="407" n0="421" n1="1087" n2="29" n3="407" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="415" v1="1091" v2="29" v3="421" n0="415" n1="1091" n2="29" n3="421" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="420" v1="1089" v2="29" v3="415" n0="420" n1="1089" n2="29" n3="415" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="417" v1="1091" v2="30" v3="424" n0="417" n1="1091" n2="30" n3="424" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="423" v1="1092" v2="30" v3="417" n0="423" n1="1092" n2="30" n3="417" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="422" v1="1094" v2="30" v3="423" n0="422" n1="1094" n2="30" n3="423" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="424" v1="1093" v2="30" v3="422" n0="424" n1="1093" n2="30" n3="422" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="422" v1="1093" v2="31" v3="426" n0="422" n1="1093" n2="31" n3="426" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="427" v1="1094" v2="31" v3="422" n0="427" n1="1094" n2="31" n3="422" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="425" v1="1250" v2="31" v3="427" n0="425" n1="1250" n2="31" n3="427" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="426" v1="1249" v2="31" v3="425" n0="426" n1="1249" n2="31" n3="425" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="429" v1="1094" v2="32" v3="427" n0="429" n1="1094" n2="32" n3="427" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="430" v1="1096" v2="32" v3="429" n0="430" n1="1096" n2="32" n3="429" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="427" v1="1250" v2="32" v3="430" n0="427" n1="1250" n2="32" n3="430" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="431" v1="1096" v2="33" v3="430" n0="431" n1="1096" n2="33" n3="430" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="432" v1="1253" v2="33" v3="431" n0="432" n1="1253" n2="33" n3="431" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="430" v1="1250" v2="33" v3="432" n0="430" n1="1250" n2="33" n3="432" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="458" v1="1095" v2="34" v3="436" n0="458" n1="1095" n2="34" n3="436" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="459" v1="1102" v2="34" v3="458" n0="459" n1="1102" n2="34" n3="458" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="699" v1="1099" v2="34" v3="459" n0="699" n1="1099" n2="34" n3="459" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="435" v1="1207" v2="34" v3="699" n0="435" n1="1207" n2="34" n3="699" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="436" v1="1097" v2="34" v3="435" n0="436" n1="1097" n2="34" n3="435" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="431" v1="1253" v2="35" v3="437" n0="431" n1="1253" n2="35" n3="437" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="438" v1="1096" v2="35" v3="431" n0="438" n1="1096" n2="35" n3="431" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="434" v1="1098" v2="35" v3="438" n0="434" n1="1098" n2="35" n3="438" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="437" v1="1256" v2="35" v3="434" n0="437" n1="1256" n2="35" n3="434" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="695" v1="1096" v2="36" v3="438" n0="695" n1="1096" n2="36" n3="438" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="433" v1="1097" v2="36" v3="695" n0="433" n1="1097" n2="36" n3="695" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="438" v1="1098" v2="36" v3="433" n0="438" n1="1098" n2="36" n3="433" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="696" v1="1101" v2="37" v3="443" n0="696" n1="1101" n2="37" n3="443" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="442" v1="1260" v2="37" v3="696" n0="442" n1="1260" n2="37" n3="696" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="443" v1="1261" v2="37" v3="442" n0="443" n1="1261" n2="37" n3="442" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="414" v1="1090" v2="38" v3="448" n0="414" n1="1090" n2="38" n3="448" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="461" v1="1089" v2="38" v3="414" n0="461" n1="1089" n2="38" n3="414" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="462" v1="1107" v2="38" v3="461" n0="462" n1="1107" n2="38" n3="461" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="448" v1="1103" v2="38" v3="462" n0="448" n1="1103" n2="38" n3="462" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="449" v1="1094" v2="39" v3="429" n0="449" n1="1094" n2="39" n3="429" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="439" v1="1103" v2="39" v3="449" n0="439" n1="1103" n2="39" n3="449" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="428" v1="1095" v2="39" v3="439" n0="428" n1="1095" n2="39" n3="439" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="429" v1="1096" v2="39" v3="428" n0="429" n1="1096" n2="39" n3="428" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="434" v1="1256" v2="40" v3="454" n0="434" n1="1256" n2="40" n3="454" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="455" v1="1098" v2="40" v3="434" n0="455" n1="1098" n2="40" n3="434" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="451" v1="1105" v2="40" v3="455" n0="451" n1="1105" n2="40" n3="455" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="454" v1="1266" v2="40" v3="451" n0="454" n1="1266" n2="40" n3="451" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="433" v1="1098" v2="41" v3="455" n0="433" n1="1098" n2="41" n3="455" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="452" v1="1097" v2="41" v3="433" n0="452" n1="1097" n2="41" n3="433" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="450" v1="1104" v2="41" v3="452" n0="450" n1="1104" n2="41" n3="452" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="455" v1="1105" v2="41" v3="450" n0="455" n1="1105" n2="41" n3="450" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="441" v1="1099" v2="42" v3="453" n0="441" n1="1099" n2="42" n3="453" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="704" v1="1101" v2="42" v3="441" n0="704" n1="1101" n2="42" n3="441" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="453" v1="1106" v2="42" v3="704" n0="453" n1="1106" n2="42" n3="704" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="696" v1="1260" v2="43" v3="444" n0="696" n1="1260" n2="43" n3="444" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="440" v1="1101" v2="43" v3="696" n0="440" n1="1101" n2="43" n3="696" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="444" v1="1100" v2="43" v3="440" n0="444" n1="1100" n2="43" n3="440" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="462" v1="1103" v2="44" v3="439" n0="462" n1="1103" n2="44" n3="439" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="447" v1="1107" v2="44" v3="462" n0="447" n1="1107" n2="44" n3="462" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="458" v1="1102" v2="44" v3="447" n0="458" n1="1102" n2="44" n3="447" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="439" v1="1095" v2="44" v3="458" n0="439" n1="1095" n2="44" n3="458" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="463" v1="1093" v2="45" v3="424" n0="463" n1="1093" n2="45" n3="424" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="461" v1="1107" v2="45" v3="463" n0="461" n1="1107" n2="45" n3="463" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="415" v1="1089" v2="45" v3="461" n0="415" n1="1089" n2="45" n3="461" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="424" v1="1091" v2="45" v3="415" n0="424" n1="1091" n2="45" n3="415" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="467" v1="1110" v2="46" v3="468" n0="467" n1="1110" n2="46" n3="468" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="469" v1="1111" v2="46" v3="467" n0="469" n1="1111" n2="46" n3="467" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="470" v1="1115" v2="46" v3="469" n0="470" n1="1115" n2="46" n3="469" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="468" v1="1114" v2="46" v3="470" n0="468" n1="1114" n2="46" n3="470" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="470" v1="1114" v2="47" v3="471" n0="470" n1="1114" n2="47" n3="471" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="472" v1="1115" v2="47" v3="470" n0="472" n1="1115" n2="47" n3="470" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="473" v1="1113" v2="47" v3="472" n0="473" n1="1113" n2="47" n3="472" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="471" v1="1112" v2="47" v3="473" n0="471" n1="1112" n2="47" n3="473" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="473" v1="1112" v2="48" v3="474" n0="473" n1="1112" n2="48" n3="474" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="475" v1="1113" v2="48" v3="473" n0="475" n1="1113" n2="48" n3="473" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="465" v1="1109" v2="48" v3="475" n0="465" n1="1109" n2="48" n3="475" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="474" v1="1108" v2="48" v3="465" n0="474" n1="1108" n2="48" n3="465" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="468" v1="1110" v2="49" v3="464" n0="468" n1="1110" n2="49" n3="464" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="471" v1="1114" v2="49" v3="468" n0="471" n1="1114" n2="49" n3="468" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="474" v1="1112" v2="49" v3="471" n0="474" n1="1112" n2="49" n3="471" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="464" v1="1108" v2="49" v3="474" n0="464" n1="1108" n2="49" n3="474" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="469" v1="1115" v2="50" v3="472" n0="469" n1="1115" n2="50" n3="472" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="466" v1="1111" v2="50" v3="469" n0="466" n1="1111" n2="50" n3="469" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="475" v1="1109" v2="50" v3="466" n0="475" n1="1109" n2="50" n3="466" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="472" v1="1113" v2="50" v3="475" n0="472" n1="1113" n2="50" n3="475" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="465" v1="1108" v2="51" v3="480" n0="465" n1="1108" n2="51" n3="480" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="481" v1="1109" v2="51" v3="465" n0="481" n1="1109" n2="51" n3="465" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="477" v1="1117" v2="51" v3="481" n0="477" n1="1117" n2="51" n3="481" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="480" v1="1116" v2="51" v3="477" n0="480" n1="1116" n2="51" n3="477" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="466" v1="1109" v2="52" v3="481" n0="466" n1="1109" n2="52" n3="481" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="482" v1="1111" v2="52" v3="466" n0="482" n1="1111" n2="52" n3="466" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="478" v1="1119" v2="52" v3="482" n0="478" n1="1119" n2="52" n3="482" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="481" v1="1117" v2="52" v3="478" n0="481" n1="1117" n2="52" n3="478" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="464" v1="1110" v2="53" v3="483" n0="464" n1="1110" n2="53" n3="483" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="480" v1="1108" v2="53" v3="464" n0="480" n1="1108" n2="53" n3="464" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="476" v1="1116" v2="53" v3="480" n0="476" n1="1116" n2="53" n3="480" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="483" v1="1118" v2="53" v3="476" n0="483" n1="1118" n2="53" n3="476" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="467" v1="1111" v2="54" v3="482" n0="467" n1="1111" n2="54" n3="482" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="483" v1="1110" v2="54" v3="467" n0="483" n1="1110" n2="54" n3="467" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="479" v1="1118" v2="54" v3="483" n0="479" n1="1118" n2="54" n3="483" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="482" v1="1119" v2="54" v3="479" n0="482" n1="1119" n2="54" n3="479" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="477" v1="1116" v2="55" v3="485" n0="477" n1="1116" n2="55" n3="485" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="486" v1="1117" v2="55" v3="477" n0="486" n1="1117" n2="55" n3="477" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="484" v1="1121" v2="55" v3="486" n0="484" n1="1121" n2="55" n3="486" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="485" v1="1120" v2="55" v3="484" n0="485" n1="1120" n2="55" n3="484" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="479" v1="1119" v2="56" v3="488" n0="479" n1="1119" n2="56" n3="488" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="489" v1="1118" v2="56" v3="479" n0="489" n1="1118" n2="56" n3="479" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="487" v1="1122" v2="56" v3="489" n0="487" n1="1122" n2="56" n3="489" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="488" v1="1123" v2="56" v3="487" n0="488" n1="1123" n2="56" n3="487" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="506" v1="1129" v2="57" v3="500" n0="506" n1="1129" n2="57" n3="500" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="495" v1="1128" v2="57" v3="506" n0="495" n1="1128" n2="57" n3="506" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="494" v1="1126" v2="57" v3="495" n0="494" n1="1126" n2="57" n3="495" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="500" v1="1127" v2="57" v3="494" n0="500" n1="1127" n2="57" n3="494" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="493" v1="1125" v2="58" v3="491" n0="493" n1="1125" n2="58" n3="491" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="494" v1="1127" v2="58" v3="493" n0="494" n1="1127" n2="58" n3="493" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="492" v1="1126" v2="58" v3="494" n0="492" n1="1126" n2="58" n3="494" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="491" v1="1124" v2="58" v3="492" n0="491" n1="1124" n2="58" n3="492" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="505" v1="1130" v2="59" v3="501" n0="505" n1="1130" n2="59" n3="501" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="500" v1="1129" v2="59" v3="505" n0="500" n1="1129" n2="59" n3="505" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="493" v1="1127" v2="59" v3="500" n0="493" n1="1127" n2="59" n3="500" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="501" v1="1125" v2="59" v3="493" n0="501" n1="1125" n2="59" n3="493" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="504" v1="1128" v2="60" v3="495" n0="504" n1="1128" n2="60" n3="495" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="498" v1="1131" v2="60" v3="504" n0="498" n1="1131" n2="60" n3="504" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="492" v1="1124" v2="60" v3="498" n0="492" n1="1124" n2="60" n3="498" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="495" v1="1126" v2="60" v3="492" n0="495" n1="1126" n2="60" n3="492" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="503" v1="1131" v2="61" v3="498" n0="503" n1="1131" n2="61" n3="498" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="501" v1="1130" v2="61" v3="503" n0="501" n1="1130" n2="61" n3="503" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="491" v1="1125" v2="61" v3="501" n0="491" n1="1125" n2="61" n3="501" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="498" v1="1124" v2="61" v3="491" n0="498" n1="1124" n2="61" n3="491" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="478" v1="1117" v2="62" v3="502" n0="478" n1="1117" n2="62" n3="502" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="497" v1="1119" v2="62" v3="478" n0="497" n1="1119" n2="62" n3="478" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="503" v1="1130" v2="62" v3="497" n0="503" n1="1130" n2="62" n3="497" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="502" v1="1131" v2="62" v3="503" n0="502" n1="1131" n2="62" n3="503" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="486" v1="1121" v2="63" v3="499" n0="486" n1="1121" n2="63" n3="499" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="502" v1="1117" v2="63" v3="486" n0="502" n1="1117" n2="63" n3="486" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="504" v1="1131" v2="63" v3="502" n0="504" n1="1131" n2="63" n3="502" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="499" v1="1128" v2="63" v3="504" n0="499" n1="1128" n2="63" n3="504" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="488" v1="1119" v2="64" v3="497" n0="488" n1="1119" n2="64" n3="497" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="496" v1="1123" v2="64" v3="488" n0="496" n1="1123" n2="64" n3="488" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="505" v1="1129" v2="64" v3="496" n0="505" n1="1129" n2="64" n3="496" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="497" v1="1130" v2="64" v3="505" n0="497" n1="1130" n2="64" n3="505" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="490" v1="1123" v2="65" v3="496" n0="490" n1="1123" n2="65" n3="496" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="499" v1="1121" v2="65" v3="490" n0="499" n1="1121" n2="65" n3="490" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="506" v1="1128" v2="65" v3="499" n0="506" n1="1128" n2="65" n3="499" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="496" v1="1129" v2="65" v3="506" n0="496" n1="1129" n2="65" n3="506" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="476" v1="1118" v2="66" v3="489" n0="476" n1="1118" n2="66" n3="489" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="485" v1="1116" v2="66" v3="476" n0="485" n1="1116" n2="66" n3="476" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="507" v1="1120" v2="66" v3="485" n0="507" n1="1120" n2="66" n3="485" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="489" v1="1122" v2="66" v3="507" n0="489" n1="1122" n2="66" n3="507" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="487" v1="1123" v2="67" v3="512" n0="487" n1="1123" n2="67" n3="512" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="513" v1="1122" v2="67" v3="487" n0="513" n1="1122" n2="67" n3="487" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="509" v1="1134" v2="67" v3="513" n0="509" n1="1134" n2="67" n3="513" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="512" v1="1135" v2="67" v3="509" n0="512" n1="1135" n2="67" n3="509" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="507" v1="1122" v2="68" v3="513" n0="507" n1="1122" n2="68" n3="513" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="514" v1="1120" v2="68" v3="507" n0="514" n1="1120" n2="68" n3="507" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="511" v1="1132" v2="68" v3="514" n0="511" n1="1132" n2="68" n3="514" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="513" v1="1134" v2="68" v3="511" n0="513" n1="1134" n2="68" n3="511" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="490" v1="1121" v2="69" v3="515" n0="490" n1="1121" n2="69" n3="515" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="512" v1="1123" v2="69" v3="490" n0="512" n1="1123" n2="69" n3="490" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="510" v1="1135" v2="69" v3="512" n0="510" n1="1135" n2="69" n3="512" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="515" v1="1133" v2="69" v3="510" n0="515" n1="1133" n2="69" n3="510" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="484" v1="1120" v2="70" v3="514" n0="484" n1="1120" n2="70" n3="514" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="515" v1="1121" v2="70" v3="484" n0="515" n1="1121" n2="70" n3="484" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="508" v1="1133" v2="70" v3="515" n0="508" n1="1133" n2="70" n3="515" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="514" v1="1132" v2="70" v3="508" n0="514" n1="1132" n2="70" n3="508" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="511" v1="1134" v2="71" v3="521" n0="511" n1="1134" n2="71" n3="521" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="520" v1="1132" v2="71" v3="511" n0="520" n1="1132" n2="71" n3="511" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="519" v1="1136" v2="71" v3="520" n0="519" n1="1136" n2="71" n3="520" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="521" v1="1139" v2="71" v3="519" n0="521" n1="1139" n2="71" n3="519" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="518" v1="1137" v2="72" v3="529" n0="518" n1="1137" n2="72" n3="529" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="528" v1="1138" v2="72" v3="518" n0="528" n1="1138" n2="72" n3="518" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="526" v1="1142" v2="72" v3="528" n0="526" n1="1142" n2="72" n3="528" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="529" v1="1141" v2="72" v3="526" n0="529" n1="1141" n2="72" n3="526" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="509" v1="1135" v2="73" v3="522" n0="509" n1="1135" n2="73" n3="522" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="521" v1="1134" v2="73" v3="509" n0="521" n1="1134" n2="73" n3="509" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="517" v1="1139" v2="73" v3="521" n0="517" n1="1139" n2="73" n3="521" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="522" v1="1138" v2="73" v3="517" n0="522" n1="1138" n2="73" n3="517" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="510" v1="1133" v2="74" v3="523" n0="510" n1="1133" n2="74" n3="523" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="522" v1="1135" v2="74" v3="510" n0="522" n1="1135" n2="74" n3="510" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="518" v1="1138" v2="74" v3="522" n0="518" n1="1138" n2="74" n3="522" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="523" v1="1137" v2="74" v3="518" n0="523" n1="1137" n2="74" n3="518" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="508" v1="1132" v2="75" v3="520" n0="508" n1="1132" n2="75" n3="520" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="523" v1="1133" v2="75" v3="508" n0="523" n1="1133" n2="75" n3="508" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="516" v1="1137" v2="75" v3="523" n0="516" n1="1137" n2="75" n3="523" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="520" v1="1136" v2="75" v3="516" n0="520" n1="1136" n2="75" n3="516" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="526" v1="1141" v2="76" v3="537" n0="526" n1="1141" n2="76" n3="537" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="536" v1="1142" v2="76" v3="526" n0="536" n1="1142" n2="76" n3="526" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="534" v1="1157" v2="76" v3="536" n0="534" n1="1157" n2="76" n3="536" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="537" v1="1145" v2="76" v3="534" n0="537" n1="1145" n2="76" n3="534" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="516" v1="1136" v2="77" v3="530" n0="516" n1="1136" n2="77" n3="530" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="529" v1="1137" v2="77" v3="516" n0="529" n1="1137" n2="77" n3="516" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="524" v1="1141" v2="77" v3="529" n0="524" n1="1141" n2="77" n3="529" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="530" v1="1140" v2="77" v3="524" n0="530" n1="1140" n2="77" n3="524" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="519" v1="1139" v2="78" v3="531" n0="519" n1="1139" n2="78" n3="531" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="530" v1="1136" v2="78" v3="519" n0="530" n1="1136" n2="78" n3="519" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="527" v1="1140" v2="78" v3="530" n0="527" n1="1140" n2="78" n3="530" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="531" v1="1143" v2="78" v3="527" n0="531" n1="1143" n2="78" n3="527" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="517" v1="1138" v2="79" v3="528" n0="517" n1="1138" n2="79" n3="528" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="531" v1="1139" v2="79" v3="517" n0="531" n1="1139" n2="79" n3="517" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="525" v1="1143" v2="79" v3="531" n0="525" n1="1143" n2="79" n3="531" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="528" v1="1142" v2="79" v3="525" n0="528" n1="1142" n2="79" n3="525" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="524" v1="1140" v2="80" v3="538" n0="524" n1="1140" n2="80" n3="538" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="537" v1="1141" v2="80" v3="524" n0="537" n1="1141" n2="80" n3="524" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="532" v1="1145" v2="80" v3="537" n0="532" n1="1145" n2="80" n3="537" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="538" v1="1144" v2="80" v3="532" n0="538" n1="1144" n2="80" n3="532" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="527" v1="1143" v2="81" v3="539" n0="527" n1="1143" n2="81" n3="539" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="538" v1="1140" v2="81" v3="527" n0="538" n1="1140" n2="81" n3="527" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="535" v1="1144" v2="81" v3="538" n0="535" n1="1144" n2="81" n3="538" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="539" v1="1147" v2="81" v3="535" n0="539" n1="1147" n2="81" n3="535" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="525" v1="1142" v2="82" v3="536" n0="525" n1="1142" n2="82" n3="536" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="539" v1="1143" v2="82" v3="525" n0="539" n1="1143" n2="82" n3="525" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="533" v1="1147" v2="82" v3="539" n0="533" n1="1147" n2="82" n3="539" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="536" v1="1157" v2="82" v3="533" n0="536" n1="1157" n2="82" n3="533" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="568" v1="1159" v2="83" v3="554" n0="568" n1="1159" n2="83" n3="554" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="564" v1="1156" v2="83" v3="568" n0="564" n1="1156" n2="83" n3="568" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="567" v1="1321" v2="83" v3="564" n0="567" n1="1321" n2="83" n3="564" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="554" v1="1316" v2="83" v3="567" n0="554" n1="1316" n2="83" n3="567" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="540" v1="1145" v2="84" v3="532" n0="540" n1="1145" n2="84" n3="532" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="700" v1="1104" v2="84" v3="540" n0="700" n1="1104" n2="84" n3="540" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="541" v1="1106" v2="84" v3="700" n0="541" n1="1106" n2="84" n3="700" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="532" v1="1144" v2="84" v3="541" n0="532" n1="1144" n2="84" n3="541" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="544" v1="1148" v2="85" v3="543" n0="544" n1="1148" n2="85" n3="543" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="542" v1="1310" v2="85" v3="544" n0="542" n1="1310" n2="85" n3="544" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="451" v1="1266" v2="85" v3="542" n0="451" n1="1266" n2="85" n3="542" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="543" v1="1105" v2="85" v3="451" n0="543" n1="1105" n2="85" n3="451" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="450" v1="1105" v2="86" v3="543" n0="450" n1="1105" n2="86" n3="543" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="540" v1="1104" v2="86" v3="450" n0="540" n1="1104" n2="86" n3="450" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="545" v1="1145" v2="86" v3="540" n0="545" n1="1145" n2="86" n3="540" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="543" v1="1148" v2="86" v3="545" n0="543" n1="1148" n2="86" n3="545" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="547" v1="1147" v2="87" v3="533" n0="547" n1="1147" n2="87" n3="533" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="546" v1="1150" v2="87" v3="547" n0="546" n1="1150" n2="87" n3="547" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="548" v1="1149" v2="87" v3="546" n0="548" n1="1149" n2="87" n3="546" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="533" v1="1157" v2="87" v3="548" n0="533" n1="1157" n2="87" n3="548" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="550" v1="1150" v2="88" v3="546" n0="550" n1="1150" n2="88" n3="546" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="549" v1="1152" v2="88" v3="550" n0="549" n1="1152" n2="88" n3="550" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="551" v1="1151" v2="88" v3="549" n0="551" n1="1151" n2="88" n3="549" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="546" v1="1149" v2="88" v3="551" n0="546" n1="1149" n2="88" n3="551" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="553" v1="1156" v2="89" v3="564" n0="553" n1="1156" n2="89" n3="564" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="551" v1="1149" v2="89" v3="553" n0="551" n1="1149" n2="89" n3="553" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="552" v1="1151" v2="89" v3="551" n0="552" n1="1151" n2="89" n3="551" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="564" v1="1321" v2="89" v3="552" n0="564" n1="1321" n2="89" n3="552" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="553" v1="1149" v2="90" v3="548" n0="553" n1="1149" n2="90" n3="548" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="565" v1="1156" v2="90" v3="553" n0="565" n1="1156" n2="90" n3="553" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="548" v1="1157" v2="90" v3="565" n0="548" n1="1157" n2="90" n3="565" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="558" v1="1153" v2="91" v3="555" n0="558" n1="1153" n2="91" n3="555" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="557" v1="1155" v2="91" v3="558" n0="557" n1="1155" n2="91" n3="558" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="559" v1="1154" v2="91" v3="557" n0="559" n1="1154" n2="91" n3="557" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="555" v1="1146" v2="91" v3="559" n0="555" n1="1146" n2="91" n3="559" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="560" v1="1316" v2="92" v3="554" n0="560" n1="1316" n2="92" n3="554" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="556" v1="1319" v2="92" v3="560" n0="556" n1="1319" n2="92" n3="560" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="569" v1="1158" v2="92" v3="556" n0="569" n1="1158" n2="92" n3="556" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="554" v1="1159" v2="92" v3="569" n0="554" n1="1159" n2="92" n3="569" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="562" v1="1148" v2="93" v3="544" n0="562" n1="1148" n2="93" n3="544" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="556" v1="1158" v2="93" v3="562" n0="556" n1="1158" n2="93" n3="562" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="561" v1="1319" v2="93" v3="556" n0="561" n1="1319" n2="93" n3="556" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="544" v1="1310" v2="93" v3="561" n0="544" n1="1310" n2="93" n3="561" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="701" v1="1148" v2="94" v3="570" n0="701" n1="1148" n2="94" n3="570" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="557" v1="1154" v2="94" v3="701" n0="557" n1="1154" n2="94" n3="701" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="570" v1="1155" v2="94" v3="557" n0="570" n1="1155" n2="94" n3="557" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="702" v1="1145" v2="95" v3="563" n0="702" n1="1145" n2="95" n3="563" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="559" v1="1146" v2="95" v3="702" n0="559" n1="1146" n2="95" n3="702" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="563" v1="1154" v2="95" v3="559" n0="563" n1="1154" n2="95" n3="559" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="555" v1="1153" v2="96" v3="571" n0="555" n1="1153" n2="96" n3="571" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="566" v1="1146" v2="96" v3="555" n0="566" n1="1146" n2="96" n3="555" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="565" v1="1157" v2="96" v3="566" n0="565" n1="1157" n2="96" n3="566" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="571" v1="1156" v2="96" v3="565" n0="571" n1="1156" n2="96" n3="565" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="573" v1="1153" v2="97" v3="558" n0="573" n1="1153" n2="97" n3="558" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="569" v1="1159" v2="97" v3="573" n0="569" n1="1159" n2="97" n3="573" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="572" v1="1158" v2="97" v3="569" n0="572" n1="1158" n2="97" n3="569" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="558" v1="1155" v2="97" v3="572" n0="558" n1="1155" n2="97" n3="572" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="573" v1="1159" v2="98" v3="568" n0="573" n1="1159" n2="98" n3="568" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="571" v1="1153" v2="98" v3="573" n0="571" n1="1153" n2="98" n3="573" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="568" v1="1156" v2="98" v3="571" n0="568" n1="1156" n2="98" n3="571" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="562" v1="1158" v2="99" v3="572" n0="562" n1="1158" n2="99" n3="572" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="570" v1="1148" v2="99" v3="562" n0="570" n1="1148" n2="99" n3="562" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="572" v1="1155" v2="99" v3="570" n0="572" n1="1155" n2="99" n3="570" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="574" v1="1268" v2="100" v3="457" n0="574" n1="1268" n2="100" n3="457" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="577" v1="1326" v2="100" v3="574" n0="577" n1="1326" n2="100" n3="574" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="703" v1="1160" v2="100" v3="577" n0="703" n1="1160" n2="100" n3="577" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="457" v1="1106" v2="100" v3="703" n0="457" n1="1106" n2="100" n3="703" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="535" v1="1147" v2="101" v3="547" n0="535" n1="1147" n2="101" n3="547" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="578" v1="1144" v2="101" v3="535" n0="578" n1="1144" n2="101" n3="535" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="547" v1="1150" v2="101" v3="578" n0="547" n1="1150" n2="101" n3="578" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="579" v1="1161" v2="102" v3="582" n0="579" n1="1161" n2="102" n3="582" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="578" v1="1150" v2="102" v3="579" n0="578" n1="1150" n2="102" n3="579" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="580" v1="1144" v2="102" v3="578" n0="580" n1="1144" n2="102" n3="578" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="582" v1="1160" v2="102" v3="580" n0="582" n1="1160" n2="102" n3="580" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="579" v1="1150" v2="103" v3="550" n0="579" n1="1150" n2="103" n3="550" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="581" v1="1161" v2="103" v3="579" n0="581" n1="1161" n2="103" n3="579" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="576" v1="1327" v2="103" v3="581" n0="576" n1="1327" n2="103" n3="581" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="550" v1="1152" v2="103" v3="576" n0="550" n1="1152" n2="103" n3="576" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="581" v1="1327" v2="104" v3="575" n0="581" n1="1327" n2="104" n3="575" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="582" v1="1161" v2="104" v3="581" n0="582" n1="1161" n2="104" n3="581" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="577" v1="1160" v2="104" v3="582" n0="577" n1="1160" n2="104" n3="582" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="575" v1="1326" v2="104" v3="577" n0="575" n1="1326" n2="104" n3="577" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="585" v1="1330" v2="105" v3="590" n0="585" n1="1330" n2="105" n3="590" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="591" v1="1151" v2="105" v3="585" n0="591" n1="1151" n2="105" n3="585" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="589" v1="1162" v2="105" v3="591" n0="589" n1="1162" n2="105" n3="591" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="590" v1="1334" v2="105" v3="589" n0="590" n1="1334" n2="105" n3="589" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="585" v1="1151" v2="106" v3="552" n0="585" n1="1151" n2="106" n3="552" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="586" v1="1330" v2="106" v3="585" n0="586" n1="1330" n2="106" n3="585" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="552" v1="1321" v2="106" v3="586" n0="552" n1="1321" n2="106" n3="586" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="587" v1="1327" v2="107" v3="576" n0="587" n1="1327" n2="107" n3="576" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="584" v1="1331" v2="107" v3="587" n0="584" n1="1331" n2="107" n3="587" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="576" v1="1152" v2="107" v3="584" n0="576" n1="1152" n2="107" n3="584" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="584" v1="1152" v2="108" v3="592" n0="584" n1="1152" n2="108" n3="592" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="593" v1="1331" v2="108" v3="584" n0="593" n1="1331" n2="108" n3="584" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="588" v1="1335" v2="108" v3="593" n0="588" n1="1335" n2="108" n3="593" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="592" v1="1163" v2="108" v3="588" n0="592" n1="1163" n2="108" n3="588" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="549" v1="1151" v2="109" v3="591" n0="549" n1="1151" n2="109" n3="591" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="592" v1="1152" v2="109" v3="549" n0="592" n1="1152" n2="109" n3="549" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="583" v1="1163" v2="109" v3="592" n0="583" n1="1163" n2="109" n3="592" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="591" v1="1162" v2="109" v3="583" n0="591" n1="1162" n2="109" n3="583" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="601" v1="1164" v2="110" v3="602" n0="601" n1="1164" n2="110" n3="602" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="91" tv0="98" tu1="93" tv1="119" tu2="51" tv2="100" tu3="51" tv3="122" type="FT4" /> +<poly v0="603" v1="1165" v2="110" v3="601" n0="603" n1="1165" n2="110" n3="601" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="50" tv0="83" tu1="90" tv1="81" tu2="51" tv2="100" tu3="91" tv3="98" type="FT4" /> +<poly v0="595" v1="1337" v2="110" v3="603" n0="595" n1="1337" n2="110" n3="603" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="103" tu1="0" tv1="83" tu2="51" tv2="100" tu3="50" tv3="83" type="FT4" /> +<poly v0="602" v1="1336" v2="110" v3="595" n0="602" n1="1336" n2="110" n3="595" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="51" tv0="122" tu1="0" tv1="127" tu2="51" tv2="100" tu3="0" tv3="103" type="FT4" /> +<poly v0="612" v1="1162" v2="111" v3="589" n0="612" n1="1162" n2="111" n3="589" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="602" v1="1164" v2="111" v3="612" n0="602" n1="1164" n2="111" n3="612" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="594" v1="1336" v2="111" v3="602" n0="594" n1="1336" n2="111" n3="602" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="589" v1="1334" v2="111" v3="594" n0="589" n1="1334" n2="111" n3="594" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="598" v1="1167" v2="112" v3="600" n0="598" n1="1167" n2="112" n3="600" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="50" tv0="61" tu1="90" tv1="61" tu2="50" tv2="73" tu3="89" tv3="72" type="FT4" /> +<poly v0="596" v1="1339" v2="112" v3="598" n0="596" n1="1339" n2="112" n3="598" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="73" tu1="0" tv1="61" tu2="50" tv2="73" tu3="50" tv3="61" type="FT4" /> +<poly v0="603" v1="1337" v2="112" v3="596" n0="603" n1="1337" n2="112" n3="596" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="50" tv0="83" tu1="0" tv1="83" tu2="50" tv2="73" tu3="0" tv3="73" type="FT4" /> +<poly v0="600" v1="1165" v2="112" v3="603" n0="600" n1="1165" n2="112" n3="603" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="89" tv0="72" tu1="90" tv1="81" tu2="50" tv2="73" tu3="50" tv3="83" type="FT4" /> +<poly v0="598" v1="1339" v2="113" v3="605" n0="598" n1="1339" n2="113" n3="605" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="50" tv0="61" tu1="0" tv1="61" tu2="50" tv2="34" tu3="0" tv3="34" type="FT4" /> +<poly v0="606" v1="1167" v2="113" v3="598" n0="606" n1="1167" n2="113" n3="598" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="89" tv0="36" tu1="90" tv1="61" tu2="50" tv2="34" tu3="50" tv3="61" type="FT4" /> +<poly v0="604" v1="1168" v2="113" v3="606" n0="604" n1="1168" n2="113" n3="606" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="50" tv0="0" tu1="90" tv1="8" tu2="50" tv2="34" tu3="89" tv3="36" type="FT4" /> +<poly v0="605" v1="1344" v2="113" v3="604" n0="605" n1="1344" n2="113" n3="604" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="34" tu1="0" tv1="0" tu2="50" tv2="34" tu3="50" tv3="0" type="FT4" /> +<poly v0="608" v1="1165" v2="114" v3="600" n0="608" n1="1165" n2="114" n3="600" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="111" tv0="77" tu1="90" tv1="81" tu2="107" tv2="71" tu3="89" tv3="72" type="FT4" /> +<poly v0="609" v1="1169" v2="114" v3="608" n0="609" n1="1169" n2="114" n3="608" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="109" tv0="62" tu1="120" tv1="64" tu2="107" tv2="71" tu3="111" tv3="77" type="FT4" /> +<poly v0="600" v1="1167" v2="114" v3="609" n0="600" n1="1167" n2="114" n3="609" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="89" tv0="72" tu1="90" tv1="61" tu2="107" tv2="71" tu3="109" tv3="62" type="FT4" /> +<poly v0="606" v1="1168" v2="115" v3="647" n0="606" n1="1168" n2="115" n3="647" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="89" tv0="36" tu1="90" tv1="8" tu2="107" tv2="44" tu3="111" tv3="33" type="FT4" /> +<poly v0="609" v1="1167" v2="115" v3="606" n0="609" n1="1167" n2="115" n3="606" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="109" tv0="62" tu1="90" tv1="61" tu2="107" tv2="44" tu3="89" tv3="36" type="FT4" /> +<poly v0="647" v1="1169" v2="115" v3="609" n0="647" n1="1169" n2="115" n3="609" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="111" tv0="33" tu1="120" tv1="64" tu2="107" tv2="44" tu3="109" tv3="62" type="FT4" /> +<poly v0="645" v1="1171" v2="116" v3="607" n0="645" n1="1171" n2="116" n3="607" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="647" v1="1168" v2="116" v3="645" n0="647" n1="1168" n2="116" n3="645" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="607" v1="1169" v2="116" v3="647" n0="607" n1="1169" n2="116" n3="647" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="610" v1="1164" v2="117" v3="601" n0="610" n1="1164" n2="117" n3="601" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="115" tv0="118" tu1="93" tv1="119" tu2="113" tv2="95" tu3="91" tv3="98" type="FT4" /> +<poly v0="611" v1="1170" v2="117" v3="610" n0="611" n1="1170" n2="117" n3="610" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="125" tv0="92" tu1="127" tv1="119" tu2="113" tv2="95" tu3="115" tv3="118" type="FT4" /> +<poly v0="608" v1="1169" v2="117" v3="611" n0="608" n1="1169" n2="117" n3="611" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="111" tv0="77" tu1="120" tv1="64" tu2="113" tv2="95" tu3="125" tv3="92" type="FT4" /> +<poly v0="601" v1="1165" v2="117" v3="608" n0="601" n1="1165" n2="117" n3="608" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="91" tv0="98" tu1="90" tv1="81" tu2="113" tv2="95" tu3="111" tv3="77" type="FT4" /> +<poly v0="614" v1="1335" v2="118" v3="588" n0="614" n1="1335" n2="118" n3="588" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="597" v1="1338" v2="118" v3="614" n0="597" n1="1338" n2="118" n3="614" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="613" v1="1166" v2="118" v3="597" n0="613" n1="1166" n2="118" n3="597" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="588" v1="1163" v2="118" v3="613" n0="588" n1="1163" n2="118" n3="613" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="615" v1="1163" v2="119" v3="583" n0="615" n1="1163" n2="119" n3="583" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="610" v1="1170" v2="119" v3="615" n0="610" n1="1170" n2="119" n3="615" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="612" v1="1164" v2="119" v3="610" n0="612" n1="1164" n2="119" n3="610" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="583" v1="1162" v2="119" v3="612" n0="583" n1="1162" n2="119" n3="612" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="615" v1="1170" v2="120" v3="599" n0="615" n1="1170" n2="120" n3="599" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="613" v1="1163" v2="120" v3="615" n0="613" n1="1163" n2="120" n3="615" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="599" v1="1166" v2="120" v3="613" n0="599" n1="1166" n2="120" n3="613" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="622" v1="1368" v2="121" v3="653" n0="622" n1="1368" n2="121" n3="653" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="620" v1="1351" v2="121" v3="622" n0="620" n1="1351" n2="121" n3="622" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="630" v1="1174" v2="121" v3="620" n0="630" n1="1174" n2="121" n3="620" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="653" v1="1184" v2="121" v3="630" n0="653" n1="1184" n2="121" n3="630" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="618" v1="1350" v2="122" v3="619" n0="618" n1="1350" n2="122" n3="619" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="653" v1="1368" v2="122" v3="618" n0="653" n1="1368" n2="122" n3="618" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="621" v1="1184" v2="122" v3="653" n0="621" n1="1184" n2="122" n3="653" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="619" v1="1173" v2="122" v3="621" n0="619" n1="1173" n2="122" n3="621" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="624" v1="1171" v2="123" v3="625" n0="624" n1="1171" n2="123" n3="625" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="626" v1="1172" v2="123" v3="624" n0="626" n1="1172" n2="123" n3="624" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="616" v1="1349" v2="123" v3="626" n0="616" n1="1349" n2="123" n3="626" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="625" v1="1348" v2="123" v3="616" n0="625" n1="1348" n2="123" n3="616" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="727" v1="1213" v2="124" v3="623" n0="727" n1="1213" n2="124" n3="623" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="724" v1="1404" v2="124" v3="727" n0="724" n1="1404" n2="124" n3="727" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="626" v1="1349" v2="124" v3="724" n0="626" n1="1349" n2="124" n3="724" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="623" v1="1172" v2="124" v3="626" n0="623" n1="1172" n2="124" n3="626" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="619" v1="1350" v2="125" v3="628" n0="619" n1="1350" n2="125" n3="628" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="629" v1="1173" v2="125" v3="619" n0="629" n1="1173" n2="125" n3="619" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="627" v1="1175" v2="125" v3="629" n0="627" n1="1175" n2="125" n3="629" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="628" v1="1356" v2="125" v3="627" n0="628" n1="1356" n2="125" n3="627" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="646" v1="1171" v2="126" v3="655" n0="646" n1="1171" n2="126" n3="655" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="649" v1="1182" v2="126" v3="646" n0="649" n1="1182" n2="126" n3="646" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="656" v1="1176" v2="126" v3="649" n0="656" n1="1176" n2="126" n3="649" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="655" v1="1185" v2="126" v3="656" n0="655" n1="1185" n2="126" n3="656" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="633" v1="1175" v2="127" v3="636" n0="633" n1="1175" n2="127" n3="636" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="637" v1="1177" v2="127" v3="633" n0="637" n1="1177" n2="127" n3="633" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="635" v1="1179" v2="127" v3="637" n0="635" n1="1179" n2="127" n3="637" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="636" v1="1178" v2="127" v3="635" n0="636" n1="1178" n2="127" n3="635" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="627" v1="1356" v2="128" v3="638" n0="627" n1="1356" n2="128" n3="638" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="636" v1="1175" v2="128" v3="627" n0="636" n1="1175" n2="128" n3="627" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="634" v1="1178" v2="128" v3="636" n0="634" n1="1178" n2="128" n3="636" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="638" v1="1360" v2="128" v3="634" n0="638" n1="1360" n2="128" n3="634" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="635" v1="1178" v2="129" v3="641" n0="635" n1="1178" n2="129" n3="641" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="642" v1="1179" v2="129" v3="635" n0="642" n1="1179" n2="129" n3="635" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="640" v1="1181" v2="129" v3="642" n0="640" n1="1181" n2="129" n3="642" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="641" v1="1180" v2="129" v3="640" n0="641" n1="1180" n2="129" n3="640" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="634" v1="1360" v2="130" v3="643" n0="634" n1="1360" n2="130" n3="643" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="641" v1="1178" v2="130" v3="634" n0="641" n1="1178" n2="130" n3="634" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="639" v1="1180" v2="130" v3="641" n0="639" n1="1180" n2="130" n3="641" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="643" v1="1363" v2="130" v3="639" n0="643" n1="1363" n2="130" n3="639" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="632" v1="1176" v2="131" v3="631" n0="632" n1="1176" n2="131" n3="631" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="633" v1="1177" v2="131" v3="632" n0="633" n1="1177" n2="131" n3="632" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="629" v1="1175" v2="131" v3="633" n0="629" n1="1175" n2="131" n3="633" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="631" v1="1173" v2="131" v3="629" n0="631" n1="1173" n2="131" n3="629" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="645" v1="1168" v2="132" v3="604" n0="645" n1="1168" n2="132" n3="604" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="625" v1="1171" v2="132" v3="645" n0="625" n1="1171" n2="132" n3="645" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="644" v1="1348" v2="132" v3="625" n0="644" n1="1348" n2="132" n3="625" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="604" v1="1344" v2="132" v3="644" n0="604" n1="1344" n2="132" n3="644" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="654" v1="1184" v2="133" v3="621" n0="654" n1="1184" n2="133" n3="621" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="656" v1="1185" v2="133" v3="654" n0="656" n1="1185" n2="133" n3="654" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="631" v1="1176" v2="133" v3="656" n0="631" n1="1176" n2="133" n3="656" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="621" v1="1173" v2="133" v3="631" n0="621" n1="1173" n2="133" n3="631" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="652" v1="1169" v2="134" v3="607" n0="652" n1="1169" n2="134" n3="607" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="646" v1="1182" v2="134" v3="652" n0="646" n1="1182" n2="134" n3="652" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="607" v1="1171" v2="134" v3="646" n0="607" n1="1171" n2="134" n3="646" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="649" v1="1176" v2="135" v3="632" n0="649" n1="1176" n2="135" n3="632" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="648" v1="1182" v2="135" v3="649" n0="648" n1="1182" n2="135" n3="649" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="650" v1="1183" v2="135" v3="648" n0="650" n1="1183" n2="135" n3="648" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="632" v1="1177" v2="135" v3="650" n0="632" n1="1177" n2="135" n3="650" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="611" v1="1169" v2="136" v3="652" n0="611" n1="1169" n2="136" n3="652" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="651" v1="1170" v2="136" v3="611" n0="651" n1="1170" n2="136" n3="611" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="652" v1="1182" v2="136" v3="651" n0="652" n1="1182" n2="136" n3="651" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="726" v1="1214" v2="137" v3="658" n0="726" n1="1214" n2="137" n3="658" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="722" v1="1402" v2="137" v3="726" n0="722" n1="1402" n2="137" n3="726" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="659" v1="1371" v2="137" v3="722" n0="659" n1="1371" n2="137" n3="722" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="658" v1="1186" v2="137" v3="659" n0="658" n1="1186" n2="137" n3="659" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="723" v1="1186" v2="138" v3="660" n0="723" n1="1186" n2="138" n3="660" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="728" v1="1213" v2="138" v3="723" n0="728" n1="1213" n2="138" n3="723" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="660" v1="1185" v2="138" v3="728" n0="660" n1="1185" n2="138" n3="728" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="630" v1="1184" v2="139" v3="654" n0="630" n1="1184" n2="139" n3="654" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="725" v1="1174" v2="139" v3="630" n0="725" n1="1174" n2="139" n3="630" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="658" v1="1214" v2="139" v3="725" n0="658" n1="1214" n2="139" n3="725" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="660" v1="1186" v2="139" v3="658" n0="660" n1="1186" n2="139" n3="658" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="654" v1="1185" v2="139" v3="660" n0="654" n1="1185" n2="139" n3="660" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="651" v1="1182" v2="140" v3="648" n0="651" n1="1182" n2="140" n3="648" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="661" v1="1170" v2="140" v3="651" n0="661" n1="1170" n2="140" n3="651" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="648" v1="1183" v2="140" v3="661" n0="648" n1="1183" n2="140" n3="661" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="599" v1="1170" v2="141" v3="661" n0="599" n1="1170" n2="141" n3="661" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="662" v1="1166" v2="141" v3="599" n0="662" n1="1166" n2="141" n3="599" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="650" v1="1177" v2="141" v3="662" n0="650" n1="1177" n2="141" n3="662" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="661" v1="1183" v2="141" v3="650" n0="661" n1="1183" n2="141" n3="650" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="664" v1="1187" v2="142" v3="663" n0="664" n1="1187" n2="142" n3="663" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="665" v1="1188" v2="142" v3="664" n0="665" n1="1188" n2="142" n3="664" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="666" v1="1190" v2="142" v3="665" n0="666" n1="1190" n2="142" n3="665" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="663" v1="1189" v2="142" v3="666" n0="663" n1="1189" n2="142" n3="666" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="666" v1="1189" v2="143" v3="667" n0="666" n1="1189" n2="143" n3="667" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="668" v1="1190" v2="143" v3="666" n0="668" n1="1190" n2="143" n3="666" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="669" v1="1194" v2="143" v3="668" n0="669" n1="1194" n2="143" n3="668" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="667" v1="1193" v2="143" v3="669" n0="667" n1="1193" n2="143" n3="669" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="669" v1="1193" v2="144" v3="670" n0="669" n1="1193" n2="144" n3="670" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="671" v1="1194" v2="144" v3="669" n0="671" n1="1194" n2="144" n3="669" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="672" v1="1192" v2="144" v3="671" n0="672" n1="1192" n2="144" n3="671" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="670" v1="1191" v2="144" v3="672" n0="670" n1="1191" n2="144" n3="672" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="672" v1="1191" v2="145" v3="673" n0="672" n1="1191" n2="145" n3="673" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="674" v1="1192" v2="145" v3="672" n0="674" n1="1192" n2="145" n3="672" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="664" v1="1188" v2="145" v3="674" n0="664" n1="1188" n2="145" n3="674" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="673" v1="1187" v2="145" v3="664" n0="673" n1="1187" n2="145" n3="664" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="676" v1="1197" v2="146" v3="677" n0="676" n1="1197" n2="146" n3="677" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="675" v1="1196" v2="146" v3="676" n0="675" n1="1196" n2="146" n3="676" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="678" v1="1195" v2="146" v3="675" n0="678" n1="1195" n2="146" n3="675" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="677" v1="1198" v2="146" v3="678" n0="677" n1="1198" n2="146" n3="678" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="665" v1="1190" v2="147" v3="680" n0="665" n1="1190" n2="147" n3="680" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="679" v1="1188" v2="147" v3="665" n0="679" n1="1188" n2="147" n3="665" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="675" v1="1195" v2="147" v3="679" n0="675" n1="1195" n2="147" n3="679" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="680" v1="1196" v2="147" v3="675" n0="680" n1="1196" n2="147" n3="675" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="674" v1="1188" v2="148" v3="679" n0="674" n1="1188" n2="148" n3="679" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="681" v1="1192" v2="148" v3="674" n0="681" n1="1192" n2="148" n3="674" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="678" v1="1198" v2="148" v3="681" n0="678" n1="1198" n2="148" n3="681" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="679" v1="1195" v2="148" v3="678" n0="679" n1="1195" n2="148" n3="678" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="668" v1="1194" v2="149" v3="682" n0="668" n1="1194" n2="149" n3="682" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="680" v1="1190" v2="149" v3="668" n0="680" n1="1190" n2="149" n3="668" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="676" v1="1196" v2="149" v3="680" n0="676" n1="1196" n2="149" n3="680" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="682" v1="1197" v2="149" v3="676" n0="682" n1="1197" n2="149" n3="676" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="671" v1="1192" v2="150" v3="681" n0="671" n1="1192" n2="150" n3="681" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="682" v1="1194" v2="150" v3="671" n0="682" n1="1194" n2="150" n3="671" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="677" v1="1197" v2="150" v3="682" n0="677" n1="1197" n2="150" n3="682" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="681" v1="1198" v2="150" v3="677" n0="681" n1="1198" n2="150" n3="677" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="684" v1="1199" v2="151" v3="683" n0="684" n1="1199" n2="151" n3="683" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="685" v1="1200" v2="151" v3="684" n0="685" n1="1200" n2="151" n3="684" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="686" v1="1202" v2="151" v3="685" n0="686" n1="1202" n2="151" n3="685" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="683" v1="1201" v2="151" v3="686" n0="683" n1="1201" n2="151" n3="686" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="686" v1="1201" v2="152" v3="687" n0="686" n1="1201" n2="152" n3="687" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="688" v1="1202" v2="152" v3="686" n0="688" n1="1202" n2="152" n3="686" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="689" v1="1206" v2="152" v3="688" n0="689" n1="1206" n2="152" n3="688" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="687" v1="1205" v2="152" v3="689" n0="687" n1="1205" n2="152" n3="689" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="689" v1="1205" v2="153" v3="690" n0="689" n1="1205" n2="153" n3="690" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="691" v1="1206" v2="153" v3="689" n0="691" n1="1206" n2="153" n3="689" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="692" v1="1204" v2="153" v3="691" n0="692" n1="1204" n2="153" n3="691" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="690" v1="1203" v2="153" v3="692" n0="690" n1="1203" n2="153" n3="692" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="692" v1="1203" v2="154" v3="693" n0="692" n1="1203" n2="154" n3="693" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="694" v1="1204" v2="154" v3="692" n0="694" n1="1204" n2="154" n3="692" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="684" v1="1200" v2="154" v3="694" n0="684" n1="1200" n2="154" n3="694" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="693" v1="1199" v2="154" v3="684" n0="693" n1="1199" n2="154" n3="684" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="687" v1="1201" v2="155" v3="683" n0="687" n1="1201" n2="155" n3="683" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="690" v1="1205" v2="155" v3="687" n0="690" n1="1205" n2="155" n3="687" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="693" v1="1203" v2="155" v3="690" n0="693" n1="1203" n2="155" n3="690" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="683" v1="1199" v2="155" v3="693" n0="683" n1="1199" n2="155" n3="693" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="688" v1="1206" v2="156" v3="691" n0="688" n1="1206" n2="156" n3="691" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="685" v1="1202" v2="156" v3="688" n0="685" n1="1202" n2="156" n3="688" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="694" v1="1200" v2="156" v3="685" n0="694" n1="1200" n2="156" n3="685" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="691" v1="1204" v2="156" v3="694" n0="691" n1="1204" n2="156" n3="694" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="695" v1="1097" v2="157" v3="436" n0="695" n1="1097" n2="157" n3="436" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="428" v1="1096" v2="157" v3="695" n0="428" n1="1096" n2="157" n3="695" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="436" v1="1095" v2="157" v3="428" n0="436" n1="1095" n2="157" n3="428" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="698" v1="1100" v2="158" v3="460" n0="698" n1="1100" n2="158" n3="460" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="459" v1="1099" v2="158" v3="698" n0="459" n1="1099" n2="158" n3="698" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="460" v1="1102" v2="158" v3="459" n0="460" n1="1102" n2="158" n3="459" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="446" v1="1100" v2="159" v3="444" n0="446" n1="1100" n2="159" n3="444" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="426" v1="1093" v2="159" v3="446" n0="426" n1="1093" n2="159" n3="446" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="445" v1="1249" v2="159" v3="426" n0="445" n1="1249" n2="159" n3="426" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="444" v1="1260" v2="159" v3="445" n0="444" n1="1260" n2="159" n3="445" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="460" v1="1100" v2="160" v3="697" n0="460" n1="1100" n2="160" n3="697" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="447" v1="1102" v2="160" v3="460" n0="447" n1="1102" n2="160" n3="460" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="697" v1="1107" v2="160" v3="447" n0="697" n1="1107" n2="160" n3="447" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="463" v1="1107" v2="161" v3="697" n0="463" n1="1107" n2="161" n3="697" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="446" v1="1093" v2="161" v3="463" n0="446" n1="1093" n2="161" n3="463" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="697" v1="1100" v2="161" v3="446" n0="697" n1="1100" n2="161" n3="446" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="698" v1="1099" v2="162" v3="441" n0="698" n1="1099" n2="162" n3="441" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="440" v1="1100" v2="162" v3="698" n0="440" n1="1100" n2="162" n3="698" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="441" v1="1101" v2="162" v3="440" n0="441" n1="1101" n2="162" n3="440" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="453" v1="1099" v2="163" v3="699" n0="453" n1="1099" n2="163" n3="699" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="700" v1="1106" v2="163" v3="453" n0="700" n1="1106" n2="163" n3="453" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="452" v1="1104" v2="163" v3="700" n0="452" n1="1104" n2="163" n3="700" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="435" v1="1097" v2="163" v3="452" n0="435" n1="1097" n2="163" n3="452" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="699" v1="1207" v2="163" v3="435" n0="699" n1="1207" n2="163" n3="435" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="701" v1="1154" v2="164" v3="563" n0="701" n1="1154" n2="164" n3="563" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="545" v1="1148" v2="164" v3="701" n0="545" n1="1148" n2="164" n3="701" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="563" v1="1145" v2="164" v3="545" n0="563" n1="1145" n2="164" n3="545" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="702" v1="1146" v2="165" v3="566" n0="702" n1="1146" n2="165" n3="566" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="534" v1="1145" v2="165" v3="702" n0="534" n1="1145" n2="165" n3="702" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="566" v1="1157" v2="165" v3="534" n0="566" n1="1157" n2="165" n3="534" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="703" v1="1106" v2="166" v3="541" n0="703" n1="1106" n2="166" n3="541" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="580" v1="1160" v2="166" v3="703" n0="580" n1="1160" n2="166" n3="703" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="541" v1="1144" v2="166" v3="580" n0="541" n1="1144" n2="166" n3="580" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="443" v1="1101" v2="167" v3="704" n0="443" n1="1101" n2="167" n3="704" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="456" v1="1261" v2="167" v3="443" n0="456" n1="1261" n2="167" n3="443" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="457" v1="1268" v2="167" v3="456" n0="457" n1="1268" n2="167" n3="456" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="704" v1="1106" v2="167" v3="457" n0="704" n1="1106" n2="167" n3="457" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="705" v1="1208" v2="168" v3="721" n0="705" n1="1208" n2="168" n3="721" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="706" v1="1209" v2="168" v3="705" n0="706" n1="1209" n2="168" n3="705" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="720" v1="1210" v2="168" v3="706" n0="720" n1="1210" n2="168" n3="706" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="721" v1="1166" v2="168" v3="720" n0="721" n1="1166" n2="168" n3="720" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="707" v1="1397" v2="169" v3="709" n0="707" n1="1397" n2="169" n3="709" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="708" v1="1398" v2="169" v3="707" n0="708" n1="1398" n2="169" n3="707" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="705" v1="1209" v2="169" v3="708" n0="705" n1="1209" n2="169" n3="708" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="709" v1="1208" v2="169" v3="705" n0="709" n1="1208" n2="169" n3="705" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="710" v1="1209" v2="170" v3="706" n0="710" n1="1209" n2="170" n3="706" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="711" v1="1211" v2="170" v3="710" n0="711" n1="1211" n2="170" n3="710" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="712" v1="1212" v2="170" v3="711" n0="712" n1="1212" n2="170" n3="711" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="706" v1="1210" v2="170" v3="712" n0="706" n1="1210" n2="170" n3="712" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="713" v1="1398" v2="171" v3="708" n0="713" n1="1398" n2="171" n3="708" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="714" v1="1401" v2="171" v3="713" n0="714" n1="1401" n2="171" n3="713" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="710" v1="1211" v2="171" v3="714" n0="710" n1="1211" n2="171" n3="714" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="708" v1="1209" v2="171" v3="710" n0="708" n1="1209" n2="171" n3="710" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="640" v1="1180" v2="172" v3="716" n0="640" n1="1180" n2="172" n3="716" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="715" v1="1181" v2="172" v3="640" n0="715" n1="1181" n2="172" n3="640" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="711" v1="1212" v2="172" v3="715" n0="711" n1="1212" n2="172" n3="715" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="716" v1="1211" v2="172" v3="711" n0="716" n1="1211" n2="172" n3="711" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="639" v1="1363" v2="173" v3="717" n0="639" n1="1363" n2="173" n3="717" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="716" v1="1180" v2="173" v3="639" n0="716" n1="1180" n2="173" n3="639" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="714" v1="1211" v2="173" v3="716" n0="714" n1="1211" n2="173" n3="716" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="717" v1="1401" v2="173" v3="714" n0="717" n1="1401" n2="173" n3="714" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="637" v1="1179" v2="174" v3="719" n0="637" n1="1179" n2="174" n3="719" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="662" v1="1177" v2="174" v3="637" n0="662" n1="1177" n2="174" n3="637" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="720" v1="1166" v2="174" v3="662" n0="720" n1="1166" n2="174" n3="662" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="719" v1="1210" v2="174" v3="720" n0="719" n1="1210" n2="174" n3="720" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="642" v1="1181" v2="175" v3="715" n0="642" n1="1181" n2="175" n3="715" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="719" v1="1179" v2="175" v3="642" n0="719" n1="1179" n2="175" n3="642" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="712" v1="1210" v2="175" v3="719" n0="712" n1="1210" n2="175" n3="719" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="715" v1="1212" v2="175" v3="712" n0="715" n1="1212" n2="175" n3="712" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="718" v1="1338" v2="176" v3="729" n0="718" n1="1338" n2="176" n3="729" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="709" v1="1397" v2="176" v3="718" n0="709" n1="1397" n2="176" n3="718" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="729" v1="1208" v2="176" v3="709" n0="729" n1="1208" n2="176" n3="709" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="620" v1="1174" v2="177" v3="725" n0="620" n1="1174" n2="177" n3="725" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="617" v1="1351" v2="177" v3="620" n0="617" n1="1351" n2="177" n3="620" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="726" v1="1402" v2="177" v3="617" n0="726" n1="1402" n2="177" n3="617" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="725" v1="1214" v2="177" v3="726" n0="725" n1="1214" n2="177" n3="726" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="659" v1="1186" v2="178" v3="723" n0="659" n1="1186" n2="178" n3="723" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="657" v1="1371" v2="178" v3="659" n0="657" n1="1371" n2="178" n3="659" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="727" v1="1404" v2="178" v3="657" n0="727" n1="1404" n2="178" n3="657" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="723" v1="1213" v2="178" v3="727" n0="723" n1="1213" n2="178" n3="727" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="728" v1="1185" v2="179" v3="655" n0="728" n1="1185" n2="179" n3="655" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="623" v1="1213" v2="179" v3="728" n0="623" n1="1213" n2="179" n3="728" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="624" v1="1172" v2="179" v3="623" n0="624" n1="1172" n2="179" n3="623" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="655" v1="1171" v2="179" v3="624" n0="655" n1="1171" n2="179" n3="624" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="721" v1="1208" v2="180" v3="729" n0="721" n1="1208" n2="180" n3="729" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="597" v1="1166" v2="180" v3="721" n0="597" n1="1166" n2="180" n3="721" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="729" v1="1338" v2="180" v3="597" n0="729" n1="1338" n2="180" n3="597" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="731" v1="1215" v2="181" v3="730" n0="731" n1="1215" n2="181" n3="730" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="735" v1="1218" v2="181" v3="731" n0="735" n1="1218" n2="181" n3="731" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="733" v1="1217" v2="181" v3="735" n0="733" n1="1217" n2="181" n3="735" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="730" v1="1216" v2="181" v3="733" n0="730" n1="1216" n2="181" n3="733" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="779" v1="1232" v2="182" v3="767" n0="779" n1="1232" n2="182" n3="767" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="775" v1="1239" v2="182" v3="779" n0="775" n1="1239" n2="182" n3="779" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="778" v1="1241" v2="182" v3="775" n0="778" n1="1241" n2="182" n3="775" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="767" v1="1238" v2="182" v3="778" n0="767" n1="1238" n2="182" n3="778" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="732" v1="1227" v2="183" v3="758" n0="732" n1="1227" n2="183" n3="758" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="770" v1="1231" v2="183" v3="732" n0="770" n1="1231" n2="183" n3="732" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="734" v1="1237" v2="183" v3="770" n0="734" n1="1237" n2="183" n3="770" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="758" v1="1230" v2="183" v3="734" n0="758" n1="1230" n2="183" n3="734" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="742" v1="1219" v2="184" v3="738" n0="742" n1="1219" n2="184" n3="738" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="741" v1="1222" v2="184" v3="742" n0="741" n1="1222" n2="184" n3="742" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="731" v1="1218" v2="184" v3="741" n0="731" n1="1218" n2="184" n3="741" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="738" v1="1215" v2="184" v3="731" n0="738" n1="1215" n2="184" n3="731" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="758" v1="1227" v2="185" v3="754" n0="758" n1="1227" n2="185" n3="754" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="757" v1="1230" v2="185" v3="758" n0="757" n1="1230" n2="185" n3="758" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="742" v1="1222" v2="185" v3="757" n0="742" n1="1222" n2="185" n3="757" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="754" v1="1219" v2="185" v3="742" n0="754" n1="1219" n2="185" n3="742" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="735" v1="1217" v2="186" v3="740" n0="735" n1="1217" n2="186" n3="740" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="741" v1="1218" v2="186" v3="735" n0="741" n1="1218" n2="186" n3="735" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="743" v1="1222" v2="186" v3="741" n0="743" n1="1222" n2="186" n3="741" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="740" v1="1221" v2="186" v3="743" n0="740" n1="1221" n2="186" n3="743" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="751" v1="1216" v2="187" v3="739" n0="751" n1="1216" n2="187" n3="739" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="747" v1="1223" v2="187" v3="751" n0="747" n1="1223" n2="187" n3="751" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="750" v1="1225" v2="187" v3="747" n0="750" n1="1225" n2="187" n3="747" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="739" v1="1220" v2="187" v3="750" n0="739" n1="1220" n2="187" n3="750" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="730" v1="1215" v2="188" v3="738" n0="730" n1="1215" n2="188" n3="738" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="739" v1="1216" v2="188" v3="730" n0="739" n1="1216" n2="188" n3="730" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="745" v1="1220" v2="188" v3="739" n0="745" n1="1220" n2="188" n3="739" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="738" v1="1219" v2="188" v3="745" n0="738" n1="1219" n2="188" n3="745" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="746" v1="1223" v2="189" v3="747" n0="746" n1="1223" n2="189" n3="747" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="748" v1="1224" v2="189" v3="746" n0="748" n1="1224" n2="189" n3="746" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="749" v1="1226" v2="189" v3="748" n0="749" n1="1226" n2="189" n3="748" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="747" v1="1225" v2="189" v3="749" n0="747" n1="1225" n2="189" n3="749" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="750" v1="1220" v2="190" v3="744" n0="750" n1="1220" n2="190" n3="744" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="749" v1="1225" v2="190" v3="750" n0="749" n1="1225" n2="190" n3="750" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="752" v1="1226" v2="190" v3="749" n0="752" n1="1226" n2="190" n3="749" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="744" v1="1221" v2="190" v3="752" n0="744" n1="1221" n2="190" n3="752" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="753" v1="1217" v2="191" v3="733" n0="753" n1="1217" n2="191" n3="733" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="746" v1="1224" v2="191" v3="753" n0="746" n1="1224" n2="191" n3="753" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="751" v1="1223" v2="191" v3="746" n0="751" n1="1223" n2="191" n3="746" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="733" v1="1216" v2="191" v3="751" n0="733" n1="1216" n2="191" n3="751" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="752" v1="1221" v2="192" v3="740" n0="752" n1="1221" n2="192" n3="740" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="748" v1="1226" v2="192" v3="752" n0="748" n1="1226" n2="192" n3="752" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="753" v1="1224" v2="192" v3="748" n0="753" n1="1224" n2="192" n3="748" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="740" v1="1217" v2="192" v3="753" n0="740" n1="1217" n2="192" n3="753" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="736" v1="1229" v2="193" v3="760" n0="736" n1="1229" n2="193" n3="760" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="772" v1="1235" v2="193" v3="736" n0="772" n1="1235" n2="193" n3="736" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="737" v1="1233" v2="193" v3="772" n0="737" n1="1233" n2="193" n3="772" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="760" v1="1228" v2="193" v3="737" n0="760" n1="1228" n2="193" n3="737" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="743" v1="1221" v2="194" v3="756" n0="743" n1="1221" n2="194" n3="756" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="757" v1="1222" v2="194" v3="743" n0="757" n1="1222" n2="194" n3="743" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="759" v1="1230" v2="194" v3="757" n0="759" n1="1230" n2="194" n3="757" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="756" v1="1229" v2="194" v3="759" n0="756" n1="1229" n2="194" n3="759" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="744" v1="1220" v2="195" v3="755" n0="744" n1="1220" n2="195" n3="755" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="756" v1="1221" v2="195" v3="744" n0="756" n1="1221" n2="195" n3="744" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="760" v1="1229" v2="195" v3="756" n0="760" n1="1229" n2="195" n3="756" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="755" v1="1228" v2="195" v3="760" n0="755" n1="1228" n2="195" n3="760" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="745" v1="1219" v2="196" v3="754" n0="745" n1="1219" n2="196" n3="754" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="755" v1="1220" v2="196" v3="745" n0="755" n1="1220" n2="196" n3="745" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="761" v1="1228" v2="196" v3="755" n0="761" n1="1228" n2="196" n3="755" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="754" v1="1227" v2="196" v3="761" n0="754" n1="1227" n2="196" n3="761" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="773" v1="1231" v2="197" v3="762" n0="773" n1="1231" n2="197" n3="762" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="763" v1="1233" v2="197" v3="773" n0="763" n1="1233" n2="197" n3="773" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="766" v1="1234" v2="197" v3="763" n0="766" n1="1234" n2="197" n3="763" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="762" v1="1232" v2="197" v3="766" n0="762" n1="1232" n2="197" n3="766" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="772" v1="1233" v2="198" v3="763" n0="772" n1="1233" n2="198" n3="763" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="764" v1="1235" v2="198" v3="772" n0="764" n1="1235" n2="198" n3="772" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="768" v1="1236" v2="198" v3="764" n0="768" n1="1236" n2="198" n3="764" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="763" v1="1234" v2="198" v3="768" n0="763" n1="1234" n2="198" n3="768" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="771" v1="1235" v2="199" v3="764" n0="771" n1="1235" n2="199" n3="764" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="765" v1="1237" v2="199" v3="771" n0="765" n1="1237" n2="199" n3="771" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="769" v1="1238" v2="199" v3="765" n0="769" n1="1238" n2="199" n3="765" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="764" v1="1236" v2="199" v3="769" n0="764" n1="1236" n2="199" n3="769" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="767" v1="1232" v2="200" v3="762" n0="767" n1="1232" n2="200" n3="762" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="765" v1="1238" v2="200" v3="767" n0="765" n1="1238" n2="200" n3="767" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="770" v1="1237" v2="200" v3="765" n0="770" n1="1237" n2="200" n3="765" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="762" v1="1231" v2="200" v3="770" n0="762" n1="1231" n2="200" n3="770" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="737" v1="1228" v2="201" v3="761" n0="737" n1="1228" n2="201" n3="761" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="773" v1="1233" v2="201" v3="737" n0="773" n1="1233" n2="201" n3="737" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="732" v1="1231" v2="201" v3="773" n0="732" n1="1231" n2="201" n3="773" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="761" v1="1227" v2="201" v3="732" n0="761" n1="1227" n2="201" n3="732" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="734" v1="1230" v2="202" v3="759" n0="734" n1="1230" n2="202" n3="759" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="771" v1="1237" v2="202" v3="734" n0="771" n1="1237" n2="202" n3="734" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="736" v1="1235" v2="202" v3="771" n0="736" n1="1235" n2="202" n3="771" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="759" v1="1229" v2="202" v3="736" n0="759" n1="1229" n2="202" n3="736" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="787" v1="1242" v2="203" v3="776" n0="787" n1="1242" n2="203" n3="776" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="784" v1="1246" v2="203" v3="787" n0="784" n1="1246" n2="203" n3="787" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="786" v1="1244" v2="203" v3="784" n0="786" n1="1244" n2="203" n3="784" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="776" v1="1240" v2="203" v3="786" n0="776" n1="1240" n2="203" n3="786" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="781" v1="1236" v2="204" v3="768" n0="781" n1="1236" n2="204" n3="768" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="776" v1="1242" v2="204" v3="781" n0="776" n1="1242" n2="204" n3="781" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="780" v1="1240" v2="204" v3="776" n0="780" n1="1240" n2="204" n3="776" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="768" v1="1234" v2="204" v3="780" n0="768" n1="1234" n2="204" n3="780" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="780" v1="1234" v2="205" v3="766" n0="780" n1="1234" n2="205" n3="766" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="774" v1="1240" v2="205" v3="780" n0="774" n1="1240" n2="205" n3="780" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="779" v1="1239" v2="205" v3="774" n0="779" n1="1239" n2="205" n3="774" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="766" v1="1232" v2="205" v3="779" n0="766" n1="1232" n2="205" n3="779" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="778" v1="1238" v2="206" v3="769" n0="778" n1="1238" n2="206" n3="769" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="777" v1="1241" v2="206" v3="778" n0="777" n1="1241" n2="206" n3="778" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="781" v1="1242" v2="206" v3="777" n0="781" n1="1242" n2="206" n3="777" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="769" v1="1236" v2="206" v3="781" n0="769" n1="1236" n2="206" n3="781" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="791" v1="1246" v2="207" v3="784" n0="791" n1="1246" n2="207" n3="784" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="812" v1="1248" v2="207" v3="791" n0="812" n1="1248" n2="207" n3="791" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="811" v1="1263" v2="207" v3="812" n0="811" n1="1263" n2="207" n3="812" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="784" v1="1244" v2="207" v3="811" n0="784" n1="1244" n2="207" n3="811" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="786" v1="1240" v2="208" v3="774" n0="786" n1="1240" n2="208" n3="774" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="782" v1="1244" v2="208" v3="786" n0="782" n1="1244" n2="208" n3="786" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="788" v1="1243" v2="208" v3="782" n0="788" n1="1243" n2="208" n3="782" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="774" v1="1239" v2="208" v3="788" n0="774" n1="1239" n2="208" n3="788" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="789" v1="1241" v2="209" v3="777" n0="789" n1="1241" n2="209" n3="777" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="785" v1="1245" v2="209" v3="789" n0="785" n1="1245" n2="209" n3="789" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="787" v1="1246" v2="209" v3="785" n0="787" n1="1246" n2="209" n3="785" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="777" v1="1242" v2="209" v3="787" n0="777" n1="1242" n2="209" n3="787" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="788" v1="1239" v2="210" v3="775" n0="788" n1="1239" n2="210" n3="775" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="783" v1="1243" v2="210" v3="788" n0="783" n1="1243" n2="210" n3="788" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="789" v1="1245" v2="210" v3="783" n0="789" n1="1245" n2="210" n3="783" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="775" v1="1241" v2="210" v3="789" n0="775" n1="1241" n2="210" n3="789" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="792" v1="1245" v2="211" v3="785" n0="792" n1="1245" n2="211" n3="785" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="790" v1="1247" v2="211" v3="792" n0="790" n1="1247" n2="211" n3="792" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="791" v1="1248" v2="211" v3="790" n0="791" n1="1248" n2="211" n3="790" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="785" v1="1246" v2="211" v3="791" n0="785" n1="1246" n2="211" n3="791" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="793" v1="1247" v2="212" v3="790" n0="793" n1="1247" n2="212" n3="790" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="425" v1="1249" v2="212" v3="793" n0="425" n1="1249" n2="212" n3="793" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="794" v1="1250" v2="212" v3="425" n0="794" n1="1250" n2="212" n3="425" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="790" v1="1248" v2="212" v3="794" n0="790" n1="1248" n2="212" n3="794" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="794" v1="1248" v2="213" v3="796" n0="794" n1="1248" n2="213" n3="796" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="797" v1="1250" v2="213" v3="794" n0="797" n1="1250" n2="213" n3="794" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="796" v1="1252" v2="213" v3="797" n0="796" n1="1252" n2="213" n3="797" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="797" v1="1252" v2="214" v3="798" n0="797" n1="1252" n2="214" n3="798" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="432" v1="1250" v2="214" v3="797" n0="432" n1="1250" n2="214" n3="797" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="798" v1="1253" v2="214" v3="432" n0="798" n1="1253" n2="214" n3="432" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="802" v1="1251" v2="215" v3="819" n0="802" n1="1251" n2="215" n3="819" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="801" v1="1254" v2="215" v3="802" n0="801" n1="1254" n2="215" n3="802" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="1036" v1="1393" v2="215" v3="801" n0="1036" n1="1393" n2="215" n3="801" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="820" v1="1257" v2="215" v3="1036" n0="820" n1="1257" n2="215" n3="1036" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="819" v1="1262" v2="215" v3="820" n0="819" n1="1262" n2="215" n3="820" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="437" v1="1253" v2="216" v3="798" n0="437" n1="1253" n2="216" n3="798" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="800" v1="1256" v2="216" v3="437" n0="800" n1="1256" n2="216" n3="437" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="803" v1="1255" v2="216" v3="800" n0="803" n1="1255" n2="216" n3="800" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="798" v1="1252" v2="216" v3="803" n0="798" n1="1252" n2="216" n3="803" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="803" v1="1252" v2="217" v3="1032" n0="803" n1="1252" n2="217" n3="1032" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="799" v1="1255" v2="217" v3="803" n0="799" n1="1255" n2="217" n3="803" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1032" v1="1254" v2="217" v3="799" n0="1032" n1="1254" n2="217" n3="799" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="807" v1="1259" v2="218" v3="1033" n0="807" n1="1259" n2="218" n3="1033" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="442" v1="1261" v2="218" v3="807" n0="442" n1="1261" n2="218" n3="807" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1033" v1="1260" v2="218" v3="442" n0="1033" n1="1260" n2="218" n3="442" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="811" v1="1244" v2="219" v3="782" n0="811" n1="1244" n2="219" n3="782" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="823" v1="1263" v2="219" v3="811" n0="823" n1="1263" n2="219" n3="811" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="822" v1="1269" v2="219" v3="823" n0="822" n1="1269" n2="219" n3="823" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="782" v1="1243" v2="219" v3="822" n0="782" n1="1243" n2="219" n3="822" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="796" v1="1248" v2="220" v3="812" n0="796" n1="1248" n2="220" n3="812" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="795" v1="1252" v2="220" v3="796" n0="795" n1="1252" n2="220" n3="796" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="804" v1="1251" v2="220" v3="795" n0="804" n1="1251" n2="220" n3="795" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="812" v1="1263" v2="220" v3="804" n0="812" n1="1263" n2="220" n3="804" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="454" v1="1256" v2="221" v3="800" n0="454" n1="1256" n2="221" n3="800" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="814" v1="1266" v2="221" v3="454" n0="814" n1="1266" n2="221" n3="454" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="817" v1="1265" v2="221" v3="814" n0="817" n1="1265" n2="221" n3="814" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="800" v1="1255" v2="221" v3="817" n0="800" n1="1255" n2="221" n3="817" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="817" v1="1255" v2="222" v3="799" n0="817" n1="1255" n2="222" n3="799" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="813" v1="1265" v2="222" v3="817" n0="813" n1="1265" n2="222" n3="817" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="815" v1="1264" v2="222" v3="813" n0="815" n1="1264" n2="222" n3="813" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="799" v1="1254" v2="222" v3="815" n0="799" n1="1254" n2="222" n3="815" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="816" v1="1257" v2="223" v3="806" n0="816" n1="1257" n2="223" n3="806" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1041" v1="1267" v2="223" v3="816" n0="1041" n1="1267" n2="223" n3="816" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="806" v1="1259" v2="223" v3="1041" n0="806" n1="1259" n2="223" n3="1041" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="808" v1="1260" v2="224" v3="1033" n0="808" n1="1260" n2="224" n3="1033" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="805" v1="1258" v2="224" v3="808" n0="805" n1="1258" n2="224" n3="808" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1033" v1="1259" v2="224" v3="805" n0="1033" n1="1259" n2="224" n3="805" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="804" v1="1263" v2="225" v3="823" n0="804" n1="1263" n2="225" n3="823" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="819" v1="1251" v2="225" v3="804" n0="819" n1="1251" n2="225" n3="804" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="810" v1="1262" v2="225" v3="819" n0="810" n1="1262" n2="225" n3="819" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="823" v1="1269" v2="225" v3="810" n0="823" n1="1269" n2="225" n3="810" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="792" v1="1247" v2="226" v3="824" n0="792" n1="1247" n2="226" n3="824" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="783" v1="1245" v2="226" v3="792" n0="783" n1="1245" n2="226" n3="792" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="822" v1="1243" v2="226" v3="783" n0="822" n1="1243" n2="226" n3="783" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="824" v1="1269" v2="226" v3="822" n0="824" n1="1269" n2="226" n3="822" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="829" v1="1272" v2="227" v3="828" n0="829" n1="1272" n2="227" n3="828" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="831" v1="1276" v2="227" v3="829" n0="831" n1="1276" n2="227" n3="829" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="830" v1="1277" v2="227" v3="831" n0="830" n1="1277" n2="227" n3="831" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="828" v1="1273" v2="227" v3="830" n0="828" n1="1273" n2="227" n3="830" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="832" v1="1276" v2="228" v3="831" n0="832" n1="1276" n2="228" n3="831" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="834" v1="1274" v2="228" v3="832" n0="834" n1="1274" n2="228" n3="832" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="833" v1="1275" v2="228" v3="834" n0="833" n1="1275" n2="228" n3="834" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="831" v1="1277" v2="228" v3="833" n0="831" n1="1277" n2="228" n3="833" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="835" v1="1274" v2="229" v3="834" n0="835" n1="1274" n2="229" n3="834" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="826" v1="1270" v2="229" v3="835" n0="826" n1="1270" n2="229" n3="835" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="836" v1="1271" v2="229" v3="826" n0="836" n1="1271" n2="229" n3="826" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="834" v1="1275" v2="229" v3="836" n0="834" n1="1275" n2="229" n3="836" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="825" v1="1272" v2="230" v3="829" n0="825" n1="1272" n2="230" n3="829" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="835" v1="1270" v2="230" v3="825" n0="835" n1="1270" n2="230" n3="825" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="832" v1="1274" v2="230" v3="835" n0="832" n1="1274" n2="230" n3="835" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="829" v1="1276" v2="230" v3="832" n0="829" n1="1276" n2="230" n3="832" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="833" v1="1277" v2="231" v3="830" n0="833" n1="1277" n2="231" n3="830" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="836" v1="1275" v2="231" v3="833" n0="836" n1="1275" n2="231" n3="833" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="827" v1="1271" v2="231" v3="836" n0="827" n1="1271" n2="231" n3="836" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="830" v1="1273" v2="231" v3="827" n0="830" n1="1273" n2="231" n3="827" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="841" v1="1270" v2="232" v3="826" n0="841" n1="1270" n2="232" n3="826" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="838" v1="1278" v2="232" v3="841" n0="838" n1="1278" n2="232" n3="841" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="842" v1="1279" v2="232" v3="838" n0="842" n1="1279" n2="232" n3="838" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="826" v1="1271" v2="232" v3="842" n0="826" n1="1271" n2="232" n3="842" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="842" v1="1271" v2="233" v3="827" n0="842" n1="1271" n2="233" n3="827" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="839" v1="1279" v2="233" v3="842" n0="839" n1="1279" n2="233" n3="842" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="843" v1="1281" v2="233" v3="839" n0="843" n1="1281" n2="233" n3="839" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="827" v1="1273" v2="233" v3="843" n0="827" n1="1273" n2="233" n3="843" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="844" v1="1272" v2="234" v3="825" n0="844" n1="1272" n2="234" n3="825" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="837" v1="1280" v2="234" v3="844" n0="837" n1="1280" n2="234" n3="844" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="841" v1="1278" v2="234" v3="837" n0="841" n1="1278" n2="234" n3="837" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="825" v1="1270" v2="234" v3="841" n0="825" n1="1270" n2="234" n3="841" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="843" v1="1273" v2="235" v3="828" n0="843" n1="1273" n2="235" n3="828" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="840" v1="1281" v2="235" v3="843" n0="840" n1="1281" n2="235" n3="843" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="844" v1="1280" v2="235" v3="840" n0="844" n1="1280" n2="235" n3="840" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="828" v1="1272" v2="235" v3="844" n0="828" n1="1272" n2="235" n3="844" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="846" v1="1278" v2="236" v3="838" n0="846" n1="1278" n2="236" n3="838" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="845" v1="1282" v2="236" v3="846" n0="845" n1="1282" n2="236" n3="846" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="847" v1="1283" v2="236" v3="845" n0="847" n1="1283" n2="236" n3="845" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="838" v1="1279" v2="236" v3="847" n0="838" n1="1279" n2="236" n3="847" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="849" v1="1281" v2="237" v3="840" n0="849" n1="1281" n2="237" n3="840" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="848" v1="1285" v2="237" v3="849" n0="848" n1="1285" n2="237" n3="849" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="850" v1="1284" v2="237" v3="848" n0="850" n1="1284" n2="237" n3="848" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="840" v1="1280" v2="237" v3="850" n0="840" n1="1280" n2="237" n3="850" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="861" v1="1291" v2="238" v3="867" n0="861" n1="1291" n2="238" n3="867" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="855" v1="1289" v2="238" v3="861" n0="855" n1="1289" n2="238" n3="861" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="856" v1="1288" v2="238" v3="855" n0="856" n1="1288" n2="238" n3="855" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="867" v1="1290" v2="238" v3="856" n0="867" n1="1290" n2="238" n3="856" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="852" v1="1287" v2="239" v3="854" n0="852" n1="1287" n2="239" n3="854" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="853" v1="1286" v2="239" v3="852" n0="853" n1="1286" n2="239" n3="852" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="855" v1="1288" v2="239" v3="853" n0="855" n1="1288" n2="239" n3="853" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="854" v1="1289" v2="239" v3="855" n0="854" n1="1289" n2="239" n3="855" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="862" v1="1292" v2="240" v3="866" n0="862" n1="1292" n2="240" n3="866" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="854" v1="1287" v2="240" v3="862" n0="854" n1="1287" n2="240" n3="862" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="861" v1="1289" v2="240" v3="854" n0="861" n1="1289" n2="240" n3="854" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="866" v1="1291" v2="240" v3="861" n0="866" n1="1291" n2="240" n3="861" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="856" v1="1290" v2="241" v3="865" n0="856" n1="1290" n2="241" n3="865" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="853" v1="1288" v2="241" v3="856" n0="853" n1="1288" n2="241" n3="856" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="859" v1="1286" v2="241" v3="853" n0="859" n1="1286" n2="241" n3="853" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="865" v1="1293" v2="241" v3="859" n0="865" n1="1293" n2="241" n3="859" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="859" v1="1293" v2="242" v3="864" n0="859" n1="1293" n2="242" n3="864" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="852" v1="1286" v2="242" v3="859" n0="852" n1="1286" n2="242" n3="859" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="862" v1="1287" v2="242" v3="852" n0="862" n1="1287" n2="242" n3="852" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="864" v1="1292" v2="242" v3="862" n0="864" n1="1292" n2="242" n3="862" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="863" v1="1279" v2="243" v3="839" n0="863" n1="1279" n2="243" n3="839" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="864" v1="1293" v2="243" v3="863" n0="864" n1="1293" n2="243" n3="863" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="858" v1="1292" v2="243" v3="864" n0="858" n1="1292" n2="243" n3="864" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="839" v1="1281" v2="243" v3="858" n0="839" n1="1281" n2="243" n3="858" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="860" v1="1283" v2="244" v3="847" n0="860" n1="1283" n2="244" n3="847" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="865" v1="1290" v2="244" v3="860" n0="865" n1="1290" n2="244" n3="860" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="863" v1="1293" v2="244" v3="865" n0="863" n1="1293" n2="244" n3="865" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="847" v1="1279" v2="244" v3="863" n0="847" n1="1279" n2="244" n3="863" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="858" v1="1281" v2="245" v3="849" n0="858" n1="1281" n2="245" n3="849" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="866" v1="1292" v2="245" v3="858" n0="866" n1="1292" n2="245" n3="858" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="857" v1="1291" v2="245" v3="866" n0="857" n1="1291" n2="245" n3="866" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="849" v1="1285" v2="245" v3="857" n0="849" n1="1285" n2="245" n3="857" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="857" v1="1285" v2="246" v3="851" n0="857" n1="1285" n2="246" n3="851" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="867" v1="1291" v2="246" v3="857" n0="867" n1="1291" n2="246" n3="857" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="860" v1="1290" v2="246" v3="867" n0="860" n1="1290" n2="246" n3="867" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="851" v1="1283" v2="246" v3="860" n0="851" n1="1283" n2="246" n3="860" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="850" v1="1280" v2="247" v3="837" n0="850" n1="1280" n2="247" n3="837" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="868" v1="1284" v2="247" v3="850" n0="868" n1="1284" n2="247" n3="850" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="846" v1="1282" v2="247" v3="868" n0="846" n1="1282" n2="247" n3="868" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="837" v1="1278" v2="247" v3="846" n0="837" n1="1278" n2="247" n3="846" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="873" v1="1285" v2="248" v3="848" n0="873" n1="1285" n2="248" n3="848" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="870" v1="1297" v2="248" v3="873" n0="870" n1="1297" n2="248" n3="873" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="874" v1="1296" v2="248" v3="870" n0="874" n1="1296" n2="248" n3="870" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="848" v1="1284" v2="248" v3="874" n0="848" n1="1284" n2="248" n3="874" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="874" v1="1284" v2="249" v3="868" n0="874" n1="1284" n2="249" n3="868" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="872" v1="1296" v2="249" v3="874" n0="872" n1="1296" n2="249" n3="874" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="875" v1="1294" v2="249" v3="872" n0="875" n1="1294" n2="249" n3="872" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="868" v1="1282" v2="249" v3="875" n0="868" n1="1282" n2="249" n3="875" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="876" v1="1283" v2="250" v3="851" n0="876" n1="1283" n2="250" n3="851" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="871" v1="1295" v2="250" v3="876" n0="871" n1="1295" n2="250" n3="876" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="873" v1="1297" v2="250" v3="871" n0="873" n1="1297" n2="250" n3="871" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="851" v1="1285" v2="250" v3="873" n0="851" n1="1285" n2="250" n3="873" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="875" v1="1282" v2="251" v3="845" n0="875" n1="1282" n2="251" n3="845" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="869" v1="1294" v2="251" v3="875" n0="869" n1="1294" n2="251" n3="875" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="876" v1="1295" v2="251" v3="869" n0="876" n1="1295" n2="251" n3="869" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="845" v1="1283" v2="251" v3="876" n0="845" n1="1283" n2="251" n3="876" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="882" v1="1296" v2="252" v3="872" n0="882" n1="1296" n2="252" n3="872" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="880" v1="1301" v2="252" v3="882" n0="880" n1="1301" n2="252" n3="882" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="881" v1="1298" v2="252" v3="880" n0="881" n1="1298" n2="252" n3="880" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="872" v1="1294" v2="252" v3="881" n0="872" n1="1294" n2="252" n3="881" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="890" v1="1299" v2="253" v3="879" n0="890" n1="1299" n2="253" n3="879" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="887" v1="1303" v2="253" v3="890" n0="887" n1="1303" n2="253" n3="890" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="889" v1="1304" v2="253" v3="887" n0="889" n1="1304" n2="253" n3="887" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="879" v1="1300" v2="253" v3="889" n0="879" n1="1300" n2="253" n3="889" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="883" v1="1297" v2="254" v3="870" n0="883" n1="1297" n2="254" n3="870" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="878" v1="1300" v2="254" v3="883" n0="878" n1="1300" n2="254" n3="883" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="882" v1="1301" v2="254" v3="878" n0="882" n1="1301" n2="254" n3="878" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="870" v1="1296" v2="254" v3="882" n0="870" n1="1296" n2="254" n3="882" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="884" v1="1295" v2="255" v3="871" n0="884" n1="1295" n2="255" n3="871" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="879" v1="1299" v2="255" v3="884" n0="879" n1="1299" n2="255" n3="884" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="883" v1="1300" v2="255" v3="879" n0="883" n1="1300" n2="255" n3="879" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="871" v1="1297" v2="255" v3="883" n0="871" n1="1297" n2="255" n3="883" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="881" v1="1294" v2="256" v3="869" n0="881" n1="1294" n2="256" n3="869" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="877" v1="1298" v2="256" v3="881" n0="877" n1="1298" n2="256" n3="881" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="884" v1="1299" v2="256" v3="877" n0="884" n1="1299" n2="256" n3="877" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="869" v1="1295" v2="256" v3="884" n0="869" n1="1295" n2="256" n3="884" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="898" v1="1303" v2="257" v3="887" n0="898" n1="1303" n2="257" n3="887" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="895" v1="1307" v2="257" v3="898" n0="895" n1="1307" n2="257" n3="898" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="897" v1="1323" v2="257" v3="895" n0="897" n1="1323" n2="257" n3="895" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="887" v1="1304" v2="257" v3="897" n0="887" n1="1304" n2="257" n3="897" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="891" v1="1298" v2="258" v3="877" n0="891" n1="1298" n2="258" n3="877" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="885" v1="1302" v2="258" v3="891" n0="885" n1="1302" n2="258" n3="891" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="890" v1="1303" v2="258" v3="885" n0="890" n1="1303" n2="258" n3="885" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="877" v1="1299" v2="258" v3="890" n0="877" n1="1299" n2="258" n3="890" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="892" v1="1301" v2="259" v3="880" n0="892" n1="1301" n2="259" n3="880" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="888" v1="1305" v2="259" v3="892" n0="888" n1="1305" n2="259" n3="892" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="891" v1="1302" v2="259" v3="888" n0="891" n1="1302" n2="259" n3="888" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="880" v1="1298" v2="259" v3="891" n0="880" n1="1298" n2="259" n3="891" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="889" v1="1300" v2="260" v3="878" n0="889" n1="1300" n2="260" n3="878" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="886" v1="1304" v2="260" v3="889" n0="886" n1="1304" n2="260" n3="889" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="892" v1="1305" v2="260" v3="886" n0="892" n1="1305" n2="260" n3="886" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="878" v1="1301" v2="260" v3="892" n0="878" n1="1301" n2="260" n3="892" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="899" v1="1302" v2="261" v3="885" n0="899" n1="1302" n2="261" n3="885" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="893" v1="1306" v2="261" v3="899" n0="893" n1="1306" n2="261" n3="899" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="898" v1="1307" v2="261" v3="893" n0="898" n1="1307" n2="261" n3="893" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="885" v1="1303" v2="261" v3="898" n0="885" n1="1303" n2="261" n3="898" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="900" v1="1305" v2="262" v3="888" n0="900" n1="1305" n2="262" n3="888" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="896" v1="1309" v2="262" v3="900" n0="896" n1="1309" n2="262" n3="900" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="899" v1="1306" v2="262" v3="896" n0="899" n1="1306" n2="262" n3="896" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="888" v1="1302" v2="262" v3="899" n0="888" n1="1302" n2="262" n3="899" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="897" v1="1304" v2="263" v3="886" n0="897" n1="1304" n2="263" n3="886" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="894" v1="1323" v2="263" v3="897" n0="894" n1="1323" n2="263" n3="897" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="900" v1="1309" v2="263" v3="894" n0="900" n1="1309" n2="263" n3="894" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="886" v1="1305" v2="263" v3="900" n0="886" n1="1305" n2="263" n3="900" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="914" v1="1325" v2="264" v3="925" n0="914" n1="1325" n2="264" n3="925" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="567" v1="1316" v2="264" v3="914" n0="567" n1="1316" n2="264" n3="914" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="922" v1="1321" v2="264" v3="567" n0="922" n1="1321" n2="264" n3="567" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="925" v1="1322" v2="264" v3="922" n0="925" n1="1322" n2="264" n3="922" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="893" v1="1307" v2="265" v3="901" n0="893" n1="1307" n2="265" n3="901" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="902" v1="1306" v2="265" v3="893" n0="902" n1="1306" n2="265" n3="893" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1037" v1="1267" v2="265" v3="902" n0="1037" n1="1267" n2="265" n3="902" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="901" v1="1264" v2="265" v3="1037" n0="901" n1="1264" n2="265" n3="1037" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="903" v1="1311" v2="266" v3="904" n0="903" n1="1311" n2="266" n3="904" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="814" v1="1265" v2="266" v3="903" n0="814" n1="1265" n2="266" n3="903" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="542" v1="1266" v2="266" v3="814" n0="542" n1="1266" n2="266" n3="814" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="904" v1="1310" v2="266" v3="542" n0="904" n1="1310" n2="266" n3="542" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="903" v1="1265" v2="267" v3="813" n0="903" n1="1265" n2="267" n3="813" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="905" v1="1311" v2="267" v3="903" n0="905" n1="1311" n2="267" n3="903" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="901" v1="1307" v2="267" v3="905" n0="901" n1="1307" n2="267" n3="905" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="813" v1="1264" v2="267" v3="901" n0="813" n1="1264" n2="267" n3="901" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="894" v1="1309" v2="268" v3="907" n0="894" n1="1309" n2="268" n3="907" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="908" v1="1323" v2="268" v3="894" n0="908" n1="1323" n2="268" n3="894" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="906" v1="1312" v2="268" v3="908" n0="906" n1="1312" n2="268" n3="908" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="907" v1="1313" v2="268" v3="906" n0="907" n1="1313" n2="268" n3="906" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="906" v1="1313" v2="269" v3="910" n0="906" n1="1313" n2="269" n3="910" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="911" v1="1312" v2="269" v3="906" n0="911" n1="1312" n2="269" n3="906" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="909" v1="1314" v2="269" v3="911" n0="909" n1="1314" n2="269" n3="911" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="910" v1="1315" v2="269" v3="909" n0="910" n1="1315" n2="269" n3="909" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="922" v1="1322" v2="270" v3="913" n0="922" n1="1322" n2="270" n3="913" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="912" v1="1321" v2="270" v3="922" n0="912" n1="1321" n2="270" n3="922" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="911" v1="1314" v2="270" v3="912" n0="911" n1="1314" n2="270" n3="912" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="913" v1="1312" v2="270" v3="911" n0="913" n1="1312" n2="270" n3="911" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="908" v1="1312" v2="271" v3="913" n0="908" n1="1312" n2="271" n3="913" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="923" v1="1323" v2="271" v3="908" n0="923" n1="1323" n2="271" n3="908" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="913" v1="1322" v2="271" v3="923" n0="913" n1="1322" n2="271" n3="923" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="915" v1="1317" v2="272" v3="918" n0="915" n1="1317" n2="272" n3="918" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="919" v1="1308" v2="272" v3="915" n0="919" n1="1308" n2="272" n3="915" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="917" v1="1318" v2="272" v3="919" n0="917" n1="1318" n2="272" n3="919" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="918" v1="1320" v2="272" v3="917" n0="918" n1="1320" n2="272" n3="917" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="914" v1="1316" v2="273" v3="560" n0="914" n1="1316" n2="273" n3="560" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="926" v1="1325" v2="273" v3="914" n0="926" n1="1325" n2="273" n3="914" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="916" v1="1324" v2="273" v3="926" n0="916" n1="1324" n2="273" n3="926" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="560" v1="1319" v2="273" v3="916" n0="560" n1="1319" n2="273" n3="916" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="904" v1="1311" v2="274" v3="920" n0="904" n1="1311" n2="274" n3="920" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="561" v1="1310" v2="274" v3="904" n0="561" n1="1310" n2="274" n3="904" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="916" v1="1319" v2="274" v3="561" n0="916" n1="1319" n2="274" n3="561" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="920" v1="1324" v2="274" v3="916" n0="920" n1="1324" n2="274" n3="916" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="927" v1="1311" v2="275" v3="1038" n0="927" n1="1311" n2="275" n3="1038" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="917" v1="1320" v2="275" v3="927" n0="917" n1="1320" n2="275" n3="927" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1038" v1="1318" v2="275" v3="917" n0="1038" n1="1318" n2="275" n3="917" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="921" v1="1307" v2="276" v3="1039" n0="921" n1="1307" n2="276" n3="1039" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="919" v1="1318" v2="276" v3="921" n0="919" n1="1318" n2="276" n3="921" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1039" v1="1308" v2="276" v3="919" n0="1039" n1="1308" n2="276" n3="919" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="928" v1="1317" v2="277" v3="915" n0="928" n1="1317" n2="277" n3="915" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="923" v1="1322" v2="277" v3="928" n0="923" n1="1322" n2="277" n3="928" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="924" v1="1323" v2="277" v3="923" n0="924" n1="1323" n2="277" n3="923" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="915" v1="1308" v2="277" v3="924" n0="915" n1="1308" n2="277" n3="924" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="918" v1="1317" v2="278" v3="930" n0="918" n1="1317" n2="278" n3="930" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="929" v1="1320" v2="278" v3="918" n0="929" n1="1320" n2="278" n3="918" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="926" v1="1324" v2="278" v3="929" n0="926" n1="1324" n2="278" n3="929" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="930" v1="1325" v2="278" v3="926" n0="930" n1="1325" n2="278" n3="926" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="925" v1="1325" v2="279" v3="930" n0="925" n1="1325" n2="279" n3="930" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="928" v1="1322" v2="279" v3="925" n0="928" n1="1322" n2="279" n3="925" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="930" v1="1317" v2="279" v3="928" n0="930" n1="1317" n2="279" n3="928" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="929" v1="1324" v2="280" v3="920" n0="929" n1="1324" n2="280" n3="920" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="927" v1="1320" v2="280" v3="929" n0="927" n1="1320" n2="280" n3="929" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="920" v1="1311" v2="280" v3="927" n0="920" n1="1311" n2="280" n3="927" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="818" v1="1268" v2="281" v3="574" n0="818" n1="1268" n2="281" n3="574" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1040" v1="1267" v2="281" v3="818" n0="1040" n1="1267" n2="281" n3="818" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="932" v1="1328" v2="281" v3="1040" n0="932" n1="1328" n2="281" n3="1040" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="574" v1="1326" v2="281" v3="932" n0="574" n1="1326" n2="281" n3="932" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="907" v1="1309" v2="282" v3="896" n0="907" n1="1309" n2="282" n3="896" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="933" v1="1313" v2="282" v3="907" n0="933" n1="1313" n2="282" n3="907" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="896" v1="1306" v2="282" v3="933" n0="896" n1="1306" n2="282" n3="933" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="937" v1="1329" v2="283" v3="934" n0="937" n1="1329" n2="283" n3="934" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="935" v1="1328" v2="283" v3="937" n0="935" n1="1328" n2="283" n3="937" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="933" v1="1306" v2="283" v3="935" n0="933" n1="1306" n2="283" n3="935" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="934" v1="1313" v2="283" v3="933" n0="934" n1="1313" n2="283" n3="933" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="910" v1="1313" v2="284" v3="934" n0="910" n1="1313" n2="284" n3="934" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="931" v1="1315" v2="284" v3="910" n0="931" n1="1315" n2="284" n3="910" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="936" v1="1327" v2="284" v3="931" n0="936" n1="1327" n2="284" n3="931" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="934" v1="1329" v2="284" v3="936" n0="934" n1="1329" n2="284" n3="936" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="575" v1="1327" v2="285" v3="936" n0="575" n1="1327" n2="285" n3="936" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="932" v1="1326" v2="285" v3="575" n0="932" n1="1326" n2="285" n3="575" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="937" v1="1328" v2="285" v3="932" n0="937" n1="1328" n2="285" n3="932" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="936" v1="1329" v2="285" v3="937" n0="936" n1="1329" n2="285" n3="937" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="590" v1="1330" v2="286" v3="940" n0="590" n1="1330" n2="286" n3="940" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="942" v1="1334" v2="286" v3="590" n0="942" n1="1334" n2="286" n3="590" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="943" v1="1332" v2="286" v3="942" n0="943" n1="1332" n2="286" n3="942" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="940" v1="1314" v2="286" v3="943" n0="940" n1="1314" n2="286" n3="943" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="912" v1="1314" v2="287" v3="940" n0="912" n1="1314" n2="287" n3="940" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="586" v1="1321" v2="287" v3="912" n0="586" n1="1321" n2="287" n3="912" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="940" v1="1330" v2="287" v3="586" n0="940" n1="1330" n2="287" n3="586" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="931" v1="1327" v2="288" v3="587" n0="931" n1="1327" n2="288" n3="587" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="939" v1="1315" v2="288" v3="931" n0="939" n1="1315" n2="288" n3="931" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="587" v1="1331" v2="288" v3="939" n0="587" n1="1331" n2="288" n3="939" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="944" v1="1315" v2="289" v3="939" n0="944" n1="1315" n2="289" n3="939" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="941" v1="1333" v2="289" v3="944" n0="941" n1="1333" n2="289" n3="944" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="593" v1="1335" v2="289" v3="941" n0="593" n1="1335" n2="289" n3="941" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="939" v1="1331" v2="289" v3="593" n0="939" n1="1331" n2="289" n3="593" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="943" v1="1314" v2="290" v3="909" n0="943" n1="1314" n2="290" n3="909" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="938" v1="1332" v2="290" v3="943" n0="938" n1="1332" n2="290" n3="943" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="944" v1="1333" v2="290" v3="938" n0="944" n1="1333" n2="290" n3="938" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="909" v1="1315" v2="290" v3="944" n0="909" n1="1315" n2="290" n3="944" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="950" v1="1340" v2="291" v3="949" n0="950" n1="1340" n2="291" n3="949" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="51" tv0="122" tu1="93" tv1="119" tu2="51" tv2="100" tu3="91" tv3="98" type="FT4" /> +<poly v0="595" v1="1336" v2="291" v3="950" n0="595" n1="1336" n2="291" n3="950" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="103" tu1="0" tv1="127" tu2="51" tv2="100" tu3="51" tv3="122" type="FT4" /> +<poly v0="951" v1="1337" v2="291" v3="595" n0="951" n1="1337" n2="291" n3="595" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="50" tv0="83" tu1="0" tv1="83" tu2="51" tv2="100" tu3="0" tv3="103" type="FT4" /> +<poly v0="949" v1="1341" v2="291" v3="951" n0="949" n1="1341" n2="291" n3="951" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="91" tv0="98" tu1="90" tv1="81" tu2="51" tv2="100" tu3="50" tv3="83" type="FT4" /> +<poly v0="942" v1="1332" v2="292" v3="959" n0="942" n1="1332" n2="292" n3="959" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="594" v1="1334" v2="292" v3="942" n0="594" n1="1334" n2="292" n3="942" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="950" v1="1336" v2="292" v3="594" n0="950" n1="1336" n2="292" n3="594" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="959" v1="1340" v2="292" v3="950" n0="959" n1="1340" n2="292" n3="950" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="948" v1="1343" v2="293" v3="946" n0="948" n1="1343" n2="293" n3="946" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="89" tv0="72" tu1="90" tv1="61" tu2="50" tv2="73" tu3="50" tv3="61" type="FT4" /> +<poly v0="951" v1="1341" v2="293" v3="948" n0="951" n1="1341" n2="293" n3="948" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="50" tv0="83" tu1="90" tv1="81" tu2="50" tv2="73" tu3="89" tv3="72" type="FT4" /> +<poly v0="596" v1="1337" v2="293" v3="951" n0="596" n1="1337" n2="293" n3="951" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="73" tu1="0" tv1="83" tu2="50" tv2="73" tu3="50" tv3="83" type="FT4" /> +<poly v0="946" v1="1339" v2="293" v3="596" n0="946" n1="1339" n2="293" n3="596" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="50" tv0="61" tu1="0" tv1="61" tu2="50" tv2="73" tu3="0" tv3="73" type="FT4" /> +<poly v0="605" v1="1339" v2="294" v3="946" n0="605" n1="1339" n2="294" n3="946" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="34" tu1="0" tv1="61" tu2="50" tv2="34" tu3="50" tv3="61" type="FT4" /> +<poly v0="952" v1="1344" v2="294" v3="605" n0="952" n1="1344" n2="294" n3="605" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="50" tv0="0" tu1="0" tv1="0" tu2="50" tv2="34" tu3="0" tv3="34" type="FT4" /> +<poly v0="953" v1="1345" v2="294" v3="952" n0="953" n1="1345" n2="294" n3="952" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="89" tv0="36" tu1="90" tv1="8" tu2="50" tv2="34" tu3="50" tv3="0" type="FT4" /> +<poly v0="946" v1="1343" v2="294" v3="953" n0="946" n1="1343" n2="294" n3="953" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="50" tv0="61" tu1="90" tv1="61" tu2="50" tv2="34" tu3="89" tv3="36" type="FT4" /> +<poly v0="948" v1="1341" v2="295" v3="955" n0="948" n1="1341" n2="295" n3="955" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="89" tv0="72" tu1="90" tv1="81" tu2="107" tv2="71" tu3="111" tv3="77" type="FT4" /> +<poly v0="956" v1="1343" v2="295" v3="948" n0="956" n1="1343" n2="295" n3="948" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="109" tv0="62" tu1="90" tv1="61" tu2="107" tv2="71" tu3="89" tv3="72" type="FT4" /> +<poly v0="955" v1="1346" v2="295" v3="956" n0="955" n1="1346" n2="295" n3="956" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="111" tv0="77" tu1="120" tv1="64" tu2="107" tv2="71" tu3="109" tv3="62" type="FT4" /> +<poly v0="985" v1="1345" v2="296" v3="953" n0="985" n1="1345" n2="296" n3="953" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="111" tv0="33" tu1="90" tv1="8" tu2="107" tv2="44" tu3="89" tv3="36" type="FT4" /> +<poly v0="956" v1="1346" v2="296" v3="985" n0="956" n1="1346" n2="296" n3="985" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="109" tv0="62" tu1="120" tv1="64" tu2="107" tv2="44" tu3="111" tv3="33" type="FT4" /> +<poly v0="953" v1="1343" v2="296" v3="956" n0="953" n1="1343" n2="296" n3="956" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="89" tv0="36" tu1="90" tv1="61" tu2="107" tv2="44" tu3="109" tv3="62" type="FT4" /> +<poly v0="954" v1="1352" v2="297" v3="983" n0="954" n1="1352" n2="297" n3="983" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="985" v1="1346" v2="297" v3="954" n0="985" n1="1346" n2="297" n3="954" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="983" v1="1345" v2="297" v3="985" n0="983" n1="1345" n2="297" n3="985" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="949" v1="1340" v2="298" v3="957" n0="949" n1="1340" n2="298" n3="957" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="91" tv0="98" tu1="93" tv1="119" tu2="113" tv2="95" tu3="115" tv3="118" type="FT4" /> +<poly v0="955" v1="1341" v2="298" v3="949" n0="955" n1="1341" n2="298" n3="949" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="111" tv0="77" tu1="90" tv1="81" tu2="113" tv2="95" tu3="91" tv3="98" type="FT4" /> +<poly v0="958" v1="1346" v2="298" v3="955" n0="958" n1="1346" n2="298" n3="955" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="125" tv0="92" tu1="120" tv1="64" tu2="113" tv2="95" tu3="111" tv3="77" type="FT4" /> +<poly v0="957" v1="1347" v2="298" v3="958" n0="957" n1="1347" n2="298" n3="958" shading="S" r0="128" g0="128" b0="128" texture="0" tu0="115" tv0="118" tu1="127" tv1="119" tu2="113" tv2="95" tu3="125" tv3="92" type="FT4" /> +<poly v0="941" v1="1335" v2="299" v3="614" n0="941" n1="1335" n2="299" n3="614" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="960" v1="1333" v2="299" v3="941" n0="960" n1="1333" n2="299" n3="941" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="945" v1="1342" v2="299" v3="960" n0="945" n1="1342" n2="299" n3="960" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="614" v1="1338" v2="299" v3="945" n0="614" n1="1338" n2="299" n3="945" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="938" v1="1333" v2="300" v3="961" n0="938" n1="1333" n2="300" n3="961" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="959" v1="1332" v2="300" v3="938" n0="959" n1="1332" n2="300" n3="938" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="957" v1="1340" v2="300" v3="959" n0="957" n1="1340" n2="300" n3="959" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="961" v1="1347" v2="300" v3="957" n0="961" n1="1347" n2="300" n3="957" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="947" v1="1347" v2="301" v3="961" n0="947" n1="1347" n2="301" n3="961" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="960" v1="1342" v2="301" v3="947" n0="960" n1="1342" n2="301" n3="947" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="961" v1="1333" v2="301" v3="960" n0="961" n1="1333" n2="301" n3="960" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="991" v1="1368" v2="302" v3="622" n0="991" n1="1368" n2="302" n3="622" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="971" v1="1369" v2="302" v3="991" n0="971" n1="1369" n2="302" n3="991" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="963" v1="1355" v2="302" v3="971" n0="963" n1="1355" n2="302" n3="971" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="622" v1="1351" v2="302" v3="963" n0="622" n1="1351" n2="302" n3="963" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="962" v1="1350" v2="303" v3="618" n0="962" n1="1350" n2="303" n3="618" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="964" v1="1354" v2="303" v3="962" n0="964" n1="1354" n2="303" n3="962" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="991" v1="1369" v2="303" v3="964" n0="991" n1="1369" n2="303" n3="964" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="618" v1="1368" v2="303" v3="991" n0="618" n1="1368" n2="303" n3="991" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="967" v1="1352" v2="304" v3="966" n0="967" n1="1352" n2="304" n3="966" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="616" v1="1348" v2="304" v3="967" n0="616" n1="1348" n2="304" n3="967" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="968" v1="1349" v2="304" v3="616" n0="968" n1="1349" n2="304" n3="616" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="966" v1="1353" v2="304" v3="968" n0="966" n1="1353" n2="304" n3="968" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="965" v1="1403" v2="305" v3="1058" n0="965" n1="1403" n2="305" n3="1058" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="968" v1="1353" v2="305" v3="965" n0="968" n1="1353" n2="305" n3="965" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="724" v1="1349" v2="305" v3="968" n0="724" n1="1349" n2="305" n3="968" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="1058" v1="1404" v2="305" v3="724" n0="1058" n1="1404" n2="305" n3="724" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="628" v1="1350" v2="306" v3="962" n0="628" n1="1350" n2="306" n3="962" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="969" v1="1356" v2="306" v3="628" n0="969" n1="1356" n2="306" n3="628" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="970" v1="1357" v2="306" v3="969" n0="970" n1="1357" n2="306" n3="969" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="962" v1="1354" v2="306" v3="970" n0="962" n1="1354" n2="306" n3="970" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="993" v1="1352" v2="307" v3="984" n0="993" n1="1352" n2="307" n3="984" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="994" v1="1370" v2="307" v3="993" n0="994" n1="1370" n2="307" n3="993" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="987" v1="1358" v2="307" v3="994" n0="987" n1="1358" n2="307" n3="994" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="984" v1="1366" v2="307" v3="987" n0="984" n1="1366" n2="307" n3="987" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="977" v1="1357" v2="308" v3="974" n0="977" n1="1357" n2="308" n3="974" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="976" v1="1361" v2="308" v3="977" n0="976" n1="1361" n2="308" n3="977" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="978" v1="1362" v2="308" v3="976" n0="978" n1="1362" n2="308" n3="976" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="974" v1="1359" v2="308" v3="978" n0="974" n1="1359" n2="308" n3="978" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="638" v1="1356" v2="309" v3="969" n0="638" n1="1356" n2="309" n3="969" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="975" v1="1360" v2="309" v3="638" n0="975" n1="1360" n2="309" n3="638" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="977" v1="1361" v2="309" v3="975" n0="977" n1="1361" n2="309" n3="975" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="969" v1="1357" v2="309" v3="977" n0="969" n1="1357" n2="309" n3="977" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="981" v1="1361" v2="310" v3="976" n0="981" n1="1361" n2="310" n3="976" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="980" v1="1364" v2="310" v3="981" n0="980" n1="1364" n2="310" n3="981" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="982" v1="1365" v2="310" v3="980" n0="982" n1="1365" n2="310" n3="980" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="976" v1="1362" v2="310" v3="982" n0="976" n1="1362" n2="310" n3="982" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="643" v1="1360" v2="311" v3="975" n0="643" n1="1360" n2="311" n3="975" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="979" v1="1363" v2="311" v3="643" n0="979" n1="1363" n2="311" n3="643" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="981" v1="1364" v2="311" v3="979" n0="981" n1="1364" n2="311" n3="979" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="975" v1="1361" v2="311" v3="981" n0="975" n1="1361" n2="311" n3="981" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="972" v1="1358" v2="312" v3="973" n0="972" n1="1358" n2="312" n3="973" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="970" v1="1354" v2="312" v3="972" n0="970" n1="1354" n2="312" n3="972" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="974" v1="1357" v2="312" v3="970" n0="974" n1="1357" n2="312" n3="970" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="973" v1="1359" v2="312" v3="974" n0="973" n1="1359" n2="312" n3="974" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="952" v1="1345" v2="313" v3="983" n0="952" n1="1345" n2="313" n3="983" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="644" v1="1344" v2="313" v3="952" n0="644" n1="1344" n2="313" n3="952" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="967" v1="1348" v2="313" v3="644" n0="967" n1="1348" n2="313" n3="644" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="983" v1="1352" v2="313" v3="967" n0="983" n1="1352" n2="313" n3="967" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="964" v1="1369" v2="314" v3="992" n0="964" n1="1369" n2="314" n3="992" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="972" v1="1354" v2="314" v3="964" n0="972" n1="1354" n2="314" n3="964" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="994" v1="1358" v2="314" v3="972" n0="994" n1="1358" n2="314" n3="972" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="992" v1="1370" v2="314" v3="994" n0="992" n1="1370" n2="314" n3="994" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="954" v1="1346" v2="315" v3="990" n0="954" n1="1346" n2="315" n3="990" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="984" v1="1352" v2="315" v3="954" n0="984" n1="1352" n2="315" n3="954" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="990" v1="1366" v2="315" v3="984" n0="990" n1="1366" n2="315" n3="984" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="973" v1="1358" v2="316" v3="987" n0="973" n1="1358" n2="316" n3="987" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="988" v1="1359" v2="316" v3="973" n0="988" n1="1359" n2="316" n3="973" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="986" v1="1367" v2="316" v3="988" n0="986" n1="1367" n2="316" n3="988" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="987" v1="1366" v2="316" v3="986" n0="987" n1="1366" n2="316" n3="986" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="990" v1="1346" v2="317" v3="958" n0="990" n1="1346" n2="317" n3="958" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="989" v1="1366" v2="317" v3="990" n0="989" n1="1366" n2="317" n3="990" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="958" v1="1347" v2="317" v3="989" n0="958" n1="1347" n2="317" n3="989" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="995" v1="1405" v2="318" v3="1057" n0="995" n1="1405" n2="318" n3="1057" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="996" v1="1372" v2="318" v3="995" n0="996" n1="1372" n2="318" n3="995" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="722" v1="1371" v2="318" v3="996" n0="722" n1="1371" n2="318" n3="996" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="1057" v1="1402" v2="318" v3="722" n0="1057" n1="1402" n2="318" n3="722" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="997" v1="1372" v2="319" v3="1055" n0="997" n1="1372" n2="319" n3="1055" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="1059" v1="1370" v2="319" v3="997" n0="1059" n1="1370" n2="319" n3="997" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="1055" v1="1403" v2="319" v3="1059" n0="1055" n1="1403" n2="319" n3="1059" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="992" v1="1369" v2="320" v3="971" n0="992" n1="1369" n2="320" n3="971" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="997" v1="1370" v2="320" v3="992" n0="997" n1="1370" n2="320" n3="992" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="995" v1="1372" v2="320" v3="997" n0="995" n1="1372" n2="320" n3="997" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="1056" v1="1405" v2="320" v3="995" n0="1056" n1="1405" n2="320" n3="995" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="971" v1="1355" v2="320" v3="1056" n0="971" n1="1355" n2="320" n3="1056" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="986" v1="1366" v2="321" v3="989" n0="986" n1="1366" n2="321" n3="989" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="998" v1="1367" v2="321" v3="986" n0="998" n1="1367" n2="321" n3="986" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="989" v1="1347" v2="321" v3="998" n0="989" n1="1347" n2="321" n3="998" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="998" v1="1347" v2="322" v3="947" n0="998" n1="1347" n2="322" n3="947" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="988" v1="1367" v2="322" v3="998" n0="988" n1="1367" n2="322" n3="998" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="999" v1="1359" v2="322" v3="988" n0="999" n1="1359" n2="322" n3="988" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="947" v1="1342" v2="322" v3="999" n0="947" n1="1342" n2="322" n3="999" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="1000" v1="1373" v2="323" v3="1001" n0="1000" n1="1373" n2="323" n3="1001" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1003" v1="1375" v2="323" v3="1000" n0="1003" n1="1375" n2="323" n3="1000" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1002" v1="1376" v2="323" v3="1003" n0="1002" n1="1376" n2="323" n3="1003" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1001" v1="1374" v2="323" v3="1002" n0="1001" n1="1374" n2="323" n3="1002" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1004" v1="1375" v2="324" v3="1003" n0="1004" n1="1375" n2="324" n3="1003" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1006" v1="1379" v2="324" v3="1004" n0="1006" n1="1379" n2="324" n3="1004" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1005" v1="1380" v2="324" v3="1006" n0="1005" n1="1380" n2="324" n3="1006" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1003" v1="1376" v2="324" v3="1005" n0="1003" n1="1376" n2="324" n3="1005" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1007" v1="1379" v2="325" v3="1006" n0="1007" n1="1379" n2="325" n3="1006" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1009" v1="1377" v2="325" v3="1007" n0="1009" n1="1377" n2="325" n3="1007" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1008" v1="1378" v2="325" v3="1009" n0="1008" n1="1378" n2="325" n3="1009" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1006" v1="1380" v2="325" v3="1008" n0="1006" n1="1380" n2="325" n3="1008" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1010" v1="1377" v2="326" v3="1009" n0="1010" n1="1377" n2="326" n3="1009" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1001" v1="1373" v2="326" v3="1010" n0="1001" n1="1373" n2="326" n3="1010" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1011" v1="1374" v2="326" v3="1001" n0="1011" n1="1374" n2="326" n3="1001" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1009" v1="1378" v2="326" v3="1011" n0="1009" n1="1378" n2="326" n3="1011" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1014" v1="1383" v2="327" v3="1013" n0="1014" n1="1383" n2="327" n3="1013" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1015" v1="1384" v2="327" v3="1014" n0="1015" n1="1384" n2="327" n3="1014" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1012" v1="1381" v2="327" v3="1015" n0="1012" n1="1381" n2="327" n3="1015" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1013" v1="1382" v2="327" v3="1012" n0="1013" n1="1382" n2="327" n3="1012" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1017" v1="1376" v2="328" v3="1002" n0="1017" n1="1376" n2="328" n3="1002" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1012" v1="1382" v2="328" v3="1017" n0="1012" n1="1382" n2="328" n3="1017" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1016" v1="1381" v2="328" v3="1012" n0="1016" n1="1381" n2="328" n3="1012" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1002" v1="1374" v2="328" v3="1016" n0="1002" n1="1374" n2="328" n3="1016" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1016" v1="1374" v2="329" v3="1011" n0="1016" n1="1374" n2="329" n3="1011" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1015" v1="1381" v2="329" v3="1016" n0="1015" n1="1381" n2="329" n3="1016" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1018" v1="1384" v2="329" v3="1015" n0="1018" n1="1384" n2="329" n3="1015" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1011" v1="1378" v2="329" v3="1018" n0="1011" n1="1378" n2="329" n3="1018" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1019" v1="1380" v2="330" v3="1005" n0="1019" n1="1380" n2="330" n3="1005" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1013" v1="1383" v2="330" v3="1019" n0="1013" n1="1383" n2="330" n3="1019" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1017" v1="1382" v2="330" v3="1013" n0="1017" n1="1382" n2="330" n3="1013" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1005" v1="1376" v2="330" v3="1017" n0="1005" n1="1376" n2="330" n3="1017" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1018" v1="1378" v2="331" v3="1008" n0="1018" n1="1378" n2="331" n3="1008" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1014" v1="1384" v2="331" v3="1018" n0="1014" n1="1384" n2="331" n3="1018" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1019" v1="1383" v2="331" v3="1014" n0="1019" n1="1383" n2="331" n3="1014" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1008" v1="1380" v2="331" v3="1019" n0="1008" n1="1380" n2="331" n3="1019" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1020" v1="1385" v2="332" v3="1021" n0="1020" n1="1385" n2="332" n3="1021" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="1023" v1="1387" v2="332" v3="1020" n0="1023" n1="1387" n2="332" n3="1020" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="1022" v1="1388" v2="332" v3="1023" n0="1022" n1="1388" n2="332" n3="1023" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="1021" v1="1386" v2="332" v3="1022" n0="1021" n1="1386" n2="332" n3="1022" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="1024" v1="1387" v2="333" v3="1023" n0="1024" n1="1387" n2="333" n3="1023" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="1026" v1="1391" v2="333" v3="1024" n0="1026" n1="1391" n2="333" n3="1024" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="1025" v1="1392" v2="333" v3="1026" n0="1025" n1="1392" n2="333" n3="1026" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="1023" v1="1388" v2="333" v3="1025" n0="1023" n1="1388" n2="333" n3="1025" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="1027" v1="1391" v2="334" v3="1026" n0="1027" n1="1391" n2="334" n3="1026" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="1029" v1="1389" v2="334" v3="1027" n0="1029" n1="1389" n2="334" n3="1027" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="1028" v1="1390" v2="334" v3="1029" n0="1028" n1="1390" n2="334" n3="1029" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="1026" v1="1392" v2="334" v3="1028" n0="1026" n1="1392" n2="334" n3="1028" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="1030" v1="1389" v2="335" v3="1029" n0="1030" n1="1389" n2="335" n3="1029" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="1021" v1="1385" v2="335" v3="1030" n0="1021" n1="1385" n2="335" n3="1030" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="1031" v1="1386" v2="335" v3="1021" n0="1031" n1="1386" n2="335" n3="1021" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="1029" v1="1390" v2="335" v3="1031" n0="1029" n1="1390" n2="335" n3="1031" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="1020" v1="1387" v2="336" v3="1024" n0="1020" n1="1387" n2="336" n3="1024" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="1030" v1="1385" v2="336" v3="1020" n0="1030" n1="1385" n2="336" n3="1020" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="1027" v1="1389" v2="336" v3="1030" n0="1027" n1="1389" n2="336" n3="1030" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="1024" v1="1391" v2="336" v3="1027" n0="1024" n1="1391" n2="336" n3="1027" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="1028" v1="1392" v2="337" v3="1025" n0="1028" n1="1392" n2="337" n3="1025" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="1031" v1="1390" v2="337" v3="1028" n0="1031" n1="1390" n2="337" n3="1028" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="1022" v1="1386" v2="337" v3="1031" n0="1022" n1="1386" n2="337" n3="1031" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="1025" v1="1388" v2="337" v3="1022" n0="1025" n1="1388" n2="337" n3="1022" shading="S" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="802" v1="1254" v2="338" v3="1032" n0="802" n1="1254" n2="338" n3="1032" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="795" v1="1251" v2="338" v3="802" n0="795" n1="1251" n2="338" n3="802" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="1032" v1="1252" v2="338" v3="795" n0="1032" n1="1252" n2="338" n3="795" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="821" v1="1258" v2="339" v3="1035" n0="821" n1="1258" n2="339" n3="1035" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="820" v1="1262" v2="339" v3="821" n0="820" n1="1262" n2="339" n3="821" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="1035" v1="1257" v2="339" v3="820" n0="1035" n1="1257" n2="339" n3="820" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="808" v1="1258" v2="340" v3="809" n0="808" n1="1258" n2="340" n3="809" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="445" v1="1260" v2="340" v3="808" n0="445" n1="1260" n2="340" n3="808" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="793" v1="1249" v2="340" v3="445" n0="793" n1="1249" n2="340" n3="445" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="809" v1="1247" v2="340" v3="793" n0="809" n1="1247" n2="340" n3="793" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1034" v1="1258" v2="341" v3="821" n0="1034" n1="1258" n2="341" n3="821" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="810" v1="1269" v2="341" v3="1034" n0="810" n1="1269" n2="341" n3="1034" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="821" v1="1262" v2="341" v3="810" n0="821" n1="1262" n2="341" n3="810" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="1034" v1="1269" v2="342" v3="824" n0="1034" n1="1269" n2="342" n3="824" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="809" v1="1258" v2="342" v3="1034" n0="809" n1="1258" n2="342" n3="1034" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="824" v1="1247" v2="342" v3="809" n0="824" n1="1247" n2="342" n3="809" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="806" v1="1257" v2="343" v3="1035" n0="806" n1="1257" n2="343" n3="1035" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="805" v1="1259" v2="343" v3="806" n0="805" n1="1259" n2="343" n3="806" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1035" v1="1258" v2="343" v3="805" n0="1035" n1="1258" n2="343" n3="805" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1036" v1="1257" v2="344" v3="816" n0="1036" n1="1257" n2="344" n3="816" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="801" v1="1393" v2="344" v3="1036" n0="801" n1="1393" n2="344" n3="1036" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="815" v1="1254" v2="344" v3="801" n0="815" n1="1254" n2="344" n3="801" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1037" v1="1264" v2="344" v3="815" n0="1037" n1="1264" n2="344" n3="815" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="816" v1="1267" v2="344" v3="1037" n0="816" n1="1267" n2="344" n3="1037" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="921" v1="1318" v2="345" v3="1038" n0="921" n1="1318" n2="345" n3="1038" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="905" v1="1307" v2="345" v3="921" n0="905" n1="1307" n2="345" n3="921" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1038" v1="1311" v2="345" v3="905" n0="1038" n1="1311" n2="345" n3="905" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="924" v1="1308" v2="346" v3="1039" n0="924" n1="1308" n2="346" n3="1039" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="895" v1="1323" v2="346" v3="924" n0="895" n1="1323" n2="346" n3="924" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="1039" v1="1307" v2="346" v3="895" n0="1039" n1="1307" n2="346" n3="895" shading="S" r0="255" g0="229" b0="219" type="F4" /> +<poly v0="902" v1="1267" v2="347" v3="1040" n0="902" n1="1267" n2="347" n3="1040" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="935" v1="1306" v2="347" v3="902" n0="935" n1="1306" n2="347" n3="902" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1040" v1="1328" v2="347" v3="935" n0="1040" n1="1328" n2="347" n3="935" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1041" v1="1259" v2="348" v3="807" n0="1041" n1="1259" n2="348" n3="807" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="818" v1="1267" v2="348" v3="1041" n0="818" n1="1267" n2="348" n3="1041" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="456" v1="1268" v2="348" v3="818" n0="456" n1="1268" n2="348" n3="818" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="807" v1="1261" v2="348" v3="456" n0="807" n1="1261" n2="348" n3="456" shading="S" r0="255" g0="99" b0="105" type="F4" /> +<poly v0="1054" v1="1394" v2="349" v3="1042" n0="1054" n1="1394" n2="349" n3="1042" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="1053" v1="1342" v2="349" v3="1054" n0="1053" n1="1342" n2="349" n3="1054" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="1043" v1="1396" v2="349" v3="1053" n0="1043" n1="1396" n2="349" n3="1053" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="1042" v1="1395" v2="349" v3="1043" n0="1042" n1="1395" n2="349" n3="1043" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="1045" v1="1397" v2="350" v3="707" n0="1045" n1="1397" n2="350" n3="707" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="1042" v1="1394" v2="350" v3="1045" n0="1042" n1="1394" n2="350" n3="1045" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="1044" v1="1395" v2="350" v3="1042" n0="1044" n1="1395" n2="350" n3="1042" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="707" v1="1398" v2="350" v3="1044" n0="707" n1="1398" n2="350" n3="1044" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="1043" v1="1395" v2="351" v3="1046" n0="1043" n1="1395" n2="351" n3="1046" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="1048" v1="1396" v2="351" v3="1043" n0="1048" n1="1396" n2="351" n3="1043" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="1047" v1="1400" v2="351" v3="1048" n0="1047" n1="1400" n2="351" n3="1048" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="1046" v1="1399" v2="351" v3="1047" n0="1046" n1="1399" n2="351" n3="1047" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="1044" v1="1398" v2="352" v3="713" n0="1044" n1="1398" n2="352" n3="713" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="1046" v1="1395" v2="352" v3="1044" n0="1046" n1="1395" n2="352" n3="1044" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="1049" v1="1399" v2="352" v3="1046" n0="1049" n1="1399" n2="352" n3="1046" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="713" v1="1401" v2="352" v3="1049" n0="713" n1="1401" n2="352" n3="1049" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="1051" v1="1364" v2="353" v3="980" n0="1051" n1="1364" n2="353" n3="980" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="1047" v1="1399" v2="353" v3="1051" n0="1047" n1="1399" n2="353" n3="1051" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="1050" v1="1400" v2="353" v3="1047" n0="1050" n1="1400" n2="353" n3="1047" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="980" v1="1365" v2="353" v3="1050" n0="980" n1="1365" n2="353" n3="1050" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="717" v1="1363" v2="354" v3="979" n0="717" n1="1363" n2="354" n3="979" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="1049" v1="1401" v2="354" v3="717" n0="1049" n1="1401" n2="354" n3="717" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="1051" v1="1399" v2="354" v3="1049" n0="1051" n1="1399" n2="354" n3="1049" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="979" v1="1364" v2="354" v3="1051" n0="979" n1="1364" n2="354" n3="1051" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="1052" v1="1362" v2="355" v3="978" n0="1052" n1="1362" n2="355" n3="978" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="1053" v1="1396" v2="355" v3="1052" n0="1053" n1="1396" n2="355" n3="1052" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="999" v1="1342" v2="355" v3="1053" n0="999" n1="1342" n2="355" n3="1053" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="978" v1="1359" v2="355" v3="999" n0="978" n1="1359" n2="355" n3="999" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="1050" v1="1365" v2="356" v3="982" n0="1050" n1="1365" n2="356" n3="982" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="1048" v1="1400" v2="356" v3="1050" n0="1048" n1="1400" n2="356" n3="1050" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="1052" v1="1396" v2="356" v3="1048" n0="1052" n1="1396" n2="356" n3="1048" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="982" v1="1362" v2="356" v3="1052" n0="982" n1="1362" n2="356" n3="1052" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="1060" v1="1338" v2="357" v3="718" n0="1060" n1="1338" n2="357" n3="718" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="1045" v1="1394" v2="357" v3="1060" n0="1045" n1="1394" n2="357" n3="1060" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="718" v1="1397" v2="357" v3="1045" n0="718" n1="1397" n2="357" n3="1045" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="1056" v1="1355" v2="358" v3="963" n0="1056" n1="1355" n2="358" n3="963" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="1057" v1="1405" v2="358" v3="1056" n0="1057" n1="1405" n2="358" n3="1056" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="617" v1="1402" v2="358" v3="1057" n0="617" n1="1402" n2="358" n3="1057" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="963" v1="1351" v2="358" v3="617" n0="963" n1="1351" n2="358" n3="617" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="1055" v1="1372" v2="359" v3="996" n0="1055" n1="1372" n2="359" n3="996" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="1058" v1="1403" v2="359" v3="1055" n0="1058" n1="1403" n2="359" n3="1055" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="657" v1="1404" v2="359" v3="1058" n0="657" n1="1404" n2="359" n3="1058" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="996" v1="1371" v2="359" v3="657" n0="996" n1="1371" n2="359" n3="657" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="993" v1="1370" v2="360" v3="1059" n0="993" n1="1370" n2="360" n3="1059" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="966" v1="1352" v2="360" v3="993" n0="966" n1="1352" n2="360" n3="993" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="965" v1="1353" v2="360" v3="966" n0="965" n1="1353" n2="360" n3="966" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="1059" v1="1403" v2="360" v3="965" n0="1059" n1="1403" n2="360" n3="965" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="1060" v1="1394" v2="361" v3="1054" n0="1060" n1="1394" n2="361" n3="1054" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="945" v1="1338" v2="361" v3="1060" n0="945" n1="1338" n2="361" n3="1060" shading="S" r0="190" g0="118" b0="128" type="F4" /> +<poly v0="1054" v1="1342" v2="361" v3="945" n0="1054" n1="1342" n2="361" n3="945" shading="S" r0="190" g0="118" b0="128" type="F4" /> +</primitives> +</model>
\ No newline at end of file diff --git a/examples/n00bdemo/data/bungirl.tim b/examples/n00bdemo/data/bungirl.tim Binary files differnew file mode 100644 index 0000000..11ee9f4 --- /dev/null +++ b/examples/n00bdemo/data/bungirl.tim diff --git a/examples/n00bdemo/data/celmapi.bmp b/examples/n00bdemo/data/celmapi.bmp Binary files differnew file mode 100644 index 0000000..f44f94f --- /dev/null +++ b/examples/n00bdemo/data/celmapi.bmp diff --git a/examples/n00bdemo/data/celmapi.tim b/examples/n00bdemo/data/celmapi.tim Binary files differnew file mode 100644 index 0000000..c043e0b --- /dev/null +++ b/examples/n00bdemo/data/celmapi.tim diff --git a/examples/n00bdemo/data/clktower.tim b/examples/n00bdemo/data/clktower.tim Binary files differnew file mode 100644 index 0000000..15c6edc --- /dev/null +++ b/examples/n00bdemo/data/clktower.tim diff --git a/examples/n00bdemo/data/font.bmp b/examples/n00bdemo/data/font.bmp Binary files differnew file mode 100644 index 0000000..1d078f3 --- /dev/null +++ b/examples/n00bdemo/data/font.bmp diff --git a/examples/n00bdemo/data/font.tim b/examples/n00bdemo/data/font.tim Binary files differnew file mode 100644 index 0000000..64cdad2 --- /dev/null +++ b/examples/n00bdemo/data/font.tim diff --git a/examples/n00bdemo/data/hatkid.png b/examples/n00bdemo/data/hatkid.png Binary files differnew file mode 100644 index 0000000..369ce32 --- /dev/null +++ b/examples/n00bdemo/data/hatkid.png diff --git a/examples/n00bdemo/data/hatkid.smd b/examples/n00bdemo/data/hatkid.smd Binary files differnew file mode 100644 index 0000000..a68f414 --- /dev/null +++ b/examples/n00bdemo/data/hatkid.smd diff --git a/examples/n00bdemo/data/hatkid.smx b/examples/n00bdemo/data/hatkid.smx new file mode 100644 index 0000000..f9e8012 --- /dev/null +++ b/examples/n00bdemo/data/hatkid.smx @@ -0,0 +1,1281 @@ +<model version="1"> + <vertices count="307"> + <v x="0.57705301" y="1.14696" z="-1.1"/> + <v x="-1.1" y="1.1" z="-1.387597"/> + <v x="0.73710698" y="-0.932338" z="-1.078609"/> + <v x="-1.056125" y="-1.2427191" z="-1.73972"/> + <v x="0.86849302" y="-0" z="-1.21"/> + <v x="-1.203335" y="0.19091301" z="-1.628953"/> + <v x="-0.107659" y="1.1" z="-1.4019901"/> + <v x="0.095753998" y="-0.75744098" z="-1.856791"/> + <v x="-0.33785701" y="1.42563" z="-0.41706499"/> + <v x="-0.30299601" y="1.786027" z="-0.47394699"/> + <v x="0.61906099" y="-1.3200001" z="-1.622623"/> + <v x="0.54511398" y="-0.228689" z="-1.740314"/> + <v x="0.90257502" y="-0.165659" z="-1.361362"/> + <v x="0.55479699" y="0.88" z="-1.740314"/> + <v x="0.91777301" y="0.88" z="-1.361362"/> + <v x="0.66250801" y="1.8786891" z="-1.630314"/> + <v x="1.019969" y="1.815659" z="-1.180402"/> + <v x="0.78970498" y="2.673414" z="-1.180253"/> + <v x="0.958866" y="-1.049783" z="-1.146966"/> + <v x="0.81808603" y="-0.180557" z="-1.515358"/> + <v x="0.83197999" y="0.88" z="-1.515358"/> + <v x="0.93548" y="1.830557" z="-1.405358"/> + <v x="-2.0988619" y="-1.219641" z="-1.084437"/> + <v x="0.114797" y="0.88" z="-1.8303"/> + <v x="0.229192" y="1.9550951" z="-1.630314"/> + <v x="0.081095003" y="-0.62709999" z="-2.316514"/> + <v x="0.0088050002" y="-0.113126" z="-2.277858"/> + <v x="-0.43670499" y="0.106" z="-1.693437"/> + <v x="0.0088050002" y="0.12908199" z="-1.87672"/> + <v x="-0.29477501" y="-0.76514101" z="-1.76127"/> + <v x="0.033335999" y="-1.388941" z="-1.8242559"/> + <v x="-1.009014" y="-1.965508" z="-1.320001"/> + <v x="-1.283181" y="-0.56476998" z="-1.704685"/> + <v x="0.56003302" y="-1.900997" z="-1.1503"/> + <v x="-0.020678001" y="-2.0084529" z="-1.393649"/> + <v x="-1.605234" y="-1.6703399" z="-1.2964441"/> + <v x="-2.29474" y="-0.35866201" z="-0.98595798"/> + <v x="-1.974468" y="0.532363" z="-0.96626902"/> + <v x="-1.513074" y="1.19463" z="-1.030398"/> + <v x="-2.4452579" y="-1.424242" z="-1.633417"/> + <v x="-0.83665597" y="-1.707882" z="-2.3099999"/> + <v x="0.771945" y="-1.991522" z="-1.633417"/> + <v x="-1.878222" y="-1.9710129" z="-0.98005003"/> + <v x="-0.91306102" y="-2.141197" z="-1.386"/> + <v x="0.052099999" y="-2.3113811" z="-0.98005003"/> + <v x="0.30597901" y="3.0704" z="-0.66853601"/> + <v x="-0.30000001" y="2.6600001" z="-0.98545599"/> + <v x="-0.75465399" y="2.6600001" z="-0.696823"/> + <v x="-2.780818" y="-5.0045772" z="-1.256179"/> + <v x="-1.5437239" y="-5.2227101" z="-1.776505"/> + <v x="-0.306629" y="-5.4408431" z="-1.256179"/> + <v x="0.17700399" y="2.261904" z="-1.077225"/> + <v x="-0.30299601" y="1.886027" z="-1.234484"/> + <v x="-0.73641801" y="2.3387599" z="-1.288914"/> + <v x="0.113004" y="2.6951039" z="-2.135669"/> + <v x="-0.30299801" y="2.3455701" z="-2.466733"/> + <v x="-0.30239701" y="3.145426" z="-1.89955"/> + <v x="-0.71899599" y="2.6951039" z="-2.135669"/> + <v x="0.233666" y="3.288528" z="-3.5978539"/> + <v x="-0.30301401" y="2.8526509" z="-3.8240809"/> + <v x="-0.302894" y="3.805294" z="-3.3972349"/> + <v x="-0.83969498" y="3.288528" z="-3.5978539"/> + <v x="0.038846999" y="1.969946" z="-0.77179599"/> + <v x="-0.68299598" y="1.961905" z="-0.77179599"/> + <v x="-1.205299" y="5.5599999" z="-1.207065"/> + <v x="-0.30000001" y="5.4000001" z="-1.6632"/> + <v x="0.605299" y="5.5599999" z="-1.207065"/> + <v x="-0.94950598" y="3.8" z="-0.86600798"/> + <v x="-0.30000001" y="3.8" z="-1.22472"/> + <v x="0.34950599" y="3.8" z="-0.86600798"/> + <v x="-2.635195" y="-0.133736" z="-0.17291901"/> + <v x="-3.190764" y="-0.237763" z="-0.42267501"/> + <v x="-3.7314529" y="0.45253801" z="-0.46127099"/> + <v x="-3.6577339" y="1.432732" z="-0.519247"/> + <v x="-3.3646331" y="2.4472761" z="-0.335583"/> + <v x="-2.010843" y="-2.7416019" z="-0.99751598"/> + <v x="-1.028482" y="-2.914819" z="-1.410701"/> + <v x="-0.046119999" y="-3.0880361" z="-0.99751598"/> + <v x="-0.28231999" y="5.043334" z="-1.0282381"/> + <v x="0.21336" y="5.043334" z="-0.55668598"/> + <v x="-0.277383" y="5.043334" z="-0.021661"/> + <v x="-0.84351897" y="5.043334" z="-0.53359097"/> + <v x="-0.248935" y="6.003334" z="-1.075456"/> + <v x="0.289309" y="6.003334" z="-0.55674899"/> + <v x="-0.243503" y="6.003334" z="-0.060683001"/> + <v x="-0.72055602" y="6.003334" z="-0.531344"/> + <v x="-0.31815201" y="7.2412591" z="-1.051544"/> + <v x="0.201994" y="7.2412591" z="-0.55671698"/> + <v x="-0.312971" y="7.2412591" z="-0.083489001"/> + <v x="-0.77474302" y="7.2412591" z="-0.53248203"/> + <v x="-0.312208" y="7.441258" z="-0.88016802"/> + <v x="0.028031999" y="7.441258" z="-0.55648899"/> + <v x="-0.308819" y="7.441258" z="-0.246939"/> + <v x="-0.61087602" y="7.441258" z="-0.540636"/> + <v x="0.82803202" y="7.941258" z="-0.55648899"/> + <v x="-0.77196801" y="7.941258" z="-0.55648899"/> + <v x="-0.30196801" y="7.941258" z="-1.056489"/> + <v x="-0.30196801" y="7.941258" z="-0.086488999"/> + <v x="0.025919" y="3.4047999" z="-3.7944169"/> + <v x="-0.30297601" y="3.122947" z="-3.936388"/> + <v x="-0.30290899" y="3.565685" z="-3.6913919"/> + <v x="-0.63186097" y="3.4047999" z="-3.7944169"/> + <v x="0.085155003" y="3.7754059" z="-4.4194379"/> + <v x="-0.31295601" y="3.6047781" z="-4.5895019"/> + <v x="-0.34874001" y="3.8724051" z="-4.2754788"/> + <v x="-0.79699701" y="3.7754059" z="-4.4189448"/> + <v x="-0.314349" y="3.9138551" z="-4.6669569"/> + <v x="-1.896271" y="5.4830942" z="-1.668707"/> + <v x="-1.298123" y="3.308856" z="-1.265097"/> + <v x="0.223244" y="3.4876051" z="-3.9047229"/> + <v x="-0.30298799" y="3.0366399" z="-4.1318769"/> + <v x="-0.30287999" y="3.7450211" z="-3.7398829"/> + <v x="-0.82920402" y="3.4876051" z="-3.9047229"/> + <v x="-2.746309" y="-0.154542" z="-0.22287001"/> + <v x="0.347945" y="2.6850879" z="-0.178995"/> + <v x="0.68322903" y="3.355655" z="-0.296534"/> + <v x="0.460307" y="2.628907" z="-0.178995"/> + <v x="0.79558998" y="3.299474" z="-0.296534"/> + <v x="0.94524699" y="-0.976695" z="-1.314887"/> + <v x="0.94524699" y="0.18490499" z="-1.314886"/> + <v x="1.146956" y="-0.976695" z="-0.17093401"/> + <v x="1.146957" y="0.18490499" z="-0.17093401"/> + <v x="0.79167002" y="1.056637" z="-0.45629999"/> + <v x="0.93480903" y="0.46639699" z="-0.45629999"/> + <v x="1.071148" y="-1.33776" z="-1.06776"/> + <v x="1.0745" y="-1.119632" z="-1.048751"/> + <v x="1.22586" y="-1.416599" z="-0.190345"/> + <v x="1.229212" y="-1.19847" z="-0.171336"/> + <v x="0.346852" y="2.9869161" z="-0.36769101"/> + <v x="0.57705301" y="1.14696" z="1.1"/> + <v x="-1.1" y="1.1" z="1.387597"/> + <v x="0.73710698" y="-0.932338" z="1.078609"/> + <v x="-1.056125" y="-1.2427191" z="1.73972"/> + <v x="0.78540802" y="1.29723" z="0"/> + <v x="1.024931" y="-1.165274" z="0"/> + <v x="0.86849302" y="-0" z="1.21"/> + <v x="-1.203335" y="0.19091301" z="1.628953"/> + <v x="1.1" y="-0" z="0"/> + <v x="-0.107659" y="1.1" z="1.4019901"/> + <v x="0.095753998" y="-0.75744098" z="1.856791"/> + <v x="-0.33785701" y="1.42563" z="0.41706499"/> + <v x="0.041475002" y="1.42563" z="0"/> + <v x="-0.75367999" y="1.51363" z="0"/> + <v x="-0.30299601" y="1.786027" z="0.47394699"/> + <v x="0.12806299" y="1.786027" z="0"/> + <v x="-0.77552199" y="1.7320729" z="0"/> + <v x="0.61906099" y="-1.3200001" z="1.622623"/> + <v x="0.54511398" y="-0.228689" z="1.740314"/> + <v x="0.90257502" y="-0.165659" z="1.361362"/> + <v x="0.55479699" y="0.88" z="1.740314"/> + <v x="0.91777301" y="0.88" z="1.361362"/> + <v x="0.66250801" y="1.8786891" z="1.630314"/> + <v x="1.019969" y="1.815659" z="1.180402"/> + <v x="0.78970498" y="2.673414" z="1.180253"/> + <v x="0.958866" y="-1.049783" z="1.146966"/> + <v x="0.81808603" y="-0.180557" z="1.515358"/> + <v x="0.83197999" y="0.88" z="1.515358"/> + <v x="0.93548" y="1.830557" z="1.405358"/> + <v x="-2.0988619" y="-1.219641" z="1.084437"/> + <v x="0.114797" y="0.88" z="1.8303"/> + <v x="0.229192" y="1.9550951" z="1.630314"/> + <v x="0.081095003" y="-0.62709999" z="2.316514"/> + <v x="0.0088050002" y="-0.113126" z="2.277858"/> + <v x="-0.43670499" y="0.106" z="1.693437"/> + <v x="0.0088050002" y="0.12908199" z="1.87672"/> + <v x="-0.29477501" y="-0.76514101" z="1.76127"/> + <v x="1.134931" y="-1.275274" z="0"/> + <v x="0.793428" y="-1.9918129" z="0"/> + <v x="-1.090157" y="-2.3558929" z="0"/> + <v x="-1.7864569" y="-2.0537" z="0"/> + <v x="-2.410157" y="-1.4299999" z="0"/> + <v x="0.033335999" y="-1.388941" z="1.8242559"/> + <v x="-1.009014" y="-1.965508" z="1.320001"/> + <v x="-1.283181" y="-0.56476998" z="1.704685"/> + <v x="0.56003302" y="-1.900997" z="1.1503"/> + <v x="-0.24644899" y="-2.361418" z="0"/> + <v x="-0.020678001" y="-2.0084529" z="1.393649"/> + <v x="-1.6230741" y="1.30463" z="0"/> + <v x="-2.2830739" y="0.75463003" z="0"/> + <v x="-2.6627431" y="-0.48217601" z="0"/> + <v x="-1.605234" y="-1.6703399" z="1.2964441"/> + <v x="-2.29474" y="-0.35866201" z="0.98595798"/> + <v x="-1.974468" y="0.532363" z="0.96626902"/> + <v x="-1.513074" y="1.19463" z="1.030398"/> + <v x="-3.111562" y="-1.306754" z="0"/> + <v x="-2.4452579" y="-1.424242" z="1.633417"/> + <v x="-0.83665597" y="-1.707882" z="2.3099999"/> + <v x="0.771945" y="-1.991522" z="1.633417"/> + <v x="1.4382499" y="-2.109009" z="0"/> + <v x="0.347945" y="2.6850879" z="0"/> + <v x="-2.2780049" y="-1.900521" z="0"/> + <v x="-1.878222" y="-1.9710129" z="0.98005003"/> + <v x="-0.91306102" y="-2.141197" z="1.386"/> + <v x="0.052099999" y="-2.3113811" z="0.98005003"/> + <v x="0.451882" y="-2.3818741" z="0"/> + <v x="0.30597901" y="3.0704" z="0.66853601"/> + <v x="-0.30000001" y="2.6600001" z="0.98545599"/> + <v x="-0.75465399" y="2.6600001" z="0.696823"/> + <v x="-3.2932401" y="-4.9142232" z="0"/> + <v x="-2.780818" y="-5.0045772" z="1.256179"/> + <v x="-1.5437239" y="-5.2227101" z="1.776505"/> + <v x="-0.306629" y="-5.4408431" z="1.256179"/> + <v x="0.20579199" y="-5.5311971" z="0"/> + <v x="-0.94297802" y="2.6600001" z="0"/> + <v x="0.17700399" y="2.261904" z="1.077225"/> + <v x="-0.30299601" y="1.886027" z="1.234484"/> + <v x="-2.575633" y="0.21952599" z="0"/> + <v x="-0.73641801" y="2.3387599" z="1.288914"/> + <v x="0.113004" y="2.6951039" z="2.135669"/> + <v x="-0.30299801" y="2.3455701" z="2.466733"/> + <v x="-0.30239701" y="3.145426" z="1.89955"/> + <v x="-0.71899599" y="2.6951039" z="2.135669"/> + <v x="0.233666" y="3.288528" z="3.5978539"/> + <v x="-0.30301401" y="2.8526509" z="3.8240809"/> + <v x="-0.302894" y="3.805294" z="3.3972349"/> + <v x="-0.83969498" y="3.288528" z="3.5978539"/> + <v x="0.038846999" y="1.969946" z="0.77179599"/> + <v x="-0.68299598" y="1.961905" z="0.77179599"/> + <v x="-1.6131721" y="5.7199998" z="0"/> + <v x="-1.205299" y="5.5599999" z="1.207065"/> + <v x="-0.30000001" y="5.4000001" z="1.6632"/> + <v x="0.605299" y="5.5599999" z="1.207065"/> + <v x="1.013172" y="5.7199998" z="0"/> + <v x="-1.21854" y="3.8" z="0"/> + <v x="-0.94950598" y="3.8" z="0.86600798"/> + <v x="-0.30000001" y="3.8" z="1.22472"/> + <v x="0.34950599" y="3.8" z="0.86600798"/> + <v x="0.61853999" y="3.8" z="0"/> + <v x="-2.635195" y="-0.133736" z="0.17291901"/> + <v x="-3.42133" y="-0.78881401" z="0"/> + <v x="-2.8300381" y="0.229284" z="0"/> + <v x="-3.190764" y="-0.237763" z="0.42267501"/> + <v x="-4.4887562" y="0.37418699" z="0"/> + <v x="-4.2579498" y="1.610584" z="0"/> + <v x="-3.634001" y="2.3926229" z="0"/> + <v x="-3.7884641" y="3.242053" z="0"/> + <v x="-3.1118691" y="2.542686" z="0"/> + <v x="-3.2549069" y="1.291237" z="0"/> + <v x="-3.1381919" y="0.52424997" z="0"/> + <v x="-3.7314529" y="0.45253801" z="0.46127099"/> + <v x="-3.6577339" y="1.432732" z="0.519247"/> + <v x="-3.3646331" y="2.4472761" z="0.335583"/> + <v x="-2.010843" y="-2.7416019" z="0.99751598"/> + <v x="-1.028482" y="-2.914819" z="1.410701"/> + <v x="-2.4177511" y="-2.669853" z="0"/> + <v x="0.36078799" y="-3.159785" z="0"/> + <v x="-0.046119999" y="-3.0880361" z="0.99751598"/> + <v x="-0.28231999" y="5.043334" z="1.0282381"/> + <v x="0.21336" y="5.043334" z="0.55668598"/> + <v x="-0.277383" y="5.043334" z="0.021661"/> + <v x="-0.84351897" y="5.043334" z="0.53359097"/> + <v x="-0.248935" y="6.003334" z="1.075456"/> + <v x="0.289309" y="6.003334" z="0.55674899"/> + <v x="-0.243503" y="6.003334" z="0.060683001"/> + <v x="-0.72055602" y="6.003334" z="0.531344"/> + <v x="-0.31815201" y="7.2412591" z="1.051544"/> + <v x="0.201994" y="7.2412591" z="0.55671698"/> + <v x="-0.312971" y="7.2412591" z="0.083489001"/> + <v x="-0.77474302" y="7.2412591" z="0.53248203"/> + <v x="-0.312208" y="7.441258" z="0.88016802"/> + <v x="0.028031999" y="7.441258" z="0.55648899"/> + <v x="-0.308819" y="7.441258" z="0.246939"/> + <v x="-0.61087602" y="7.441258" z="0.540636"/> + <v x="0.82803202" y="7.941258" z="0.55648899"/> + <v x="-0.77196801" y="7.941258" z="0.55648899"/> + <v x="-0.30196801" y="7.941258" z="1.056489"/> + <v x="-0.30196801" y="7.941258" z="0.086488999"/> + <v x="0.025919" y="3.4047999" z="3.7944169"/> + <v x="-0.30297601" y="3.122947" z="3.936388"/> + <v x="-0.30290899" y="3.565685" z="3.6913919"/> + <v x="-0.63186097" y="3.4047999" z="3.7944169"/> + <v x="0.085155003" y="3.7754059" z="4.4194379"/> + <v x="-0.31295601" y="3.6047781" z="4.5895019"/> + <v x="-0.34874001" y="3.8724051" z="4.2754788"/> + <v x="-0.79699701" y="3.7754059" z="4.4189448"/> + <v x="-0.314349" y="3.9138551" z="4.6669569"/> + <v x="-2.1867039" y="5.4291391" z="0"/> + <v x="-1.896271" y="5.4830942" z="1.668707"/> + <v x="-1.423142" y="2.9253809" z="0"/> + <v x="-1.298123" y="3.308856" z="1.265097"/> + <v x="0.223244" y="3.4876051" z="3.9047229"/> + <v x="-0.30298799" y="3.0366399" z="4.1318769"/> + <v x="-0.30287999" y="3.7450211" z="3.7398829"/> + <v x="-0.82920402" y="3.4876051" z="3.9047229"/> + <v x="-2.746309" y="-0.154542" z="0.22287001"/> + <v x="-2.6773951" y="0.22342899" z="0"/> + <v x="-2.776531" y="-0.52817202" z="0"/> + <v x="0.68322903" y="3.355655" z="0"/> + <v x="0.347945" y="2.6850879" z="0.178995"/> + <v x="0.68322903" y="3.355655" z="0.296534"/> + <v x="0.460307" y="2.628907" z="0"/> + <v x="0.79558998" y="3.299474" z="0"/> + <v x="0.460307" y="2.628907" z="0.178995"/> + <v x="0.79558998" y="3.299474" z="0.296534"/> + <v x="0.94524699" y="-0.976695" z="1.314887"/> + <v x="0.94524699" y="0.18490499" z="1.314886"/> + <v x="1.146956" y="-0.976695" z="0.17093401"/> + <v x="1.146957" y="0.18490499" z="0.17093401"/> + <v x="0.90166998" y="1.056637" z="0"/> + <v x="1.044809" y="0.46639699" z="0"/> + <v x="0.79167002" y="1.056637" z="0.45629999"/> + <v x="0.93480903" y="0.46639699" z="0.45629999"/> + <v x="1.071148" y="-1.33776" z="1.06776"/> + <v x="1.0745" y="-1.119632" z="1.048751"/> + <v x="1.22586" y="-1.416599" z="0.190345"/> + <v x="1.229212" y="-1.19847" z="0.171336"/> + <v x="0.346852" y="2.9869161" z="0.36769101"/> + </vertices> + <normals count="631"> + <v x="0.51020801" y="0.63768399" z="0.57704401"/> + <v x="-0.219855" y="0.64421499" z="-0.73253602"/> + <v x="0.93289" y="0.28574499" z="0.21912301"/> + <v x="-0.26679301" y="-0.229469" z="-0.93600303"/> + <v x="0.95675498" y="0.082796998" z="0.27875599"/> + <v x="-0.31788099" y="0.20767801" z="-0.92507702"/> + <v x="-0.46675" y="0.762474" z="-0.44804201"/> + <v x="0.329081" y="-0.31629401" z="-0.88973701"/> + <v x="0.047394998" y="0.77776402" z="-0.62669802"/> + <v x="0.062166002" y="-0.85247302" z="-0.51902801"/> + <v x="0.60466301" y="-0.31553099" z="-0.73128402"/> + <v x="0.49592599" y="-0.031892002" z="-0.86776298"/> + <v x="0.99707001" y="0.029328" z="0.070497997"/> + <v x="0.40336299" y="0.045503002" z="-0.91387701"/> + <v x="0.99038702" y="-0.03122" z="0.134617"/> + <v x="0.37446201" y="0.242134" z="-0.89504701"/> + <v x="0.740318" y="0.208441" z="0.63905799"/> + <v x="0.109134" y="0.94027501" z="0.32239801"/> + <v x="0.98351997" y="0.051697999" z="-0.173162"/> + <v x="0.78807902" y="-0.038453002" z="-0.61433798"/> + <v x="0.774194" y="-0.0079349997" z="-0.63289303"/> + <v x="0.80654299" y="0.13013101" z="-0.576617"/> + <v x="-0.74687898" y="-0.33622199" z="-0.57368702"/> + <v x="-0.30640599" y="0.208655" z="-0.92873901"/> + <v x="-0.665151" y="0.68449998" z="-0.298318"/> + <v x="0.303781" y="-0.38761601" z="-0.870296"/> + <v x="0.22260199" y="0.36106399" z="-0.90557599"/> + <v x="-0.31766701" y="0.22498199" z="-0.92110997"/> + <v x="0.106326" y="0.32926399" z="-0.9382"/> + <v x="-0.28736201" y="-0.101108" z="-0.952452"/> + <v x="0.117161" y="-0.32166499" z="-0.93954301"/> + <v x="-0.21543001" y="-0.78975803" z="-0.57432801"/> + <v x="-0.355358" y="0.048494" z="-0.93343902"/> + <v x="0.586169" y="-0.71059299" z="-0.38911101"/> + <v x="0.12814701" y="-0.80510902" z="-0.57908899"/> + <v x="-0.52647501" y="-0.58241498" z="-0.61934298"/> + <v x="-0.79802901" y="0.056031998" z="-0.599994"/> + <v x="-0.71523201" y="0.39991501" z="-0.573107"/> + <v x="-0.46430901" y="0.748344" z="-0.473647"/> + <v x="-0.45616001" y="-0.83632898" z="-0.30399501"/> + <v x="-0.156774" y="-0.889126" z="-0.429914"/> + <v x="0.142582" y="-0.94192302" z="-0.30399501"/> + <v x="-0.66377801" y="-0.48960799" z="-0.565355"/> + <v x="-0.105808" y="-0.58061498" z="-0.80724502"/> + <v x="0.46299601" y="-0.67339098" z="-0.57631201"/> + <v x="0.80190402" y="-0.146336" z="-0.57924098"/> + <v x="-0.030456999" y="0.67604601" z="-0.73619801"/> + <v x="-0.89376497" y="-0.020112" z="-0.44801199"/> + <v x="-0.67836499" y="-0.448744" z="-0.58171302"/> + <v x="-0.107578" y="-0.56144899" z="-0.82046002"/> + <v x="0.459822" y="-0.67381799" z="-0.57835603"/> + <v x="0.905545" y="-0.20651899" z="-0.370525"/> + <v x="0.012421" y="-0.92773199" z="-0.37293601"/> + <v x="-0.95159799" y="-0.23178799" z="-0.201758"/> + <v x="0.99917603" y="-0.022675" z="0.033142999"/> + <v x="-0.0041809999" y="-0.93728399" z="-0.34845999"/> + <v x="-0.0086669996" y="0.90838301" z="0.41801199"/> + <v x="-0.99191302" y="-0.124851" z="-0.021942999"/> + <v x="0.94161803" y="0.084657997" z="-0.32581601"/> + <v x="0" y="-0.74538398" z="-0.66661602"/> + <v x="0.000153" y="0.99868798" z="0.050843999"/> + <v x="-0.94161803" y="0.084902003" z="-0.32572401"/> + <v x="0.585253" y="-0.77169102" z="-0.248878"/> + <v x="-0.78530198" y="-0.570086" z="-0.24137101"/> + <v x="-0.77114201" y="-0.227302" z="-0.59465301"/> + <v x="0" y="-0.26429" z="-0.96441501"/> + <v x="0.77114201" y="-0.227302" z="-0.59465301"/> + <v x="-0.76564801" y="-0.223579" z="-0.60310698"/> + <v x="0.0050360002" y="-0.24951901" z="-0.96832198"/> + <v x="0.76375598" y="-0.220313" z="-0.60670799"/> + <v x="-0.47923201" y="0.142308" z="-0.866054"/> + <v x="0.105411" y="-0.21015" z="-0.97195399"/> + <v x="-0.072206996" y="-0.057863001" z="-0.99569702"/> + <v x="0.052735999" y="0.117405" z="-0.99166799"/> + <v x="0.182501" y="0.239021" z="-0.95370299"/> + <v x="-0.67088801" y="0.220466" z="-0.707968"/> + <v x="0.025056001" y="0.090700999" z="-0.99554402"/> + <v x="0.713157" y="-0.037567999" z="-0.69997299"/> + <v x="-0.027833" y="-0.010041" z="-0.999542"/> + <v x="0.99813801" y="-0.059420001" z="-0.013092"/> + <v x="0.00116" y="0.031555999" z="0.99948102"/> + <v x="-0.99670398" y="0.079409003" z="0.014801"/> + <v x="-0.0075079999" y="0.001404" z="-0.99996901"/> + <v x="0.99996901" y="0.0062560001" z="-0.002075"/> + <v x="0.021638" y="0.022888999" z="0.99948102"/> + <v x="-0.99935901" y="0.019166" z="0.029541999"/> + <v x="-0.057374999" y="0.31000701" z="-0.948973"/> + <v x="0.940458" y="0.33973199" z="0.0075690001"/> + <v x="-0.029115001" y="0.303507" z="0.95236099"/> + <v x="-0.95983797" y="0.27793199" z="0.037537999"/> + <v x="-0.131108" y="0.15823799" z="-0.97863698"/> + <v x="0.99978602" y="0.00070199999" z="0.020051001"/> + <v x="-0.098972" y="0.166601" z="0.98101699"/> + <v x="-0.96823001" y="0.247078" z="0.037996002"/> + <v x="0.957793" y="0.28727099" z="0.0058900001"/> + <v x="-0.88491499" y="0.46562099" z="0.0085150003"/> + <v x="-0.14526799" y="0.41090101" z="-0.89999098"/> + <v x="-0.134648" y="0.43168399" z="0.89190298"/> + <v x="0.29322201" y="0.412671" z="-0.86236203"/> + <v x="0.012879" y="0.013306" z="-0.99981701"/> + <v x="0.0088499999" y="0.79421401" z="-0.60753202"/> + <v x="-0.30597901" y="0.404645" z="-0.86172098"/> + <v x="0.92409998" y="0.282083" z="-0.25772899"/> + <v x="0.027435999" y="-0.60035998" z="-0.79921901"/> + <v x="-0.012055" y="0.93798602" z="0.34644601"/> + <v x="-0.93664402" y="0.247444" z="-0.24781001"/> + <v x="0.040222999" y="0.62425601" z="-0.78014499"/> + <v x="-0.94088602" y="-0.28910199" z="-0.17633601"/> + <v x="-0.89751899" y="-0.38923299" z="-0.207221"/> + <v x="-0.56419599" y="0.34589699" z="-0.74965698"/> + <v x="0" y="0.914792" z="-0.403851"/> + <v x="-6.0999999e-005" y="-0.26099399" z="-0.96533102"/> + <v x="0.564165" y="0.34586599" z="-0.74968702"/> + <v x="0.305246" y="-0.023530001" z="-0.95196402"/> + <v x="-0.79946297" y="-0.28870499" z="-0.52674901"/> + <v x="-0.27051601" y="0.73259699" z="-0.62456101"/> + <v x="0.248726" y="-0.81279898" z="-0.52674901"/> + <v x="0.74840498" y="0.223121" z="-0.62456101"/> + <v x="0.98480201" y="-0" z="-0.17362"/> + <v x="0.98480201" y="-0" z="-0.17362"/> + <v x="0.98480201" y="-0" z="-0.17362"/> + <v x="0.98480201" y="-0" z="-0.17362"/> + <v x="0.94619602" y="0.22943801" z="-0.228095"/> + <v x="0.94619602" y="0.22943801" z="-0.228095"/> + <v x="0.98480201" y="-0" z="-0.17362"/> + <v x="0.98480201" y="-0" z="-0.17362"/> + <v x="0.98480201" y="-0" z="-0.17362"/> + <v x="0.98480201" y="-0" z="-0.17362"/> + <v x="0.95309299" y="-0.20953999" z="-0.218299"/> + <v x="0.51020801" y="0.63768399" z="-0.57704401"/> + <v x="-0.219855" y="0.64421499" z="0.73253602"/> + <v x="0.93289" y="0.28574499" z="-0.21912301"/> + <v x="-0.26679301" y="-0.229469" z="0.93600303"/> + <v x="0.68971801" y="0.72405201" z="0"/> + <v x="0.86510801" y="0.50154102" z="0"/> + <v x="0.95675498" y="0.082796998" z="-0.27875599"/> + <v x="-0.31788099" y="0.20767801" z="0.92507702"/> + <v x="0.99765003" y="0.068177998" z="0"/> + <v x="-0.46675" y="0.762474" z="0.44804201"/> + <v x="0.329081" y="-0.31629401" z="0.88973701"/> + <v x="0.047394998" y="0.77776402" z="0.62669802"/> + <v x="0.64802998" y="0.76158899" z="0"/> + <v x="-0.591205" y="0.80648202" z="0"/> + <v x="0.062166002" y="-0.85247302" z="0.51902801"/> + <v x="0.903714" y="-0.428083" z="0"/> + <v x="-0.92422301" y="-0.381787" z="0"/> + <v x="0.60466301" y="-0.31553099" z="0.73128402"/> + <v x="0.49592599" y="-0.031892002" z="0.86776298"/> + <v x="0.99707001" y="0.029328" z="-0.070497997"/> + <v x="0.40336299" y="0.045503002" z="0.91387701"/> + <v x="0.99038702" y="-0.03122" z="-0.134617"/> + <v x="0.37446201" y="0.242134" z="0.89504701"/> + <v x="0.740318" y="0.208441" z="-0.63905799"/> + <v x="0.109134" y="0.94027501" z="-0.32239801"/> + <v x="0.98351997" y="0.051697999" z="0.173162"/> + <v x="0.78807902" y="-0.038453002" z="0.61433798"/> + <v x="0.774194" y="-0.0079349997" z="0.63289303"/> + <v x="0.80654299" y="0.13013101" z="0.576617"/> + <v x="-0.74687898" y="-0.33622199" z="0.57368702"/> + <v x="-0.30640599" y="0.208655" z="0.92873901"/> + <v x="-0.665151" y="0.68449998" z="0.298318"/> + <v x="0.303781" y="-0.38761601" z="0.870296"/> + <v x="0.22260199" y="0.36106399" z="0.90557599"/> + <v x="-0.31766701" y="0.22498199" z="0.92110997"/> + <v x="0.106326" y="0.32926399" z="0.9382"/> + <v x="-0.28736201" y="-0.101108" z="0.952452"/> + <v x="0.98532099" y="0.17053699" z="0"/> + <v x="0.68715501" y="-0.726493" z="0"/> + <v x="-0.234626" y="-0.972076" z="0"/> + <v x="-0.57918" y="-0.81518" z="0"/> + <v x="-0.87841398" y="-0.477828" z="0"/> + <v x="0.117161" y="-0.32166499" z="0.93954301"/> + <v x="-0.21543001" y="-0.78975803" z="0.57432801"/> + <v x="-0.355358" y="0.048494" z="0.93343902"/> + <v x="0.586169" y="-0.71059299" z="0.38911101"/> + <v x="0.119175" y="-0.99285901" z="0"/> + <v x="0.12814701" y="-0.80510902" z="0.57908899"/> + <v x="-0.514512" y="0.85747898" z="0"/> + <v x="-0.83880103" y="0.54442" z="0"/> + <v x="-0.78530198" y="-0.61909801" z="0"/> + <v x="-0.52647501" y="-0.58241498" z="0.61934298"/> + <v x="-0.79802901" y="0.056031998" z="0.599994"/> + <v x="-0.71523201" y="0.39991501" z="0.573107"/> + <v x="-0.46430901" y="0.748344" z="0.473647"/> + <v x="-0.58015698" y="-0.81447798" z="0"/> + <v x="-0.45616001" y="-0.83632898" z="0.30399501"/> + <v x="-0.156774" y="-0.889126" z="0.429914"/> + <v x="0.142582" y="-0.94192302" z="0.30399501"/> + <v x="0.26661" y="-0.96377498" z="0"/> + <v x="0.536699" y="-0.84374499" z="0"/> + <v x="-0.89178097" y="-0.45243701" z="0"/> + <v x="-0.66377801" y="-0.48960799" z="0.565355"/> + <v x="-0.105808" y="-0.58061498" z="0.80724502"/> + <v x="0.46299601" y="-0.67339098" z="0.57631201"/> + <v x="0.70183402" y="-0.71233302" z="0"/> + <v x="0.80190402" y="-0.146336" z="0.57924098"/> + <v x="-0.030456999" y="0.67604601" z="0.73619801"/> + <v x="-0.89376497" y="-0.020112" z="0.44801199"/> + <v x="-0.91561598" y="-0.40199" z="0"/> + <v x="-0.67836499" y="-0.448744" z="0.58171302"/> + <v x="-0.107578" y="-0.56144899" z="0.82046002"/> + <v x="0.459822" y="-0.67381799" z="0.57835603"/> + <v x="0.69371599" y="-0.72023702" z="0"/> + <v x="-0.98358101" y="-0.18039501" z="0"/> + <v x="0.905545" y="-0.20651899" z="0.370525"/> + <v x="0.012421" y="-0.92773199" z="0.37293601"/> + <v x="-0.76940203" y="0.63875198" z="0"/> + <v x="-0.95159799" y="-0.23178799" z="0.201758"/> + <v x="0.99917603" y="-0.022675" z="-0.033142999"/> + <v x="-0.0041809999" y="-0.93728399" z="0.34845999"/> + <v x="-0.0086669996" y="0.90838301" z="-0.41801199"/> + <v x="-0.99191302" y="-0.124851" z="0.021942999"/> + <v x="0.94161803" y="0.084657997" z="0.32581601"/> + <v x="0" y="-0.74538398" z="0.66661602"/> + <v x="0.000153" y="0.99868798" z="-0.050843999"/> + <v x="-0.94161803" y="0.084902003" z="0.32572401"/> + <v x="0.585253" y="-0.77169102" z="0.248878"/> + <v x="-0.78530198" y="-0.570086" z="0.24137101"/> + <v x="-0.97952199" y="-0.2013" z="0"/> + <v x="-0.77114201" y="-0.227302" z="0.59465301"/> + <v x="0" y="-0.26429" z="0.96441501"/> + <v x="0.77114201" y="-0.227302" z="0.59465301"/> + <v x="0.97952199" y="-0.2013" z="0"/> + <v x="-0.977386" y="-0.211432" z="0"/> + <v x="-0.76564801" y="-0.223579" z="0.60310698"/> + <v x="0.0050360002" y="-0.24951901" z="0.96832198"/> + <v x="0.76375598" y="-0.220313" z="0.60670799"/> + <v x="0.98046798" y="-0.19660001" z="0"/> + <v x="-0.47923201" y="0.142308" z="0.866054"/> + <v x="-0.218207" y="-0.97588998" z="0"/> + <v x="0.58348298" y="0.81209803" z="0"/> + <v x="0.105411" y="-0.21015" z="0.97195399"/> + <v x="-0.96343899" y="-0.26789099" z="0"/> + <v x="-0.94381499" y="0.33036301" z="0"/> + <v x="-0.97302198" y="0.23065899" z="0"/> + <v x="-0.46110401" y="0.887326" z="0"/> + <v x="0.94586003" y="0.324503" z="0"/> + <v x="0.99789399" y="-0.064608" z="0"/> + <v x="0.93279803" y="0.360302" z="0"/> + <v x="-0.072206996" y="-0.057863001" z="0.99569702"/> + <v x="0.052735999" y="0.117405" z="0.99166799"/> + <v x="0.182501" y="0.239021" z="0.95370299"/> + <v x="-0.67088801" y="0.220466" z="0.707968"/> + <v x="0.025056001" y="0.090700999" z="0.99554402"/> + <v x="-0.96151602" y="0.27466699" z="0"/> + <v x="0.995911" y="-0.090242997" z="0"/> + <v x="0.713157" y="-0.037567999" z="0.69997299"/> + <v x="-0.027833" y="-0.010041" z="0.999542"/> + <v x="0.99813801" y="-0.059420001" z="0.013092"/> + <v x="0.00116" y="0.031555999" z="-0.99948102"/> + <v x="-0.99670398" y="0.079409003" z="-0.014801"/> + <v x="-0.0075079999" y="0.001404" z="0.99996901"/> + <v x="0.99996901" y="0.0062560001" z="0.002075"/> + <v x="0.021638" y="0.022888999" z="-0.99948102"/> + <v x="-0.99935901" y="0.019166" z="-0.029541999"/> + <v x="-0.057374999" y="0.31000701" z="0.948973"/> + <v x="0.940458" y="0.33973199" z="-0.0075690001"/> + <v x="-0.029115001" y="0.303507" z="-0.95236099"/> + <v x="-0.95983797" y="0.27793199" z="-0.037537999"/> + <v x="-0.131108" y="0.15823799" z="0.97863698"/> + <v x="0.99978602" y="0.00070199999" z="-0.020051001"/> + <v x="-0.098972" y="0.166601" z="-0.98101699"/> + <v x="-0.96823001" y="0.247078" z="-0.037996002"/> + <v x="0.957793" y="0.28727099" z="-0.0058900001"/> + <v x="-0.88491499" y="0.46562099" z="-0.0085150003"/> + <v x="-0.14526799" y="0.41090101" z="0.89999098"/> + <v x="-0.134648" y="0.43168399" z="-0.89190298"/> + <v x="0.29322201" y="0.412671" z="0.86236203"/> + <v x="0.012879" y="0.013306" z="0.99981701"/> + <v x="0.0088499999" y="0.79421401" z="0.60753202"/> + <v x="-0.30597901" y="0.404645" z="0.86172098"/> + <v x="0.92409998" y="0.282083" z="0.25772899"/> + <v x="0.027435999" y="-0.60035998" z="0.79921901"/> + <v x="-0.012055" y="0.93798602" z="-0.34644601"/> + <v x="-0.93664402" y="0.247444" z="0.24781001"/> + <v x="0.040222999" y="0.62425601" z="0.78014499"/> + <v x="-0.95586997" y="-0.29368001" z="0"/> + <v x="-0.94088602" y="-0.28910199" z="0.17633601"/> + <v x="-0.91503602" y="-0.40333301" z="0"/> + <v x="-0.89751899" y="-0.38923299" z="0.207221"/> + <v x="-0.56419599" y="0.34589699" z="0.74965698"/> + <v x="0" y="0.914792" z="0.403851"/> + <v x="-6.0999999e-005" y="-0.26099399" z="0.96533102"/> + <v x="0.564165" y="0.34586599" z="0.74968702"/> + <v x="0.305246" y="-0.023530001" z="0.95196402"/> + <v x="0.36341399" y="0.93160802" z="0"/> + <v x="0.50425702" y="-0.86355197" z="0"/> + <v x="-0.31620201" y="0.948668" z="0"/> + <v x="-0.79946297" y="-0.28870499" z="0.52674901"/> + <v x="-0.27051601" y="0.73259699" z="0.62456101"/> + <v x="0.31620201" y="-0.948668" z="0"/> + <v x="0.948668" y="0.31620201" z="0"/> + <v x="0.248726" y="-0.81279898" z="0.52674901"/> + <v x="0.74840498" y="0.223121" z="0.62456101"/> + <v x="0.98480201" y="-0" z="0.17362"/> + <v x="0.98480201" y="-0" z="0.17362"/> + <v x="0.98480201" y="-0" z="0.17362"/> + <v x="0.98480201" y="-0" z="0.17362"/> + <v x="0.97180098" y="0.235664" z="0"/> + <v x="0.97180098" y="0.235664" z="0"/> + <v x="0.94619602" y="0.22943801" z="0.228095"/> + <v x="0.94619602" y="0.22943801" z="0.228095"/> + <v x="-0.98480201" y="-0" z="-0.17362"/> + <v x="-0.98480201" y="-0" z="-0.17362"/> + <v x="-0.98480201" y="-0" z="-0.17362"/> + <v x="-0.98480201" y="-0" z="-0.17362"/> + <v x="0.95309299" y="-0.20953999" z="0.218299"/> + <v x="-0.054841001" y="0.96453601" z="-0.258192"/> + <v x="0.96686602" y="-0.109604" z="-0.230556"/> + <v x="-0.054696001" y="0.085703999" z="-0.99481797"/> + <v x="0.48151499" y="-0.21683" z="0.84919298"/> + <v x="-0.82954001" y="0.186203" z="-0.52648997"/> + <v x="-0.052067999" y="0.26177901" z="-0.96372199"/> + <v x="0.949543" y="0.24428999" z="-0.19670101"/> + <v x="-0.71021003" y="0.40411901" z="-0.57644498"/> + <v x="-0.041005999" y="0.079002" z="-0.99603099"/> + <v x="0.17238" y="0.97106099" z="-0.165308"/> + <v x="0.168082" y="0.97384697" z="-0.15287501"/> + <v x="0.066647001" y="0.951882" z="-0.29912901"/> + <v x="-0.0045670001" y="0.94912601" z="-0.31486201"/> + <v x="-0.034735002" y="0.95539701" z="-0.293275"/> + <v x="-0.70817602" y="-0.053256001" z="-0.70402402"/> + <v x="0.72836697" y="-0.17500301" z="-0.662462"/> + <v x="0.76707" y="-0.073990002" z="-0.63728201"/> + <v x="0.633403" y="-0.0068839998" z="-0.77379203"/> + <v x="0.63392103" y="0.018575" z="-0.773175"/> + <v x="0.912826" y="0.245104" z="-0.32660699"/> + <v x="0.91102397" y="-0.035983" z="-0.410781"/> + <v x="0.87533402" y="-0.01209" z="-0.483367"/> + <v x="0.87757999" y="-0.059487" z="-0.475725"/> + <v x="0.63764399" y="0.299797" z="-0.70959997"/> + <v x="0.334566" y="-0.079640001" z="-0.93900102"/> + <v x="0.084760003" y="0.48069799" z="-0.87278003"/> + <v x="0.113239" y="0.135011" z="-0.98435199"/> + <v x="0.246408" y="-0.000138" z="-0.96916598"/> + <v x="0.99305302" y="0.113335" z="-0.031637002"/> + <v x="-0.38302299" y="0.110755" z="-0.91707498"/> + <v x="-0.81131703" y="-0.080966003" z="-0.57897198"/> + <v x="-0.047343999" y="-0.96139598" z="-0.271065"/> + <v x="-0.24891099" y="0.82911098" z="-0.50061899"/> + <v x="0.331563" y="-0.93284899" z="-0.140922"/> + <v x="0.36528701" y="-0.58127099" z="-0.72711003"/> + <v x="0.88331401" y="-0.416668" z="-0.21481"/> + <v x="0.839275" y="-0.39176199" z="-0.37701401"/> + <v x="0.571679" y="0.81898099" z="0.049536999"/> + <v x="0.71118701" y="0.102981" z="0.69541901"/> + <v x="0.77193397" y="0.065531999" z="0.63231599"/> + <v x="-0.1123" y="-0.53134501" z="-0.839679"/> + <v x="-0.40512401" y="-0.86488497" z="-0.29639101"/> + <v x="-0.036238998" y="-0.96278298" z="-0.26783401"/> + <v x="0.257866" y="-0.945728" z="-0.19774701"/> + <v x="-0.68936598" y="-0.65646797" z="-0.306308"/> + <v x="-0.91857201" y="-0.209497" z="-0.335168"/> + <v x="-0.073756002" y="0.026815999" z="-0.996916"/> + <v x="-0.237011" y="-0.026606999" z="-0.97114301"/> + <v x="-0.83869499" y="0.36596799" z="-0.40330899"/> + <v x="-0.71598899" y="0.64866602" z="-0.25805399"/> + <v x="-0.40213901" y="0.375011" z="0.83525503"/> + <v x="-0.50796002" y="-0.136508" z="0.85049498"/> + <v x="-0.27798799" y="-0.49586001" z="-0.82270598"/> + <v x="-0.52579898" y="-0.18537501" z="-0.83016402"/> + <v x="-0.56040198" y="-0.082514003" z="-0.82410002"/> + <v x="-0.56609601" y="0.184111" z="-0.80351597"/> + <v x="-0.56132799" y="0.28919199" z="-0.77542198"/> + <v x="0.200261" y="0.032265998" z="-0.97921097"/> + <v x="0.262492" y="-0.94887203" z="-0.175326"/> + <v x="-0.327014" y="-0.84492701" z="-0.42327401"/> + <v x="0.018310999" y="-0.90581697" z="-0.42327401"/> + <v x="-0.57119501" y="-0.801871" z="-0.175326"/> + <v x="-0.344625" y="0.22152799" z="-0.91222799"/> + <v x="-0.93755502" y="-0.213798" z="-0.27437299"/> + <v x="0.515131" y="-0.20632499" z="-0.83190697"/> + <v x="0.39559501" y="0.056974001" z="-0.91665602"/> + <v x="-0.86314702" y="0.336698" z="-0.37631401"/> + <v x="0.95224702" y="-0.185827" z="-0.24226999"/> + <v x="0.92271602" y="-0.060309" z="-0.38073301"/> + <v x="-0.49615601" y="-0.19400799" z="-0.84627998"/> + <v x="-0.23182499" y="0.96433997" z="-0.12769599"/> + <v x="-0.736045" y="0.61315697" z="0.286838"/> + <v x="-0.70633698" y="-0.65691698" z="-0.26371899"/> + <v x="0.71358401" y="0.64396298" z="0.275879"/> + <v x="0.69150901" y="-0.66631299" z="-0.27900001"/> + <v x="0.69643199" y="-0.67809802" z="-0.234872"/> + <v x="-0.69643098" y="-0.67810398" z="-0.23485699"/> + <v x="0.74430501" y="0.60359699" z="0.285797"/> + <v x="-0.74380201" y="0.60402" z="0.28621501"/> + <v x="0.64573199" y="-0.67632997" z="-0.354413"/> + <v x="-0.632837" y="-0.65540802" z="-0.41226"/> + <v x="-0.26385701" y="-0.93956399" z="-0.218172"/> + <v x="0.33120501" y="-0.92412603" z="-0.19051"/> + <v x="0.93709701" y="-0.192609" z="-0.29111901"/> + <v x="-0.47011501" y="-0.23327699" z="-0.851219"/> + <v x="0.47011501" y="-0.23327699" z="-0.851219"/> + <v x="-0.93709701" y="-0.192609" z="-0.29111901"/> + <v x="0.180071" y="0.42072701" z="-0.88913602"/> + <v x="0.98885298" y="-0.147515" z="-0.02024"/> + <v x="-0.85227698" y="-0.46874699" z="-0.232164"/> + <v x="-0.29381201" y="0.83634901" z="-0.46281201"/> + <v x="-0.99413902" y="-0.104869" z="0.026277"/> + <v x="-0.96942002" y="-0.13304999" z="-0.20620801"/> + <v x="-0.82298303" y="0.35560301" z="-0.442996"/> + <v x="-0.92731303" y="-0.104977" z="-0.359265"/> + <v x="0.208222" y="0.52470797" z="-0.82542402"/> + <v x="0.32381201" y="-0.60128999" z="-0.73047602"/> + <v x="0.49413601" y="0.395385" z="-0.77427399"/> + <v x="0.70127302" y="-0.006397" z="-0.71286398"/> + <v x="0.78669798" y="-0.102069" z="-0.608841"/> + <v x="0.57800001" y="0.55918002" z="-0.59433502"/> + <v x="-0.618433" y="0.38566899" z="-0.68469"/> + <v x="-0.58168501" y="0.058694001" z="-0.81129402"/> + <v x="-0.45079401" y="-0.407693" z="-0.79408503"/> + <v x="-0.76121199" y="-0.138421" z="-0.63355798"/> + <v x="0.917835" y="-0.10748" z="-0.38213399"/> + <v x="-0.90900701" y="0.165117" z="-0.38267899"/> + <v x="0.38339901" y="-0.027725" z="-0.92316699"/> + <v x="-0.37349099" y="0.085216001" z="-0.923711"/> + <v x="0.70945102" y="-0.026246" z="0.70426601"/> + <v x="-0.68397701" y="0.069781996" z="0.72615802"/> + <v x="0.69056499" y="-0.057080001" z="-0.72101498"/> + <v x="-0.708529" y="0.041196" z="-0.70447803"/> + <v x="-0.69950098" y="-0.028030001" z="0.714082"/> + <v x="0.69074899" y="0.050647002" z="-0.72131902"/> + <v x="-0.75292802" y="-0.031482" z="-0.65734899"/> + <v x="0.67824101" y="0.049693" z="0.73315698"/> + <v x="0.59093899" y="0.514714" z="-0.621176"/> + <v x="-0.64717102" y="0.50704002" z="-0.56928098"/> + <v x="0.58335203" y="0.50668299" z="0.63480097"/> + <v x="-0.59766603" y="0.51475102" z="0.614676"/> + <v x="-0" y="1" z="0"/> + <v x="0" y="1" z="0"/> + <v x="0.428287" y="-0.48181" z="-0.76447999"/> + <v x="0.41630501" y="-0.461584" z="0.783346"/> + <v x="-0.68805999" y="-0.206706" z="0.69559097"/> + <v x="-0.71701503" y="-0.23432399" z="-0.65649199"/> + <v x="-0.474666" y="0.78489101" z="-0.398294"/> + <v x="0.57349598" y="-0.30071101" z="-0.76201999"/> + <v x="-0.57343501" y="-0.30057999" z="-0.76211798"/> + <v x="0.47480899" y="0.78481197" z="-0.398278"/> + <v x="-0.41136" y="0.76262301" z="0.49918899"/> + <v x="0.60277301" y="-0.674348" z="-0.42651999"/> + <v x="-0.55864698" y="-0.723252" z="-0.405981"/> + <v x="0.413201" y="0.79251498" z="0.44853699"/> + <v x="0.25547901" y="0.95883399" z="0.123966"/> + <v x="-0.235732" y="0.96836698" z="0.081822999"/> + <v x="0.45984399" y="-0.213907" z="-0.86185098"/> + <v x="-0.39344299" y="-0.22514699" z="-0.89135301"/> + <v x="-0.173648" y="-0.98480803" z="-0"/> + <v x="0.76273698" y="-0.60365599" z="-0.23201901"/> + <v x="0.95289201" y="-0.233046" z="-0.194131"/> + <v x="-0.94091499" y="-0.28910401" z="-0.176347"/> + <v x="0.395044" y="-0.239849" z="-0.88679898"/> + <v x="-0.52054203" y="0.78110999" z="-0.34482199"/> + <v x="0.52052301" y="0.78109801" z="-0.34488001"/> + <v x="-0.39513001" y="-0.239722" z="-0.88679498"/> + <v x="-0.98904502" y="0.105682" z="0.103057"/> + <v x="-0.83787602" y="-0.47870699" z="-0.26230499"/> + <v x="-0.84628099" y="-0.48458001" z="-0.22134"/> + <v x="-0.013899" y="0.285568" z="-0.95825797"/> + <v x="0.32284501" y="-0.47465301" z="-0.81882602"/> + <v x="0.17082" y="0.445631" z="-0.87876803"/> + <v x="-0.894427" y="0.44721401" z="0"/> + <v x="0.894427" y="-0.44721401" z="0"/> + <v x="-0.44721401" y="-0.894427" z="0"/> + <v x="-0.069266997" y="-0.13853399" z="-0.98793203"/> + <v x="0.44721401" y="0.894427" z="0"/> + <v x="0.98480803" y="-0" z="-0.173648"/> + <v x="0.94621098" y="0.22946601" z="-0.228103"/> + <v x="0.98480803" y="-0" z="-0.173648"/> + <v x="0.95289099" y="-0.23304699" z="-0.194135"/> + <v x="-0.054841001" y="0.96453601" z="0.258192"/> + <v x="0.96686602" y="-0.109604" z="0.230556"/> + <v x="-0.054696001" y="0.085703999" z="0.99481797"/> + <v x="0.48151499" y="-0.21683" z="-0.84919298"/> + <v x="-0.82954001" y="0.186203" z="0.52648997"/> + <v x="-0.052067999" y="0.26177901" z="0.96372199"/> + <v x="0.949543" y="0.24428999" z="0.19670101"/> + <v x="-0.71021003" y="0.40411901" z="0.57644498"/> + <v x="-0.041005999" y="0.079002" z="0.99603099"/> + <v x="0.17238" y="0.97106099" z="0.165308"/> + <v x="0.168082" y="0.97384697" z="0.15287501"/> + <v x="0.066647001" y="0.951882" z="0.29912901"/> + <v x="-0.0045670001" y="0.94912601" z="0.31486201"/> + <v x="-0.034735002" y="0.95539701" z="0.293275"/> + <v x="-0.70817602" y="-0.053256001" z="0.70402402"/> + <v x="0.72836697" y="-0.17500301" z="0.662462"/> + <v x="0.76707" y="-0.073990002" z="0.63728201"/> + <v x="0.633403" y="-0.0068839998" z="0.77379203"/> + <v x="0.63392103" y="0.018575" z="0.773175"/> + <v x="0.912826" y="0.245104" z="0.32660699"/> + <v x="0.91102397" y="-0.035983" z="0.410781"/> + <v x="0.87533402" y="-0.01209" z="0.483367"/> + <v x="0.87757999" y="-0.059487" z="0.475725"/> + <v x="0.63764399" y="0.299797" z="0.70959997"/> + <v x="0.334566" y="-0.079640001" z="0.93900102"/> + <v x="0.084760003" y="0.48069799" z="0.87278003"/> + <v x="0.113239" y="0.135011" z="0.98435199"/> + <v x="0.246408" y="-0.000138" z="0.96916598"/> + <v x="0.99305302" y="0.113335" z="0.031637002"/> + <v x="-0.38302299" y="0.110755" z="0.91707498"/> + <v x="-0.81131703" y="-0.080966003" z="0.57897198"/> + <v x="-0.047343999" y="-0.96139598" z="0.271065"/> + <v x="-0.24891099" y="0.82911098" z="0.50061899"/> + <v x="0.331563" y="-0.93284899" z="0.140922"/> + <v x="0.36528701" y="-0.58127099" z="0.72711003"/> + <v x="0.88331401" y="-0.416668" z="0.21481"/> + <v x="0.839275" y="-0.39176199" z="0.37701401"/> + <v x="0.571679" y="0.81898099" z="-0.049536999"/> + <v x="0.71118701" y="0.102981" z="-0.69541901"/> + <v x="0.77193397" y="0.065531999" z="-0.63231599"/> + <v x="-0.1123" y="-0.53134501" z="0.839679"/> + <v x="-0.40512401" y="-0.86488497" z="0.29639101"/> + <v x="-0.036238998" y="-0.96278298" z="0.26783401"/> + <v x="0.257866" y="-0.945728" z="0.19774701"/> + <v x="-0.68936598" y="-0.65646797" z="0.306308"/> + <v x="-0.91857201" y="-0.209497" z="0.335168"/> + <v x="-0.073756002" y="0.026815999" z="0.996916"/> + <v x="-0.237011" y="-0.026606999" z="0.97114301"/> + <v x="-0.83869499" y="0.36596799" z="0.40330899"/> + <v x="-0.71598899" y="0.64866602" z="0.25805399"/> + <v x="-0.40213901" y="0.375011" z="-0.83525503"/> + <v x="-0.50796002" y="-0.136508" z="-0.85049498"/> + <v x="-0.27798799" y="-0.49586001" z="0.82270598"/> + <v x="-0.52579898" y="-0.18537501" z="0.83016402"/> + <v x="-0.56040198" y="-0.082514003" z="0.82410002"/> + <v x="-0.56609601" y="0.184111" z="0.80351597"/> + <v x="-0.56132799" y="0.28919199" z="0.77542198"/> + <v x="0.200261" y="0.032265998" z="0.97921097"/> + <v x="0.262492" y="-0.94887203" z="0.175326"/> + <v x="-0.327014" y="-0.84492701" z="0.42327401"/> + <v x="0.018310999" y="-0.90581697" z="0.42327401"/> + <v x="-0.57119501" y="-0.801871" z="0.175326"/> + <v x="-0.344625" y="0.22152799" z="0.91222799"/> + <v x="-0.93755502" y="-0.213798" z="0.27437299"/> + <v x="0.515131" y="-0.20632499" z="0.83190697"/> + <v x="0.39559501" y="0.056974001" z="0.91665602"/> + <v x="-0.86314702" y="0.336698" z="0.37631401"/> + <v x="0.95224702" y="-0.185827" z="0.24226999"/> + <v x="0.92271602" y="-0.060309" z="0.38073301"/> + <v x="-0.49615601" y="-0.19400799" z="0.84627998"/> + <v x="-0.23182499" y="0.96433997" z="0.12769599"/> + <v x="-0.736045" y="0.61315697" z="-0.286838"/> + <v x="-0.70633698" y="-0.65691698" z="0.26371899"/> + <v x="0.71358401" y="0.64396298" z="-0.275879"/> + <v x="0.69150901" y="-0.66631299" z="0.27900001"/> + <v x="0.69643199" y="-0.67809802" z="0.234872"/> + <v x="-0.69643098" y="-0.67810398" z="0.23485699"/> + <v x="0.74430501" y="0.60359699" z="-0.285797"/> + <v x="-0.74380201" y="0.60402" z="-0.28621501"/> + <v x="0.64573199" y="-0.67632997" z="0.354413"/> + <v x="-0.632837" y="-0.65540802" z="0.41226"/> + <v x="-0.26385701" y="-0.93956399" z="0.218172"/> + <v x="0.33120501" y="-0.92412603" z="0.19051"/> + <v x="0.93709701" y="-0.192609" z="0.29111901"/> + <v x="-0.47011501" y="-0.23327699" z="0.851219"/> + <v x="0.47011501" y="-0.23327699" z="0.851219"/> + <v x="-0.93709701" y="-0.192609" z="0.29111901"/> + <v x="0.180071" y="0.42072701" z="0.88913602"/> + <v x="0.98885298" y="-0.147515" z="0.02024"/> + <v x="-0.85227698" y="-0.46874699" z="0.232164"/> + <v x="-0.29381201" y="0.83634901" z="0.46281201"/> + <v x="-0.99413902" y="-0.104869" z="-0.026277"/> + <v x="-0.96942002" y="-0.13304999" z="0.20620801"/> + <v x="-0.82298303" y="0.35560301" z="0.442996"/> + <v x="-0.92731303" y="-0.104977" z="0.359265"/> + <v x="0.208222" y="0.52470797" z="0.82542402"/> + <v x="0.32381201" y="-0.60128999" z="0.73047602"/> + <v x="0.49413601" y="0.395385" z="0.77427399"/> + <v x="0.70127302" y="-0.006397" z="0.71286398"/> + <v x="0.78669798" y="-0.102069" z="0.608841"/> + <v x="0.57800001" y="0.55918002" z="0.59433502"/> + <v x="-0.618433" y="0.38566899" z="0.68469"/> + <v x="-0.58168501" y="0.058694001" z="0.81129402"/> + <v x="-0.45079401" y="-0.407693" z="0.79408503"/> + <v x="-0.76121199" y="-0.138421" z="0.63355798"/> + <v x="0.917835" y="-0.10748" z="0.38213399"/> + <v x="-0.90900701" y="0.165117" z="0.38267899"/> + <v x="0.38339901" y="-0.027725" z="0.92316699"/> + <v x="-0.37349099" y="0.085216001" z="0.923711"/> + <v x="0.70945102" y="-0.026246" z="-0.70426601"/> + <v x="-0.68397701" y="0.069781996" z="-0.72615802"/> + <v x="0.69056499" y="-0.057080001" z="0.72101498"/> + <v x="-0.708529" y="0.041196" z="0.70447803"/> + <v x="-0.69950098" y="-0.028030001" z="-0.714082"/> + <v x="0.69074899" y="0.050647002" z="0.72131902"/> + <v x="-0.75292802" y="-0.031482" z="0.65734899"/> + <v x="0.67824101" y="0.049693" z="-0.73315698"/> + <v x="0.59093899" y="0.514714" z="0.621176"/> + <v x="-0.64717102" y="0.50704002" z="0.56928098"/> + <v x="0.58335203" y="0.50668299" z="-0.63480097"/> + <v x="-0.59766603" y="0.51475102" z="-0.614676"/> + <v x="0" y="1" z="0"/> + <v x="-0" y="1" z="0"/> + <v x="0.428287" y="-0.48181" z="0.76447999"/> + <v x="0.41630501" y="-0.461584" z="-0.783346"/> + <v x="-0.68805999" y="-0.206706" z="-0.69559097"/> + <v x="-0.71701503" y="-0.23432399" z="0.65649199"/> + <v x="-0.474666" y="0.78489101" z="0.398294"/> + <v x="0.57349598" y="-0.30071101" z="0.76201999"/> + <v x="-0.57343501" y="-0.30057999" z="0.76211798"/> + <v x="0.47480899" y="0.78481197" z="0.398278"/> + <v x="-0.41136" y="0.76262301" z="-0.49918899"/> + <v x="0.60277301" y="-0.674348" z="0.42651999"/> + <v x="-0.55864698" y="-0.723252" z="0.405981"/> + <v x="0.413201" y="0.79251498" z="-0.44853699"/> + <v x="0.25547901" y="0.95883399" z="-0.123966"/> + <v x="-0.235732" y="0.96836698" z="-0.081822999"/> + <v x="0.45984399" y="-0.213907" z="0.86185098"/> + <v x="-0.39344299" y="-0.22514699" z="0.89135301"/> + <v x="-0.173648" y="-0.98480803" z="0"/> + <v x="0.76273698" y="-0.60365599" z="0.23201901"/> + <v x="0.95289201" y="-0.233046" z="0.194131"/> + <v x="-0.94091499" y="-0.28910401" z="0.176347"/> + <v x="0.395044" y="-0.239849" z="0.88679898"/> + <v x="-0.52054203" y="0.78110999" z="0.34482199"/> + <v x="0.52052301" y="0.78109801" z="0.34488001"/> + <v x="-0.39513001" y="-0.239722" z="0.88679498"/> + <v x="-0.98904502" y="0.105682" z="-0.103057"/> + <v x="-0.83787602" y="-0.47870699" z="0.26230499"/> + <v x="-0.84628099" y="-0.48458001" z="0.22134"/> + <v x="-0.013899" y="0.285568" z="0.95825797"/> + <v x="0.32284501" y="-0.47465301" z="0.81882602"/> + <v x="0.17082" y="0.445631" z="0.87876803"/> + <v x="-0.894427" y="0.44721401" z="0"/> + <v x="0.894427" y="-0.44721401" z="0"/> + <v x="-0.44721401" y="-0.894427" z="0"/> + <v x="-0.069266997" y="-0.13853399" z="0.98793203"/> + <v x="0.44721401" y="0.894427" z="0"/> + <v x="0.98480803" y="-0" z="0.173648"/> + <v x="0.94621098" y="0.22946601" z="0.228103"/> + <v x="-0.98480803" y="0" z="-0.173648"/> + <v x="0.95289099" y="-0.23304699" z="0.194135"/> + </normals> + <textures count="1"> + <texture file="hatkid"/> + </textures> + <primitives count="332"> + <poly v0="299" v1="301" v2="298" v3="300" n0="636" double="1" r0="128" g0="128" b0="128" texture="0" tu0="15" tv0="16" tu1="1" tv1="16" tu2="15" tv2="31" tu3="1" tv3="31" type="FT4"/> + <poly v0="122" v1="123" v2="298" v3="299" n0="470" double="1" r0="128" g0="128" b0="128" texture="0" tu0="1" tv0="31" tu1="1" tv1="16" tu2="15" tv2="31" tu3="15" tv3="16" type="FT4"/> + <poly v0="304" v1="305" v2="302" v3="303" n0="637" double="1" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="0" tu1="31" tv1="4" tu2="16" tv2="0" tu3="16" tv3="4" type="FT4"/> + <poly v0="126" v1="127" v2="124" v3="125" n0="471" double="1" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="0" tu1="31" tv1="4" tu2="16" tv2="0" tu3="16" tv3="4" type="FT4"/> + <poly v0="295" v1="297" v2="294" v3="296" n0="635" double="1" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="16" tu1="15" tv1="16" tu2="0" tv2="0" tu3="15" tv3="0" type="FT4"/> + <poly v0="120" v1="121" v2="118" v3="119" n0="469" double="1" r0="128" g0="128" b0="128" texture="0" tu0="15" tv0="0" tu1="15" tv1="16" tu2="0" tv2="0" tu3="0" tv3="16" type="FT4"/> + <poly v0="217" v1="279" v2="207" n0="217" n1="279" n2="207" shading="S" double="1" r0="255" g0="251" b0="58" type="F3"/> + <poly v0="279" v1="211" v2="207" n0="279" n1="211" n2="207" shading="S" double="1" r0="255" g0="251" b0="58" type="F3"/> + <poly v0="279" v1="278" v2="277" v3="276" n0="279" n1="278" n2="277" n3="276" shading="S" double="1" r0="255" g0="251" b0="58" type="F4"/> + <poly v0="217" v1="145" v2="279" v3="278" n0="217" n1="145" n2="279" n3="278" shading="S" double="1" r0="255" g0="251" b0="58" type="F4"/> + <poly v0="276" v1="278" v2="107" v3="108" n0="276" n1="278" n2="107" n3="108" shading="S" double="1" r0="255" g0="251" b0="58" type="F4"/> + <poly v0="278" v1="145" v2="108" v3="63" n0="278" n1="145" n2="108" n3="63" shading="S" double="1" r0="255" g0="251" b0="58" type="F4"/> + <poly v0="108" v1="53" v2="57" n0="108" n1="53" n2="57" shading="S" double="1" r0="255" g0="251" b0="58" type="F3"/> + <poly v0="63" v1="53" v2="108" n0="63" n1="53" n2="108" shading="S" double="1" r0="255" g0="251" b0="58" type="F3"/> + <poly v0="45" v1="51" v2="144" n0="45" n1="51" n2="144" shading="S" r0="255" g0="251" b0="58" type="F3"/> + <poly v0="195" v1="144" v2="204" n0="195" n1="144" n2="204" shading="S" r0="255" g0="251" b0="58" type="F3"/> + <poly v0="45" v1="51" v2="54" n0="45" n1="51" n2="54" shading="S" double="1" r0="255" g0="251" b0="58" type="F3"/> + <poly v0="195" v1="208" v2="204" n0="195" n1="208" n2="204" shading="S" double="1" r0="255" g0="251" b0="58" type="F3"/> + <poly v0="44" v1="77" v2="194" v3="245" n0="44" n1="77" n2="194" n3="245" shading="S" r0="255" g0="251" b0="58" type="F4"/> + <poly v0="43" v1="76" v2="44" v3="77" n0="43" n1="76" n2="44" n3="77" shading="S" r0="255" g0="251" b0="58" type="F4"/> + <poly v0="42" v1="75" v2="43" v3="76" n0="42" n1="75" n2="43" n3="76" shading="S" r0="255" g0="251" b0="58" type="F4"/> + <poly v0="190" v1="244" v2="42" v3="75" n0="190" n1="244" n2="42" n3="75" shading="S" r0="255" g0="251" b0="58" type="F4"/> + <poly v0="242" v1="244" v2="191" v3="190" n0="242" n1="244" n2="191" n3="190" shading="S" r0="255" g0="251" b0="58" type="F4"/> + <poly v0="243" v1="242" v2="192" v3="191" n0="243" n1="242" n2="192" n3="191" shading="S" r0="255" g0="251" b0="58" type="F4"/> + <poly v0="246" v1="243" v2="193" v3="192" n0="246" n1="243" n2="193" n3="192" shading="S" r0="255" g0="251" b0="58" type="F4"/> + <poly v0="245" v1="246" v2="194" v3="193" n0="245" n1="246" n2="194" n3="193" shading="S" r0="255" g0="251" b0="58" type="F4"/> + <poly v0="41" v1="44" v2="188" v3="194" n0="41" n1="44" n2="188" n3="194" shading="S" double="1" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="40" v1="43" v2="41" v3="44" n0="40" n1="43" n2="41" n3="44" shading="S" double="1" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="39" v1="42" v2="40" v3="43" n0="39" n1="42" n2="40" n3="43" shading="S" double="1" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="184" v1="190" v2="39" v3="42" n0="184" n1="190" n2="39" n3="42" shading="S" double="1" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="191" v1="190" v2="185" v3="184" n0="191" n1="190" n2="185" n3="184" shading="S" double="1" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="192" v1="191" v2="186" v3="185" n0="192" n1="191" n2="186" n3="185" shading="S" double="1" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="193" v1="192" v2="187" v3="186" n0="193" n1="192" n2="187" n3="186" shading="S" double="1" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="194" v1="193" v2="188" v3="187" n0="194" n1="193" n2="188" n3="187" shading="S" double="1" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="19" v1="11" v2="18" v3="10" n0="19" n1="11" n2="18" n3="10" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="150" v1="129" v2="148" v3="135" n0="150" n1="129" n2="148" n3="135" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="38" v1="8" v2="142" n0="38" n1="8" n2="142" shading="S" r0="255" g0="238" b0="201" type="F3"/> + <poly v0="4" v1="2" v2="137" v3="134" n0="4" n1="2" n2="137" n3="134" shading="S" r0="255" g0="238" b0="201" type="F4"/> + <poly v0="5" v1="32" v2="27" v3="29" n0="5" n1="32" n2="27" n3="29" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="14" v1="0" v2="16" n0="14" n1="0" n2="16" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="23" v1="24" v2="6" n0="23" n1="24" n2="6" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="1" v1="5" v2="27" n0="1" n1="5" n2="27" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="137" v1="133" v2="4" v3="0" n0="137" n1="133" n2="4" n3="0" shading="S" r0="255" g0="238" b0="201" type="F4"/> + <poly v0="23" v1="6" v2="27" n0="23" n1="6" n2="27" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="32" v1="30" v2="29" n0="32" n1="30" n2="29" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="133" v1="8" v2="0" n0="133" n1="8" n2="0" shading="S" r0="255" g0="238" b0="201" type="F3"/> + <poly v0="8" v1="133" v2="141" n0="8" n1="133" n2="141" shading="S" r0="255" g0="238" b0="201" type="F3"/> + <poly v0="8" v1="6" v2="0" n0="8" n1="6" n2="0" shading="S" r0="255" g0="238" b0="201" type="F3"/> + <poly v0="1" v1="6" v2="8" n0="1" n1="6" n2="8" shading="S" r0="255" g0="238" b0="201" type="F3"/> + <poly v0="8" v1="38" v2="1" n0="8" n1="38" n2="1" shading="S" r0="255" g0="238" b0="201" type="F3"/> + <poly v0="9" v1="145" v2="8" v3="142" n0="9" n1="145" n2="8" n3="142" shading="S" r0="255" g0="238" b0="201" type="F4"/> + <poly v0="144" v1="9" v2="141" v3="8" n0="144" n1="9" n2="141" n3="8" shading="S" r0="255" g0="238" b0="201" type="F4"/> + <poly v0="20" v1="13" v2="19" v3="11" n0="20" n1="13" n2="19" n3="11" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="21" v1="15" v2="20" v3="13" n0="21" n1="15" n2="20" n3="13" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="16" v1="17" v2="21" n0="16" n1="17" n2="21" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="16" v1="21" v2="14" v3="20" n0="16" n1="21" n2="14" n3="20" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="14" v1="20" v2="12" v3="19" n0="14" n1="20" n2="12" n3="19" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="18" v1="12" v2="19" n0="18" n1="12" n2="19" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="17" v1="15" v2="21" n0="17" n1="15" n2="21" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="10" v1="11" v2="30" v3="7" n0="10" n1="11" n2="30" n3="7" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="17" v1="24" v2="15" n0="17" n1="24" n2="15" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="24" v1="23" v2="15" v3="13" n0="24" n1="23" n2="15" n3="13" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="13" v1="28" v2="11" v3="7" n0="13" n1="28" n2="11" n3="7" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="26" v1="25" v2="28" v3="7" n0="26" n1="25" n2="28" n3="7" shading="S" r0="255" g0="238" b0="201" type="F4"/> + <poly v0="27" v1="28" v2="23" n0="27" n1="28" n2="23" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="27" v1="29" v2="26" v3="25" n0="27" n1="29" n2="26" n3="25" shading="S" r0="255" g0="238" b0="201" type="F4"/> + <poly v0="25" v1="29" v2="7" n0="25" n1="29" n2="7" shading="S" r0="255" g0="238" b0="201" type="F3"/> + <poly v0="27" v1="26" v2="28" n0="27" n1="26" n2="28" shading="S" r0="255" g0="238" b0="201" type="F3"/> + <poly v0="175" v1="167" v2="33" n0="175" n1="167" n2="33" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="10" v1="30" v2="33" v3="34" n0="10" n1="30" n2="33" n3="34" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="18" v1="33" v2="166" v3="167" n0="18" n1="33" n2="166" n3="167" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="18" v1="10" v2="33" n0="18" n1="10" n2="33" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="18" v1="166" v2="2" v3="134" n0="18" n1="166" n2="2" n3="134" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="4" v1="12" v2="2" v3="18" n0="4" n1="12" n2="2" n3="18" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="14" v1="12" v2="0" v3="4" n0="14" n1="12" n2="0" n3="4" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="34" v1="30" v2="31" v3="3" n0="34" n1="30" n2="31" n3="3" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="168" v1="31" v2="169" v3="35" n0="168" n1="31" n2="169" n3="35" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="34" v1="31" v2="175" v3="168" n0="34" n1="31" n2="175" n3="168" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="34" v1="175" v2="33" n0="34" n1="175" n2="33" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="170" v1="169" v2="22" v3="35" n0="170" n1="169" n2="22" n3="35" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="36" v1="179" v2="22" v3="170" n0="36" n1="179" n2="22" n3="170" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="3" v1="30" v2="32" n0="3" n1="30" n2="32" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="29" v1="30" v2="7" n0="29" n1="30" n2="7" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="206" v1="36" v2="178" v3="37" n0="206" n1="36" n2="178" n3="37" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="178" v1="37" v2="177" v3="38" n0="178" n1="37" n2="177" n3="38" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="6" v1="24" v2="0" v3="16" n0="6" n1="24" n2="0" n3="16" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="17" v1="16" v2="24" n0="17" n1="16" n2="24" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="35" v1="31" v2="3" n0="35" n1="31" n2="3" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="3" v1="22" v2="35" n0="3" n1="22" n2="35" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="36" v1="22" v2="32" v3="3" n0="36" n1="22" n2="32" n3="3" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="36" v1="32" v2="37" v3="5" n0="36" n1="32" n2="37" n3="5" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="5" v1="1" v2="37" v3="38" n0="5" n1="1" n2="37" n3="38" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="13" v1="23" v2="28" n0="13" n1="23" n2="28" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="75" v1="48" v2="76" v3="49" n0="75" n1="48" n2="76" n3="49" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="223" v1="203" v2="67" v3="47" n0="223" n1="203" n2="67" n3="47" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="68" v1="46" v2="69" v3="45" n0="68" n1="46" n2="69" n3="45" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="76" v1="49" v2="77" v3="50" n0="76" n1="49" n2="77" n3="50" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="244" v1="198" v2="75" v3="48" n0="244" n1="198" n2="75" n3="48" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="69" v1="189" v2="227" n0="69" n1="189" n2="227" shading="S" r0="126" g0="56" b0="176" type="F3"/> + <poly v0="128" v1="69" v2="45" n0="128" n1="69" n2="45" shading="S" r0="126" g0="56" b0="176" type="F3"/> + <poly v0="189" v1="69" v2="128" n0="189" n1="69" n2="128" shading="S" r0="126" g0="56" b0="176" type="F3"/> + <poly v0="77" v1="50" v2="245" v3="202" n0="77" n1="50" n2="245" n3="202" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="67" v1="47" v2="68" v3="46" n0="67" n1="47" n2="68" n3="46" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="38" v1="142" v2="177" n0="38" n1="142" n2="177" shading="S" r0="255" g0="238" b0="201" type="F3"/> + <poly v0="53" v1="57" v2="46" v3="56" n0="53" n1="57" n2="46" n3="56" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="55" v1="57" v2="52" v3="53" n0="55" n1="57" n2="52" n3="53" shading="S" r0="255" g0="251" b0="58" type="F4"/> + <poly v0="46" v1="56" v2="51" v3="54" n0="46" n1="56" n2="51" n3="54" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="51" v1="54" v2="52" v3="55" n0="51" n1="54" n2="52" n3="55" shading="S" r0="255" g0="251" b0="58" type="F4"/> + <poly v0="54" v1="58" v2="55" v3="59" n0="54" n1="58" n2="55" n3="59" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="59" v1="61" v2="55" v3="57" n0="59" n1="61" n2="55" n3="57" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="56" v1="60" v2="54" v3="58" n0="56" n1="60" n2="54" n3="58" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="57" v1="61" v2="56" v3="60" n0="57" n1="61" n2="56" n3="60" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="51" v1="52" v2="62" n0="51" n1="52" n2="62" shading="S" r0="255" g0="251" b0="58" type="F3"/> + <poly v0="53" v1="63" v2="52" n0="53" n1="63" n2="52" shading="S" r0="255" g0="251" b0="58" type="F3"/> + <poly v0="9" v1="52" v2="145" v3="63" n0="9" n1="52" n2="145" n3="63" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="62" v1="52" v2="144" v3="9" n0="62" n1="52" n2="144" n3="9" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="66" v1="69" v2="222" v3="227" n0="66" n1="69" n2="222" n3="227" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="64" v1="67" v2="65" v3="68" n0="64" n1="67" n2="65" n3="68" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="65" v1="68" v2="66" v3="69" n0="65" n1="68" n2="66" n3="69" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="218" v1="223" v2="64" v3="67" n0="218" n1="223" n2="64" n3="67" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="46" v1="51" v2="45" n0="46" n1="51" n2="45" shading="S" r0="126" g0="56" b0="176" type="F3"/> + <poly v0="47" v1="53" v2="46" n0="47" n1="53" n2="46" shading="S" r0="126" g0="56" b0="176" type="F3"/> + <poly v0="53" v1="47" v2="63" n0="53" n1="47" n2="63" shading="S" r0="126" g0="56" b0="176" type="F3"/> + <poly v0="203" v1="145" v2="47" v3="63" n0="203" n1="145" n2="47" n3="63" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="36" v1="206" v2="70" n0="36" n1="206" n2="70" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="36" v1="70" v2="179" n0="36" n1="70" n2="179" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="230" v1="71" v2="285" v3="113" n0="230" n1="71" n2="285" n3="113" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="71" v1="229" v2="113" v3="286" n0="71" n1="229" n2="113" n3="286" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="230" v1="238" v2="71" v3="72" n0="230" n1="238" n2="71" n3="72" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="73" v1="72" v2="237" v3="238" n0="73" n1="72" n2="237" n3="238" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="74" v1="73" v2="236" v3="237" n0="74" n1="73" n2="236" n3="237" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="236" v1="235" v2="74" n0="236" n1="235" n2="74" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="233" v1="73" v2="234" v3="74" n0="233" n1="73" n2="234" n3="74" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="232" v1="72" v2="233" v3="73" n0="232" n1="72" n2="233" n3="73" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="72" v1="232" v2="71" v3="229" n0="72" n1="232" n2="71" n3="229" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="74" v1="235" v2="234" n0="74" n1="235" n2="234" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="80" v1="84" v2="79" v3="83" n0="80" n1="84" n2="79" n3="83" shading="S" r0="192" g0="199" b0="138" type="F4"/> + <poly v0="81" v1="85" v2="80" v3="84" n0="81" n1="85" n2="80" n3="84" shading="S" r0="192" g0="199" b0="138" type="F4"/> + <poly v0="79" v1="83" v2="78" v3="82" n0="79" n1="83" n2="78" n3="82" shading="S" r0="192" g0="199" b0="138" type="F4"/> + <poly v0="82" v1="85" v2="78" v3="81" n0="82" n1="85" n2="78" n3="81" shading="S" r0="192" g0="199" b0="138" type="F4"/> + <poly v0="85" v1="89" v2="84" v3="88" n0="85" n1="89" n2="84" n3="88" shading="S" r0="192" g0="199" b0="138" type="F4"/> + <poly v0="83" v1="87" v2="82" v3="86" n0="83" n1="87" n2="82" n3="86" shading="S" r0="192" g0="199" b0="138" type="F4"/> + <poly v0="86" v1="89" v2="82" v3="85" n0="86" n1="89" n2="82" n3="85" shading="S" r0="192" g0="199" b0="138" type="F4"/> + <poly v0="84" v1="88" v2="83" v3="87" n0="84" n1="88" n2="83" n3="87" shading="S" r0="192" g0="199" b0="138" type="F4"/> + <poly v0="87" v1="91" v2="86" v3="90" n0="87" n1="91" n2="86" n3="90" shading="S" r0="192" g0="199" b0="138" type="F4"/> + <poly v0="90" v1="93" v2="86" v3="89" n0="90" n1="93" n2="86" n3="89" shading="S" r0="192" g0="199" b0="138" type="F4"/> + <poly v0="88" v1="92" v2="87" v3="91" n0="88" n1="92" n2="87" n3="91" shading="S" r0="192" g0="199" b0="138" type="F4"/> + <poly v0="89" v1="93" v2="88" v3="92" n0="89" n1="93" n2="88" n3="92" shading="S" r0="192" g0="199" b0="138" type="F4"/> + <poly v0="95" v1="94" v2="97" n0="95" n1="94" n2="97" shading="S" r0="0" g0="0" b0="0" type="F3"/> + <poly v0="95" v1="96" v2="94" n0="95" n1="96" n2="94" shading="S" r0="0" g0="0" b0="0" type="F3"/> + <poly v0="91" v1="94" v2="90" v3="96" n0="91" n1="94" n2="90" n3="96" shading="S" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="97" v1="94" v2="92" v3="91" n0="97" n1="94" n2="92" n3="91" shading="S" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="93" v1="95" v2="92" v3="97" n0="93" n1="95" n2="92" n3="97" shading="S" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="96" v1="95" v2="90" v3="93" n0="96" n1="95" n2="90" n3="93" shading="S" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="101" v1="100" v2="61" v3="60" n0="101" n1="100" n2="61" n3="60" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="98" v1="99" v2="58" v3="59" n0="98" n1="99" n2="58" n3="59" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="99" v1="101" v2="59" v3="61" n0="99" n1="101" n2="59" n3="61" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="100" v1="98" v2="60" v3="58" n0="100" n1="98" n2="60" n3="58" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="105" v1="104" v2="101" v3="100" n0="105" n1="104" n2="101" n3="100" shading="S" r0="128" g0="119" b0="100" texture="0" tu0="16" tv0="29" tu1="23" tv1="27" tu2="18" tv2="17" tu3="23" tv3="16" type="FT4"/> + <poly v0="102" v1="103" v2="98" v3="99" n0="102" n1="103" n2="98" n3="99" shading="S" r0="128" g0="119" b0="100" texture="0" tu0="31" tv0="28" tu1="23" tv1="30" tu2="29" tv2="16" tu3="23" tv3="18" type="FT4"/> + <poly v0="103" v1="105" v2="99" v3="101" n0="103" n1="105" n2="99" n3="101" shading="S" r0="128" g0="119" b0="100" texture="0" tu0="23" tv0="30" tu1="16" tv1="28" tu2="23" tv2="18" tu3="18" tv3="16" type="FT4"/> + <poly v0="104" v1="102" v2="100" v3="98" n0="104" n1="102" n2="100" n3="98" shading="S" r0="128" g0="119" b0="100" texture="0" tu0="23" tv0="27" tu1="31" tv1="29" tu2="23" tv2="16" tu3="29" tv3="17" type="FT4"/> + <poly v0="104" v1="106" v2="102" n0="104" n1="106" n2="102" shading="S" r0="128" g0="119" b0="100" texture="0" tu0="23" tv0="27" tu1="23" tv1="31" tu2="31" tv2="29" type="FT3"/> + <poly v0="105" v1="106" v2="104" n0="105" n1="106" n2="104" shading="S" r0="128" g0="119" b0="100" texture="0" tu0="16" tv0="29" tu1="23" tv1="31" tu2="23" tv2="27" type="FT3"/> + <poly v0="102" v1="106" v2="103" n0="102" n1="106" n2="103" shading="S" r0="128" g0="119" b0="100" texture="0" tu0="31" tv0="28" tu1="23" tv1="31" tu2="23" tv2="30" type="FT3"/> + <poly v0="105" v1="103" v2="106" n0="105" n1="103" n2="106" shading="S" r0="128" g0="119" b0="100" texture="0" tu0="16" tv0="28" tu1="23" tv1="30" tu2="23" tv2="31" type="FT3"/> + <poly v0="198" v1="49" v2="48" n0="198" n1="49" n2="48" shading="S" r0="126" g0="56" b0="176" type="F3"/> + <poly v0="49" v1="202" v2="50" n0="49" n1="202" n2="50" shading="S" r0="126" g0="56" b0="176" type="F3"/> + <poly v0="49" v1="198" v2="202" n0="49" n1="198" n2="202" shading="S" r0="126" g0="56" b0="176" type="F3"/> + <poly v0="144" v1="51" v2="62" n0="144" n1="51" n2="62" shading="S" r0="255" g0="251" b0="58" type="F3"/> + <poly v0="144" v1="128" v2="45" n0="144" n1="128" n2="45" shading="S" r0="255" g0="251" b0="58" type="F3"/> + <poly v0="111" v1="112" v2="100" v3="101" n0="111" n1="112" n2="100" n3="101" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="110" v1="109" v2="99" v3="98" n0="110" n1="109" n2="99" n3="98" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="112" v1="110" v2="101" v3="99" n0="112" n1="110" n2="101" n3="99" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="109" v1="111" v2="98" v3="100" n0="109" n1="111" n2="98" n3="100" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="27" v1="6" v2="1" n0="27" n1="6" n2="1" shading="S" r0="255" g0="238" b0="201" type="F3"/> + <poly v0="113" v1="286" v2="70" v3="179" n0="113" n1="286" n2="70" n3="179" shading="S" r0="255" g0="251" b0="58" type="F4"/> + <poly v0="285" v1="113" v2="206" v3="70" n0="285" n1="113" n2="206" n3="70" shading="S" r0="255" g0="251" b0="58" type="F4"/> + <poly v0="189" v1="114" v2="287" v3="115" n0="464" shading="F" double="1" r0="87" g0="87" b0="87" type="F4"/> + <poly v0="117" v1="116" v2="291" v3="290" n0="465" shading="F" double="1" r0="87" g0="87" b0="87" type="F4"/> + <poly v0="290" v1="116" v2="189" v3="114" n0="466" shading="F" double="1" r0="87" g0="87" b0="87" type="F4"/> + <poly v0="116" v1="117" v2="114" v3="115" n0="467" shading="F" double="1" r0="87" g0="87" b0="87" type="F4"/> + <poly v0="117" v1="291" v2="115" v3="287" n0="468" shading="F" double="1" r0="87" g0="87" b0="87" type="F4"/> + <poly v0="128" v1="144" v2="189" n0="128" n1="144" n2="189" shading="S" r0="126" g0="56" b0="176" type="F3"/> + <poly v0="183" v1="142" v2="140" n0="183" n1="142" n2="140" shading="S" r0="255" g0="238" b0="201" type="F3"/> + <poly v0="134" v1="131" v2="137" v3="135" n0="134" n1="131" n2="137" n3="135" shading="S" r0="255" g0="238" b0="201" type="F4"/> + <poly v0="165" v1="173" v2="163" v3="136" n0="165" n1="173" n2="163" n3="136" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="150" v1="152" v2="129" n0="150" n1="152" n2="129" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="159" v1="138" v2="160" n0="159" n1="138" n2="160" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="130" v1="163" v2="136" n0="130" n1="163" n2="136" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="137" v1="135" v2="133" v3="129" n0="137" n1="135" n2="133" n3="129" shading="S" r0="255" g0="238" b0="201" type="F4"/> + <poly v0="159" v1="163" v2="138" n0="159" n1="163" n2="138" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="173" v1="165" v2="171" n0="173" n1="165" n2="171" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="133" v1="129" v2="140" n0="133" n1="129" n2="140" shading="S" r0="255" g0="238" b0="201" type="F3"/> + <poly v0="140" v1="141" v2="133" n0="140" n1="141" n2="133" shading="S" r0="255" g0="238" b0="201" type="F3"/> + <poly v0="140" v1="129" v2="138" n0="140" n1="129" n2="138" shading="S" r0="255" g0="238" b0="201" type="F3"/> + <poly v0="130" v1="140" v2="138" n0="130" n1="140" n2="138" shading="S" r0="255" g0="238" b0="201" type="F3"/> + <poly v0="140" v1="130" v2="183" n0="140" n1="130" n2="183" shading="S" r0="255" g0="238" b0="201" type="F3"/> + <poly v0="142" v1="145" v2="140" v3="143" n0="142" n1="145" n2="140" n3="143" shading="S" r0="255" g0="238" b0="201" type="F4"/> + <poly v0="140" v1="143" v2="141" v3="144" n0="140" n1="143" n2="141" n3="144" shading="S" r0="255" g0="238" b0="201" type="F4"/> + <poly v0="146" v1="147" v2="154" v3="155" n0="146" n1="147" n2="154" n3="155" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="147" v1="149" v2="155" v3="156" n0="147" n1="149" n2="155" n3="156" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="149" v1="151" v2="156" v3="157" n0="149" n1="151" n2="156" n3="157" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="152" v1="157" v2="153" n0="152" n1="157" n2="153" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="156" v1="157" v2="150" v3="152" n0="156" n1="157" n2="150" n3="152" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="155" v1="156" v2="148" v3="150" n0="155" n1="156" n2="148" n3="150" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="154" v1="155" v2="148" n0="154" n1="155" n2="148" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="153" v1="157" v2="151" n0="153" n1="157" n2="151" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="139" v1="147" v2="171" v3="146" n0="139" n1="147" n2="171" n3="146" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="153" v1="151" v2="160" n0="153" n1="151" n2="160" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="149" v1="159" v2="151" v3="160" n0="149" n1="159" n2="151" n3="160" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="139" v1="164" v2="147" v3="149" n0="139" n1="164" n2="147" n3="149" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="139" v1="161" v2="164" v3="162" n0="139" n1="161" n2="164" n3="162" shading="S" r0="255" g0="238" b0="201" type="F4"/> + <poly v0="163" v1="159" v2="164" n0="163" n1="159" n2="164" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="161" v1="165" v2="162" v3="163" n0="161" n1="165" n2="162" n3="163" shading="S" r0="255" g0="238" b0="201" type="F4"/> + <poly v0="161" v1="139" v2="165" n0="161" n1="139" n2="165" shading="S" r0="255" g0="238" b0="201" type="F3"/> + <poly v0="163" v1="164" v2="162" n0="163" n1="164" n2="162" shading="S" r0="255" g0="238" b0="201" type="F3"/> + <poly v0="175" v1="174" v2="167" n0="175" n1="174" n2="167" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="176" v1="171" v2="174" v3="146" n0="176" n1="171" n2="174" n3="146" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="167" v1="174" v2="166" v3="154" n0="167" n1="174" n2="166" n3="154" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="154" v1="174" v2="146" n0="154" n1="174" n2="146" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="134" v1="166" v2="131" v3="154" n0="134" n1="166" n2="131" n3="154" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="154" v1="148" v2="131" v3="135" n0="154" n1="148" n2="131" n3="135" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="132" v1="171" v2="172" v3="176" n0="132" n1="171" n2="172" n3="176" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="180" v1="172" v2="169" v3="168" n0="180" n1="172" n2="169" n3="168" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="168" v1="172" v2="175" v3="176" n0="168" n1="172" n2="175" n3="176" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="176" v1="174" v2="175" n0="176" n1="174" n2="175" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="180" v1="169" v2="158" v3="170" n0="180" n1="169" n2="158" n3="170" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="170" v1="179" v2="158" v3="181" n0="170" n1="179" n2="158" n3="181" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="132" v1="173" v2="171" n0="132" n1="173" n2="171" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="165" v1="139" v2="171" n0="165" n1="139" n2="171" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="182" v1="181" v2="178" v3="206" n0="182" n1="181" n2="178" n3="206" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="183" v1="182" v2="177" v3="178" n0="183" n1="182" n2="177" n3="178" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="138" v1="129" v2="160" v3="152" n0="138" n1="129" n2="160" n3="152" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="153" v1="160" v2="152" n0="153" n1="160" n2="152" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="180" v1="132" v2="172" n0="180" n1="132" n2="172" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="132" v1="180" v2="158" n0="132" n1="180" n2="158" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="132" v1="158" v2="173" v3="181" n0="132" n1="158" n2="173" n3="181" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="136" v1="173" v2="182" v3="181" n0="136" n1="173" n2="182" n3="181" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="183" v1="130" v2="182" v3="136" n0="183" n1="130" n2="182" n3="136" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="149" v1="164" v2="159" n0="149" n1="164" n2="159" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="200" v1="199" v2="243" v3="242" n0="200" n1="199" n2="243" n3="242" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="197" v1="203" v2="224" v3="223" n0="197" n1="203" n2="224" n3="223" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="195" v1="196" v2="226" v3="225" n0="195" n1="196" n2="226" n3="225" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="201" v1="200" v2="246" v3="243" n0="201" n1="200" n2="246" n3="243" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="199" v1="198" v2="242" v3="244" n0="199" n1="198" n2="242" n3="244" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="189" v1="226" v2="227" n0="189" n1="226" n2="227" shading="S" r0="126" g0="56" b0="176" type="F3"/> + <poly v0="226" v1="306" v2="195" n0="226" n1="306" n2="195" shading="S" r0="126" g0="56" b0="176" type="F3"/> + <poly v0="226" v1="189" v2="306" n0="226" n1="189" n2="306" shading="S" r0="126" g0="56" b0="176" type="F3"/> + <poly v0="202" v1="201" v2="245" v3="246" n0="202" n1="201" n2="245" n3="246" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="196" v1="197" v2="225" v3="224" n0="196" n1="197" n2="225" n3="224" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="183" v1="177" v2="142" n0="183" n1="177" n2="142" shading="S" r0="255" g0="238" b0="201" type="F3"/> + <poly v0="210" v1="211" v2="196" v3="207" n0="210" n1="211" n2="196" n3="207" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="207" v1="211" v2="205" v3="209" n0="207" n1="211" n2="205" n3="209" shading="S" r0="255" g0="251" b0="58" type="F4"/> + <poly v0="208" v1="210" v2="204" v3="196" n0="208" n1="210" n2="204" n3="196" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="209" v1="208" v2="205" v3="204" n0="209" n1="208" n2="205" n3="204" shading="S" r0="255" g0="251" b0="58" type="F4"/> + <poly v0="213" v1="212" v2="209" v3="208" n0="213" n1="212" n2="209" n3="208" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="211" v1="215" v2="209" v3="213" n0="211" n1="215" n2="209" n3="213" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="212" v1="214" v2="208" v3="210" n0="212" n1="214" n2="208" n3="210" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="214" v1="215" v2="210" v3="211" n0="214" n1="215" n2="210" n3="211" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="204" v1="216" v2="205" n0="204" n1="216" n2="205" shading="S" r0="255" g0="251" b0="58" type="F3"/> + <poly v0="207" v1="205" v2="217" n0="207" n1="205" n2="217" shading="S" r0="255" g0="251" b0="58" type="F3"/> + <poly v0="217" v1="205" v2="145" v3="143" n0="217" n1="205" n2="145" n3="143" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="143" v1="205" v2="144" v3="216" n0="143" n1="205" n2="144" n3="216" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="227" v1="226" v2="222" v3="221" n0="227" n1="226" n2="222" n3="221" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="225" v1="224" v2="220" v3="219" n0="225" n1="224" n2="220" n3="219" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="226" v1="225" v2="221" v3="220" n0="226" n1="225" n2="221" n3="220" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="224" v1="223" v2="219" v3="218" n0="224" n1="223" n2="219" n3="218" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="196" v1="195" v2="204" n0="196" n1="195" n2="204" shading="S" r0="126" g0="56" b0="176" type="F3"/> + <poly v0="197" v1="196" v2="207" n0="197" n1="196" n2="207" shading="S" r0="126" g0="56" b0="176" type="F3"/> + <poly v0="207" v1="217" v2="197" n0="207" n1="217" n2="197" shading="S" r0="126" g0="56" b0="176" type="F3"/> + <poly v0="217" v1="145" v2="197" v3="203" n0="217" n1="145" n2="197" n3="203" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="181" v1="228" v2="206" n0="181" n1="228" n2="206" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="181" v1="179" v2="228" n0="181" n1="179" n2="228" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="284" v1="231" v2="285" v3="230" n0="284" n1="231" n2="285" n3="230" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="286" v1="229" v2="284" v3="231" n0="286" n1="229" n2="284" n3="231" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="239" v1="238" v2="231" v3="230" n0="239" n1="238" n2="231" n3="230" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="238" v1="239" v2="237" v3="240" n0="238" n1="239" n2="237" n3="240" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="237" v1="240" v2="236" v3="241" n0="237" n1="240" n2="236" n3="241" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="236" v1="241" v2="235" n0="236" n1="241" n2="235" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="241" v1="240" v2="234" v3="233" n0="241" n1="240" n2="234" n3="233" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="240" v1="239" v2="233" v3="232" n0="240" n1="239" n2="233" n3="232" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="229" v1="232" v2="231" v3="239" n0="229" n1="232" n2="231" n3="239" shading="S" r0="150" g0="99" b0="60" type="F4"/> + <poly v0="241" v1="234" v2="235" n0="241" n1="234" n2="235" shading="S" r0="150" g0="99" b0="60" type="F3"/> + <poly v0="252" v1="253" v2="248" v3="249" n0="252" n1="253" n2="248" n3="249" shading="S" r0="192" g0="199" b0="138" type="F4"/> + <poly v0="253" v1="254" v2="249" v3="250" n0="253" n1="254" n2="249" n3="250" shading="S" r0="192" g0="199" b0="138" type="F4"/> + <poly v0="251" v1="252" v2="247" v3="248" n0="251" n1="252" n2="247" n3="248" shading="S" r0="192" g0="199" b0="138" type="F4"/> + <poly v0="250" v1="254" v2="247" v3="251" n0="250" n1="254" n2="247" n3="251" shading="S" r0="192" g0="199" b0="138" type="F4"/> + <poly v0="257" v1="258" v2="253" v3="254" n0="257" n1="258" n2="253" n3="254" shading="S" r0="192" g0="199" b0="138" type="F4"/> + <poly v0="255" v1="256" v2="251" v3="252" n0="255" n1="256" n2="251" n3="252" shading="S" r0="192" g0="199" b0="138" type="F4"/> + <poly v0="254" v1="258" v2="251" v3="255" n0="254" n1="258" n2="251" n3="255" shading="S" r0="192" g0="199" b0="138" type="F4"/> + <poly v0="256" v1="257" v2="252" v3="253" n0="256" n1="257" n2="252" n3="253" shading="S" r0="192" g0="199" b0="138" type="F4"/> + <poly v0="259" v1="260" v2="255" v3="256" n0="259" n1="260" n2="255" n3="256" shading="S" r0="192" g0="199" b0="138" type="F4"/> + <poly v0="258" v1="262" v2="255" v3="259" n0="258" n1="262" n2="255" n3="259" shading="S" r0="192" g0="199" b0="138" type="F4"/> + <poly v0="260" v1="261" v2="256" v3="257" n0="260" n1="261" n2="256" n3="257" shading="S" r0="192" g0="199" b0="138" type="F4"/> + <poly v0="261" v1="262" v2="257" v3="258" n0="261" n1="262" n2="257" n3="258" shading="S" r0="192" g0="199" b0="138" type="F4"/> + <poly v0="264" v1="266" v2="263" n0="264" n1="266" n2="263" shading="S" r0="0" g0="0" b0="0" type="F3"/> + <poly v0="264" v1="263" v2="265" n0="264" n1="263" n2="265" shading="S" r0="0" g0="0" b0="0" type="F3"/> + <poly v0="265" v1="263" v2="259" v3="260" n0="265" n1="263" n2="259" n3="260" shading="S" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="260" v1="263" v2="261" v3="266" n0="260" n1="263" n2="261" n3="266" shading="S" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="266" v1="264" v2="261" v3="262" n0="266" n1="264" n2="261" n3="262" shading="S" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="262" v1="264" v2="259" v3="265" n0="262" n1="264" n2="259" n3="265" shading="S" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="214" v1="269" v2="215" v3="270" n0="214" n1="269" n2="215" n3="270" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="213" v1="268" v2="212" v3="267" n0="213" n1="268" n2="212" n3="267" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="215" v1="270" v2="213" v3="268" n0="215" n1="270" n2="213" n3="268" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="212" v1="267" v2="214" v3="269" n0="212" n1="267" n2="214" n3="269" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="269" v1="273" v2="270" v3="274" n0="269" n1="273" n2="270" n3="274" shading="S" r0="128" g0="119" b0="100" texture="0" tu0="23" tv0="16" tu1="23" tv1="27" tu2="18" tv2="17" tu3="16" tv3="29" type="FT4"/> + <poly v0="268" v1="272" v2="267" v3="271" n0="268" n1="272" n2="267" n3="271" shading="S" r0="128" g0="119" b0="100" texture="0" tu0="23" tv0="18" tu1="23" tv1="30" tu2="29" tv2="16" tu3="31" tv3="28" type="FT4"/> + <poly v0="270" v1="274" v2="268" v3="272" n0="270" n1="274" n2="268" n3="272" shading="S" r0="128" g0="119" b0="100" texture="0" tu0="18" tv0="16" tu1="16" tv1="28" tu2="23" tv2="18" tu3="23" tv3="30" type="FT4"/> + <poly v0="267" v1="271" v2="269" v3="273" n0="267" n1="271" n2="269" n3="273" shading="S" r0="128" g0="119" b0="100" texture="0" tu0="29" tv0="17" tu1="31" tv1="29" tu2="23" tv2="16" tu3="23" tv3="27" type="FT4"/> + <poly v0="273" v1="271" v2="275" n0="273" n1="271" n2="275" shading="S" r0="128" g0="119" b0="100" texture="0" tu0="23" tv0="27" tu1="31" tv1="29" tu2="23" tv2="31" type="FT3"/> + <poly v0="274" v1="273" v2="275" n0="274" n1="273" n2="275" shading="S" r0="128" g0="119" b0="100" texture="0" tu0="16" tv0="29" tu1="23" tv1="27" tu2="23" tv2="31" type="FT3"/> + <poly v0="271" v1="272" v2="275" n0="271" n1="272" n2="275" shading="S" r0="128" g0="119" b0="100" texture="0" tu0="31" tv0="28" tu1="23" tv1="30" tu2="23" tv2="31" type="FT3"/> + <poly v0="274" v1="275" v2="272" n0="274" n1="275" n2="272" shading="S" r0="128" g0="119" b0="100" texture="0" tu0="16" tv0="28" tu1="23" tv1="31" tu2="23" tv2="30" type="FT3"/> + <poly v0="200" v1="198" v2="199" n0="200" n1="198" n2="199" shading="S" r0="126" g0="56" b0="176" type="F3"/> + <poly v0="198" v1="201" v2="202" n0="198" n1="201" n2="202" shading="S" r0="126" g0="56" b0="176" type="F3"/> + <poly v0="198" v1="200" v2="201" n0="198" n1="200" n2="201" shading="S" r0="126" g0="56" b0="176" type="F3"/> + <poly v0="144" v1="216" v2="204" n0="144" n1="216" n2="204" shading="S" r0="255" g0="251" b0="58" type="F3"/> + <poly v0="144" v1="195" v2="306" n0="144" n1="195" n2="306" shading="S" r0="255" g0="251" b0="58" type="F3"/> + <poly v0="270" v1="283" v2="269" v3="282" n0="270" n1="283" n2="269" n3="282" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="267" v1="280" v2="268" v3="281" n0="267" n1="280" n2="268" n3="281" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="268" v1="281" v2="270" v3="283" n0="268" n1="281" n2="270" n3="283" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="269" v1="282" v2="267" v3="280" n0="269" n1="282" n2="267" n3="280" shading="S" r0="126" g0="56" b0="176" type="F4"/> + <poly v0="163" v1="130" v2="138" n0="163" n1="130" n2="138" shading="S" r0="255" g0="238" b0="201" type="F3"/> + <poly v0="179" v1="286" v2="228" v3="284" n0="179" n1="286" n2="228" n3="284" shading="S" r0="255" g0="251" b0="58" type="F4"/> + <poly v0="228" v1="284" v2="206" v3="285" n0="228" n1="284" n2="206" n3="285" shading="S" r0="255" g0="251" b0="58" type="F4"/> + <poly v0="289" v1="288" v2="287" v3="189" n0="630" shading="F" double="1" r0="87" g0="87" b0="87" type="F4"/> + <poly v0="290" v1="292" v2="291" v3="293" n0="631" shading="F" double="1" r0="87" g0="87" b0="87" type="F4"/> + <poly v0="288" v1="292" v2="189" v3="290" n0="632" shading="F" double="1" r0="87" g0="87" b0="87" type="F4"/> + <poly v0="289" v1="293" v2="288" v3="292" n0="633" shading="F" double="1" r0="87" g0="87" b0="87" type="F4"/> + <poly v0="287" v1="291" v2="289" v3="293" n0="634" shading="F" double="1" r0="87" g0="87" b0="87" type="F4"/> + <poly v0="306" v1="189" v2="144" n0="306" n1="189" n2="144" shading="S" r0="126" g0="56" b0="176" type="F3"/> + </primitives> +</model> diff --git a/examples/n00bdemo/data/hatkid.tim b/examples/n00bdemo/data/hatkid.tim Binary files differnew file mode 100644 index 0000000..b2e9318 --- /dev/null +++ b/examples/n00bdemo/data/hatkid.tim diff --git a/examples/n00bdemo/data/lamelotl16c.png b/examples/n00bdemo/data/lamelotl16c.png Binary files differnew file mode 100644 index 0000000..67490c8 --- /dev/null +++ b/examples/n00bdemo/data/lamelotl16c.png diff --git a/examples/n00bdemo/data/lamelotl16c.tim b/examples/n00bdemo/data/lamelotl16c.tim Binary files differnew file mode 100644 index 0000000..194c034 --- /dev/null +++ b/examples/n00bdemo/data/lamelotl16c.tim diff --git a/examples/n00bdemo/data/lightworld.smd b/examples/n00bdemo/data/lightworld.smd Binary files differnew file mode 100644 index 0000000..4c1bb59 --- /dev/null +++ b/examples/n00bdemo/data/lightworld.smd diff --git a/examples/n00bdemo/data/lightworld.smx b/examples/n00bdemo/data/lightworld.smx new file mode 100644 index 0000000..665e8c9 --- /dev/null +++ b/examples/n00bdemo/data/lightworld.smx @@ -0,0 +1,1097 @@ +<model version="1"> + <vertices count="282"> + <v x="4.1127849" y="-0" z="-3.202786"/> + <v x="3.198833" y="-0" z="-3.202786"/> + <v x="2.2848811" y="-0" z="-3.202786"/> + <v x="1.370929" y="-0" z="-3.202786"/> + <v x="0.456976" y="-0" z="-3.202786"/> + <v x="-0.456976" y="-0" z="-3.202786"/> + <v x="-1.370928" y="-0" z="-3.202786"/> + <v x="-2.2848811" y="-0" z="-3.202786"/> + <v x="-3.198833" y="-0" z="-3.202786"/> + <v x="-4.1127858" y="-0" z="-3.202786"/> + <v x="4.1127849" y="-0" z="-2.2888329"/> + <v x="3.198833" y="-0" z="-2.2888329"/> + <v x="2.2848811" y="-0" z="-2.2888329"/> + <v x="1.370929" y="-0" z="-2.2888329"/> + <v x="0.456976" y="-0" z="-2.2888329"/> + <v x="-0.456976" y="-0" z="-2.2888329"/> + <v x="-1.370928" y="-0" z="-2.2888329"/> + <v x="-2.2848811" y="-0" z="-2.2888329"/> + <v x="-3.198833" y="-0" z="-2.2888329"/> + <v x="-4.1127858" y="-0" z="-2.2888329"/> + <v x="4.1127849" y="-0" z="-1.374881"/> + <v x="3.198833" y="-0" z="-1.374881"/> + <v x="2.2848811" y="-0" z="-1.374881"/> + <v x="1.370929" y="-0" z="-1.374881"/> + <v x="0.456976" y="-0" z="-1.374881"/> + <v x="-0.456976" y="-0" z="-1.374881"/> + <v x="-1.370928" y="-0" z="-1.374881"/> + <v x="-2.2848811" y="-0" z="-1.374881"/> + <v x="-3.198833" y="-0" z="-1.374881"/> + <v x="-4.1127858" y="-0" z="-1.374881"/> + <v x="4.1127849" y="-0" z="-0.46092799"/> + <v x="3.198833" y="-0.0086759999" z="-0.46092799"/> + <v x="2.2848811" y="-0.0086759999" z="-0.46092799"/> + <v x="1.370929" y="-0" z="-0.46092799"/> + <v x="0.228488" y="-2" z="-0.23243999"/> + <v x="-0.228488" y="-2" z="-0.23243999"/> + <v x="-1.370928" y="-0" z="-0.46092799"/> + <v x="-2.2848811" y="-0.0086759999" z="-0.46092799"/> + <v x="-3.198833" y="-0.0086759999" z="-0.46092799"/> + <v x="-4.1127858" y="-0" z="-0.46092799"/> + <v x="4.1127849" y="-0" z="0.453024"/> + <v x="3.198833" y="-0.0086759999" z="0.453024"/> + <v x="2.2848811" y="-0.0086759999" z="0.453024"/> + <v x="1.370929" y="-0" z="0.453024"/> + <v x="0.228488" y="-2" z="0.224536"/> + <v x="-0.228488" y="-2" z="0.224536"/> + <v x="-1.370928" y="-0" z="0.453024"/> + <v x="-2.2848811" y="-0.0086759999" z="0.453024"/> + <v x="-3.198833" y="-0.0086759999" z="0.453024"/> + <v x="-4.1127858" y="-0" z="0.453024"/> + <v x="4.1127849" y="-0" z="1.366976"/> + <v x="3.198833" y="-0.0086759999" z="1.366976"/> + <v x="2.2848811" y="-0.0086759999" z="1.366976"/> + <v x="1.370929" y="-0" z="1.366976"/> + <v x="0.456976" y="-0" z="1.366976"/> + <v x="-0.456976" y="-0" z="1.366976"/> + <v x="-1.370928" y="-0" z="1.366976"/> + <v x="-2.2848811" y="-0.0086759999" z="1.366976"/> + <v x="-3.198833" y="-0.0086759999" z="1.366976"/> + <v x="-4.1127858" y="-0" z="1.366976"/> + <v x="4.1127849" y="-0" z="2.2809291"/> + <v x="-0.456976" y="-1" z="-5.202785"/> + <v x="0.456976" y="-1" z="-5.202785"/> + <v x="1.370929" y="-0" z="2.2809291"/> + <v x="0.456976" y="-0" z="2.2809291"/> + <v x="-0.456976" y="-0" z="2.2809291"/> + <v x="-1.370928" y="-0" z="2.2809291"/> + <v x="1.370929" y="-1" z="-5.202785"/> + <v x="2.2848811" y="-1" z="-5.202785"/> + <v x="-4.1127858" y="-0" z="2.2809291"/> + <v x="3.198833" y="-1" z="-5.202785"/> + <v x="3.198833" y="-0" z="2.2848811"/> + <v x="-3.198833" y="-0" z="2.2848811"/> + <v x="4.1127849" y="-1" z="-5.202785"/> + <v x="4.1127849" y="-0" z="3.198833"/> + <v x="3.198833" y="-0" z="3.198833"/> + <v x="-3.198833" y="-0" z="3.198833"/> + <v x="-4.1127858" y="-0" z="3.198833"/> + <v x="4.1127849" y="-0" z="4.1127849"/> + <v x="3.198833" y="-0" z="4.1127849"/> + <v x="2.2848811" y="-0" z="4.1127849"/> + <v x="1.370929" y="-0" z="4.1127849"/> + <v x="0.456976" y="-0" z="4.1127849"/> + <v x="-1.370928" y="-0" z="4.1127849"/> + <v x="-2.2848811" y="-0" z="4.1127849"/> + <v x="-3.198833" y="-0" z="4.1127849"/> + <v x="-4.1127858" y="-0" z="4.1127849"/> + <v x="1.370929" y="-1" z="-1.374881"/> + <v x="0.456976" y="-1" z="-1.374881"/> + <v x="-0.456976" y="-1" z="-1.374881"/> + <v x="-1.370928" y="-1" z="-1.374881"/> + <v x="1.370929" y="-1" z="-0.46092799"/> + <v x="0.456976" y="-1" z="-0.46092799"/> + <v x="-0.456976" y="-1" z="-0.46092799"/> + <v x="-1.370928" y="-1" z="-0.46092799"/> + <v x="1.370929" y="-1" z="0.453024"/> + <v x="0.456976" y="-1" z="0.453024"/> + <v x="-0.456976" y="-1" z="0.453024"/> + <v x="-1.370928" y="-1" z="0.453024"/> + <v x="1.370929" y="-1" z="1.366976"/> + <v x="0.456976" y="-1" z="1.366976"/> + <v x="-0.456976" y="-1" z="1.366976"/> + <v x="-1.370928" y="-1" z="1.366976"/> + <v x="4.1127849" y="-1" z="-3.202786"/> + <v x="-4.1127858" y="-1" z="-3.202786"/> + <v x="4.1127849" y="-1" z="-2.2888329"/> + <v x="-4.1127858" y="-1" z="-2.2888329"/> + <v x="4.1127849" y="-1" z="-1.374881"/> + <v x="-4.1127858" y="-1" z="-1.374881"/> + <v x="4.1127849" y="-1" z="-0.46092799"/> + <v x="-4.1127858" y="-1" z="-0.46092799"/> + <v x="4.1127849" y="-1" z="0.453024"/> + <v x="-4.1127858" y="-1" z="0.453024"/> + <v x="4.1127849" y="-1" z="1.366976"/> + <v x="-4.1127858" y="-1" z="1.366976"/> + <v x="4.1127849" y="-1" z="2.2809291"/> + <v x="-4.1127858" y="-1" z="2.2809291"/> + <v x="-4.1127858" y="-0" z="-5.202785"/> + <v x="-3.198833" y="-0" z="-5.202785"/> + <v x="4.1127849" y="-1" z="3.198833"/> + <v x="-4.1127858" y="-1" z="3.198833"/> + <v x="4.1127849" y="-1" z="4.1127849"/> + <v x="3.198833" y="-1" z="4.1127849"/> + <v x="2.2848811" y="-1" z="4.1127849"/> + <v x="1.370929" y="-1" z="4.1127849"/> + <v x="-1.370928" y="-1" z="4.1127849"/> + <v x="-2.2848811" y="-1" z="4.1127849"/> + <v x="-3.198833" y="-1" z="4.1127849"/> + <v x="-4.1127858" y="-1" z="4.1127849"/> + <v x="-0.456976" y="-1" z="-4.1974058"/> + <v x="0.456976" y="-1" z="-4.1974058"/> + <v x="1.370929" y="-1" z="-4.1974058"/> + <v x="2.2848811" y="-1" z="-4.1974058"/> + <v x="-1.370928" y="-1" z="-4.1974058"/> + <v x="-2.2848811" y="-1" z="-4.1974058"/> + <v x="2.2848811" y="-1" z="-3.1985559"/> + <v x="1.370929" y="-1" z="-3.1985559"/> + <v x="0.456976" y="-1" z="-3.1985559"/> + <v x="-0.456976" y="-1" z="-3.1985559"/> + <v x="-1.370928" y="-1" z="-3.1985559"/> + <v x="-2.2848811" y="-1" z="-3.1985559"/> + <v x="-0.456976" y="-0" z="4.1127849"/> + <v x="2.2848811" y="0.001446" z="3.198833"/> + <v x="1.370928" y="0.001446" z="3.198833"/> + <v x="0.456976" y="0.001446" z="3.198833"/> + <v x="0.456976" y="-0" z="5.1127849"/> + <v x="1.370929" y="-0" z="5.1127849"/> + <v x="-1.370928" y="-1" z="5.1127849"/> + <v x="-0.456976" y="-0" z="5.1127849"/> + <v x="-1.370928" y="-0" z="5.1127849"/> + <v x="1.370929" y="-1" z="5.1127849"/> + <v x="-1.370929" y="0.001446" z="3.198833"/> + <v x="0.456976" y="-0" z="6.1127849"/> + <v x="1.370929" y="-0" z="6.1127849"/> + <v x="-1.370928" y="-1" z="6.1127849"/> + <v x="-0.456976" y="-0" z="6.1127849"/> + <v x="-1.370928" y="-0" z="6.1127849"/> + <v x="1.370929" y="-1" z="6.1127849"/> + <v x="-1.370928" y="-0" z="7.1127849"/> + <v x="0.456976" y="-0" z="7.1127849"/> + <v x="1.370929" y="-0" z="7.1127849"/> + <v x="-1.370928" y="-1" z="7.1127849"/> + <v x="-0.456976" y="-0" z="7.1127849"/> + <v x="-0.456976" y="0.001446" z="3.198833"/> + <v x="0.456976" y="-1" z="7.1127849"/> + <v x="1.370929" y="-1" z="7.1127849"/> + <v x="-0.456976" y="-1" z="7.1127849"/> + <v x="4.1127849" y="-0" z="-4.202785"/> + <v x="3.198833" y="-0" z="-4.202785"/> + <v x="2.2848811" y="-0" z="-4.202785"/> + <v x="1.370929" y="-0" z="-4.202785"/> + <v x="0.456976" y="-0" z="-4.202785"/> + <v x="-0.456976" y="-0" z="-4.202785"/> + <v x="-1.370928" y="-0" z="-4.202785"/> + <v x="-2.2848811" y="-0" z="-4.202785"/> + <v x="-3.198833" y="-0" z="-4.202785"/> + <v x="-4.1127858" y="-0" z="-4.202785"/> + <v x="4.1127849" y="-1" z="-4.202785"/> + <v x="-4.1127858" y="-1" z="-4.202785"/> + <v x="4.1127849" y="-2" z="-3.202786"/> + <v x="-4.1127858" y="-2" z="-3.202786"/> + <v x="4.1127849" y="-2" z="-2.2888329"/> + <v x="-4.1127858" y="-2" z="-2.2888329"/> + <v x="4.1127849" y="-2" z="-1.374881"/> + <v x="-4.1127858" y="-2" z="-1.374881"/> + <v x="4.1127849" y="-2" z="-0.46092799"/> + <v x="-4.1127858" y="-2" z="-0.46092799"/> + <v x="4.1127849" y="-2" z="0.453024"/> + <v x="-4.1127858" y="-2" z="0.453024"/> + <v x="4.1127849" y="-2" z="1.366976"/> + <v x="-4.1127858" y="-2" z="1.366976"/> + <v x="4.1127849" y="-2" z="2.2809291"/> + <v x="-4.1127858" y="-2" z="2.2809291"/> + <v x="-2.2848811" y="-0" z="-5.202785"/> + <v x="-1.370928" y="-0" z="-5.202785"/> + <v x="4.1127849" y="-2" z="3.198833"/> + <v x="-4.1127858" y="-2" z="3.198833"/> + <v x="4.1127849" y="-2" z="4.1127849"/> + <v x="3.198833" y="-2" z="4.1127849"/> + <v x="2.2848811" y="-2" z="4.1127849"/> + <v x="-2.2848811" y="0.001446" z="3.198833"/> + <v x="-1.370928" y="-2" z="4.1127849"/> + <v x="-2.2848811" y="-2" z="4.1127849"/> + <v x="-3.198833" y="-2" z="4.1127849"/> + <v x="-4.1127858" y="-2" z="4.1127849"/> + <v x="1.370929" y="-2" z="4.1127849"/> + <v x="-1.370928" y="-2" z="5.1127849"/> + <v x="1.370929" y="-2" z="5.1127849"/> + <v x="-1.370928" y="-2" z="6.1127849"/> + <v x="1.370929" y="-2" z="6.1127849"/> + <v x="-1.370928" y="-2" z="7.1127849"/> + <v x="0.456976" y="-2" z="7.1127849"/> + <v x="1.370929" y="-2" z="7.1127849"/> + <v x="-0.456976" y="-2" z="7.1127849"/> + <v x="4.1127849" y="-2" z="-4.202785"/> + <v x="-4.1127858" y="-2" z="-4.202785"/> + <v x="4.1127849" y="-3" z="-3.202786"/> + <v x="-4.1127858" y="-3" z="-3.202786"/> + <v x="4.1127849" y="-3" z="-2.2888329"/> + <v x="-4.1127858" y="-3" z="-2.2888329"/> + <v x="4.1127849" y="-3" z="-1.374881"/> + <v x="-4.1127858" y="-3" z="-1.374881"/> + <v x="4.1127849" y="-3" z="-0.46092799"/> + <v x="-4.1127858" y="-3" z="-0.46092799"/> + <v x="4.1127849" y="-3" z="0.453024"/> + <v x="-4.1127858" y="-3" z="0.453024"/> + <v x="4.1127849" y="-3" z="1.366976"/> + <v x="-4.1127858" y="-3" z="1.366976"/> + <v x="4.1127849" y="-3" z="2.2809291"/> + <v x="-4.1127858" y="-3" z="2.2809291"/> + <v x="-0.456976" y="-0" z="-5.202785"/> + <v x="0.456976" y="-0" z="-5.202785"/> + <v x="4.1127849" y="-3" z="3.198833"/> + <v x="-4.1127858" y="-3" z="3.198833"/> + <v x="4.1127849" y="-3" z="4.1127849"/> + <v x="3.198833" y="-3" z="4.1127849"/> + <v x="2.2848811" y="-3" z="4.1127849"/> + <v x="-1.370928" y="-3" z="4.1127849"/> + <v x="-2.2848811" y="-3" z="4.1127849"/> + <v x="-3.198833" y="-3" z="4.1127849"/> + <v x="-4.1127858" y="-3" z="4.1127849"/> + <v x="1.370929" y="-3" z="4.1127849"/> + <v x="-1.370928" y="-3" z="5.1127849"/> + <v x="1.370929" y="-3" z="5.1127849"/> + <v x="-1.370928" y="-3" z="6.1127849"/> + <v x="1.370929" y="-3" z="6.1127849"/> + <v x="-1.370928" y="-3" z="7.1127849"/> + <v x="0.456976" y="-3" z="7.1127849"/> + <v x="1.370929" y="-3" z="7.1127849"/> + <v x="-0.456976" y="-3" z="7.1127849"/> + <v x="4.1127849" y="-3" z="-4.202785"/> + <v x="-4.1127858" y="-3" z="-4.202785"/> + <v x="-2.2848811" y="-0" z="2.2848811"/> + <v x="1.370929" y="-0" z="-5.202785"/> + <v x="2.2848811" y="-0" z="-5.202785"/> + <v x="2.2848811" y="-0" z="2.2848811"/> + <v x="3.198833" y="-0" z="-5.202785"/> + <v x="4.1127849" y="-0" z="-5.202785"/> + <v x="-1.370928" y="-1" z="-5.202785"/> + <v x="-2.2848811" y="-1" z="-5.202785"/> + <v x="-3.198833" y="-1" z="-5.202785"/> + <v x="-4.1127858" y="-1" z="-5.202785"/> + <v x="4.1127849" y="-2" z="-5.202785"/> + <v x="3.198833" y="-2" z="-5.202785"/> + <v x="2.2848811" y="-2" z="-5.202785"/> + <v x="1.370929" y="-2" z="-5.202785"/> + <v x="0.456976" y="-2" z="-5.202785"/> + <v x="-0.456976" y="-2" z="-5.202785"/> + <v x="-1.370928" y="-2" z="-5.202785"/> + <v x="-2.2848811" y="-2" z="-5.202785"/> + <v x="-3.198833" y="-2" z="-5.202785"/> + <v x="-4.1127858" y="-2" z="-5.202785"/> + <v x="4.1127849" y="-3" z="-5.202785"/> + <v x="3.198833" y="-3" z="-5.202785"/> + <v x="2.2848811" y="-3" z="-5.202785"/> + <v x="1.370929" y="-3" z="-5.202785"/> + <v x="0.456976" y="-3" z="-5.202785"/> + <v x="-0.456976" y="-3" z="-5.202785"/> + <v x="-1.370928" y="-3" z="-5.202785"/> + <v x="-2.2848811" y="-3" z="-5.202785"/> + <v x="-3.198833" y="-3" z="-5.202785"/> + <v x="-4.1127858" y="-3" z="-5.202785"/> + </vertices> + <normals count="541"> + <v x="-0.70708299" y="-0.70708299" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0.302591" y="-0.90407997" z="0.30176699"/> + <v x="0" y="-0.70558798" z="0.708579"/> + <v x="0" y="-0.70558798" z="0.708579"/> + <v x="0" y="-0.70558798" z="0.708579"/> + <v x="0" y="-0.70558798" z="0.708579"/> + <v x="-0.302591" y="-0.90407997" z="0.30176699"/> + <v x="0" y="-1" z="0"/> + <v x="0.70708299" y="-0.70708299" z="0"/> + <v x="-0.70708299" y="-0.70708299" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0.70708299" y="-0.70708299" z="0"/> + <v x="-0.70625901" y="-0.70793802" z="-0.001679"/> + <v x="0.00116" y="-0.99996901" z="-0.0035399999"/> + <v x="-0.00116" y="-0.99996901" z="-0.0035399999"/> + <v x="0.30005801" y="-0.90450799" z="-0.30292699"/> + <v x="0" y="-0.70708299" z="-0.70708299"/> + <v x="0" y="-0.70708299" z="-0.70708299"/> + <v x="-0.30005801" y="-0.90450799" z="-0.30292699"/> + <v x="0.00116" y="-0.99996901" z="-0.0035399999"/> + <v x="-0.00116" y="-0.99996901" z="-0.0035399999"/> + <v x="0.70625901" y="-0.70793802" z="-0.001679"/> + <v x="-0.70458102" y="-0.70958602" z="-0.001679"/> + <v x="0.0035399999" y="-0.99996901" z="-0.0035399999"/> + <v x="-0.0035399999" y="-0.99996901" z="-0.0035399999"/> + <v x="0.70458102" y="-0.70958602" z="-0.001679"/> + <v x="0.51017803" y="-0.69237298" z="-0.51017803"/> + <v x="-0.51017803" y="-0.69237298" z="-0.51017803"/> + <v x="-0.70458102" y="-0.70958602" z="-0.001679"/> + <v x="0.0035399999" y="-0.99996901" z="-0.0035399999"/> + <v x="-0.0035399999" y="-0.99996901" z="-0.0035399999"/> + <v x="0.70458102" y="-0.70958602" z="-0.001679"/> + <v x="-0.70372599" y="-0.71043998" z="0"/> + <v x="0.0047300002" y="-0.99996901" z="0"/> + <v x="-0.0047300002" y="-0.99996901" z="0"/> + <v x="0.70372599" y="-0.71043998" z="0"/> + <v x="0.51017803" y="-0.69237298" z="0.51017803"/> + <v x="-0.51017803" y="-0.69237298" z="0.51017803"/> + <v x="-0.70372599" y="-0.71043998" z="0"/> + <v x="0.0047300002" y="-0.99996901" z="0"/> + <v x="-0.0047300002" y="-0.99996901" z="0"/> + <v x="0.70372599" y="-0.71043998" z="0"/> + <v x="-0.70458102" y="-0.70961601" z="0.001679"/> + <v x="0.0035399999" y="-0.99996901" z="0.0035399999"/> + <v x="-0.0035399999" y="-0.99996901" z="0.0035399999"/> + <v x="0.29746401" y="-0.90530097" z="0.30320099"/> + <v x="0" y="-0.70708299" z="0.70708299"/> + <v x="0" y="-0.70708299" z="0.70708299"/> + <v x="-0.29746401" y="-0.90530097" z="0.30320099"/> + <v x="0.0035399999" y="-0.99996901" z="0.0035399999"/> + <v x="-0.0035399999" y="-0.99996901" z="0.0035399999"/> + <v x="0.70458102" y="-0.70961601" z="0.001679"/> + <v x="-0.70625901" y="-0.70793802" z="0.001679"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="-0.00119" y="-0.99996901" z="0.001953"/> + <v x="0" y="-0.99996901" z="0.00076299999"/> + <v x="0" y="-0.99996901" z="0.00076299999"/> + <v x="0.00119" y="-0.99996901" z="0.001953"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0.70625901" y="-0.70793802" z="0.001679"/> + <v x="0" y="-0" z="1"/> + <v x="0.00097699999" y="-0.99996901" z="0.0037229999"/> + <v x="-0.00097699999" y="-0.99996901" z="0.0037229999"/> + <v x="-0.70708299" y="-0" z="0.70708299"/> + <v x="-0.70708299" y="-0.70708299" z="0"/> + <v x="-0.00036599999" y="-0.99996901" z="0"/> + <v x="0.00036599999" y="-0.99996901" z="0"/> + <v x="0.70708299" y="-0.70708299" z="0"/> + <v x="-0.57734901" y="-0.57734901" z="-0.57734901"/> + <v x="-0.000275" y="-0.70696098" z="-0.70723599"/> + <v x="-0.000275" y="-0.70668697" z="-0.70751101"/> + <v x="-0.30140099" y="-0.90426302" z="-0.30237699"/> + <v x="0" y="-0.99996901" z="-0.00076299999"/> + <v x="0.30140099" y="-0.90426302" z="-0.30237699"/> + <v x="0.000275" y="-0.70668697" z="-0.70751101"/> + <v x="0.000275" y="-0.70696098" z="-0.70723599"/> + <v x="0.57734901" y="-0.57734901" z="-0.57734901"/> + <v x="0.57734901" y="-0.57734901" z="-0.57734901"/> + <v x="0" y="-0.70708299" z="-0.70708299"/> + <v x="0" y="-0.70708299" z="-0.70708299"/> + <v x="-0.57734901" y="-0.57734901" z="-0.57734901"/> + <v x="0.70708299" y="-0.70708299" z="0"/> + <v x="0.233955" y="-0.943663" z="-0.233955"/> + <v x="-0.233955" y="-0.943663" z="-0.233955"/> + <v x="-0.70708299" y="-0.70708299" z="0"/> + <v x="0.70708299" y="-0.70708299" z="0"/> + <v x="0.233955" y="-0.943663" z="0.233955"/> + <v x="-0.233955" y="-0.943663" z="0.233955"/> + <v x="-0.70708299" y="-0.70708299" z="0"/> + <v x="0.57734901" y="-0.57734901" z="0.57734901"/> + <v x="0" y="-0.70708299" z="0.70708299"/> + <v x="0" y="-0.70708299" z="0.70708299"/> + <v x="-0.57734901" y="-0.57734901" z="0.57734901"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="0.57734901" y="-0.57734901" z="0.57734901"/> + <v x="0" y="-0.70708299" z="0.70708299"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-0.70708299" y="-0" z="-0.70708299"/> + <v x="0" y="-0" z="-1"/> + <v x="0" y="-0" z="-1"/> + <v x="-0.70708299" y="-0" z="-0.70708299"/> + <v x="0.70708299" y="-0" z="-0.70708299"/> + <v x="0" y="-0" z="-1"/> + <v x="0" y="-0" z="-1"/> + <v x="0.70708299" y="-0" z="-0.70708299"/> + <v x="0" y="-0.70900601" z="-0.70519102"/> + <v x="0" y="-0.70900601" z="-0.70519102"/> + <v x="0" y="-0.70900601" z="-0.70519102"/> + <v x="0.57762402" y="-0.57875299" z="-0.57564002"/> + <v x="0" y="-0.70900601" z="-0.70519102"/> + <v x="-0.57762402" y="-0.57875299" z="-0.57564002"/> + <v x="0.57710499" y="-0.57621998" z="0.57866102"/> + <v x="0" y="-0.70558798" z="0.708579"/> + <v x="0" y="-0.70558798" z="0.708579"/> + <v x="0" y="-0.70558798" z="0.708579"/> + <v x="0" y="-0.70558798" z="0.708579"/> + <v x="-0.57710499" y="-0.57621998" z="0.57866102"/> + <v x="0" y="-0.99996901" z="-0.00076299999"/> + <v x="-0.00036599999" y="-0.99996901" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="-0.70708299" y="-0.70708299" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0.70708299" y="-0.70708299" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="-0.70708299" y="-0.70708299" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0.70708299" y="-0.70708299" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="0.57734901" y="-0.57734901" z="-0.57734901"/> + <v x="0" y="-0.70708299" z="-0.70708299"/> + <v x="-0.57734901" y="-0.57734901" z="-0.57734901"/> + <v x="0.70708299" y="-0" z="-0.70708299"/> + <v x="0" y="-0.70708299" z="-0.70708299"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-0" z="-1"/> + <v x="-0.70708299" y="-0" z="-0.70708299"/> + <v x="0" y="-0" z="-1"/> + <v x="-0.70708299" y="-0.70708299" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0.30011901" y="-0.90508699" z="-0.301157"/> + <v x="0" y="-0.70900601" z="-0.70519102"/> + <v x="0" y="-0.70900601" z="-0.70519102"/> + <v x="0" y="-0.70900601" z="-0.70519102"/> + <v x="0" y="-0.70900601" z="-0.70519102"/> + <v x="-0.30011901" y="-0.90508699" z="-0.301157"/> + <v x="0" y="-1" z="0"/> + <v x="0.70708299" y="-0.70708299" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="-0.70708299" z="0.70708299"/> + <v x="0" y="-0.70708299" z="0.70708299"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-0.70708299" y="-0" z="-0.70708299"/> + <v x="0" y="-0" z="-1"/> + <v x="0" y="-0" z="-1"/> + <v x="0.00036599999" y="-0.99996901" z="0"/> + <v x="0.70708299" y="-0" z="-0.70708299"/> + <v x="0" y="-0" z="-1"/> + <v x="0" y="-0" z="-1"/> + <v x="0.70708299" y="-0" z="-0.70708299"/> + <v x="-0.70708299" y="-0" z="-0.70708299"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="0.70708299" y="-0" z="-0.70708299"/> + <v x="0" y="-0" z="-1"/> + <v x="-0.70708299" y="-0" z="-0.70708299"/> + <v x="0" y="-0" z="-1"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="-0.70708299" z="0.70708299"/> + <v x="0" y="-0.70708299" z="0.70708299"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-0.70708299" y="-0" z="-0.70708299"/> + <v x="0" y="-0" z="-1"/> + <v x="0" y="-0" z="-1"/> + <v x="0.70708299" y="-0" z="-0.70708299"/> + <v x="0" y="-0" z="-1"/> + <v x="0" y="-0" z="-1"/> + <v x="0.70708299" y="-0" z="-0.70708299"/> + <v x="-0.70708299" y="-0" z="-0.70708299"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="0.70708299" y="-0" z="-0.70708299"/> + <v x="0" y="-0" z="-1"/> + <v x="-0.70708299" y="-0" z="-0.70708299"/> + <v x="0" y="-0" z="-1"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="0.001373" y="-0.99996901" z="0.0041200002"/> + <v x="0" y="-0.70708299" z="0.70708299"/> + <v x="0" y="-0.70708299" z="0.70708299"/> + <v x="-0.001373" y="-0.99996901" z="0.0041200002"/> + <v x="0" y="-0.70708299" z="0.70708299"/> + <v x="-0.57734901" y="-0.57734901" z="0.57734901"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0.70708299" y="-0" z="0.70708299"/> + <v x="-0.70708299" y="-0" z="0.70708299"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0.70708299" y="-0" z="0.70708299"/> + <v x="-0.70708299" y="-0" z="0.70708299"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0.70708299" y="-0" z="0.70708299"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="-0.0047459998" y="-0.99997801" z="-0.0047459998"/> + <v x="0.97487599" y="-0.222748" z="0"/> + <v x="0" y="-0.999955" z="-0.0094919996"/> + <v x="-0.0047459998" y="-0.99997699" z="-0.0047459998"/> + <v x="0.0047459998" y="-0.99997801" z="-0.0047459998"/> + <v x="0" y="-0.999955" z="-0.0094919996"/> + <v x="0" y="-0" z="1"/> + <v x="0.0047459998" y="-0.99997801" z="-0.0047459998"/> + <v x="0" y="0" z="-1"/> + <v x="0" y="-1" z="0"/> + <v x="-0.0094919996" y="-0.999955" z="0"/> + <v x="0" y="-0.222748" z="-0.97487599"/> + <v x="0" y="-1" z="0"/> + <v x="-0.0094919996" y="-0.999955" z="0"/> + <v x="0.0094919996" y="-0.999955" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="0" z="-1"/> + <v x="0.0094919996" y="-0.999955" z="0"/> + <v x="-0.97487599" y="-0.222748" z="0"/> + <v x="0.0094919996" y="-0.999955" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-0.0094919996" y="-0.999955" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="-0.0094919996" y="-0.999955" z="0"/> + <v x="0.0094919996" y="-0.999955" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0.0047559999" y="-0.99997699" z="0.0047360002"/> + <v x="0" y="-0.999955" z="0.009451"/> + <v x="0" y="-1" z="0"/> + <v x="0.0047559999" y="-0.99997801" z="0.0047360002"/> + <v x="0" y="-1" z="0"/> + <v x="-0.0047559999" y="-0.99997699" z="0.0047360002"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-0.999955" z="0.009451"/> + <v x="-0.0047559999" y="-0.99997801" z="0.0047360002"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-0.00538" z="-0.99998599"/> + <v x="0.00079100003" y="-0.99999899" z="0.00079100003"/> + <v x="0" y="0.0042300001" z="0.999991"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-0.00538" z="-0.99998599"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="0.0042300001" z="0.999991"/> + <v x="0" y="-0.99999899" z="-0.0015820001"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-0.99999899" z="-0.0015820001"/> + <v x="0.00079100003" y="-0.99999899" z="-0.00079100003"/> + <v x="0" y="-0.99999899" z="-0.0015820001"/> + <v x="0" y="-0.99999899" z="-0.0015820001"/> + <v x="-0.00079100003" y="-0.99999899" z="-0.00079100003"/> + <v x="0" y="-0.99999899" z="-0.0015820001"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="0" z="-1"/> + <v x="0" y="-0" z="1"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="0" y="-0.222748" z="0.97487599"/> + <v x="0" y="-0" z="1"/> + <v x="-1" y="0" z="0"/> + <v x="0" y="0" z="-1"/> + <v x="-1" y="0" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="0" y="0" z="-1"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="0" z="-1"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="0" y="-1" z="-0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="1" y="-0" z="-0"/> + <v x="0" y="-1" z="-0"/> + <v x="0" y="-0" z="1"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="0" y="0" z="-1"/> + <v x="0" y="0" z="-1"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="-0" z="1"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="0" z="-1"/> + <v x="0" y="-1" z="-0"/> + <v x="0" y="-1" z="-0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="-0.00079100003" y="-0.99999899" z="0.00079100003"/> + <v x="0" y="-1" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="0" y="0.0042300001" z="0.999991"/> + <v x="0" y="-0.00538" z="-0.99998599"/> + <v x="0" y="0.0042300001" z="0.999991"/> + <v x="0" y="-0.00538" z="-0.99998599"/> + <v x="0" y="0.0042300001" z="0.999991"/> + <v x="0" y="-0.00538" z="-0.99998599"/> + <v x="-1" y="-0" z="-0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-0.99999899" z="0.001575"/> + <v x="0" y="-1" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="-0.99999899" z="0.001575"/> + <v x="0" y="-1" z="0"/> + <v x="-1" y="-0" z="-0"/> + <v x="0" y="-0.99999899" z="0.001575"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="0" z="-1"/> + <v x="0" y="0" z="-1"/> + <v x="-1" y="-0" z="-0"/> + <v x="0" y="0" z="-1"/> + <v x="0" y="-1" z="-0"/> + <v x="0" y="-1" z="-0"/> + <v x="0" y="-1" z="-0"/> + <v x="-1" y="-0" z="0"/> + <v x="0" y="-0" z="1"/> + <v x="-1" y="0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="-1" z="-0"/> + <v x="0" y="0" z="-1"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="0" y="0" z="-1"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="0" y="-1" z="-0"/> + <v x="3.0000001e-006" y="-0.99999899" z="0.001579"/> + <v x="0" y="0" z="-1"/> + <v x="-1" y="0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="0" z="-1"/> + <v x="-1" y="0" z="0"/> + <v x="0" y="0" z="-1"/> + <v x="0" y="0" z="-1"/> + <v x="-1" y="0" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="0" z="-1"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="0" z="-1"/> + <v x="-1" y="0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="-1" z="-0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="0" y="-1" z="-0"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="0" z="-1"/> + <v x="0" y="0" z="-1"/> + <v x="-1" y="0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="0" z="-1"/> + <v x="0" y="0" z="-1"/> + <v x="-1" y="0" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="0" y="0" z="-1"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="0" z="-1"/> + <v x="0" y="0" z="-1"/> + <v x="-1" y="0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="0" y="0" z="-1"/> + <v x="-1" y="0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="-1" z="-0"/> + <v x="-1" y="0" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="-3.0000001e-006" y="-0.99999899" z="0.001579"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="-1" z="-0"/> + <v x="-1" y="0" z="0"/> + <v x="0" y="-0" z="1"/> + <v x="1" y="-0" z="-0"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="-0" z="1"/> + <v x="1" y="-0" z="-0"/> + <v x="-1" y="0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="1" y="-0" z="-0"/> + <v x="-1" y="0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="0" z="-1"/> + <v x="1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="0" z="-1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + </normals> + <textures count="5"> + <texture file="ptsc-floor"/> + <texture file="ptsc-wallptrn2"/> + <texture file="ptsc-wallptrn"/> + <texture file="ptsc-floor2"/> + <texture file="ptsc-door"/> + </textures> + <primitives count="259"> + <poly v0="17" v1="16" v2="7" v3="6" n0="282" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="12" v1="11" v2="2" v3="1" n0="283" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="16" v1="15" v2="6" v3="5" n0="284" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="11" v1="10" v2="1" v3="0" n0="285" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="15" v1="14" v2="5" v3="4" n0="286" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="19" v1="18" v2="9" v3="8" n0="287" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="14" v1="13" v2="4" v3="3" n0="288" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="18" v1="17" v2="8" v3="7" n0="289" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="13" v1="12" v2="3" v3="2" n0="290" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="28" v1="27" v2="18" v3="17" n0="291" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="23" v1="22" v2="13" v3="12" n0="292" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="27" v1="26" v2="17" v3="16" n0="293" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="22" v1="21" v2="12" v3="11" n0="294" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="26" v1="25" v2="16" v3="15" n0="295" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="21" v1="20" v2="11" v3="10" n0="296" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="25" v1="24" v2="15" v3="14" n0="297" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="29" v1="28" v2="19" v3="18" n0="298" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="24" v1="23" v2="14" v3="13" n0="299" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="39" v1="38" v2="29" v3="28" n0="300" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="96" v1="92" v2="44" v3="34" n0="301" shading="F" r0="255" g0="255" b0="255" type="F4"/> + <poly v0="38" v1="37" v2="28" v3="27" n0="302" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="33" v1="32" v2="23" v3="22" n0="303" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="37" v1="36" v2="27" v3="26" n0="304" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="32" v1="31" v2="22" v3="21" n0="305" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="99" v1="100" v2="53" v3="54" n0="306" shading="F" r0="128" g0="128" b0="128" texture="1" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="31" v1="30" v2="21" v3="20" n0="307" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="89" v1="88" v2="25" v3="24" n0="308" shading="F" r0="128" g0="128" b0="128" texture="1" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="45" v1="44" v2="35" v3="34" n0="309" shading="F" r0="255" g0="255" b0="255" type="F4"/> + <poly v0="49" v1="48" v2="39" v3="38" n0="310" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="92" v1="93" v2="34" v3="35" n0="311" shading="F" r0="255" g0="255" b0="255" type="F4"/> + <poly v0="48" v1="47" v2="38" v3="37" n0="312" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="43" v1="42" v2="33" v3="32" n0="313" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="47" v1="46" v2="37" v3="36" n0="314" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="42" v1="41" v2="32" v3="31" n0="315" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="88" v1="87" v2="24" v3="23" n0="316" shading="F" r0="128" g0="128" b0="128" texture="1" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="41" v1="40" v2="31" v3="30" n0="317" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="93" v1="97" v2="35" v3="45" n0="318" shading="F" r0="255" g0="255" b0="255" type="F4"/> + <poly v0="51" v1="50" v2="41" v3="40" n0="319" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="91" v1="95" v2="33" v3="43" n0="320" shading="F" r0="128" g0="128" b0="128" texture="1" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="59" v1="58" v2="49" v3="48" n0="321" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="87" v1="91" v2="23" v3="33" n0="322" shading="F" r0="128" g0="128" b0="128" texture="1" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="58" v1="57" v2="48" v3="47" n0="323" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="53" v1="52" v2="43" v3="42" n0="324" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="57" v1="56" v2="47" v3="46" n0="325" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="52" v1="51" v2="42" v3="41" n0="326" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="252" v1="66" v2="57" v3="56" n0="327" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="255" v1="71" v2="52" v3="51" n0="328" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="66" v1="65" v2="56" v3="55" n0="329" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="71" v1="60" v2="51" v3="50" n0="330" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="65" v1="64" v2="55" v3="54" n0="331" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="69" v1="72" v2="59" v3="58" n0="332" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="64" v1="63" v2="54" v3="53" n0="333" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="72" v1="252" v2="58" v3="57" n0="334" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="63" v1="255" v2="53" v3="52" n0="335" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="270" v1="271" v2="260" v3="261" n0="336" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="269" v1="270" v2="259" v3="260" n0="337" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="268" v1="269" v2="258" v3="259" n0="338" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="267" v1="268" v2="61" v3="258" n0="339" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="266" v1="267" v2="62" v3="61" n0="340" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="265" v1="266" v2="67" v3="62" n0="341" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="258" v1="259" v2="194" v3="193" n0="342" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="70" v1="68" v2="256" v3="254" n0="343" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="260" v1="261" v2="118" v3="117" n0="344" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="77" v1="76" v2="69" v3="72" n0="345" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="130" v1="131" v2="171" v3="170" n0="346" shading="F" r0="128" g0="128" b0="128" texture="1" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="76" v1="200" v2="72" v3="252" n0="347" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="137" v1="138" v2="4" v3="5" n0="348" shading="F" r0="128" g0="128" b0="128" texture="1" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="132" v1="135" v2="169" v3="2" n0="349" shading="F" r0="128" g0="128" b0="128" texture="1" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="139" v1="138" v2="133" v3="129" n0="350" shading="F" r0="128" g0="128" b0="128" texture="3" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="129" v1="130" v2="172" v3="171" n0="351" shading="F" r0="128" g0="128" b0="128" texture="1" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="75" v1="74" v2="71" v3="60" n0="352" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="138" v1="139" v2="5" v3="6" n0="353" shading="F" r0="128" g0="128" b0="128" texture="1" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="141" v1="82" v2="163" v3="144" n0="354" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="86" v1="85" v2="77" v3="76" n0="355" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="82" v1="81" v2="144" v3="143" n0="356" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="85" v1="84" v2="76" v3="200" n0="357" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="81" v1="80" v2="143" v3="142" n0="358" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="84" v1="83" v2="200" v3="151" n0="359" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="80" v1="79" v2="142" v3="75" n0="360" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="83" v1="141" v2="151" v3="163" n0="361" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="79" v1="78" v2="75" v3="74" n0="362" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="92" v1="91" v2="88" v3="87" n0="363" shading="F" r0="255" g0="255" b0="0" type="F4"/> + <poly v0="94" v1="93" v2="90" v3="89" n0="364" shading="F" r0="255" g0="255" b0="0" type="F4"/> + <poly v0="93" v1="92" v2="89" v3="88" n0="365" shading="F" r0="0" g0="255" b0="255" type="F4"/> + <poly v0="96" v1="95" v2="92" v3="91" n0="366" shading="F" r0="0" g0="255" b0="255" type="F4"/> + <poly v0="98" v1="97" v2="94" v3="93" n0="367" shading="F" r0="0" g0="255" b0="255" type="F4"/> + <poly v0="102" v1="101" v2="98" v3="97" n0="368" shading="F" r0="255" g0="255" b0="0" type="F4"/> + <poly v0="101" v1="100" v2="97" v3="96" n0="369" shading="F" r0="0" g0="255" b0="255" type="F4"/> + <poly v0="100" v1="99" v2="96" v3="95" n0="370" shading="F" r0="255" g0="255" b0="0" type="F4"/> + <poly v0="90" v1="89" v2="26" v3="25" n0="371" shading="F" r0="128" g0="128" b0="128" texture="1" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="100" v1="101" v2="54" v3="55" n0="372" shading="F" r0="128" g0="128" b0="128" texture="1" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="95" v1="99" v2="43" v3="53" n0="373" shading="F" r0="128" g0="128" b0="128" texture="1" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="94" v1="90" v2="36" v3="26" n0="374" shading="F" r0="128" g0="128" b0="128" texture="1" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="98" v1="94" v2="46" v3="36" n0="375" shading="F" r0="128" g0="128" b0="128" texture="1" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="102" v1="98" v2="56" v3="46" n0="376" shading="F" r0="128" g0="128" b0="128" texture="1" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="97" v1="96" v2="45" v3="44" n0="377" shading="F" r0="255" g0="255" b0="255" type="F4"/> + <poly v0="101" v1="102" v2="55" v3="56" n0="378" shading="F" r0="128" g0="128" b0="128" texture="1" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="115" v1="113" v2="60" v3="50" n0="379" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="128" v1="127" v2="86" v3="85" n0="380" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="111" v1="109" v2="40" v3="30" n0="381" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="121" v1="119" v2="78" v3="74" n0="382" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="123" v1="122" v2="80" v3="79" n0="383" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="110" v1="112" v2="39" v3="49" n0="384" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="109" v1="107" v2="30" v3="20" n0="385" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="112" v1="114" v2="49" v3="59" n0="386" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="126" v1="125" v2="84" v3="83" n0="387" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="120" v1="128" v2="77" v3="86" n0="388" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="177" v1="167" v2="103" v3="0" n0="389" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="31" tv0="0" tu1="31" tv1="31" tu2="0" tv2="0" tu3="0" tv3="31" type="FT4"/> + <poly v0="119" v1="115" v2="74" v3="60" n0="390" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="168" v1="169" v2="1" v3="2" n0="391" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="31" tu1="0" tv1="31" tu2="31" tv2="0" tu3="0" tv3="0" type="FT4"/> + <poly v0="106" v1="108" v2="19" v3="29" n0="392" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="113" v1="111" v2="50" v3="40" n0="393" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="176" v1="178" v2="9" v3="104" n0="394" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="31" tu1="0" tv1="0" tu2="31" tv2="31" tu3="31" tv3="0" type="FT4"/> + <poly v0="175" v1="176" v2="8" v3="9" n0="395" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="31" tu1="0" tv1="31" tu2="31" tv2="0" tu3="0" tv3="0" type="FT4"/> + <poly v0="67" v1="62" v2="253" v3="231" n0="396" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="108" v1="110" v2="29" v3="39" n0="397" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="107" v1="105" v2="20" v3="10" n0="398" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="124" v1="123" v2="81" v3="80" n0="399" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="127" v1="126" v2="85" v3="84" n0="400" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="116" v1="120" v2="69" v3="77" n0="401" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="61" v1="258" v2="230" v3="194" n0="402" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="104" v1="106" v2="9" v3="19" n0="403" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="122" v1="121" v2="79" v3="78" n0="404" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="167" v1="168" v2="0" v3="1" n0="405" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="31" tu1="0" tv1="31" tu2="31" tv2="0" tu3="0" tv3="0" type="FT4"/> + <poly v0="174" v1="175" v2="7" v3="8" n0="406" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="31" tu1="0" tv1="31" tu2="31" tv2="0" tu3="0" tv3="0" type="FT4"/> + <poly v0="114" v1="116" v2="59" v3="69" n0="407" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="105" v1="103" v2="10" v3="0" n0="408" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="140" v1="139" v2="134" v3="133" n0="409" shading="F" r0="128" g0="128" b0="128" texture="3" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="136" v1="135" v2="131" v3="132" n0="410" shading="F" r0="128" g0="128" b0="128" texture="3" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="137" v1="136" v2="130" v3="131" n0="411" shading="F" r0="128" g0="128" b0="128" texture="3" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="142" v1="75" v2="255" v3="71" n0="412" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="138" v1="137" v2="129" v3="130" n0="413" shading="F" r0="128" g0="128" b0="128" texture="3" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="140" v1="134" v2="7" v3="174" n0="414" shading="F" r0="128" g0="128" b0="128" texture="1" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="136" v1="137" v2="3" v3="4" n0="415" shading="F" r0="128" g0="128" b0="128" texture="1" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="131" v1="132" v2="170" v3="169" n0="416" shading="F" r0="128" g0="128" b0="128" texture="1" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="135" v1="136" v2="2" v3="3" n0="417" shading="F" r0="128" g0="128" b0="128" texture="1" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="134" v1="133" v2="174" v3="173" n0="418" shading="F" r0="128" g0="128" b0="128" texture="1" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="139" v1="140" v2="6" v3="7" n0="419" shading="F" r0="128" g0="128" b0="128" texture="1" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="133" v1="129" v2="173" v3="172" n0="420" shading="F" r0="128" g0="128" b0="128" texture="1" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="146" v1="150" v2="81" v3="124" n0="421" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="31" tu1="0" tv1="0" tu2="31" tv2="31" tu3="31" tv3="0" type="FT4"/> + <poly v0="149" v1="148" v2="83" v3="141" n0="422" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="144" v1="143" v2="64" v3="63" n0="423" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="145" v1="146" v2="82" v3="81" n0="424" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="125" v1="147" v2="83" v3="149" n0="425" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="148" v1="145" v2="141" v3="82" n0="426" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="152" v1="153" v2="145" v3="146" n0="427" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="155" v1="152" v2="148" v3="145" n0="428" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="147" v1="154" v2="149" v3="156" n0="429" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="163" v1="144" v2="65" v3="64" n0="430" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="156" v1="155" v2="149" v3="148" n0="431" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="153" v1="157" v2="146" v3="150" n0="432" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="31" tu1="0" tv1="0" tu2="31" tv2="31" tu3="31" tv3="0" type="FT4"/> + <poly v0="151" v1="163" v2="66" v3="65" n0="433" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="158" v1="162" v2="156" v3="155" n0="434" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="159" v1="160" v2="152" v3="153" n0="435" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="162" v1="159" v2="155" v3="152" n0="436" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="154" v1="161" v2="156" v3="158" n0="437" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="166" v1="164" v2="162" v3="159" n0="438" shading="F" r0="128" g0="128" b0="128" texture="4" tu0="0" tv0="32" tu1="31" tv1="32" tu2="0" tv2="63" tu3="31" tv3="63" type="FT4"/> + <poly v0="164" v1="165" v2="159" v3="160" n0="439" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="160" v1="165" v2="153" v3="157" n0="440" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="31" tu1="0" tv1="0" tu2="31" tv2="31" tu3="31" tv3="0" type="FT4"/> + <poly v0="161" v1="166" v2="158" v3="162" n0="441" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="231" v1="230" v2="171" v3="172" n0="442" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="31" tu1="0" tv1="31" tu2="31" tv2="0" tu3="0" tv3="0" type="FT4"/> + <poly v0="253" v1="231" v2="170" v3="171" n0="443" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="31" tu1="0" tv1="31" tu2="31" tv2="0" tu3="0" tv3="0" type="FT4"/> + <poly v0="254" v1="253" v2="169" v3="170" n0="444" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="31" tu1="0" tv1="31" tu2="31" tv2="0" tu3="0" tv3="0" type="FT4"/> + <poly v0="73" v1="257" v2="177" v3="167" n0="445" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="31" tv0="0" tu1="31" tv1="31" tu2="0" tv2="0" tu3="0" tv3="31" type="FT4"/> + <poly v0="73" v1="70" v2="257" v3="256" n0="446" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="181" v1="179" v2="105" v3="103" n0="447" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="192" v1="196" v2="116" v3="120" n0="448" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="180" v1="182" v2="104" v3="106" n0="449" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="195" v1="191" v2="119" v3="115" n0="450" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="183" v1="181" v2="107" v3="105" n0="451" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="215" v1="180" v2="178" v3="104" n0="452" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="256" v1="254" v2="168" v3="169" n0="453" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="31" tu1="0" tv1="31" tu2="31" tv2="0" tu3="0" tv3="0" type="FT4"/> + <poly v0="198" v1="197" v2="122" v3="121" n0="454" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="182" v1="184" v2="106" v3="108" n0="455" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="207" v1="205" v2="150" v3="124" n0="456" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="272" v1="262" v2="250" v3="214" n0="457" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="199" v1="198" v2="123" v3="122" n0="458" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="184" v1="186" v2="108" v3="110" n0="459" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="179" v1="214" v2="103" v3="177" n0="460" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="118" v1="117" v2="175" v3="176" n0="461" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="31" tu1="0" tv1="31" tu2="31" tv2="0" tu3="0" tv3="0" type="FT4"/> + <poly v0="200" v1="151" v2="252" v3="66" n0="462" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="205" v1="199" v2="124" v3="123" n0="463" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="185" v1="183" v2="109" v3="107" n0="464" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="208" v1="210" v2="154" v3="161" n0="465" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="206" v1="208" v2="147" v3="154" n0="466" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="186" v1="188" v2="110" v3="112" n0="467" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="213" v1="211" v2="166" v3="164" n0="468" shading="F" r0="128" g0="128" b0="128" texture="4" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="32" tu3="31" tv3="32" type="FT4"/> + <poly v0="187" v1="185" v2="111" v3="109" n0="469" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="211" v1="212" v2="164" v3="165" n0="470" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="202" v1="201" v2="126" v3="125" n0="471" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="209" v1="207" v2="157" v3="150" n0="472" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="189" v1="187" v2="113" v3="111" n0="473" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="201" v1="206" v2="125" v3="147" n0="474" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="203" v1="202" v2="127" v3="126" n0="475" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="188" v1="190" v2="112" v3="114" n0="476" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="204" v1="203" v2="128" v3="127" n0="477" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="191" v1="189" v2="115" v3="113" n0="478" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="196" v1="204" v2="120" v3="128" n0="479" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="257" v1="256" v2="167" v3="168" n0="480" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="31" tu1="0" tv1="31" tu2="31" tv2="0" tu3="0" tv3="0" type="FT4"/> + <poly v0="190" v1="192" v2="114" v3="116" n0="481" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="212" v1="209" v2="165" v3="157" n0="482" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="197" v1="195" v2="121" v3="119" n0="483" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="193" v1="118" v2="174" v3="175" n0="484" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="31" tu1="0" tv1="31" tu2="31" tv2="0" tu3="0" tv3="0" type="FT4"/> + <poly v0="259" v1="260" v2="193" v3="118" n0="485" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="210" v1="213" v2="161" v3="166" n0="486" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="236" v1="235" v2="199" v3="198" n0="487" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="216" v1="250" v2="179" v3="214" n0="488" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="221" v1="223" v2="184" v3="186" n0="489" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="247" v1="248" v2="211" v3="212" n0="490" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="241" v1="236" v2="205" v3="199" n0="491" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="222" v1="220" v2="185" v3="183" n0="492" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="248" v1="245" v2="212" v3="209" n0="493" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="238" v1="237" v2="202" v3="201" n0="494" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="223" v1="225" v2="186" v3="188" n0="495" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="246" v1="249" v2="210" v3="213" n0="496" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="239" v1="238" v2="203" v3="202" n0="497" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="224" v1="222" v2="187" v3="185" n0="498" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="262" v1="73" v2="214" v3="177" n0="499" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="240" v1="239" v2="204" v3="203" n0="500" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="226" v1="224" v2="189" v3="187" n0="501" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="233" v1="240" v2="196" v3="204" n0="502" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="225" v1="227" v2="188" v3="190" n0="503" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="194" v1="193" v2="173" v3="174" n0="504" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="31" tu1="0" tv1="31" tu2="31" tv2="0" tu3="0" tv3="0" type="FT4"/> + <poly v0="234" v1="232" v2="197" v3="195" n0="505" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="228" v1="226" v2="191" v3="189" n0="506" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="143" v1="142" v2="63" v3="255" n0="507" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="227" v1="229" v2="190" v3="192" n0="508" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="230" v1="194" v2="172" v3="173" n0="509" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="31" tu1="0" tv1="31" tu2="31" tv2="0" tu3="0" tv3="0" type="FT4"/> + <poly v0="243" v1="241" v2="207" v3="205" n0="510" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="68" v1="67" v2="254" v3="253" n0="511" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="117" v1="261" v2="176" v3="178" n0="512" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="31" tu1="0" tv1="0" tu2="31" tv2="31" tu3="31" tv3="0" type="FT4"/> + <poly v0="237" v1="242" v2="201" v3="206" n0="513" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="62" v1="61" v2="231" v3="230" n0="514" shading="F" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="271" v1="281" v2="215" v3="251" n0="515" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="218" v1="216" v2="181" v3="179" n0="516" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="242" v1="244" v2="206" v3="208" n0="517" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="229" v1="233" v2="192" v3="196" n0="518" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="217" v1="219" v2="180" v3="182" n0="519" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="245" v1="243" v2="209" v3="207" n0="520" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="232" v1="228" v2="195" v3="191" n0="521" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="261" v1="271" v2="178" v3="215" n0="522" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="220" v1="218" v2="183" v3="181" n0="523" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="244" v1="246" v2="208" v3="210" n0="524" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="235" v1="234" v2="198" v3="197" n0="525" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="251" v1="217" v2="215" v3="180" n0="526" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="219" v1="221" v2="182" v3="184" n0="527" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="249" v1="247" v2="213" v3="211" n0="528" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="262" v1="263" v2="73" v3="70" n0="529" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="263" v1="264" v2="70" v3="68" n0="530" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="264" v1="265" v2="68" v3="67" n0="531" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="272" v1="273" v2="262" v3="263" n0="532" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="273" v1="274" v2="263" v3="264" n0="533" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="274" v1="275" v2="264" v3="265" n0="534" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="275" v1="276" v2="265" v3="266" n0="535" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="276" v1="277" v2="266" v3="267" n0="536" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="277" v1="278" v2="267" v3="268" n0="537" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="278" v1="279" v2="268" v3="269" n0="538" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="279" v1="280" v2="269" v3="270" n0="539" shading="F" r0="253" g0="138" b0="213" type="F4"/> + <poly v0="280" v1="281" v2="270" v3="271" n0="540" shading="F" r0="253" g0="138" b0="213" type="F4"/> + </primitives> +</model> diff --git a/examples/n00bdemo/data/logo.smd b/examples/n00bdemo/data/logo.smd Binary files differnew file mode 100644 index 0000000..9eb1954 --- /dev/null +++ b/examples/n00bdemo/data/logo.smd diff --git a/examples/n00bdemo/data/logo.smx b/examples/n00bdemo/data/logo.smx new file mode 100644 index 0000000..1ed0549 --- /dev/null +++ b/examples/n00bdemo/data/logo.smx @@ -0,0 +1,1169 @@ +<!-- Created using Project Scarlet SMX Export Plug-in for Blender --> +<!-- NOTE: If you plan to use this model as a static mesh, it is recommended that you run this file through smxopt --> +<!-- or smxtool to clean up duplicate/unused normals which are kept for animation purposes. --> +<model version="1"> +<vertices count="633"> +<v x="5.496145" y="-0.286959" z="0.002342"/> +<v x="5.493812" y="-0.243211" z="0.002342"/> +<v x="5.485343" y="-0.179652" z="0.002341"/> +<v x="5.477479" y="-0.142671" z="0.002341"/> +<v x="5.466504" y="-0.104497" z="0.002341"/> +<v x="5.451899" y="-0.066836" z="0.002341"/> +<v x="5.433146" y="-0.031392" z="0.002341"/> +<v x="5.409726" y="0.000127" z="0.002341"/> +<v x="5.386417" y="0.020795" z="0.002341"/> +<v x="5.345026" y="0.047971" z="0.002341"/> +<v x="5.283004" y="0.075146" z="0.002341"/> +<v x="5.138959" y="0.095815" z="0.002341"/> +<v x="4.478510" y="0.095050" z="0.002341"/> +<v x="4.366314" y="0.075146" z="0.002341"/> +<v x="4.297593" y="0.046823" z="0.002341"/> +<v x="4.265501" y="0.026058" z="0.002341"/> +<v x="4.236989" y="0.000127" z="0.002341"/> +<v x="4.218322" y="-0.025887" z="0.002341"/> +<v x="4.206569" y="-0.046076" z="0.002341"/> +<v x="4.193779" y="-0.071995" z="0.002341"/> +<v x="4.180988" y="-0.103627" z="0.002341"/> +<v x="4.169235" y="-0.140957" z="0.002341"/> +<v x="4.159556" y="-0.183966" z="0.002341"/> +<v x="4.152988" y="-0.232639" z="0.002342"/> +<v x="4.150568" y="-0.286959" z="0.002342"/> +<v x="4.150568" y="-0.941026" z="0.002342"/> +<v x="4.154398" y="-0.993345" z="0.002342"/> +<v x="4.161255" y="-1.050424" z="0.002342"/> +<v x="4.169034" y="-1.087923" z="0.002342"/> +<v x="4.179892" y="-1.126492" z="0.002342"/> +<v x="4.194340" y="-1.164358" z="0.002342"/> +<v x="4.212892" y="-1.199749" z="0.002342"/> +<v x="4.236060" y="-1.230891" z="0.002342"/> +<v x="4.277395" y="-1.264250" z="0.002342"/> +<v x="4.329397" y="-1.292301" z="0.002342"/> +<v x="4.402586" y="-1.315804" z="0.002342"/> +<v x="4.497185" y="-1.325660" z="0.002342"/> +<v x="5.191784" y="-1.323126" z="0.002342"/> +<v x="5.250123" y="-1.313930" z="0.002342"/> +<v x="5.318498" y="-1.293473" z="0.002342"/> +<v x="5.383974" y="-1.257252" z="0.002342"/> +<v x="5.411583" y="-1.231822" z="0.002342"/> +<v x="5.429849" y="-1.206236" z="0.002342"/> +<v x="5.453864" y="-1.160286" z="0.002342"/> +<v x="5.466379" y="-1.128476" z="0.002342"/> +<v x="5.477880" y="-1.090700" z="0.002342"/> +<v x="5.487350" y="-1.046904" z="0.002342"/> +<v x="5.494488" y="-0.980230" z="0.002342"/> +<v x="5.496145" y="-0.941026" z="0.002342"/> +<v x="4.595686" y="-0.292529" z="0.002342"/> +<v x="5.052885" y="-0.292529" z="0.002342"/> +<v x="5.052885" y="-0.941026" z="0.002342"/> +<v x="4.595686" y="-0.941026" z="0.002342"/> +<v x="-5.365467" y="0.557635" z="0.002341"/> +<v x="-5.177874" y="0.557635" z="0.002341"/> +<v x="-5.177874" y="0.490274" z="0.002341"/> +<v x="-5.365467" y="0.490274" z="0.002341"/> +<v x="-5.365467" y="0.737752" z="0.002341"/> +<v x="-5.177874" y="0.737752" z="0.002341"/> +<v x="-5.177874" y="0.667551" z="0.002341"/> +<v x="-5.365467" y="0.667551" z="0.002341"/> +<v x="-5.533913" y="0.885950" z="0.002341"/> +<v x="-5.533913" y="0.343491" z="0.002341"/> +<v x="-5.123617" y="0.343491" z="0.002341"/> +<v x="-5.110021" y="0.344180" z="0.002341"/> +<v x="-5.090460" y="0.346682" z="0.002341"/> +<v x="-5.067665" y="0.352247" z="0.002341"/> +<v x="-5.046061" y="0.362100" z="0.002341"/> +<v x="-5.036334" y="0.369790" z="0.002341"/> +<v x="-5.031267" y="0.376055" z="0.002341"/> +<v x="-5.023612" y="0.388829" z="0.002341"/> +<v x="-5.015958" y="0.408370" z="0.002341"/> +<v x="-5.010891" y="0.434931" z="0.002341"/> +<v x="-5.010137" y="0.450924" z="0.002341"/> +<v x="-5.010376" y="0.532866" z="0.002341"/> +<v x="-5.011245" y="0.541378" z="0.002341"/> +<v x="-5.013178" y="0.551805" z="0.002341"/> +<v x="-5.016601" y="0.562561" z="0.002341"/> +<v x="-5.021607" y="0.571502" z="0.002341"/> +<v x="-5.026805" y="0.577981" z="0.002341"/> +<v x="-5.035406" y="0.586972" z="0.002341"/> +<v x="-5.045447" y="0.595779" z="0.002341"/> +<v x="-5.055883" y="0.604089" z="0.002341"/> +<v x="-5.046260" y="0.608591" z="0.002341"/> +<v x="-5.037193" y="0.614119" z="0.002341"/> +<v x="-5.027922" y="0.621740" z="0.002341"/> +<v x="-5.020422" y="0.631387" z="0.002341"/> +<v x="-5.018200" y="0.636193" z="0.002341"/> +<v x="-5.015279" y="0.644950" z="0.002341"/> +<v x="-5.012358" y="0.658387" z="0.002341"/> +<v x="-5.010425" y="0.676709" z="0.002341"/> +<v x="-5.010137" y="0.687766" z="0.002341"/> +<v x="-5.010164" y="0.765818" z="0.002341"/> +<v x="-5.010883" y="0.778637" z="0.002341"/> +<v x="-5.013594" y="0.799709" z="0.002341"/> +<v x="-5.019624" y="0.824272" z="0.002341"/> +<v x="-5.030302" y="0.847559" z="0.002341"/> +<v x="-5.038622" y="0.858040" z="0.002341"/> +<v x="-5.045314" y="0.863439" z="0.002341"/> +<v x="-5.058942" y="0.871593" z="0.002341"/> +<v x="-5.079762" y="0.879748" z="0.002341"/> +<v x="-5.125034" y="0.885950" z="0.002341"/> +<v x="-5.533910" y="-1.069089" z="0.002342"/> +<v x="-5.533910" y="0.110112" z="0.002341"/> +<v x="-5.137696" y="0.110112" z="0.002341"/> +<v x="-5.146941" y="0.046016" z="0.002341"/> +<v x="-5.156675" y="-0.038208" z="0.002341"/> +<v x="-5.164413" y="-0.136209" z="0.002341"/> +<v x="-5.167671" y="-0.241639" z="0.002342"/> +<v x="-5.163963" y="-0.348148" z="0.002342"/> +<v x="-5.150804" y="-0.449385" z="0.002342"/> +<v x="-5.125708" y="-0.539002" z="0.002341"/> +<v x="-5.086191" y="-0.610648" z="0.002342"/> +<v x="-5.029768" y="-0.657974" z="0.002342"/> +<v x="-4.953952" y="-0.674630" z="0.002342"/> +<v x="-4.879279" y="-0.656875" z="0.002342"/> +<v x="-4.824577" y="-0.609269" z="0.002342"/> +<v x="-4.787242" y="-0.537945" z="0.002342"/> +<v x="-4.764671" y="-0.449038" z="0.002342"/> +<v x="-4.754259" y="-0.348682" z="0.002342"/> +<v x="-4.753402" y="-0.243013" z="0.002342"/> +<v x="-4.759498" y="-0.138164" z="0.002341"/> +<v x="-4.769941" y="-0.040271" z="0.002341"/> +<v x="-4.782130" y="0.044533" z="0.002341"/> +<v x="-4.793460" y="0.110112" z="0.002341"/> +<v x="-4.785994" y="0.110112" z="0.002341"/> +<v x="-4.400514" y="0.110112" z="0.002341"/> +<v x="-4.399508" y="0.046480" z="0.002341"/> +<v x="-4.397512" y="-0.036549" z="0.002341"/> +<v x="-4.396059" y="-0.134489" z="0.002341"/> +<v x="-4.396680" y="-0.242854" z="0.002342"/> +<v x="-4.400908" y="-0.357159" z="0.002342"/> +<v x="-4.410274" y="-0.472917" z="0.002342"/> +<v x="-4.426312" y="-0.585642" z="0.002341"/> +<v x="-4.450553" y="-0.690849" z="0.002342"/> +<v x="-4.484529" y="-0.784051" z="0.002342"/> +<v x="-4.529774" y="-0.860763" z="0.002342"/> +<v x="-4.578887" y="-0.911448" z="0.002342"/> +<v x="-4.637369" y="-0.950145" z="0.002342"/> +<v x="-4.703045" y="-0.977701" z="0.002342"/> +<v x="-4.773746" y="-0.994964" z="0.002342"/> +<v x="-4.847299" y="-1.002780" z="0.002342"/> +<v x="-4.921533" y="-1.001998" z="0.002342"/> +<v x="-4.994277" y="-0.993464" z="0.002342"/> +<v x="-5.063357" y="-0.978026" z="0.002342"/> +<v x="-5.126605" y="-0.956530" z="0.002342"/> +<v x="-5.181846" y="-0.929826" z="0.002342"/> +<v x="-5.181846" y="-1.069089" z="0.002342"/> +<v x="-4.782825" y="0.885950" z="0.002341"/> +<v x="-4.782825" y="0.689883" z="0.002341"/> +<v x="-4.990634" y="0.343491" z="0.002341"/> +<v x="-4.795236" y="0.343491" z="0.002341"/> +<v x="-4.695589" y="0.547711" z="0.002341"/> +<v x="-4.595585" y="0.343491" z="0.002341"/> +<v x="-4.399478" y="0.343491" z="0.002341"/> +<v x="-4.608706" y="0.689883" z="0.002341"/> +<v x="-4.608706" y="0.885950" z="0.002341"/> +<v x="-3.773746" y="-1.306425" z="0.002342"/> +<v x="-3.966209" y="-1.261811" z="0.002342"/> +<v x="-4.116809" y="-1.149730" z="0.002342"/> +<v x="-4.224799" y="-0.987388" z="0.002342"/> +<v x="-4.289428" y="-0.791987" z="0.002342"/> +<v x="-4.309949" y="-0.580731" z="0.002342"/> +<v x="-4.285614" y="-0.370824" z="0.002342"/> +<v x="-4.215673" y="-0.179468" z="0.002341"/> +<v x="-4.099378" y="-0.023868" z="0.002341"/> +<v x="-3.935981" y="0.078773" z="0.002341"/> +<v x="-3.724733" y="0.111250" z="0.002341"/> +<v x="-3.541530" y="0.065218" z="0.002341"/> +<v x="-3.402979" y="-0.047053" z="0.002341"/> +<v x="-3.308011" y="-0.208701" z="0.002342"/> +<v x="-3.255557" y="-0.402864" z="0.002342"/> +<v x="-3.244547" y="-0.612681" z="0.002342"/> +<v x="-3.273913" y="-0.821291" z="0.002342"/> +<v x="-3.342585" y="-1.011831" z="0.002342"/> +<v x="-3.449494" y="-1.167441" z="0.002342"/> +<v x="-3.593571" y="-1.271260" z="0.002342"/> +<v x="-3.868658" y="-0.914479" z="0.002342"/> +<v x="-3.884057" y="-0.838087" z="0.002342"/> +<v x="-3.883464" y="-0.763546" z="0.002342"/> +<v x="-3.868676" y="-0.693251" z="0.002342"/> +<v x="-3.841487" y="-0.629597" z="0.002342"/> +<v x="-3.803694" y="-0.574979" z="0.002342"/> +<v x="-3.757092" y="-0.531791" z="0.002342"/> +<v x="-3.703475" y="-0.502428" z="0.002342"/> +<v x="-3.644640" y="-0.489285" z="0.002342"/> +<v x="-3.582382" y="-0.494757" z="0.002342"/> +<v x="-3.518495" y="-0.521237" z="0.002342"/> +<v x="-3.520577" y="-0.496904" z="0.002342"/> +<v x="-3.532181" y="-0.437211" z="0.002342"/> +<v x="-3.561347" y="-0.362122" z="0.002342"/> +<v x="-3.616113" y="-0.291601" z="0.002342"/> +<v x="-3.704519" y="-0.245610" z="0.002342"/> +<v x="-3.808697" y="-0.236316" z="0.002342"/> +<v x="-3.892499" y="-0.261495" z="0.002342"/> +<v x="-3.956253" y="-0.314569" z="0.002342"/> +<v x="-4.000286" y="-0.388958" z="0.002342"/> +<v x="-4.024925" y="-0.478083" z="0.002342"/> +<v x="-4.030497" y="-0.575365" z="0.002342"/> +<v x="-4.017329" y="-0.674225" z="0.002342"/> +<v x="-3.985748" y="-0.768084" z="0.002342"/> +<v x="-3.936082" y="-0.850362" z="0.002342"/> +<v x="-4.079966" y="0.885950" z="0.002341"/> +<v x="-4.079966" y="0.343491" z="0.002341"/> +<v x="-3.900527" y="0.343491" z="0.002341"/> +<v x="-3.900527" y="0.737752" z="0.002341"/> +<v x="-3.639882" y="0.737752" z="0.002341"/> +<v x="-3.639882" y="0.885950" z="0.002341"/> +<v x="-3.418597" y="0.557635" z="0.002341"/> +<v x="-3.233484" y="0.557635" z="0.002341"/> +<v x="-3.233484" y="0.490274" z="0.002341"/> +<v x="-3.418597" y="0.490274" z="0.002341"/> +<v x="-3.586784" y="0.449867" z="0.002341"/> +<v x="-3.584977" y="0.435275" z="0.002341"/> +<v x="-3.580072" y="0.415322" z="0.002341"/> +<v x="-3.570520" y="0.393583" z="0.002341"/> +<v x="-3.554771" y="0.373629" z="0.002341"/> +<v x="-3.546269" y="0.367119" z="0.002341"/> +<v x="-3.531544" y="0.358560" z="0.002341"/> +<v x="-3.510010" y="0.350001" z="0.002341"/> +<v x="-3.460432" y="0.343491" z="0.002341"/> +<v x="-3.179097" y="0.343732" z="0.002341"/> +<v x="-3.152853" y="0.347258" z="0.002341"/> +<v x="-3.129703" y="0.353828" z="0.002341"/> +<v x="-3.106580" y="0.365462" z="0.002341"/> +<v x="-3.095342" y="0.374515" z="0.002341"/> +<v x="-3.086978" y="0.384861" z="0.002341"/> +<v x="-3.080111" y="0.395034" z="0.002341"/> +<v x="-3.075335" y="0.404184" z="0.002341"/> +<v x="-3.070946" y="0.414853" z="0.002341"/> +<v x="-3.067332" y="0.426996" z="0.002341"/> +<v x="-3.064880" y="0.440568" z="0.002341"/> +<v x="-3.063976" y="0.455525" z="0.002341"/> +<v x="-3.063976" y="0.463703" z="0.002341"/> +<v x="-3.063976" y="0.885950" z="0.002341"/> +<v x="-3.233484" y="0.885950" z="0.002341"/> +<v x="-3.233484" y="0.667551" z="0.002341"/> +<v x="-3.418597" y="0.667551" z="0.002341"/> +<v x="-3.418597" y="0.885950" z="0.002341"/> +<v x="-3.587042" y="0.885950" z="0.002341"/> +<v x="-3.587042" y="0.486515" z="0.002341"/> +<v x="-3.587042" y="0.463703" z="0.002341"/> +<v x="-2.579331" y="-1.306583" z="0.002342"/> +<v x="-2.767917" y="-1.268231" z="0.002342"/> +<v x="-2.916000" y="-1.161373" z="0.002342"/> +<v x="-3.022903" y="-1.003080" z="0.002342"/> +<v x="-3.087949" y="-0.810422" z="0.002342"/> +<v x="-3.110461" y="-0.600469" z="0.002342"/> +<v x="-3.089762" y="-0.390293" z="0.002342"/> +<v x="-3.025176" y="-0.196963" z="0.002341"/> +<v x="-2.916025" y="-0.037551" z="0.002341"/> +<v x="-2.761633" y="0.070874" z="0.002341"/> +<v x="-2.561322" y="0.111240" z="0.002341"/> +<v x="-2.373242" y="0.072174" z="0.002341"/> +<v x="-2.230948" y="-0.034953" z="0.002341"/> +<v x="-2.133094" y="-0.193176" z="0.002341"/> +<v x="-2.078332" y="-0.385534" z="0.002342"/> +<v x="-2.065318" y="-0.595063" z="0.002342"/> +<v x="-2.092704" y="-0.804801" z="0.002342"/> +<v x="-2.159144" y="-0.997785" z="0.002342"/> +<v x="-2.263293" y="-1.157051" z="0.002342"/> +<v x="-2.403804" y="-1.265639" z="0.002342"/> +<v x="-2.577281" y="-0.960597" z="0.002342"/> +<v x="-2.500685" y="-0.941209" z="0.002342"/> +<v x="-2.438692" y="-0.893365" z="0.002342"/> +<v x="-2.391907" y="-0.823395" z="0.002342"/> +<v x="-2.360936" y="-0.737625" z="0.002342"/> +<v x="-2.346384" y="-0.642385" z="0.002342"/> +<v x="-2.348857" y="-0.544003" z="0.002342"/> +<v x="-2.368960" y="-0.448806" z="0.002342"/> +<v x="-2.407300" y="-0.363123" z="0.002342"/> +<v x="-2.464480" y="-0.293281" z="0.002342"/> +<v x="-2.541109" y="-0.245610" z="0.002342"/> +<v x="-2.541257" y="-0.245575" z="0.002342"/> +<v x="-2.541403" y="-0.245543" z="0.002342"/> +<v x="-2.541547" y="-0.245512" z="0.002342"/> +<v x="-2.541689" y="-0.245481" z="0.002342"/> +<v x="-2.541831" y="-0.245452" z="0.002342"/> +<v x="-2.541973" y="-0.245422" z="0.002342"/> +<v x="-2.542116" y="-0.245392" z="0.002342"/> +<v x="-2.542260" y="-0.245360" z="0.002342"/> +<v x="-2.542405" y="-0.245328" z="0.002342"/> +<v x="-2.542554" y="-0.245293" z="0.002342"/> +<v x="-2.505995" y="-0.304722" z="0.002342"/> +<v x="-2.491492" y="-0.371892" z="0.002342"/> +<v x="-2.496405" y="-0.442567" z="0.002342"/> +<v x="-2.518094" y="-0.512516" z="0.002342"/> +<v x="-2.553919" y="-0.577504" z="0.002342"/> +<v x="-2.601239" y="-0.633298" z="0.002342"/> +<v x="-2.657414" y="-0.675665" z="0.002342"/> +<v x="-2.719805" y="-0.700370" z="0.002342"/> +<v x="-2.785770" y="-0.703181" z="0.002342"/> +<v x="-2.852669" y="-0.679864" z="0.002342"/> +<v x="-2.814222" y="-0.780814" z="0.002342"/> +<v x="-2.761951" y="-0.864976" z="0.002342"/> +<v x="-2.683907" y="-0.934243" z="0.002342"/> +<v x="-2.577281" y="-0.960597" z="0.002342"/> +<v x="-2.577281" y="-0.960597" z="0.002342"/> +<v x="-2.577281" y="-0.960597" z="0.002342"/> +<v x="-2.577281" y="-0.960597" z="0.002342"/> +<v x="-2.577281" y="-0.960597" z="0.002342"/> +<v x="-2.577281" y="-0.960597" z="0.002342"/> +<v x="-2.577281" y="-0.960597" z="0.002342"/> +<v x="-2.577281" y="-0.960597" z="0.002342"/> +<v x="-2.577281" y="-0.960597" z="0.002342"/> +<v x="-2.577281" y="-0.960597" z="0.002342"/> +<v x="-2.685240" y="0.706545" z="0.002341"/> +<v x="-2.683157" y="0.691835" z="0.002341"/> +<v x="-2.681401" y="0.680352" z="0.002341"/> +<v x="-2.679295" y="0.667609" z="0.002341"/> +<v x="-2.677191" y="0.656058" z="0.002341"/> +<v x="-2.675666" y="0.648140" z="0.002341"/> +<v x="-2.673630" y="0.637925" z="0.002341"/> +<v x="-2.671253" y="0.626535" z="0.002341"/> +<v x="-2.604741" y="0.343491" z="0.002341"/> +<v x="-2.369981" y="0.343491" z="0.002341"/> +<v x="-2.369981" y="0.885950" z="0.002341"/> +<v x="-2.531333" y="0.885950" z="0.002341"/> +<v x="-2.531314" y="0.614848" z="0.002341"/> +<v x="-2.531175" y="0.606510" z="0.002341"/> +<v x="-2.530797" y="0.594172" z="0.002341"/> +<v x="-2.530063" y="0.579110" z="0.002341"/> +<v x="-2.528852" y="0.562602" z="0.002341"/> +<v x="-2.527683" y="0.550827" z="0.002341"/> +<v x="-2.526248" y="0.538176" z="0.002341"/> +<v x="-2.524267" y="0.522852" z="0.002341"/> +<v x="-2.521760" y="0.506234" z="0.002341"/> +<v x="-2.527078" y="0.506234" z="0.002341"/> +<v x="-2.618572" y="0.885950" z="0.002341"/> +<v x="-2.751200" y="0.885950" z="0.002341"/> +<v x="-2.843401" y="0.506234" z="0.002341"/> +<v x="-2.848011" y="0.506234" z="0.002341"/> +<v x="-2.846948" y="0.513049" z="0.002341"/> +<v x="-2.845396" y="0.523784" z="0.002341"/> +<v x="-2.843545" y="0.537921" z="0.002341"/> +<v x="-2.841720" y="0.554133" z="0.002341"/> +<v x="-2.840660" y="0.565733" z="0.002341"/> +<v x="-2.840045" y="0.574209" z="0.002341"/> +<v x="-2.839310" y="0.586649" z="0.002341"/> +<v x="-2.838694" y="0.601676" z="0.002341"/> +<v x="-2.838436" y="0.617911" z="0.002341"/> +<v x="-2.838436" y="0.885950" z="0.002341"/> +<v x="-2.999789" y="0.885950" z="0.002341"/> +<v x="-2.999789" y="0.343491" z="0.002341"/> +<v x="-2.765030" y="0.343491" z="0.002341"/> +<v x="-2.699779" y="0.620751" z="0.002341"/> +<v x="-2.695626" y="0.640193" z="0.002341"/> +<v x="-2.692687" y="0.656915" z="0.002341"/> +<v x="-2.690426" y="0.670695" z="0.002341"/> +<v x="-2.688569" y="0.682848" z="0.002341"/> +<v x="-2.686396" y="0.698005" z="0.002341"/> +<v x="-2.304021" y="0.885950" z="0.002341"/> +<v x="-2.304021" y="0.343491" z="0.002341"/> +<v x="-1.851525" y="0.343491" z="0.002341"/> +<v x="-1.851525" y="0.490274" z="0.002341"/> +<v x="-2.134159" y="0.490274" z="0.002341"/> +<v x="-2.134159" y="0.552678" z="0.002341"/> +<v x="-1.852943" y="0.552678" z="0.002341"/> +<v x="-1.852943" y="0.675348" z="0.002341"/> +<v x="-2.134159" y="0.675348" z="0.002341"/> +<v x="-2.134159" y="0.737752" z="0.002341"/> +<v x="-1.853652" y="0.737752" z="0.002341"/> +<v x="-1.853652" y="0.885950" z="0.002341"/> +<v x="-1.578007" y="-1.325660" z="0.002342"/> +<v x="-2.019359" y="-1.247860" z="0.002342"/> +<v x="-1.967458" y="0.089671" z="0.002341"/> +<v x="-1.638496" y="0.095825" z="0.002341"/> +<v x="-1.633936" y="-0.011677" z="0.002341"/> +<v x="-1.601402" y="0.017691" z="0.002341"/> +<v x="-1.555563" y="0.044319" z="0.002341"/> +<v x="-1.485411" y="0.069946" z="0.002341"/> +<v x="-1.387500" y="0.087850" z="0.002341"/> +<v x="-1.215881" y="0.076501" z="0.002341"/> +<v x="-1.083240" y="0.011004" z="0.002341"/> +<v x="-0.988491" y="-0.095813" z="0.002341"/> +<v x="-0.930552" y="-0.231125" z="0.002342"/> +<v x="-0.908337" y="-0.382104" z="0.002342"/> +<v x="-0.920761" y="-0.535923" z="0.002341"/> +<v x="-0.966741" y="-0.679756" z="0.002342"/> +<v x="-1.045193" y="-0.800776" z="0.002342"/> +<v x="-1.155031" y="-0.886155" z="0.002342"/> +<v x="-1.295172" y="-0.923068" z="0.002342"/> +<v x="-1.401521" y="-0.917103" z="0.002342"/> +<v x="-1.486264" y="-0.893720" z="0.002342"/> +<v x="-1.548235" y="-0.863685" z="0.002342"/> +<v x="-1.599210" y="-0.826736" z="0.002342"/> +<v x="-1.408930" y="-0.623120" z="0.002342"/> +<v x="-1.339517" y="-0.618292" z="0.002342"/> +<v x="-1.282006" y="-0.591144" z="0.002342"/> +<v x="-1.237346" y="-0.546733" z="0.002342"/> +<v x="-1.206488" y="-0.490116" z="0.002342"/> +<v x="-1.190379" y="-0.426348" z="0.002342"/> +<v x="-1.189971" y="-0.360486" z="0.002342"/> +<v x="-1.206212" y="-0.297587" z="0.002342"/> +<v x="-1.240051" y="-0.242707" z="0.002342"/> +<v x="-1.292438" y="-0.200902" z="0.002342"/> +<v x="-1.364323" y="-0.177230" z="0.002341"/> +<v x="-1.436222" y="-0.178984" z="0.002341"/> +<v x="-1.496521" y="-0.204945" z="0.002342"/> +<v x="-1.543951" y="-0.249605" z="0.002342"/> +<v x="-1.577241" y="-0.307456" z="0.002342"/> +<v x="-1.595122" y="-0.372989" z="0.002342"/> +<v x="-1.596323" y="-0.440697" z="0.002342"/> +<v x="-1.579575" y="-0.505072" z="0.002342"/> +<v x="-1.543607" y="-0.560606" z="0.002342"/> +<v x="-1.487148" y="-0.601792" z="0.002342"/> +<v x="-1.264184" y="0.747733" z="0.002341"/> +<v x="-1.266051" y="0.767823" z="0.002341"/> +<v x="-1.271118" y="0.794942" z="0.002341"/> +<v x="-1.280984" y="0.823880" z="0.002341"/> +<v x="-1.297251" y="0.849430" z="0.002341"/> +<v x="-1.306156" y="0.857318" z="0.002341"/> +<v x="-1.321986" y="0.867690" z="0.002341"/> +<v x="-1.345732" y="0.878062" z="0.002341"/> +<v x="-1.377393" y="0.884927" z="0.002341"/> +<v x="-1.401225" y="0.885950" z="0.002341"/> +<v x="-1.661093" y="0.885950" z="0.002341"/> +<v x="-1.676240" y="0.884964" z="0.002341"/> +<v x="-1.698240" y="0.881385" z="0.002341"/> +<v x="-1.724240" y="0.873424" z="0.002341"/> +<v x="-1.749507" y="0.859327" z="0.002341"/> +<v x="-1.761311" y="0.848325" z="0.002341"/> +<v x="-1.767511" y="0.839504" z="0.002341"/> +<v x="-1.776877" y="0.821911" z="0.002341"/> +<v x="-1.786243" y="0.795596" z="0.002341"/> +<v x="-1.792443" y="0.760609" z="0.002341"/> +<v x="-1.793367" y="0.735137" z="0.002341"/> +<v x="-1.793367" y="0.490274" z="0.002341"/> +<v x="-1.792375" y="0.473584" z="0.002341"/> +<v x="-1.789791" y="0.452552" z="0.002341"/> +<v x="-1.786320" y="0.432914" z="0.002341"/> +<v x="-1.776663" y="0.403550" z="0.002341"/> +<v x="-1.767111" y="0.388578" z="0.002341"/> +<v x="-1.756779" y="0.374945" z="0.002341"/> +<v x="-1.744697" y="0.366239" z="0.002341"/> +<v x="-1.724205" y="0.355848" z="0.002341"/> +<v x="-1.695015" y="0.347142" z="0.002341"/> +<v x="-1.656838" y="0.343491" z="0.002341"/> +<v x="-1.269946" y="0.343491" z="0.002341"/> +<v x="-1.269946" y="0.490274" z="0.002341"/> +<v x="-1.623504" y="0.490274" z="0.002341"/> +<v x="-1.623504" y="0.737040" z="0.002341"/> +<v x="-1.430945" y="0.737040" z="0.002341"/> +<v x="-1.430945" y="0.559060" z="0.002341"/> +<v x="-1.263918" y="0.559060" z="0.002341"/> +<v x="-1.263918" y="0.736444" z="0.002341"/> +<v x="-0.682338" y="0.774272" z="0.002341"/> +<v x="-0.684403" y="0.794522" z="0.002341"/> +<v x="-0.689308" y="0.814475" z="0.002341"/> +<v x="-0.698860" y="0.836214" z="0.002341"/> +<v x="-0.714608" y="0.856168" z="0.002341"/> +<v x="-0.729452" y="0.866651" z="0.002341"/> +<v x="-0.747469" y="0.875467" z="0.002341"/> +<v x="-0.772074" y="0.882853" z="0.002341"/> +<v x="-0.802909" y="0.885950" z="0.002341"/> +<v x="-1.084125" y="0.885950" z="0.002341"/> +<v x="-1.106162" y="0.884044" z="0.002341"/> +<v x="-1.127861" y="0.879517" z="0.002341"/> +<v x="-1.151485" y="0.870701" z="0.002341"/> +<v x="-1.173134" y="0.856168" z="0.002341"/> +<v x="-1.180105" y="0.848261" z="0.002341"/> +<v x="-1.189270" y="0.834629" z="0.002341"/> +<v x="-1.198435" y="0.814787" z="0.002341"/> +<v x="-1.204501" y="0.789142" z="0.002341"/> +<v x="-1.205405" y="0.766087" z="0.002341"/> +<v x="-1.205405" y="0.743256" z="0.002341"/> +<v x="-1.205405" y="0.343491" z="0.002341"/> +<v x="-1.036251" y="0.343491" z="0.002341"/> +<v x="-1.036251" y="0.737752" z="0.002341"/> +<v x="-0.851138" y="0.737752" z="0.002341"/> +<v x="-0.851138" y="0.343491" z="0.002341"/> +<v x="-0.682338" y="0.343491" z="0.002341"/> +<v x="-0.682338" y="0.743256" z="0.002341"/> +<v x="-0.682338" y="0.766087" z="0.002341"/> +<v x="-0.441551" y="0.885950" z="0.002341"/> +<v x="-0.441551" y="0.689883" z="0.002341"/> +<v x="-0.649359" y="0.343491" z="0.002341"/> +<v x="-0.453962" y="0.343491" z="0.002341"/> +<v x="-0.354313" y="0.547711" z="0.002341"/> +<v x="-0.254311" y="0.343491" z="0.002341"/> +<v x="-0.058205" y="0.343491" z="0.002341"/> +<v x="-0.267431" y="0.689883" z="0.002341"/> +<v x="-0.267431" y="0.885950" z="0.002341"/> +<v x="-0.138001" y="-0.292529" z="0.002342"/> +<v x="0.368451" y="-0.292529" z="0.002342"/> +<v x="0.368451" y="-0.941026" z="0.002342"/> +<v x="-0.138001" y="-0.941026" z="0.002342"/> +<v x="-0.581262" y="0.095815" z="0.002341"/> +<v x="-0.581262" y="-1.325660" z="0.002342"/> +<v x="0.475315" y="-1.325660" z="0.002342"/> +<v x="0.539159" y="-1.319179" z="0.002342"/> +<v x="0.601971" y="-1.303786" z="0.002342"/> +<v x="0.670268" y="-1.273810" z="0.002342"/> +<v x="0.702934" y="-1.251835" z="0.002342"/> +<v x="0.732723" y="-1.224391" z="0.002342"/> +<v x="0.752795" y="-1.197826" z="0.002342"/> +<v x="0.765433" y="-1.177477" z="0.002342"/> +<v x="0.779186" y="-1.151576" z="0.002342"/> +<v x="0.792940" y="-1.120239" z="0.002342"/> +<v x="0.805578" y="-1.083585" z="0.002342"/> +<v x="0.815985" y="-1.041730" z="0.002342"/> +<v x="0.823048" y="-0.994792" z="0.002342"/> +<v x="0.825650" y="-0.942886" z="0.002342"/> +<v x="0.825650" y="-0.296249" z="0.002342"/> +<v x="0.823391" y="-0.259309" z="0.002342"/> +<v x="0.819821" y="-0.221864" z="0.002342"/> +<v x="0.814266" y="-0.187200" z="0.002341"/> +<v x="0.805979" y="-0.149553" z="0.002341"/> +<v x="0.794413" y="-0.110647" z="0.002341"/> +<v x="0.779022" y="-0.072203" z="0.002341"/> +<v x="0.759261" y="-0.035944" z="0.002341"/> +<v x="0.723690" y="0.006745" z="0.002341"/> +<v x="0.691166" y="0.031398" z="0.002341"/> +<v x="0.637231" y="0.060823" z="0.002341"/> +<v x="0.562109" y="0.085477" z="0.002341"/> +<v x="0.466023" y="0.095815" z="0.002341"/> +<v x="0.137547" y="0.734912" z="0.002341"/> +<v x="0.319822" y="0.734912" z="0.002341"/> +<v x="0.319822" y="0.667551" z="0.002341"/> +<v x="0.137547" y="0.667551" z="0.002341"/> +<v x="-0.026644" y="0.750872" z="0.002341"/> +<v x="-0.026644" y="0.474324" z="0.002341"/> +<v x="-0.025771" y="0.458743" z="0.002341"/> +<v x="-0.024806" y="0.447004" z="0.002341"/> +<v x="-0.023053" y="0.434527" z="0.002341"/> +<v x="-0.020439" y="0.421177" z="0.002341"/> +<v x="-0.016791" y="0.407648" z="0.002341"/> +<v x="-0.011937" y="0.394635" z="0.002341"/> +<v x="-0.005704" y="0.382830" z="0.002341"/> +<v x="0.005681" y="0.369865" z="0.002341"/> +<v x="0.016924" y="0.362565" z="0.002341"/> +<v x="0.036474" y="0.353852" z="0.002341"/> +<v x="0.064994" y="0.346552" z="0.002341"/> +<v x="0.103148" y="0.343491" z="0.002341"/> +<v x="0.458478" y="0.343491" z="0.002341"/> +<v x="0.458478" y="0.494529" z="0.002341"/> +<v x="0.137547" y="0.494529" z="0.002341"/> +<v x="0.137547" y="0.561543" z="0.002341"/> +<v x="0.342873" y="0.561543" z="0.002341"/> +<v x="0.374454" y="0.562995" z="0.002341"/> +<v x="0.403691" y="0.566444" z="0.002341"/> +<v x="0.432793" y="0.573159" z="0.002341"/> +<v x="0.448292" y="0.580909" z="0.002341"/> +<v x="0.460832" y="0.590818" z="0.002341"/> +<v x="0.468586" y="0.603556" z="0.002341"/> +<v x="0.472627" y="0.612799" z="0.002341"/> +<v x="0.476341" y="0.624122" z="0.002341"/> +<v x="0.479399" y="0.637648" z="0.002341"/> +<v x="0.481474" y="0.653502" z="0.002341"/> +<v x="0.482239" y="0.671806" z="0.002341"/> +<v x="0.482239" y="0.739337" z="0.002341"/> +<v x="0.482239" y="0.759737" z="0.002341"/> +<v x="0.481377" y="0.774507" z="0.002341"/> +<v x="0.478249" y="0.795853" z="0.002341"/> +<v x="0.471291" y="0.820900" z="0.002341"/> +<v x="0.458972" y="0.844935" z="0.002341"/> +<v x="0.449373" y="0.855963" z="0.002341"/> +<v x="0.434969" y="0.865959" z="0.002341"/> +<v x="0.415547" y="0.875091" z="0.002341"/> +<v x="0.384575" y="0.882088" z="0.002341"/> +<v x="0.352447" y="0.885950" z="0.002341"/> +<v x="0.108175" y="0.885729" z="0.002341"/> +<v x="0.086044" y="0.884180" z="0.002341"/> +<v x="0.057002" y="0.879977" z="0.002341"/> +<v x="0.027467" y="0.871791" z="0.002341"/> +<v x="0.003000" y="0.857431" z="0.002341"/> +<v x="-0.006198" y="0.843806" z="0.002341"/> +<v x="-0.011395" y="0.834363" z="0.002341"/> +<v x="-0.015909" y="0.822991" z="0.002341"/> +<v x="-0.020056" y="0.809096" z="0.002341"/> +<v x="-0.023472" y="0.792538" z="0.002341"/> +<v x="-0.025790" y="0.773177" z="0.002341"/> +<v x="0.670897" y="0.635286" z="0.002341"/> +<v x="0.835086" y="0.635286" z="0.002341"/> +<v x="0.835086" y="0.512615" z="0.002341"/> +<v x="0.835086" y="0.885950" z="0.002341"/> +<v x="0.835086" y="0.764694" z="0.002341"/> +<v x="0.514509" y="0.764694" z="0.002341"/> +<v x="0.514509" y="0.595580" z="0.002341"/> +<v x="0.851754" y="0.343491" z="0.002341"/> +<v x="1.000695" y="0.343491" z="0.002341"/> +<v x="1.000695" y="0.633871" z="0.002341"/> +<v x="1.060981" y="0.633871" z="0.002341"/> +<v x="1.060981" y="0.764694" z="0.002341"/> +<v x="1.000695" y="0.764694" z="0.002341"/> +<v x="1.000695" y="0.885950" z="0.002341"/> +<v x="0.987342" y="0.095815" z="0.002341"/> +<v x="0.987342" y="-1.325660" z="0.002342"/> +<v x="2.173086" y="-1.325660" z="0.002342"/> +<v x="2.173086" y="-0.941026" z="0.002342"/> +<v x="1.432460" y="-0.941026" z="0.002342"/> +<v x="1.432460" y="-0.777512" z="0.002342"/> +<v x="2.169370" y="-0.777512" z="0.002342"/> +<v x="2.169370" y="-0.456053" z="0.002342"/> +<v x="1.432460" y="-0.456053" z="0.002342"/> +<v x="1.432460" y="-0.292529" z="0.002342"/> +<v x="2.167511" y="-0.292529" z="0.002342"/> +<v x="2.167511" y="0.095815" z="0.002341"/> +<v x="3.162757" y="-0.374296" z="0.002342"/> +<v x="3.199407" y="-0.583968" z="0.002342"/> +<v x="3.373700" y="-1.325660" z="0.002342"/> +<v x="3.988875" y="-1.325660" z="0.002342"/> +<v x="3.988875" y="0.095815" z="0.002341"/> +<v x="3.566059" y="0.095815" z="0.002341"/> +<v x="3.566111" y="-0.614585" z="0.002342"/> +<v x="3.566475" y="-0.636438" z="0.002342"/> +<v x="3.567464" y="-0.668772" z="0.002342"/> +<v x="3.569389" y="-0.708241" z="0.002342"/> +<v x="3.571295" y="-0.734196" z="0.002342"/> +<v x="3.573338" y="-0.759816" z="0.002342"/> +<v x="3.575627" y="-0.782359" z="0.002342"/> +<v x="3.579388" y="-0.815514" z="0.002342"/> +<v x="3.584577" y="-0.855670" z="0.002342"/> +<v x="3.591149" y="-0.899212" z="0.002342"/> +<v x="3.577209" y="-0.899212" z="0.002342"/> +<v x="3.337460" y="0.095815" z="0.002341"/> +<v x="2.989913" y="0.095815" z="0.002341"/> +<v x="2.748303" y="-0.899212" z="0.002342"/> +<v x="2.736223" y="-0.899212" z="0.002342"/> +<v x="2.739008" y="-0.881354" z="0.002342"/> +<v x="2.743076" y="-0.853228" z="0.002342"/> +<v x="2.747925" y="-0.816183" z="0.002342"/> +<v x="2.752707" y="-0.773697" z="0.002342"/> +<v x="2.754808" y="-0.751499" z="0.002342"/> +<v x="2.756214" y="-0.733714" z="0.002342"/> +<v x="2.758061" y="-0.705858" z="0.002342"/> +<v x="2.759909" y="-0.669416" z="0.002342"/> +<v x="2.761314" y="-0.606557" z="0.002342"/> +<v x="2.761314" y="0.095815" z="0.002341"/> +<v x="2.338497" y="0.095815" z="0.002341"/> +<v x="2.338497" y="-1.325660" z="0.002342"/> +<v x="2.953672" y="-1.325660" z="0.002342"/> +<v x="3.124656" y="-0.599126" z="0.002342"/> +</vertices> +<primitives count="527"> +<poly v0="61" v1="62" v2="56" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="56" v1="62" v2="63" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="64" v1="56" v2="63" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="56" v1="64" v2="65" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="56" v1="65" v2="66" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="56" v1="66" v2="67" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="56" v1="67" v2="68" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="56" v1="68" v2="69" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="56" v1="69" v2="70" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="56" v1="70" v2="71" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="56" v1="71" v2="72" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="56" v1="72" v2="73" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="61" v1="56" v2="53" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="55" v1="56" v2="73" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="569" v1="570" v2="553" v3="552" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="54" v1="75" v2="76" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="54" v1="76" v2="77" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="61" v1="53" v2="60" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="60" v1="53" v2="54" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="60" v1="54" v2="77" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="60" v1="78" v2="79" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="60" v1="79" v2="80" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="60" v1="80" v2="81" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="60" v1="77" v2="78" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="60" v1="81" v2="82" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="60" v1="83" v2="84" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="60" v1="84" v2="85" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="60" v1="85" v2="86" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="87" v1="60" v2="86" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="60" v1="87" v2="88" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="60" v1="88" v2="89" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="59" v1="60" v2="89" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="60" v1="82" v2="83" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="61" v1="60" v2="57" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="75" v1="54" v2="74" v3="55" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="61" v1="57" v2="58" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="92" v1="61" v2="58" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="61" v1="92" v2="93" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="61" v1="93" v2="94" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="61" v1="94" v2="95" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="61" v1="95" v2="96" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="61" v1="96" v2="97" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="61" v1="97" v2="98" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="61" v1="98" v2="99" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="61" v1="99" v2="100" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="100" v1="101" v2="61" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="103" v1="102" v2="147" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="447" v1="448" v2="462" v3="461" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="103" v1="147" v2="146" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="142" v1="141" v2="140" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="143" v1="142" v2="140" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="143" v1="140" v2="139" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="144" v1="143" v2="139" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="145" v1="144" v2="139" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="145" v1="139" v2="138" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="146" v1="145" v2="138" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="146" v1="138" v2="137" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="103" v1="146" v2="112" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="112" v1="146" v2="113" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="113" v1="146" v2="137" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="113" v1="137" v2="136" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="113" v1="136" v2="135" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="113" v1="135" v2="114" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="114" v1="135" v2="134" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="114" v1="134" v2="133" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="115" v1="114" v2="133" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="116" v1="115" v2="133" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="103" v1="112" v2="111" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="117" v1="116" v2="133" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="27" v1="46" v2="26" v3="47" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="103" v1="111" v2="110" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="1" v1="23" v2="0" v3="24" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="103" v1="110" v2="109" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="571" v1="520" v2="551" v3="550" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="103" v1="109" v2="108" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="118" v1="132" v2="119" v3="131" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="103" v1="108" v2="107" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="47" v1="48" v2="26" v3="25" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="103" v1="107" v2="106" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="570" v1="571" v2="552" v3="551" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="103" v1="106" v2="105" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="231" v1="232" v2="213" v3="212" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="103" v1="105" v2="104" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="125" v1="124" v2="126" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="153" v1="154" v2="152" v3="155" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="479" v1="480" v2="478" v3="481" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="149" v1="152" v2="155" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="465" v1="472" v2="464" v3="473" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="158" v1="157" v2="176" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="158" v1="176" v2="175" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="159" v1="158" v2="175" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="159" v1="175" v2="174" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="19" v1="5" v2="18" v3="6" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="161" v1="160" v2="177" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="177" v1="160" v2="173" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="161" v1="177" v2="201" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="178" v1="177" v2="173" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="161" v1="201" v2="200" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="179" v1="178" v2="173" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="268" v1="257" v2="269" v3="256" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="246" v1="293" v2="247" v3="292" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="181" v1="180" v2="172" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="162" v1="199" v2="198" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="182" v1="181" v2="172" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="182" v1="172" v2="187" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="266" v1="258" v2="267" v3="257" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="183" v1="182" v2="187" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="184" v1="183" v2="187" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="184" v1="187" v2="186" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="189" v1="188" v2="171" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="185" v1="184" v2="186" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="163" v1="197" v2="196" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="191" v1="190" v2="170" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="407" v1="408" v2="424" v3="423" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="192" v1="191" v2="170" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="164" v1="195" v2="194" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="164" v1="194" v2="193" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="193" v1="192" v2="170" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="164" v1="193" v2="170" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="244" v1="260" v2="245" v3="259" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="165" v1="169" v2="168" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="166" v1="165" v2="168" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="166" v1="168" v2="167" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="30" v1="43" v2="29" v3="44" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="202" v1="205" v2="206" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="202" v1="206" v2="207" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="220" v1="221" v2="222" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="219" v1="222" v2="223" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="219" v1="224" v2="217" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="217" v1="224" v2="215" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="215" v1="226" v2="227" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="214" v1="229" v2="230" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="170" v1="190" v2="171" v3="189" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="467" v1="468" v2="466" v3="465" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="240" v1="241" v2="233" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="240" v1="211" v2="208" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="243" v1="242" v2="261" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="244" v1="243" v2="261" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="244" v1="261" v2="260" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="566" v1="567" v2="556" v3="555" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="295" v1="246" v2="245" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="296" v1="245" v2="259" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="296" v1="259" v2="263" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="263" v1="259" v2="258" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="264" v1="263" v2="258" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="265" v1="264" v2="258" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="246" v1="295" v2="294" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="266" v1="265" v2="258" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="188" v1="187" v2="171" v3="172" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="28" v1="45" v2="27" v3="46" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="246" v1="294" v2="293" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="292" v1="291" v2="290" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="292" v1="290" v2="289" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="247" v1="292" v2="289" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="247" v1="289" v2="288" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="268" v1="267" v2="257" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="247" v1="288" v2="287" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="568" v1="569" v2="554" v3="553" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="390" v1="377" v2="391" v3="376" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="248" v1="286" v2="285" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="59" v1="90" v2="58" v3="91" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="1" v1="2" v2="23" v3="22" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="249" v1="284" v2="283" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="271" v1="270" v2="255" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="249" v1="283" v2="282" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="272" v1="271" v2="255" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="273" v1="272" v2="255" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="274" v1="273" v2="255" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="275" v1="274" v2="255" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="276" v1="275" v2="255" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="277" v1="276" v2="255" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="278" v1="277" v2="255" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="279" v1="278" v2="255" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="280" v1="279" v2="255" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="281" v1="280" v2="255" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="282" v1="281" v2="255" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="249" v1="282" v2="255" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="18" v1="6" v2="17" v3="7" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="251" v1="250" v2="254" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="251" v1="254" v2="253" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="252" v1="251" v2="253" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="342" v1="343" v2="331" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="331" v1="343" v2="344" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="331" v1="344" v2="330" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="330" v1="344" v2="345" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="314" v1="327" v2="313" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="326" v1="315" v2="316" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="328" v1="306" v2="307" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="332" v1="342" v2="331" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="329" v1="330" v2="345" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="342" v1="332" v2="333" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="342" v1="333" v2="334" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="325" v1="326" v2="316" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="342" v1="334" v2="335" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="324" v1="325" v2="316" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="323" v1="324" v2="316" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="336" v1="342" v2="335" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="322" v1="323" v2="316" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="342" v1="336" v2="337" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="342" v1="337" v2="338" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="342" v1="338" v2="339" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="321" v1="322" v2="316" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="342" v1="339" v2="340" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="320" v1="321" v2="316" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="319" v1="320" v2="316" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="318" v1="319" v2="316" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="317" v1="318" v2="316" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="312" v1="313" v2="328" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="346" v1="347" v2="329" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="311" v1="312" v2="328" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="310" v1="311" v2="328" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="345" v1="346" v2="329" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="329" v1="348" v2="349" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="329" v1="347" v2="348" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="329" v1="349" v2="350" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="308" v1="309" v2="328" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="307" v1="308" v2="328" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="329" v1="350" v2="306" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="328" v1="309" v2="310" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="329" v1="306" v2="328" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="341" v1="342" v2="340" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="351" v1="352" v2="355" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="355" v1="352" v2="353" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="355" v1="353" v2="354" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="351" v1="355" v2="356" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="351" v1="356" v2="359" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="442" v1="443" v2="445" v3="444" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="351" v1="359" v2="360" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="351" v1="360" v2="361" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="351" v1="361" v2="362" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="382" v1="381" v2="380" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="385" v1="365" v2="364" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="383" v1="382" v2="380" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="379" v1="384" v2="383" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="385" v1="384" v2="379" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="365" v1="385" v2="404" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="404" v1="385" v2="405" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="405" v1="385" v2="379" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="405" v1="379" v2="386" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="386" v1="379" v2="378" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="386" v1="378" v2="387" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="387" v1="378" v2="377" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="388" v1="387" v2="377" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="389" v1="388" v2="377" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="365" v1="404" v2="403" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="390" v1="389" v2="377" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="162" v1="198" v2="163" v3="197" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="365" v1="403" v2="402" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="365" v1="402" v2="401" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="392" v1="391" v2="376" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="446" v1="447" v2="463" v3="462" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="365" v1="401" v2="400" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="365" v1="400" v2="399" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="394" v1="393" v2="375" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="365" v1="399" v2="398" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="395" v1="394" v2="375" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="395" v1="375" v2="374" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="365" v1="398" v2="397" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="396" v1="395" v2="374" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="365" v1="397" v2="396" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="365" v1="396" v2="367" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="367" v1="396" v2="374" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="367" v1="374" v2="373" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="365" v1="367" v2="366" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="373" v1="368" v2="367" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="369" v1="368" v2="372" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="368" v1="373" v2="372" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="370" v1="369" v2="372" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="370" v1="372" v2="371" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="437" v1="438" v2="439" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="435" v1="436" v2="439" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="434" v1="435" v2="439" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="433" v1="434" v2="439" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="432" v1="433" v2="439" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="431" v1="432" v2="439" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="430" v1="431" v2="439" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="429" v1="430" v2="439" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="428" v1="429" v2="439" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="440" v1="427" v2="439" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="427" v1="428" v2="439" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="427" v1="440" v2="426" v3="441" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="442" v1="425" v2="441" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="392" v1="376" v2="393" v3="375" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="408" v1="409" v2="423" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="421" v1="422" v2="410" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="411" v1="420" v2="410" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="419" v1="412" v2="413" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="420" v1="421" v2="410" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="411" v1="412" v2="419" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="419" v1="417" v2="418" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="417" v1="414" v2="415" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="119" v1="131" v2="120" v3="130" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="465" v1="468" v2="469" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="465" v1="469" v2="472" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="356" v1="357" v2="359" v3="358" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="269" v1="256" v2="270" v3="255" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="203" v1="204" v2="202" v3="205" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="448" v1="449" v2="461" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="459" v1="460" v2="450" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="450" v1="451" v2="458" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="451" v1="456" v2="458" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="455" v1="456" v2="453" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="233" v1="209" v2="210" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="236" v1="233" v2="234" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="233" v1="211" v2="240" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="576" v1="584" v2="575" v3="585" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="150" v1="151" v2="149" v3="152" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="409" v1="410" v2="423" v3="422" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="475" v1="478" v2="481" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="591" v1="592" v2="594" v3="593" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="487" v1="488" v2="486" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="486" v1="488" v2="489" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="486" v1="490" v2="491" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="486" v1="491" v2="492" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="486" v1="492" v2="493" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="486" v1="493" v2="494" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="495" v1="486" v2="494" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="486" v1="489" v2="490" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="486" v1="495" v2="496" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="486" v1="496" v2="497" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="486" v1="497" v2="498" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="486" v1="498" v2="499" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="486" v1="499" v2="500" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="486" v1="500" v2="501" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="486" v1="501" v2="502" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="486" v1="502" v2="485" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="487" v1="486" v2="483" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="487" v1="504" v2="505" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="487" v1="483" v2="484" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="504" v1="487" v2="484" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="487" v1="505" v2="506" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="487" v1="506" v2="507" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="487" v1="507" v2="508" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="487" v1="508" v2="509" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="487" v1="509" v2="510" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="511" v1="487" v2="510" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="487" v1="511" v2="512" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="487" v1="512" v2="513" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="487" v1="513" v2="514" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="487" v1="514" v2="515" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="313" v1="327" v2="328" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="379" v1="383" v2="380" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="315" v1="326" v2="314" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="327" v1="314" v2="326" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="295" v1="245" v2="296" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="117" v1="133" v2="118" v3="132" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="229" v1="227" v2="228" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="554" v1="555" v2="568" v3="567" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="74" v1="55" v2="73" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="521" v1="522" v2="535" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="535" v1="532" v2="533" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="92" v1="58" v2="91" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="59" v1="89" v2="90" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="22" v1="2" v2="21" v3="3" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="531" v1="532" v2="535" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="220" v1="222" v2="219" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="530" v1="531" v2="535" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="224" v1="219" v2="223" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="529" v1="530" v2="535" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="528" v1="529" v2="535" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="225" v1="226" v2="224" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="527" v1="528" v2="535" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="526" v1="527" v2="535" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="525" v1="526" v2="535" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="524" v1="525" v2="535" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="523" v1="524" v2="535" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="219" v1="217" v2="218" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="217" v1="215" v2="216" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="522" v1="523" v2="535" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="215" v1="224" v2="226" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="520" v1="521" v2="536" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="536" v1="521" v2="535" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="520" v1="536" v2="537" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="520" v1="537" v2="538" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="122" v1="128" v2="123" v3="127" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="149" v1="155" v2="148" v3="156" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="425" v1="406" v2="424" v3="407" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="519" v1="539" v2="540" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="240" v1="237" v2="239" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="519" v1="540" v2="541" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="236" v1="234" v2="235" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="519" v1="541" v2="542" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="239" v1="237" v2="238" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="14" v1="8" v2="9" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="208" v1="237" v2="240" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="542" v1="543" v2="519" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="9" v1="13" v2="14" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="519" v1="543" v2="544" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="519" v1="520" v2="538" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="13" v1="11" v2="12" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="519" v1="544" v2="545" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="519" v1="545" v2="546" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="519" v1="546" v2="547" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="519" v1="547" v2="548" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="519" v1="548" v2="518" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="518" v1="548" v2="549" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="520" v1="519" v2="516" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="120" v1="130" v2="121" v3="129" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="476" v1="477" v2="475" v3="478" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="50" v1="51" v2="0" v3="48" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="449" v1="450" v2="461" v3="460" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="41" v1="33" v2="40" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="40" v1="34" v2="39" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="38" v1="34" v2="35" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="520" v1="516" v2="517" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="520" v1="517" v2="550" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="601" v1="613" v2="600" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="36" v1="38" v2="35" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="464" v1="473" v2="463" v3="446" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="599" v1="614" v2="615" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="123" v1="127" v2="124" v3="126" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="614" v1="600" v2="613" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="179" v1="173" v2="180" v3="172" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="559" v1="561" v2="562" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="562" v1="558" v2="559" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="29" v1="44" v2="28" v3="45" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="564" v1="562" v2="563" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="385" v1="364" v2="363" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="437" v1="439" v2="436" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="556" v1="565" v2="566" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="159" v1="174" v2="160" v3="173" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="556" v1="564" v2="565" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="484" v1="485" v2="503" v3="502" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="52" v1="49" v2="25" v3="24" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="535" v1="533" v2="534" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="504" v1="484" v2="503" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="519" v1="538" v2="539" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="564" v1="557" v2="558" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="41" v1="42" v2="32" v3="31" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="452" v1="453" v2="451" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="455" v1="453" v2="454" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="556" v1="557" v2="564" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="458" v1="456" v2="457" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="450" v1="458" v2="459" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="456" v1="451" v2="453" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="425" v1="442" v2="406" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="559" v1="560" v2="561" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="441" v1="425" v2="426" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="562" v1="564" v2="558" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="247" v1="287" v2="248" v3="286" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="406" v1="442" v2="445" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="249" v1="255" v2="250" v3="254" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="411" v1="419" v2="420" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="417" v1="419" v2="414" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="413" v1="414" v2="419" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="417" v1="415" v2="416" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="470" v1="471" v2="469" v3="472" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="517" v1="518" v2="550" v3="549" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="578" v1="579" v2="580" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="578" v1="580" v2="574" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="574" v1="580" v2="581" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="578" v1="574" v2="572" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="573" v1="574" v2="581" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="577" v1="578" v2="572" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="573" v1="581" v2="582" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="573" v1="582" v2="583" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="577" v1="572" v2="573" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="577" v1="573" v2="583" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="576" v1="577" v2="583" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="475" v1="481" v2="474" v3="482" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="584" v1="576" v2="583" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="586" v1="587" v2="590" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="590" v1="587" v2="588" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="590" v1="588" v2="589" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="586" v1="590" v2="591" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="586" v1="591" v2="594" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="236" v1="237" v2="209" v3="208" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="586" v1="594" v2="595" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="586" v1="595" v2="596" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="586" v1="596" v2="597" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="629" v1="630" v2="618" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="618" v1="630" v2="631" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="618" v1="631" v2="617" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="617" v1="631" v2="632" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="600" v1="614" v2="599" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="613" v1="601" v2="602" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="619" v1="629" v2="618" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="616" v1="617" v2="632" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="629" v1="619" v2="620" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="629" v1="620" v2="621" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="612" v1="613" v2="602" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="629" v1="621" v2="622" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="611" v1="612" v2="602" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="610" v1="611" v2="602" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="629" v1="622" v2="623" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="609" v1="610" v2="602" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="623" v1="624" v2="629" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="608" v1="609" v2="602" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="629" v1="624" v2="625" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="629" v1="625" v2="626" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="607" v1="608" v2="602" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="626" v1="627" v2="629" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="606" v1="607" v2="602" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="605" v1="606" v2="602" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="604" v1="605" v2="602" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="603" v1="604" v2="602" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="598" v1="599" v2="615" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="598" v1="616" v2="632" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="616" v1="598" v2="615" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="628" v1="629" v2="627" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="36" v1="37" v2="38" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="38" v1="39" v2="34" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="40" v1="33" v2="34" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="41" v1="32" v2="33" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="20" v1="4" v2="19" v3="5" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="21" v1="3" v2="20" v3="4" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="231" v1="213" v2="230" v3="214" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="248" v1="285" v2="249" v3="284" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="52" v1="25" v2="48" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="51" v1="52" v2="48" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="212" v1="232" v2="241" v3="233" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="24" v1="49" v2="50" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="24" v1="50" v2="0" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="121" v1="129" v2="122" v3="128" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="163" v1="196" v2="164" v3="195" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="161" v1="200" v2="162" v3="199" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="214" v1="215" v2="229" v3="227" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="30" v1="31" v2="43" v3="42" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="164" v1="170" v2="165" v3="169" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="13" v1="10" v2="11" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="16" v1="17" v2="7" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="15" v1="16" v2="7" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="8" v1="15" v2="7" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="14" v1="15" v2="8" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="9" v1="10" v2="13" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="209" v1="233" v2="236" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="233" v1="210" v2="211" r0="255" g0="255" b0="255" type="F3" /> +</primitives> +</model>
\ No newline at end of file diff --git a/examples/n00bdemo/data/mtekdisk.smd b/examples/n00bdemo/data/mtekdisk.smd Binary files differnew file mode 100644 index 0000000..f99bd46 --- /dev/null +++ b/examples/n00bdemo/data/mtekdisk.smd diff --git a/examples/n00bdemo/data/mtekdisk.smx b/examples/n00bdemo/data/mtekdisk.smx new file mode 100644 index 0000000..fce2fa2 --- /dev/null +++ b/examples/n00bdemo/data/mtekdisk.smx @@ -0,0 +1,379 @@ +<!-- Created using Project Scarlet SMX Export Plug-in for Blender --> +<!-- NOTE: If you plan to use this model as a static mesh, it is recommended that you run this file through smxopt --> +<!-- or smxtool to clean up duplicate/unused normals which are kept for animation purposes. --> +<model version="1"> +<vertices count="218"> +<v x="0.373499" y="0.748297" z="-0.000000"/> +<v x="1.497252" y="-0.375456" z="0.000000"/> +<v x="0.841876" y="0.701179" z="-0.000000"/> +<v x="1.545861" y="-0.391966" z="0.000000"/> +<v x="1.590017" y="-0.375456" z="0.000000"/> +<v x="1.918511" y="-0.046962" z="0.000000"/> +<v x="0.654438" y="0.467358" z="-0.000000"/> +<v x="1.935486" y="0.001773" z="-0.000000"/> +<v x="1.918510" y="0.045802" z="-0.000000"/> +<v x="0.794758" y="1.169554" z="-0.000000"/> +<v x="0.746022" y="1.186530" z="-0.000000"/> +<v x="0.701993" y="1.169555" z="-0.000000"/> +<v x="0.373500" y="0.841061" z="-0.000000"/> +<v x="1.546702" y="-0.352780" z="0.000000"/> +<v x="0.356524" y="0.792325" z="-0.000000"/> +<v x="1.075696" y="0.888616" z="-0.000000"/> +<v x="1.637572" y="0.326740" z="-0.000000"/> +<v x="1.216314" y="-0.094518" z="0.000000"/> +<v x="1.146005" y="0.397049" z="-0.000000"/> +<v x="0.397314" y="0.801440" z="-0.000000"/> +<v x="1.894774" y="-0.007499" z="-0.000000"/> +<v x="0.537747" y="1.005308" z="-0.000000"/> +<v x="1.754264" y="-0.211209" z="0.000000"/> +<v x="0.935376" y="0.186420" z="-0.000000"/> +<v x="1.356634" y="0.607678" z="-0.000000"/> +<v x="0.745460" y="1.146448" z="-0.000000"/> +<v x="1.450134" y="0.092920" z="-0.000000"/> +<v x="-0.427092" y="0.259904" z="-0.000000"/> +<v x="-0.452000" y="0.338535" z="-0.000000"/> +<v x="-0.427092" y="0.385699" z="-0.000000"/> +<v x="-0.489989" y="0.411752" z="-0.000000"/> +<v x="-0.552887" y="0.385699" z="-0.000000"/> +<v x="-0.527979" y="0.307067" z="-0.000000"/> +<v x="-0.552887" y="0.259904" z="-0.000000"/> +<v x="-0.489990" y="0.233851" z="-0.000000"/> +<v x="-0.505726" y="0.360790" z="-0.000000"/> +<v x="-0.578940" y="0.322801" z="-0.000000"/> +<v x="-0.474253" y="0.284813" z="-0.000000"/> +<v x="-0.401039" y="0.322801" z="-0.000000"/> +<v x="-0.130824" y="0.233659" z="-0.000000"/> +<v x="-0.187247" y="0.190241" z="-0.000000"/> +<v x="-0.257456" y="0.069009" z="-0.000000"/> +<v x="-0.230536" y="0.133932" z="-0.000000"/> +<v x="-0.257421" y="-0.069355" z="-0.000000"/> +<v x="-0.266507" y="-0.000150" z="-0.000000"/> +<v x="-0.187154" y="-0.190660" z="-0.000000"/> +<v x="-0.230468" y="-0.134339" z="-0.000000"/> +<v x="-0.065308" y="-0.261404" z="-0.000000"/> +<v x="-0.130717" y="-0.234054" z="-0.000000"/> +<v x="0.072999" y="-0.261382" z="-0.000000"/> +<v x="0.004200" y="-0.270783" z="0.000000"/> +<v x="0.193477" y="-0.190616" z="-0.000000"/> +<v x="0.137423" y="-0.234016" z="-0.000000"/> +<v x="0.263538" y="-0.069325" z="-0.000000"/> +<v x="0.236636" y="-0.134299" z="-0.000000"/> +<v x="0.263521" y="0.069015" z="-0.000000"/> +<v x="0.272605" y="-0.000133" z="-0.000000"/> +<v x="0.193421" y="0.190236" z="-0.000000"/> +<v x="0.236601" y="0.133931" z="-0.000000"/> +<v x="0.072904" y="0.261076" z="-0.000000"/> +<v x="0.137347" y="0.233653" z="-0.000000"/> +<v x="0.004093" y="0.270512" z="-0.000000"/> +<v x="-0.065420" y="0.261079" z="-0.000000"/> +<v x="0.005364" y="-0.421189" z="-0.000000"/> +<v x="-0.102788" y="-0.406361" z="0.000000"/> +<v x="-0.205003" y="-0.363758" z="0.000000"/> +<v x="-0.293109" y="-0.296100" z="0.000000"/> +<v x="-0.360786" y="-0.208000" z="0.000000"/> +<v x="-0.402192" y="-0.106991" z="-0.000000"/> +<v x="-0.415808" y="-0.000047" z="-0.000000"/> +<v x="-0.402192" y="0.106731" z="-0.000000"/> +<v x="-0.360786" y="0.207573" z="-0.000000"/> +<v x="-0.293108" y="0.295680" z="-0.000000"/> +<v x="-0.205001" y="0.363358" z="-0.000000"/> +<v x="-0.102786" y="0.406137" z="-0.000000"/> +<v x="0.005364" y="0.421126" z="-0.000000"/> +<v x="0.110936" y="0.406137" z="-0.000000"/> +<v x="0.210572" y="0.363358" z="-0.000000"/> +<v x="0.298679" y="0.295680" z="-0.000000"/> +<v x="0.366357" y="0.207573" z="-0.000000"/> +<v x="0.407842" y="0.106731" z="-0.000000"/> +<v x="0.421536" y="-0.000047" z="-0.000000"/> +<v x="0.407842" y="-0.106991" z="-0.000000"/> +<v x="0.366357" y="-0.208000" z="0.000000"/> +<v x="0.298680" y="-0.296100" z="0.000000"/> +<v x="0.210574" y="-0.363758" z="0.000000"/> +<v x="0.110938" y="-0.406361" z="0.000000"/> +<v x="0.004024" y="-0.216661" z="-0.000000"/> +<v x="0.059063" y="-0.209140" z="-0.000000"/> +<v x="0.110603" y="-0.187248" z="-0.000000"/> +<v x="0.155446" y="-0.152528" z="-0.000000"/> +<v x="0.189973" y="-0.107474" z="-0.000000"/> +<v x="0.211495" y="-0.055495" z="-0.000000"/> +<v x="0.218748" y="-0.000141" z="-0.000000"/> +<v x="0.211481" y="0.055177" z="-0.000000"/> +<v x="0.189945" y="0.107110" z="-0.000000"/> +<v x="0.155401" y="0.152154" z="-0.000000"/> +<v x="0.110542" y="0.186888" z="-0.000000"/> +<v x="0.058987" y="0.208826" z="-0.000000"/> +<v x="0.003938" y="0.216375" z="-0.000000"/> +<v x="-0.051672" y="0.208828" z="-0.000000"/> +<v x="-0.103995" y="0.186892" z="-0.000000"/> +<v x="-0.149133" y="0.152158" z="-0.000000"/> +<v x="-0.183765" y="0.107111" z="-0.000000"/> +<v x="-0.205301" y="0.055172" z="-0.000000"/> +<v x="-0.212541" y="-0.000155" z="-0.000000"/> +<v x="-0.205272" y="-0.055519" z="-0.000000"/> +<v x="-0.183711" y="-0.107506" z="-0.000000"/> +<v x="-0.149059" y="-0.152562" z="-0.000000"/> +<v x="-0.103909" y="-0.187278" z="-0.000000"/> +<v x="-0.051582" y="-0.209158" z="-0.000000"/> +<v x="-1.024356" y="-1.024791" z="0.000000"/> +<v x="-1.061138" y="-0.940331" z="0.000000"/> +<v x="-1.036879" y="-0.851458" z="0.000000"/> +<v x="-0.589402" y="-0.407635" z="0.000000"/> +<v x="-0.508689" y="-0.388896" z="0.000000"/> +<v x="-0.426420" y="-0.426856" z="0.000000"/> +<v x="-0.388461" y="-0.509124" z="0.000000"/> +<v x="-0.407200" y="-0.589838" z="0.000000"/> +<v x="-0.850549" y="-1.036867" z="0.000000"/> +<v x="-0.939836" y="-1.061517" z="0.000000"/> +<v x="-0.761880" y="-0.947462" z="0.000000"/> +<v x="-0.673210" y="-0.858056" z="0.000000"/> +<v x="-0.584540" y="-0.768650" z="0.000000"/> +<v x="-0.495870" y="-0.679244" z="0.000000"/> +<v x="-0.678898" y="-0.496400" z="0.000000"/> +<v x="-0.768393" y="-0.585165" z="0.000000"/> +<v x="-0.857888" y="-0.673929" z="0.000000"/> +<v x="-0.947384" y="-0.762694" z="0.000000"/> +<v x="-0.480660" y="-0.481099" z="0.000000"/> +<v x="-0.577174" y="-0.577616" z="0.000000"/> +<v x="-0.673689" y="-0.674133" z="0.000000"/> +<v x="-0.770203" y="-0.770650" z="0.000000"/> +<v x="-0.866718" y="-0.867168" z="0.000000"/> +<v x="-0.963232" y="-0.963685" z="0.000000"/> +<v x="-0.000214" y="-2.201246" z="0.000000"/> +<v x="-2.201247" y="-0.000214" z="-0.000000"/> +<v x="-0.000214" y="2.200819" z="-0.000000"/> +<v x="-0.177440" y="-0.219707" z="0.001288"/> +<v x="-1.100730" y="1.100303" z="-0.000000"/> +<v x="-0.550472" y="1.650561" z="-0.000000"/> +<v x="-1.650988" y="-0.550472" z="0.000000"/> +<v x="-1.650988" y="0.550044" z="-0.000000"/> +<v x="0.550044" y="-1.650988" z="0.000000"/> +<v x="0.550044" y="1.650561" z="-0.000000"/> +<v x="-0.550472" y="0.550044" z="-0.000000"/> +<v x="-0.000214" y="1.100303" z="-0.000000"/> +<v x="-1.100730" y="-0.000214" z="-0.000000"/> +<v x="0.582013" y="-0.011802" z="0.001288"/> +<v x="2.202744" y="0.001712" z="-0.000000"/> +<v x="-0.550472" y="-1.650988" z="0.000000"/> +<v x="-1.100730" y="-1.100730" z="0.000000"/> +<v x="-0.000214" y="-1.100730" z="0.000000"/> +<v x="-0.550472" y="-0.550472" z="0.000000"/> +<v x="1.100944" y="-1.100088" z="0.000000"/> +<v x="1.651844" y="-0.549188" z="0.000000"/> +<v x="1.100944" y="1.100945" z="-0.000000"/> +<v x="1.651844" y="0.551328" z="-0.000000"/> +<v x="0.550472" y="-0.550044" z="0.000000"/> +<v x="1.101158" y="0.000642" z="-0.000000"/> +<v x="-0.000000" y="0.000000" z="-0.000000"/> +<v x="0.550472" y="0.550473" z="-0.000000"/> +<v x="-0.275343" y="-1.375859" z="0.000000"/> +<v x="-0.825601" y="-0.825601" z="0.000000"/> +<v x="0.274915" y="-1.926117" z="0.000000"/> +<v x="1.927294" y="-0.273738" z="0.000000"/> +<v x="-1.926118" y="0.274915" z="-0.000000"/> +<v x="-0.825601" y="-0.275343" z="0.000000"/> +<v x="-1.375859" y="0.825173" z="-0.000000"/> +<v x="-0.825601" y="1.375432" z="-0.000000"/> +<v x="-0.275343" y="1.925690" z="-0.000000"/> +<v x="-1.375859" y="-0.275343" z="0.000000"/> +<v x="1.927294" y="0.276520" z="-0.000000"/> +<v x="-0.825601" y="0.274915" z="-0.000000"/> +<v x="-1.926118" y="-0.275343" z="0.000000"/> +<v x="-1.375859" y="0.274915" z="-0.000000"/> +<v x="-0.825601" y="0.825174" z="-0.000000"/> +<v x="-0.275343" y="1.375432" z="-0.000000"/> +<v x="0.274915" y="1.925690" z="-0.000000"/> +<v x="-0.275343" y="0.825174" z="-0.000000"/> +<v x="0.274915" y="1.375432" z="-0.000000"/> +<v x="-1.375859" y="-0.825601" z="0.000000"/> +<v x="-0.275343" y="-1.926117" z="0.000000"/> +<v x="-0.825601" y="-1.375859" z="0.000000"/> +<v x="0.274915" y="-1.375859" z="0.000000"/> +<v x="-0.275343" y="-0.825601" z="0.000000"/> +<v x="0.825494" y="-1.375538" z="0.000000"/> +<v x="1.376394" y="-0.824638" z="0.000000"/> +<v x="0.825494" y="1.375753" z="-0.000000"/> +<v x="1.376394" y="0.826137" z="-0.000000"/> +<v x="1.376501" y="0.275985" z="-0.000000"/> +<v x="0.825708" y="0.825709" z="-0.000000"/> +<v x="0.275129" y="-0.825387" z="0.000000"/> +<v x="0.825815" y="-0.274701" z="0.000000"/> +<v x="-0.275236" y="-0.275236" z="0.000000"/> +<v x="0.275236" y="0.275236" z="-0.000000"/> +<v x="-0.275236" y="0.275022" z="-0.000000"/> +<v x="0.275129" y="0.825388" z="-0.000000"/> +<v x="0.275236" y="-0.275022" z="0.000000"/> +<v x="0.825815" y="0.275557" z="-0.000000"/> +<v x="1.376501" y="-0.274273" z="0.000000"/> +<v x="0.825708" y="-0.825066" z="0.000000"/> +<v x="-0.000214" y="-1.650988" z="0.000000"/> +<v x="-0.550472" y="-1.100730" z="0.000000"/> +<v x="-1.100730" y="-0.550472" z="0.000000"/> +<v x="-1.650988" y="-0.000214" z="0.000000"/> +<v x="-1.100730" y="0.550044" z="-0.000000"/> +<v x="-0.550472" y="1.100303" z="-0.000000"/> +<v x="-0.000214" y="1.650561" z="-0.000000"/> +<v x="0.550311" y="1.100570" z="-0.000000"/> +<v x="1.101104" y="0.550847" z="-0.000000"/> +<v x="1.651897" y="0.001124" z="0.000000"/> +<v x="0.550311" y="-1.100462" z="0.000000"/> +<v x="1.101104" y="-0.549669" z="0.000000"/> +<v x="0.550525" y="0.000268" z="0.000000"/> +<v x="-0.000054" y="-0.550311" z="0.000000"/> +<v x="-0.000054" y="0.550205" z="-0.000000"/> +<v x="-0.550419" y="-0.000160" z="0.000000"/> +</vertices> +<primitives count="152"> +<poly v0="3" v1="4" v2="1" v3="13" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="5" v1="7" v2="20" v3="8" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="5" v1="20" v2="22" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="8" v1="16" v2="20" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="12" v1="14" v2="19" v3="0" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="25" v1="9" v2="11" v3="10" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="4" v1="22" v2="13" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="1" v1="13" v2="17" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="17" v1="13" v2="26" v3="22" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="22" v1="20" v2="26" v3="16" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="11" v1="21" v2="25" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="9" v1="25" v2="15" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="12" v1="19" v2="21" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="0" v1="6" v2="19" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="23" v1="17" v2="18" v3="26" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="26" v1="16" v2="18" v3="24" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="18" v1="2" v2="23" v3="6" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="15" v1="2" v2="24" v3="18" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="21" v1="19" v2="2" v3="6" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="15" v1="25" v2="2" v3="21" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="34" v1="37" v2="33" v3="32" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="35" v1="31" v2="32" v3="36" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="28" v1="35" v2="37" v3="32" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="37" v1="27" v2="28" v3="38" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="35" v1="28" v2="30" v3="29" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="38" v1="29" v2="28" r0="0" g0="85" b0="212" type="F3" /> +<poly v0="31" v1="35" v2="30" r0="0" g0="85" b0="212" type="F3" /> +<poly v0="36" v1="33" v2="32" r0="0" g0="85" b0="212" type="F3" /> +<poly v0="27" v1="37" v2="34" r0="0" g0="85" b0="212" type="F3" /> +<poly v0="51" v1="58" v2="57" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="39" v1="60" v2="62" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="61" v1="62" v2="59" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="60" v1="39" v2="57" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="58" v1="56" v2="55" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="56" v1="54" v2="53" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="54" v1="58" v2="51" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="52" v1="47" v2="49" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="50" v1="49" v2="47" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="48" v1="51" v2="45" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="46" v1="44" v2="43" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="44" v1="42" v2="41" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="42" v1="46" v2="40" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="62" v1="60" v2="59" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="57" v1="39" v2="40" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="56" v1="58" v2="54" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="52" v1="48" v2="47" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="44" v1="46" v2="42" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="51" v1="48" v2="52" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="46" v1="45" v2="40" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="40" v1="45" v2="57" v3="51" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="80" v1="94" v2="81" v3="93" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="90" v1="84" v2="91" v3="83" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="96" v1="78" v2="97" v3="77" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="75" v1="99" v2="76" v3="98" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="78" v1="96" v2="79" v3="95" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="92" v1="82" v2="93" v3="81" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="88" v1="87" v2="86" v3="63" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="79" v1="95" v2="80" v3="94" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="85" v1="84" v2="89" v3="90" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="97" v1="77" v2="98" v3="76" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="82" v1="92" v2="83" v3="91" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="85" v1="89" v2="86" v3="88" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="69" v1="68" v2="105" v3="106" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="101" v1="73" v2="102" v3="72" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="103" v1="71" v2="104" v3="70" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="99" v1="75" v2="100" v3="74" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="104" v1="70" v2="105" v3="69" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="72" v1="71" v2="102" v3="103" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="63" v1="87" v2="64" v3="110" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="108" v1="66" v2="109" v3="65" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="67" v1="66" v2="107" v3="108" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="100" v1="74" v2="101" v3="73" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="109" v1="65" v2="110" v3="64" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="67" v1="107" v2="68" v3="106" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="117" v1="116" v2="118" v3="129" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="116" v1="115" v2="129" v3="114" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="118" v1="129" v2="124" v3="130" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="129" v1="114" v2="130" v3="125" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="124" v1="130" v2="123" v3="131" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="130" v1="125" v2="131" v3="126" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="123" v1="131" v2="122" v3="132" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="131" v1="126" v2="132" v3="127" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="122" v1="132" v2="121" v3="133" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="132" v1="127" v2="133" v3="128" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="121" v1="133" v2="119" v3="134" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="133" v1="128" v2="134" v3="113" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="119" v1="134" v2="120" v3="111" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="134" v1="113" v2="111" v3="112" r0="0" g0="85" b0="212" type="F4" /> +<poly v0="196" v1="145" v2="217" v3="173" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="195" v1="161" v2="216" v3="197" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="192" v1="158" v2="215" v3="198" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="199" v1="161" v2="214" v3="195" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="200" v1="159" v2="213" v3="193" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="186" v1="154" v2="212" v3="201" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="190" v1="159" v2="211" v3="200" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="199" v1="159" v2="210" v3="190" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="197" v1="161" v2="209" v3="191" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="180" v1="144" v2="208" v3="178" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="176" v1="145" v2="207" v3="179" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="173" v1="145" v2="206" v3="176" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="174" v1="141" v2="205" v3="171" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="171" v1="141" v2="204" v3="181" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="163" v1="151" v2="203" v3="183" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="182" v1="135" v2="202" v3="164" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="150" v1="182" v2="162" v3="202" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="162" v1="202" v2="152" v3="184" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="202" v1="164" v2="184" v3="143" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="153" v1="163" v2="185" v3="203" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="185" v1="203" v2="152" v3="162" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="203" v1="183" v2="162" v3="150" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="147" v1="171" v2="167" v3="204" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="167" v1="204" v2="153" v3="163" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="204" v1="181" v2="163" v3="151" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="136" v1="174" v2="166" v3="205" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="166" v1="205" v2="142" v3="175" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="205" v1="171" v2="175" v3="147" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="147" v1="173" v2="175" v3="206" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="175" v1="206" v2="142" v3="168" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="206" v1="176" v2="168" v3="139" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="139" v1="176" v2="169" v3="207" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="169" v1="207" v2="140" v3="177" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="207" v1="179" v2="177" v3="146" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="146" v1="180" v2="177" v3="208" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="177" v1="208" v2="140" v3="170" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="208" v1="178" v2="170" v3="137" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="146" v1="197" v2="180" v3="209" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="180" v1="209" v2="144" v3="188" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="209" v1="191" v2="188" v3="156" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="161" v1="199" v2="191" v3="210" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="191" v1="210" v2="156" v3="189" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="210" v1="190" v2="189" v3="157" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="157" v1="190" v2="172" v3="211" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="172" v1="211" v2="149" v3="165" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="211" v1="200" v2="165" v3="155" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="143" v1="186" v2="184" v3="212" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="184" v1="212" v2="152" v3="192" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="212" v1="201" v2="192" v3="158" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="155" v1="200" v2="187" v3="213" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="187" v1="213" v2="154" v3="201" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="213" v1="193" v2="201" v3="158" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="159" v1="199" v2="193" v3="214" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="193" v1="214" v2="158" v3="198" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="214" v1="195" v2="198" v3="160" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="152" v1="192" v2="185" v3="215" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="185" v1="215" v2="153" v3="194" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="215" v1="198" v2="194" v3="160" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="160" v1="195" v2="196" v3="216" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="196" v1="216" v2="145" v3="179" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="216" v1="197" v2="179" v3="146" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="160" v1="196" v2="194" v3="217" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="194" v1="217" v2="153" v3="167" r0="0" g0="151" b0="255" type="F4" /> +<poly v0="217" v1="173" v2="167" v3="147" r0="0" g0="151" b0="255" type="F4" /> +</primitives> +</model>
\ No newline at end of file diff --git a/examples/n00bdemo/data/mtektext.smd b/examples/n00bdemo/data/mtektext.smd Binary files differnew file mode 100644 index 0000000..a158521 --- /dev/null +++ b/examples/n00bdemo/data/mtektext.smd diff --git a/examples/n00bdemo/data/mtektext.smx b/examples/n00bdemo/data/mtektext.smx new file mode 100644 index 0000000..50aa59d --- /dev/null +++ b/examples/n00bdemo/data/mtektext.smx @@ -0,0 +1,671 @@ +<!-- Created using Project Scarlet SMX Export Plug-in for Blender --> +<!-- NOTE: If you plan to use this model as a static mesh, it is recommended that you run this file through smxopt --> +<!-- or smxtool to clean up duplicate/unused normals which are kept for animation purposes. --> +<model version="1"> +<vertices count="431"> +<v x="-2.869829" y="-0.027607" z="-0.001040"/> +<v x="-2.814248" y="-0.861795" z="-0.001040"/> +<v x="-2.521283" y="-0.837528" z="-0.001040"/> +<v x="-2.390287" y="-0.593013" z="-0.001040"/> +<v x="-2.203349" y="-0.827992" z="-0.001040"/> +<v x="-1.991279" y="-0.831343" z="-0.001040"/> +<v x="-1.924503" y="-0.051084" z="-0.001040"/> +<v x="-2.195356" y="-0.016814" z="-0.001040"/> +<v x="-2.179373" y="-0.521044" z="-0.001040"/> +<v x="-2.418258" y="-0.274292" z="-0.001040"/> +<v x="-2.594974" y="-0.491032" z="-0.001040"/> +<v x="-2.582193" y="-0.012985" z="-0.001040"/> +<v x="2.612237" y="-0.761531" z="-0.001040"/> +<v x="2.357497" y="-0.740857" z="-0.001040"/> +<v x="2.390398" y="-0.024517" z="-0.001040"/> +<v x="2.570866" y="-0.012224" z="-0.001040"/> +<v x="2.580964" y="-0.196897" z="-0.001040"/> +<v x="2.926591" y="-0.004680" z="-0.001040"/> +<v x="3.044514" y="-0.140740" z="-0.001040"/> +<v x="2.698562" y="-0.326251" z="-0.001040"/> +<v x="2.997280" y="-0.534671" z="-0.001040"/> +<v x="2.901508" y="-0.698111" z="-0.001040"/> +<v x="2.595298" y="-0.455885" z="-0.001040"/> +<v x="0.888602" y="-0.885298" z="-0.001040"/> +<v x="0.893163" y="-0.672687" z="-0.001040"/> +<v x="1.194161" y="-0.664585" z="-0.001040"/> +<v x="1.143343" y="-0.007195" z="-0.001040"/> +<v x="1.451507" y="-0.027031" z="-0.001040"/> +<v x="1.442386" y="-0.658159" z="-0.001040"/> +<v x="1.710808" y="-0.650895" z="-0.001040"/> +<v x="1.747944" y="-0.865462" z="-0.001040"/> +<v x="0.550046" y="-0.497247" z="-0.001040"/> +<v x="0.530390" y="-0.348335" z="-0.001040"/> +<v x="1.021790" y="-0.368003" z="-0.001040"/> +<v x="1.028342" y="-0.471960" z="-0.001040"/> +<v x="0.146352" y="-0.504836" z="-0.001040"/> +<v x="0.059007" y="-0.496653" z="-0.001040"/> +<v x="-0.015713" y="-0.471481" z="-0.001040"/> +<v x="-0.074645" y="-0.432387" z="-0.001040"/> +<v x="-0.117607" y="-0.382762" z="-0.001040"/> +<v x="-0.144645" y="-0.326017" z="-0.001040"/> +<v x="-0.155805" y="-0.265561" z="-0.001040"/> +<v x="-0.151130" y="-0.204805" z="-0.001040"/> +<v x="-0.130668" y="-0.147161" z="-0.001040"/> +<v x="-0.094463" y="-0.096038" z="-0.001040"/> +<v x="-0.042561" y="-0.054847" z="-0.001040"/> +<v x="0.025060" y="-0.026979" z="-0.001040"/> +<v x="0.108386" y="-0.015529" z="-0.001040"/> +<v x="0.199740" y="-0.022251" z="-0.001040"/> +<v x="0.283206" y="-0.046424" z="-0.001040"/> +<v x="0.349705" y="-0.085241" z="-0.001040"/> +<v x="0.398407" y="-0.135171" z="-0.001040"/> +<v x="0.429241" y="-0.192627" z="-0.001040"/> +<v x="0.442135" y="-0.254023" z="-0.001040"/> +<v x="0.437017" y="-0.315773" z="-0.001040"/> +<v x="0.413815" y="-0.374289" z="-0.001040"/> +<v x="0.372456" y="-0.425987" z="-0.001040"/> +<v x="0.312869" y="-0.467278" z="-0.001040"/> +<v x="0.235476" y="-0.494606" z="-0.001040"/> +<v x="0.144902" y="-0.363206" z="-0.001040"/> +<v x="0.204039" y="-0.347278" z="-0.001040"/> +<v x="0.242558" y="-0.309011" z="-0.001040"/> +<v x="0.255777" y="-0.259569" z="-0.001040"/> +<v x="0.241112" y="-0.211078" z="-0.001040"/> +<v x="0.195979" y="-0.175661" z="-0.001040"/> +<v x="0.129700" y="-0.163994" z="-0.001040"/> +<v x="0.067959" y="-0.180125" z="-0.001040"/> +<v x="0.029707" y="-0.218359" z="-0.001040"/> +<v x="0.018978" y="-0.267596" z="-0.001040"/> +<v x="0.036083" y="-0.315894" z="-0.001040"/> +<v x="0.081330" y="-0.351313" z="-0.001040"/> +<v x="-0.460284" y="-0.782485" z="-0.001040"/> +<v x="-0.436178" y="-0.405037" z="-0.001040"/> +<v x="-0.521829" y="-0.430573" z="-0.001040"/> +<v x="-0.602487" y="-0.440857" z="-0.001040"/> +<v x="-0.674236" y="-0.433482" z="-0.001040"/> +<v x="-0.733971" y="-0.411371" z="-0.001040"/> +<v x="-0.780370" y="-0.377126" z="-0.001040"/> +<v x="-0.813457" y="-0.333705" z="-0.001040"/> +<v x="-0.833376" y="-0.284110" z="-0.001040"/> +<v x="-0.840272" y="-0.231342" z="-0.001040"/> +<v x="-0.834289" y="-0.178404" z="-0.001040"/> +<v x="-0.815570" y="-0.128297" z="-0.001040"/> +<v x="-0.784261" y="-0.084023" z="-0.001040"/> +<v x="-0.740504" y="-0.048583" z="-0.001040"/> +<v x="-0.684817" y="-0.024901" z="-0.001040"/> +<v x="-0.621840" y="-0.014890" z="-0.001040"/> +<v x="-0.560217" y="-0.017970" z="-0.001040"/> +<v x="-0.505170" y="-0.031759" z="-0.001040"/> +<v x="-0.457496" y="-0.054047" z="-0.001040"/> +<v x="-0.415330" y="-0.081790" z="-0.001040"/> +<v x="-0.410770" y="-0.009430" z="-0.001040"/> +<v x="-0.256362" y="-0.011944" z="-0.001040"/> +<v x="-0.226066" y="-0.769074" z="-0.001040"/> +<v x="-0.603194" y="-0.320950" z="-0.001040"/> +<v x="-0.545272" y="-0.305206" z="-0.001040"/> +<v x="-0.507872" y="-0.263819" z="-0.001040"/> +<v x="-0.501051" y="-0.214444" z="-0.001040"/> +<v x="-0.519856" y="-0.170054" z="-0.001040"/> +<v x="-0.560447" y="-0.139292" z="-0.001040"/> +<v x="-0.615674" y="-0.131352" z="-0.001040"/> +<v x="-0.667377" y="-0.148470" z="-0.001040"/> +<v x="-0.699517" y="-0.184357" z="-0.001040"/> +<v x="-0.707962" y="-0.229308" z="-0.001040"/> +<v x="-0.693694" y="-0.273568" z="-0.001040"/> +<v x="-0.657698" y="-0.307383" z="-0.001040"/> +<v x="-0.911668" y="-0.660457" z="-0.001040"/> +<v x="-0.920427" y="-0.632337" z="-0.001040"/> +<v x="-0.948777" y="-0.605337" z="-0.001040"/> +<v x="-0.992043" y="-0.594086" z="-0.001040"/> +<v x="-1.032432" y="-0.603172" z="-0.001040"/> +<v x="-1.061794" y="-0.628372" z="-0.001040"/> +<v x="-1.072507" y="-0.662759" z="-0.001040"/> +<v x="-1.061794" y="-0.697146" z="-0.001040"/> +<v x="-1.032432" y="-0.722346" z="-0.001040"/> +<v x="-0.992088" y="-0.731336" z="-0.001040"/> +<v x="-0.947808" y="-0.719967" z="-0.001040"/> +<v x="-0.920427" y="-0.693181" z="-0.001040"/> +<v x="-1.066661" y="-0.532314" z="-0.001040"/> +<v x="-1.163953" y="-0.020235" z="-0.001040"/> +<v x="-0.913773" y="-0.009150" z="-0.001040"/> +<v x="-0.946204" y="-0.536009" z="-0.001040"/> +<v x="-1.632944" y="-0.493435" z="-0.001040"/> +<v x="-1.713204" y="-0.456408" z="-0.001040"/> +<v x="-1.769013" y="-0.406541" z="-0.001040"/> +<v x="-1.802243" y="-0.349082" z="-0.001040"/> +<v x="-1.819677" y="-0.272348" z="-0.001040"/> +<v x="-1.808293" y="-0.192681" z="-0.001040"/> +<v x="-1.779698" y="-0.132967" z="-0.001040"/> +<v x="-1.699807" y="-0.065738" z="-0.001040"/> +<v x="-1.628577" y="-0.031687" z="-0.001040"/> +<v x="-1.531024" y="-0.013165" z="-0.001040"/> +<v x="-1.482329" y="-0.133770" z="-0.001040"/> +<v x="-1.364012" y="-0.051470" z="-0.001040"/> +<v x="-1.287215" y="-0.110106" z="-0.001040"/> +<v x="-1.249745" y="-0.190824" z="-0.001040"/> +<v x="-1.236087" y="-0.253336" z="-0.001040"/> +<v x="-1.386040" y="-0.218134" z="-0.001040"/> +<v x="-1.403123" y="-0.183613" z="-0.001040"/> +<v x="-1.435707" y="-0.153820" z="-0.001040"/> +<v x="-1.534932" y="-0.128857" z="-0.001040"/> +<v x="-1.597416" y="-0.144894" z="-0.001040"/> +<v x="-1.648935" y="-0.185163" z="-0.001040"/> +<v x="-1.668318" y="-0.222999" z="-0.001040"/> +<v x="-1.232945" y="-0.312812" z="-0.001040"/> +<v x="-1.265416" y="-0.372579" z="-0.001040"/> +<v x="-1.309006" y="-0.424893" z="-0.001040"/> +<v x="-1.374620" y="-0.472656" z="-0.001040"/> +<v x="-1.463835" y="-0.502995" z="-0.001040"/> +<v x="-1.418013" y="-0.362877" z="-0.001040"/> +<v x="-1.679355" y="-0.303020" z="-0.001040"/> +<v x="-1.671062" y="-0.338059" z="-0.001040"/> +<v x="-1.640652" y="-0.378670" z="-0.001040"/> +<v x="-1.598089" y="-0.402530" z="-0.001040"/> +<v x="-1.547481" y="-0.413300" z="-0.001040"/> +<v x="-1.501707" y="-0.412440" z="-0.001040"/> +<v x="-1.466933" y="-0.402576" z="-0.001040"/> +<v x="-1.440244" y="-0.385924" z="-0.001040"/> +<v x="-1.549839" y="-0.508832" z="-0.001040"/> +<v x="-1.441293" y="-0.020491" z="-0.001040"/> +<v x="-1.373734" y="-0.283769" z="-0.001040"/> +<v x="1.867056" y="-0.493435" z="-0.001040"/> +<v x="1.786796" y="-0.456408" z="-0.001040"/> +<v x="1.730987" y="-0.406541" z="-0.001040"/> +<v x="1.697757" y="-0.349082" z="-0.001040"/> +<v x="1.680323" y="-0.272348" z="-0.001040"/> +<v x="1.691707" y="-0.192681" z="-0.001040"/> +<v x="1.720302" y="-0.132967" z="-0.001040"/> +<v x="1.800193" y="-0.065738" z="-0.001040"/> +<v x="1.871423" y="-0.031687" z="-0.001040"/> +<v x="1.968976" y="-0.013165" z="-0.001040"/> +<v x="2.017671" y="-0.133770" z="-0.001040"/> +<v x="2.135988" y="-0.051470" z="-0.001040"/> +<v x="2.212785" y="-0.110106" z="-0.001040"/> +<v x="2.250255" y="-0.190824" z="-0.001040"/> +<v x="2.263913" y="-0.253336" z="-0.001040"/> +<v x="2.113960" y="-0.218134" z="-0.001040"/> +<v x="2.096877" y="-0.183613" z="-0.001040"/> +<v x="2.064293" y="-0.153820" z="-0.001040"/> +<v x="1.965068" y="-0.128857" z="-0.001040"/> +<v x="1.902584" y="-0.144894" z="-0.001040"/> +<v x="1.851065" y="-0.185163" z="-0.001040"/> +<v x="1.831682" y="-0.222999" z="-0.001040"/> +<v x="2.267055" y="-0.312812" z="-0.001040"/> +<v x="2.234584" y="-0.372579" z="-0.001040"/> +<v x="2.190994" y="-0.424893" z="-0.001040"/> +<v x="2.125380" y="-0.472656" z="-0.001040"/> +<v x="2.036165" y="-0.502995" z="-0.001040"/> +<v x="2.081987" y="-0.362877" z="-0.001040"/> +<v x="1.820645" y="-0.303020" z="-0.001040"/> +<v x="1.828938" y="-0.338059" z="-0.001040"/> +<v x="1.859348" y="-0.378670" z="-0.001040"/> +<v x="1.901911" y="-0.402530" z="-0.001040"/> +<v x="1.952519" y="-0.413300" z="-0.001040"/> +<v x="1.998293" y="-0.412440" z="-0.001040"/> +<v x="2.033067" y="-0.402576" z="-0.001040"/> +<v x="2.059756" y="-0.385924" z="-0.001040"/> +<v x="1.950161" y="-0.508832" z="-0.001040"/> +<v x="2.058707" y="-0.020491" z="-0.001040"/> +<v x="2.126266" y="-0.283769" z="-0.001040"/> +<v x="-0.465169" y="0.027801" z="-0.001040"/> +<v x="0.246814" y="0.024940" z="0.198960"/> +<v x="0.248315" y="0.024969" z="0.198960"/> +<v x="1.241558" y="0.233502" z="-0.001040"/> +<v x="1.218258" y="0.204986" z="-0.001040"/> +<v x="1.184113" y="0.188916" z="-0.001040"/> +<v x="1.145920" y="0.185240" z="-0.001040"/> +<v x="1.110475" y="0.193906" z="-0.001040"/> +<v x="1.084577" y="0.214860" z="-0.001040"/> +<v x="1.075020" y="0.248051" z="-0.001040"/> +<v x="1.084088" y="0.277142" z="-0.001040"/> +<v x="1.105525" y="0.297442" z="-0.001040"/> +<v x="1.132998" y="0.311687" z="-0.001040"/> +<v x="1.159754" y="0.322575" z="-0.001040"/> +<v x="1.179894" y="0.333082" z="-0.001040"/> +<v x="1.186742" y="0.345899" z="-0.001040"/> +<v x="1.172893" y="0.357996" z="-0.001040"/> +<v x="1.144962" y="0.356783" z="-0.001040"/> +<v x="1.118423" y="0.341454" z="-0.001040"/> +<v x="1.076264" y="0.367360" z="-0.001040"/> +<v x="1.099485" y="0.389146" z="-0.001040"/> +<v x="1.132253" y="0.402668" z="-0.001040"/> +<v x="1.168548" y="0.407000" z="-0.001040"/> +<v x="1.202348" y="0.401217" z="-0.001040"/> +<v x="1.227633" y="0.384393" z="-0.001040"/> +<v x="1.238381" y="0.355602" z="-0.001040"/> +<v x="1.231240" y="0.322916" z="-0.001040"/> +<v x="1.210871" y="0.300913" z="-0.001040"/> +<v x="1.183794" y="0.286079" z="-0.001040"/> +<v x="1.156927" y="0.274908" z="-0.001040"/> +<v x="1.136405" y="0.263649" z="-0.001040"/> +<v x="1.128985" y="0.249081" z="-0.001040"/> +<v x="1.141538" y="0.235801" z="-0.001040"/> +<v x="1.167300" y="0.236765" z="-0.001040"/> +<v x="1.191063" y="0.251719" z="-0.001040"/> +<v x="0.806025" y="0.194513" z="-0.001040"/> +<v x="0.814961" y="0.414539" z="-0.001040"/> +<v x="0.871738" y="0.408677" z="-0.001040"/> +<v x="0.869635" y="0.283786" z="-0.001040"/> +<v x="0.897012" y="0.267996" z="-0.001040"/> +<v x="0.923131" y="0.265777" z="-0.001040"/> +<v x="0.945917" y="0.278356" z="-0.001040"/> +<v x="0.967284" y="0.324574" z="-0.001040"/> +<v x="0.973049" y="0.355094" z="-0.001040"/> +<v x="0.973725" y="0.407325" z="-0.001040"/> +<v x="0.664899" y="0.205183" z="-0.001040"/> +<v x="1.042066" y="0.410932" z="-0.001040"/> +<v x="1.040264" y="0.364541" z="-0.001040"/> +<v x="1.035241" y="0.323640" z="-0.001040"/> +<v x="1.026322" y="0.289742" z="-0.001040"/> +<v x="0.999182" y="0.241066" z="-0.001040"/> +<v x="0.958903" y="0.298930" z="-0.001040"/> +<v x="0.958573" y="0.214223" z="-0.001040"/> +<v x="0.913221" y="0.209755" z="-0.001040"/> +<v x="0.868584" y="0.221115" z="-0.001040"/> +<v x="0.868059" y="0.197669" z="-0.001040"/> +<v x="0.500839" y="0.191508" z="-0.001040"/> +<v x="0.450619" y="0.195773" z="-0.001040"/> +<v x="0.437194" y="0.402598" z="-0.001040"/> +<v x="0.515756" y="0.406863" z="-0.001040"/> +<v x="0.473989" y="0.108226" z="-0.001040"/> +<v x="0.452102" y="0.116108" z="-0.001040"/> +<v x="0.443161" y="0.135092" z="-0.001040"/> +<v x="0.452102" y="0.154076" z="-0.001040"/> +<v x="0.473989" y="0.161958" z="-0.001040"/> +<v x="0.496124" y="0.154076" z="-0.001040"/> +<v x="0.505314" y="0.135092" z="-0.001040"/> +<v x="0.496124" y="0.116108" z="-0.001040"/> +<v x="0.211876" y="0.024767" z="-0.001040"/> +<v x="0.217843" y="0.181699" z="-0.001040"/> +<v x="0.121878" y="0.179567" z="-0.001040"/> +<v x="0.141270" y="0.249077" z="-0.001040"/> +<v x="0.220826" y="0.251209" z="-0.001040"/> +<v x="0.226295" y="0.399186" z="-0.001040"/> +<v x="0.291432" y="0.405583" z="-0.001040"/> +<v x="0.299885" y="0.253342" z="-0.001040"/> +<v x="0.381927" y="0.255475" z="-0.001040"/> +<v x="0.395849" y="0.185538" z="-0.001040"/> +<v x="0.303862" y="0.183405" z="-0.001040"/> +<v x="0.312812" y="0.023489" z="-0.001040"/> +<v x="0.107299" y="0.250111" z="-0.001040"/> +<v x="0.078991" y="0.216935" z="-0.001040"/> +<v x="0.040671" y="0.197201" z="-0.001040"/> +<v x="-0.013773" y="0.191957" z="-0.001040"/> +<v x="-0.068175" y="0.205492" z="-0.001040"/> +<v x="-0.114623" y="0.240743" z="-0.001040"/> +<v x="-0.135552" y="0.295422" z="-0.001040"/> +<v x="-0.120125" y="0.352049" z="-0.001040"/> +<v x="-0.076591" y="0.392874" z="-0.001040"/> +<v x="-0.015770" y="0.408426" z="-0.001040"/> +<v x="0.077058" y="0.376138" z="-0.001040"/> +<v x="0.105645" y="0.335304" z="-0.001040"/> +<v x="0.053015" y="0.322260" z="-0.001040"/> +<v x="0.039436" y="0.340276" z="-0.001040"/> +<v x="-0.007273" y="0.350416" z="-0.001040"/> +<v x="-0.030634" y="0.345161" z="-0.001040"/> +<v x="-0.054292" y="0.326964" z="-0.001040"/> +<v x="-0.065877" y="0.301873" z="-0.001040"/> +<v x="-0.063036" y="0.276517" z="-0.001040"/> +<v x="-0.046670" y="0.257009" z="-0.001040"/> +<v x="-0.020223" y="0.247352" z="-0.001040"/> +<v x="0.009448" y="0.249256" z="-0.001040"/> +<v x="0.034465" y="0.261880" z="-0.001040"/> +<v x="0.057099" y="0.284611" z="-0.001040"/> +<v x="-0.421136" y="0.223454" z="-0.001040"/> +<v x="-0.347295" y="0.383171" z="-0.001040"/> +<v x="-0.310192" y="0.392475" z="-0.001040"/> +<v x="-0.272585" y="0.391882" z="-0.001040"/> +<v x="-0.248194" y="0.381341" z="-0.001040"/> +<v x="-0.247475" y="0.400470" z="-0.001040"/> +<v x="-0.183079" y="0.405407" z="-0.001040"/> +<v x="-0.176964" y="0.196216" z="-0.001040"/> +<v x="-0.253231" y="0.202695" z="-0.001040"/> +<v x="-0.249993" y="0.310993" z="-0.001040"/> +<v x="-0.268120" y="0.322979" z="-0.001040"/> +<v x="-0.288797" y="0.326587" z="-0.001040"/> +<v x="-0.329043" y="0.309308" z="-0.001040"/> +<v x="-0.338264" y="0.287709" z="-0.001040"/> +<v x="-0.345180" y="0.260438" z="-0.001040"/> +<v x="-0.348204" y="0.232168" z="-0.001040"/> +<v x="-0.346766" y="0.199301" z="-0.001040"/> +<v x="-0.421235" y="0.190971" z="-0.001040"/> +<v x="-0.555166" y="0.035477" z="-0.001040"/> +<v x="-0.549200" y="0.221833" z="-0.001040"/> +<v x="-0.589225" y="0.208231" z="-0.001040"/> +<v x="-0.643184" y="0.210655" z="-0.001040"/> +<v x="-0.688740" y="0.236721" z="-0.001040"/> +<v x="-0.711518" y="0.279395" z="-0.001040"/> +<v x="-0.711276" y="0.327757" z="-0.001040"/> +<v x="-0.687772" y="0.370889" z="-0.001040"/> +<v x="-0.640763" y="0.397870" z="-0.001040"/> +<v x="-0.585357" y="0.399628" z="-0.001040"/> +<v x="-0.543730" y="0.379191" z="-0.001040"/> +<v x="-0.542736" y="0.408189" z="-0.001040"/> +<v x="-0.474119" y="0.411174" z="-0.001040"/> +<v x="-0.611235" y="0.263591" z="-0.001040"/> +<v x="-0.585895" y="0.269883" z="-0.001040"/> +<v x="-0.571819" y="0.284908" z="-0.001040"/> +<v x="-0.569134" y="0.304243" z="-0.001040"/> +<v x="-0.576467" y="0.323457" z="-0.001040"/> +<v x="-0.592446" y="0.338123" z="-0.001040"/> +<v x="-0.615237" y="0.343845" z="-0.001040"/> +<v x="-0.636728" y="0.337928" z="-0.001040"/> +<v x="-0.649618" y="0.322876" z="-0.001040"/> +<v x="-0.653475" y="0.303276" z="-0.001040"/> +<v x="-0.648344" y="0.283773" z="-0.001040"/> +<v x="-0.634269" y="0.269016" z="-0.001040"/> +<v x="-0.865101" y="0.205183" z="-0.001040"/> +<v x="-0.922589" y="0.219900" z="-0.001040"/> +<v x="-0.958506" y="0.257771" z="-0.001040"/> +<v x="-0.971570" y="0.307347" z="-0.001040"/> +<v x="-0.960995" y="0.357076" z="-0.001040"/> +<v x="-0.926000" y="0.395402" z="-0.001040"/> +<v x="-0.867331" y="0.410863" z="-0.001040"/> +<v x="-0.807402" y="0.396458" z="-0.001040"/> +<v x="-0.769488" y="0.358539" z="-0.001040"/> +<v x="-0.755830" y="0.308710" z="-0.001040"/> +<v x="-0.767151" y="0.258727" z="-0.001040"/> +<v x="-0.804176" y="0.220342" z="-0.001040"/> +<v x="-0.867961" y="0.270551" z="-0.001040"/> +<v x="-0.846803" y="0.273497" z="-0.001040"/> +<v x="-0.829318" y="0.286180" z="-0.001040"/> +<v x="-0.820933" y="0.305187" z="-0.001040"/> +<v x="-0.822869" y="0.325742" z="-0.001040"/> +<v x="-0.834448" y="0.342870" z="-0.001040"/> +<v x="-0.853871" y="0.351918" z="-0.001040"/> +<v x="-0.875624" y="0.350266" z="-0.001040"/> +<v x="-0.892726" y="0.337357" z="-0.001040"/> +<v x="-0.900682" y="0.315891" z="-0.001040"/> +<v x="-0.897938" y="0.293756" z="-0.001040"/> +<v x="-0.886192" y="0.277794" z="-0.001040"/> +<v x="-1.135925" y="0.160136" z="-0.001040"/> +<v x="-1.197083" y="0.168380" z="-0.001040"/> +<v x="-1.211006" y="0.408995" z="-0.001040"/> +<v x="-1.129461" y="0.406933" z="-0.001040"/> +<v x="-1.132941" y="0.269366" z="-0.001040"/> +<v x="-1.099539" y="0.252826" z="-0.001040"/> +<v x="-1.064669" y="0.252032" z="-0.001040"/> +<v x="-1.032999" y="0.274003" z="-0.001040"/> +<v x="-0.995210" y="0.230208" z="-0.001040"/> +<v x="-1.032109" y="0.198905" z="-0.001040"/> +<v x="-1.082717" y="0.187941" z="-0.001040"/> +<v x="-1.134930" y="0.201355" z="-0.001040"/> +<v x="-1.471852" y="0.048919" z="-0.001040"/> +<v x="-1.463150" y="0.405263" z="-0.001040"/> +<v x="-1.362650" y="0.408995" z="-0.001040"/> +<v x="-1.380053" y="0.241457" z="-0.001040"/> +<v x="-1.321775" y="0.228328" z="-0.001040"/> +<v x="-1.255633" y="0.195822" z="-0.001040"/> +<v x="-1.231351" y="0.141595" z="-0.001040"/> +<v x="-1.260978" y="0.089509" z="-0.001040"/> +<v x="-1.331591" y="0.057669" z="-0.001040"/> +<v x="-1.401820" y="0.048342" z="-0.001040"/> +<v x="-1.365150" y="0.111301" z="-0.001040"/> +<v x="-1.333782" y="0.118417" z="-0.001040"/> +<v x="-1.315154" y="0.136982" z="-0.001040"/> +<v x="-1.326512" y="0.162763" z="-0.001040"/> +<v x="-1.362103" y="0.173703" z="-0.001040"/> +<v x="-1.393105" y="0.174293" z="-0.001040"/> +<v x="-1.401806" y="0.110487" z="-0.001040"/> +<v x="-0.416804" y="0.268292" z="-0.001040"/> +<v x="-0.408463" y="0.307971" z="-0.001040"/> +<v x="-0.395529" y="0.339592" z="-0.001040"/> +<v x="-0.376517" y="0.364302" z="-0.001040"/> +<v x="0.607411" y="0.219900" z="-0.001040"/> +<v x="0.571494" y="0.257771" z="-0.001040"/> +<v x="0.558431" y="0.307347" z="-0.001040"/> +<v x="0.569005" y="0.357076" z="-0.001040"/> +<v x="0.604001" y="0.395402" z="-0.001040"/> +<v x="0.662669" y="0.410863" z="-0.001040"/> +<v x="0.722598" y="0.396458" z="-0.001040"/> +<v x="0.760512" y="0.358539" z="-0.001040"/> +<v x="0.774170" y="0.308710" z="-0.001040"/> +<v x="0.762849" y="0.258727" z="-0.001040"/> +<v x="0.725824" y="0.220342" z="-0.001040"/> +<v x="0.695243" y="0.276559" z="-0.001040"/> +<v x="0.708871" y="0.294171" z="-0.001040"/> +<v x="0.711842" y="0.315817" z="-0.001040"/> +<v x="0.704830" y="0.336524" z="-0.001040"/> +<v x="0.688514" y="0.351316" z="-0.001040"/> +<v x="0.664429" y="0.355414" z="-0.001040"/> +<v x="0.642793" y="0.347665" z="-0.001040"/> +<v x="0.630025" y="0.331768" z="-0.001040"/> +<v x="0.625936" y="0.311797" z="-0.001040"/> +<v x="0.630104" y="0.291793" z="-0.001040"/> +<v x="0.642107" y="0.275794" z="-0.001040"/> +<v x="0.666469" y="0.267817" z="-0.001040"/> +<v x="-0.305178" y="0.326288" z="-0.001040"/> +<v x="-0.318372" y="0.321296" z="-0.001040"/> +<v x="0.017155" y="0.350620" z="-0.001040"/> +<v x="0.036589" y="0.400501" z="-0.001040"/> +</vertices> +<primitives count="231"> +<poly v0="22" v1="13" v2="12" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="32" v1="31" v2="33" v3="34" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="2" v1="3" v2="1" v3="10" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="15" v1="14" v2="16" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="22" v1="21" v2="19" v3="20" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="29" v1="28" v2="30" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="25" v1="24" v2="23" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="28" v1="23" v2="30" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="121" v1="120" v2="118" v3="119" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="16" v1="19" v2="17" v3="18" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="5" v1="6" v2="8" v3="7" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="5" v1="8" v2="4" v3="3" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="3" v1="8" v2="10" v3="9" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="69" v1="38" v2="70" v3="37" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="13" v1="22" v2="14" v3="16" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="70" v1="36" v2="59" v3="35" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="72" v1="71" v2="93" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="72" v1="93" v2="92" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="91" v1="90" v2="92" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="25" v1="23" v2="28" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="56" v1="60" v2="57" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="41" v1="68" v2="42" v3="67" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="40" v1="69" v2="41" v3="68" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="63" v1="62" v2="52" v3="53" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="53" v1="62" v2="54" v3="61" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="22" v1="19" v2="16" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="113" v1="111" v2="112" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="108" v1="116" v2="107" v3="117" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="110" v1="111" v2="114" v3="113" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="106" v1="107" v2="117" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="109" v1="115" v2="108" v3="116" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="110" v1="114" v2="109" v3="115" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="72" v1="92" v2="90" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="105" v1="104" v2="74" v3="75" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="94" v1="105" v2="73" v3="74" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="95" v1="94" v2="72" v3="73" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="97" v1="90" v2="98" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="96" v1="95" v2="72" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="97" v1="96" v2="90" v3="72" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="70" v1="37" v2="36" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="59" v1="35" v2="58" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="10" v1="11" v2="1" v3="0" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="54" v1="61" v2="55" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="60" v1="56" v2="61" v3="55" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="60" v1="59" v2="57" v3="58" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="69" v1="39" v2="38" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="39" v1="69" v2="40" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="65" v1="47" v2="66" v3="46" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="64" v1="48" v2="65" v3="47" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="63" v1="49" v2="64" v3="48" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="66" v1="46" v2="67" v3="45" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="42" v1="67" v2="43" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="43" v1="67" v2="44" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="45" v1="44" v2="67" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="49" v1="63" v2="50" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="52" v1="51" v2="63" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="51" v1="50" v2="63" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="130" v1="129" v2="140" v3="141" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="160" v1="143" v2="149" v3="150" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="149" v1="145" v2="160" v3="144" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="145" v1="149" v2="146" v3="157" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="157" v1="156" v2="146" v3="147" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="156" v1="155" v2="147" v3="148" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="158" v1="148" v2="154" v3="155" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="122" v1="158" v2="153" v3="154" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="123" v1="122" v2="152" v3="153" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="124" v1="123" v2="151" v3="152" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="125" v1="124" v2="150" v3="151" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="150" v1="143" v2="125" v3="126" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="127" v1="126" v2="142" v3="143" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="128" v1="127" v2="141" v3="142" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="141" v1="129" v2="128" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="131" v1="130" v2="140" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="159" v1="132" v2="133" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="140" v1="132" v2="131" v3="159" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="134" v1="133" v2="139" v3="132" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="135" v1="134" v2="138" v3="139" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="136" v1="135" v2="137" v3="138" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="170" v1="169" v2="179" v3="180" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="199" v1="182" v2="188" v3="189" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="188" v1="184" v2="199" v3="183" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="184" v1="188" v2="185" v3="196" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="196" v1="195" v2="185" v3="186" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="195" v1="194" v2="186" v3="187" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="197" v1="187" v2="193" v3="194" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="161" v1="197" v2="192" v3="193" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="162" v1="161" v2="191" v3="192" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="163" v1="162" v2="190" v3="191" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="164" v1="163" v2="189" v3="190" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="165" v1="164" v2="182" v3="189" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="166" v1="165" v2="181" v3="182" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="167" v1="166" v2="180" v3="181" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="180" v1="168" v2="167" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="169" v1="168" v2="180" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="198" v1="170" v2="179" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="179" v1="171" v2="198" v3="172" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="173" v1="172" v2="178" v3="171" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="174" v1="173" v2="177" v3="178" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="175" v1="174" v2="176" v3="177" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="99" v1="98" v2="89" v3="90" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="88" v1="87" v2="99" v3="100" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="89" v1="88" v2="99" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="86" v1="100" v2="87" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="101" v1="100" v2="85" v3="86" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="102" v1="101" v2="84" v3="85" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="83" v1="82" v2="102" v3="103" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="84" v1="83" v2="102" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="81" v1="103" v2="82" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="80" v1="79" v2="103" v3="104" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="81" v1="80" v2="103" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="78" v1="104" v2="79" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="77" v1="104" v2="78" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="76" v1="104" v2="77" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="75" v1="104" v2="76" r0="42" g0="212" b0="255" type="F3" /> +<poly v0="25" v1="28" v2="26" v3="27" r0="42" g0="212" b0="255" type="F4" /> +<poly v0="238" v1="236" v2="254" v3="235" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="275" v1="272" v2="278" v3="269" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="278" v1="277" v2="275" v3="276" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="269" v1="268" v2="278" v3="279" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="256" v1="259" v2="257" v3="258" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="273" v1="272" v2="274" v3="275" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="270" v1="269" v2="271" v3="272" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="334" v1="332" v2="338" v3="339" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="336" v1="323" v2="337" r0="81" g0="0" b0="156" type="F3" /> +<poly v0="335" v1="324" v2="336" v3="323" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="325" v1="324" v2="346" v3="335" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="346" v1="345" v2="325" v3="326" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="327" v1="326" v2="344" v3="345" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="327" v1="344" v2="328" v3="343" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="343" v1="342" v2="328" v3="329" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="329" v1="342" v2="330" v3="341" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="340" v1="331" v2="341" v3="330" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="333" v1="332" v2="334" r0="81" g0="0" b0="156" type="F3" /> +<poly v0="332" v1="331" v2="339" v3="340" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="310" v1="309" v2="308" r0="81" g0="0" b0="156" type="F3" /> +<poly v0="311" v1="313" v2="312" r0="81" g0="0" b0="156" type="F3" /> +<poly v0="372" v1="371" v2="382" r0="81" g0="0" b0="156" type="F3" /> +<poly v0="373" v1="375" v2="374" r0="81" g0="0" b0="156" type="F3" /> +<poly v0="261" v1="263" v2="262" r0="81" g0="0" b0="156" type="F3" /> +<poly v0="264" v1="263" v2="260" v3="261" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="267" v1="265" v2="260" v3="264" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="414" v1="415" v2="245" v3="426" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="236" v1="238" v2="237" r0="81" g0="0" b0="156" type="F3" /> +<poly v0="247" v1="243" v2="248" v3="242" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="246" v1="244" v2="247" v3="243" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="235" v1="255" v2="254" r0="81" g0="0" b0="156" type="F3" /> +<poly v0="210" v1="209" v2="230" v3="231" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="217" v1="216" v2="220" v3="221" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="228" v1="227" v2="212" v3="213" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="205" v1="204" v2="232" v3="233" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="211" v1="229" v2="212" v3="228" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="234" v1="233" v2="203" v3="204" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="205" v1="232" v2="206" r0="81" g0="0" b0="156" type="F3" /> +<poly v0="232" v1="231" v2="207" v3="208" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="208" v1="231" v2="209" r0="81" g0="0" b0="156" type="F3" /> +<poly v0="211" v1="210" v2="229" v3="230" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="323" v1="334" v2="337" v3="338" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="399" v1="398" v2="383" r0="81" g0="0" b0="156" type="F3" /> +<poly v0="382" v1="375" v2="372" v3="373" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="384" v1="386" v2="385" r0="81" g0="0" b0="156" type="F3" /> +<poly v0="359" v1="347" v2="360" v3="358" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="348" v1="347" v2="370" v3="359" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="349" v1="348" v2="369" v3="370" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="350" v1="349" v2="368" v3="369" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="367" v1="351" v2="368" v3="350" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="367" v1="366" v2="351" v3="352" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="353" v1="352" v2="365" v3="366" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="364" v1="354" v2="365" v3="353" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="364" v1="363" v2="354" v3="355" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="363" v1="362" v2="355" v3="356" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="362" v1="361" v2="356" v3="357" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="358" v1="357" v2="360" v3="361" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="377" v1="380" v2="378" v3="379" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="377" v1="376" v2="380" v3="381" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="382" v1="381" v2="375" v3="376" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="398" v1="397" v2="386" v3="387" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="388" v1="387" v2="396" v3="397" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="396" v1="395" v2="388" v3="389" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="395" v1="394" v2="389" v3="390" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="391" v1="390" v2="393" v3="394" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="391" v1="393" v2="392" v3="399" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="392" v1="399" v2="383" r0="81" g0="0" b0="156" type="F3" /> +<poly v0="200" v1="334" v2="322" v3="323" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="321" v1="320" v2="304" v3="319" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="318" v1="400" v2="319" v3="304" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="317" v1="401" v2="318" v3="400" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="316" v1="402" v2="317" v3="401" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="428" v1="403" v2="316" v3="402" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="403" v1="428" v2="305" v3="427" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="306" v1="305" v2="315" v3="427" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="315" v1="314" v2="306" v3="307" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="308" v1="307" v2="313" v3="314" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="267" v1="266" v2="265" r0="81" g0="0" b0="156" type="F3" /> +<poly v0="285" v1="284" v2="298" v3="299" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="286" v1="285" v2="297" v3="298" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="287" v1="286" v2="296" v3="297" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="288" v1="287" v2="295" v3="296" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="289" v1="288" v2="294" v3="295" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="429" v1="430" v2="294" v3="289" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="430" v1="429" v2="290" v3="293" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="291" v1="290" v2="292" v3="293" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="284" v1="283" v2="299" v3="300" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="283" v1="282" v2="300" v3="301" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="282" v1="281" v2="301" v3="302" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="302" v1="281" v2="303" v3="280" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="245" v1="426" v2="404" v3="425" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="424" v1="405" v2="425" v3="404" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="424" v1="423" v2="405" v3="406" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="423" v1="422" v2="406" v3="407" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="422" v1="421" v2="407" v3="408" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="421" v1="420" v2="408" v3="409" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="420" v1="419" v2="409" v3="410" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="419" v1="418" v2="410" v3="411" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="418" v1="417" v2="411" v3="412" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="417" v1="416" v2="412" v3="413" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="414" v1="413" v2="415" v3="416" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="252" v1="250" v2="240" v3="241" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="238" v1="254" v2="239" v3="253" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="240" v1="239" v2="252" v3="253" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="249" v1="251" v2="250" v3="241" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="251" v1="249" v2="242" v3="248" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="219" v1="218" v2="220" v3="217" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="227" v1="226" v2="213" v3="214" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="226" v1="225" v2="214" v3="215" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="216" v1="215" v2="224" v3="225" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="216" v1="222" v2="221" r0="81" g0="0" b0="156" type="F3" /> +<poly v0="222" v1="216" v2="223" r0="81" g0="0" b0="156" type="F3" /> +<poly v0="224" v1="223" v2="216" r0="81" g0="0" b0="156" type="F3" /> +<poly v0="206" v1="232" v2="207" r0="81" g0="0" b0="156" type="F3" /> +<poly v0="383" v1="398" v2="384" v3="386" r0="81" g0="0" b0="156" type="F4" /> +<poly v0="311" v1="310" v2="313" v3="308" r0="81" g0="0" b0="156" type="F4" /> +</primitives> +</model>
\ No newline at end of file diff --git a/examples/n00bdemo/data/n00blogo-pixel.png b/examples/n00bdemo/data/n00blogo-pixel.png Binary files differnew file mode 100644 index 0000000..db7aa89 --- /dev/null +++ b/examples/n00bdemo/data/n00blogo-pixel.png diff --git a/examples/n00bdemo/data/n00blogo-pixel.tim b/examples/n00bdemo/data/n00blogo-pixel.tim Binary files differnew file mode 100644 index 0000000..c372593 --- /dev/null +++ b/examples/n00bdemo/data/n00blogo-pixel.tim diff --git a/examples/n00bdemo/data/petscum.smd b/examples/n00bdemo/data/petscum.smd Binary files differnew file mode 100644 index 0000000..9a1c8eb --- /dev/null +++ b/examples/n00bdemo/data/petscum.smd diff --git a/examples/n00bdemo/data/petscum.smx b/examples/n00bdemo/data/petscum.smx new file mode 100644 index 0000000..8f1b9e5 --- /dev/null +++ b/examples/n00bdemo/data/petscum.smx @@ -0,0 +1,1093 @@ +<model version="1"> + <vertices count="282"> + <v x="4.1127849" y="-0" z="-3.202786"/> + <v x="3.198833" y="-0" z="-3.202786"/> + <v x="2.2848811" y="-0" z="-3.202786"/> + <v x="1.370929" y="-0" z="-3.202786"/> + <v x="0.456976" y="-0" z="-3.202786"/> + <v x="-0.456976" y="-0" z="-3.202786"/> + <v x="-1.370928" y="-0" z="-3.202786"/> + <v x="-2.2848811" y="-0" z="-3.202786"/> + <v x="-3.198833" y="-0" z="-3.202786"/> + <v x="-4.1127858" y="-0" z="-3.202786"/> + <v x="4.1127849" y="-0" z="-2.2888329"/> + <v x="3.198833" y="-0" z="-2.2888329"/> + <v x="2.2848811" y="-0" z="-2.2888329"/> + <v x="1.370929" y="-0" z="-2.2888329"/> + <v x="0.456976" y="-0" z="-2.2888329"/> + <v x="-0.456976" y="-0" z="-2.2888329"/> + <v x="-1.370928" y="-0" z="-2.2888329"/> + <v x="-2.2848811" y="-0" z="-2.2888329"/> + <v x="-3.198833" y="-0" z="-2.2888329"/> + <v x="-4.1127858" y="-0" z="-2.2888329"/> + <v x="4.1127849" y="-0" z="-1.374881"/> + <v x="3.198833" y="-0" z="-1.374881"/> + <v x="2.2848811" y="-0" z="-1.374881"/> + <v x="1.370929" y="-0" z="-1.374881"/> + <v x="0.456976" y="-0" z="-1.374881"/> + <v x="-0.456976" y="-0" z="-1.374881"/> + <v x="-1.370928" y="-0" z="-1.374881"/> + <v x="-2.2848811" y="-0" z="-1.374881"/> + <v x="-3.198833" y="-0" z="-1.374881"/> + <v x="-4.1127858" y="-0" z="-1.374881"/> + <v x="4.1127849" y="-0" z="-0.46092799"/> + <v x="3.198833" y="-0.0086759999" z="-0.46092799"/> + <v x="2.2848811" y="-0.0086759999" z="-0.46092799"/> + <v x="1.370929" y="-0" z="-0.46092799"/> + <v x="0.228488" y="-2" z="-0.23243999"/> + <v x="-0.228488" y="-2" z="-0.23243999"/> + <v x="-1.370928" y="-0" z="-0.46092799"/> + <v x="-2.2848811" y="-0.0086759999" z="-0.46092799"/> + <v x="-3.198833" y="-0.0086759999" z="-0.46092799"/> + <v x="-4.1127858" y="-0" z="-0.46092799"/> + <v x="4.1127849" y="-0" z="0.453024"/> + <v x="3.198833" y="-0.0086759999" z="0.453024"/> + <v x="2.2848811" y="-0.0086759999" z="0.453024"/> + <v x="1.370929" y="-0" z="0.453024"/> + <v x="0.228488" y="-2" z="0.224536"/> + <v x="-0.228488" y="-2" z="0.224536"/> + <v x="-1.370928" y="-0" z="0.453024"/> + <v x="-2.2848811" y="-0.0086759999" z="0.453024"/> + <v x="-3.198833" y="-0.0086759999" z="0.453024"/> + <v x="-4.1127858" y="-0" z="0.453024"/> + <v x="4.1127849" y="-0" z="1.366976"/> + <v x="3.198833" y="-0.0086759999" z="1.366976"/> + <v x="2.2848811" y="-0.0086759999" z="1.366976"/> + <v x="1.370929" y="-0" z="1.366976"/> + <v x="0.456976" y="-0" z="1.366976"/> + <v x="-0.456976" y="-0" z="1.366976"/> + <v x="-1.370928" y="-0" z="1.366976"/> + <v x="-2.2848811" y="-0.0086759999" z="1.366976"/> + <v x="-3.198833" y="-0.0086759999" z="1.366976"/> + <v x="-4.1127858" y="-0" z="1.366976"/> + <v x="4.1127849" y="-0" z="2.2809291"/> + <v x="-0.456976" y="-1" z="-5.202785"/> + <v x="0.456976" y="-1" z="-5.202785"/> + <v x="1.370929" y="-0" z="2.2809291"/> + <v x="0.456976" y="-0" z="2.2809291"/> + <v x="-0.456976" y="-0" z="2.2809291"/> + <v x="-1.370928" y="-0" z="2.2809291"/> + <v x="1.370929" y="-1" z="-5.202785"/> + <v x="2.2848811" y="-1" z="-5.202785"/> + <v x="-4.1127858" y="-0" z="2.2809291"/> + <v x="3.198833" y="-1" z="-5.202785"/> + <v x="3.198833" y="-0" z="2.2848811"/> + <v x="-3.198833" y="-0" z="2.2848811"/> + <v x="4.1127849" y="-1" z="-5.202785"/> + <v x="4.1127849" y="-0" z="3.198833"/> + <v x="3.198833" y="-0" z="3.198833"/> + <v x="-3.198833" y="-0" z="3.198833"/> + <v x="-4.1127858" y="-0" z="3.198833"/> + <v x="4.1127849" y="-0" z="4.1127849"/> + <v x="3.198833" y="-0" z="4.1127849"/> + <v x="2.2848811" y="-0" z="4.1127849"/> + <v x="1.370929" y="-0" z="4.1127849"/> + <v x="0.456976" y="-0" z="4.1127849"/> + <v x="-1.370928" y="-0" z="4.1127849"/> + <v x="-2.2848811" y="-0" z="4.1127849"/> + <v x="-3.198833" y="-0" z="4.1127849"/> + <v x="-4.1127858" y="-0" z="4.1127849"/> + <v x="1.370929" y="-1" z="-1.374881"/> + <v x="0.456976" y="-1" z="-1.374881"/> + <v x="-0.456976" y="-1" z="-1.374881"/> + <v x="-1.370928" y="-1" z="-1.374881"/> + <v x="1.370929" y="-1" z="-0.46092799"/> + <v x="0.456976" y="-1" z="-0.46092799"/> + <v x="-0.456976" y="-1" z="-0.46092799"/> + <v x="-1.370928" y="-1" z="-0.46092799"/> + <v x="1.370929" y="-1" z="0.453024"/> + <v x="0.456976" y="-1" z="0.453024"/> + <v x="-0.456976" y="-1" z="0.453024"/> + <v x="-1.370928" y="-1" z="0.453024"/> + <v x="1.370929" y="-1" z="1.366976"/> + <v x="0.456976" y="-1" z="1.366976"/> + <v x="-0.456976" y="-1" z="1.366976"/> + <v x="-1.370928" y="-1" z="1.366976"/> + <v x="4.1127849" y="-1" z="-3.202786"/> + <v x="-4.1127858" y="-1" z="-3.202786"/> + <v x="4.1127849" y="-1" z="-2.2888329"/> + <v x="-4.1127858" y="-1" z="-2.2888329"/> + <v x="4.1127849" y="-1" z="-1.374881"/> + <v x="-4.1127858" y="-1" z="-1.374881"/> + <v x="4.1127849" y="-1" z="-0.46092799"/> + <v x="-4.1127858" y="-1" z="-0.46092799"/> + <v x="4.1127849" y="-1" z="0.453024"/> + <v x="-4.1127858" y="-1" z="0.453024"/> + <v x="4.1127849" y="-1" z="1.366976"/> + <v x="-4.1127858" y="-1" z="1.366976"/> + <v x="4.1127849" y="-1" z="2.2809291"/> + <v x="-4.1127858" y="-1" z="2.2809291"/> + <v x="-4.1127858" y="-0" z="-5.202785"/> + <v x="-3.198833" y="-0" z="-5.202785"/> + <v x="4.1127849" y="-1" z="3.198833"/> + <v x="-4.1127858" y="-1" z="3.198833"/> + <v x="4.1127849" y="-1" z="4.1127849"/> + <v x="3.198833" y="-1" z="4.1127849"/> + <v x="2.2848811" y="-1" z="4.1127849"/> + <v x="1.370929" y="-1" z="4.1127849"/> + <v x="-1.370928" y="-1" z="4.1127849"/> + <v x="-2.2848811" y="-1" z="4.1127849"/> + <v x="-3.198833" y="-1" z="4.1127849"/> + <v x="-4.1127858" y="-1" z="4.1127849"/> + <v x="-0.456976" y="-1" z="-4.1974058"/> + <v x="0.456976" y="-1" z="-4.1974058"/> + <v x="1.370929" y="-1" z="-4.1974058"/> + <v x="2.2848811" y="-1" z="-4.1974058"/> + <v x="-1.370928" y="-1" z="-4.1974058"/> + <v x="-2.2848811" y="-1" z="-4.1974058"/> + <v x="2.2848811" y="-1" z="-3.1985559"/> + <v x="1.370929" y="-1" z="-3.1985559"/> + <v x="0.456976" y="-1" z="-3.1985559"/> + <v x="-0.456976" y="-1" z="-3.1985559"/> + <v x="-1.370928" y="-1" z="-3.1985559"/> + <v x="-2.2848811" y="-1" z="-3.1985559"/> + <v x="-0.456976" y="-0" z="4.1127849"/> + <v x="2.2848811" y="0.001446" z="3.198833"/> + <v x="1.370928" y="0.001446" z="3.198833"/> + <v x="0.456976" y="0.001446" z="3.198833"/> + <v x="0.456976" y="-0" z="5.1127849"/> + <v x="1.370929" y="-0" z="5.1127849"/> + <v x="-1.370928" y="-1" z="5.1127849"/> + <v x="-0.456976" y="-0" z="5.1127849"/> + <v x="-1.370928" y="-0" z="5.1127849"/> + <v x="1.370929" y="-1" z="5.1127849"/> + <v x="-1.370929" y="0.001446" z="3.198833"/> + <v x="0.456976" y="-0" z="6.1127849"/> + <v x="1.370929" y="-0" z="6.1127849"/> + <v x="-1.370928" y="-1" z="6.1127849"/> + <v x="-0.456976" y="-0" z="6.1127849"/> + <v x="-1.370928" y="-0" z="6.1127849"/> + <v x="1.370929" y="-1" z="6.1127849"/> + <v x="-1.370928" y="-0" z="7.1127849"/> + <v x="0.456976" y="-0" z="7.1127849"/> + <v x="1.370929" y="-0" z="7.1127849"/> + <v x="-1.370928" y="-1" z="7.1127849"/> + <v x="-0.456976" y="-0" z="7.1127849"/> + <v x="-0.456976" y="0.001446" z="3.198833"/> + <v x="0.456976" y="-1" z="7.1127849"/> + <v x="1.370929" y="-1" z="7.1127849"/> + <v x="-0.456976" y="-1" z="7.1127849"/> + <v x="4.1127849" y="-0" z="-4.202785"/> + <v x="3.198833" y="-0" z="-4.202785"/> + <v x="2.2848811" y="-0" z="-4.202785"/> + <v x="1.370929" y="-0" z="-4.202785"/> + <v x="0.456976" y="-0" z="-4.202785"/> + <v x="-0.456976" y="-0" z="-4.202785"/> + <v x="-1.370928" y="-0" z="-4.202785"/> + <v x="-2.2848811" y="-0" z="-4.202785"/> + <v x="-3.198833" y="-0" z="-4.202785"/> + <v x="-4.1127858" y="-0" z="-4.202785"/> + <v x="4.1127849" y="-1" z="-4.202785"/> + <v x="-4.1127858" y="-1" z="-4.202785"/> + <v x="4.1127849" y="-2" z="-3.202786"/> + <v x="-4.1127858" y="-2" z="-3.202786"/> + <v x="4.1127849" y="-2" z="-2.2888329"/> + <v x="-4.1127858" y="-2" z="-2.2888329"/> + <v x="4.1127849" y="-2" z="-1.374881"/> + <v x="-4.1127858" y="-2" z="-1.374881"/> + <v x="4.1127849" y="-2" z="-0.46092799"/> + <v x="-4.1127858" y="-2" z="-0.46092799"/> + <v x="4.1127849" y="-2" z="0.453024"/> + <v x="-4.1127858" y="-2" z="0.453024"/> + <v x="4.1127849" y="-2" z="1.366976"/> + <v x="-4.1127858" y="-2" z="1.366976"/> + <v x="4.1127849" y="-2" z="2.2809291"/> + <v x="-4.1127858" y="-2" z="2.2809291"/> + <v x="-2.2848811" y="-0" z="-5.202785"/> + <v x="-1.370928" y="-0" z="-5.202785"/> + <v x="4.1127849" y="-2" z="3.198833"/> + <v x="-4.1127858" y="-2" z="3.198833"/> + <v x="4.1127849" y="-2" z="4.1127849"/> + <v x="3.198833" y="-2" z="4.1127849"/> + <v x="2.2848811" y="-2" z="4.1127849"/> + <v x="-2.2848811" y="0.001446" z="3.198833"/> + <v x="-1.370928" y="-2" z="4.1127849"/> + <v x="-2.2848811" y="-2" z="4.1127849"/> + <v x="-3.198833" y="-2" z="4.1127849"/> + <v x="-4.1127858" y="-2" z="4.1127849"/> + <v x="1.370929" y="-2" z="4.1127849"/> + <v x="-1.370928" y="-2" z="5.1127849"/> + <v x="1.370929" y="-2" z="5.1127849"/> + <v x="-1.370928" y="-2" z="6.1127849"/> + <v x="1.370929" y="-2" z="6.1127849"/> + <v x="-1.370928" y="-2" z="7.1127849"/> + <v x="0.456976" y="-2" z="7.1127849"/> + <v x="1.370929" y="-2" z="7.1127849"/> + <v x="-0.456976" y="-2" z="7.1127849"/> + <v x="4.1127849" y="-2" z="-4.202785"/> + <v x="-4.1127858" y="-2" z="-4.202785"/> + <v x="4.1127849" y="-3" z="-3.202786"/> + <v x="-4.1127858" y="-3" z="-3.202786"/> + <v x="4.1127849" y="-3" z="-2.2888329"/> + <v x="-4.1127858" y="-3" z="-2.2888329"/> + <v x="4.1127849" y="-3" z="-1.374881"/> + <v x="-4.1127858" y="-3" z="-1.374881"/> + <v x="4.1127849" y="-3" z="-0.46092799"/> + <v x="-4.1127858" y="-3" z="-0.46092799"/> + <v x="4.1127849" y="-3" z="0.453024"/> + <v x="-4.1127858" y="-3" z="0.453024"/> + <v x="4.1127849" y="-3" z="1.366976"/> + <v x="-4.1127858" y="-3" z="1.366976"/> + <v x="4.1127849" y="-3" z="2.2809291"/> + <v x="-4.1127858" y="-3" z="2.2809291"/> + <v x="-0.456976" y="-0" z="-5.202785"/> + <v x="0.456976" y="-0" z="-5.202785"/> + <v x="4.1127849" y="-3" z="3.198833"/> + <v x="-4.1127858" y="-3" z="3.198833"/> + <v x="4.1127849" y="-3" z="4.1127849"/> + <v x="3.198833" y="-3" z="4.1127849"/> + <v x="2.2848811" y="-3" z="4.1127849"/> + <v x="-1.370928" y="-3" z="4.1127849"/> + <v x="-2.2848811" y="-3" z="4.1127849"/> + <v x="-3.198833" y="-3" z="4.1127849"/> + <v x="-4.1127858" y="-3" z="4.1127849"/> + <v x="1.370929" y="-3" z="4.1127849"/> + <v x="-1.370928" y="-3" z="5.1127849"/> + <v x="1.370929" y="-3" z="5.1127849"/> + <v x="-1.370928" y="-3" z="6.1127849"/> + <v x="1.370929" y="-3" z="6.1127849"/> + <v x="-1.370928" y="-3" z="7.1127849"/> + <v x="0.456976" y="-3" z="7.1127849"/> + <v x="1.370929" y="-3" z="7.1127849"/> + <v x="-0.456976" y="-3" z="7.1127849"/> + <v x="4.1127849" y="-3" z="-4.202785"/> + <v x="-4.1127858" y="-3" z="-4.202785"/> + <v x="-2.2848811" y="-0" z="2.2848811"/> + <v x="1.370929" y="-0" z="-5.202785"/> + <v x="2.2848811" y="-0" z="-5.202785"/> + <v x="2.2848811" y="-0" z="2.2848811"/> + <v x="3.198833" y="-0" z="-5.202785"/> + <v x="4.1127849" y="-0" z="-5.202785"/> + <v x="-1.370928" y="-1" z="-5.202785"/> + <v x="-2.2848811" y="-1" z="-5.202785"/> + <v x="-3.198833" y="-1" z="-5.202785"/> + <v x="-4.1127858" y="-1" z="-5.202785"/> + <v x="4.1127849" y="-2" z="-5.202785"/> + <v x="3.198833" y="-2" z="-5.202785"/> + <v x="2.2848811" y="-2" z="-5.202785"/> + <v x="1.370929" y="-2" z="-5.202785"/> + <v x="0.456976" y="-2" z="-5.202785"/> + <v x="-0.456976" y="-2" z="-5.202785"/> + <v x="-1.370928" y="-2" z="-5.202785"/> + <v x="-2.2848811" y="-2" z="-5.202785"/> + <v x="-3.198833" y="-2" z="-5.202785"/> + <v x="-4.1127858" y="-2" z="-5.202785"/> + <v x="4.1127849" y="-3" z="-5.202785"/> + <v x="3.198833" y="-3" z="-5.202785"/> + <v x="2.2848811" y="-3" z="-5.202785"/> + <v x="1.370929" y="-3" z="-5.202785"/> + <v x="0.456976" y="-3" z="-5.202785"/> + <v x="-0.456976" y="-3" z="-5.202785"/> + <v x="-1.370928" y="-3" z="-5.202785"/> + <v x="-2.2848811" y="-3" z="-5.202785"/> + <v x="-3.198833" y="-3" z="-5.202785"/> + <v x="-4.1127858" y="-3" z="-5.202785"/> + </vertices> + <normals count="541"> + <v x="-0.70708299" y="-0.70708299" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0.302591" y="-0.90407997" z="0.30176699"/> + <v x="0" y="-0.70558798" z="0.708579"/> + <v x="0" y="-0.70558798" z="0.708579"/> + <v x="0" y="-0.70558798" z="0.708579"/> + <v x="0" y="-0.70558798" z="0.708579"/> + <v x="-0.302591" y="-0.90407997" z="0.30176699"/> + <v x="0" y="-1" z="0"/> + <v x="0.70708299" y="-0.70708299" z="0"/> + <v x="-0.70708299" y="-0.70708299" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0.70708299" y="-0.70708299" z="0"/> + <v x="-0.70625901" y="-0.70793802" z="-0.001679"/> + <v x="0.00116" y="-0.99996901" z="-0.0035399999"/> + <v x="-0.00116" y="-0.99996901" z="-0.0035399999"/> + <v x="0.30005801" y="-0.90450799" z="-0.30292699"/> + <v x="0" y="-0.70708299" z="-0.70708299"/> + <v x="0" y="-0.70708299" z="-0.70708299"/> + <v x="-0.30005801" y="-0.90450799" z="-0.30292699"/> + <v x="0.00116" y="-0.99996901" z="-0.0035399999"/> + <v x="-0.00116" y="-0.99996901" z="-0.0035399999"/> + <v x="0.70625901" y="-0.70793802" z="-0.001679"/> + <v x="-0.70458102" y="-0.70958602" z="-0.001679"/> + <v x="0.0035399999" y="-0.99996901" z="-0.0035399999"/> + <v x="-0.0035399999" y="-0.99996901" z="-0.0035399999"/> + <v x="0.70458102" y="-0.70958602" z="-0.001679"/> + <v x="0.51017803" y="-0.69237298" z="-0.51017803"/> + <v x="-0.51017803" y="-0.69237298" z="-0.51017803"/> + <v x="-0.70458102" y="-0.70958602" z="-0.001679"/> + <v x="0.0035399999" y="-0.99996901" z="-0.0035399999"/> + <v x="-0.0035399999" y="-0.99996901" z="-0.0035399999"/> + <v x="0.70458102" y="-0.70958602" z="-0.001679"/> + <v x="-0.70372599" y="-0.71043998" z="0"/> + <v x="0.0047300002" y="-0.99996901" z="0"/> + <v x="-0.0047300002" y="-0.99996901" z="0"/> + <v x="0.70372599" y="-0.71043998" z="0"/> + <v x="0.51017803" y="-0.69237298" z="0.51017803"/> + <v x="-0.51017803" y="-0.69237298" z="0.51017803"/> + <v x="-0.70372599" y="-0.71043998" z="0"/> + <v x="0.0047300002" y="-0.99996901" z="0"/> + <v x="-0.0047300002" y="-0.99996901" z="0"/> + <v x="0.70372599" y="-0.71043998" z="0"/> + <v x="-0.70458102" y="-0.70961601" z="0.001679"/> + <v x="0.0035399999" y="-0.99996901" z="0.0035399999"/> + <v x="-0.0035399999" y="-0.99996901" z="0.0035399999"/> + <v x="0.29746401" y="-0.90530097" z="0.30320099"/> + <v x="0" y="-0.70708299" z="0.70708299"/> + <v x="0" y="-0.70708299" z="0.70708299"/> + <v x="-0.29746401" y="-0.90530097" z="0.30320099"/> + <v x="0.0035399999" y="-0.99996901" z="0.0035399999"/> + <v x="-0.0035399999" y="-0.99996901" z="0.0035399999"/> + <v x="0.70458102" y="-0.70961601" z="0.001679"/> + <v x="-0.70625901" y="-0.70793802" z="0.001679"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="-0.00119" y="-0.99996901" z="0.001953"/> + <v x="0" y="-0.99996901" z="0.00076299999"/> + <v x="0" y="-0.99996901" z="0.00076299999"/> + <v x="0.00119" y="-0.99996901" z="0.001953"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0.70625901" y="-0.70793802" z="0.001679"/> + <v x="0" y="-0" z="1"/> + <v x="0.00097699999" y="-0.99996901" z="0.0037229999"/> + <v x="-0.00097699999" y="-0.99996901" z="0.0037229999"/> + <v x="-0.70708299" y="-0" z="0.70708299"/> + <v x="-0.70708299" y="-0.70708299" z="0"/> + <v x="-0.00036599999" y="-0.99996901" z="0"/> + <v x="0.00036599999" y="-0.99996901" z="0"/> + <v x="0.70708299" y="-0.70708299" z="0"/> + <v x="-0.57734901" y="-0.57734901" z="-0.57734901"/> + <v x="-0.000275" y="-0.70696098" z="-0.70723599"/> + <v x="-0.000275" y="-0.70668697" z="-0.70751101"/> + <v x="-0.30140099" y="-0.90426302" z="-0.30237699"/> + <v x="0" y="-0.99996901" z="-0.00076299999"/> + <v x="0.30140099" y="-0.90426302" z="-0.30237699"/> + <v x="0.000275" y="-0.70668697" z="-0.70751101"/> + <v x="0.000275" y="-0.70696098" z="-0.70723599"/> + <v x="0.57734901" y="-0.57734901" z="-0.57734901"/> + <v x="0.57734901" y="-0.57734901" z="-0.57734901"/> + <v x="0" y="-0.70708299" z="-0.70708299"/> + <v x="0" y="-0.70708299" z="-0.70708299"/> + <v x="-0.57734901" y="-0.57734901" z="-0.57734901"/> + <v x="0.70708299" y="-0.70708299" z="0"/> + <v x="0.233955" y="-0.943663" z="-0.233955"/> + <v x="-0.233955" y="-0.943663" z="-0.233955"/> + <v x="-0.70708299" y="-0.70708299" z="0"/> + <v x="0.70708299" y="-0.70708299" z="0"/> + <v x="0.233955" y="-0.943663" z="0.233955"/> + <v x="-0.233955" y="-0.943663" z="0.233955"/> + <v x="-0.70708299" y="-0.70708299" z="0"/> + <v x="0.57734901" y="-0.57734901" z="0.57734901"/> + <v x="0" y="-0.70708299" z="0.70708299"/> + <v x="0" y="-0.70708299" z="0.70708299"/> + <v x="-0.57734901" y="-0.57734901" z="0.57734901"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="0.57734901" y="-0.57734901" z="0.57734901"/> + <v x="0" y="-0.70708299" z="0.70708299"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-0.70708299" y="-0" z="-0.70708299"/> + <v x="0" y="-0" z="-1"/> + <v x="0" y="-0" z="-1"/> + <v x="-0.70708299" y="-0" z="-0.70708299"/> + <v x="0.70708299" y="-0" z="-0.70708299"/> + <v x="0" y="-0" z="-1"/> + <v x="0" y="-0" z="-1"/> + <v x="0.70708299" y="-0" z="-0.70708299"/> + <v x="0" y="-0.70900601" z="-0.70519102"/> + <v x="0" y="-0.70900601" z="-0.70519102"/> + <v x="0" y="-0.70900601" z="-0.70519102"/> + <v x="0.57762402" y="-0.57875299" z="-0.57564002"/> + <v x="0" y="-0.70900601" z="-0.70519102"/> + <v x="-0.57762402" y="-0.57875299" z="-0.57564002"/> + <v x="0.57710499" y="-0.57621998" z="0.57866102"/> + <v x="0" y="-0.70558798" z="0.708579"/> + <v x="0" y="-0.70558798" z="0.708579"/> + <v x="0" y="-0.70558798" z="0.708579"/> + <v x="0" y="-0.70558798" z="0.708579"/> + <v x="-0.57710499" y="-0.57621998" z="0.57866102"/> + <v x="0" y="-0.99996901" z="-0.00076299999"/> + <v x="-0.00036599999" y="-0.99996901" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="-0.70708299" y="-0.70708299" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0.70708299" y="-0.70708299" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="-0.70708299" y="-0.70708299" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0.70708299" y="-0.70708299" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="0.57734901" y="-0.57734901" z="-0.57734901"/> + <v x="0" y="-0.70708299" z="-0.70708299"/> + <v x="-0.57734901" y="-0.57734901" z="-0.57734901"/> + <v x="0.70708299" y="-0" z="-0.70708299"/> + <v x="0" y="-0.70708299" z="-0.70708299"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-0" z="-1"/> + <v x="-0.70708299" y="-0" z="-0.70708299"/> + <v x="0" y="-0" z="-1"/> + <v x="-0.70708299" y="-0.70708299" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0.30011901" y="-0.90508699" z="-0.301157"/> + <v x="0" y="-0.70900601" z="-0.70519102"/> + <v x="0" y="-0.70900601" z="-0.70519102"/> + <v x="0" y="-0.70900601" z="-0.70519102"/> + <v x="0" y="-0.70900601" z="-0.70519102"/> + <v x="-0.30011901" y="-0.90508699" z="-0.301157"/> + <v x="0" y="-1" z="0"/> + <v x="0.70708299" y="-0.70708299" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="-0.70708299" z="0.70708299"/> + <v x="0" y="-0.70708299" z="0.70708299"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-0.70708299" y="-0" z="-0.70708299"/> + <v x="0" y="-0" z="-1"/> + <v x="0" y="-0" z="-1"/> + <v x="0.00036599999" y="-0.99996901" z="0"/> + <v x="0.70708299" y="-0" z="-0.70708299"/> + <v x="0" y="-0" z="-1"/> + <v x="0" y="-0" z="-1"/> + <v x="0.70708299" y="-0" z="-0.70708299"/> + <v x="-0.70708299" y="-0" z="-0.70708299"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="0.70708299" y="-0" z="-0.70708299"/> + <v x="0" y="-0" z="-1"/> + <v x="-0.70708299" y="-0" z="-0.70708299"/> + <v x="0" y="-0" z="-1"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="-0.70708299" z="0.70708299"/> + <v x="0" y="-0.70708299" z="0.70708299"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-0.70708299" y="-0" z="-0.70708299"/> + <v x="0" y="-0" z="-1"/> + <v x="0" y="-0" z="-1"/> + <v x="0.70708299" y="-0" z="-0.70708299"/> + <v x="0" y="-0" z="-1"/> + <v x="0" y="-0" z="-1"/> + <v x="0.70708299" y="-0" z="-0.70708299"/> + <v x="-0.70708299" y="-0" z="-0.70708299"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="0.70708299" y="-0" z="-0.70708299"/> + <v x="0" y="-0" z="-1"/> + <v x="-0.70708299" y="-0" z="-0.70708299"/> + <v x="0" y="-0" z="-1"/> + <v x="-1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="0.001373" y="-0.99996901" z="0.0041200002"/> + <v x="0" y="-0.70708299" z="0.70708299"/> + <v x="0" y="-0.70708299" z="0.70708299"/> + <v x="-0.001373" y="-0.99996901" z="0.0041200002"/> + <v x="0" y="-0.70708299" z="0.70708299"/> + <v x="-0.57734901" y="-0.57734901" z="0.57734901"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0.70708299" y="-0" z="0.70708299"/> + <v x="-0.70708299" y="-0" z="0.70708299"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0.70708299" y="-0" z="0.70708299"/> + <v x="-0.70708299" y="-0" z="0.70708299"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0.70708299" y="-0" z="0.70708299"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="-0.0047459998" y="-0.99997801" z="-0.0047459998"/> + <v x="0.97487599" y="-0.222748" z="0"/> + <v x="0" y="-0.999955" z="-0.0094919996"/> + <v x="-0.0047459998" y="-0.99997699" z="-0.0047459998"/> + <v x="0.0047459998" y="-0.99997801" z="-0.0047459998"/> + <v x="0" y="-0.999955" z="-0.0094919996"/> + <v x="0" y="-0" z="1"/> + <v x="0.0047459998" y="-0.99997801" z="-0.0047459998"/> + <v x="0" y="0" z="-1"/> + <v x="0" y="-1" z="0"/> + <v x="-0.0094919996" y="-0.999955" z="0"/> + <v x="0" y="-0.222748" z="-0.97487599"/> + <v x="0" y="-1" z="0"/> + <v x="-0.0094919996" y="-0.999955" z="0"/> + <v x="0.0094919996" y="-0.999955" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="0" z="-1"/> + <v x="0.0094919996" y="-0.999955" z="0"/> + <v x="-0.97487599" y="-0.222748" z="0"/> + <v x="0.0094919996" y="-0.999955" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-0.0094919996" y="-0.999955" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="-0.0094919996" y="-0.999955" z="0"/> + <v x="0.0094919996" y="-0.999955" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0.0047559999" y="-0.99997699" z="0.0047360002"/> + <v x="0" y="-0.999955" z="0.009451"/> + <v x="0" y="-1" z="0"/> + <v x="0.0047559999" y="-0.99997801" z="0.0047360002"/> + <v x="0" y="-1" z="0"/> + <v x="-0.0047559999" y="-0.99997699" z="0.0047360002"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-0.999955" z="0.009451"/> + <v x="-0.0047559999" y="-0.99997801" z="0.0047360002"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-0.00538" z="-0.99998599"/> + <v x="0.00079100003" y="-0.99999899" z="0.00079100003"/> + <v x="0" y="0.0042300001" z="0.999991"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-0.00538" z="-0.99998599"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="0.0042300001" z="0.999991"/> + <v x="0" y="-0.99999899" z="-0.0015820001"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-0.99999899" z="-0.0015820001"/> + <v x="0.00079100003" y="-0.99999899" z="-0.00079100003"/> + <v x="0" y="-0.99999899" z="-0.0015820001"/> + <v x="0" y="-0.99999899" z="-0.0015820001"/> + <v x="-0.00079100003" y="-0.99999899" z="-0.00079100003"/> + <v x="0" y="-0.99999899" z="-0.0015820001"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="0" z="-1"/> + <v x="0" y="-0" z="1"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="0" y="-0.222748" z="0.97487599"/> + <v x="0" y="-0" z="1"/> + <v x="-1" y="0" z="0"/> + <v x="0" y="0" z="-1"/> + <v x="-1" y="0" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="0" y="0" z="-1"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="0" z="-1"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="0" y="-1" z="-0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="1" y="-0" z="-0"/> + <v x="0" y="-1" z="-0"/> + <v x="0" y="-0" z="1"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="0" y="0" z="-1"/> + <v x="0" y="0" z="-1"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="-0" z="1"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="0" z="-1"/> + <v x="0" y="-1" z="-0"/> + <v x="0" y="-1" z="-0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="-0.00079100003" y="-0.99999899" z="0.00079100003"/> + <v x="0" y="-1" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="0" y="0.0042300001" z="0.999991"/> + <v x="0" y="-0.00538" z="-0.99998599"/> + <v x="0" y="0.0042300001" z="0.999991"/> + <v x="0" y="-0.00538" z="-0.99998599"/> + <v x="0" y="0.0042300001" z="0.999991"/> + <v x="0" y="-0.00538" z="-0.99998599"/> + <v x="-1" y="-0" z="-0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-0.99999899" z="0.001575"/> + <v x="0" y="-1" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="-0.99999899" z="0.001575"/> + <v x="0" y="-1" z="0"/> + <v x="-1" y="-0" z="-0"/> + <v x="0" y="-0.99999899" z="0.001575"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="0" y="-1" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="0" z="-1"/> + <v x="0" y="0" z="-1"/> + <v x="-1" y="-0" z="-0"/> + <v x="0" y="0" z="-1"/> + <v x="0" y="-1" z="-0"/> + <v x="0" y="-1" z="-0"/> + <v x="0" y="-1" z="-0"/> + <v x="-1" y="-0" z="0"/> + <v x="0" y="-0" z="1"/> + <v x="-1" y="0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="-1" z="-0"/> + <v x="0" y="0" z="-1"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="0" y="0" z="-1"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="0" y="-1" z="-0"/> + <v x="3.0000001e-006" y="-0.99999899" z="0.001579"/> + <v x="0" y="0" z="-1"/> + <v x="-1" y="0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="0" z="-1"/> + <v x="-1" y="0" z="0"/> + <v x="0" y="0" z="-1"/> + <v x="0" y="0" z="-1"/> + <v x="-1" y="0" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="0" z="-1"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="0" z="-1"/> + <v x="-1" y="0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="-1" z="-0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="0" y="-1" z="-0"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="0" z="-1"/> + <v x="0" y="0" z="-1"/> + <v x="-1" y="0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="0" z="-1"/> + <v x="0" y="0" z="-1"/> + <v x="-1" y="0" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="0" y="0" z="-1"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="0" z="-1"/> + <v x="0" y="0" z="-1"/> + <v x="-1" y="0" z="0"/> + <v x="-1" y="-0" z="0"/> + <v x="0" y="0" z="-1"/> + <v x="-1" y="0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="-1" z="-0"/> + <v x="-1" y="0" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="-3.0000001e-006" y="-0.99999899" z="0.001579"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="-1" z="-0"/> + <v x="-1" y="0" z="0"/> + <v x="0" y="-0" z="1"/> + <v x="1" y="-0" z="-0"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="-0" z="1"/> + <v x="1" y="-0" z="-0"/> + <v x="-1" y="0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="-1" y="0" z="0"/> + <v x="1" y="-0" z="-0"/> + <v x="-1" y="0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="0" z="-1"/> + <v x="1" y="-0" z="0"/> + <v x="1" y="-0" z="0"/> + <v x="0" y="0" z="-1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + <v x="0" y="-0" z="1"/> + </normals> + <textures count="1"> + <texture file="petscum16c"/> + </textures> + <primitives count="259"> + <poly v0="17" v1="16" v2="7" v3="6" n0="282" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="12" v1="11" v2="2" v3="1" n0="283" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="16" v1="15" v2="6" v3="5" n0="284" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="11" v1="10" v2="1" v3="0" n0="285" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="15" v1="14" v2="5" v3="4" n0="286" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="19" v1="18" v2="9" v3="8" n0="287" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="14" v1="13" v2="4" v3="3" n0="288" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="18" v1="17" v2="8" v3="7" n0="289" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="13" v1="12" v2="3" v3="2" n0="290" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="28" v1="27" v2="18" v3="17" n0="291" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="23" v1="22" v2="13" v3="12" n0="292" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="27" v1="26" v2="17" v3="16" n0="293" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="22" v1="21" v2="12" v3="11" n0="294" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="26" v1="25" v2="16" v3="15" n0="295" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="21" v1="20" v2="11" v3="10" n0="296" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="25" v1="24" v2="15" v3="14" n0="297" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="29" v1="28" v2="19" v3="18" n0="298" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="24" v1="23" v2="14" v3="13" n0="299" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="39" v1="38" v2="29" v3="28" n0="300" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="96" v1="92" v2="44" v3="34" n0="301" shading="F" r0="125" g0="126" b0="255" type="F4"/> + <poly v0="38" v1="37" v2="28" v3="27" n0="302" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="33" v1="32" v2="23" v3="22" n0="303" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="37" v1="36" v2="27" v3="26" n0="304" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="32" v1="31" v2="22" v3="21" n0="305" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="99" v1="100" v2="53" v3="54" n0="306" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="64" tv0="32" tu1="95" tv1="32" tu2="64" tv2="63" tu3="95" tv3="63" type="FT4"/> + <poly v0="31" v1="30" v2="21" v3="20" n0="307" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="89" v1="88" v2="25" v3="24" n0="308" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="64" tv0="32" tu1="95" tv1="32" tu2="64" tv2="63" tu3="95" tv3="63" type="FT4"/> + <poly v0="45" v1="44" v2="35" v3="34" n0="309" shading="F" r0="125" g0="126" b0="255" type="F4"/> + <poly v0="49" v1="48" v2="39" v3="38" n0="310" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="92" v1="93" v2="34" v3="35" n0="311" shading="F" r0="125" g0="126" b0="255" type="F4"/> + <poly v0="48" v1="47" v2="38" v3="37" n0="312" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="43" v1="42" v2="33" v3="32" n0="313" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="47" v1="46" v2="37" v3="36" n0="314" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="42" v1="41" v2="32" v3="31" n0="315" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="88" v1="87" v2="24" v3="23" n0="316" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="64" tv0="32" tu1="95" tv1="32" tu2="64" tv2="63" tu3="95" tv3="63" type="FT4"/> + <poly v0="41" v1="40" v2="31" v3="30" n0="317" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="93" v1="97" v2="35" v3="45" n0="318" shading="F" r0="125" g0="126" b0="255" type="F4"/> + <poly v0="51" v1="50" v2="41" v3="40" n0="319" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="91" v1="95" v2="33" v3="43" n0="320" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="64" tv0="32" tu1="95" tv1="32" tu2="64" tv2="63" tu3="95" tv3="63" type="FT4"/> + <poly v0="59" v1="58" v2="49" v3="48" n0="321" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="87" v1="91" v2="23" v3="33" n0="322" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="64" tv0="32" tu1="95" tv1="32" tu2="64" tv2="63" tu3="95" tv3="63" type="FT4"/> + <poly v0="58" v1="57" v2="48" v3="47" n0="323" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="53" v1="52" v2="43" v3="42" n0="324" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="57" v1="56" v2="47" v3="46" n0="325" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="52" v1="51" v2="42" v3="41" n0="326" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="252" v1="66" v2="57" v3="56" n0="327" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="255" v1="71" v2="52" v3="51" n0="328" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="66" v1="65" v2="56" v3="55" n0="329" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="71" v1="60" v2="51" v3="50" n0="330" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="65" v1="64" v2="55" v3="54" n0="331" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="69" v1="72" v2="59" v3="58" n0="332" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="64" v1="63" v2="54" v3="53" n0="333" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="72" v1="252" v2="58" v3="57" n0="334" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="63" v1="255" v2="53" v3="52" n0="335" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="270" v1="271" v2="260" v3="261" n0="336" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="269" v1="270" v2="259" v3="260" n0="337" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="268" v1="269" v2="258" v3="259" n0="338" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="267" v1="268" v2="61" v3="258" n0="339" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="266" v1="267" v2="62" v3="61" n0="340" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="265" v1="266" v2="67" v3="62" n0="341" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="258" v1="259" v2="194" v3="193" n0="342" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="70" v1="68" v2="256" v3="254" n0="343" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="260" v1="261" v2="118" v3="117" n0="344" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="77" v1="76" v2="69" v3="72" n0="345" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="130" v1="131" v2="171" v3="170" n0="346" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="76" v1="200" v2="72" v3="252" n0="347" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="137" v1="138" v2="4" v3="5" n0="348" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="132" v1="135" v2="169" v3="2" n0="349" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="139" v1="138" v2="133" v3="129" n0="350" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="127" tv0="32" tu1="96" tv1="32" tu2="127" tv2="63" tu3="96" tv3="63" type="FT4"/> + <poly v0="129" v1="130" v2="172" v3="171" n0="351" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="75" v1="74" v2="71" v3="60" n0="352" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="138" v1="139" v2="5" v3="6" n0="353" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="141" v1="82" v2="163" v3="144" n0="354" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="86" v1="85" v2="77" v3="76" n0="355" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="82" v1="81" v2="144" v3="143" n0="356" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="85" v1="84" v2="76" v3="200" n0="357" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="81" v1="80" v2="143" v3="142" n0="358" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="84" v1="83" v2="200" v3="151" n0="359" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="80" v1="79" v2="142" v3="75" n0="360" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="83" v1="141" v2="151" v3="163" n0="361" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="79" v1="78" v2="75" v3="74" n0="362" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="92" v1="91" v2="88" v3="87" n0="363" shading="F" r0="255" g0="249" b0="10" type="F4"/> + <poly v0="94" v1="93" v2="90" v3="89" n0="364" shading="F" r0="255" g0="249" b0="10" type="F4"/> + <poly v0="93" v1="92" v2="89" v3="88" n0="365" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="127" tv0="32" tu1="96" tv1="32" tu2="127" tv2="63" tu3="96" tv3="63" type="FT4"/> + <poly v0="96" v1="95" v2="92" v3="91" n0="366" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="96" tv0="32" tu1="96" tv1="63" tu2="127" tv2="32" tu3="127" tv3="63" type="FT4"/> + <poly v0="98" v1="97" v2="94" v3="93" n0="367" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="127" tv0="63" tu1="127" tv1="32" tu2="96" tv2="63" tu3="96" tv3="32" type="FT4"/> + <poly v0="102" v1="101" v2="98" v3="97" n0="368" shading="F" r0="255" g0="249" b0="10" type="F4"/> + <poly v0="101" v1="100" v2="97" v3="96" n0="369" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="96" tv0="63" tu1="127" tv1="63" tu2="96" tv2="32" tu3="127" tv3="32" type="FT4"/> + <poly v0="100" v1="99" v2="96" v3="95" n0="370" shading="F" r0="255" g0="249" b0="10" type="F4"/> + <poly v0="90" v1="89" v2="26" v3="25" n0="371" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="64" tv0="32" tu1="95" tv1="32" tu2="64" tv2="63" tu3="95" tv3="63" type="FT4"/> + <poly v0="100" v1="101" v2="54" v3="55" n0="372" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="64" tv0="32" tu1="95" tv1="32" tu2="64" tv2="63" tu3="95" tv3="63" type="FT4"/> + <poly v0="95" v1="99" v2="43" v3="53" n0="373" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="64" tv0="32" tu1="95" tv1="32" tu2="64" tv2="63" tu3="95" tv3="63" type="FT4"/> + <poly v0="94" v1="90" v2="36" v3="26" n0="374" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="64" tv0="32" tu1="95" tv1="32" tu2="64" tv2="63" tu3="95" tv3="63" type="FT4"/> + <poly v0="98" v1="94" v2="46" v3="36" n0="375" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="64" tv0="32" tu1="95" tv1="32" tu2="64" tv2="63" tu3="95" tv3="63" type="FT4"/> + <poly v0="102" v1="98" v2="56" v3="46" n0="376" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="64" tv0="32" tu1="95" tv1="32" tu2="64" tv2="63" tu3="95" tv3="63" type="FT4"/> + <poly v0="97" v1="96" v2="45" v3="44" n0="377" shading="F" r0="125" g0="126" b0="255" type="F4"/> + <poly v0="101" v1="102" v2="55" v3="56" n0="378" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="64" tv0="32" tu1="95" tv1="32" tu2="64" tv2="63" tu3="95" tv3="63" type="FT4"/> + <poly v0="115" v1="113" v2="60" v3="50" n0="379" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="128" v1="127" v2="86" v3="85" n0="380" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="111" v1="109" v2="40" v3="30" n0="381" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="121" v1="119" v2="78" v3="74" n0="382" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="123" v1="122" v2="80" v3="79" n0="383" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="110" v1="112" v2="39" v3="49" n0="384" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="109" v1="107" v2="30" v3="20" n0="385" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="112" v1="114" v2="49" v3="59" n0="386" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="126" v1="125" v2="84" v3="83" n0="387" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="120" v1="128" v2="77" v3="86" n0="388" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="177" v1="167" v2="103" v3="0" n0="389" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="32" tv0="32" tu1="32" tv1="63" tu2="63" tv2="32" tu3="63" tv3="63" type="FT4"/> + <poly v0="119" v1="115" v2="74" v3="60" n0="390" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="168" v1="169" v2="1" v3="2" n0="391" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="106" v1="108" v2="19" v3="29" n0="392" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="113" v1="111" v2="50" v3="40" n0="393" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="176" v1="178" v2="9" v3="104" n0="394" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="63" tu1="63" tv1="32" tu2="32" tv2="63" tu3="32" tv3="32" type="FT4"/> + <poly v0="175" v1="176" v2="8" v3="9" n0="395" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="67" v1="62" v2="253" v3="231" n0="396" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="108" v1="110" v2="29" v3="39" n0="397" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="107" v1="105" v2="20" v3="10" n0="398" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="124" v1="123" v2="81" v3="80" n0="399" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="127" v1="126" v2="85" v3="84" n0="400" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="116" v1="120" v2="69" v3="77" n0="401" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="61" v1="258" v2="230" v3="194" n0="402" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="104" v1="106" v2="9" v3="19" n0="403" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="122" v1="121" v2="79" v3="78" n0="404" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="167" v1="168" v2="0" v3="1" n0="405" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="174" v1="175" v2="7" v3="8" n0="406" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="114" v1="116" v2="59" v3="69" n0="407" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="105" v1="103" v2="10" v3="0" n0="408" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="140" v1="139" v2="134" v3="133" n0="409" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="64" tv0="32" tu1="95" tv1="32" tu2="64" tv2="63" tu3="95" tv3="63" type="FT4"/> + <poly v0="136" v1="135" v2="131" v3="132" n0="410" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="64" tv0="32" tu1="95" tv1="32" tu2="64" tv2="63" tu3="95" tv3="63" type="FT4"/> + <poly v0="137" v1="136" v2="130" v3="131" n0="411" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="127" tv0="32" tu1="96" tv1="32" tu2="127" tv2="63" tu3="96" tv3="63" type="FT4"/> + <poly v0="142" v1="75" v2="255" v3="71" n0="412" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="138" v1="137" v2="129" v3="130" n0="413" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="64" tv0="32" tu1="95" tv1="32" tu2="64" tv2="63" tu3="95" tv3="63" type="FT4"/> + <poly v0="140" v1="134" v2="7" v3="174" n0="414" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="136" v1="137" v2="3" v3="4" n0="415" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="131" v1="132" v2="170" v3="169" n0="416" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="135" v1="136" v2="2" v3="3" n0="417" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="134" v1="133" v2="174" v3="173" n0="418" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="139" v1="140" v2="6" v3="7" n0="419" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="133" v1="129" v2="173" v3="172" n0="420" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="146" v1="150" v2="81" v3="124" n0="421" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="63" tu1="63" tv1="32" tu2="32" tv2="63" tu3="32" tv3="32" type="FT4"/> + <poly v0="149" v1="148" v2="83" v3="141" n0="422" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="1" tv1="32" tu2="31" tv2="63" tu3="1" tv3="63" type="FT4"/> + <poly v0="144" v1="143" v2="64" v3="63" n0="423" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="145" v1="146" v2="82" v3="81" n0="424" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="1" tv1="32" tu2="31" tv2="63" tu3="1" tv3="63" type="FT4"/> + <poly v0="125" v1="147" v2="83" v3="149" n0="425" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="148" v1="145" v2="141" v3="82" n0="426" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="1" tv1="32" tu2="31" tv2="63" tu3="1" tv3="63" type="FT4"/> + <poly v0="152" v1="153" v2="145" v3="146" n0="427" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="1" tv1="32" tu2="31" tv2="63" tu3="1" tv3="63" type="FT4"/> + <poly v0="155" v1="152" v2="148" v3="145" n0="428" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="1" tv1="32" tu2="31" tv2="63" tu3="1" tv3="63" type="FT4"/> + <poly v0="147" v1="154" v2="149" v3="156" n0="429" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="163" v1="144" v2="65" v3="64" n0="430" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="156" v1="155" v2="149" v3="148" n0="431" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="1" tv1="32" tu2="31" tv2="63" tu3="1" tv3="63" type="FT4"/> + <poly v0="153" v1="157" v2="146" v3="150" n0="432" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="63" tu1="63" tv1="32" tu2="32" tv2="63" tu3="32" tv3="32" type="FT4"/> + <poly v0="151" v1="163" v2="66" v3="65" n0="433" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="158" v1="162" v2="156" v3="155" n0="434" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="1" tv1="32" tu2="31" tv2="63" tu3="1" tv3="63" type="FT4"/> + <poly v0="159" v1="160" v2="152" v3="153" n0="435" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="1" tv1="32" tu2="31" tv2="63" tu3="1" tv3="63" type="FT4"/> + <poly v0="162" v1="159" v2="155" v3="152" n0="436" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="1" tv1="32" tu2="31" tv2="63" tu3="1" tv3="63" type="FT4"/> + <poly v0="154" v1="161" v2="156" v3="158" n0="437" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="166" v1="164" v2="162" v3="159" n0="438" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="128" tv0="32" tu1="159" tv1="32" tu2="128" tv2="63" tu3="159" tv3="63" type="FT4"/> + <poly v0="164" v1="165" v2="159" v3="160" n0="439" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="160" v1="165" v2="153" v3="157" n0="440" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="63" tu1="63" tv1="32" tu2="32" tv2="63" tu3="32" tv3="32" type="FT4"/> + <poly v0="161" v1="166" v2="158" v3="162" n0="441" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="231" v1="230" v2="171" v3="172" n0="442" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="253" v1="231" v2="170" v3="171" n0="443" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="254" v1="253" v2="169" v3="170" n0="444" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="73" v1="257" v2="177" v3="167" n0="445" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="32" tv0="32" tu1="32" tv1="63" tu2="63" tv2="32" tu3="63" tv3="63" type="FT4"/> + <poly v0="73" v1="70" v2="257" v3="256" n0="446" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="181" v1="179" v2="105" v3="103" n0="447" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="192" v1="196" v2="116" v3="120" n0="448" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="180" v1="182" v2="104" v3="106" n0="449" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="195" v1="191" v2="119" v3="115" n0="450" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="183" v1="181" v2="107" v3="105" n0="451" shading="F" r0="106" g0="0" b0="106" texture="0" tu0="96" tv0="0" tu1="127" tv1="0" tu2="96" tv2="31" tu3="127" tv3="31" type="FT4"/> + <poly v0="215" v1="180" v2="178" v3="104" n0="452" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="256" v1="254" v2="168" v3="169" n0="453" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="198" v1="197" v2="122" v3="121" n0="454" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="182" v1="184" v2="106" v3="108" n0="455" shading="F" r0="106" g0="0" b0="106" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="207" v1="205" v2="150" v3="124" n0="456" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="272" v1="262" v2="250" v3="214" n0="457" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="199" v1="198" v2="123" v3="122" n0="458" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="184" v1="186" v2="108" v3="110" n0="459" shading="F" r0="106" g0="0" b0="106" texture="0" tu0="32" tv0="0" tu1="63" tv1="0" tu2="32" tv2="31" tu3="63" tv3="31" type="FT4"/> + <poly v0="179" v1="214" v2="103" v3="177" n0="460" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="118" v1="117" v2="175" v3="176" n0="461" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="200" v1="151" v2="252" v3="66" n0="462" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="205" v1="199" v2="124" v3="123" n0="463" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="185" v1="183" v2="109" v3="107" n0="464" shading="F" r0="106" g0="0" b0="106" texture="0" tu0="64" tv0="0" tu1="95" tv1="0" tu2="64" tv2="31" tu3="95" tv3="31" type="FT4"/> + <poly v0="208" v1="210" v2="154" v3="161" n0="465" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="206" v1="208" v2="147" v3="154" n0="466" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="186" v1="188" v2="110" v3="112" n0="467" shading="F" r0="106" g0="0" b0="106" texture="0" tu0="64" tv0="0" tu1="95" tv1="0" tu2="64" tv2="31" tu3="95" tv3="31" type="FT4"/> + <poly v0="213" v1="211" v2="166" v3="164" n0="468" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="128" tv0="0" tu1="159" tv1="0" tu2="128" tv2="31" tu3="159" tv3="31" type="FT4"/> + <poly v0="187" v1="185" v2="111" v3="109" n0="469" shading="F" r0="106" g0="0" b0="106" texture="0" tu0="32" tv0="0" tu1="63" tv1="0" tu2="32" tv2="31" tu3="63" tv3="31" type="FT4"/> + <poly v0="211" v1="212" v2="164" v3="165" n0="470" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="202" v1="201" v2="126" v3="125" n0="471" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="209" v1="207" v2="157" v3="150" n0="472" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="189" v1="187" v2="113" v3="111" n0="473" shading="F" r0="106" g0="0" b0="106" texture="0" tu0="0" tv0="0" tu1="31" tv1="0" tu2="0" tv2="31" tu3="31" tv3="31" type="FT4"/> + <poly v0="201" v1="206" v2="125" v3="147" n0="474" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="203" v1="202" v2="127" v3="126" n0="475" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="188" v1="190" v2="112" v3="114" n0="476" shading="F" r0="106" g0="0" b0="106" texture="0" tu0="96" tv0="0" tu1="127" tv1="0" tu2="96" tv2="31" tu3="127" tv3="31" type="FT4"/> + <poly v0="204" v1="203" v2="128" v3="127" n0="477" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="191" v1="189" v2="115" v3="113" n0="478" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="196" v1="204" v2="120" v3="128" n0="479" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="257" v1="256" v2="167" v3="168" n0="480" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="190" v1="192" v2="114" v3="116" n0="481" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="212" v1="209" v2="165" v3="157" n0="482" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="197" v1="195" v2="121" v3="119" n0="483" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="193" v1="118" v2="174" v3="175" n0="484" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="259" v1="260" v2="193" v3="118" n0="485" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="210" v1="213" v2="161" v3="166" n0="486" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="236" v1="235" v2="199" v3="198" n0="487" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="216" v1="250" v2="179" v3="214" n0="488" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="221" v1="223" v2="184" v3="186" n0="489" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="247" v1="248" v2="211" v3="212" n0="490" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="241" v1="236" v2="205" v3="199" n0="491" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="222" v1="220" v2="185" v3="183" n0="492" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="248" v1="245" v2="212" v3="209" n0="493" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="238" v1="237" v2="202" v3="201" n0="494" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="223" v1="225" v2="186" v3="188" n0="495" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="246" v1="249" v2="210" v3="213" n0="496" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="239" v1="238" v2="203" v3="202" n0="497" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="224" v1="222" v2="187" v3="185" n0="498" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="262" v1="73" v2="214" v3="177" n0="499" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="240" v1="239" v2="204" v3="203" n0="500" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="226" v1="224" v2="189" v3="187" n0="501" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="233" v1="240" v2="196" v3="204" n0="502" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="225" v1="227" v2="188" v3="190" n0="503" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="194" v1="193" v2="173" v3="174" n0="504" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="234" v1="232" v2="197" v3="195" n0="505" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="228" v1="226" v2="191" v3="189" n0="506" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="143" v1="142" v2="63" v3="255" n0="507" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="227" v1="229" v2="190" v3="192" n0="508" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="230" v1="194" v2="172" v3="173" n0="509" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="32" tu1="0" tv1="32" tu2="31" tv2="63" tu3="0" tv3="63" type="FT4"/> + <poly v0="243" v1="241" v2="207" v3="205" n0="510" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="68" v1="67" v2="254" v3="253" n0="511" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="117" v1="261" v2="176" v3="178" n0="512" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="63" tu1="63" tv1="32" tu2="32" tv2="63" tu3="32" tv3="32" type="FT4"/> + <poly v0="237" v1="242" v2="201" v3="206" n0="513" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="62" v1="61" v2="231" v3="230" n0="514" shading="F" r0="128" g0="128" b0="128" texture="0" tu0="63" tv0="32" tu1="32" tv1="32" tu2="63" tv2="63" tu3="32" tv3="63" type="FT4"/> + <poly v0="271" v1="281" v2="215" v3="251" n0="515" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="218" v1="216" v2="181" v3="179" n0="516" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="242" v1="244" v2="206" v3="208" n0="517" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="229" v1="233" v2="192" v3="196" n0="518" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="217" v1="219" v2="180" v3="182" n0="519" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="245" v1="243" v2="209" v3="207" n0="520" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="232" v1="228" v2="195" v3="191" n0="521" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="261" v1="271" v2="178" v3="215" n0="522" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="220" v1="218" v2="183" v3="181" n0="523" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="244" v1="246" v2="208" v3="210" n0="524" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="235" v1="234" v2="198" v3="197" n0="525" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="251" v1="217" v2="215" v3="180" n0="526" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="219" v1="221" v2="182" v3="184" n0="527" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="249" v1="247" v2="213" v3="211" n0="528" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="262" v1="263" v2="73" v3="70" n0="529" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="263" v1="264" v2="70" v3="68" n0="530" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="264" v1="265" v2="68" v3="67" n0="531" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="272" v1="273" v2="262" v3="263" n0="532" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="273" v1="274" v2="263" v3="264" n0="533" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="274" v1="275" v2="264" v3="265" n0="534" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="275" v1="276" v2="265" v3="266" n0="535" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="276" v1="277" v2="266" v3="267" n0="536" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="277" v1="278" v2="267" v3="268" n0="537" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="278" v1="279" v2="268" v3="269" n0="538" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="279" v1="280" v2="269" v3="270" n0="539" shading="F" r0="204" g0="0" b0="204" type="F4"/> + <poly v0="280" v1="281" v2="270" v3="271" n0="540" shading="F" r0="204" g0="0" b0="204" type="F4"/> + </primitives> +</model> diff --git a/examples/n00bdemo/data/petscum16c.png b/examples/n00bdemo/data/petscum16c.png Binary files differnew file mode 100644 index 0000000..c9d115c --- /dev/null +++ b/examples/n00bdemo/data/petscum16c.png diff --git a/examples/n00bdemo/data/petscum16c.tim b/examples/n00bdemo/data/petscum16c.tim Binary files differnew file mode 100644 index 0000000..18af842 --- /dev/null +++ b/examples/n00bdemo/data/petscum16c.tim diff --git a/examples/n00bdemo/data/psn00blogo.smd b/examples/n00bdemo/data/psn00blogo.smd Binary files differnew file mode 100644 index 0000000..3c1412a --- /dev/null +++ b/examples/n00bdemo/data/psn00blogo.smd diff --git a/examples/n00bdemo/data/psn00blogo.smx b/examples/n00bdemo/data/psn00blogo.smx new file mode 100644 index 0000000..0921b6c --- /dev/null +++ b/examples/n00bdemo/data/psn00blogo.smx @@ -0,0 +1,745 @@ +<!-- Created using Project Scarlet SMX Export Plug-in for Blender --> +<!-- NOTE: If you plan to use this model as a static mesh, it is recommended that you run this file through smxopt --> +<!-- or smxtool to clean up duplicate/unused normals which are kept for animation purposes. --> +<model version="1"> +<vertices count="399"> +<v x="2.160026" y="1.387213" z="-0.000000"/> +<v x="2.160026" y="0.297302" z="-0.000000"/> +<v x="2.494194" y="0.297302" z="-0.000000"/> +<v x="2.494194" y="0.714739" z="-0.000000"/> +<v x="2.573283" y="0.714739" z="-0.000000"/> +<v x="2.881089" y="0.297302" z="-0.000000"/> +<v x="3.282236" y="0.297302" z="-0.000000"/> +<v x="2.868264" y="0.832999" z="-0.000000"/> +<v x="3.305749" y="1.387213" z="-0.000000"/> +<v x="2.882515" y="1.387213" z="-0.000000"/> +<v x="2.573283" y="0.971193" z="-0.000000"/> +<v x="2.494194" y="0.971193" z="-0.000000"/> +<v x="2.494194" y="1.387213" z="-0.000000"/> +<v x="3.273275" y="-1.073374" z="0.000000"/> +<v x="2.885311" y="-1.004977" z="0.000000"/> +<v x="2.930933" y="0.170753" z="-0.000000"/> +<v x="3.220104" y="0.176163" z="-0.000000"/> +<v x="3.224112" y="0.081673" z="-0.000000"/> +<v x="3.243504" y="0.100513" z="-0.000000"/> +<v x="3.270376" y="0.118932" z="-0.000000"/> +<v x="3.311036" y="0.138792" z="-0.000000"/> +<v x="3.367239" y="0.156672" z="-0.000000"/> +<v x="3.440738" y="0.169153" z="-0.000000"/> +<v x="3.568860" y="0.164449" z="-0.000000"/> +<v x="3.673077" y="0.125387" z="-0.000000"/> +<v x="3.753942" y="0.058490" z="-0.000000"/> +<v x="3.812006" y="-0.029716" z="-0.000000"/> +<v x="3.847822" y="-0.132705" z="-0.000000"/> +<v x="3.861941" y="-0.243953" z="-0.000000"/> +<v x="3.854913" y="-0.356935" z="-0.000000"/> +<v x="3.827292" y="-0.465125" z="-0.000000"/> +<v x="3.779628" y="-0.561999" z="-0.000000"/> +<v x="3.712473" y="-0.641032" z="-0.000000"/> +<v x="3.626379" y="-0.695698" z="-0.000000"/> +<v x="3.521898" y="-0.719472" z="-0.000000"/> +<v x="3.442703" y="-0.716422" z="-0.000000"/> +<v x="3.376579" y="-0.701643" z="-0.000000"/> +<v x="3.324118" y="-0.680613" z="-0.000000"/> +<v x="3.285913" y="-0.658809" z="-0.000000"/> +<v x="3.262556" y="-0.641710" z="-0.000000"/> +<v x="3.254639" y="-0.634793" z="-0.000000"/> +<v x="3.421901" y="-0.455816" z="-0.000000"/> +<v x="3.473452" y="-0.453762" z="-0.000000"/> +<v x="3.517834" y="-0.437568" z="-0.000000"/> +<v x="3.554564" y="-0.409808" z="-0.000000"/> +<v x="3.583160" y="-0.373052" z="-0.000000"/> +<v x="3.603137" y="-0.329874" z="-0.000000"/> +<v x="3.614014" y="-0.282846" z="-0.000000"/> +<v x="3.615307" y="-0.234539" z="-0.000000"/> +<v x="3.606534" y="-0.187527" z="-0.000000"/> +<v x="3.587210" y="-0.144381" z="-0.000000"/> +<v x="3.556854" y="-0.107673" z="-0.000000"/> +<v x="3.514982" y="-0.079976" z="-0.000000"/> +<v x="3.461112" y="-0.063862" z="-0.000000"/> +<v x="3.407766" y="-0.063539" z="-0.000000"/> +<v x="3.361372" y="-0.078553" z="-0.000000"/> +<v x="3.322575" y="-0.106102" z="-0.000000"/> +<v x="3.292022" y="-0.143384" z="-0.000000"/> +<v x="3.270358" y="-0.187598" z="-0.000000"/> +<v x="3.258230" y="-0.235941" z="-0.000000"/> +<v x="3.256285" y="-0.285612" z="-0.000000"/> +<v x="3.265167" y="-0.333809" z="-0.000000"/> +<v x="3.285525" y="-0.377730" z="-0.000000"/> +<v x="3.318002" y="-0.414572" z="-0.000000"/> +<v x="3.363245" y="-0.441535" z="-0.000000"/> +<v x="2.393074" y="-1.056605" z="0.000000"/> +<v x="2.252473" y="-1.033098" z="0.000000"/> +<v x="2.136527" y="-0.966035" z="0.000000"/> +<v x="2.045582" y="-0.864101" z="0.000000"/> +<v x="1.979981" y="-0.735979" z="-0.000000"/> +<v x="1.940070" y="-0.590352" z="-0.000000"/> +<v x="1.926191" y="-0.435905" z="-0.000000"/> +<v x="1.938691" y="-0.281321" z="-0.000000"/> +<v x="1.977912" y="-0.135285" z="-0.000000"/> +<v x="2.044200" y="-0.006479" z="-0.000000"/> +<v x="2.137899" y="0.096412" z="-0.000000"/> +<v x="2.259352" y="0.164704" z="-0.000000"/> +<v x="2.408905" y="0.189714" z="-0.000000"/> +<v x="2.549506" y="0.165651" z="-0.000000"/> +<v x="2.662021" y="0.098317" z="-0.000000"/> +<v x="2.747134" y="-0.003660" z="-0.000000"/> +<v x="2.805530" y="-0.131651" z="-0.000000"/> +<v x="2.837894" y="-0.277027" z="-0.000000"/> +<v x="2.844911" y="-0.431159" z="-0.000000"/> +<v x="2.827266" y="-0.585419" z="-0.000000"/> +<v x="2.785643" y="-0.731176" z="-0.000000"/> +<v x="2.720728" y="-0.859802" z="0.000000"/> +<v x="2.633205" y="-0.962668" z="0.000000"/> +<v x="2.523759" y="-1.031145" z="0.000000"/> +<v x="2.394876" y="-0.752470" z="-0.000000"/> +<v x="2.451862" y="-0.740155" z="-0.000000"/> +<v x="2.499995" y="-0.709825" z="-0.000000"/> +<v x="2.538967" y="-0.664700" z="-0.000000"/> +<v x="2.568471" y="-0.608000" z="-0.000000"/> +<v x="2.588199" y="-0.542942" z="-0.000000"/> +<v x="2.597842" y="-0.472747" z="-0.000000"/> +<v x="2.597093" y="-0.400635" z="-0.000000"/> +<v x="2.585642" y="-0.329823" z="-0.000000"/> +<v x="2.563183" y="-0.263531" z="-0.000000"/> +<v x="2.529408" y="-0.204979" z="-0.000000"/> +<v x="2.484006" y="-0.157386" z="-0.000000"/> +<v x="2.426672" y="-0.123971" z="-0.000000"/> +<v x="2.426563" y="-0.123946" z="-0.000000"/> +<v x="2.426456" y="-0.123924" z="-0.000000"/> +<v x="2.426351" y="-0.123903" z="-0.000000"/> +<v x="2.426246" y="-0.123884" z="-0.000000"/> +<v x="2.426142" y="-0.123865" z="-0.000000"/> +<v x="2.426038" y="-0.123847" z="-0.000000"/> +<v x="2.425935" y="-0.123828" z="-0.000000"/> +<v x="2.425831" y="-0.123808" z="-0.000000"/> +<v x="2.425727" y="-0.123787" z="-0.000000"/> +<v x="2.425621" y="-0.123764" z="-0.000000"/> +<v x="2.425514" y="-0.123739" z="-0.000000"/> +<v x="2.425406" y="-0.123710" z="-0.000000"/> +<v x="2.453595" y="-0.166670" z="-0.000000"/> +<v x="2.468052" y="-0.214786" z="-0.000000"/> +<v x="2.470119" y="-0.265904" z="-0.000000"/> +<v x="2.461140" y="-0.317870" z="-0.000000"/> +<v x="2.442458" y="-0.368530" z="-0.000000"/> +<v x="2.415415" y="-0.415732" z="-0.000000"/> +<v x="2.381354" y="-0.457322" z="-0.000000"/> +<v x="2.341620" y="-0.491146" z="-0.000000"/> +<v x="2.297554" y="-0.515050" z="-0.000000"/> +<v x="2.250501" y="-0.526882" z="-0.000000"/> +<v x="2.201802" y="-0.524488" z="-0.000000"/> +<v x="2.152802" y="-0.505713" z="-0.000000"/> +<v x="2.165522" y="-0.545187" z="-0.000000"/> +<v x="2.189623" y="-0.600515" z="-0.000000"/> +<v x="2.227886" y="-0.662427" z="-0.000000"/> +<v x="2.281740" y="-0.716670" z="-0.000000"/> +<v x="2.352613" y="-0.748992" z="-0.000000"/> +<v x="2.394879" y="-0.752479" z="-0.000000"/> +<v x="2.394879" y="-0.752479" z="-0.000000"/> +<v x="2.394879" y="-0.752478" z="-0.000000"/> +<v x="2.394879" y="-0.752478" z="-0.000000"/> +<v x="2.394878" y="-0.752477" z="-0.000000"/> +<v x="2.394878" y="-0.752476" z="-0.000000"/> +<v x="2.394878" y="-0.752475" z="-0.000000"/> +<v x="2.394877" y="-0.752474" z="-0.000000"/> +<v x="2.394877" y="-0.752473" z="-0.000000"/> +<v x="2.394877" y="-0.752472" z="-0.000000"/> +<v x="2.394877" y="-0.752471" z="-0.000000"/> +<v x="2.394877" y="-0.752470" z="-0.000000"/> +<v x="1.343140" y="-1.056474" z="0.000000"/> +<v x="1.199617" y="-1.028318" z="0.000000"/> +<v x="1.081573" y="-0.957227" z="0.000000"/> +<v x="0.989388" y="-0.851955" z="0.000000"/> +<v x="0.923443" y="-0.721251" z="-0.000000"/> +<v x="0.884120" y="-0.573867" z="-0.000000"/> +<v x="0.871798" y="-0.418555" z="-0.000000"/> +<v x="0.886858" y="-0.264067" z="-0.000000"/> +<v x="0.929682" y="-0.119154" z="-0.000000"/> +<v x="1.000649" y="0.007433" z="-0.000000"/> +<v x="1.100142" y="0.106943" z="-0.000000"/> +<v x="1.228540" y="0.170623" z="-0.000000"/> +<v x="1.386225" y="0.189722" z="-0.000000"/> +<v x="1.523178" y="0.160446" z="-0.000000"/> +<v x="1.632764" y="0.089020" z="-0.000000"/> +<v x="1.715528" y="-0.015979" z="-0.000000"/> +<v x="1.772014" y="-0.145973" z="-0.000000"/> +<v x="1.802765" y="-0.292385" z="-0.000000"/> +<v x="1.808325" y="-0.446637" z="-0.000000"/> +<v x="1.789238" y="-0.600153" z="-0.000000"/> +<v x="1.746049" y="-0.744355" z="-0.000000"/> +<v x="1.679300" y="-0.870665" z="0.000000"/> +<v x="1.589536" y="-0.970506" z="0.000000"/> +<v x="1.477301" y="-1.035302" z="0.000000"/> +<v x="1.259709" y="-0.711931" z="-0.000000"/> +<v x="1.247410" y="-0.655915" z="-0.000000"/> +<v x="1.245056" y="-0.600786" z="-0.000000"/> +<v x="1.251732" y="-0.547761" z="-0.000000"/> +<v x="1.266527" y="-0.498059" z="-0.000000"/> +<v x="1.288525" y="-0.452899" z="-0.000000"/> +<v x="1.316815" y="-0.413498" z="-0.000000"/> +<v x="1.350482" y="-0.381074" z="-0.000000"/> +<v x="1.388613" y="-0.356847" z="-0.000000"/> +<v x="1.430295" y="-0.342033" z="-0.000000"/> +<v x="1.474615" y="-0.337851" z="-0.000000"/> +<v x="1.520660" y="-0.345520" z="-0.000000"/> +<v x="1.567515" y="-0.366257" z="-0.000000"/> +<v x="1.560251" y="-0.312256" z="-0.000000"/> +<v x="1.545037" y="-0.259987" z="-0.000000"/> +<v x="1.516649" y="-0.204413" z="-0.000000"/> +<v x="1.470997" y="-0.155689" z="-0.000000"/> +<v x="1.403993" y="-0.123971" z="-0.000000"/> +<v x="1.326428" y="-0.114900" z="-0.000000"/> +<v x="1.261335" y="-0.127543" z="-0.000000"/> +<v x="1.208546" y="-0.158554" z="-0.000000"/> +<v x="1.167896" y="-0.204585" z="-0.000000"/> +<v x="1.139217" y="-0.262289" z="-0.000000"/> +<v x="1.122345" y="-0.328320" z="-0.000000"/> +<v x="1.117111" y="-0.399330" z="-0.000000"/> +<v x="1.123351" y="-0.471973" z="-0.000000"/> +<v x="1.140897" y="-0.542902" z="-0.000000"/> +<v x="1.169583" y="-0.608769" z="-0.000000"/> +<v x="1.209242" y="-0.666228" z="-0.000000"/> +<v x="-0.204108" y="-0.847849" z="0.000000"/> +<v x="-0.204108" y="0.188720" z="-0.000000"/> +<v x="0.144178" y="0.188720" z="-0.000000"/> +<v x="0.130260" y="0.084641" z="-0.000000"/> +<v x="0.119193" y="-0.058248" z="-0.000000"/> +<v x="0.121089" y="-0.214107" z="-0.000000"/> +<v x="0.146062" y="-0.357096" z="-0.000000"/> +<v x="0.204227" y="-0.461372" z="-0.000000"/> +<v x="0.305696" y="-0.501097" z="-0.000000"/> +<v x="0.405202" y="-0.460174" z="-0.000000"/> +<v x="0.460182" y="-0.356346" z="-0.000000"/> +<v x="0.481233" y="-0.214577" z="-0.000000"/> +<v x="0.478952" y="-0.059833" z="-0.000000"/> +<v x="0.463933" y="0.082921" z="-0.000000"/> +<v x="0.446774" y="0.188720" z="-0.000000"/> +<v x="0.792188" y="0.188720" z="-0.000000"/> +<v x="0.794228" y="0.085779" z="-0.000000"/> +<v x="0.796191" y="-0.057222" z="-0.000000"/> +<v x="0.791842" y="-0.222029" z="-0.000000"/> +<v x="0.774945" y="-0.390384" z="-0.000000"/> +<v x="0.739264" y="-0.544031" z="-0.000000"/> +<v x="0.678564" y="-0.664715" z="-0.000000"/> +<v x="0.601917" y="-0.733071" z="-0.000000"/> +<v x="0.505932" y="-0.773535" z="-0.000000"/> +<v x="0.399447" y="-0.789553" z="-0.000000"/> +<v x="0.291300" y="-0.784575" z="-0.000000"/> +<v x="0.190328" y="-0.762049" z="-0.000000"/> +<v x="0.105368" y="-0.725423" z="-0.000000"/> +<v x="0.105368" y="-0.847849" z="0.000000"/> +<v x="-0.520541" y="-1.100440" z="0.000000"/> +<v x="-1.222236" y="-1.100440" z="0.000000"/> +<v x="-1.388823" y="-1.078859" z="0.000000"/> +<v x="-1.535777" y="-1.019875" z="0.000000"/> +<v x="-1.658346" y="-0.932126" z="0.000000"/> +<v x="-1.751780" y="-0.824251" z="0.000000"/> +<v x="-1.811325" y="-0.704889" z="-0.000000"/> +<v x="-1.832229" y="-0.582678" z="-0.000000"/> +<v x="-1.832229" y="-0.141914" z="-0.000000"/> +<v x="-1.811049" y="-0.016212" z="-0.000000"/> +<v x="-1.752991" y="0.100210" z="-0.000000"/> +<v x="-1.666286" y="0.201299" z="-0.000000"/> +<v x="-1.559160" y="0.281000" z="-0.000000"/> +<v x="-1.439841" y="0.333261" z="-0.000000"/> +<v x="-1.316556" y="0.352027" z="-0.000000"/> +<v x="-1.078258" y="0.352027" z="-0.000000"/> +<v x="-1.017293" y="0.361337" z="-0.000000"/> +<v x="-0.962278" y="0.388070" z="-0.000000"/> +<v x="-0.915503" y="0.430426" z="-0.000000"/> +<v x="-0.879257" y="0.486605" z="-0.000000"/> +<v x="-0.855830" y="0.554807" z="-0.000000"/> +<v x="-0.847512" y="0.633234" z="-0.000000"/> +<v x="-0.847512" y="0.821709" z="-0.000000"/> +<v x="-0.857974" y="0.894956" z="-0.000000"/> +<v x="-0.886233" y="0.969039" z="-0.000000"/> +<v x="-0.927594" y="1.037648" z="-0.000000"/> +<v x="-0.977363" y="1.094469" z="-0.000000"/> +<v x="-1.030847" y="1.133190" z="-0.000000"/> +<v x="-1.083352" y="1.147501" z="-0.000000"/> +<v x="-1.742169" y="1.147501" z="-0.000000"/> +<v x="-1.742169" y="1.427430" z="-0.000000"/> +<v x="-0.847068" y="1.427430" z="-0.000000"/> +<v x="-0.759579" y="1.412441" z="-0.000000"/> +<v x="-0.665984" y="1.370690" z="-0.000000"/> +<v x="-0.576099" y="1.307000" z="-0.000000"/> +<v x="-0.499742" y="1.226197" z="-0.000000"/> +<v x="-0.446729" y="1.133104" z="-0.000000"/> +<v x="-0.426877" y="1.032546" z="-0.000000"/> +<v x="-0.426877" y="0.258754" z="-0.000000"/> +<v x="-0.439338" y="0.189294" z="-0.000000"/> +<v x="-0.475080" y="0.115940" z="-0.000000"/> +<v x="-0.531639" y="0.046061" z="-0.000000"/> +<v x="-0.606555" y="-0.012975" z="-0.000000"/> +<v x="-0.697362" y="-0.053800" z="-0.000000"/> +<v x="-0.801601" y="-0.069046" z="-0.000000"/> +<v x="-1.124276" y="-0.069046" z="-0.000000"/> +<v x="-1.183344" y="-0.080273" z="-0.000000"/> +<v x="-1.239305" y="-0.110220" z="-0.000000"/> +<v x="-1.288755" y="-0.153281" z="-0.000000"/> +<v x="-1.328290" y="-0.203855" z="-0.000000"/> +<v x="-1.354508" y="-0.256336" z="-0.000000"/> +<v x="-1.364003" y="-0.305123" z="-0.000000"/> +<v x="-1.364003" y="-0.536868" z="-0.000000"/> +<v x="-1.352545" y="-0.585782" z="-0.000000"/> +<v x="-1.322098" y="-0.638242" z="-0.000000"/> +<v x="-1.278552" y="-0.688701" z="-0.000000"/> +<v x="-1.227799" y="-0.731611" z="-0.000000"/> +<v x="-1.175730" y="-0.761426" z="-0.000000"/> +<v x="-1.128235" y="-0.772596" z="-0.000000"/> +<v x="-0.520540" y="-0.772596" z="-0.000000"/> +<v x="-3.606006" y="1.423925" z="-0.000000"/> +<v x="-3.606006" y="-1.105311" z="0.000000"/> +<v x="-2.431215" y="-1.105311" z="0.000000"/> +<v x="-2.269584" y="-1.067427" z="0.000000"/> +<v x="-2.154401" y="-0.970534" z="0.000000"/> +<v x="-2.078057" y="-0.839774" z="0.000000"/> +<v x="-2.032944" y="-0.700285" z="-0.000000"/> +<v x="-2.011456" y="-0.577209" z="-0.000000"/> +<v x="-2.005984" y="-0.495685" z="-0.000000"/> +<v x="-2.005984" y="-0.219730" z="-0.000000"/> +<v x="-2.016798" y="-0.080758" z="-0.000000"/> +<v x="-2.049021" y="0.066602" z="-0.000000"/> +<v x="-2.102322" y="0.207341" z="-0.000000"/> +<v x="-2.176370" y="0.326451" z="-0.000000"/> +<v x="-2.270834" y="0.408924" z="-0.000000"/> +<v x="-2.385384" y="0.439750" z="-0.000000"/> +<v x="-2.993385" y="0.439750" z="-0.000000"/> +<v x="-2.993385" y="0.159307" z="-0.000000"/> +<v x="-2.708697" y="0.159307" z="-0.000000"/> +<v x="-2.642381" y="0.151461" z="-0.000000"/> +<v x="-2.585543" y="0.129069" z="-0.000000"/> +<v x="-2.539334" y="0.093850" z="-0.000000"/> +<v x="-2.504901" y="0.047520" z="-0.000000"/> +<v x="-2.483399" y="-0.008200" z="-0.000000"/> +<v x="-2.475976" y="-0.077680" z="-0.000000"/> +<v x="-2.475976" y="-0.528840" z="-0.000000"/> +<v x="-2.483251" y="-0.584731" z="-0.000000"/> +<v x="-2.504603" y="-0.641137" z="-0.000000"/> +<v x="-2.539327" y="-0.693297" z="-0.000000"/> +<v x="-2.586716" y="-0.736449" z="-0.000000"/> +<v x="-2.646063" y="-0.765832" z="-0.000000"/> +<v x="-2.716663" y="-0.776684" z="-0.000000"/> +<v x="-3.180775" y="-0.776684" z="-0.000000"/> +<v x="-3.180775" y="1.423925" z="-0.000000"/> +<v x="1.294319" y="1.089445" z="-0.000000"/> +<v x="1.682640" y="1.089445" z="-0.000000"/> +<v x="1.682640" y="0.592217" z="-0.000000"/> +<v x="1.294319" y="0.592217" z="-0.000000"/> +<v x="0.954450" y="1.387213" z="-0.000000"/> +<v x="0.954450" y="0.297302" z="-0.000000"/> +<v x="1.764579" y="0.297302" z="-0.000000"/> +<v x="1.817173" y="0.302918" z="-0.000000"/> +<v x="1.857398" y="0.312714" z="-0.000000"/> +<v x="1.901048" y="0.330057" z="-0.000000"/> +<v x="1.943094" y="0.357107" z="-0.000000"/> +<v x="1.962397" y="0.376450" z="-0.000000"/> +<v x="1.980418" y="0.400034" z="-0.000000"/> +<v x="1.997571" y="0.430774" z="-0.000000"/> +<v x="2.014724" y="0.473090" z="-0.000000"/> +<v x="2.027919" y="0.526567" z="-0.000000"/> +<v x="2.033197" y="0.590791" z="-0.000000"/> +<v x="2.033157" y="1.089560" z="-0.000000"/> +<v x="2.032106" y="1.110943" z="-0.000000"/> +<v x="2.028146" y="1.147850" z="-0.000000"/> +<v x="2.019337" y="1.194165" z="-0.000000"/> +<v x="2.003739" y="1.243773" z="-0.000000"/> +<v x="1.979413" y="1.290562" z="-0.000000"/> +<v x="1.956150" y="1.316431" z="-0.000000"/> +<v x="1.927260" y="1.339661" z="-0.000000"/> +<v x="1.892797" y="1.358540" z="-0.000000"/> +<v x="1.847042" y="1.375303" z="-0.000000"/> +<v x="1.757455" y="1.387213" z="-0.000000"/> +<v x="-0.204099" y="1.387213" z="-0.000000"/> +<v x="-0.204099" y="1.089445" z="-0.000000"/> +<v x="0.500579" y="1.089445" z="-0.000000"/> +<v x="0.500579" y="0.971193" z="-0.000000"/> +<v x="0.124371" y="0.971193" z="-0.000000"/> +<v x="0.046130" y="0.968050" z="-0.000000"/> +<v x="-0.010312" y="0.962568" z="-0.000000"/> +<v x="-0.067407" y="0.952862" z="-0.000000"/> +<v x="-0.116011" y="0.937724" z="-0.000000"/> +<v x="-0.138917" y="0.924008" z="-0.000000"/> +<v x="-0.150528" y="0.912360" z="-0.000000"/> +<v x="-0.165623" y="0.892124" z="-0.000000"/> +<v x="-0.180718" y="0.862627" z="-0.000000"/> +<v x="-0.192329" y="0.823197" z="-0.000000"/> +<v x="-0.196974" y="0.773160" z="-0.000000"/> +<v x="-0.196931" y="0.509442" z="-0.000000"/> +<v x="-0.195816" y="0.493126" z="-0.000000"/> +<v x="-0.191613" y="0.465235" z="-0.000000"/> +<v x="-0.182265" y="0.430715" z="-0.000000"/> +<v x="-0.165712" y="0.394513" z="-0.000000"/> +<v x="-0.139896" y="0.361576" z="-0.000000"/> +<v x="-0.106008" y="0.339823" z="-0.000000"/> +<v x="-0.063911" y="0.322590" z="-0.000000"/> +<v x="-0.016364" y="0.310414" z="-0.000000"/> +<v x="0.046186" y="0.301048" z="-0.000000"/> +<v x="0.124371" y="0.297302" z="-0.000000"/> +<v x="0.764921" y="0.297302" z="-0.000000"/> +<v x="0.764921" y="0.592217" z="-0.000000"/> +<v x="0.135770" y="0.592217" z="-0.000000"/> +<v x="0.135770" y="0.713321" z="-0.000000"/> +<v x="0.588218" y="0.713321" z="-0.000000"/> +<v x="0.639667" y="0.717031" z="-0.000000"/> +<v x="0.678188" y="0.723502" z="-0.000000"/> +<v x="0.718975" y="0.734959" z="-0.000000"/> +<v x="0.756704" y="0.752827" z="-0.000000"/> +<v x="0.778675" y="0.773209" z="-0.000000"/> +<v x="0.802328" y="0.803879" z="-0.000000"/> +<v x="0.816566" y="0.834895" z="-0.000000"/> +<v x="0.827518" y="0.875172" z="-0.000000"/> +<v x="0.831898" y="0.924888" z="-0.000000"/> +<v x="0.831862" y="1.193856" z="-0.000000"/> +<v x="0.830907" y="1.207091" z="-0.000000"/> +<v x="0.827311" y="1.230090" z="-0.000000"/> +<v x="0.819311" y="1.259233" z="-0.000000"/> +<v x="0.805145" y="1.290900" z="-0.000000"/> +<v x="0.783053" y="1.321469" z="-0.000000"/> +<v x="0.763265" y="1.339063" z="-0.000000"/> +<v x="0.747874" y="1.348693" z="-0.000000"/> +<v x="0.722705" y="1.361212" z="-0.000000"/> +<v x="0.688155" y="1.373731" z="-0.000000"/> +<v x="0.644619" y="1.383361" z="-0.000000"/> +<v x="0.592493" y="1.387213" z="-0.000000"/> +</vertices> +<primitives count="337"> +<poly v0="0" v1="1" v2="2" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="0" v1="2" v2="3" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="336" v1="323" v2="320" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="0" v1="3" v2="4" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="0" v1="4" v2="11" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="11" v1="4" v2="7" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="11" v1="7" v2="10" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="5" v1="6" v2="4" v3="7" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="0" v1="11" v2="12" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="40" v1="15" v2="14" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="149" v1="191" v2="150" v3="190" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="35" v1="34" v2="33" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="38" v1="37" v2="32" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="36" v1="33" v2="37" v3="32" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="39" v1="38" v2="32" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="40" v1="39" v2="31" v3="32" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="15" v1="40" v2="62" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="62" v1="40" v2="63" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="63" v1="40" v2="64" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="64" v1="40" v2="31" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="64" v1="31" v2="41" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="41" v1="31" v2="30" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="41" v1="30" v2="42" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="42" v1="30" v2="29" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="43" v1="42" v2="29" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="44" v1="43" v2="29" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="45" v1="44" v2="29" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="15" v1="62" v2="61" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="46" v1="45" v2="29" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="50" v1="27" v2="51" v3="26" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="15" v1="61" v2="60" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="15" v1="60" v2="59" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="48" v1="47" v2="28" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="46" v1="29" v2="47" v3="28" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="15" v1="59" v2="58" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="15" v1="58" v2="57" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="50" v1="49" v2="27" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="15" v1="57" v2="56" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="52" v1="51" v2="26" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="15" v1="56" v2="55" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="53" v1="52" v2="26" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="15" v1="55" v2="54" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="54" v1="53" v2="26" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="15" v1="54" v2="17" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="17" v1="54" v2="26" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="17" v1="26" v2="25" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="17" v1="25" v2="24" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="15" v1="17" v2="16" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="19" v1="18" v2="24" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="20" v1="19" v2="23" v3="24" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="21" v1="20" v2="23" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="22" v1="21" v2="23" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="18" v1="17" v2="24" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="66" v1="65" v2="88" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="67" v1="66" v2="88" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="67" v1="88" v2="87" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="68" v1="67" v2="87" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="48" v1="28" v2="49" v3="27" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="69" v1="86" v2="131" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="71" v1="119" v2="72" v3="118" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="69" v1="131" v2="130" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="133" v1="132" v2="85" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="134" v1="133" v2="85" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="135" v1="134" v2="85" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="136" v1="135" v2="85" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="137" v1="136" v2="85" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="138" v1="137" v2="85" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="139" v1="138" v2="85" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="140" v1="139" v2="85" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="141" v1="140" v2="85" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="142" v1="141" v2="85" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="89" v1="142" v2="85" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="90" v1="89" v2="85" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="36" v1="35" v2="33" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="91" v1="90" v2="85" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="70" v1="69" v2="129" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="91" v1="85" v2="84" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="69" v1="130" v2="129" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="92" v1="91" v2="84" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="93" v1="92" v2="84" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="70" v1="129" v2="128" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="94" v1="93" v2="84" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="126" v1="71" v2="127" v3="70" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="131" v1="86" v2="132" v3="85" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="70" v1="128" v2="127" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="124" v1="123" v2="122" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="125" v1="124" v2="122" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="71" v1="126" v2="125" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="125" v1="122" v2="121" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="71" v1="125" v2="121" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="71" v1="121" v2="120" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="96" v1="95" v2="83" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="71" v1="120" v2="119" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="68" v1="87" v2="69" v3="86" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="94" v1="84" v2="95" v3="83" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="72" v1="118" v2="117" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="96" v1="83" v2="97" v3="82" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="97" v1="82" v2="98" v3="81" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="73" v1="116" v2="115" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="99" v1="98" v2="81" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="73" v1="115" v2="114" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="100" v1="99" v2="81" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="73" v1="114" v2="113" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="101" v1="100" v2="81" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="74" v1="73" v2="113" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="101" v1="81" v2="80" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="102" v1="101" v2="80" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="103" v1="102" v2="80" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="104" v1="103" v2="80" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="105" v1="104" v2="80" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="106" v1="105" v2="80" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="107" v1="106" v2="80" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="108" v1="107" v2="80" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="109" v1="108" v2="80" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="110" v1="109" v2="80" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="111" v1="110" v2="80" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="112" v1="111" v2="80" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="113" v1="112" v2="80" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="74" v1="113" v2="80" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="75" v1="74" v2="80" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="75" v1="80" v2="79" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="76" v1="75" v2="79" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="76" v1="79" v2="78" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="77" v1="76" v2="78" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="144" v1="143" v2="166" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="144" v1="166" v2="165" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="145" v1="144" v2="165" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="145" v1="165" v2="164" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="146" v1="145" v2="164" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="72" v1="117" v2="73" v3="116" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="147" v1="163" v2="167" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="146" v1="164" v2="147" v3="163" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="148" v1="147" v2="167" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="148" v1="167" v2="195" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="148" v1="195" v2="194" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="169" v1="168" v2="162" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="148" v1="194" v2="193" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="170" v1="169" v2="162" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="148" v1="193" v2="149" v3="192" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="179" v1="161" v2="180" v3="160" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="172" v1="171" v2="161" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="149" v1="192" v2="191" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="173" v1="172" v2="161" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="173" v1="161" v2="179" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="167" v1="163" v2="168" v3="162" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="150" v1="190" v2="151" v3="189" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="174" v1="173" v2="179" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="175" v1="174" v2="179" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="175" v1="179" v2="178" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="176" v1="175" v2="178" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="176" v1="178" v2="177" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="170" v1="162" v2="171" v3="161" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="182" v1="181" v2="159" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="180" v1="160" v2="181" v3="159" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="151" v1="189" v2="188" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="183" v1="182" v2="159" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="151" v1="188" v2="187" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="151" v1="187" v2="186" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="184" v1="183" v2="158" v3="159" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="151" v1="186" v2="185" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="185" v1="184" v2="158" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="152" v1="151" v2="185" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="152" v1="185" v2="158" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="152" v1="158" v2="157" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="153" v1="152" v2="157" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="153" v1="157" v2="156" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="154" v1="153" v2="156" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="154" v1="156" v2="155" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="197" v1="196" v2="224" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="197" v1="224" v2="223" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="223" v1="222" v2="218" v3="219" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="222" v1="221" v2="219" v3="220" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="223" v1="203" v2="197" v3="202" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="218" v1="203" v2="223" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="204" v1="217" v2="216" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="218" v1="204" v2="203" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="204" v1="218" v2="217" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="206" v1="205" v2="215" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="216" v1="215" v2="204" v3="205" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="207" v1="206" v2="214" v3="215" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="197" v1="202" v2="201" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="197" v1="201" v2="200" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="207" v1="214" v2="208" v3="213" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="197" v1="200" v2="199" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="210" v1="209" v2="211" v3="212" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="212" v1="209" v2="213" v3="208" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="228" v1="227" v2="284" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="284" v1="227" v2="226" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="229" v1="228" v2="284" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="230" v1="229" v2="284" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="282" v1="231" v2="230" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="283" v1="230" v2="284" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="231" v1="282" v2="281" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="277" v1="232" v2="278" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="231" v1="281" v2="280" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="235" v1="266" v2="236" v3="265" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="233" v1="275" v2="274" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="278" v1="232" v2="279" v3="231" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="240" v1="263" v2="241" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="234" v1="270" v2="269" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="262" v1="248" v2="247" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="234" v1="269" v2="268" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="235" v1="234" v2="267" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="234" v1="268" v2="267" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="247" v1="246" v2="262" v3="263" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="240" v1="239" v2="263" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="245" v1="263" v2="246" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="284" v1="226" v2="225" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="252" v1="251" v2="261" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="249" v1="262" v2="250" v3="261" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="234" v1="272" v2="271" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="237" v1="264" v2="263" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="282" v1="230" v2="283" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="255" v1="257" v2="256" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="253" v1="260" v2="255" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="255" v1="254" v2="253" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="234" v1="271" v2="270" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="233" v1="277" v2="276" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="272" v1="234" v2="273" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="235" v1="267" v2="266" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="255" v1="260" v2="259" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="236" v1="265" v2="264" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="255" v1="259" v2="258" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="250" v1="261" v2="251" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="255" v1="258" v2="257" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="263" v1="238" v2="237" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="304" v1="297" v2="301" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="317" v1="286" v2="287" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="317" v1="288" v2="289" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="315" v1="316" v2="290" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="317" v1="289" v2="316" v3="290" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="314" v1="290" v2="313" v3="291" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="291" v1="312" v2="313" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="301" v1="297" v2="298" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="306" v1="307" v2="297" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="303" v1="301" v2="302" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="301" v1="298" v2="299" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="301" v1="299" v2="300" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="305" v1="297" v2="304" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="323" v1="324" v2="322" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="322" v1="324" v2="325" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="347" v1="349" v2="387" v3="386" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="320" v1="321" v2="336" v3="335" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="322" v1="326" v2="327" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="322" v1="327" v2="328" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="322" v1="328" v2="329" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="330" v1="322" v2="329" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="322" v1="330" v2="331" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="322" v1="331" v2="332" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="322" v1="332" v2="333" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="322" v1="333" v2="334" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="322" v1="334" v2="335" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="322" v1="325" v2="326" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="322" v1="335" v2="321" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="323" v1="322" v2="319" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="361" v1="362" v2="376" v3="375" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="323" v1="319" v2="320" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="337" v1="323" v2="336" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="323" v1="337" v2="338" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="352" v1="355" v2="351" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="323" v1="338" v2="339" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="354" v1="355" v2="353" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="323" v1="339" v2="340" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="386" v1="350" v2="355" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="323" v1="340" v2="341" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="351" v1="355" v2="350" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="382" v1="380" v2="381" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="359" v1="357" v2="358" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="380" v1="383" v2="379" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="10" v1="7" v2="9" v3="8" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="323" v1="342" v2="343" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="385" v1="386" v2="359" v3="357" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="323" v1="343" v2="344" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="377" v1="383" v2="376" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="323" v1="344" v2="345" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="382" v1="383" v2="380" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="378" v1="383" v2="377" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="360" v1="376" v2="383" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="346" v1="323" v2="345" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="376" v1="360" v2="361" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="323" v1="341" v2="342" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="276" v1="275" v2="233" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="279" v1="231" v2="280" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="197" v1="199" v2="198" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="274" v1="273" v2="233" v3="234" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="374" v1="368" v2="369" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="40" v1="14" v2="13" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="373" v1="374" v2="372" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="371" v1="372" v2="374" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="370" v1="371" v2="374" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="369" v1="370" v2="374" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="374" v1="367" v2="368" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="366" v1="367" v2="374" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="365" v1="366" v2="374" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="364" v1="365" v2="374" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="363" v1="364" v2="374" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="241" v1="263" v2="242" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="263" v1="239" v2="238" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="277" v1="233" v2="232" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="263" v1="243" v2="242" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="262" v1="249" v2="248" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="263" v1="244" v2="243" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="263" v1="245" v2="244" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="252" v1="261" v2="253" v3="260" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="237" v1="236" v2="264" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="378" v1="379" v2="383" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="317" v1="287" v2="288" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="347" v1="387" v2="388" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="360" v1="383" v2="384" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="386" v1="355" v2="356" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="360" v1="384" v2="359" v3="385" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="356" v1="357" v2="386" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="386" v1="349" v2="350" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="347" v1="348" v2="349" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="375" v1="362" v2="374" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="347" v1="388" v2="389" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="347" v1="389" v2="390" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="347" v1="390" v2="391" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="347" v1="391" v2="392" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="393" v1="347" v2="392" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="347" v1="393" v2="394" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="347" v1="394" v2="395" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="347" v1="395" v2="396" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="347" v1="397" v2="398" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="396" v1="397" v2="347" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="311" v1="292" v2="310" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="307" v1="308" v2="297" v3="296" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="290" v1="314" v2="315" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="304" v1="301" v2="303" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="309" v1="295" v2="308" v3="296" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="306" v1="297" v2="305" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="286" v1="317" v2="285" v3="318" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="291" v1="292" v2="312" v3="311" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="292" v1="293" v2="310" v3="309" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="309" v1="293" v2="295" v3="294" r0="255" g0="255" b0="255" type="F4" /> +<poly v0="362" v1="363" v2="374" r0="255" g0="255" b0="255" type="F3" /> +<poly v0="355" v1="352" v2="353" r0="255" g0="255" b0="255" type="F3" /> +</primitives> +</model>
\ No newline at end of file diff --git a/examples/n00bdemo/data/rbowshade.smd b/examples/n00bdemo/data/rbowshade.smd Binary files differnew file mode 100644 index 0000000..c218d05 --- /dev/null +++ b/examples/n00bdemo/data/rbowshade.smd diff --git a/examples/n00bdemo/data/rbowshade.smx b/examples/n00bdemo/data/rbowshade.smx new file mode 100644 index 0000000..6648b5d --- /dev/null +++ b/examples/n00bdemo/data/rbowshade.smx @@ -0,0 +1,50 @@ +<!-- Created using Project Scarlet SMX Export Plug-in for Blender --> +<!-- NOTE: If you plan to use this model as a static mesh, it is recommended that you run this file through smxopt --> +<!-- or smxtool to clean up duplicate/unused normals which are kept for animation purposes. --> +<model version="1"> +<vertices count="25"> +<v x="-2.000000" y="2.000000" z="-0.000000"/> +<v x="2.000000" y="2.000000" z="-0.000000"/> +<v x="-2.000000" y="-2.000000" z="0.000000"/> +<v x="2.000000" y="-2.000000" z="0.000000"/> +<v x="-2.000000" y="-1.000000" z="0.000000"/> +<v x="-2.000000" y="-0.000000" z="0.000000"/> +<v x="-2.000000" y="1.000000" z="-0.000000"/> +<v x="-1.000000" y="2.000000" z="-0.000000"/> +<v x="0.000000" y="2.000000" z="-0.000000"/> +<v x="1.000000" y="2.000000" z="-0.000000"/> +<v x="2.000000" y="1.000000" z="-0.000000"/> +<v x="2.000000" y="-0.000000" z="0.000000"/> +<v x="2.000000" y="-1.000000" z="0.000000"/> +<v x="1.000000" y="-2.000000" z="0.000000"/> +<v x="0.000000" y="-2.000000" z="0.000000"/> +<v x="-1.000000" y="-2.000000" z="0.000000"/> +<v x="-1.000000" y="1.000000" z="-0.000000"/> +<v x="-1.000000" y="-0.000000" z="0.000000"/> +<v x="-1.000000" y="-1.000000" z="0.000000"/> +<v x="0.000000" y="1.000000" z="-0.000000"/> +<v x="0.000000" y="-0.000000" z="0.000000"/> +<v x="0.000000" y="-1.000000" z="0.000000"/> +<v x="1.000000" y="1.000000" z="-0.000000"/> +<v x="1.000000" y="-0.000000" z="0.000000"/> +<v x="1.000000" y="-1.000000" z="0.000000"/> +</vertices> +<primitives count="16"> +<poly v0="13" v1="3" v2="24" v3="12" r0="19" g0="246" b0="12" r1="0" g1="243" b1="255" r2="0" g2="243" b2="255" r3="10" g3="4" b3="249" type="G4" /> +<poly v0="2" v1="15" v2="4" v3="18" r0="255" g0="255" b0="255" r1="255" g1="0" b1="3" r2="255" g2="0" b2="3" r3="255" g3="241" b3="0" type="G4" /> +<poly v0="15" v1="14" v2="18" v3="21" r0="255" g0="0" b0="3" r1="255" g1="244" b1="0" r2="255" g2="241" b2="0" r3="2" g3="255" b3="0" type="G4" /> +<poly v0="14" v1="13" v2="21" v3="24" r0="255" g0="244" b0="0" r1="19" g1="246" b1="12" r2="2" g2="255" b2="0" r3="0" g3="243" b3="255" type="G4" /> +<poly v0="6" v1="16" v2="0" v3="7" r0="2" g0="255" b0="0" r1="0" g1="243" b1="255" r2="0" g2="243" b2="255" r3="0" g3="1" b3="255" type="G4" /> +<poly v0="5" v1="17" v2="6" v3="16" r0="255" g0="244" b0="0" r1="2" g1="255" b1="0" r2="2" g2="255" b2="0" r3="0" g3="243" b3="255" type="G4" /> +<poly v0="4" v1="18" v2="5" v3="17" r0="255" g0="0" b0="3" r1="255" g1="241" b1="0" r2="255" g2="244" b2="0" r3="2" g3="255" b3="0" type="G4" /> +<poly v0="16" v1="19" v2="7" v3="8" r0="0" g0="243" b0="255" r1="0" g1="1" b1="255" r2="0" g2="1" b2="255" r3="255" g3="0" b3="244" type="G4" /> +<poly v0="17" v1="20" v2="16" v3="19" r0="2" g0="255" b0="0" r1="0" g1="243" b1="255" r2="0" g2="243" b2="255" r3="0" g3="1" b3="255" type="G4" /> +<poly v0="18" v1="21" v2="17" v3="20" r0="255" g0="241" b0="0" r1="2" g1="255" b1="0" r2="2" g2="255" b2="0" r3="0" g3="243" b3="255" type="G4" /> +<poly v0="19" v1="22" v2="8" v3="9" r0="0" g0="1" b0="255" r1="255" g1="0" b1="244" r2="255" g2="0" b2="244" r3="144" g3="39" b3="95" type="G4" /> +<poly v0="20" v1="23" v2="19" v3="22" r0="0" g0="243" b0="255" r1="27" g1="11" b1="240" r2="0" g2="1" b2="255" r3="255" g3="0" b3="244" type="G4" /> +<poly v0="21" v1="24" v2="20" v3="23" r0="2" g0="255" b0="0" r1="0" g1="243" b1="255" r2="0" g2="243" b2="255" r3="27" g3="11" b3="240" type="G4" /> +<poly v0="22" v1="10" v2="9" v3="1" r0="255" g0="0" b0="244" r1="144" g1="39" b1="95" r2="144" g2="39" b2="95" r3="255" g3="14" b3="0" type="G4" /> +<poly v0="23" v1="11" v2="22" v3="10" r0="27" g0="11" b0="240" r1="255" g1="0" b1="244" r2="255" g2="0" b2="244" r3="144" g3="39" b3="95" type="G4" /> +<poly v0="24" v1="12" v2="23" v3="11" r0="0" g0="243" b0="255" r1="10" g1="4" b1="249" r2="27" g2="11" b2="240" r3="255" g3="0" b3="244" type="G4" /> +</primitives> +</model>
\ No newline at end of file diff --git a/examples/n00bdemo/data/riftbld1.tim b/examples/n00bdemo/data/riftbld1.tim Binary files differnew file mode 100644 index 0000000..5581bb3 --- /dev/null +++ b/examples/n00bdemo/data/riftbld1.tim diff --git a/examples/n00bdemo/data/riftbld2.tim b/examples/n00bdemo/data/riftbld2.tim Binary files differnew file mode 100644 index 0000000..4048024 --- /dev/null +++ b/examples/n00bdemo/data/riftbld2.tim diff --git a/examples/n00bdemo/data/star.smd b/examples/n00bdemo/data/star.smd Binary files differnew file mode 100644 index 0000000..68a5725 --- /dev/null +++ b/examples/n00bdemo/data/star.smd diff --git a/examples/n00bdemo/data/star.smx b/examples/n00bdemo/data/star.smx new file mode 100644 index 0000000..c91947e --- /dev/null +++ b/examples/n00bdemo/data/star.smx @@ -0,0 +1,26 @@ +<!-- Created using Project Scarlet SMX Export Plug-in for Blender --> +<!-- NOTE: If you plan to use this model as a static mesh, it is recommended that you run this file through smxopt --> +<!-- or smxtool to clean up duplicate/unused normals which are kept for animation purposes. --> +<model version="1"> +<vertices count="10"> +<v x="1.533171" y="2.100845" z="-0.000000"/> +<v x="-0.586904" y="-0.806044" z="0.000000"/> +<v x="0.000881" y="-2.608315" z="0.000000"/> +<v x="-1.526110" y="2.104695" z="-0.000000"/> +<v x="-2.481925" y="-0.806045" z="0.000000"/> +<v x="2.469579" y="-0.806044" z="0.000000"/> +<v x="0.951937" y="0.311990" z="-0.000000"/> +<v x="-0.950176" y="0.311990" z="-0.000000"/> +<v x="0.000881" y="1.002973" z="-0.000000"/> +<v x="0.588666" y="-0.806044" z="0.000000"/> +</vertices> +<primitives count="7"> +<poly v0="4" v1="7" v2="1" r0="255" g0="255" b0="64" type="F3" /> +<poly v0="2" v1="1" v2="9" r0="255" g0="255" b0="64" type="F3" /> +<poly v0="6" v1="5" v2="9" r0="255" g0="255" b0="64" type="F3" /> +<poly v0="8" v1="0" v2="6" r0="255" g0="255" b0="64" type="F3" /> +<poly v0="8" v1="7" v2="3" r0="255" g0="255" b0="64" type="F3" /> +<poly v0="1" v1="7" v2="9" v3="6" r0="255" g0="255" b0="64" type="F4" /> +<poly v0="7" v1="8" v2="6" r0="255" g0="255" b0="64" type="F3" /> +</primitives> +</model>
\ No newline at end of file diff --git a/examples/n00bdemo/data/star_mask.smd b/examples/n00bdemo/data/star_mask.smd Binary files differnew file mode 100644 index 0000000..fe624fe --- /dev/null +++ b/examples/n00bdemo/data/star_mask.smd diff --git a/examples/n00bdemo/data/star_mask.smx b/examples/n00bdemo/data/star_mask.smx new file mode 100644 index 0000000..695bd47 --- /dev/null +++ b/examples/n00bdemo/data/star_mask.smx @@ -0,0 +1,25 @@ +<model version="1"> + <vertices count="10"> + <v x="1.5331711" y="2.1008451" z="-0"/> + <v x="-0.58690399" y="-0.80604398" z="0"/> + <v x="0.00088100001" y="-2.608315" z="0"/> + <v x="-1.5261101" y="2.1046951" z="-0"/> + <v x="-2.481925" y="-0.806045" z="0"/> + <v x="2.469579" y="-0.80604398" z="0"/> + <v x="0.95193702" y="0.31198999" z="-0"/> + <v x="-0.950176" y="0.31198999" z="-0"/> + <v x="0.00088100001" y="1.002973" z="-0"/> + <v x="0.58866602" y="-0.80604398" z="0"/> + </vertices> + <normals count="0"/> + <textures count="0"/> + <primitives count="7"> + <poly v0="4" v1="7" v2="1" blend="2" double="1" r0="0" g0="0" b0="0" type="F3"/> + <poly v0="2" v1="1" v2="9" blend="2" double="1" r0="0" g0="0" b0="0" type="F3"/> + <poly v0="6" v1="5" v2="9" blend="2" double="1" r0="0" g0="0" b0="0" type="F3"/> + <poly v0="8" v1="0" v2="6" blend="2" double="1" r0="0" g0="0" b0="0" type="F3"/> + <poly v0="8" v1="7" v2="3" blend="2" double="1" r0="0" g0="0" b0="0" type="F3"/> + <poly v0="1" v1="7" v2="9" v3="6" blend="2" double="1" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="7" v1="8" v2="6" blend="2" double="1" r0="0" g0="0" b0="0" type="F3"/> + </primitives> +</model> diff --git a/examples/n00bdemo/data/timerift.smd b/examples/n00bdemo/data/timerift.smd Binary files differnew file mode 100644 index 0000000..dc22e4d --- /dev/null +++ b/examples/n00bdemo/data/timerift.smd diff --git a/examples/n00bdemo/data/timerift.smx b/examples/n00bdemo/data/timerift.smx new file mode 100644 index 0000000..38d53f6 --- /dev/null +++ b/examples/n00bdemo/data/timerift.smx @@ -0,0 +1,1085 @@ +<model version="1"> + <vertices count="521"> + <v x="-4.768332" y="-0.70143598" z="-0.519068"/> + <v x="-4.7053008" y="-0.70256001" z="0.59915602"/> + <v x="-3.527034" y="0.280002" z="-0.58804899"/> + <v x="-3.6577771" y="-0.83232301" z="-0.58179802"/> + <v x="-3.464004" y="0.278878" z="0.53017598"/> + <v x="-3.5947461" y="-0.83344698" z="0.53642601"/> + <v x="-3.584589" y="-0.66643" z="0.367755"/> + <v x="-3.4930689" y="0.112198" z="0.363379"/> + <v x="-3.5371909" y="0.112985" z="-0.41937801"/> + <v x="-3.628711" y="-0.66564298" z="-0.41500199"/> + <v x="-3.2762301" y="0.25775599" z="0.69905502"/> + <v x="-3.3594301" y="0.25924" z="-0.77700198"/> + <v x="-3.2500811" y="0.480221" z="0.69780397"/> + <v x="-3.333282" y="0.48170501" z="-0.77825201"/> + <v x="-4.9420228" y="-0.681898" z="-0.67528099"/> + <v x="-4.8603349" y="-0.68335599" z="0.773938"/> + <v x="-3.4210551" y="-0.85298502" z="0.69264001"/> + <v x="-3.502743" y="-0.85152698" z="-0.75657898"/> + <v x="-3.3496311" y="-0.97372198" z="0.76925999"/> + <v x="-3.4403951" y="-0.972103" z="-0.84098297"/> + <v x="-4.325356" y="-1.990999" z="0.015555"/> + <v x="-3.434674" y="0.67004001" z="0.51321101"/> + <v x="-3.49594" y="0.67113298" z="-0.57370299"/> + <v x="-3.3170061" y="1.671133" z="0.50758499"/> + <v x="-3.3782721" y="1.672226" z="-0.57932901"/> + <v x="-3.186264" y="2.783458" z="0.50133401"/> + <v x="-3.24753" y="2.7845509" z="-0.58557999"/> + <v x="-3.055521" y="3.8957829" z="0.495083"/> + <v x="-3.116787" y="3.8968761" z="-0.59183103"/> + <v x="-2.9247789" y="5.0081081" z="0.488832"/> + <v x="-2.9860449" y="5.009201" z="-0.59808201"/> + <v x="-2.8039131" y="0.91764897" z="4.0108509"/> + <v x="-2.839098" y="-0.19122399" z="4.164351"/> + <v x="-2.0594611" y="1.009166" z="4.8426061"/> + <v x="-2.094646" y="-0.099707998" z="4.9961061"/> + <v x="-1.9678791" y="0.78948897" z="3.27667"/> + <v x="-2.0030651" y="-0.31938401" z="3.4301701"/> + <v x="-1.2234271" y="0.881006" z="4.1084242"/> + <v x="-1.258612" y="-0.22786701" z="4.2619238"/> + <v x="-1.365002" y="-0.075263999" z="4.1141362"/> + <v x="-1.340373" y="0.70094699" z="4.0066862"/> + <v x="-1.8614891" y="0.636886" z="3.424458"/> + <v x="-1.886119" y="-0.13932601" z="3.531908"/> + <v x="-2.6837859" y="0.73209399" z="3.923749"/> + <v x="-2.708416" y="-0.044117" z="4.031199"/> + <v x="-2.1231921" y="-0.133829" z="3.517272"/> + <v x="-2.098562" y="0.64238203" z="3.409822"/> + <v x="-2.0741141" y="1.044314" z="5.0931549"/> + <v x="-3.0567911" y="0.92351198" z="3.995239"/> + <v x="-0.97054899" y="0.87514299" z="4.1240358"/> + <v x="-1.953226" y="0.75434101" z="3.0261199"/> + <v x="-3.0497539" y="1.145286" z="3.96454"/> + <v x="-0.963512" y="1.096918" z="4.0933361"/> + <v x="-1.946189" y="0.976116" z="2.99542"/> + <v x="-3.0730109" y="-0.185801" z="4.14991"/> + <v x="-2.108201" y="-0.067195997" z="5.2278638"/> + <v x="-1.0247" y="-0.233291" z="4.2763648"/> + <v x="-1.989511" y="-0.35189599" z="3.198411"/> + <v x="-3.1903241" y="-0.29405001" z="4.1582351"/> + <v x="-0.914424" y="-0.346816" z="4.2987399"/> + <v x="-1.9864351" y="-0.4786" z="3.1010139"/> + <v x="-2.087559" y="-1.429306" z="4.381988"/> + <v x="-2.7694719" y="1.305241" z="3.958492"/> + <v x="-1.2332391" y="1.2696249" z="4.0533342"/> + <v x="-1.956846" y="1.18067" z="3.244868"/> + <v x="-2.7378049" y="2.3032269" z="3.820343"/> + <v x="-1.2015719" y="2.267611" z="3.915184"/> + <v x="-1.92518" y="2.1786561" z="3.1067181"/> + <v x="-2.70262" y="3.412101" z="3.6668429"/> + <v x="-1.166387" y="3.376483" z="3.7616839"/> + <v x="-1.889994" y="3.287529" z="2.953218"/> + <v x="-2.667434" y="4.5209742" z="3.5133431"/> + <v x="-1.131202" y="4.4853568" z="3.6081841"/> + <v x="-1.854809" y="4.3964028" z="2.7997191"/> + <v x="-2.6322491" y="5.629847" z="3.359843"/> + <v x="-1.096016" y="5.5942311" z="3.454684"/> + <v x="-1.8196239" y="5.5052762" z="2.646219"/> + <v x="5.5024309" y="1.802839" z="-0.65696502"/> + <v x="5.6496911" y="0.69495499" z="-0.72981501"/> + <v x="4.5680141" y="1.6394809" z="-0.061499"/> + <v x="4.7152729" y="0.53159702" z="-0.134349"/> + <v x="5.1676641" y="1.6569951" z="0.88428903"/> + <v x="5.3149228" y="0.54911" z="0.81143802"/> + <v x="4.7786078" y="0.68915302" z="0.0082599996"/> + <v x="4.6725812" y="1.486829" z="0.060711998"/> + <v x="5.1043291" y="1.499439" z="0.74167901"/> + <v x="5.2103562" y="0.70176202" z="0.68922698"/> + <v x="4.7302661" y="1.497802" z="-0.161746"/> + <v x="5.384357" y="1.6121531" z="-0.57857198"/> + <v x="5.4874401" y="0.83663398" z="-0.62956798"/> + <v x="4.8333468" y="0.72228301" z="-0.212742"/> + <v x="4.3225641" y="1.6105421" z="-0.117551"/> + <v x="5.555994" y="1.826174" z="-0.90356499"/> + <v x="5.1141009" y="1.63366" z="1.1308891"/> + <v x="4.2931108" y="1.832118" z="-0.10298"/> + <v x="5.5265422" y="2.0477509" z="-0.88899499"/> + <v x="5.08465" y="1.855237" z="1.1454591"/> + <v x="5.6992359" y="0.71653998" z="-0.95792001"/> + <v x="4.4882321" y="0.50482798" z="-0.186197"/> + <v x="5.265378" y="0.52752501" z="1.039543"/> + <v x="5.7380648" y="0.61625201" z="-1.076176"/> + <v x="4.3925052" y="0.381017" z="-0.218705"/> + <v x="5.256" y="0.40623599" z="1.1432281"/> + <v x="5.6442919" y="-0.59663999" z="-0.039324"/> + <v x="4.53795" y="2.029773" z="-0.031097"/> + <v x="5.4462042" y="2.1885569" z="-0.60988897"/> + <v x="5.12081" y="2.0467961" z="0.88820797"/> + <v x="4.405416" y="3.0268681" z="0.034469001"/> + <v x="5.3136702" y="3.185653" z="-0.54432398"/> + <v x="4.988276" y="3.0438919" z="0.95377398"/> + <v x="4.2581568" y="4.1347532" z="0.107319"/> + <v x="5.16641" y="4.2935371" z="-0.47147399"/> + <v x="4.8410168" y="4.1517758" z="1.026624"/> + <v x="4.110898" y="5.2426372" z="0.180169"/> + <v x="5.0191512" y="5.4014211" z="-0.39862299"/> + <v x="4.6937571" y="5.2596598" z="1.099475"/> + <v x="3.9636381" y="6.3505211" z="0.25301999"/> + <v x="4.871891" y="6.509305" z="-0.325773"/> + <v x="4.5464969" y="6.3675442" z="1.172325"/> + <v x="3.2468309" y="1.396324" z="-5.347506"/> + <v x="3.4126439" y="0.30610201" z="-5.5432649"/> + <v x="4.1858258" y="1.310614" z="-4.0748148"/> + <v x="4.3516388" y="0.22039101" z="-4.270575"/> + <v x="3.089411" y="1.1771981" z="-4.2604899"/> + <v x="3.255224" y="0.086975999" z="-4.4562502"/> + <v x="3.394814" y="0.270522" z="-4.399035"/> + <v x="3.2787449" y="1.033677" z="-4.2620029"/> + <v x="4.046236" y="1.127068" z="-4.13203"/> + <v x="4.1623049" y="0.36391199" z="-4.269062"/> + <v x="3.3673921" y="0.428056" z="-5.363678"/> + <v x="3.2480061" y="1.213016" z="-5.2227311"/> + <v x="3.1346641" y="1.055245" z="-4.4400792"/> + <v x="3.2540491" y="0.27028501" z="-4.5810261"/> + <v x="3.0965919" y="1.410038" z="-5.551136"/> + <v x="2.888798" y="1.120792" z="-4.1162758"/> + <v x="4.3360648" y="1.2969" z="-3.8711851"/> + <v x="3.0634291" y="1.628082" z="-5.5119839"/> + <v x="2.8556349" y="1.338836" z="-4.0771241"/> + <v x="4.3029022" y="1.514944" z="-3.8320329"/> + <v x="3.2736731" y="0.31878799" z="-5.7316241"/> + <v x="3.0696571" y="0.0348" z="-4.3228512"/> + <v x="4.4906101" y="0.207706" z="-4.0822158"/> + <v x="3.222647" y="0.21593601" z="-5.842834"/> + <v x="2.9959619" y="-0.099605002" z="-4.2775311"/> + <v x="4.5747991" y="0.092513002" z="-4.0101581"/> + <v x="4.0645361" y="-0.93599802" z="-5.1222548"/> + <v x="3.201942" y="1.776702" z="-5.2611718"/> + <v x="3.0489299" y="1.563712" z="-4.2045932"/> + <v x="4.114645" y="1.693391" z="-4.024117"/> + <v x="3.052711" y="2.7579019" z="-5.0849891"/> + <v x="2.899698" y="2.5449109" z="-4.028409"/> + <v x="3.965414" y="2.6745911" z="-3.8479331"/> + <v x="2.886898" y="3.848124" z="-4.8892298"/> + <v x="2.733886" y="3.635134" z="-3.8326499"/> + <v x="3.7995999" y="3.7648129" z="-3.652174"/> + <v x="2.7210841" y="4.9383459" z="-4.69347"/> + <v x="2.5680721" y="4.7253561" z="-3.6368899"/> + <v x="3.6337869" y="4.8550358" z="-3.456414"/> + <v x="2.5552709" y="6.0285678" z="-4.4977112"/> + <v x="2.4022601" y="5.815578" z="-3.4411311"/> + <v x="3.4679739" y="5.9452572" z="-3.260654"/> + <v x="-2.2962711" y="2.251462" z="-5.0503612"/> + <v x="-2.1088331" y="1.148088" z="-5.0075641"/> + <v x="-3.3871679" y="2.0597031" z="-5.2164092"/> + <v x="-2.4671819" y="2.265358" z="-3.9435649"/> + <v x="-2.2797439" y="1.161983" z="-3.900768"/> + <v x="-3.558079" y="2.0735991" z="-4.1096129"/> + <v x="-3.370641" y="0.97022402" z="-4.0668159"/> + <v x="-3.235122" y="1.164494" z="-4.0483279"/> + <v x="-3.366329" y="1.936857" z="-4.0782862"/> + <v x="-2.6027009" y="2.0710881" z="-3.9620531"/> + <v x="-2.471494" y="1.298726" z="-3.9320951"/> + <v x="-2.4317901" y="2.0571921" z="-5.0688491"/> + <v x="-2.3005829" y="1.28483" z="-5.0388908"/> + <v x="-2.293792" y="2.0880411" z="-4.8779221"/> + <v x="-2.162585" y="1.315678" z="-4.8479638"/> + <v x="-2.282223" y="1.325405" z="-4.0732069"/> + <v x="-2.413429" y="2.0977681" z="-4.1031651"/> + <v x="-3.5343671" y="2.026798" z="-5.420064"/> + <v x="-2.094382" y="2.2799201" z="-5.200881"/> + <v x="-3.759969" y="2.045141" z="-3.959094"/> + <v x="-2.319984" y="2.2982631" z="-3.7399111"/> + <v x="-2.13187" y="2.5005951" z="-5.2094402"/> + <v x="-3.797456" y="2.265815" z="-3.967653"/> + <v x="-2.357471" y="2.5189381" z="-3.7484701"/> + <v x="-1.922085" y="1.1744111" z="-5.1467948"/> + <v x="-3.5573881" y="0.943901" z="-3.9275861"/> + <v x="-2.143585" y="1.19242" z="-3.7123871"/> + <v x="-1.8124911" y="1.07688" z="-5.2102489"/> + <v x="-3.6294949" y="0.82075697" z="-3.855572"/> + <v x="-2.058603" y="1.09689" z="-3.6164629"/> + <v x="-2.533555" y="-0.15455601" z="-4.4901142"/> + <v x="-2.37954" y="2.6351531" z="-5.0521688"/> + <v x="-3.6060171" y="2.46227" z="-4.137763"/> + <v x="-2.545665" y="2.6486599" z="-3.9763639"/> + <v x="-2.548234" y="3.62819" z="-5.0906868"/> + <v x="-3.7747121" y="3.455307" z="-4.17628"/> + <v x="-2.71436" y="3.6416969" z="-4.0148811"/> + <v x="-2.735673" y="4.731565" z="-5.1334839"/> + <v x="-3.9621501" y="4.558681" z="-4.2190771"/> + <v x="-2.901798" y="4.7450709" z="-4.0576782"/> + <v x="-2.923111" y="5.834939" z="-5.17628"/> + <v x="-4.1495881" y="5.662056" z="-4.2618742"/> + <v x="-3.089236" y="5.8484459" z="-4.1004748"/> + <v x="-3.110549" y="6.938313" z="-5.2190781"/> + <v x="-4.3370271" y="6.76543" z="-4.3046699"/> + <v x="-3.276675" y="6.9518199" z="-4.1432719"/> + <v x="-5.807395" y="-0.220741" z="1.905123"/> + <v x="-4.8522801" y="0.69918299" z="2.7713189"/> + <v x="-5.0616188" y="-0.39994001" z="2.721276"/> + <v x="-4.7891092" y="0.759157" z="1.189796"/> + <v x="-4.9984479" y="-0.33996701" z="1.1397541"/> + <v x="-4.0433331" y="0.57995802" z="2.005949"/> + <v x="-4.2526722" y="-0.51916599" z="1.955907"/> + <v x="-4.333138" y="-0.32741699" z="1.840991"/> + <v x="-4.1866002" y="0.44196901" z="1.87602"/> + <v x="-4.708643" y="0.56740898" z="1.304713"/> + <v x="-4.8551798" y="-0.201978" z="1.269683"/> + <v x="-4.9190588" y="-0.26275399" z="2.6211309"/> + <v x="-4.7683349" y="0.52861398" z="2.657161"/> + <v x="-4.1858931" y="0.442772" z="2.1060951"/> + <v x="-4.336617" y="-0.34859699" z="2.070065"/> + <v x="-4.8623881" y="0.68958801" z="3.0243621"/> + <v x="-3.7945769" y="0.53220999" z="2.014075"/> + <v x="-4.7790012" y="0.76875299" z="0.93675202"/> + <v x="-4.820519" y="0.90941203" z="3.0343699"/> + <v x="-3.7527089" y="0.75203401" z="2.0240829"/> + <v x="-4.737134" y="0.98857802" z="0.94676101"/> + <v x="-6.0374942" y="-0.17657401" z="1.897607"/> + <v x="-5.0709691" y="-0.40881601" z="2.9553421"/> + <v x="-4.022573" y="-0.56333297" z="1.963424"/> + <v x="-4.989099" y="-0.33109" z="0.905689"/> + <v x="-5.0964508" y="-0.52304697" z="3.0642071"/> + <v x="-3.931567" y="-0.69473201" z="1.962075"/> + <v x="-5.0054841" y="-0.436685" z="0.78681499"/> + <v x="-5.2603068" y="-1.578989" z="1.875469"/> + <v x="-4.7781272" y="1.084716" z="2.7666919"/> + <v x="-3.9918301" y="0.96882898" z="2.022753"/> + <v x="-4.7167239" y="1.143011" z="1.229452"/> + <v x="-4.5897212" y="2.0739269" z="2.8117299"/> + <v x="-3.8034239" y="1.95804" z="2.067791"/> + <v x="-4.5283179" y="2.1322219" z="1.27449"/> + <v x="-4.3803821" y="3.1730511" z="2.8617721"/> + <v x="-3.594085" y="3.057164" z="2.1178329"/> + <v x="-4.3189788" y="3.2313459" z="1.324532"/> + <v x="-4.171042" y="4.2721748" z="2.9118149"/> + <v x="-3.3847461" y="4.1562872" z="2.167876"/> + <v x="-4.1096401" y="4.3304691" z="1.374575"/> + <v x="-3.9617031" y="5.3712978" z="2.9618559"/> + <v x="-3.175406" y="5.2554111" z="2.2179179"/> + <v x="-3.9003" y="5.4295931" z="1.4246171"/> + <v x="4.3280878" y="1.760371" z="3.331039"/> + <v x="4.2133498" y="0.64864802" z="3.258189"/> + <v x="3.3813159" y="1.819065" z="3.9265051"/> + <v x="3.266578" y="0.70734203" z="3.8536539"/> + <v x="4.9153352" y="1.637786" z="4.2768269"/> + <v x="3.968564" y="1.69648" z="4.872293"/> + <v x="3.8538251" y="0.58475697" z="4.7994418"/> + <v x="3.364856" y="0.84582102" z="3.996264"/> + <v x="3.4474671" y="1.646262" z="4.0487161"/> + <v x="3.870286" y="1.558001" z="4.7296829"/> + <v x="3.787674" y="0.75756001" z="4.6772308"/> + <v x="3.5061209" y="1.643502" z="3.8262579"/> + <v x="4.1688609" y="1.602417" z="3.4094319"/> + <v x="4.0885448" y="0.824211" z="3.3584361"/> + <v x="3.4258039" y="0.86529601" z="3.7752621"/> + <v x="3.1358731" y="1.848069" z="3.8704529"/> + <v x="4.385612" y="1.770594" z="3.084439"/> + <v x="3.9110401" y="1.686257" z="5.1188931"/> + <v x="5.160778" y="1.6087821" z="4.3328781"/> + <v x="3.1588211" y="2.0704141" z="3.8850241"/> + <v x="4.4085588" y="1.992939" z="3.099009"/> + <v x="3.9339869" y="1.908602" z="5.1334629"/> + <v x="4.2665591" y="0.658104" z="3.0300839"/> + <v x="3.0395429" y="0.73417097" z="3.8018069"/> + <v x="3.800616" y="0.57530099" z="5.0275469"/> + <v x="4.2809711" y="0.55153197" z="2.911828"/> + <v x="2.9176199" y="0.636051" z="3.769299"/> + <v x="3.7632561" y="0.459528" z="5.1312318"/> + <v x="3.9073761" y="-0.60619301" z="3.9486799"/> + <v x="3.442951" y="2.2056301" z="3.956907"/> + <v x="4.3632131" y="2.1485801" z="3.3781149"/> + <v x="4.0137548" y="2.086477" z="4.8762121"/> + <v x="3.5462151" y="3.2061801" z="4.0224719"/> + <v x="4.466476" y="3.1491311" z="3.44368"/> + <v x="4.1170192" y="3.087028" z="4.9417782"/> + <v x="3.660953" y="4.317904" z="4.0953231"/> + <v x="4.5812149" y="4.2608538" z="3.51653"/> + <v x="4.2317581" y="4.198751" z="5.0146279"/> + <v x="3.775691" y="5.429626" z="4.1681728"/> + <v x="4.6959529" y="5.3725762" z="3.589381"/> + <v x="4.3464952" y="5.310473" z="5.0874791"/> + <v x="3.890429" y="6.5413489" z="4.241024"/> + <v x="4.8106909" y="6.4843001" z="3.662231"/> + <v x="4.4612331" y="6.4221959" z="5.1603289"/> + <v x="2.847163" y="2.5205209" z="-6.8736639"/> + <v x="5.2608728" y="2.5205209" z="-5.2608762"/> + <v x="2.847163" y="-0.47947901" z="-6.8736639"/> + <v x="5.2608728" y="-0.47947901" z="-5.2608762"/> + <v x="-5.2608738" y="2.5205209" z="5.2608738"/> + <v x="-6.8736629" y="2.5205209" z="2.8471651"/> + <v x="-5.2608738" y="-0.47947901" z="5.2608738"/> + <v x="-6.8736629" y="-0.47947901" z="2.8471651"/> + <v x="6.8736629" y="2.5205209" z="-2.8471661"/> + <v x="6.8736629" y="-0.47947901" z="-2.8471661"/> + <v x="-7.4400001" y="2.5205209" z="-0"/> + <v x="-7.4400001" y="-0.47947901" z="-0"/> + <v x="7.4400001" y="2.5205209" z="0"/> + <v x="7.4400001" y="-0.47947901" z="0"/> + <v x="-6.8736629" y="2.5205209" z="-2.8471651"/> + <v x="-6.8736629" y="-0.47947901" z="-2.8471651"/> + <v x="6.8736629" y="2.5205209" z="2.8471661"/> + <v x="6.8736629" y="-0.47947901" z="2.8471661"/> + <v x="-5.2608738" y="2.5205209" z="-5.2608738"/> + <v x="-5.2608738" y="-0.47947901" z="-5.2608738"/> + <v x="5.2608728" y="2.5205209" z="5.2608762"/> + <v x="5.2608728" y="-0.47947901" z="5.2608762"/> + <v x="-2.8471651" y="2.5205209" z="-6.8736629"/> + <v x="-2.8471651" y="-0.47947901" z="-6.8736629"/> + <v x="2.8471611" y="2.5205209" z="6.8736649"/> + <v x="2.8471611" y="-0.47947901" z="6.8736649"/> + <v x="-1e-006" y="2.5205209" z="-7.4400001"/> + <v x="-1e-006" y="-0.47947901" z="-7.4400001"/> + <v x="0" y="2.5205209" z="7.4400001"/> + <v x="-2.8471651" y="2.5205209" z="6.8736629"/> + <v x="0" y="-0.47947901" z="7.4400001"/> + <v x="-2.8471651" y="-0.47947901" z="6.8736629"/> + <v x="-4.092" y="1.234498" z="7.0875521"/> + <v x="-6.4928041" y="1.234498" z="4.9821029"/> + <v x="-4.092" y="-1.765502" z="7.0875521"/> + <v x="-6.4928041" y="-1.765502" z="4.9821029"/> + <v x="4.0919981" y="1.234498" z="-7.087554"/> + <v x="6.4928041" y="1.234498" z="-4.9821048"/> + <v x="4.0919981" y="-1.765502" z="-7.087554"/> + <v x="6.4928041" y="-1.765502" z="-4.9821048"/> + <v x="-7.9051371" y="1.234498" z="2.118175"/> + <v x="-7.9051371" y="-1.765502" z="2.118175"/> + <v x="7.905138" y="1.234498" z="-2.118175"/> + <v x="7.905138" y="-1.765502" z="-2.118175"/> + <v x="-8.1139851" y="1.234498" z="-1.0682271"/> + <v x="-8.1139851" y="-1.765502" z="-1.0682271"/> + <v x="4.982101" y="1.234498" z="6.492806"/> + <v x="2.118175" y="1.234498" z="7.9051371"/> + <v x="4.982101" y="-1.765502" z="6.492806"/> + <v x="2.118175" y="-1.765502" z="7.9051371"/> + <v x="1.068224" y="1.234498" z="-8.1139851"/> + <v x="1.068224" y="-1.765502" z="-8.1139851"/> + <v x="8.1139841" y="1.234498" z="1.068228"/> + <v x="7.0875511" y="1.234498" z="4.0920019"/> + <v x="8.1139841" y="-1.765502" z="1.068228"/> + <v x="7.0875511" y="-1.765502" z="4.0920019"/> + <v x="-7.0875521" y="1.234498" z="-4.092"/> + <v x="-4.9821038" y="1.234498" z="-6.4928041"/> + <v x="-7.0875521" y="-1.765502" z="-4.092"/> + <v x="-4.9821038" y="-1.765502" z="-6.4928041"/> + <v x="-1.0682271" y="1.234498" z="8.1139851"/> + <v x="-1.0682271" y="-1.765502" z="8.1139851"/> + <v x="-2.118176" y="1.234498" z="-7.9051371"/> + <v x="-2.118176" y="-1.765502" z="-7.9051371"/> + <v x="0" y="10" z="0"/> + <v x="2.0318091" y="9.6794968" z="-1.476179"/> + <v x="-0.77606601" y="9.6794977" z="-2.3885269"/> + <v x="7.236073" y="4.4721961" z="-5.2572532"/> + <v x="6.0954671" y="6.5751891" z="-4.4285641"/> + <v x="8.1272917" y="5.023006" z="-2.9523771"/> + <v x="-2.5114701" y="9.6794891" z="0"/> + <v x="-0.77606601" y="9.6794977" z="2.3885269"/> + <v x="2.0318091" y="9.6794968" z="1.476179"/> + <v x="8.6069775" y="2.511508" z="-4.428575"/> + <v x="-2.76388" y="4.472198" z="-8.5064917"/> + <v x="-0.29639301" y="5.0230188" z="-8.6418419"/> + <v x="-1.552151" y="2.5115161" z="-9.5542212"/> + <v x="-8.9442616" y="4.472156" z="0"/> + <v x="-8.3105059" y="5.0229869" z="-2.3885341"/> + <v x="-9.5662575" y="2.5114951" z="-1.4761831"/> + <v x="-2.76388" y="4.472198" z="8.5064917"/> + <v x="-4.8397141" y="5.023016" z="7.1656451"/> + <v x="-4.3600678" y="2.5115211" z="8.6418791"/> + <v x="7.236073" y="4.4721961" z="5.2572532"/> + <v x="5.3194089" y="5.0230169" z="6.8171239"/> + <v x="6.8715858" y="2.511519" z="6.817153"/> + <v x="6.8715858" y="2.511519" z="-6.817153"/> + <v x="-4.3600688" y="2.5115211" z="-8.6418791"/> + <v x="-9.5662575" y="2.5114951" z="1.476184"/> + <v x="-1.552151" y="2.5115161" z="9.5542212"/> + <v x="8.6069775" y="2.511508" z="4.428575"/> + <v x="2.76388" y="-4.472198" z="-8.5064917"/> + <v x="4.8397141" y="-5.023016" z="-7.1656451"/> + <v x="2.3282149" y="-6.575191" z="-7.1656299"/> + <v x="-7.236073" y="-4.4721961" z="-5.2572532"/> + <v x="-5.3194089" y="-5.0230169" z="-6.8171239"/> + <v x="-6.0954671" y="-6.5751891" z="-4.4285641"/> + <v x="-7.236073" y="-4.4721961" z="5.2572532"/> + <v x="-8.1272917" y="-5.023006" z="2.9523771"/> + <v x="-6.0954671" y="-6.5751891" z="4.4285641"/> + <v x="2.76388" y="-4.472198" z="8.5064917"/> + <v x="0.29639301" y="-5.0230188" z="8.6418419"/> + <v x="2.3282149" y="-6.575191" z="7.1656299"/> + <v x="8.9442616" y="-4.472156" z="0"/> + <v x="8.3105059" y="-5.0229869" z="2.3885341"/> + <v x="7.5344172" y="-6.5751481" z="0"/> + <v x="2.5114701" y="-9.6794891" z="0"/> + <v x="0.77606601" y="-9.6794977" z="2.3885281"/> + <v x="0" y="-10" z="0"/> + <v x="5.257298" y="-8.5065165" z="0"/> + <v x="3.6180029" y="-8.9442921" z="2.6286299"/> + <v x="6.3819361" y="-7.2361012" z="2.6286409"/> + <v x="1.624555" y="-8.5065441" z="4.9999528"/> + <v x="4.4720922" y="-7.2361159" z="5.2572818"/> + <v x="6.8818941" y="-5.2573619" z="4.999969"/> + <v x="4.8397141" y="-5.023016" z="7.1656451"/> + <v x="-2.0318091" y="-9.6794968" z="1.476179"/> + <v x="-1.381973" y="-8.9442997" z="4.2531948"/> + <v x="-0.52789599" y="-7.2361231" z="6.8818488"/> + <v x="-4.2532272" y="-8.5065422" z="3.0901141"/> + <v x="-3.618037" y="-7.2361221" z="5.8777838"/> + <v x="-2.6286881" y="-5.2573771" z="8.0901175"/> + <v x="-5.3194089" y="-5.0230169" z="6.8171239"/> + <v x="-2.0318091" y="-9.6794968" z="-1.476179"/> + <v x="-4.4720988" y="-8.9442902" z="0"/> + <v x="-6.7081671" y="-7.2361088" z="1.62457"/> + <v x="-4.2532272" y="-8.5065422" z="-3.0901141"/> + <v x="-6.7081671" y="-7.2361088" z="-1.62457"/> + <v x="-8.5064783" y="-5.257359" z="0"/> + <v x="-8.1272917" y="-5.023006" z="-2.9523771"/> + <v x="0.77606601" y="-9.6794977" z="-2.3885281"/> + <v x="-1.381973" y="-8.9442997" z="-4.2531948"/> + <v x="-3.618037" y="-7.2361231" z="-5.8777838"/> + <v x="1.624555" y="-8.5065441" z="-4.9999528"/> + <v x="-0.52789599" y="-7.2361231" z="-6.8818488"/> + <v x="-2.6286891" y="-5.2573771" z="-8.0901175"/> + <v x="0.29639199" y="-5.0230188" z="-8.6418409"/> + <v x="3.6180029" y="-8.9442921" z="-2.6286299"/> + <v x="4.4720922" y="-7.2361169" z="-5.2572818"/> + <v x="6.3819361" y="-7.2361012" z="-2.6286409"/> + <v x="6.8818941" y="-5.2573619" z="-4.999969"/> + <v x="8.3105059" y="-5.0229869" z="-2.3885341"/> + <v x="9.5662575" y="-2.5114951" z="1.4761831"/> + <v x="9.5105791" y="-0" z="3.090126"/> + <v x="8.6180429" y="-2.763962" z="4.2532191"/> + <v x="8.0901937" y="-0" z="5.877821"/> + <v x="6.7082062" y="-2.763974" z="6.8818908"/> + <v x="5.8778558" y="-0" z="8.090167"/> + <v x="4.3600688" y="-2.5115211" z="8.6418791"/> + <v x="1.552151" y="-2.5115161" z="9.5542212"/> + <v x="0" y="-0" z="10"/> + <v x="-1.3819849" y="-2.7639711" z="9.5105495"/> + <v x="-3.0901649" y="4.9999999e-006" z="9.5105667"/> + <v x="-4.4721508" y="-2.763972" z="8.5064869"/> + <v x="-5.8778558" y="-0" z="8.090168"/> + <v x="-6.8715858" y="-2.511519" z="6.817153"/> + <v x="-8.6069775" y="-2.511508" z="4.428575"/> + <v x="-9.5105791" y="-0" z="3.090126"/> + <v x="-9.4721317" y="-2.763958" z="1.624576"/> + <v x="-9.999999" y="-6.0000002e-006" z="-4e-006"/> + <v x="-9.4721289" y="-2.7639661" z="-1.624579"/> + <v x="-9.5105791" y="-0" z="-3.090126"/> + <v x="-8.6069775" y="-2.511508" z="-4.428575"/> + <v x="-6.8715858" y="-2.511519" z="-6.817153"/> + <v x="-5.8778558" y="-0" z="-8.090167"/> + <v x="-4.4721589" y="-2.7639689" z="-8.506484"/> + <v x="-3.0901721" y="8e-006" z="-9.5105639"/> + <v x="-1.3819931" y="-2.763968" z="-9.5105515"/> + <v x="0" y="-0" z="-10"/> + <v x="1.552151" y="-2.5115161" z="-9.5542212"/> + <v x="4.3600678" y="-2.5115211" z="-8.6418791"/> + <v x="5.8778558" y="-0" z="-8.090168"/> + <v x="6.7082028" y="-2.7639611" z="-6.8818979"/> + <v x="8.0901861" y="1.8999999e-005" z="-5.87783"/> + <v x="8.6180401" y="-2.7639439" z="-4.253232"/> + <v x="9.5105791" y="-0" z="-3.090126"/> + <v x="9.5662575" y="-2.5114951" z="-1.476184"/> + <v x="3.0901721" y="-0" z="9.5105648"/> + <v x="4.472157" y="2.7639771" z="8.5064831"/> + <v x="1.381991" y="2.7639761" z="9.5105495"/> + <v x="2.6286891" y="5.2573771" z="8.0901175"/> + <v x="-0.29639199" y="5.0230188" z="8.6418409"/> + <v x="-8.0901842" y="-0" z="5.8778319"/> + <v x="-6.708189" y="2.763973" z="6.881906"/> + <v x="-8.6180305" y="2.763963" z="4.2532392"/> + <v x="-6.8818941" y="5.2573619" z="4.999969"/> + <v x="-8.3105059" y="5.0229869" z="2.3885341"/> + <v x="-8.0901852" y="-0" z="-5.8778319"/> + <v x="-8.6180305" y="2.763963" z="-4.2532392"/> + <v x="-6.708189" y="2.763973" z="-6.881906"/> + <v x="-6.8818941" y="5.2573619" z="-4.999969"/> + <v x="-4.8397141" y="5.023016" z="-7.1656451"/> + <v x="3.0901721" y="-0" z="-9.5105648"/> + <v x="1.381992" y="2.7639761" z="-9.5105495"/> + <v x="4.472157" y="2.7639771" z="-8.5064831"/> + <v x="2.6286881" y="5.2573771" z="-8.0901175"/> + <v x="5.3194089" y="5.0230169" z="-6.8171239"/> + <v x="9.999999" y="-0" z="0"/> + <v x="9.4721317" y="2.7639599" z="-1.624575"/> + <v x="9.4721317" y="2.7639599" z="1.624575"/> + <v x="8.5064783" y="5.257359" z="0"/> + <v x="8.1272917" y="5.023006" z="2.9523771"/> + <v x="6.0954671" y="6.5751891" z="4.4285641"/> + <v x="4.2532272" y="8.5065422" z="3.0901141"/> + <v x="3.6180351" y="7.2361159" z="5.8777919"/> + <v x="1.381968" y="8.9442921" z="4.2532129"/> + <v x="0.52789098" y="7.2361102" z="6.8818631"/> + <v x="-1.624555" y="8.5065441" z="4.9999518"/> + <v x="-2.3282149" y="6.575191" z="7.1656299"/> + <v x="-4.472106" y="7.2361159" z="5.2572718"/> + <v x="-3.618012" y="8.9442902" z="2.6286261"/> + <v x="-6.381947" y="7.236095" z="2.628628"/> + <v x="-5.257298" y="8.5065165" z="0"/> + <v x="-7.5344172" y="6.5751481" z="0"/> + <v x="-6.3819451" y="7.236093" z="-2.6286371"/> + <v x="-3.6180129" y="8.9442825" z="-2.628643"/> + <v x="-4.472105" y="7.236104" z="-5.2572861"/> + <v x="-1.624555" y="8.5065441" z="-4.9999518"/> + <v x="-2.3282149" y="6.575191" z="-7.1656299"/> + <v x="6.7081699" y="7.2361059" z="1.624568"/> + <v x="6.7081752" y="7.2360988" z="-1.624577"/> + <v x="4.4721098" y="8.9442844" z="-7.0000001e-006"/> + <v x="4.2532272" y="8.5065422" z="-3.0901141"/> + <v x="0.52790397" y="7.2361178" z="-6.8818531"/> + <v x="1.381987" y="8.9442921" z="-4.2532058"/> + <v x="3.6180489" y="7.2361088" z="-5.8777909"/> + </vertices> + <normals count="0"/> + <textures count="3"> + <texture file="clktower"/> + <texture file="riftbld1"/> + <texture file="riftbld2"/> + </textures> + <primitives count="552"> + <poly v0="6" v1="9" v2="5" v3="3" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="16" v1="15" v2="5" v3="1" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="8" v1="9" v2="7" v3="6" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="31" tu1="0" tv1="0" tu2="31" tv2="31" tu3="31" tv3="0" type="FT4"/> + <poly v0="7" v1="6" v2="4" v3="5" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="9" v1="8" v2="3" v3="2" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="8" v1="7" v2="2" v3="4" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="21" v1="22" v2="12" v3="13" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="12" v1="13" v2="10" v3="11" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="17" v1="16" v2="3" v3="5" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="14" v1="17" v2="0" v3="3" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="19" v1="18" v2="17" v3="16" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="19" v1="20" v2="18" r0="0" g0="0" b0="0" type="F3"/> + <poly v0="23" v1="24" v2="21" v3="22" r0="128" g0="128" b0="128" texture="0" tu0="47" tv0="16" tu1="32" tv1="16" tu2="47" tv2="0" tu3="32" tv3="0" type="FT4"/> + <poly v0="27" v1="28" v2="25" v3="26" r0="24" g0="19" b0="43" r1="24" g1="19" b1="43" r2="0" g2="0" b2="0" r3="0" g3="0" b3="0" type="G4"/> + <poly v0="25" v1="26" v2="23" v3="24" r0="128" g0="128" b0="128" texture="0" tu0="47" tv0="31" tu1="32" tv1="31" tu2="47" tv2="16" tu3="32" tv3="16" type="FT4"/> + <poly v0="29" v1="30" v2="27" v3="28" r0="34" g0="27" b0="62" r1="34" g1="27" b1="62" r2="24" g2="19" b2="43" r3="24" g3="19" b3="43" type="G4"/> + <poly v0="39" v1="42" v2="38" v3="36" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="43" v1="46" v2="31" v3="35" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="50" v1="48" v2="35" v3="31" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="56" v1="55" v2="38" v3="34" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="41" v1="42" v2="40" v3="39" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="31" tu1="0" tv1="0" tu2="31" tv2="31" tu3="31" tv3="0" type="FT4"/> + <poly v0="40" v1="39" v2="37" v3="38" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="42" v1="41" v2="36" v3="35" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="41" v1="40" v2="35" v3="37" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="43" v1="44" v2="46" v3="45" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="31" tu1="0" tv1="0" tu2="31" tv2="31" tu3="31" tv3="0" type="FT4"/> + <poly v0="45" v1="44" v2="36" v3="32" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="46" v1="45" v2="35" v3="36" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="44" v1="43" v2="32" v3="31" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="53" v1="51" v2="50" v3="48" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="47" v1="49" v2="33" v3="37" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="49" v1="50" v2="37" v3="35" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="63" v1="64" v2="52" v3="53" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="52" v1="53" v2="49" v3="50" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="57" v1="56" v2="36" v3="38" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="54" v1="57" v2="32" v3="36" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="58" v1="61" v2="60" r0="0" g0="0" b0="0" type="F3"/> + <poly v0="58" v1="60" v2="54" v3="57" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="60" v1="59" v2="57" v3="56" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="60" v1="61" v2="59" r0="0" g0="0" b0="0" type="F3"/> + <poly v0="66" v1="67" v2="63" v3="64" r0="128" g0="128" b0="128" texture="0" tu0="47" tv0="16" tu1="32" tv1="16" tu2="47" tv2="0" tu3="32" tv3="0" type="FT4"/> + <poly v0="64" v1="62" v2="53" v3="51" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="70" v1="68" v2="67" v3="65" r0="128" g0="128" b0="128" texture="0" tu0="47" tv0="31" tu1="32" tv1="31" tu2="47" tv2="16" tu3="32" tv3="16" type="FT4"/> + <poly v0="67" v1="65" v2="64" v3="62" r0="128" g0="128" b0="128" texture="0" tu0="47" tv0="16" tu1="32" tv1="16" tu2="47" tv2="0" tu3="32" tv3="0" type="FT4"/> + <poly v0="72" v1="73" v2="69" v3="70" r0="24" g0="19" b0="43" r1="24" g1="19" b1="43" r2="0" g2="0" b2="0" r3="0" g3="0" b3="0" type="G4"/> + <poly v0="69" v1="70" v2="66" v3="67" r0="128" g0="128" b0="128" texture="0" tu0="47" tv0="31" tu1="32" tv1="31" tu2="47" tv2="16" tu3="32" tv3="16" type="FT4"/> + <poly v0="73" v1="71" v2="70" v3="68" r0="24" g0="19" b0="43" r1="24" g1="19" b1="43" r2="0" g2="0" b2="0" r3="0" g3="0" b3="0" type="G4"/> + <poly v0="76" v1="74" v2="73" v3="71" r0="34" g0="27" b0="62" r1="34" g1="27" b1="62" r2="24" g2="19" b2="43" r3="24" g3="19" b3="43" type="G4"/> + <poly v0="75" v1="76" v2="72" v3="73" r0="34" g0="27" b0="62" r1="34" g1="27" b1="62" r2="24" g2="19" b2="43" r3="24" g3="19" b3="43" type="G4"/> + <poly v0="89" v1="90" v2="78" v3="80" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="86" v1="85" v2="82" v3="81" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="99" v1="98" v2="82" v3="80" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="85" v1="86" v2="84" v3="83" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="31" tu1="0" tv1="0" tu2="31" tv2="31" tu3="31" tv3="0" type="FT4"/> + <poly v0="85" v1="84" v2="81" v3="79" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="83" v1="86" v2="80" v3="82" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="84" v1="83" v2="79" v3="80" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="87" v1="90" v2="88" v3="89" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="31" tu1="0" tv1="0" tu2="31" tv2="31" tu3="31" tv3="0" type="FT4"/> + <poly v0="87" v1="88" v2="79" v3="77" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="90" v1="87" v2="80" v3="79" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="88" v1="89" v2="77" v3="78" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="91" v1="93" v2="79" v3="81" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="92" v1="91" v2="77" v3="79" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="94" v1="96" v2="91" v3="93" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="95" v1="94" v2="92" v3="91" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="101" v1="100" v2="98" v3="97" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="98" v1="97" v2="80" v3="78" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="102" v1="101" v2="99" v3="98" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="102" v1="103" v2="101" r0="0" g0="0" b0="0" type="F3"/> + <poly v0="101" v1="103" v2="100" r0="0" g0="0" b0="0" type="F3"/> + <poly v0="105" v1="104" v2="95" v3="94" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="104" v1="106" v2="94" v3="96" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="108" v1="107" v2="105" v3="104" r0="128" g0="128" b0="128" texture="0" tu0="47" tv0="16" tu1="32" tv1="16" tu2="47" tv2="0" tu3="32" tv3="0" type="FT4"/> + <poly v0="107" v1="109" v2="104" v3="106" r0="128" g0="128" b0="128" texture="0" tu0="47" tv0="16" tu1="32" tv1="16" tu2="47" tv2="0" tu3="32" tv3="0" type="FT4"/> + <poly v0="110" v1="112" v2="107" v3="109" r0="128" g0="128" b0="128" texture="0" tu0="47" tv0="31" tu1="32" tv1="31" tu2="47" tv2="16" tu3="32" tv3="16" type="FT4"/> + <poly v0="111" v1="110" v2="108" v3="107" r0="128" g0="128" b0="128" texture="0" tu0="47" tv0="31" tu1="32" tv1="31" tu2="47" tv2="16" tu3="32" tv3="16" type="FT4"/> + <poly v0="117" v1="116" v2="114" v3="113" r0="34" g0="27" b0="60" r1="34" g1="27" b1="62" r2="29" g2="22" b2="51" r3="32" g3="25" b3="57" type="G4"/> + <poly v0="114" v1="113" v2="111" v3="110" r0="29" g0="22" b0="51" r1="32" g1="25" b1="57" r2="0" g2="0" b2="0" r3="0" g3="0" b3="0" type="G4"/> + <poly v0="113" v1="115" v2="110" v3="112" r0="32" g0="25" b0="57" r1="24" g1="19" b1="43" r2="0" g2="0" b2="0" r3="0" g3="0" b3="0" type="G4"/> + <poly v0="116" v1="118" v2="113" v3="115" r0="34" g0="27" b0="62" r1="32" g1="25" b1="57" r2="32" g2="25" b2="57" r3="24" g3="19" b3="43" type="G4"/> + <poly v0="132" v1="131" v2="124" v3="123" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="125" v1="128" v2="124" v3="122" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="140" v1="139" v2="124" v3="120" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="127" v1="128" v2="126" v3="125" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="31" tu1="31" tv1="0" tu2="0" tv2="31" tu3="0" tv3="0" type="FT4"/> + <poly v0="126" v1="125" v2="123" v3="124" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="128" v1="127" v2="122" v3="121" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="127" v1="126" v2="121" v3="123" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="131" v1="132" v2="130" v3="129" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="31" tu1="0" tv1="0" tu2="31" tv2="31" tu3="31" tv3="0" type="FT4"/> + <poly v0="131" v1="130" v2="123" v3="119" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="129" v1="132" v2="120" v3="124" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="130" v1="129" v2="119" v3="120" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="133" v1="134" v2="119" v3="123" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="134" v1="135" v2="123" v3="121" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="147" v1="148" v2="137" v3="138" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="136" v1="137" v2="133" v3="134" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="137" v1="138" v2="134" v3="135" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="141" v1="140" v2="122" v3="124" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="143" v1="142" v2="140" v3="139" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="144" v1="143" v2="141" v3="140" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="143" v1="145" v2="142" r0="0" g0="0" b0="0" type="F3"/> + <poly v0="144" v1="145" v2="143" r0="0" g0="0" b0="0" type="F3"/> + <poly v0="150" v1="151" v2="147" v3="148" r0="128" g0="128" b0="128" texture="0" tu0="47" tv0="16" tu1="32" tv1="16" tu2="47" tv2="0" tu3="32" tv3="0" type="FT4"/> + <poly v0="146" v1="147" v2="136" v3="137" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="149" v1="150" v2="146" v3="147" r0="128" g0="128" b0="128" texture="0" tu0="47" tv0="16" tu1="32" tv1="16" tu2="47" tv2="0" tu3="32" tv3="0" type="FT4"/> + <poly v0="156" v1="157" v2="153" v3="154" r0="24" g0="19" b0="43" r1="24" g1="19" b1="43" r2="0" g2="0" b2="0" r3="0" g3="0" b3="0" type="G4"/> + <poly v0="152" v1="153" v2="149" v3="150" r0="128" g0="128" b0="128" texture="0" tu0="47" tv0="31" tu1="32" tv1="31" tu2="47" tv2="16" tu3="32" tv3="16" type="FT4"/> + <poly v0="153" v1="154" v2="150" v3="151" r0="128" g0="128" b0="128" texture="0" tu0="47" tv0="31" tu1="32" tv1="31" tu2="47" tv2="16" tu3="32" tv3="16" type="FT4"/> + <poly v0="155" v1="156" v2="152" v3="153" r0="24" g0="19" b0="43" r1="24" g1="19" b1="43" r2="0" g2="0" b2="0" r3="0" g3="0" b3="0" type="G4"/> + <poly v0="158" v1="159" v2="155" v3="156" r0="34" g0="27" b0="62" r1="34" g1="27" b1="62" r2="24" g2="19" b2="43" r3="24" g3="19" b3="43" type="G4"/> + <poly v0="159" v1="160" v2="156" v3="157" r0="34" g0="27" b0="62" r1="34" g1="27" b1="62" r2="24" g2="19" b2="43" r3="24" g3="19" b3="43" type="G4"/> + <poly v0="168" v1="171" v2="167" v3="165" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="174" v1="177" v2="161" v3="164" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="181" v1="179" v2="164" v3="161" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="170" v1="171" v2="169" v3="168" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="31" tu1="31" tv1="0" tu2="0" tv2="31" tu3="0" tv3="0" type="FT4"/> + <poly v0="169" v1="168" v2="166" v3="167" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="171" v1="170" v2="165" v3="164" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="170" v1="169" v2="164" v3="166" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="172" v1="173" v2="161" v3="162" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="174" v1="175" v2="177" v3="176" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="31" tu1="0" tv1="0" tu2="31" tv2="31" tu3="31" tv3="0" type="FT4"/> + <poly v0="176" v1="175" v2="165" v3="162" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="177" v1="176" v2="164" v3="165" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="175" v1="174" v2="162" v3="161" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="184" v1="182" v2="181" v3="179" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="178" v1="180" v2="163" v3="166" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="180" v1="181" v2="166" v3="164" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="193" v1="194" v2="183" v3="184" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="183" v1="184" v2="180" v3="181" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="188" v1="191" v2="190" r0="0" g0="0" b0="0" type="F3"/> + <poly v0="188" v1="190" v2="185" v3="187" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="190" v1="189" v2="187" v3="186" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="190" v1="191" v2="189" r0="0" g0="0" b0="0" type="F3"/> + <poly v0="196" v1="197" v2="193" v3="194" r0="128" g0="128" b0="128" texture="0" tu0="47" tv0="16" tu1="32" tv1="16" tu2="47" tv2="0" tu3="32" tv3="0" type="FT4"/> + <poly v0="194" v1="192" v2="184" v3="182" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="200" v1="198" v2="197" v3="195" r0="128" g0="128" b0="128" texture="0" tu0="47" tv0="31" tu1="32" tv1="31" tu2="47" tv2="16" tu3="32" tv3="16" type="FT4"/> + <poly v0="197" v1="195" v2="194" v3="192" r0="128" g0="128" b0="128" texture="0" tu0="47" tv0="16" tu1="32" tv1="16" tu2="47" tv2="0" tu3="32" tv3="0" type="FT4"/> + <poly v0="202" v1="203" v2="199" v3="200" r0="24" g0="19" b0="43" r1="24" g1="19" b1="43" r2="0" g2="0" b2="0" r3="0" g3="0" b3="0" type="G4"/> + <poly v0="199" v1="200" v2="196" v3="197" r0="128" g0="128" b0="128" texture="0" tu0="47" tv0="31" tu1="32" tv1="31" tu2="47" tv2="16" tu3="32" tv3="16" type="FT4"/> + <poly v0="203" v1="201" v2="200" v3="198" r0="24" g0="19" b0="43" r1="24" g1="19" b1="43" r2="0" g2="0" b2="0" r3="0" g3="0" b3="0" type="G4"/> + <poly v0="206" v1="204" v2="203" v3="201" r0="34" g0="27" b0="62" r1="34" g1="27" b1="62" r2="24" g2="19" b2="43" r3="24" g3="19" b3="43" type="G4"/> + <poly v0="205" v1="206" v2="202" v3="203" r0="34" g0="27" b0="62" r1="34" g1="27" b1="62" r2="24" g2="19" b2="43" r3="24" g3="19" b3="43" type="G4"/> + <poly v0="221" v1="220" v2="213" v3="212" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="214" v1="217" v2="213" v3="211" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="230" v1="229" v2="213" v3="209" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="216" v1="217" v2="215" v3="214" r0="128" g0="128" b0="128" texture="0" tu0="31" tv0="31" tu1="31" tv1="0" tu2="0" tv2="31" tu3="0" tv3="0" type="FT4"/> + <poly v0="215" v1="214" v2="212" v3="213" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="217" v1="216" v2="211" v3="210" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="216" v1="215" v2="210" v3="212" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="220" v1="221" v2="219" v3="218" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="31" tu1="0" tv1="0" tu2="31" tv2="31" tu3="31" tv3="0" type="FT4"/> + <poly v0="220" v1="219" v2="212" v3="208" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="218" v1="221" v2="209" v3="213" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="219" v1="218" v2="208" v3="209" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="237" v1="238" v2="226" v3="227" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="225" v1="226" v2="222" v3="223" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="226" v1="227" v2="223" v3="224" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="231" v1="230" v2="211" v3="213" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="228" v1="231" v2="207" v3="211" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="233" v1="232" v2="230" v3="229" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="234" v1="233" v2="231" v3="230" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="233" v1="235" v2="232" r0="0" g0="0" b0="0" type="F3"/> + <poly v0="234" v1="235" v2="233" r0="0" g0="0" b0="0" type="F3"/> + <poly v0="240" v1="241" v2="237" v3="238" r0="128" g0="128" b0="128" texture="0" tu0="47" tv0="16" tu1="32" tv1="16" tu2="47" tv2="0" tu3="32" tv3="0" type="FT4"/> + <poly v0="236" v1="237" v2="225" v3="226" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="239" v1="240" v2="236" v3="237" r0="128" g0="128" b0="128" texture="0" tu0="47" tv0="16" tu1="32" tv1="16" tu2="47" tv2="0" tu3="32" tv3="0" type="FT4"/> + <poly v0="246" v1="247" v2="243" v3="244" r0="24" g0="19" b0="43" r1="24" g1="19" b1="43" r2="0" g2="0" b2="0" r3="0" g3="0" b3="0" type="G4"/> + <poly v0="242" v1="243" v2="239" v3="240" r0="128" g0="128" b0="128" texture="0" tu0="47" tv0="31" tu1="32" tv1="31" tu2="47" tv2="16" tu3="32" tv3="16" type="FT4"/> + <poly v0="243" v1="244" v2="240" v3="241" r0="128" g0="128" b0="128" texture="0" tu0="47" tv0="31" tu1="32" tv1="31" tu2="47" tv2="16" tu3="32" tv3="16" type="FT4"/> + <poly v0="245" v1="246" v2="242" v3="243" r0="24" g0="19" b0="43" r1="24" g1="19" b1="43" r2="0" g2="0" b2="0" r3="0" g3="0" b3="0" type="G4"/> + <poly v0="248" v1="249" v2="245" v3="246" r0="34" g0="27" b0="62" r1="34" g1="27" b1="62" r2="24" g2="19" b2="43" r3="24" g3="19" b3="43" type="G4"/> + <poly v0="249" v1="250" v2="246" v3="247" r0="34" g0="27" b0="62" r1="34" g1="27" b1="62" r2="24" g2="19" b2="43" r3="24" g3="19" b3="43" type="G4"/> + <poly v0="264" v1="265" v2="252" v3="254" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="261" v1="260" v2="257" v3="256" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="275" v1="274" v2="257" v3="254" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="260" v1="261" v2="259" v3="258" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="31" tu1="0" tv1="0" tu2="31" tv2="31" tu3="31" tv3="0" type="FT4"/> + <poly v0="260" v1="259" v2="256" v3="253" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="258" v1="261" v2="254" v3="257" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="259" v1="258" v2="253" v3="254" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="262" v1="265" v2="263" v3="264" r0="128" g0="128" b0="128" texture="0" tu0="0" tv0="31" tu1="0" tv1="0" tu2="31" tv2="31" tu3="31" tv3="0" type="FT4"/> + <poly v0="262" v1="263" v2="253" v3="251" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="265" v1="262" v2="254" v3="253" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="263" v1="264" v2="251" v3="252" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="266" v1="268" v2="253" v3="256" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="267" v1="266" v2="251" v3="253" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="268" v1="269" v2="256" v3="255" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="270" v1="272" v2="266" v3="268" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="271" v1="270" v2="267" v3="266" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="277" v1="276" v2="274" v3="273" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="274" v1="273" v2="254" v3="252" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="278" v1="277" v2="275" v3="274" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="278" v1="279" v2="277" r0="0" g0="0" b0="0" type="F3"/> + <poly v0="277" v1="279" v2="276" r0="0" g0="0" b0="0" type="F3"/> + <poly v0="281" v1="280" v2="271" v3="270" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="280" v1="282" v2="270" v3="272" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="284" v1="283" v2="281" v3="280" r0="128" g0="128" b0="128" texture="0" tu0="47" tv0="16" tu1="32" tv1="16" tu2="47" tv2="0" tu3="32" tv3="0" type="FT4"/> + <poly v0="283" v1="285" v2="280" v3="282" r0="128" g0="128" b0="128" texture="0" tu0="47" tv0="16" tu1="32" tv1="16" tu2="47" tv2="0" tu3="32" tv3="0" type="FT4"/> + <poly v0="286" v1="288" v2="283" v3="285" r0="128" g0="128" b0="128" texture="0" tu0="47" tv0="31" tu1="32" tv1="31" tu2="47" tv2="16" tu3="32" tv3="16" type="FT4"/> + <poly v0="287" v1="286" v2="284" v3="283" r0="128" g0="128" b0="128" texture="0" tu0="47" tv0="31" tu1="32" tv1="31" tu2="47" tv2="16" tu3="32" tv3="16" type="FT4"/> + <poly v0="293" v1="292" v2="290" v3="289" r0="40" g0="33" b0="75" r1="40" g1="33" b1="75" r2="32" g2="25" b2="57" r3="40" g3="33" b3="74" type="G4"/> + <poly v0="290" v1="289" v2="287" v3="286" r0="32" g0="25" b0="57" r1="40" g1="33" b1="74" r2="0" g2="0" b2="0" r3="0" g3="0" b3="0" type="G4"/> + <poly v0="289" v1="291" v2="286" v3="288" r0="40" g0="33" b0="74" r1="24" g1="19" b1="43" r2="0" g2="0" b2="0" r3="0" g3="0" b3="0" type="G4"/> + <poly v0="292" v1="294" v2="289" v3="291" r0="40" g0="33" b0="75" r1="40" g1="33" b1="75" r2="40" g2="33" b2="74" r3="24" g3="19" b3="43" type="G4"/> + <poly v0="269" v1="267" v2="255" v3="251" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="179" v1="178" v2="161" v3="163" r0="0" g0="0" b0="0" type="F4"/> + <poly v0="295" v1="296" v2="297" v3="298" r0="128" g0="128" b0="128" texture="1" tu0="0" tv0="31" tu1="63" tv1="31" tu2="0" tv2="0" tu3="63" tv3="0" type="FT4"/> + <poly v0="299" v1="300" v2="301" v3="302" r0="128" g0="128" b0="128" texture="1" tu0="0" tv0="31" tu1="63" tv1="31" tu2="0" tv2="0" tu3="63" tv3="0" type="FT4"/> + <poly v0="296" v1="303" v2="298" v3="304" r0="128" g0="128" b0="128" texture="1" tu0="0" tv0="31" tu1="63" tv1="31" tu2="0" tv2="0" tu3="63" tv3="0" type="FT4"/> + <poly v0="300" v1="305" v2="302" v3="306" r0="128" g0="128" b0="128" texture="1" tu0="0" tv0="31" tu1="63" tv1="31" tu2="0" tv2="0" tu3="63" tv3="0" type="FT4"/> + <poly v0="303" v1="307" v2="304" v3="308" r0="128" g0="128" b0="128" texture="1" tu0="0" tv0="31" tu1="63" tv1="31" tu2="0" tv2="0" tu3="63" tv3="0" type="FT4"/> + <poly v0="305" v1="309" v2="306" v3="310" r0="128" g0="128" b0="128" texture="1" tu0="0" tv0="31" tu1="63" tv1="31" tu2="0" tv2="0" tu3="63" tv3="0" type="FT4"/> + <poly v0="307" v1="311" v2="308" v3="312" r0="128" g0="128" b0="128" texture="1" tu0="0" tv0="31" tu1="63" tv1="31" tu2="0" tv2="0" tu3="63" tv3="0" type="FT4"/> + <poly v0="309" v1="313" v2="310" v3="314" r0="128" g0="128" b0="128" texture="1" tu0="0" tv0="31" tu1="63" tv1="31" tu2="0" tv2="0" tu3="63" tv3="0" type="FT4"/> + <poly v0="311" v1="315" v2="312" v3="316" r0="128" g0="128" b0="128" texture="1" tu0="0" tv0="31" tu1="63" tv1="31" tu2="0" tv2="0" tu3="63" tv3="0" type="FT4"/> + <poly v0="313" v1="317" v2="314" v3="318" r0="128" g0="128" b0="128" texture="1" tu0="0" tv0="31" tu1="63" tv1="31" tu2="0" tv2="0" tu3="63" tv3="0" type="FT4"/> + <poly v0="315" v1="319" v2="316" v3="320" r0="128" g0="128" b0="128" texture="1" tu0="0" tv0="31" tu1="63" tv1="31" tu2="0" tv2="0" tu3="63" tv3="0" type="FT4"/> + <poly v0="317" v1="321" v2="318" v3="322" r0="128" g0="128" b0="128" texture="1" tu0="0" tv0="31" tu1="63" tv1="31" tu2="0" tv2="0" tu3="63" tv3="0" type="FT4"/> + <poly v0="323" v1="324" v2="325" v3="326" r0="128" g0="128" b0="128" texture="1" tu0="0" tv0="31" tu1="63" tv1="31" tu2="0" tv2="0" tu3="63" tv3="0" type="FT4"/> + <poly v0="319" v1="323" v2="320" v3="325" r0="128" g0="128" b0="128" texture="1" tu0="0" tv0="31" tu1="63" tv1="31" tu2="0" tv2="0" tu3="63" tv3="0" type="FT4"/> + <poly v0="321" v1="295" v2="322" v3="297" r0="128" g0="128" b0="128" texture="1" tu0="0" tv0="31" tu1="63" tv1="31" tu2="0" tv2="0" tu3="63" tv3="0" type="FT4"/> + <poly v0="324" v1="299" v2="326" v3="301" r0="128" g0="128" b0="128" texture="1" tu0="0" tv0="31" tu1="63" tv1="31" tu2="0" tv2="0" tu3="63" tv3="0" type="FT4"/> + <poly v0="327" v1="328" v2="329" v3="330" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="31" tu1="63" tv1="31" tu2="0" tv2="0" tu3="63" tv3="0" type="FT4"/> + <poly v0="331" v1="332" v2="333" v3="334" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="31" tu1="63" tv1="31" tu2="0" tv2="0" tu3="63" tv3="0" type="FT4"/> + <poly v0="328" v1="335" v2="330" v3="336" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="31" tu1="63" tv1="31" tu2="0" tv2="0" tu3="63" tv3="0" type="FT4"/> + <poly v0="332" v1="337" v2="334" v3="338" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="31" tu1="63" tv1="31" tu2="0" tv2="0" tu3="63" tv3="0" type="FT4"/> + <poly v0="335" v1="339" v2="336" v3="340" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="31" tu1="63" tv1="31" tu2="0" tv2="0" tu3="63" tv3="0" type="FT4"/> + <poly v0="341" v1="342" v2="343" v3="344" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="31" tu1="63" tv1="31" tu2="0" tv2="0" tu3="63" tv3="0" type="FT4"/> + <poly v0="345" v1="331" v2="346" v3="333" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="31" tu1="63" tv1="31" tu2="0" tv2="0" tu3="63" tv3="0" type="FT4"/> + <poly v0="347" v1="348" v2="349" v3="350" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="31" tu1="63" tv1="31" tu2="0" tv2="0" tu3="63" tv3="0" type="FT4"/> + <poly v0="351" v1="352" v2="353" v3="354" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="31" tu1="63" tv1="31" tu2="0" tv2="0" tu3="63" tv3="0" type="FT4"/> + <poly v0="348" v1="341" v2="350" v3="343" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="31" tu1="63" tv1="31" tu2="0" tv2="0" tu3="63" tv3="0" type="FT4"/> + <poly v0="342" v1="355" v2="344" v3="356" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="31" tu1="63" tv1="31" tu2="0" tv2="0" tu3="63" tv3="0" type="FT4"/> + <poly v0="337" v1="347" v2="338" v3="349" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="31" tu1="63" tv1="31" tu2="0" tv2="0" tu3="63" tv3="0" type="FT4"/> + <poly v0="355" v1="327" v2="356" v3="329" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="31" tu1="63" tv1="31" tu2="0" tv2="0" tu3="63" tv3="0" type="FT4"/> + <poly v0="339" v1="351" v2="340" v3="353" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="31" tu1="63" tv1="31" tu2="0" tv2="0" tu3="63" tv3="0" type="FT4"/> + <poly v0="352" v1="357" v2="354" v3="358" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="31" tu1="63" tv1="31" tu2="0" tv2="0" tu3="63" tv3="0" type="FT4"/> + <poly v0="357" v1="345" v2="358" v3="346" r0="128" g0="128" b0="128" texture="2" tu0="0" tv0="31" tu1="63" tv1="31" tu2="0" tv2="0" tu3="63" tv3="0" type="FT4"/> + <poly v0="359" v1="360" v2="361" r0="33" g0="27" b0="61" type="F3"/> + <poly v0="362" v1="363" v2="364" r0="64" g0="53" b0="118" r1="35" g1="29" b1="66" r2="51" g2="43" b2="95" type="G3"/> + <poly v0="359" v1="361" v2="365" r0="33" g0="27" b0="61" type="F3"/> + <poly v0="359" v1="365" v2="366" r0="33" g0="27" b0="61" r1="33" g1="27" b1="61" r2="36" g2="30" b2="68" type="G3"/> + <poly v0="359" v1="366" v2="367" r0="33" g0="27" b0="61" r1="36" g1="30" b1="68" r2="33" g2="27" b2="61" type="G3"/> + <poly v0="362" v1="364" v2="368" r0="64" g0="53" b0="118" r1="51" g1="43" b1="95" r2="72" g2="59" b2="135" type="G3"/> + <poly v0="369" v1="370" v2="371" r0="66" g0="54" b0="122" r1="59" g1="49" b1="111" r2="72" g2="59" b2="135" type="G3"/> + <poly v0="372" v1="373" v2="374" r0="66" g0="54" b0="122" r1="66" g1="54" b1="122" r2="73" g2="60" b2="136" type="G3"/> + <poly v0="375" v1="376" v2="377" r0="66" g0="54" b0="122" r1="66" g1="54" b1="122" r2="73" g2="60" b2="136" type="G3"/> + <poly v0="378" v1="379" v2="380" r0="65" g0="53" b0="121" r1="66" g1="54" b1="122" r2="94" g2="83" b2="149" type="G3"/> + <poly v0="362" v1="368" v2="381" r0="64" g0="53" b0="118" r1="72" g1="59" b1="135" r2="72" g2="59" b2="135" type="G3"/> + <poly v0="369" v1="371" v2="382" r0="66" g0="54" b0="122" r1="72" g1="59" b1="135" r2="73" g2="60" b2="136" type="G3"/> + <poly v0="372" v1="374" v2="383" r0="66" g0="54" b0="122" r1="73" g1="60" b1="136" r2="72" g2="59" b2="135" type="G3"/> + <poly v0="375" v1="377" v2="384" r0="66" g0="54" b0="122" r1="73" g1="60" b1="136" r2="91" g2="79" b2="147" type="G3"/> + <poly v0="378" v1="380" v2="385" r0="65" g0="53" b0="121" r1="94" g1="83" b1="149" r2="72" g2="59" b2="135" type="G3"/> + <poly v0="386" v1="387" v2="388" r0="143" g0="169" b0="255" r1="143" g1="169" b1="255" r2="255" g2="255" b2="255" type="G3"/> + <poly v0="389" v1="390" v2="391" r0="144" g0="170" b0="255" r1="143" g1="169" b1="255" r2="255" g2="255" b2="255" type="G3"/> + <poly v0="392" v1="393" v2="394" r0="145" g0="170" b0="255" r1="143" g1="169" b1="255" r2="255" g2="255" b2="255" type="G3"/> + <poly v0="395" v1="396" v2="397" r0="143" g0="169" b0="255" r1="143" g1="169" b1="255" r2="255" g2="255" b2="255" type="G3"/> + <poly v0="398" v1="399" v2="400" r0="143" g0="169" b0="255" r1="143" g1="169" b1="255" r2="255" g2="255" b2="255" type="G3"/> + <poly v0="401" v1="402" v2="403" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="404" v1="405" v2="401" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="400" v1="406" v2="404" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="401" v1="405" v2="402" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="405" v1="407" v2="402" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="404" v1="406" v2="405" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="406" v1="408" v2="405" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="405" v1="408" v2="407" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="408" v1="397" v2="407" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="400" v1="399" v2="406" r0="255" g0="255" b0="255" r1="143" g1="169" b1="255" r2="255" g2="255" b2="255" type="G3"/> + <poly v0="399" v1="409" v2="406" r0="143" g0="169" b0="255" r1="143" g1="169" b1="255" r2="255" g2="255" b2="255" type="G3"/> + <poly v0="406" v1="409" v2="408" r0="255" g0="255" b0="255" r1="143" g1="169" b1="255" r2="255" g2="255" b2="255" type="G3"/> + <poly v0="409" v1="410" v2="408" r0="143" g0="169" b0="255" r1="143" g1="169" b1="255" r2="255" g2="255" b2="255" type="G3"/> + <poly v0="408" v1="410" v2="397" r0="255" g0="255" b0="255" r1="143" g1="169" b1="255" r2="255" g2="255" b2="255" type="G3"/> + <poly v0="410" v1="395" v2="397" r0="143" g0="169" b0="255" r1="143" g1="169" b1="255" r2="255" g2="255" b2="255" type="G3"/> + <poly v0="402" v1="411" v2="403" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="407" v1="412" v2="402" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="397" v1="413" v2="407" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="402" v1="412" v2="411" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="412" v1="414" v2="411" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="407" v1="413" v2="412" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="413" v1="415" v2="412" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="412" v1="415" v2="414" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="415" v1="394" v2="414" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="397" v1="396" v2="413" r0="255" g0="255" b0="255" r1="143" g1="169" b1="255" r2="255" g2="255" b2="255" type="G3"/> + <poly v0="396" v1="416" v2="413" r0="143" g0="169" b0="255" r1="143" g1="169" b1="255" r2="255" g2="255" b2="255" type="G3"/> + <poly v0="413" v1="416" v2="415" r0="255" g0="255" b0="255" r1="143" g1="169" b1="255" r2="255" g2="255" b2="255" type="G3"/> + <poly v0="416" v1="417" v2="415" r0="143" g0="169" b0="255" r1="143" g1="169" b1="255" r2="255" g2="255" b2="255" type="G3"/> + <poly v0="415" v1="417" v2="394" r0="255" g0="255" b0="255" r1="143" g1="169" b1="255" r2="255" g2="255" b2="255" type="G3"/> + <poly v0="417" v1="392" v2="394" r0="143" g0="169" b0="255" r1="145" g1="170" b1="255" r2="255" g2="255" b2="255" type="G3"/> + <poly v0="411" v1="418" v2="403" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="414" v1="419" v2="411" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="394" v1="420" v2="414" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="411" v1="419" v2="418" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="419" v1="421" v2="418" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="414" v1="420" v2="419" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="420" v1="422" v2="419" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="419" v1="422" v2="421" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="422" v1="391" v2="421" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="394" v1="393" v2="420" r0="255" g0="255" b0="255" r1="143" g1="169" b1="255" r2="255" g2="255" b2="255" type="G3"/> + <poly v0="393" v1="423" v2="420" r0="143" g0="169" b0="255" r1="143" g1="169" b1="255" r2="255" g2="255" b2="255" type="G3"/> + <poly v0="420" v1="423" v2="422" r0="255" g0="255" b0="255" r1="143" g1="169" b1="255" r2="255" g2="255" b2="255" type="G3"/> + <poly v0="423" v1="424" v2="422" r0="143" g0="169" b0="255" r1="143" g1="169" b1="255" r2="255" g2="255" b2="255" type="G3"/> + <poly v0="422" v1="424" v2="391" r0="255" g0="255" b0="255" r1="143" g1="169" b1="255" r2="255" g2="255" b2="255" type="G3"/> + <poly v0="424" v1="389" v2="391" r0="143" g0="169" b0="255" r1="144" g1="170" b1="255" r2="255" g2="255" b2="255" type="G3"/> + <poly v0="418" v1="425" v2="403" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="421" v1="426" v2="418" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="391" v1="427" v2="421" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="418" v1="426" v2="425" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="426" v1="428" v2="425" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="421" v1="427" v2="426" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="427" v1="429" v2="426" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="426" v1="429" v2="428" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="429" v1="388" v2="428" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="391" v1="390" v2="427" r0="255" g0="255" b0="255" r1="143" g1="169" b1="255" r2="255" g2="255" b2="255" type="G3"/> + <poly v0="390" v1="430" v2="427" r0="143" g0="169" b0="255" r1="143" g1="169" b1="255" r2="255" g2="255" b2="255" type="G3"/> + <poly v0="427" v1="430" v2="429" r0="255" g0="255" b0="255" r1="143" g1="169" b1="255" r2="255" g2="255" b2="255" type="G3"/> + <poly v0="430" v1="431" v2="429" r0="143" g0="169" b0="255" r1="143" g1="169" b1="255" r2="255" g2="255" b2="255" type="G3"/> + <poly v0="429" v1="431" v2="388" r0="255" g0="255" b0="255" r1="143" g1="169" b1="255" r2="255" g2="255" b2="255" type="G3"/> + <poly v0="431" v1="386" v2="388" r0="143" g0="169" b0="255" r1="143" g1="169" b1="255" r2="255" g2="255" b2="255" type="G3"/> + <poly v0="425" v1="401" v2="403" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="428" v1="432" v2="425" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="388" v1="433" v2="428" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="425" v1="432" v2="401" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="432" v1="404" v2="401" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="428" v1="433" v2="432" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="433" v1="434" v2="432" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="432" v1="434" v2="404" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="434" v1="400" v2="404" r0="255" g0="255" b0="255" type="F3"/> + <poly v0="388" v1="387" v2="433" r0="255" g0="255" b0="255" r1="143" g1="169" b1="255" r2="255" g2="255" b2="255" type="G3"/> + <poly v0="387" v1="435" v2="433" r0="143" g0="169" b0="255" r1="143" g1="169" b1="255" r2="255" g2="255" b2="255" type="G3"/> + <poly v0="433" v1="435" v2="434" r0="255" g0="255" b0="255" r1="143" g1="169" b1="255" r2="255" g2="255" b2="255" type="G3"/> + <poly v0="435" v1="436" v2="434" r0="143" g0="169" b0="255" r1="143" g1="169" b1="255" r2="255" g2="255" b2="255" type="G3"/> + <poly v0="434" v1="436" v2="400" r0="255" g0="255" b0="255" r1="143" g1="169" b1="255" r2="255" g2="255" b2="255" type="G3"/> + <poly v0="436" v1="398" v2="400" r0="143" g0="169" b0="255" r1="143" g1="169" b1="255" r2="255" g2="255" b2="255" type="G3"/> + <poly v0="437" v1="399" v2="398" r0="110" g0="136" b0="255" r1="143" g1="169" b1="255" r2="143" g2="169" b2="255" type="G3"/> + <poly v0="438" v1="439" v2="437" r0="77" g0="98" b0="207" r1="188" g1="203" b1="255" r2="110" g2="136" b2="255" type="G3"/> + <poly v0="385" v1="440" v2="438" r0="72" g0="59" b0="135" r1="95" g1="115" b1="212" r2="77" g2="98" b2="207" type="G3"/> + <poly v0="437" v1="439" v2="399" r0="110" g0="136" b0="255" r1="188" g1="203" b1="255" r2="143" g2="169" b2="255" type="G3"/> + <poly v0="439" v1="409" v2="399" r0="188" g0="203" b0="255" r1="143" g1="169" b1="255" r2="143" g2="169" b2="255" type="G3"/> + <poly v0="438" v1="440" v2="439" r0="77" g0="98" b0="207" r1="95" g1="115" b1="212" r2="188" g2="203" b2="255" type="G3"/> + <poly v0="440" v1="441" v2="439" r0="95" g0="115" b0="212" r1="106" g1="132" b1="255" r2="188" g2="203" b2="255" type="G3"/> + <poly v0="439" v1="441" v2="409" r0="188" g0="203" b0="255" r1="106" g1="132" b1="255" r2="143" g2="169" b2="255" type="G3"/> + <poly v0="441" v1="410" v2="409" r0="106" g0="132" b0="255" r1="143" g1="169" b1="255" r2="143" g2="169" b2="255" type="G3"/> + <poly v0="385" v1="380" v2="440" r0="72" g0="59" b0="135" r1="94" g1="83" b1="149" r2="95" g2="115" b2="212" type="G3"/> + <poly v0="380" v1="442" v2="440" r0="94" g0="83" b0="149" r1="77" g1="98" b1="207" r2="95" g2="115" b2="212" type="G3"/> + <poly v0="440" v1="442" v2="441" r0="95" g0="115" b0="212" r1="77" g1="98" b1="207" r2="106" g2="132" b2="255" type="G3"/> + <poly v0="442" v1="443" v2="441" r0="77" g0="98" b0="207" r1="95" g1="121" b1="255" r2="106" g2="132" b2="255" type="G3"/> + <poly v0="441" v1="443" v2="410" r0="106" g0="132" b0="255" r1="95" g1="121" b1="255" r2="143" g2="169" b2="255" type="G3"/> + <poly v0="443" v1="395" v2="410" r0="95" g0="121" b0="255" r1="143" g1="169" b1="255" r2="143" g2="169" b2="255" type="G3"/> + <poly v0="444" v1="396" v2="395" r0="95" g0="121" b0="255" r1="143" g1="169" b1="255" r2="143" g2="169" b2="255" type="G3"/> + <poly v0="445" v1="446" v2="444" r0="77" g0="98" b0="207" r1="141" g1="163" b1="255" r2="95" g2="121" b2="255" type="G3"/> + <poly v0="384" v1="447" v2="445" r0="91" g0="79" b0="147" r1="77" g1="98" b1="207" r2="77" g2="98" b2="207" type="G3"/> + <poly v0="444" v1="446" v2="396" r0="95" g0="121" b0="255" r1="141" g1="163" b1="255" r2="143" g2="169" b2="255" type="G3"/> + <poly v0="446" v1="416" v2="396" r0="141" g0="163" b0="255" r1="143" g1="169" b1="255" r2="143" g2="169" b2="255" type="G3"/> + <poly v0="445" v1="447" v2="446" r0="77" g0="98" b0="207" r1="77" g1="98" b1="207" r2="141" g2="163" b2="255" type="G3"/> + <poly v0="447" v1="448" v2="446" r0="77" g0="98" b0="207" r1="96" g1="122" b1="255" r2="141" g2="163" b2="255" type="G3"/> + <poly v0="446" v1="448" v2="416" r0="141" g0="163" b0="255" r1="96" g1="122" b1="255" r2="143" g2="169" b2="255" type="G3"/> + <poly v0="448" v1="417" v2="416" r0="96" g0="122" b0="255" r1="143" g1="169" b1="255" r2="143" g2="169" b2="255" type="G3"/> + <poly v0="384" v1="377" v2="447" r0="91" g0="79" b0="147" r1="73" g1="60" b1="136" r2="77" g2="98" b2="207" type="G3"/> + <poly v0="377" v1="449" v2="447" r0="73" g0="60" b0="136" r1="77" g1="98" b1="207" r2="77" g2="98" b2="207" type="G3"/> + <poly v0="447" v1="449" v2="448" r0="77" g0="98" b0="207" r1="77" g1="98" b1="207" r2="96" g2="122" b2="255" type="G3"/> + <poly v0="449" v1="450" v2="448" r0="77" g0="98" b0="207" r1="95" g1="121" b1="255" r2="96" g2="122" b2="255" type="G3"/> + <poly v0="448" v1="450" v2="417" r0="96" g0="122" b0="255" r1="95" g1="121" b1="255" r2="143" g2="169" b2="255" type="G3"/> + <poly v0="450" v1="392" v2="417" r0="95" g0="121" b0="255" r1="145" g1="170" b1="255" r2="143" g2="169" b2="255" type="G3"/> + <poly v0="451" v1="393" v2="392" r0="95" g0="121" b0="255" r1="143" g1="169" b1="255" r2="145" g2="170" b2="255" type="G3"/> + <poly v0="452" v1="453" v2="451" r0="78" g0="99" b0="207" r1="95" g1="121" b1="255" r2="95" g2="121" b2="255" type="G3"/> + <poly v0="383" v1="454" v2="452" r0="72" g0="59" b0="135" r1="101" g1="119" b1="213" r2="78" g2="99" b2="207" type="G3"/> + <poly v0="451" v1="453" v2="393" r0="95" g0="121" b0="255" r1="95" g1="121" b1="255" r2="143" g2="169" b2="255" type="G3"/> + <poly v0="453" v1="423" v2="393" r0="95" g0="121" b0="255" r1="143" g1="169" b1="255" r2="143" g2="169" b2="255" type="G3"/> + <poly v0="452" v1="454" v2="453" r0="78" g0="99" b0="207" r1="101" g1="119" b1="213" r2="95" g2="121" b2="255" type="G3"/> + <poly v0="454" v1="455" v2="453" r0="101" g0="119" b0="213" r1="107" g1="133" b1="255" r2="95" g2="121" b2="255" type="G3"/> + <poly v0="453" v1="455" v2="423" r0="95" g0="121" b0="255" r1="107" g1="133" b1="255" r2="143" g2="169" b2="255" type="G3"/> + <poly v0="455" v1="424" v2="423" r0="107" g0="133" b0="255" r1="143" g1="169" b1="255" r2="143" g2="169" b2="255" type="G3"/> + <poly v0="383" v1="374" v2="454" r0="72" g0="59" b0="135" r1="73" g1="60" b1="136" r2="101" g2="119" b2="213" type="G3"/> + <poly v0="374" v1="456" v2="454" r0="73" g0="60" b0="136" r1="77" g1="98" b1="207" r2="101" g2="119" b2="213" type="G3"/> + <poly v0="454" v1="456" v2="455" r0="101" g0="119" b0="213" r1="77" g1="98" b1="207" r2="107" g2="133" b2="255" type="G3"/> + <poly v0="456" v1="457" v2="455" r0="77" g0="98" b0="207" r1="95" g1="121" b1="255" r2="107" g2="133" b2="255" type="G3"/> + <poly v0="455" v1="457" v2="424" r0="107" g0="133" b0="255" r1="95" g1="121" b1="255" r2="143" g2="169" b2="255" type="G3"/> + <poly v0="457" v1="389" v2="424" r0="95" g0="121" b0="255" r1="144" g1="170" b1="255" r2="143" g2="169" b2="255" type="G3"/> + <poly v0="458" v1="390" v2="389" r0="95" g0="121" b0="255" r1="143" g1="169" b1="255" r2="144" g2="170" b2="255" type="G3"/> + <poly v0="459" v1="460" v2="458" r0="77" g0="98" b0="207" r1="95" g1="121" b1="255" r2="95" g2="121" b2="255" type="G3"/> + <poly v0="382" v1="461" v2="459" r0="73" g0="60" b0="136" r1="75" g1="77" b1="167" r2="77" g2="98" b2="207" type="G3"/> + <poly v0="458" v1="460" v2="390" r0="95" g0="121" b0="255" r1="95" g1="121" b1="255" r2="143" g2="169" b2="255" type="G3"/> + <poly v0="460" v1="430" v2="390" r0="95" g0="121" b0="255" r1="143" g1="169" b1="255" r2="143" g2="169" b2="255" type="G3"/> + <poly v0="459" v1="461" v2="460" r0="77" g0="98" b0="207" r1="75" g1="77" b1="167" r2="95" g2="121" b2="255" type="G3"/> + <poly v0="461" v1="462" v2="460" r0="75" g0="77" b0="167" r1="105" g1="129" b1="255" r2="95" g2="121" b2="255" type="G3"/> + <poly v0="460" v1="462" v2="430" r0="95" g0="121" b0="255" r1="105" g1="129" b1="255" r2="143" g2="169" b2="255" type="G3"/> + <poly v0="462" v1="431" v2="430" r0="105" g0="129" b0="255" r1="143" g1="169" b1="255" r2="143" g2="169" b2="255" type="G3"/> + <poly v0="382" v1="371" v2="461" r0="73" g0="60" b0="136" r1="72" g1="59" b1="135" r2="75" g2="77" b2="167" type="G3"/> + <poly v0="371" v1="463" v2="461" r0="72" g0="59" b0="135" r1="79" g1="100" b1="208" r2="75" g2="77" b2="167" type="G3"/> + <poly v0="461" v1="463" v2="462" r0="75" g0="77" b0="167" r1="79" g1="100" b1="208" r2="105" g2="129" b2="255" type="G3"/> + <poly v0="463" v1="464" v2="462" r0="79" g0="100" b0="208" r1="128" g1="149" b1="255" r2="105" g2="129" b2="255" type="G3"/> + <poly v0="462" v1="464" v2="431" r0="105" g0="129" b0="255" r1="128" g1="149" b1="255" r2="143" g2="169" b2="255" type="G3"/> + <poly v0="464" v1="386" v2="431" r0="128" g0="149" b0="255" r1="143" g1="169" b1="255" r2="143" g2="169" b2="255" type="G3"/> + <poly v0="465" v1="387" v2="386" r0="95" g0="121" b0="255" r1="143" g1="169" b1="255" r2="143" g2="169" b2="255" type="G3"/> + <poly v0="466" v1="467" v2="465" r0="80" g0="101" b0="209" r1="115" g1="141" b1="255" r2="95" g2="121" b2="255" type="G3"/> + <poly v0="381" v1="468" v2="466" r0="72" g0="59" b0="135" r1="74" g1="75" b1="165" r2="80" g2="101" b2="209" type="G3"/> + <poly v0="465" v1="467" v2="387" r0="95" g0="121" b0="255" r1="115" g1="141" b1="255" r2="143" g2="169" b2="255" type="G3"/> + <poly v0="467" v1="435" v2="387" r0="115" g0="141" b0="255" r1="143" g1="169" b1="255" r2="143" g2="169" b2="255" type="G3"/> + <poly v0="466" v1="468" v2="467" r0="80" g0="101" b0="209" r1="74" g1="75" b1="165" r2="115" g2="141" b2="255" type="G3"/> + <poly v0="468" v1="469" v2="467" r0="74" g0="75" b0="165" r1="95" g1="121" b1="255" r2="115" g2="141" b2="255" type="G3"/> + <poly v0="467" v1="469" v2="435" r0="115" g0="141" b0="255" r1="95" g1="121" b1="255" r2="143" g2="169" b2="255" type="G3"/> + <poly v0="469" v1="436" v2="435" r0="95" g0="121" b0="255" r1="143" g1="169" b1="255" r2="143" g2="169" b2="255" type="G3"/> + <poly v0="381" v1="368" v2="468" r0="72" g0="59" b0="135" r1="72" g1="59" b1="135" r2="74" g2="75" b2="165" type="G3"/> + <poly v0="368" v1="470" v2="468" r0="72" g0="59" b0="135" r1="77" g1="98" b1="207" r2="74" g2="75" b2="165" type="G3"/> + <poly v0="468" v1="470" v2="469" r0="74" g0="75" b0="165" r1="77" g1="98" b1="207" r2="95" g2="121" b2="255" type="G3"/> + <poly v0="470" v1="471" v2="469" r0="77" g0="98" b0="207" r1="95" g1="121" b1="255" r2="95" g2="121" b2="255" type="G3"/> + <poly v0="469" v1="471" v2="436" r0="95" g0="121" b0="255" r1="95" g1="121" b1="255" r2="143" g2="169" b2="255" type="G3"/> + <poly v0="471" v1="398" v2="436" r0="95" g0="121" b0="255" r1="143" g1="169" b1="255" r2="143" g2="169" b2="255" type="G3"/> + <poly v0="443" v1="444" v2="395" r0="95" g0="121" b0="255" r1="95" g1="121" b1="255" r2="143" g2="169" b2="255" type="G3"/> + <poly v0="442" v1="472" v2="443" r0="77" g0="98" b0="207" r1="77" g1="98" b1="207" r2="95" g2="121" b2="255" type="G3"/> + <poly v0="380" v1="473" v2="442" r0="94" g0="83" b0="149" r1="72" g1="59" b1="135" r2="77" g2="98" b2="207" type="G3"/> + <poly v0="443" v1="472" v2="444" r0="95" g0="121" b0="255" r1="77" g1="98" b1="207" r2="95" g2="121" b2="255" type="G3"/> + <poly v0="472" v1="445" v2="444" r0="77" g0="98" b0="207" r1="77" g1="98" b1="207" r2="95" g2="121" b2="255" type="G3"/> + <poly v0="442" v1="473" v2="472" r0="77" g0="98" b0="207" r1="72" g1="59" b1="135" r2="77" g2="98" b2="207" type="G3"/> + <poly v0="473" v1="474" v2="472" r0="72" g0="59" b0="135" r1="72" g1="59" b1="135" r2="77" g2="98" b2="207" type="G3"/> + <poly v0="472" v1="474" v2="445" r0="77" g0="98" b0="207" r1="72" g1="59" b1="135" r2="77" g2="98" b2="207" type="G3"/> + <poly v0="474" v1="384" v2="445" r0="72" g0="59" b0="135" r1="91" g1="79" b1="147" r2="77" g2="98" b2="207" type="G3"/> + <poly v0="380" v1="379" v2="473" r0="94" g0="83" b0="149" r1="66" g1="54" b1="122" r2="72" g2="59" b2="135" type="G3"/> + <poly v0="379" v1="475" v2="473" r0="66" g0="54" b0="122" r1="66" g1="54" b1="122" r2="72" g2="59" b2="135" type="G3"/> + <poly v0="473" v1="475" v2="474" r0="72" g0="59" b0="135" r1="66" g1="54" b1="122" r2="72" g2="59" b2="135" type="G3"/> + <poly v0="475" v1="476" v2="474" r0="66" g0="54" b0="122" r1="66" g1="54" b1="122" r2="72" g2="59" b2="135" type="G3"/> + <poly v0="474" v1="476" v2="384" r0="72" g0="59" b0="135" r1="66" g1="54" b1="122" r2="91" g2="79" b2="147" type="G3"/> + <poly v0="476" v1="375" v2="384" r0="66" g0="54" b0="122" r1="66" g1="54" b1="122" r2="91" g2="79" b2="147" type="G3"/> + <poly v0="450" v1="451" v2="392" r0="95" g0="121" b0="255" r1="95" g1="121" b1="255" r2="145" g2="170" b2="255" type="G3"/> + <poly v0="449" v1="477" v2="450" r0="77" g0="98" b0="207" r1="88" g1="107" b1="210" r2="95" g2="121" b2="255" type="G3"/> + <poly v0="377" v1="478" v2="449" r0="73" g0="60" b0="136" r1="72" g1="59" b1="135" r2="77" g2="98" b2="207" type="G3"/> + <poly v0="450" v1="477" v2="451" r0="95" g0="121" b0="255" r1="88" g1="107" b1="210" r2="95" g2="121" b2="255" type="G3"/> + <poly v0="477" v1="452" v2="451" r0="88" g0="107" b0="210" r1="78" g1="99" b1="207" r2="95" g2="121" b2="255" type="G3"/> + <poly v0="449" v1="478" v2="477" r0="77" g0="98" b0="207" r1="72" g1="59" b1="135" r2="88" g2="107" b2="210" type="G3"/> + <poly v0="478" v1="479" v2="477" r0="72" g0="59" b0="135" r1="72" g1="59" b1="135" r2="88" g2="107" b2="210" type="G3"/> + <poly v0="477" v1="479" v2="452" r0="88" g0="107" b0="210" r1="72" g1="59" b1="135" r2="78" g2="99" b2="207" type="G3"/> + <poly v0="479" v1="383" v2="452" r0="72" g0="59" b0="135" r1="72" g1="59" b1="135" r2="78" g2="99" b2="207" type="G3"/> + <poly v0="377" v1="376" v2="478" r0="73" g0="60" b0="136" r1="66" g1="54" b1="122" r2="72" g2="59" b2="135" type="G3"/> + <poly v0="376" v1="480" v2="478" r0="66" g0="54" b0="122" r1="66" g1="54" b1="122" r2="72" g2="59" b2="135" type="G3"/> + <poly v0="478" v1="480" v2="479" r0="72" g0="59" b0="135" r1="66" g1="54" b1="122" r2="72" g2="59" b2="135" type="G3"/> + <poly v0="480" v1="481" v2="479" r0="66" g0="54" b0="122" r1="64" g1="52" b1="119" r2="72" g2="59" b2="135" type="G3"/> + <poly v0="479" v1="481" v2="383" r0="72" g0="59" b0="135" r1="64" g1="52" b1="119" r2="72" g2="59" b2="135" type="G3"/> + <poly v0="481" v1="372" v2="383" r0="64" g0="52" b0="119" r1="66" g1="54" b1="122" r2="72" g2="59" b2="135" type="G3"/> + <poly v0="457" v1="458" v2="389" r0="95" g0="121" b0="255" r1="95" g1="121" b1="255" r2="144" g2="170" b2="255" type="G3"/> + <poly v0="456" v1="482" v2="457" r0="77" g0="98" b0="207" r1="75" g1="79" b1="173" r2="95" g2="121" b2="255" type="G3"/> + <poly v0="374" v1="483" v2="456" r0="73" g0="60" b0="136" r1="73" g1="60" b1="136" r2="77" g2="98" b2="207" type="G3"/> + <poly v0="457" v1="482" v2="458" r0="95" g0="121" b0="255" r1="75" g1="79" b1="173" r2="95" g2="121" b2="255" type="G3"/> + <poly v0="482" v1="459" v2="458" r0="75" g0="79" b0="173" r1="77" g1="98" b1="207" r2="95" g2="121" b2="255" type="G3"/> + <poly v0="456" v1="483" v2="482" r0="77" g0="98" b0="207" r1="73" g1="60" b1="136" r2="75" g2="79" b2="173" type="G3"/> + <poly v0="483" v1="484" v2="482" r0="73" g0="60" b0="136" r1="72" g1="59" b1="135" r2="75" g2="79" b2="173" type="G3"/> + <poly v0="482" v1="484" v2="459" r0="75" g0="79" b0="173" r1="72" g1="59" b1="135" r2="77" g2="98" b2="207" type="G3"/> + <poly v0="484" v1="382" v2="459" r0="72" g0="59" b0="135" r1="73" g1="60" b1="136" r2="77" g2="98" b2="207" type="G3"/> + <poly v0="374" v1="373" v2="483" r0="73" g0="60" b0="136" r1="66" g1="54" b1="122" r2="73" g2="60" b2="136" type="G3"/> + <poly v0="373" v1="485" v2="483" r0="66" g0="54" b0="122" r1="66" g1="54" b1="122" r2="73" g2="60" b2="136" type="G3"/> + <poly v0="483" v1="485" v2="484" r0="73" g0="60" b0="136" r1="66" g1="54" b1="122" r2="72" g2="59" b2="135" type="G3"/> + <poly v0="485" v1="486" v2="484" r0="66" g0="54" b0="122" r1="66" g1="54" b1="122" r2="72" g2="59" b2="135" type="G3"/> + <poly v0="484" v1="486" v2="382" r0="72" g0="59" b0="135" r1="66" g1="54" b1="122" r2="73" g2="60" b2="136" type="G3"/> + <poly v0="486" v1="369" v2="382" r0="66" g0="54" b0="122" r1="66" g1="54" b1="122" r2="73" g2="60" b2="136" type="G3"/> + <poly v0="464" v1="465" v2="386" r0="128" g0="149" b0="255" r1="95" g1="121" b1="255" r2="143" g2="169" b2="255" type="G3"/> + <poly v0="463" v1="487" v2="464" r0="79" g0="100" b0="208" r1="74" g1="75" b1="165" r2="128" g2="149" b2="255" type="G3"/> + <poly v0="371" v1="488" v2="463" r0="72" g0="59" b0="135" r1="72" g1="59" b1="135" r2="79" g2="100" b2="208" type="G3"/> + <poly v0="464" v1="487" v2="465" r0="128" g0="149" b0="255" r1="74" g1="75" b1="165" r2="95" g2="121" b2="255" type="G3"/> + <poly v0="487" v1="466" v2="465" r0="74" g0="75" b0="165" r1="80" g1="101" b1="209" r2="95" g2="121" b2="255" type="G3"/> + <poly v0="463" v1="488" v2="487" r0="79" g0="100" b0="208" r1="72" g1="59" b1="135" r2="74" g2="75" b2="165" type="G3"/> + <poly v0="488" v1="489" v2="487" r0="72" g0="59" b0="135" r1="73" g1="60" b1="136" r2="74" g2="75" b2="165" type="G3"/> + <poly v0="487" v1="489" v2="466" r0="74" g0="75" b0="165" r1="73" g1="60" b1="136" r2="80" g2="101" b2="209" type="G3"/> + <poly v0="489" v1="381" v2="466" r0="73" g0="60" b0="136" r1="72" g1="59" b1="135" r2="80" g2="101" b2="209" type="G3"/> + <poly v0="371" v1="370" v2="488" r0="72" g0="59" b0="135" r1="59" g1="49" b1="111" r2="72" g2="59" b2="135" type="G3"/> + <poly v0="370" v1="490" v2="488" r0="59" g0="49" b0="111" r1="66" g1="54" b1="122" r2="72" g2="59" b2="135" type="G3"/> + <poly v0="488" v1="490" v2="489" r0="72" g0="59" b0="135" r1="66" g1="54" b1="122" r2="73" g2="60" b2="136" type="G3"/> + <poly v0="490" v1="491" v2="489" r0="66" g0="54" b0="122" r1="66" g1="54" b1="122" r2="73" g2="60" b2="136" type="G3"/> + <poly v0="489" v1="491" v2="381" r0="73" g0="60" b0="136" r1="66" g1="54" b1="122" r2="72" g2="59" b2="135" type="G3"/> + <poly v0="491" v1="362" v2="381" r0="66" g0="54" b0="122" r1="64" g1="53" b1="118" r2="72" g2="59" b2="135" type="G3"/> + <poly v0="471" v1="437" v2="398" r0="95" g0="121" b0="255" r1="110" g1="136" b1="255" r2="143" g2="169" b2="255" type="G3"/> + <poly v0="470" v1="492" v2="471" r0="77" g0="98" b0="207" r1="77" g1="98" b1="207" r2="95" g2="121" b2="255" type="G3"/> + <poly v0="368" v1="493" v2="470" r0="72" g0="59" b0="135" r1="72" g1="59" b1="135" r2="77" g2="98" b2="207" type="G3"/> + <poly v0="471" v1="492" v2="437" r0="95" g0="121" b0="255" r1="77" g1="98" b1="207" r2="110" g2="136" b2="255" type="G3"/> + <poly v0="492" v1="438" v2="437" r0="77" g0="98" b0="207" r1="77" g1="98" b1="207" r2="110" g2="136" b2="255" type="G3"/> + <poly v0="470" v1="493" v2="492" r0="77" g0="98" b0="207" r1="72" g1="59" b1="135" r2="77" g2="98" b2="207" type="G3"/> + <poly v0="493" v1="494" v2="492" r0="72" g0="59" b0="135" r1="72" g1="59" b1="135" r2="77" g2="98" b2="207" type="G3"/> + <poly v0="492" v1="494" v2="438" r0="77" g0="98" b0="207" r1="72" g1="59" b1="135" r2="77" g2="98" b2="207" type="G3"/> + <poly v0="494" v1="385" v2="438" r0="72" g0="59" b0="135" r1="72" g1="59" b1="135" r2="77" g2="98" b2="207" type="G3"/> + <poly v0="368" v1="364" v2="493" r0="72" g0="59" b0="135" r1="51" g1="43" b1="95" r2="72" g2="59" b2="135" type="G3"/> + <poly v0="364" v1="495" v2="493" r0="51" g0="43" b0="95" r1="55" g1="45" b1="103" r2="72" g2="59" b2="135" type="G3"/> + <poly v0="493" v1="495" v2="494" r0="72" g0="59" b0="135" r1="55" g1="45" b1="103" r2="72" g2="59" b2="135" type="G3"/> + <poly v0="495" v1="496" v2="494" r0="55" g0="45" b0="103" r1="65" g1="53" b1="120" r2="72" g2="59" b2="135" type="G3"/> + <poly v0="494" v1="496" v2="385" r0="72" g0="59" b0="135" r1="65" g1="53" b1="120" r2="72" g2="59" b2="135" type="G3"/> + <poly v0="496" v1="378" v2="385" r0="65" g0="53" b0="120" r1="65" g1="53" b1="121" r2="72" g2="59" b2="135" type="G3"/> + <poly v0="497" v1="379" v2="378" r0="48" g0="40" b0="90" r1="66" g1="54" b1="122" r2="65" g2="53" b2="121" type="G3"/> + <poly v0="498" v1="499" v2="497" r0="33" g0="27" b0="61" r1="33" g1="27" b1="61" r2="48" g2="40" b2="90" type="G3"/> + <poly v0="367" v1="500" v2="498" r0="33" g0="27" b0="61" type="F3"/> + <poly v0="497" v1="499" v2="379" r0="48" g0="40" b0="90" r1="33" g1="27" b1="61" r2="66" g2="54" b2="122" type="G3"/> + <poly v0="499" v1="475" v2="379" r0="33" g0="27" b0="61" r1="66" g1="54" b1="122" r2="66" g2="54" b2="122" type="G3"/> + <poly v0="498" v1="500" v2="499" r0="33" g0="27" b0="61" type="F3"/> + <poly v0="500" v1="501" v2="499" r0="33" g0="27" b0="61" type="F3"/> + <poly v0="499" v1="501" v2="475" r0="33" g0="27" b0="61" r1="33" g1="27" b1="61" r2="66" g2="54" b2="122" type="G3"/> + <poly v0="501" v1="476" v2="475" r0="33" g0="27" b0="61" r1="66" g1="54" b1="122" r2="66" g2="54" b2="122" type="G3"/> + <poly v0="367" v1="366" v2="500" r0="33" g0="27" b0="61" r1="36" g1="30" b1="68" r2="33" g2="27" b2="61" type="G3"/> + <poly v0="366" v1="502" v2="500" r0="36" g0="30" b0="68" r1="33" g1="27" b1="61" r2="33" g2="27" b2="61" type="G3"/> + <poly v0="500" v1="502" v2="501" r0="33" g0="27" b0="61" type="F3"/> + <poly v0="502" v1="503" v2="501" r0="33" g0="27" b0="61" r1="34" g1="28" b1="62" r2="33" g2="27" b2="61" type="G3"/> + <poly v0="501" v1="503" v2="476" r0="33" g0="27" b0="61" r1="34" g1="28" b1="62" r2="66" g2="54" b2="122" type="G3"/> + <poly v0="503" v1="375" v2="476" r0="34" g0="28" b0="62" r1="66" g1="54" b1="122" r2="66" g2="54" b2="122" type="G3"/> + <poly v0="503" v1="376" v2="375" r0="34" g0="28" b0="62" r1="66" g1="54" b1="122" r2="66" g2="54" b2="122" type="G3"/> + <poly v0="502" v1="504" v2="503" r0="33" g0="27" b0="61" r1="36" g1="30" b1="67" r2="34" g2="28" b2="62" type="G3"/> + <poly v0="366" v1="505" v2="502" r0="36" g0="30" b0="68" r1="33" g1="27" b1="61" r2="33" g2="27" b2="61" type="G3"/> + <poly v0="503" v1="504" v2="376" r0="34" g0="28" b0="62" r1="36" g1="30" b1="67" r2="66" g2="54" b2="122" type="G3"/> + <poly v0="504" v1="480" v2="376" r0="36" g0="30" b0="67" r1="66" g1="54" b1="122" r2="66" g2="54" b2="122" type="G3"/> + <poly v0="502" v1="505" v2="504" r0="33" g0="27" b0="61" r1="33" g1="27" b1="61" r2="36" g2="30" b2="67" type="G3"/> + <poly v0="505" v1="506" v2="504" r0="33" g0="27" b0="61" r1="33" g1="27" b1="61" r2="36" g2="30" b2="67" type="G3"/> + <poly v0="504" v1="506" v2="480" r0="36" g0="30" b0="67" r1="33" g1="27" b1="61" r2="66" g2="54" b2="122" type="G3"/> + <poly v0="506" v1="481" v2="480" r0="33" g0="27" b0="61" r1="64" g1="52" b1="119" r2="66" g2="54" b2="122" type="G3"/> + <poly v0="366" v1="365" v2="505" r0="36" g0="30" b0="68" r1="33" g1="27" b1="61" r2="33" g2="27" b2="61" type="G3"/> + <poly v0="365" v1="507" v2="505" r0="33" g0="27" b0="61" type="F3"/> + <poly v0="505" v1="507" v2="506" r0="33" g0="27" b0="61" type="F3"/> + <poly v0="507" v1="508" v2="506" r0="33" g0="27" b0="61" r1="44" g1="35" b1="79" r2="33" g2="27" b2="61" type="G3"/> + <poly v0="506" v1="508" v2="481" r0="33" g0="27" b0="61" r1="44" g1="35" b1="79" r2="64" g2="52" b2="119" type="G3"/> + <poly v0="508" v1="372" v2="481" r0="44" g0="35" b0="79" r1="66" g1="54" b1="122" r2="64" g2="52" b2="119" type="G3"/> + <poly v0="508" v1="373" v2="372" r0="44" g0="35" b0="79" r1="66" g1="54" b1="122" r2="66" g2="54" b2="122" type="G3"/> + <poly v0="507" v1="509" v2="508" r0="33" g0="27" b0="61" r1="33" g1="27" b1="61" r2="44" g2="35" b2="79" type="G3"/> + <poly v0="365" v1="510" v2="507" r0="33" g0="27" b0="61" r1="34" g1="27" b1="62" r2="33" g2="27" b2="61" type="G3"/> + <poly v0="508" v1="509" v2="373" r0="44" g0="35" b0="79" r1="33" g1="27" b1="61" r2="66" g2="54" b2="122" type="G3"/> + <poly v0="509" v1="485" v2="373" r0="33" g0="27" b0="61" r1="66" g1="54" b1="122" r2="66" g2="54" b2="122" type="G3"/> + <poly v0="507" v1="510" v2="509" r0="33" g0="27" b0="61" r1="34" g1="27" b1="62" r2="33" g2="27" b2="61" type="G3"/> + <poly v0="510" v1="511" v2="509" r0="34" g0="27" b0="62" r1="33" g1="27" b1="61" r2="33" g2="27" b2="61" type="G3"/> + <poly v0="509" v1="511" v2="485" r0="33" g0="27" b0="61" r1="33" g1="27" b1="61" r2="66" g2="54" b2="122" type="G3"/> + <poly v0="511" v1="486" v2="485" r0="33" g0="27" b0="61" r1="66" g1="54" b1="122" r2="66" g2="54" b2="122" type="G3"/> + <poly v0="365" v1="361" v2="510" r0="33" g0="27" b0="61" r1="33" g1="27" b1="61" r2="34" g2="27" b2="62" type="G3"/> + <poly v0="361" v1="512" v2="510" r0="33" g0="27" b0="61" r1="33" g1="27" b1="61" r2="34" g2="27" b2="62" type="G3"/> + <poly v0="510" v1="512" v2="511" r0="34" g0="27" b0="62" r1="33" g1="27" b1="61" r2="33" g2="27" b2="61" type="G3"/> + <poly v0="512" v1="513" v2="511" r0="33" g0="27" b0="61" type="F3"/> + <poly v0="511" v1="513" v2="486" r0="33" g0="27" b0="61" r1="33" g1="27" b1="61" r2="66" g2="54" b2="122" type="G3"/> + <poly v0="513" v1="369" v2="486" r0="33" g0="27" b0="61" r1="66" g1="54" b1="122" r2="66" g2="54" b2="122" type="G3"/> + <poly v0="496" v1="497" v2="378" r0="65" g0="53" b0="120" r1="48" g1="40" b1="90" r2="65" g2="53" b2="121" type="G3"/> + <poly v0="495" v1="514" v2="496" r0="55" g0="45" b0="103" r1="33" g1="27" b1="61" r2="65" g2="53" b2="120" type="G3"/> + <poly v0="364" v1="515" v2="495" r0="51" g0="43" b0="95" r1="33" g1="27" b1="61" r2="55" g2="45" b2="103" type="G3"/> + <poly v0="496" v1="514" v2="497" r0="65" g0="53" b0="120" r1="33" g1="27" b1="61" r2="48" g2="40" b2="90" type="G3"/> + <poly v0="514" v1="498" v2="497" r0="33" g0="27" b0="61" r1="33" g1="27" b1="61" r2="48" g2="40" b2="90" type="G3"/> + <poly v0="495" v1="515" v2="514" r0="55" g0="45" b0="103" r1="33" g1="27" b1="61" r2="33" g2="27" b2="61" type="G3"/> + <poly v0="515" v1="516" v2="514" r0="33" g0="27" b0="61" type="F3"/> + <poly v0="514" v1="516" v2="498" r0="33" g0="27" b0="61" type="F3"/> + <poly v0="516" v1="367" v2="498" r0="33" g0="27" b0="61" type="F3"/> + <poly v0="364" v1="363" v2="515" r0="51" g0="43" b0="95" r1="35" g1="29" b1="66" r2="33" g2="27" b2="61" type="G3"/> + <poly v0="363" v1="517" v2="515" r0="35" g0="29" b0="66" r1="33" g1="27" b1="61" r2="33" g2="27" b2="61" type="G3"/> + <poly v0="515" v1="517" v2="516" r0="33" g0="27" b0="61" type="F3"/> + <poly v0="517" v1="360" v2="516" r0="33" g0="27" b0="61" type="F3"/> + <poly v0="516" v1="360" v2="367" r0="33" g0="27" b0="61" type="F3"/> + <poly v0="360" v1="359" v2="367" r0="33" g0="27" b0="61" type="F3"/> + <poly v0="513" v1="370" v2="369" r0="33" g0="27" b0="61" r1="59" g1="49" b1="111" r2="66" g2="54" b2="122" type="G3"/> + <poly v0="512" v1="518" v2="513" r0="33" g0="27" b0="61" r1="35" g1="29" b1="65" r2="33" g2="27" b2="61" type="G3"/> + <poly v0="361" v1="519" v2="512" r0="33" g0="27" b0="61" type="F3"/> + <poly v0="513" v1="518" v2="370" r0="33" g0="27" b0="61" r1="35" g1="29" b1="65" r2="59" g2="49" b2="111" type="G3"/> + <poly v0="518" v1="490" v2="370" r0="35" g0="29" b0="65" r1="66" g1="54" b1="122" r2="59" g2="49" b2="111" type="G3"/> + <poly v0="512" v1="519" v2="518" r0="33" g0="27" b0="61" r1="33" g1="27" b1="61" r2="35" g2="29" b2="65" type="G3"/> + <poly v0="519" v1="520" v2="518" r0="33" g0="27" b0="61" r1="33" g1="27" b1="61" r2="35" g2="29" b2="65" type="G3"/> + <poly v0="518" v1="520" v2="490" r0="35" g0="29" b0="65" r1="33" g1="27" b1="61" r2="66" g2="54" b2="122" type="G3"/> + <poly v0="520" v1="491" v2="490" r0="33" g0="27" b0="61" r1="66" g1="54" b1="122" r2="66" g2="54" b2="122" type="G3"/> + <poly v0="361" v1="360" v2="519" r0="33" g0="27" b0="61" type="F3"/> + <poly v0="360" v1="517" v2="519" r0="33" g0="27" b0="61" type="F3"/> + <poly v0="519" v1="517" v2="520" r0="33" g0="27" b0="61" type="F3"/> + <poly v0="517" v1="363" v2="520" r0="33" g0="27" b0="61" r1="35" g1="29" b1="66" r2="33" g2="27" b2="61" type="G3"/> + <poly v0="520" v1="363" v2="491" r0="33" g0="27" b0="61" r1="35" g1="29" b1="66" r2="66" g2="54" b2="122" type="G3"/> + <poly v0="363" v1="362" v2="491" r0="35" g0="29" b0="66" r1="64" g1="53" b1="118" r2="66" g2="54" b2="122" type="G3"/> + </primitives> +</model> diff --git a/examples/n00bdemo/disp.c b/examples/n00bdemo/disp.c new file mode 100644 index 0000000..5a9bb22 --- /dev/null +++ b/examples/n00bdemo/disp.c @@ -0,0 +1,72 @@ +#include <stdio.h> +#include <psxgpu.h> +#include <psxgte.h> +#include <inline_c.h> +#include "smd.h" +#include "disp.h" + +DISPENV disp; +DRAWENV draw; + +char pribuff[2][131072]; +unsigned int ot[2][OT_LEN]; +char *nextpri; +int db = 0; + +MATRIX mtx; + + +void initDisplay() { + + ResetGraph( 3 ); + + if( GetVideoMode() == MODE_NTSC ) { + SetDefDispEnv( &disp, 0, 0, 640, 480 ); + SetDefDrawEnv( &draw, 0, 0, 640, 480 ); + scSetClipRect( 0, 0, 640, 480 ); + printf("NTSC System.\n"); + } else { + SetDefDispEnv( &disp, 0, 0, 640, 512 ); + SetDefDrawEnv( &draw, 0, 0, 640, 512 ); + scSetClipRect( 0, 0, 640, 512 ); + disp.screen.y = 20; + disp.screen.h = 256; + printf("PAL System.\n"); + } + + disp.isinter = 1; + draw.isbg = 1; + + PutDispEnv( &disp ); + PutDrawEnv( &draw ); + + ClearOTagR( ot[0], OT_LEN ); + ClearOTagR( ot[1], OT_LEN ); + nextpri = pribuff[0]; + + InitGeom(); + gte_SetGeomScreen( 320 ); + + if( GetVideoMode() == MODE_NTSC ) { + gte_SetGeomOffset( 320, 240 ); + } else { + gte_SetGeomOffset( 320, 256 ); + } + +} + +void display() { + + VSync(); + DrawSync(); + + PutDrawEnv( &draw ); + DrawOTag( ot[db]+OT_LEN-1 ); + + db ^= 1; + ClearOTagR( ot[db], OT_LEN ); + nextpri = pribuff[db]; + + SetDispMask( 1 ); + +}
\ No newline at end of file diff --git a/examples/n00bdemo/disp.h b/examples/n00bdemo/disp.h new file mode 100644 index 0000000..ecf6dcf --- /dev/null +++ b/examples/n00bdemo/disp.h @@ -0,0 +1,25 @@ +#ifndef _DISP_H +#define _DISP_H + +#include <psxgte.h> + +#define SCENE_TIME 60*15 + +#define CENTERX 320 +#define CENTERY 240 + +#define OT_LEN 260 + +void initDisplay(); +void display(); + +extern unsigned int ot[2][OT_LEN]; +extern char *nextpri; +extern int db; + +extern DISPENV disp; +extern DRAWENV draw; + +extern MATRIX mtx; + +#endif // _DISP_H
\ No newline at end of file diff --git a/examples/n00bdemo/lightdemo.c b/examples/n00bdemo/lightdemo.c new file mode 100644 index 0000000..ff858c0 --- /dev/null +++ b/examples/n00bdemo/lightdemo.c @@ -0,0 +1,494 @@ +#include <string.h> +#include <psxgte.h> +#include <psxgpu.h> +#include <inline_c.h> +#include "disp.h" +#include "smd.h" + +extern MATRIX lgt_colmtx; + +extern SMD *o_world; +extern SMD *o_lightbulb; + +void sort_overlay(int showlotl); + +void lightdemo() { + + /* + The point lighting demo is perhaps the most impressive part of + n00bDEMO. A more streamlined version of this demo where you control + various attributes of the light source such as position, intensity + and color might be made as a dedicated example program in the future. + + The point lighting trick is actually not that too complicated. You + basically calculate the distance and direction vector of two points + which are the light source and the vertex of a polygon. + + Calculating the normal whose result can later be used to calculate + the distance between two points is achieved with: + + vec_dir.vx = lgt_point.vx - pri_vert.vx; + vec_dir.vy = lgt_point.vy - pri_vert.vy; + vec_dir.vz = lgt_point.vz - pri_vert.vz; + + The intensity is calculated with (this might not be accurate but this + is faster than applying a square root): + + i = 4096 - ( ( + (vec_dir.vx*vec_dir.vx) + + (vec_dir.vy*vec_dir.vy) + + (vec_dir.vz*vec_dir.vz) ) >> 7 ); + + // Clip minimum intensity + if( i < 0 ) + i = 0; + + This intensity value is then used to set the color of the light source + through the light color matrix. + + col_mtx.m[0][0] = i; + col_mtx.m[1][0] = i; + col_mtx.m[2][0] = i; + gte_SetColorMatrix( &col_mtx ); + + The direction vector can then be used as the direction of the light + source. It is recommended to normalize it first to prevent possible + overflow related issues. + + VectorNormalS( &vec_dir, &vec_norm ); + + lgt_mtx.m[0][0] = vec_norm.vx; + lgt_mtx.m[0][1] = vec_norm.vy; + lgt_mtx.m[0][2] = vec_norm.vz; + + gte_SetLightMatrix( &lgt_mtx ); + + This operation is then performed for each point of a polygon to + achieve a nice smooth shaded point lighting effect. The macros used + are still the same as doing light source calculation with the GTE + the normal way. + + 3D geometry still requires normal data as with most lighting + processing operations. 'Flat' normals (faces with a single normal + vector) work best on flat surfaces while 'smooth' normals (faces with + normals on each point) work best on round or curved surfaces. + + */ + + int i,p_ang; + + SC_OT s_ot; + + SVECTOR rot; + VECTOR pos; + SMD_PRIM s_pri; + + VECTOR l_point; + SVECTOR nrm; + + MATRIX lmtx,llmtx,omtx; + + SVECTOR orot = { 0 }; + + int timeout = SCENE_TIME; + + + // Set clear color to black + setRGB0( &draw, 0, 0, 0 ); + + // Base values for the environment geometry + setVector( &pos, 0, 0, 600 ); + setVector( &rot, 512, 0, 0 ); + + // Set base tpage value for the SMD drawing routines + smdSetBaseTPage( 0x200 ); + + // Set back or ambient color to black for pure darkness + gte_SetBackColor( 0, 0, 0 ); + + memset( &llmtx, 0, sizeof(MATRIX) ); + + + // demo loop + while( 1 ) { + + char buff[32]; + + RotMatrix( &rot, &mtx ); + TransMatrix( &mtx, &pos ); + + rot.vy += 4; + + gte_SetRotMatrix( &mtx ); + gte_SetTransMatrix( &mtx ); + + + setVector( &l_point, (icos( p_ang )>>2)>>2, -350+(icos( p_ang<<1 )>>4), (isin( p_ang )>>2)>>2 ); + p_ang += 16; + + + // Begin parsing the SMD data of the environment + OpenSMD( o_world ); + + // Prototype point lighting renderer + while( ReadSMD( &s_pri ) ) { + + VECTOR v_dir; + SVECTOR v_nrm; + VECTOR v_sqr; + + int flg; + + if( s_pri.prim_id.texture ) { + + POLY_GT4 *pri; + + // Perform standard rotate, translate and perspective + // transformation of the geometry + pri = (POLY_GT4*)nextpri; + + gte_ldv3( + &o_world->p_verts[s_pri.v0], + &o_world->p_verts[s_pri.v1], + &o_world->p_verts[s_pri.v2] ); + + gte_rtpt(); + + gte_nclip(); // Backface culling + + gte_stopz( &flg ); + + if( flg < 0 ) + continue; + + gte_stsxy3( &pri->x0, &pri->x1, &pri->x2 ); + + gte_ldv0( &o_world->p_verts[s_pri.v3] ); + gte_rtps(); + + gte_avsz4(); // Depth sort + gte_stotz( &flg ); + + if( (flg>>2) >= OT_LEN ) + continue; + + gte_stsxy( &pri->x3 ); + + + // Load base color of polygon to GTE + gte_ldrgb( &s_pri.r0 ); + + // Load normal of polygon + gte_ldv0( &o_world->p_norms[s_pri.n0] ); + + // Calculate the direction between the vertex of the + // polygon and the light source + v_dir.vx = l_point.vx - o_world->p_verts[s_pri.v0].vx; + v_dir.vy = l_point.vy - o_world->p_verts[s_pri.v0].vy; + v_dir.vz = l_point.vz - o_world->p_verts[s_pri.v0].vz; + + // Calculate distance and light intensity using square + i = 4096 - ( ( + (v_dir.vx*v_dir.vx) + + (v_dir.vy*v_dir.vy) + + (v_dir.vz*v_dir.vz) ) >> 7 ); + + // Clip minimum intensity + if( i < 0 ) + i = 0; + + // Set intensity to color matrix + llmtx.m[0][0] = i; + llmtx.m[1][0] = i; + llmtx.m[2][0] = i; + gte_SetColorMatrix( &llmtx ); + + // Normalize light direction and set it to light matrix + VectorNormalS( &v_dir, &v_nrm ); + lmtx.m[0][0] = v_nrm.vx; + lmtx.m[0][1] = v_nrm.vy; + lmtx.m[0][2] = v_nrm.vz; + gte_SetLightMatrix( &lmtx ); + + // Calculate (output is retrieved through gte_strgb) + gte_nccs(); + + + // Repeat process for the next 3 vertices + v_dir.vx = l_point.vx - o_world->p_verts[s_pri.v1].vx; + v_dir.vy = l_point.vy - o_world->p_verts[s_pri.v1].vy; + v_dir.vz = l_point.vz - o_world->p_verts[s_pri.v1].vz; + + i = 4096 - ( ( + (v_dir.vx*v_dir.vx) + + (v_dir.vy*v_dir.vy) + + (v_dir.vz*v_dir.vz) ) >> 7 ); + + if( i < 0 ) + i = 0; + + + llmtx.m[0][0] = i; + llmtx.m[1][0] = i; + llmtx.m[2][0] = i; + + gte_strgb( &pri->r0 ); + + gte_SetColorMatrix( &llmtx ); + VectorNormalS( &v_dir, &v_nrm ); + lmtx.m[0][0] = v_nrm.vx; + lmtx.m[0][1] = v_nrm.vy; + lmtx.m[0][2] = v_nrm.vz; + gte_SetLightMatrix( &lmtx ); + gte_nccs(); + + v_dir.vx = l_point.vx - o_world->p_verts[s_pri.v2].vx; + v_dir.vy = l_point.vy - o_world->p_verts[s_pri.v2].vy; + v_dir.vz = l_point.vz - o_world->p_verts[s_pri.v2].vz; + + i = 4096 - ( ( + (v_dir.vx*v_dir.vx) + + (v_dir.vy*v_dir.vy) + + (v_dir.vz*v_dir.vz) ) >> 7 ); + + if( i < 0 ) + i = 0; + + llmtx.m[0][0] = i; + llmtx.m[1][0] = i; + llmtx.m[2][0] = i; + + gte_strgb( &pri->r1 ); + + gte_SetColorMatrix( &llmtx ); + VectorNormalS( &v_dir, &v_nrm ); + lmtx.m[0][0] = v_nrm.vx; + lmtx.m[0][1] = v_nrm.vy; + lmtx.m[0][2] = v_nrm.vz; + gte_SetLightMatrix( &lmtx ); + gte_nccs(); + + v_dir.vx = l_point.vx - o_world->p_verts[s_pri.v3].vx; + v_dir.vy = l_point.vy - o_world->p_verts[s_pri.v3].vy; + v_dir.vz = l_point.vz - o_world->p_verts[s_pri.v3].vz; + + i = 4096 - ( ( + (v_dir.vx*v_dir.vx) + + (v_dir.vy*v_dir.vy) + + (v_dir.vz*v_dir.vz) ) >> 7 ); + + if( i < 0 ) + i = 0; + + llmtx.m[0][0] = i; + llmtx.m[1][0] = i; + llmtx.m[2][0] = i; + + gte_strgb( &pri->r2 ); + + gte_SetColorMatrix( &llmtx ); + VectorNormalS( &v_dir, &v_nrm ); + lmtx.m[0][0] = v_nrm.vx; + lmtx.m[0][1] = v_nrm.vy; + lmtx.m[0][2] = v_nrm.vz; + gte_SetLightMatrix( &lmtx ); + gte_nccs(); + + setUV4( pri, + s_pri.tu0, s_pri.tv0, + s_pri.tu1, s_pri.tv1, + s_pri.tu2, s_pri.tv2, + s_pri.tu3, s_pri.tv3 ); + + pri->tpage = s_pri.tpage; + pri->clut = s_pri.clut; + + setPolyGT4( pri ); + addPrim( ot[db]+(flg>>2), pri ); + nextpri += sizeof(POLY_GT4); + + gte_strgb( &pri->r3 ); + + } else { + + POLY_G4 *pri; + + pri = (POLY_G4*)nextpri; + + gte_ldv3( + &o_world->p_verts[s_pri.v0], + &o_world->p_verts[s_pri.v1], + &o_world->p_verts[s_pri.v2] ); + + gte_rtpt(); + + gte_nclip(); + + gte_stopz( &flg ); + + if( flg < 0 ) + continue; + + gte_stsxy3( &pri->x0, &pri->x1, &pri->x2 ); + + gte_ldv0( &o_world->p_verts[s_pri.v3] ); + gte_rtps(); + + gte_avsz4(); + gte_stotz( &flg ); + + if( (flg>>2) >= OT_LEN ) + continue; + + gte_stsxy( &pri->x3 ); + + gte_ldrgb( &s_pri.r0 ); + gte_ldv0( &o_world->p_norms[s_pri.n0] ); + + v_dir.vx = l_point.vx - o_world->p_verts[s_pri.v0].vx; + v_dir.vy = l_point.vy - o_world->p_verts[s_pri.v0].vy; + v_dir.vz = l_point.vz - o_world->p_verts[s_pri.v0].vz; + + i = 4096 - ( ( + (v_dir.vx*v_dir.vx) + + (v_dir.vy*v_dir.vy) + + (v_dir.vz*v_dir.vz) ) >> 7 ); + + if( i < 0 ) + i = 0; + + llmtx.m[0][0] = i; + llmtx.m[1][0] = i; + llmtx.m[2][0] = i; + gte_SetColorMatrix( &llmtx ); + VectorNormalS( &v_dir, &v_nrm ); + lmtx.m[0][0] = v_nrm.vx; + lmtx.m[0][1] = v_nrm.vy; + lmtx.m[0][2] = v_nrm.vz; + gte_SetLightMatrix( &lmtx ); + gte_nccs(); + + + v_dir.vx = l_point.vx - o_world->p_verts[s_pri.v1].vx; + v_dir.vy = l_point.vy - o_world->p_verts[s_pri.v1].vy; + v_dir.vz = l_point.vz - o_world->p_verts[s_pri.v1].vz; + + i = 4096 - ( ( + (v_dir.vx*v_dir.vx) + + (v_dir.vy*v_dir.vy) + + (v_dir.vz*v_dir.vz) ) >> 7 ); + + if( i < 0 ) + i = 0; + + llmtx.m[0][0] = i; + llmtx.m[1][0] = i; + llmtx.m[2][0] = i; + + gte_strgb( &pri->r0 ); + + gte_SetColorMatrix( &llmtx ); + VectorNormalS( &v_dir, &v_nrm ); + lmtx.m[0][0] = v_nrm.vx; + lmtx.m[0][1] = v_nrm.vy; + lmtx.m[0][2] = v_nrm.vz; + gte_SetLightMatrix( &lmtx ); + gte_nccs(); + + v_dir.vx = l_point.vx - o_world->p_verts[s_pri.v2].vx; + v_dir.vy = l_point.vy - o_world->p_verts[s_pri.v2].vy; + v_dir.vz = l_point.vz - o_world->p_verts[s_pri.v2].vz; + + i = 4096 - ( ( + (v_dir.vx*v_dir.vx) + + (v_dir.vy*v_dir.vy) + + (v_dir.vz*v_dir.vz) ) >> 7 ); + + if( i < 0 ) + i = 0; + + llmtx.m[0][0] = i; + llmtx.m[1][0] = i; + llmtx.m[2][0] = i; + + gte_strgb( &pri->r1 ); + + gte_SetColorMatrix( &llmtx ); + VectorNormalS( &v_dir, &v_nrm ); + lmtx.m[0][0] = v_nrm.vx; + lmtx.m[0][1] = v_nrm.vy; + lmtx.m[0][2] = v_nrm.vz; + gte_SetLightMatrix( &lmtx ); + gte_nccs(); + + v_dir.vx = l_point.vx - o_world->p_verts[s_pri.v3].vx; + v_dir.vy = l_point.vy - o_world->p_verts[s_pri.v3].vy; + v_dir.vz = l_point.vz - o_world->p_verts[s_pri.v3].vz; + + i = 4096 - ( ( + (v_dir.vx*v_dir.vx) + + (v_dir.vy*v_dir.vy) + + (v_dir.vz*v_dir.vz) ) >> 7 ); + + if( i < 0 ) + i = 0; + + llmtx.m[0][0] = i; + llmtx.m[1][0] = i; + llmtx.m[2][0] = i; + + gte_strgb( &pri->r2 ); + + gte_SetColorMatrix( &llmtx ); + VectorNormalS( &v_dir, &v_nrm ); + lmtx.m[0][0] = v_nrm.vx; + lmtx.m[0][1] = v_nrm.vy; + lmtx.m[0][2] = v_nrm.vz; + gte_SetLightMatrix( &lmtx ); + gte_nccs(); + + setPolyG4( pri ); + addPrim( ot[db]+(flg>>2), pri ); + + nextpri += sizeof(POLY_G4); + + gte_strgb( &pri->r3 ); + + } + + } + + + // Sort the light bulb to represent the position of the light source + orot.vx += 32; + orot.vy += 32; + orot.vz += 32; + + RotMatrix( &orot, &omtx ); + TransMatrix( &omtx, &l_point ); + + CompMatrixLV( &mtx, &omtx, &mtx ); + + gte_SetRotMatrix( &mtx ); + gte_SetTransMatrix( &mtx ); + + s_ot.ot = ot[db]; + s_ot.otlen = OT_LEN; + s_ot.zdiv = 2; + s_ot.zoff = 0; + + nextpri = smdSortModel( &s_ot, nextpri, o_lightbulb ); + + + // Sort overlay and display + sort_overlay( 1 ); + + display(); + + timeout--; + if( timeout < 0 ) + break; + + } + +}
\ No newline at end of file diff --git a/examples/n00bdemo/logo.c b/examples/n00bdemo/logo.c new file mode 100644 index 0000000..3fdef5e --- /dev/null +++ b/examples/n00bdemo/logo.c @@ -0,0 +1,428 @@ +#include <stdio.h> +#include <stdlib.h> +#include <psxetc.h> +#include <psxgte.h> +#include <psxgpu.h> +#include <inline_c.h> +#include "malloc.h" +#include "smd.h" +#include "lzp.h" + +#include "disp.h" +#include "data.h" + +#define MAX_STARS 64 + + +typedef struct { + int x,y; + int xvel,yvel; + int scale; + int rot,rotv; +} PARTICLE; + +typedef struct { + unsigned int tag; + unsigned int tpage; + unsigned int mask1; + unsigned char r0,g0,b0,code; + short x0,y0; + short x1,y1; + short x2,y2; + short x3,y3; + unsigned int mask2; +} MASKP_F4; + +typedef struct { + unsigned int tag; + unsigned int tpage; + unsigned char r0,g0,b0,code; + short x0,y0; + short w,h; +} FADERECT; + + +SMD *o_psn00b, *o_n00blogo; + + +typedef struct { + unsigned int *prev; + unsigned int *next; + int size; +} NODE; + +void DumpHeap() { + + NODE *n = (NODE*)GetBSSend(); + + printf( "--\n" ); + + while( 1 ) { + + printf( "B:%08p P:%08p N:%08p SZ:%d BS:%d\n", + n, n->prev, n->next, n->size, + ((unsigned int)n->next - (unsigned int)n) ); + + if ( !n->next ) + break; + + n = (NODE*)n->next; + + } + +} + + +void intro() { + + SVECTOR quad_coords[] = { + { -100, -100, 0, 0 }, + { 100, -100, 0, 0 }, + { -100, 100, 0, 0 }, + { 100, 100, 0, 0 } + }; + + PARTICLE stars[MAX_STARS]; + + VECTOR mpos; + SVECTOR mrot,trot; + SC_OT s_ot; + + SMD *o_disk, *o_star, *o_text, *o_psn00b, *o_n00blogo; + + int i,count = 0; + + int logo_scale; + int logo_rot; + + int logo_yvel; + int logo_ypos; + int logo_step; + int logo_spin; + int logo_svel; + int logo_count = 0; + int logo_tscale; + + int logo_n00b_spin; + int logo_fade = 0; + + struct { + int step; + int yvel; + int ypos; + int rot; + int scale; + int spin; + int spinvel; + int tscale; + int trot; + } mtek = { + 0, + 0, + ONE*750, + -ONE*512, + ONE*7, + 0, + 0, + 3072, + 0 + }; + + struct { + VECTOR pos; + int scale; + int scarlet_spin; + } psn00b = { + { 0, 0, 0 }, + ONE, + 1024 + }; + + + i = lzpSearchFile( "mtekdisk", lz_resources ); + o_disk = (SMD*)malloc( lzpFileSize( lz_resources, i ) ); + lzpUnpackFile( o_disk, lz_resources, i ); + smdInitData( o_disk ); + + i = lzpSearchFile( "mtektext", lz_resources ); + o_text = (SMD*)malloc( lzpFileSize( lz_resources, i ) ); + lzpUnpackFile( o_text, lz_resources, i ); + smdInitData( o_text ); + + i = lzpSearchFile( "starsprite", lz_resources ); + o_star = (SMD*)malloc( lzpFileSize( lz_resources, i ) ); + lzpUnpackFile( o_star, lz_resources, i ); + smdInitData( o_star ); + + i = lzpSearchFile( "psn00blogo", lz_resources ); + o_psn00b = (SMD*)malloc( lzpFileSize( lz_resources, i ) ); + lzpUnpackFile( o_psn00b, lz_resources, i ); + smdInitData( o_psn00b ); + + i = lzpSearchFile( "n00blogo", lz_resources ); + o_n00blogo = (SMD*)malloc( lzpFileSize( lz_resources, i ) ); + lzpUnpackFile( o_n00blogo, lz_resources, i ); + smdInitData( o_n00blogo ); + + //DumpHeap(); + + + // Set some Scarlet global parameters + smdSetBaseTPage( 0x200 ); + + // Change clear color + setRGB0( &draw, 255, 255, 255 ); + + setVector( &trot, 0, 0, 0 ); + + + // Initialize stars + for( i=0; i<MAX_STARS; i++ ) { + + stars[i].x = ONE*(-200+(rand()%400)); + stars[i].y = ONE*(80+(rand()%100)); + + stars[i].yvel = -(rand()%32768); + stars[i].xvel = -(ONE*(10-(rand()%20))); + + stars[i].scale = 2048+(rand()%2048); + stars[i].rot = ONE*(rand()%4096); + stars[i].rotv = ONE*(-40+(rand()%80)); + + } + + logo_n00b_spin = ONE+1024; + + while( logo_count < 1320 ) { + + if( logo_count < 700 ) { + + if( logo_count > 360 ) { + mtek.spin -= mtek.spinvel; + mtek.spinvel += 1280; + } + + setVector( &mpos, 0, -(mtek.ypos>>12)-20, 400 ); + setVector( &mrot, 0, mtek.spin>>12, mtek.rot>>12 ); + + RotMatrix( &mrot, &mtx ); + TransMatrix( &mtx, &mpos ); + setVector( &mpos, mtek.scale, mtek.scale, 4096 ); + ScaleMatrix( &mtx, &mpos ); + + gte_SetRotMatrix( &mtx ); + gte_SetTransMatrix( &mtx ); + + nextpri = smdSortModelFlat( ot[db]+10, nextpri, o_disk ); + + + if( mtek.step > 0 ) { + + setVector( &mpos, 0, 180, 400 ); + TransMatrix( &mtx, &mpos ); + gte_SetTransMatrix( &mtx ); + + nextpri = smdSortModelFlat( ot[db]+8, nextpri, o_text ); + + if( logo_count < 480 ) { + + SVECTOR srot; + + for( i=0; i<MAX_STARS; i++ ) { + + setVector( &mpos, stars[i].x>>12, stars[i].y>>12, 320 ); + setVector( &srot, 0, 0, stars[i].rot>>12 ); + + stars[i].x += stars[i].xvel; + stars[i].y += stars[i].yvel; + + stars[i].yvel += 512; + stars[i].rot += stars[i].rotv; + + RotMatrix( &srot, &mtx ); + TransMatrix( &mtx, &mpos ); + + setVector( &mpos, stars[i].scale, stars[i].scale, 4096 ); + ScaleMatrix( &mtx, &mpos ); + + gte_SetRotMatrix( &mtx ); + gte_SetTransMatrix( &mtx ); + + nextpri = smdSortModelFlat( ot[db]+6, nextpri, o_star ); + + } + + } + + } + + if( !mtek.step ) { + mtek.rot -= ONE*20; + } else if( mtek.step == 1 ) { + mtek.rot += ( -mtek.rot )>>4; + } + + + if( mtek.step < 2 ) { + mtek.scale += (ONE-mtek.scale )>>5; + mtek.yvel += 512; + mtek.ypos -= mtek.yvel; + } + + + if( ( mtek.ypos <= 0 ) && ( mtek.yvel > 0 ) ) { + mtek.yvel = -ONE*6; + mtek.step++; + } + + // Does the transition effect + if( logo_count > 480 ) { + + TILE *rect = (TILE*)nextpri; + + mtek.trot += 16; + + setTile( rect ); + setXY0( rect, 0, 0 ); + setWH( rect, 640, 511 ); + setRGB0( rect, 0, 0, 0 ); + addPrim( ot[db]+4, rect ); + nextpri += sizeof(TILE); + + setVector( &mrot, 0, 0, mtek.trot ); + setVector( &mpos, mtek.tscale, mtek.tscale, 4096 ); + + RotMatrix( &mrot, &mtx ); + ScaleMatrix( &mtx, &mpos ); + + gte_SetRotMatrix( &mtx ); + + for( i=0; i<6; i++ ) { + + MASKP_F4 *pol4 = (MASKP_F4*)nextpri; + + setVector( &mpos, -100+(100*(i%3)), -60+(120*(i/3)), 160 ); + TransMatrix( &mtx, &mpos ); + gte_SetTransMatrix( &mtx ); + + pol4->tag = 0x08000000; + pol4->tpage = 0xe1000020; + pol4->mask1 = 0xe6000001; + pol4->mask2 = 0xe6000002; + pol4->code = 0x2A; + + gte_ldv3( &quad_coords[0], &quad_coords[1], &quad_coords[2] ); + gte_rtpt(); + gte_stsxy0( &pol4->x0 ); + gte_ldv0( &quad_coords[3] ); + gte_rtps(); + gte_stsxy3( &pol4->x1, &pol4->x2, &pol4->x3 ); + setRGB0( pol4, 0, 0, 0 ); + + addPrim( ot[db]+4, pol4 ); + nextpri += sizeof(MASKP_F4); + + } + + mtek.tscale += ( -mtek.tscale )>>6; + + } + + } else { + + setRGB0( &draw, 0, 0, 0 ); + + } + + if( logo_count >= 480 ) { + + if( logo_count > 840 ) { + + psn00b.pos.vx += ((ONE*-450)-psn00b.pos.vx)>>4; + psn00b.pos.vy += ((ONE*350)-psn00b.pos.vy)>>4; + + setVector( &mpos, 0, 0, 600 ); + mpos.vx = psn00b.pos.vx>>12; + mpos.vy = psn00b.pos.vy>>12; + + psn00b.scale += ( 1536-psn00b.scale )>>4; + + setVector( &mrot, 0, 0, 0 ); + + RotMatrix( &mrot, &mtx ); + TransMatrix( &mtx, &mpos ); + + setVector( &mpos, psn00b.scale, psn00b.scale, ONE ); + + ScaleMatrix( &mtx, &mpos ); + + } else { + + setVector( &mpos, 0, 0, 600 ); + setVector( &mrot, 0, logo_n00b_spin, 0 ); + + RotMatrix( &mrot, &mtx ); + TransMatrix( &mtx, &mpos ); + + logo_n00b_spin += ( -logo_n00b_spin )>>6; + + } + + gte_SetRotMatrix( &mtx ); + gte_SetTransMatrix( &mtx ); + + nextpri = smdSortModelFlat( ot[db]+3, nextpri, o_psn00b ); + + if( logo_count > 900 ) { + + setVector( &mpos, 0, 0, 250 ); + setVector( &mrot, psn00b.scarlet_spin, 0, 0 ); + + RotMatrix( &mrot, &mtx ); + TransMatrix( &mtx, &mpos ); + + gte_SetRotMatrix( &mtx ); + gte_SetTransMatrix( &mtx ); + + nextpri = smdSortModelFlat( ot[db]+3, nextpri, o_n00blogo ); + + psn00b.scarlet_spin += ( -psn00b.scarlet_spin )>>6; + + } + + } + + if( logo_count > 1200 ) { + + FADERECT *fade = (FADERECT*)nextpri; + + fade->tag = 0x04000000; + fade->tpage = 0xe1000040; + fade->code = 0x62; + + setRGB0( fade, logo_fade, logo_fade, logo_fade ); + setXY0( fade, 0, 0 ); + setWH( fade, 640, 480 ); + addPrim( ot[db]+2, fade ); + + if( logo_fade < 250 ) { + logo_fade += 4; + } + + nextpri += sizeof(FADERECT); + + } + + display(); + + logo_count++; + + } + + free( o_disk ); + free( o_text ); + free( o_star ); + free( o_psn00b ); + free( o_n00blogo ); + +} diff --git a/examples/n00bdemo/logo.h b/examples/n00bdemo/logo.h new file mode 100644 index 0000000..6429c8e --- /dev/null +++ b/examples/n00bdemo/logo.h @@ -0,0 +1,6 @@ +#ifndef _LOGO_H +#define _LOGO_H + +void intro(); + +#endif // _LOGO_H diff --git a/examples/n00bdemo/main.c b/examples/n00bdemo/main.c new file mode 100644 index 0000000..2a5874f --- /dev/null +++ b/examples/n00bdemo/main.c @@ -0,0 +1,650 @@ +/* + * LibPSn00b Example Programs + * + * n00bDEMO Source Code + * 2019 Meido-Tek Productions / PSn00bSDK Project + * + * To build, simply run make. Make sure you have the lzpack tool accessible + * through your PATH environment variable. + * + * Demo by Lameguy64 + * + * Changelog: + * + * Apr 4, 2019 - Some code clean-up and added more comments. + * + * Mar 20, 2019 - Initial completed version. + * + */ + +#include <sys/fcntl.h> +#include <stdio.h> +#include <stdlib.h> +#include <psxetc.h> +#include <psxgte.h> +#include <psxgpu.h> +#include <psxspu.h> +#include <inline_c.h> +#include <string.h> +#include <lzp.h> +#include <lzqlp.h> + +#include "malloc.h" +#include "smd.h" +#include "data.h" +#include "disp.h" +#include "logo.h" +#include "plasma_tbl.h" + + +// Standard light color matrix +MATRIX lgt_colmtx = { + //#1,#2,#3 + ONE, 0, 0, // R + ONE, 0, 0, // G + ONE, 0, 0 // B +}; + +// SMD data global pointers +SMD *o_rbowshade; +SMD *o_world, *o_lightbulb; +SMD *o_timerift, *o_star; +SMD *o_hatkid,*o_bungirl;; + +// TPage and CLUT globals +unsigned short lamelotl_tpage,psn00b_tpage; +unsigned short font_tpage,font_clut; +SPRT llotl_sprite; +SPRT psn00b_sprite; + + +// Some function definition +void sort_overlay(int showlotl); +void lightdemo(); + + +void UploadTIM(TIM_IMAGE *tim) { + + /* + Very simple texture upload function + */ + + LoadImage( tim->prect, tim->paddr ); + + if( tim->mode & 0x8 ) + LoadImage( tim->crect, tim->caddr ); + +} + +void loadTextures() { + + /* + Unpack textures from an embedded LZP archive and upload them to VRAM. + */ + int i; + int *tex_buff,*ttim,j; + TIM_IMAGE tim; + + i = lzpSearchFile( "textures", lz_resources ); + tex_buff = (int*)malloc( lzpFileSize( lz_resources, i ) ); + lzpUnpackFile( tex_buff, lz_resources, i ); + + + for( j=0; j<qlpFileCount( tex_buff )-4; j++ ) { + + if( !GetTimInfo( (unsigned int*)qlpFileAddr( j, tex_buff ), &tim ) ) { + + UploadTIM( &tim ); + + } + + } + + + GetTimInfo( (unsigned int*)qlpFileAddr( + qlpFindFile( "n00blogo", tex_buff ), tex_buff ), &tim ); + + UploadTIM( &tim ); + + psn00b_tpage = getTPage( 0, 0, tim.prect->x, tim.prect->y )|0x200; + setSprt( &psn00b_sprite ); + setClut( &psn00b_sprite, tim.crect->x, tim.crect->y ); + setWH( &psn00b_sprite, tim.prect->w<<2, tim.prect->h ); + setUV0( &psn00b_sprite, (tim.prect->x%64)<<2, tim.prect->y ); + setRGB0( &psn00b_sprite, 128, 128, 128 ); + + + GetTimInfo( (unsigned int*)qlpFileAddr( + qlpFindFile( "lamelotl", tex_buff ), tex_buff ), &tim ); + + UploadTIM( &tim ); + + lamelotl_tpage = getTPage( 0, 0, tim.prect->x, tim.prect->y )|0x200; + setSprt( &llotl_sprite ); + setClut( &llotl_sprite, tim.crect->x, tim.crect->y ); + setWH( &llotl_sprite, tim.prect->w<<2, tim.prect->h ); + setUV0( &llotl_sprite, 0, 0 ); + setRGB0( &llotl_sprite, 128, 128, 128 ); + + + GetTimInfo( (unsigned int*)qlpFileAddr( + qlpFindFile( "celmap", tex_buff ), tex_buff ), &tim ); + + UploadTIM( &tim ); + + smdSetCelTex( getTPage( 0, 2, tim.prect->x, tim.prect->y )|0x200, + getClut( tim.crect->x, tim.crect->y ) ); + smdSetCelParam( 3, 3, 0x4f4f4f ); + + + GetTimInfo( (unsigned int*)qlpFileAddr( + qlpFindFile( "font", tex_buff ), tex_buff ), &tim ); + + UploadTIM( &tim ); + + font_tpage = getTPage( 0, 1, tim.prect->x, tim.prect->y )|0x200; + font_clut = getClut( tim.crect->x, tim.crect->y ); + +} + +void unpackModels() { + + /* + Unpack model data from an embedded LZP archive. + */ + + int i; + + i = lzpSearchFile( "rbowshade", lz_resources ); + o_rbowshade = (SMD*)malloc( lzpFileSize( lz_resources, i ) ); + lzpUnpackFile( o_rbowshade, lz_resources, i ); + smdInitData( o_rbowshade ); + + i = lzpSearchFile( "bungirl", lz_resources ); + o_bungirl = (SMD*)malloc( lzpFileSize( lz_resources, i ) ); + lzpUnpackFile( o_bungirl, lz_resources, i ); + smdInitData( o_bungirl ); + + i = lzpSearchFile( "lightworld", lz_resources ); + o_world = (SMD*)malloc( lzpFileSize( lz_resources, i ) ); + lzpUnpackFile( o_world, lz_resources, i ); + smdInitData( o_world ); + + i = lzpSearchFile( "lightbulb", lz_resources ); + o_lightbulb = (SMD*)malloc( lzpFileSize( lz_resources, i ) ); + lzpUnpackFile( o_lightbulb, lz_resources, i ); + smdInitData( o_lightbulb ); + + i = lzpSearchFile( "timerift", lz_resources ); + o_timerift = (SMD*)malloc( lzpFileSize( lz_resources, i ) ); + lzpUnpackFile( o_timerift, lz_resources, i ); + smdInitData( o_timerift ); + + i = lzpSearchFile( "starmask", lz_resources ); + o_star = (SMD*)malloc( lzpFileSize( lz_resources, i ) ); + lzpUnpackFile( o_star, lz_resources, i ); + smdInitData( o_star ); + + i = lzpSearchFile( "hatkid", lz_resources ); + o_hatkid = (SMD*)malloc( lzpFileSize( lz_resources, i ) ); + lzpUnpackFile( o_hatkid, lz_resources, i ); + smdInitData( o_hatkid ); + +} + +void init() { + + int i; + + // Init display + initDisplay(); + + FntLoad( 960, 0 ); + + // Just to remove all sound + SpuInit(); + + // Load all textures + loadTextures(); + +} + +// Bungirl stuff +void bungirldemo() { + + /* + The bunny girl demo is just a simple demonstration of rendering a 1390 + polygon 3D model of a bunny girl with lighting using SMD drawing routines + from Scarlet Engine. + */ + + SC_OT s_ot; + + MATRIX lmtx; + + SVECTOR rot,brot,srot; + VECTOR pos; + + int timeout = SCENE_TIME; + + // Set clear color + setRGB0( &draw, 63, 0, 127 ); + + // Set tpage base value for SMD drawing routines + smdSetBaseTPage( 0x200 ); + + // Set initial rotation values + setVector( &rot, 192, 0, 0 ); + setVector( &brot, 0, 0, 128 ); + setVector( &srot, 0, 0, 0 ); + + // Set lighting color matrix + gte_SetColorMatrix( &lgt_colmtx ); + + // Set 'backside' or ambient light color + gte_SetBackColor( 113, 113, 113 ); + + + // Demo loop + while( 1 ) { + + // Bungirl position + setVector( &pos, 0, 50, 350 ); + + TransMatrix( &mtx, &pos ); + RotMatrix( &brot, &mtx ); + + // Calculate light matrix + lmtx.m[0][0] = isin( -brot.vy<<2 ); + lmtx.m[0][1] = -2048; + lmtx.m[0][2] = icos( -brot.vy<<2 ); + + MulMatrix0( &lmtx, &mtx, &lmtx ); + + // Set matrices + gte_SetRotMatrix( &mtx ); + gte_SetTransMatrix( &mtx ); + gte_SetLightMatrix( &lmtx ); + + // Sort the bungirl model + s_ot.ot = ot[db]; + s_ot.otlen = OT_LEN; + s_ot.zdiv = 1; + s_ot.zoff = 0; + nextpri = smdSortModel( &s_ot, nextpri, o_bungirl ); + + + // Sort the rotating rainbow background + setVector( &pos, 0, 0, 200 ); + + TransMatrix( &mtx, &pos ); + RotMatrix( &srot, &mtx ); + + gte_SetRotMatrix( &mtx ); + gte_SetTransMatrix( &mtx ); + nextpri = smdSortModelFlat( ot[db]+(OT_LEN-1), nextpri, o_rbowshade ); + + brot.vy += 8; + srot.vz += 4; + + + // Sort overlay then display + sort_overlay( 0 ); + + display(); + + timeout--; + if( timeout < 0 ) + break; + + } + +} + +// Stencil effect stuff +void stencilstuff() { + + /* + The stencil demo is achieved by utilizing the mask bit setting + primitive GP0(E6h). The structure of this primitive is defined as + DR_MASK initialized and set by setDrawMask(). These are not available + in Sony's SDK by default. + + The DR_MASK primitive controls mask bit operations for drawing + primitives such as setting mask bits on every pixel drawn or mask + bit test where pixels won't be drawn on pixels with the mask bit set. + It applies to most graphics drawing primitives except VRAM fill. + The mask bits are stored in the 16th bit of each pixel drawn. + + The semi-transparency bits of a texture always carry over as mask + bits in textured primitives. The only way to clear mask bits is by + using VRAM fill commands or drawing primitives with the set mask + bit operation disabled. + + The stencil effect featured in this demo is achieved by enabling set + mask bit with DR_MASK, drawing semi-transparent primitives using + additive blending but color is all zero to make it completely invisible + but is enough to update the mask bits, disable mask set bit but enable + mask test with DR_MASK and then drawing a rectangle that fills the + entire screen. Semi-transparency mask in textures must not be used when + drawing the scene that will be 'below' the mask layer. + */ + int timeout = SCENE_TIME; + + int spin=0; + + DR_MASK *mask; + TILE *rect; + + SC_OT s_ot; + + SVECTOR rot; + SVECTOR srot; + VECTOR pos; + + // Set clear color + setRGB0( &draw, 127, 0, 63 ); + + // Set tpage base value for SMD drawing routines + smdSetBaseTPage( 0x200 ); + + // Base rotation coordinates + setVector( &rot, 0, 0, 0 ); + setVector( &srot, 0, 0, 0 ); + + // Set perspective + gte_SetGeomScreen( 320 ); + + + // Demo loop + while( timeout > 0 ) { + + + // Draw the timerift background + setVector( &rot, 0, spin, 0 ); + setVector( &pos, 0, 0, 0 ); + + TransMatrix( &mtx, &pos ); + RotMatrix( &rot, &mtx ); + + gte_SetRotMatrix( &mtx ); + gte_SetTransMatrix( &mtx ); + + s_ot.ot = ot[db]; + s_ot.otlen = 32; + s_ot.zdiv = 2; + s_ot.zoff = 20; + + nextpri = smdSortModelFlat( ot[db]+(OT_LEN-1), nextpri, o_timerift ); + + + // Sort mask primitive that enables setting mask bits + mask = (DR_MASK*)nextpri; + setDrawMask( mask, 1, 0 ); + addPrim( ot[db]+20, mask ); + nextpri += sizeof(DR_MASK); + + + // Sort the stars + setVector( &rot, 0, 0, spin<<2 ); + setVector( &pos, + (isin(spin<<2)*icos(spin))>>16, + (icos(spin<<2)*isin(spin))>>16, 400 ); + + TransMatrix( &mtx, &pos ); + RotMatrix( &rot, &mtx ); + + gte_SetRotMatrix( &mtx ); + gte_SetTransMatrix( &mtx ); + + nextpri = smdSortModelFlat( ot[db]+19, nextpri, o_star ); + + setVector( &rot, 0, 0, -spin<<2 ); + setVector( &pos, + (isin(-spin<<2)*icos(-spin))>>16, + (icos(-spin<<2)*isin(-spin))>>16, 400 ); + + TransMatrix( &mtx, &pos ); + RotMatrix( &rot, &mtx ); + + gte_SetRotMatrix( &mtx ); + gte_SetTransMatrix( &mtx ); + + nextpri = smdSortModelFlat( ot[db]+19, nextpri, o_star ); + + + // Sort mask primitive that enables mask bit test + mask = (DR_MASK*)nextpri; + setDrawMask( mask, 0, 1 ); + addPrim( ot[db]+18, mask ); + nextpri += sizeof(DR_MASK); + + + // Sort rectangle that fills the screen + rect = (TILE*)nextpri; + setTile( rect ); + setXY0( rect, 0, 0 ); + setWH( rect, 640, 511 ); + setRGB0( rect, 128, 0, 255 ); + addPrim( ot[db]+17, rect ); + nextpri += sizeof(TILE); + + + // Clear all mask settings + mask = (DR_MASK*)nextpri; + setDrawMask( mask, 0, 0 ); + addPrim( ot[db]+15, mask ); + nextpri += sizeof(DR_MASK); + + + // Sort overlay then display + sort_overlay( 0 ); + + display(); + + spin += 4; + timeout--; + } + +} + +// Orbiting around cel-shaded hatkid stuff +void hatkidstuff() { + + /* + The cel-shading effect works in a similar manner as conventional + per-vertex light source calculation except the color values are used + in a different manner. The resulting color values are divided down + using bit shifts to fit as texture coordinates (usually within the + range of 0-31) which are then used to map to a shading map which is a + simple texture of 3 to 4 shading levels. This technique is very similar + to how cel-shading is achieved on the Gamecube except all the vertex to + texture coordinate conversion is all done on the GX itself. + + To achieve this effect on untextured and textured polygons seamlessly + the shading map is drawn over the original unshaded polygons of the + model as semi-transparent polygons with subtractive blending. The + shading map had to be inverted for this effect to work properly since + blending is subtractive and not multiplicative after all. + */ + + int timeout = SCENE_TIME; + int spin=0; + + SC_OT s_ot; + + MATRIX lmtx; + + SVECTOR rot; + VECTOR pos; + + // Set clear color + setRGB0( &draw, 127, 0, 63 ); + + // Sets base TPage value for SMD drawing routines + smdSetBaseTPage( 0x200 ); + + setVector( &rot, 0, 0, 0 ); + + // Set light color matrix + gte_SetColorMatrix( &lgt_colmtx ); + + // Set back/ambient color to black (required for good cel-shading) + gte_SetBackColor( 0, 0, 0 ); + + gte_SetGeomScreen( 320 ); + + // Demo loop + while( timeout > 0 ) { + + // Sort 3D timerift background + setVector( &rot, spin, spin, spin>>1 ); + setVector( &pos, 0, 0, 0 ); + + TransMatrix( &mtx, &pos ); + RotMatrix( &rot, &mtx ); + + // Fixed light source direction + lmtx.m[0][0] = -2048; + lmtx.m[0][1] = -2048; + lmtx.m[0][2] = -2048; + + // Multiply by rotation matrix to make it relative to the camera rotation + MulMatrix0( &lmtx, &mtx, &lmtx ); + + gte_SetLightMatrix( &lmtx ); + gte_SetRotMatrix( &mtx ); + gte_SetTransMatrix( &mtx ); + + nextpri = smdSortModelFlat( ot[db]+(OT_LEN-1), nextpri, o_timerift ); + + + // Sort the cel-shaded hatkid + setVector( &pos, 0, 0, 600 ); + TransMatrix( &mtx, &pos ); + gte_SetTransMatrix( &mtx ); + + s_ot.ot = ot[db]; + s_ot.otlen = 250; + s_ot.zdiv = 1; + s_ot.zoff = 0; + + nextpri = smdSortModelCel( &s_ot, nextpri, o_hatkid ); + + + // Sort overlay then display + sort_overlay( 1 ); + display(); + + spin += 8; + timeout--; + + } + +} + +// Plasma stuff +void genPlasma(char *out, int count); +char *sortPlasma(int *ot, char *pri, char *map); + +void plasmastuff() { + + DR_TPAGE* tp; + char plasbuff[1271]; + + int pcount = 0; + int timeout = SCENE_TIME; + + while( timeout > 0 ) { + + genPlasma( plasbuff, pcount ); + nextpri = sortPlasma( ot[db]+1, nextpri, plasbuff ); + + sort_overlay( 1 ); + + display(); + timeout--; + pcount++; + + } + +} + +// Simple stripe transition effect +void transition() { + + int i,count,comp; + int bheight[16] = { 0 }; + + TILE *tile = (TILE*)nextpri; + draw.isbg = 0; + + while( 1 ) { + + comp = 0; + + for( i=0; i<16; i++ ) { + + if( bheight[i] > 0 ) { + + + setTile( tile ); + setXY0( tile, 0, 32*i ); + setRGB0( tile, 0, 151, 255 ); + setWH( tile, 640, bheight[i] ); + addPrim( ot[db], tile ); + tile++; + + if( bheight[i] < 32 ) + bheight[i]++; + else + comp++; + + } + + } + + if( bheight[count>>1] == 0 ) + bheight[count>>1] = 1; + + display(); + count++; + + if( comp >= 16 ) + break; + + } + + DrawSync(); + + draw.isbg = 1; + +} + +int main(int argc, const char *argv[]) { + + // Init + init(); + + // Do transition + transition(); + + // Do Meido-Tek, PSn00bSDK and n00bDEMO logo intros + intro(); + + // Unpack model data + unpackModels(); + + // Demo sequence loop + while( 1 ) { + + lightdemo(); + bungirldemo(); + stencilstuff(); + hatkidstuff(); + plasmastuff(); + + } + + return 0; +}
\ No newline at end of file diff --git a/examples/n00bdemo/makefile b/examples/n00bdemo/makefile new file mode 100644 index 0000000..a87f299 --- /dev/null +++ b/examples/n00bdemo/makefile @@ -0,0 +1,45 @@ +include ../sdk-common.mk + +TARGET = demo.elf + +CFILES = $(notdir $(wildcard *.c)) +AFILES = $(notdir $(wildcard *.s)) + +OFILES = $(addprefix build/,$(CFILES:.c=.o) $(AFILES:.s=.o)) + +INCLUDE += -I../../libpsn00b/lzp +LIBDIRS += -L../../libpsn00b/lzp + +LIBS = -llzp -lc -lpsxetc -lpsxgpu -lpsxgte -lpsxspu -lpsxapi -lgcc + +CFLAGS = -g -O2 -fno-builtin -fdata-sections -ffunction-sections +CPPFLAGS = $(CFLAGS) -fno-exceptions +AFLAGS = -g -msoft-float +LDFLAGS = -g -Ttext=0x80010000 -gc-sections + +CC = $(PREFIX)gcc +CXX = $(PREFIX)g++ +AS = $(PREFIX)as +LD = $(PREFIX)ld + +all: resources $(OFILES) + $(LD) $(LDFLAGS) $(LIBDIRS) $(OFILES) $(LIBS) -o $(TARGET) + elf2x -q $(TARGET) + +build/%.o: %.c + @mkdir -p $(dir $@) + $(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@ + +build/%.o: %.s + @mkdir -p $(dir $@) + $(CC) $(AFLAGS) $(INCLUDE) -c $< -o $@ + +resources: + lzpack data.xml + touch data.s + +iso: + mkpsxiso -y -q -o demo.iso iso.xml + +clean: + rm -rf build *.lzp *.qlp $(TARGET) $(TARGET:.elf=.exe) $(TARGET:.elf=.iso) diff --git a/examples/n00bdemo/overlay.c b/examples/n00bdemo/overlay.c new file mode 100644 index 0000000..9b04274 --- /dev/null +++ b/examples/n00bdemo/overlay.c @@ -0,0 +1,199 @@ +#include <sys/types.h> +#include <psxgte.h> +#include <psxgpu.h> +#include "disp.h" + +extern const char scroll_text[]; +extern unsigned short lamelotl_tpage,psn00b_tpage; +extern unsigned short font_tpage,font_clut; + +extern SPRT llotl_sprite; +extern SPRT psn00b_sprite; + +u_char font_width[] = { + 10 ,6 ,12 ,16 ,12 ,14 ,14 ,8 ,10 ,10 ,14 ,12 ,8 ,14 ,6 ,14 , + 14 ,6 ,12 ,13 ,14 ,14 ,14 ,14 ,14 ,14 ,6 ,8 ,12 ,14 ,12 ,14 , + 14 ,14 ,14 ,13 ,14 ,14 ,14 ,14 ,14 ,14 ,14 ,14 ,12 ,15 ,14 ,14 , + 14 ,14 ,14 ,13 ,14 ,15 ,15 ,16 ,16 ,16 ,16 ,10 ,14 ,10 ,14 ,14 , + 8 ,14 ,13 ,11 ,13 ,12 ,13 ,12 ,13 ,6 ,14 ,14 ,8 ,16 ,14 ,14 , + 14 ,14 ,13 ,12 ,12 ,14 ,14 ,14 ,13 ,13 ,14 ,10 ,6 ,10 ,16 ,16 +}; + +int scrolltext_pos = 640; +int scrolltext_cpos = 0; +int overlay_count = 0; + +void sort_overlay(int showlotl) { + + SPRT *spr; + SPRT_16 *spr16; + DR_TPAGE *tp; + POLY_G4 *quad; + LINE_G2 *line; + + int i = scrolltext_cpos; + int j, k, tx, par_end = 0; + + tx = scrolltext_pos; + + while( scroll_text[i] != 0 ) { + + if( scroll_text[i] == '\n' ) { + par_end = 1; + break; + } + + j = scroll_text[i]-32; + + if( j > 0 ) { + + spr16 = (SPRT_16*)nextpri; + setSprt16( spr16 ); + setSemiTrans( spr16, 1 ); + setXY0( spr16, tx, 28 ); + setUV0( spr16, (j%16)<<4, (j>>4)<<4 ); + + if( tx < 128 ) { + k = tx; + if( k < 0 ) + k = 0; + setRGB0( spr16, k, k, k ); + } else if( tx > 512 ) { + k = 128-(tx-512); + if( k < 0 ) + k = 0; + setRGB0( spr16, k, k, k ); + } else { + setRGB0( spr16, 128, 128, 128 ); + } + + spr16->clut = font_clut; + addPrim( ot[db], spr16 ); + nextpri += sizeof(SPRT_16); + + } + + tx += font_width[j]; + + if( tx > 640 ) + break; + + i++; + + } + + scrolltext_pos -= 4; + j = scroll_text[scrolltext_cpos]-32; + if( j >= 0 ) { + + if( scrolltext_pos <= -font_width[j] ) { + + scrolltext_pos += font_width[j]; + scrolltext_cpos++; + + } + + } else { + + scrolltext_pos = 0; + scrolltext_cpos++; + + if( par_end ) + scrolltext_pos = 640; + + if( scroll_text[scrolltext_cpos] == 0 ) { + scrolltext_cpos = 0; + scrolltext_pos = 640; + } + + } + + line = (LINE_G2*)nextpri; + setLineG2( line ); + setSemiTrans( line, 1 ); + setXY2( line, 0, 46, 320, 46 ); + setRGB0( line, 0, 0, 0 ); + setRGB1( line, 255, 255, 255 ); + addPrim( ot[db], line ); + line++; + setLineG2( line ); + setSemiTrans( line, 1 ); + setXY2( line, 320, 46, 640, 46 ); + setRGB0( line, 255, 255, 255 ); + setRGB1( line, 0, 0, 0 ); + addPrim( ot[db], line ); + line++; + nextpri = (char*)line; + + tp = (DR_TPAGE*)nextpri; + setDrawTPageVal( tp, font_tpage ); + addPrim( ot[db], tp ); + nextpri += sizeof(DR_TPAGE); + + quad = (POLY_G4*)nextpri; + setPolyG4( quad ); + setSemiTrans( quad, 1 ); + setXY4( quad, + 0, 25, 320, 25, + 0, 46, 320, 46 ); + setRGB0( quad, 0, 0, 0 ); + setRGB1( quad, 64, 64, 64 ); + setRGB2( quad, 0, 0, 0 ); + setRGB3( quad, 64, 64, 64 ); + addPrim( ot[db], quad ); + quad++; + setPolyG4( quad ); + setSemiTrans( quad, 1 ); + setXY4( quad, + 320, 25, 640, 25, + 320, 46, 640, 46 ); + setRGB0( quad, 64, 64, 64 ); + setRGB1( quad, 0, 0, 0 ); + setRGB2( quad, 64, 64, 64 ); + setRGB3( quad, 0, 0, 0 ); + addPrim( ot[db], quad ); + quad++; + nextpri = (char*)quad; + + i = isin( overlay_count )>>9; + + if( GetVideoMode() == MODE_PAL ) { + j = 32; + } else { + j = 0; + } + + tp = (DR_TPAGE*)nextpri; + setDrawTPageVal( tp, getTPage( 0, 2, 0, 0 )|0x200 ); + addPrim( ot[db], tp ); + nextpri += sizeof(DR_TPAGE); + + if( showlotl ) { + + spr = (SPRT*)nextpri; + *spr = llotl_sprite; + setXY0( spr, 440, (200+j)+i ); + addPrim( ot[db], spr ); + nextpri += sizeof(SPRT); + + tp = (DR_TPAGE*)nextpri; + setDrawTPageVal( tp, lamelotl_tpage ); + addPrim( ot[db], tp ); + nextpri += sizeof(DR_TPAGE); + + } + + spr = (SPRT*)nextpri; + *spr = psn00b_sprite; + setXY0( spr, 8, (400+j)-i ); + addPrim( ot[db], spr ); + nextpri += sizeof(SPRT); + + tp = (DR_TPAGE*)nextpri; + setDrawTPageVal( tp, psn00b_tpage ); + addPrim( ot[db], tp ); + nextpri += sizeof(DR_TPAGE); + + overlay_count += 32; + +}
\ No newline at end of file diff --git a/examples/n00bdemo/plasma_tbl.c b/examples/n00bdemo/plasma_tbl.c new file mode 100644 index 0000000..2cbd9b6 --- /dev/null +++ b/examples/n00bdemo/plasma_tbl.c @@ -0,0 +1,500 @@ +// These are from Meido-Menu which was a very simple demo I made back in 2013 +// Man, time sure does fly. - Lameguy64 + +unsigned int plasma_colors[256] = { + 0x00000000, + 0x00000408, + 0x00040811, + 0x0008111a, + 0x00081623, + 0x000d1f2c, + 0x00112335, + 0x0011273d, + 0x0016304a, + 0x001a3553, + 0x001f3d5b, + 0x001f4163, + 0x00234a6b, + 0x00274e73, + 0x0027537b, + 0x002c5b83, + 0x00305f8e, + 0x00356795, + 0x00356b9c, + 0x00396fa3, + 0x003d77aa, + 0x003d7bb1, + 0x004183b7, + 0x004687bd, + 0x00468ac6, + 0x004a92cb, + 0x004e95d0, + 0x00539cd5, + 0x0053a0da, + 0x0057a7df, + 0x005baae3, + 0x005bade7, + 0x005fb4ec, + 0x0063b7ef, + 0x0067bdf2, + 0x0067c0f5, + 0x006bc6f7, + 0x006fc8f9, + 0x006fcbfb, + 0x0073d0fc, + 0x0077d3fe, + 0x007bd8fe, + 0x007bdafe, + 0x007fdcfe, + 0x0083e1fe, + 0x0083e3fe, + 0x0087e7fd, + 0x008ae8fb, + 0x008eecf9, + 0x008eeef7, + 0x0092eff5, + 0x0095f2f2, + 0x0095f3ef, + 0x0099f6ec, + 0x009cf7e8, + 0x009cf8e5, + 0x00a0fadf, + 0x00a3fbda, + 0x00a7fcd5, + 0x00a7fdd0, + 0x00aafdcb, + 0x00adfec6, + 0x00adfec0, + 0x00b1feba, + 0x00b4ffb1, + 0x00b7feaa, + 0x00b7fea3, + 0x00bafe9c, + 0x00bdfd95, + 0x00bdfd8e, + 0x00c0fb87, + 0x00c3fb7f, + 0x00c3fa73, + 0x00c6f86b, + 0x00c8f763, + 0x00cbf55b, + 0x00cbf353, + 0x00cef14a, + 0x00d0ef41, + 0x00d0ee39, + 0x00d3ea2c, + 0x00d5e823, + 0x00d8e51a, + 0x00d8e311, + 0x00dae108, + 0x00dcdc00, + 0x00dcda08, + 0x00dfd511, + 0x00e1d31f, + 0x00e3ce27, + 0x00e3cb30, + 0x00e5c839, + 0x00e7c341, + 0x00e7c04a, + 0x00e8ba53, + 0x00eab75b, + 0x00eab467, + 0x00ecad6f, + 0x00eeaa77, + 0x00efa37f, + 0x00efa087, + 0x00f1998e, + 0x00f29595, + 0x00f2929c, + 0x00f38aa7, + 0x00f587ad, + 0x00f67fb4, + 0x00f67bba, + 0x00f773c0, + 0x00f86fc6, + 0x00f86bcb, + 0x00f963d0, + 0x00fa5fd8, + 0x00fb57dc, + 0x00fb53e1, + 0x00fb4ee5, + 0x00fc46e8, + 0x00fc41ec, + 0x00fd39ef, + 0x00fd35f2, + 0x00fe2cf6, + 0x00fe27f8, + 0x00fe23fa, + 0x00fe1afb, + 0x00fe16fd, + 0x00fe0dfe, + 0x00fe08fe, + 0x00fe04fe, + 0x00fe04fe, + 0x00fe08fe, + 0x00fe11fd, + 0x00fe16fc, + 0x00fe1ffb, + 0x00fe23f9, + 0x00fe27f7, + 0x00fe30f5, + 0x00fd35f1, + 0x00fd3dee, + 0x00fd41ea, + 0x00fc46e7, + 0x00fb4ee3, + 0x00fb53df, + 0x00fb5bda, + 0x00fa5fd5, + 0x00f967ce, + 0x00f96bc8, + 0x00f86fc3, + 0x00f777bd, + 0x00f77bb7, + 0x00f683b1, + 0x00f587aa, + 0x00f58aa3, + 0x00f39299, + 0x00f29592, + 0x00f19c8a, + 0x00f1a083, + 0x00efa77b, + 0x00eeaa73, + 0x00eead6b, + 0x00ecb463, + 0x00eab757, + 0x00e8bd4e, + 0x00e8c046, + 0x00e7c33d, + 0x00e5c835, + 0x00e5cb2c, + 0x00e3d023, + 0x00e1d31a, + 0x00dfd80d, + 0x00dfda04, + 0x00dcdc04, + 0x00dae10d, + 0x00dae316, + 0x00d8e71f, + 0x00d5e827, + 0x00d5ea30, + 0x00d3ee3d, + 0x00d0ef46, + 0x00cef24e, + 0x00cef357, + 0x00cbf65f, + 0x00c8f767, + 0x00c8f86f, + 0x00c6fa77, + 0x00c3fb83, + 0x00c0fc8a, + 0x00c0fd92, + 0x00bdfd99, + 0x00bafea0, + 0x00bafea7, + 0x00b7fead, + 0x00b4ffb4, + 0x00b1febd, + 0x00b1fec3, + 0x00adfec8, + 0x00aafdce, + 0x00aafdd3, + 0x00a7fbd8, + 0x00a3fbdc, + 0x00a3fae1, + 0x00a0f8e7, + 0x009cf7ea, + 0x0099f5ee, + 0x0099f3f1, + 0x0095f1f3, + 0x0092eff6, + 0x0092eef8, + 0x008eeafa, + 0x008ae8fc, + 0x0087e5fd, + 0x0087e3fe, + 0x0083e1fe, + 0x007fdcff, + 0x007fdafe, + 0x007bd5fe, + 0x0077d3fd, + 0x0073cefb, + 0x0073cbfa, + 0x006fc8f8, + 0x006bc3f6, + 0x006bc0f3, + 0x0067baf1, + 0x0063b7ee, + 0x0063b4ea, + 0x005fade5, + 0x005baae1, + 0x0057a3dc, + 0x0057a0d8, + 0x00539cd3, + 0x004e95ce, + 0x004e92c8, + 0x004a8ac3, + 0x004687ba, + 0x00417fb4, + 0x00417bad, + 0x003d77a7, + 0x00396fa0, + 0x00396b99, + 0x00356392, + 0x00305f8a, + 0x00305b7f, + 0x002c5377, + 0x00274e6f, + 0x00234667, + 0x0023415f, + 0x001f3957, + 0x001a354e, + 0x001a3046, + 0x00162739, + 0x00112330, + 0x000d1a27, + 0x000d161f, + 0x00081116, + 0x0004080d, + 0x00040404, + 0x00000404 +}; + +short plasma_sin1[] = { + 0, + 6, + 12, + 18, + 24, + 30, + 36, + 42, + 47, + 53, + 59, + 65, + 71, + 76, + 82, + 88, + 93, + 99, + 104, + 110, + 115, + 120, + 125, + 131, + 136, + 141, + 146, + 150, + 155, + 160, + 165, + 169, + 173, + 178, + 182, + 186, + 190, + 194, + 198, + 202, + 205, + 209, + 212, + 216, + 219, + 222, + 225, + 227, + 230, + 233, + 235, + 237, + 240, + 242, + 243, + 245, + 247, + 248, + 250, + 251, + 252, + 253, + 254, + 255, + 255, + 256, + 256, + 256, + 256, + 256, + 256, + 255, + 255, + 254, + 253, + 252, + 251, + 250, + 248, + 247, +}; + +short plasma_sin2[] = { + 0, + 4, + 9, + 13, + 17, + 21, + 24, + 27, + 29, + 30, + 32, + 32, + 32, + 31, + 30, + 28, + 25, + 22, + 19, + 15, + 11, + 7, + 2, + -2, + -7, + -11, + -15, + -19, + -22, + -25, + -28, + -30, + -31, + -32, + -32, + -32, + -30, + -29, + -27, + -24, + -21, + -17, + -13, + -9, + -4, + 0, + 4, + 9, + 13, + 17, + 21, + 24, + 27, + 29, + 30, + 32, + 32, + 32, + 31, + 30 +}; + +short plasma_sin3[] = { +0, + 4, + 9, + 13, + 18, + 22, + 26, + 30, + 34, + 38, + 41, + 44, + 48, + 50, + 53, + 55, + 58, + 59, + 61, + 62, + 63, + 64, + 64, + 64, + 64, + 63, + 62, + 61, + 59, + 58, + 55, + 53, + 50, + 48, + 44, + 41, + 38, + 34, + 30, + 26, + 22, + 18, + 13, + 9, + 4, + 0, + -4, + -9, + -13, + -18, + -22, + -26, + -30, + -34, + -38, + -41, + -44, + -48, + -50, + -53, + -55, + -58, + -59, + -61, + -62, + -63, + -64, + -64, + -64, + -64, + -63, + -62, + -61, + -59, + -58, + -55, + -53, + -50, + -48, + -44, + -41, + -38, + -34, + -30, + -26, + -22, + -18, + -13, + -9, + -4, +};
\ No newline at end of file diff --git a/examples/n00bdemo/plasma_tbl.h b/examples/n00bdemo/plasma_tbl.h new file mode 100644 index 0000000..dd322e6 --- /dev/null +++ b/examples/n00bdemo/plasma_tbl.h @@ -0,0 +1,9 @@ +#ifndef _PLASMA_TBL_H +#define _PLASMA_TBL_H + +unsigned int plasma_colors[256]; +extern short plasma_sin1[]; +extern short plasma_sin2[]; +extern short plasma_sin3[]; + +#endif
\ No newline at end of file diff --git a/examples/n00bdemo/plasmagen.s b/examples/n00bdemo/plasmagen.s new file mode 100644 index 0000000..07b3f48 --- /dev/null +++ b/examples/n00bdemo/plasmagen.s @@ -0,0 +1,181 @@ +.set noreorder + +.set POLYG4_tag, 0 +.set POLYG4_rgb0, 4 +.set POLYG4_xy0, 8 +.set POLYG4_rgb1, 12 +.set POLYG4_xy1, 16 +.set POLYG4_rgb2, 20 +.set POLYG4_xy2, 24 +.set POLYG4_rgb3, 28 +.set POLYG4_xy3, 32 +.set POLYG4_len, 36 + +# a0 - Plasma output +# a1 - Counter +.global genPlasma +.type genPlasma, @function +genPlasma: + move $t1, $0 + +.gn_y_loop: move $t0, $0 + +.gn_x_loop: la $v0, plasma_sin1 + sll $v1, $t0, 1 + addu $v1, $v0 + lh $v0, 0($v1) + + la $a2, plasma_sin2 + sll $v1, $t1, 1 + addu $v1, $a2 + lh $v1, 0($v1) + nop + add $v0, $v1 + + add $v1, $t0, $t1 + add $v1, $a1 + divu $v1, 90 + la $a2, plasma_sin3 + mfhi $v1 + + sll $v1, 1 + addu $v1, $a2 + lh $v1, 0($v1) + nop + add $v0, $v1 + + andi $v0, 0xff + + sb $v0, 0($a0) + addu $a0, 1 + + addiu $t0, 1 + blt $t0, 41, .gn_x_loop + nop + + addiu $t1, 1 + blt $t1, 31, .gn_y_loop + nop + + jr $ra + nop + + +# a0 - OT entry +# a1 - Primitive address +# a2 - Plasma map source +.global sortPlasma +.type sortPlasma, @function +sortPlasma: + move $t1, $0 + +.y_loop: + move $t0, $0 + +.x_loop: + lbu $v0, 0($a2) + addiu $a2, 1 + la $a3, plasma_colors + sll $v0, 2 + addu $v0, $a3 + lw $v0, 0($v0) + + lui $v1, 0x3800 + or $v0, $v1 + sw $v0, POLYG4_rgb0($a1) + + + lbu $v0, 0($a2) + nop + sll $v0, 2 + addu $v0, $a3 + lw $v0, 0($v0) + nop + sw $v0, POLYG4_rgb1($a1) + + + lbu $v0, 40($a2) + nop + sll $v0, 2 + addu $v0, $a3 + lw $v0, 0($v0) + nop + sw $v0, POLYG4_rgb2($a1) + + + lbu $v0, 41($a2) + nop + sll $v0, 2 + addu $v0, $a3 + lw $v0, 0($v0) + nop + sw $v0, POLYG4_rgb3($a1) + + + sll $v0, $t0, 4 + andi $v0, 0xffff + sll $v1, $t1, 20 + or $v0, $v1 + sw $v0, POLYG4_xy0($a1) + + sll $v0, $t0, 4 + andi $v0, 0xffff + addi $v0, 16 + sll $v1, $t1, 20 + or $v0, $v1 + sw $v0, POLYG4_xy1($a1) + + sll $v0, $t0, 4 + andi $v0, 0xffff + sll $v1, $t1, 4 + addi $v1, 16 + sll $v1, 16 + or $v0, $v1 + sw $v0, POLYG4_xy2($a1) + + sll $v0, $t0, 4 + andi $v0, 0xffff + addi $v0, 16 + sll $v1, $t1, 4 + addi $v1, 16 + sll $v1, 16 + or $v0, $v1 + sw $v0, POLYG4_xy3($a1) + + .set noat + + lui $v1, 0x0800 + lw $v0, 0($a0) + lui $at, 0xff00 + and $v1, $at + lui $at, 0x00ff + or $at, 0xffff + and $v0, $at + or $v1, $v0 + sw $v1, 0($a1) + lw $v0, 0($a0) + and $a1, $at + lui $at, 0xff00 + and $v0, $at + or $v0, $a1 + sw $v0, 0($a0) + + .set at + + lui $v0, 0x8000 + or $a1, $v0 + addiu $a1, POLYG4_len + + + addiu $t0, 1 + blt $t0, 40, .x_loop + nop + + addiu $a2, 1 + addiu $t1, 1 + blt $t1, 30, .y_loop + nop + + + jr $ra + move $v0, $a1
\ No newline at end of file diff --git a/examples/n00bdemo/scrolltext.c b/examples/n00bdemo/scrolltext.c new file mode 100644 index 0000000..e844f21 --- /dev/null +++ b/examples/n00bdemo/scrolltext.c @@ -0,0 +1,136 @@ +const char scroll_text[] = { +"Greetings! Lameguy64 proudly presents a new PlayStation homebrew demo called " +"n00bDEMO and is very much the first time I've released a new demo in years! The " +"last time I released a PlayStation demo was Meido-Demo back in 2013 and boy " +"does this new demo show how far I've gotten good at programming for the " +"PlayStation with graphical effects such as stencil masks and cel-shading " +"never before seen in demos that I'm aware of presented in hi-res mode at 60FPS " +"(50 if PAL). Though there's some flickering issues here and there (though it " +"probably flickers less in PAL mode and none on the PS2 and emulators) which " +"I'll explain the cause of such problems in a bit...\n" + +"Making this demo was pretty challenging (actually, mostly annoying) but " +"mostly for the wrong reasons because this demo is actually not made using " +"the official Sony SDK whatsoever. Yes, I actually put together my own SDK " +"using the GNU GCC toolchain and made the PlayStation GPU and GTE libraries " +"myself mostly in MIPS assembly. I call this SDK project of my own PSn00bSDK " +"and is probably the first homebrewn PlayStation SDK that can actually do 3D " +"graphics with full GTE support that is on-par to the official SDK even in " +"its current work-in-progress state as all other open source SDK examples I've " +"seen only offer very limited or no 3D capabilities whatsoever as with the case " +"of PSXSDK. I used n00b in the naming as I don't want to put pro in the name " +"of my projects knowing that its been used and abused in a lot of shovelware " +"and I wanted something less generic sounding. This SDK project is not exactly " +"professional software after all especially when I get into the issues I've had " +"with this project as of the making of this demo...\n" + +"Currently my SDK mostly offers support for the GPU and GTE but not so much on " +"other hardware features such as SPU, CD (which would be a disgrace not to support), " +"MDEC, controller/memory card and serial I/O. I mostly focused on supporting the " +"GPU and GTE as I feel it was the best way to present a proof of concept that making " +"an open source SDK that is on par to the official SDK should definitely be " +"possible especially when the ins and outs of the PlayStation hardware " +"had since been extensively documented so there's absolutely no excuse for not " +"supporting the hardware features of the console. I'm not certain if I'll continue " +"working on this PSn00bSDK project because I've experienced numerous issues with " +"this project, a lot of which appear to be compiler related (I'm using GCC " +"7.2.0 targetting mipsel-unknown-elf) as doing small code changes would sometimes break " +"or cripple certain parts of a large program that results to slowdown (hence " +"why there's some flicker and I had to omit the Lamelotl artwork in some scenes to " +"try to keep the flicker down) even when the code changes are completely unrelated to the " +"parts that got affected. Issues like these made developing this demo a MASSIVE " +"pain in the butt and it feels like things seem to stall more often than when using the " +"official SDK which also used GCC (2.8.1 to be specific). I'm not entirely sure if " +"they're optimization issues or I'm just pushing the console a little too far :). " +"I feel these issues are detrimental to this project as I don't really want to " +"work with a potentially unstable compiler in my SDK project as that would make " +"creating much larger projects (such as a full game) an even bigger pain " +"in the butt as things would break randomly over small code changes and having to " +"deal with such issues do not conform to my standards. I haven't checked if " +"GCC 8.2.0 has better mipsel support and I've yet to look into clang which is " +"said to support MIPS down to version 1 of the ISA.\n" + +"What I hoped to achieve with PSn00bSDK is to create a 100% free and open " +"source PlayStation SDK that is on-par to the official SDK to make homebrew " +"development for the PS1 much more attractive especially to those interested " +"in developing commercial homebrew for the console without the legal issues " +"surrounding the use of Sony's libraries. But considering the compiler issues " +"I've had and the PS1 community being mostly focussed on emulators and PSIO over " +"actually making homebrew for the console and many of the folks who actually knew how " +"to program for the console especially in low-level have either retired or " +"disappeared, making the feat I wanted to achieve with my SDK project somewhat " +"unlikely I feel. I'll be releasing source code of this demo and " +"the PSn00bSDK libraries on github a week or two as of the release of this " +"demo if things go according to plan on my end and contributions are accepted " +"for those interested to volunteer for this project...\n" + +"You should have noticed by now that there's something inherently missing " +"about this demo. Yes, there's no music in this demo at all. I would've " +"used some CD audio for music but I never got CD playback code working for " +"this demo and I've already made numerous attempts trying to crack the darn " +"thing with no success. At least there's no overused Kevin Macleod music here " +"unlike my last demo which I still wonder why I chose that for the music " +"over rendering out a MOD file into a WAV file and using that instead, man " +"was I stupid back then. Another option would be to use MOD music as I have " +"some SPU support in my SDK but writing my own MOD player would take a lot of " +"time and effort and finishing up this demo has taken long enough I feel as " +"I was originally going to release this demo back in December of 2018. " +"None of the existing MOD players can be used either as Hitmen's player " +"relies on Sony's libraries and is only offered in binary form (because " +"stupid) and PSXSDK's MOD player does all sample mixing in software instead " +"of using the SPU for playing the samples which is abslutely retarded and is " +"definitely not fit for this demo project. If you're watching this demo in " +"video form I've likely dubbed over some music to help keep things " +"interesting as you read this scroll text...\n" + +"There's actually some Scarlet Engine technology featured in this demo " +"namely the SMD model data format which is basically my own implementation " +"of the TMD model data for Scarlet and its drawing functions written in " +"assembly. The implementation featured here uses a newer revision of the SMD " +"model data and the drawing functions are a rewrite but they're still work " +"in progress as it currently does not support the features added in the new " +"revision of the SMD model data format. I haven't worked on Scarlet in awhile " +"as I've somewhat diverted to other things as of late and I've yet to do " +"research on better culling and rendering techniques as my last implementation " +"wasn't really all that good I feel. I plan to implement automated culling " +"using ray scanning when compiling a map and probably a geometry " +"LOD system similar to Spyro's engine. Developing Scarlet has been taking a " +"very long time I know but you have to consider this is being worked on by a " +"single person (who's probably a nobhead) as a hobby with no prior experience " +"in developing a 3D engine and to be honest, working on Scarlet feels a bit " +"too big for a single individual to work on. And in case you're wondering " +"about the apparent name change from Project Scarlet, that's because MS's new " +"Xbox is also codenamed Project Scarlet and I don't really like to have " +"Xbox fanboys looking desperately for videos about MS's Project Scarlet " +"and finding videos about my Project Scarlet instead that would only serve to " +"enrage them or something...\n" + +"Another piece of somewhat advanced technology used in this demo is that " +"all the assets in this demo are all stored in the PS-EXE in LZ77 compressed " +"form using my LZPack libraries to keep PS-EXE size low which speeds up the " +"boot time of this demo. I actually developed the LZPack library for the " +"official SDK in the past but I haven't got around to releasing them but I'm " +"likely going to include them with PSn00bSDK along with the compression/packing " +"tools and it should still work with the official SDK with only minor changes...\n" + +"I think that's pretty much all there is I wanted to say in this demo. I " +"was originally going to release this demo back in December of 2018 but " +"got delayed due to work and other things getting in the way but I hope " +"you enjoyed watching the visuals that were presented in this little " +"proof of concept demo...\n" + +"Greets to nocash NITROYUASH Orion danhans42 Shendo TriMesh " +"inc^lightforce Shadow\n" + +"Programming and most graphical assets in this demo are done by me " +"(Lameguy64). Lamelotl artwork drawn by Lumdrop. Hatkid from A Hat in " +"Time is owned by Gears for Breakfast and the 3D model featured in this " +"demo is made by me...\n" + +"Visit my website at http://lameguy64.tk if you want... " +"Pages are super lightweight with absolutely zero ads! (except joke ads that " +"don't do much other than mock the real ads, in case I've added them in the future)\n" + +"This has been a 2019 Meido-Tek Production!\n" + +};
\ No newline at end of file diff --git a/examples/n00bdemo/smd.h b/examples/n00bdemo/smd.h new file mode 100644 index 0000000..29c2812 --- /dev/null +++ b/examples/n00bdemo/smd.h @@ -0,0 +1,68 @@ +#ifndef _SMD_H +#define _SMD_H + +typedef struct { + int *ot; + short otlen; + unsigned char zdiv,zoff; +} SC_OT; + +typedef struct { + char id[3]; + unsigned char version; + unsigned short flags; + unsigned short n_verts; + unsigned short n_norms; + unsigned short n_prims; + SVECTOR *p_verts; + SVECTOR *p_norms; + void *p_prims; +} SMD; + +typedef struct { + unsigned char type:2; + unsigned char l_type:2; + unsigned char c_type:1; + unsigned char texture:1; + unsigned char blend:2; + unsigned char zoff:4; + unsigned char nocull:1; + unsigned char mask:1; + unsigned char texwin:2; + unsigned char texoff:2; + unsigned char reserved:6; + unsigned char len; +} SMD_PRI_TYPE; + +typedef struct { + SMD_PRI_TYPE prim_id; + unsigned short v0,v1,v2,v3; // Vertex indices + unsigned short n0,n1,n2,n3; // Normal indices + unsigned char r0,g0,b0,code; // RGB0 + unsigned char r1,g1,b1,p0; // RGB1 + unsigned char r2,g2,b2,p1; // RGB2 + unsigned char r3,g3,b3,p2; // RGB3 + unsigned char tu0,tv0; + unsigned char tu1,tv1; + unsigned char tu2,tv2; + unsigned char tu3,tv3; + unsigned short tpage,clut; +} SMD_PRIM; + + +int OpenSMD(void *smd); +SMD_PRIM *ReadSMD(SMD_PRIM *pri); + +void scSetClipRect(int x0, int y0, int x1, int y1); + +SMD *smdInitData(void *data); +void smdSetBaseTPage(unsigned short tpage); + +char *smdSortModel(SC_OT *ot, char* pribuff, SMD *smd); +char *smdSortModelFlat(unsigned int *ot, char* pribuff, SMD *smd); + +void smdSetCelTex(unsigned short tpage, unsigned short clut); +void smdSetCelParam(int udiv, int vdiv, unsigned int col); +char *smdSortModelCel(SC_OT *ot, char* pribuff, SMD *smd); + +#endif
\ No newline at end of file diff --git a/examples/n00bdemo/smd.s b/examples/n00bdemo/smd.s new file mode 100644 index 0000000..f9cf2fe --- /dev/null +++ b/examples/n00bdemo/smd.s @@ -0,0 +1,924 @@ +.set noreorder + +.include "gtereg.h" +.include "inline_s.h" +.include "smd_s.h" + + +.section .text + +# Currently does not do header checks +.global smdInitData +.type smdInitData, @function +smdInitData: + + lw $a1, SMD_HEAD_PVERTS($a0) # Initialize header pointers + lw $a2, SMD_HEAD_PNORMS($a0) + lw $a3, SMD_HEAD_PPRIMS($a0) + + addu $a1, $a0 + addu $a2, $a0 + addu $a3, $a0 + + sw $a1, SMD_HEAD_PVERTS($a0) + sw $a2, SMD_HEAD_PNORMS($a0) + sw $a3, SMD_HEAD_PPRIMS($a0) + + jr $ra + move $v0, $a0 + + +.global scSetClipRect +.type scSetClipRect, @function +scSetClipRect: + sll $a1, 16 + or $a0, $a1 + sll $a3, 16 + or $a2, $a3 + la $a1, _sc_clip + sw $a0, 0( $a1 ) + jr $ra + sw $a2, 4( $a1 ) + + +.global smdSetBaseTPage +.type smdSetBaseTPage, @function +smdSetBaseTPage: + la $v0, _smd_tpage_base + jr $ra + sw $a0, 0($v0) + + +.global smdSortModel +.type smdSortModel, @function +smdSortModel: + + # a0 - Pointer SC_OT structure + # a1 - Pointer to next primitive + # a2 - Pointer to SMD data address + # v0 - New pointer of primitive buffer (return) + + addiu $sp, -16 + sw $s0, 0($sp) + sw $s1, 4($sp) + sw $s2, 8($sp) + sw $s3, 12($sp) + + la $v0, _sc_clip + lw $t8, 0($v0) + lw $t9, 4($v0) + + lw $t0, OT_LEN($a0) + lw $a0, OT_ADDR($a0) + lw $t1, SMD_HEAD_PVERTS($a2) + lw $t2, SMD_HEAD_PNORMS($a2) + lw $t3, SMD_HEAD_PPRIMS($a2) + +.sort_loop: + + nop + lw $a3, 0($t3) # Get primitive ID word + move $t4, $t3 + + beqz $a3, .exit # Check if terminator (just zero) + addiu $t4, 4 + + lhu $t5, 0( $t4 ) # Load vertices + lhu $t6, 2( $t4 ) + lhu $t7, 4( $t4 ) + sll $t5, 3 + sll $t6, 3 + sll $t7, 3 + addu $t5, $t1 + addu $t6, $t1 + addu $t7, $t1 + lwc2 C2_VXY0, 0( $t5 ) + lwc2 C2_VZ0 , 4( $t5 ) + lwc2 C2_VXY1, 0( $t6 ) + lwc2 C2_VZ1 , 4( $t6 ) + lwc2 C2_VXY2, 0( $t7 ) + lwc2 C2_VZ2 , 4( $t7 ) + + srl $v1, $a3, 24 # Get primitive size + addu $t3, $v1 # Step main pointer to next primitive + + RTPT + + cfc2 $v0, C2_FLAG # Get GTE flag value + nop + + bltz $v0, .skip_prim # Skip primitive if Z overflow + andi $v0, $a3, 0x3 + + NCLIP # Backface culling + + srl $v1, $a3, 12 + andi $v1, 1 + + bnez $v1, .no_culling + nop + + mfc2 $v1, C2_MAC0 + nop + bltz $v1, .skip_prim + nop + +.no_culling: + + beq $v0, 0x1, .prim_tri # If primitive is a triangle + nop + beq $v0, 0x2, .prim_quad # If primitive is a quad + nop + + b .skip_prim + nop + +## Triangles + +.prim_tri: # Triangle processing + + addiu $t4, 8 # Advance from indices + + AVSZ3 # Calculate average Z + + srl $v0, $t0, 16 # Get Z divisor from OT_LEN value + andi $v0, 0xff + + mfc2 $t5, C2_OTZ # Get AVSZ3 result + + sra $v1, $t0, 24 # Get Z offset from OT_LEN value + + srl $t5, $v0 # Apply divisor and offset + sub $t5, $v1 + + blez $t5, .skip_prim # Skip primitive if less than zero + andi $v1, $t0, 0xffff + bge $t5, $v1, .skip_prim # Skip primitive if greater than OT length + sll $t5, 2 + addu $t5, $a0 # Append OTZ to OT address + + ClipTestTri + + and $v0, $s0, $s1 # v0 & v1 + beqz $v0, .do_draw + and $v0, $s1, $s2 # v1 & v2 + beqz $v0, .do_draw + and $v0, $s2, $s0 # v2 & v0 + beqz $v0, .do_draw + nop + b .skip_prim + nop + +.do_draw: + + + srl $v0, $a3, 2 # Lighting enabled? + andi $v0, 0x3 + bnez $v0, .F3_light + nop + + andi $v0, $a3, 0x10 # Gouraud shaded + bnez $v0, .F3_gouraud + nop + + andi $v0, $a3, 0x20 # Textured triangle + bnez $v0, .F3_textured + nop + + lw $v0, 0( $t4 ) # Flat color, no lighting + lui $v1, 0x2000 + or $v0, $v1 + + b .sort_F3_pri + sw $v0, POLYF3_rgbc( $a1 ) + +.F3_gouraud: + + lw $v0, 0($t4) + lw $v1, 4($t4) + .set noat + lui $at, 0x3000 + or $v0, $at + .set at + sw $v0, POLYG3_rgbc0($a1) + lw $v0, 8($t4) + sw $v1, POLYG3_rgbc1($a1) + b .sort_G3_pri + sw $v0, POLYG3_rgbc2($a1) + +.F3_textured: + + lw $v0, 0( $t4 ) # Flat color, no lighting + lui $v1, 0x2400 + or $v0, $v1 + sw $v0, POLYFT3_rgbc( $a1 ) + addiu $t4, 4 + + lhu $v0, 0( $t4 ) # Load texture coordinates + lhu $v1, 2( $t4 ) + sh $v0, POLYFT3_uv0( $a1 ) + lhu $v0, 4( $t4 ) + sh $v1, POLYFT3_uv1( $a1 ) + sh $v0, POLYFT3_uv2( $a1 ) + + lw $v0, 8( $t4 ) # Tpage + CLUT + nop + andi $v1, $v0, 0xffff + sh $v1, POLYFT3_tpage( $a1 ) + srl $v0, 16 + + b .sort_FT3_pri + sh $v0, POLYFT3_clut( $a1 ) + +.F3_light: + + lhu $v0, 0( $t4 ) # Load normal 0 + + srl $v1, $a3, 2 + andi $v1, $v1, 0x3 + + sll $v0, 3 + addu $v0, $t2 + lwc2 C2_VXY0, 0( $v0 ) + lwc2 C2_VZ0 , 4( $v0 ) + + beq $v1, 0x2, .F3_light_smt + nop + + lw $v0, 4( $t4 ) + lui $v1, 0x2000 + or $v0, $v1 + mtc2 $v0, C2_RGB + + addiu $t4, 8 + nop + + NCCS + + andi $v0, $a3, 0x20 # Textured triangle + bnez $v0, .F3_light_tex + nop + + swc2 C2_RGB2, POLYF3_rgbc( $a1 ) + + b .sort_F3_pri + nop + +.F3_light_tex: + + lhu $v0, 0( $t4 ) # Load texture coordinates + lhu $v1, 2( $t4 ) + sh $v0, POLYFT3_uv0( $a1 ) + lhu $v0, 4( $t4 ) + sh $v1, POLYFT3_uv1( $a1 ) + sh $v0, POLYFT3_uv2( $a1 ) + + lw $v1, 8( $t4 ) + nop + andi $v0, $v1, 0xffff + sh $v0, POLYFT3_tpage( $a1 ) + srl $v0, $v1, 16 + sh $v0, POLYFT3_clut( $a1 ) + + mfc2 $v0, C2_RGB2 + lui $v1, 0x2400 + or $v0, $v1 + + b .sort_FT3_pri + sw $v0, POLYFT3_rgbc( $a1 ) + +.F3_light_smt: + + lhu $v0, 2( $t4 ) # Load normals 1 and 2 + lhu $v1, 4( $t4 ) + sll $v0, 3 + sll $v1, 3 + addu $v0, $t2 + addu $v1, $t2 + lwc2 C2_VXY1, 0( $v0 ) + lwc2 C2_VZ1 , 4( $v0 ) + lw $v0, 8( $t4 ) + lwc2 C2_VXY2, 0( $v1 ) + lwc2 C2_VZ2 , 4( $v1 ) + lui $v1, 0x3000 # Load color + or $v0, $v1 + mtc2 $v0, C2_RGB + + addiu $t4, 12 + nop + + NCCT + + andi $v0, $a3, 0x20 # Textured triangle + bnez $v0, .F3_light_tex_smt + nop + + swc2 C2_RGB0, POLYG3_rgbc0( $a1 ) + swc2 C2_RGB1, POLYG3_rgbc1( $a1 ) + swc2 C2_RGB2, POLYG3_rgbc2( $a1 ) + + b .sort_G3_pri + nop + +.F3_light_tex_smt: + + lhu $v0, 0( $t4 ) # Load texture coordinates + lhu $v1, 2( $t4 ) + sh $v0, POLYGT3_uv0( $a1 ) + lhu $v0, 4( $t4 ) + sh $v1, POLYGT3_uv1( $a1 ) + sh $v0, POLYGT3_uv2( $a1 ) + + lw $v1, 8( $t4 ) + nop + andi $v0, $v1, 0xffff + sh $v0, POLYGT3_tpage( $a1 ) + srl $v0, $v1, 16 + sh $v0, POLYGT3_clut( $a1 ) + + mfc2 $v0, C2_RGB0 + lui $v1, 0x3400 + or $v0, $v1 + + swc2 C2_RGB1, POLYGT3_rgbc1( $a1 ) + swc2 C2_RGB2, POLYGT3_rgbc2( $a1 ) + + b .sort_GT3_pri + sw $v0, POLYGT3_rgbc0( $a1 ) + +.sort_F3_pri: + + swc2 C2_SXY0, POLYF3_xy0($a1) + swc2 C2_SXY1, POLYF3_xy1($a1) + swc2 C2_SXY2, POLYF3_xy2($a1) + + la $v0, _smd_tpage_base + lhu $v0, 0($v0) + srl $v1, $a3, 6 # Get blend mode + andi $v1, 0x3 + sll $v1, 5 + or $v0, $v1 + lui $v1, 0xe100 + or $v0, $v1 + sw $v0, POLYF3_tpage($a1) # Store TPage + + .set noat + + lui $v1, 0x0500 + lw $v0, 0($t5) + lui $at, 0xff00 + and $v1, $at + lui $at, 0x00ff + or $at, 0xffff + and $v0, $at + or $v1, $v0 + sw $v1, 0($a1) + lw $v0, 0($t5) + and $a1, $at + lui $at, 0xff00 + and $v0, $at + or $v0, $a1 + sw $v0, 0($t5) + + .set at + + lui $v0, 0x8000 + or $a1, $v0 + + b .sort_loop + addiu $a1, POLYF3_len + +.sort_FT3_pri: + + swc2 C2_SXY0, POLYFT3_xy0( $a1 ) + swc2 C2_SXY1, POLYFT3_xy1( $a1 ) + swc2 C2_SXY2, POLYFT3_xy2( $a1 ) + + .set noat + + lui $v1, 0x0700 + lw $v0, 0($t5) + lui $at, 0xff00 + and $v1, $at + lui $at, 0x00ff + or $at, 0xffff + and $v0, $at + or $v1, $v0 + sw $v1, 0($a1) + lw $v0, 0($t5) + and $a1, $at + lui $at, 0xff00 + and $v0, $at + or $v0, $a1 + sw $v0, 0($t5) + + .set at + + lui $v0, 0x8000 + or $a1, $v0 + + b .sort_loop + addiu $a1, POLYFT3_len + +.sort_G3_pri: + + swc2 C2_SXY0, POLYG3_xy0( $a1 ) + swc2 C2_SXY1, POLYG3_xy1( $a1 ) + swc2 C2_SXY2, POLYG3_xy2( $a1 ) + + la $v0, _smd_tpage_base + lhu $v0, 0($v0) + srl $v1, $a3, 6 # Get blend mode + andi $v1, 0x3 + sll $v1, 5 + or $v0, $v1 + lui $v1, 0xe100 + or $v0, $v1 + sw $v0, POLYG3_tpage($a1) # Store TPage + + .set noat + + lui $v1, 0x0700 + lw $v0, 0($t5) + lui $at, 0xff00 + and $v1, $at + lui $at, 0x00ff + or $at, 0xffff + and $v0, $at + or $v1, $v0 + sw $v1, 0($a1) + lw $v0, 0($t5) + and $a1, $at + lui $at, 0xff00 + and $v0, $at + or $v0, $a1 + sw $v0, 0($t5) + + .set at + + lui $v0, 0x8000 + or $a1, $v0 + + b .sort_loop + addiu $a1, POLYG3_len + +.sort_GT3_pri: + + swc2 C2_SXY0, POLYGT3_xy0( $a1 ) + swc2 C2_SXY1, POLYGT3_xy1( $a1 ) + swc2 C2_SXY2, POLYGT3_xy2( $a1 ) + + .set noat + + lui $v1, 0x0900 + lw $v0, 0($t5) + lui $at, 0xff00 + and $v1, $at + lui $at, 0x00ff + or $at, 0xffff + and $v0, $at + or $v1, $v0 + sw $v1, 0($a1) + lw $v0, 0($t5) + and $a1, $at + lui $at, 0xff00 + and $v0, $at + or $v0, $a1 + sw $v0, 0($t5) + + .set at + + lui $v0, 0x8000 + or $a1, $v0 + + b .sort_loop + addiu $a1, POLYGT3_len + +## Quads + +.prim_quad: # Quad processing + + mfc2 $t6, C2_SXY0 # Retrieve first projected vertex + + lhu $t5, 6( $t4 ) # Project the last vertex + addiu $t4, 8 + sll $t5, 3 + addu $t5, $t1 + lwc2 C2_VXY0, 0( $t5 ) + lwc2 C2_VZ0 , 4( $t5 ) + + nRTPS + + cfc2 $v1, C2_FLAG # Get GTE flag value + + srl $v0, $t0, 16 # Get Z divisor from OT_LEN value + + bltz $v1, .skip_prim + nop + + AVSZ4 + + andi $v0, 0xff + + mfc2 $t5, C2_OTZ + + sra $v1, $t0, 24 # Get Z offset from OT_LEN value + + srl $t5, $v0 # Apply divisor and offset + sub $t5, $v1 + + blez $t5, .skip_prim # Skip primitive if less than zero + andi $v1, $t0, 0xffff + bge $t5, $v1, .skip_prim # Skip primitive if greater than OT length + sll $t5, 2 + addu $t5, $a0 # Append OTZ to OT address + + # no touch: + # a0, a1, a2, a3, t0, t1, t2, t3, t4, t5(ot), t6(sxy0) + + ClipTestQuad + + and $v0, $s0, $s1 # v0 & v1 + beqz $v0, .do_draw_q + and $v0, $s1, $s2 # v1 & v2 + beqz $v0, .do_draw_q + and $v0, $s2, $s3 # v2 & v3 + beqz $v0, .do_draw_q + and $v0, $s3, $s0 # v3 & v0 + beqz $v0, .do_draw_q + and $v0, $s0, $s2 # v0 & v2 + beqz $v0, .do_draw_q + and $v0, $s1, $s3 # v1 & v3 + beqz $v0, .do_draw_q + nop + b .skip_prim + nop + +.do_draw_q: + + srl $v0, $a3, 2 # Lighting enabled? + andi $v0, 0x3 + bnez $v0, .F4_light + nop + + andi $v0, $a3, 0x10 # Gouraud quad + bnez $v0, .F4_gouraud + nop + + andi $v0, $a3, 0x20 # Textured quad + bnez $v0, .F4_textured + nop + + lw $v0, 0($t4) + lui $v1, 0x2800 + or $v0, $v1 + + b .sort_F4_pri + sw $v0, POLYF4_rgbc($a1) + +.F4_gouraud: + + lw $v0, 0($t4) + lw $v1, 4($t4) + .set noat + lui $at, 0x3800 + or $v0, $at + .set at + sw $v0, POLYG4_rgbc0($a1) + lw $v0, 8($t4) + sw $v1, POLYG4_rgbc1($a1) + lw $v1, 12($t4) + sw $v0, POLYG4_rgbc2($a1) + b .sort_G4_pri + sw $v1, POLYG4_rgbc3($a1) + +.F4_textured: + + lw $v0, 0($t4) + lui $v1, 0x2c00 + or $v0, $v1 + sw $v0, POLYFT4_rgbc( $a1 ) + addiu $t4, 4 + + lhu $v0, 0($t4) # Load texture coordinates + lhu $v1, 2($t4) + sh $v0, POLYFT4_uv0( $a1 ) + lhu $v0, 4( $t4 ) + sh $v1, POLYFT4_uv1( $a1 ) + lhu $v1, 6( $t4 ) + sh $v0, POLYFT4_uv2( $a1 ) + sh $v1, POLYFT4_uv3( $a1 ) + + lw $v1, 8( $t4 ) + nop + andi $v0, $v1, 0xffff + sh $v0, POLYFT4_tpage( $a1 ) + srl $v0, $v1, 16 + + b .sort_FT4_pri + sh $v0, POLYFT4_clut($a1) + +.F4_light: + + lhu $v0, 0( $t4 ) # Load normal 0 + + srl $v1, $a3, 2 + andi $v1, $v1, 0x3 + + sll $v0, 3 + addu $v0, $t2 + lwc2 C2_VXY0, 0( $v0 ) + lwc2 C2_VZ0 , 4( $v0 ) + + beq $v1, 0x2, .F4_light_smt + nop + + lw $v0, 4( $t4 ) + lui $v1, 0x2800 + or $v0, $v1 + mtc2 $v0, C2_RGB + + addiu $t4, 8 + nop + + NCCS + + andi $v0, $a3, 0x20 # Textured triangle + bnez $v0, .F4_light_tex + nop + + swc2 C2_RGB2, POLYF4_rgbc( $a1 ) + + b .sort_F4_pri + nop + +.F4_light_tex: + + lhu $v0, 0( $t4 ) # Load texture coordinates + lhu $v1, 2( $t4 ) + sh $v0, POLYFT4_uv0( $a1 ) + lhu $v0, 4( $t4 ) + sh $v1, POLYFT4_uv1( $a1 ) + lhu $v1, 6( $t4 ) + sh $v0, POLYFT4_uv2( $a1 ) + sh $v1, POLYFT4_uv3( $a1 ) + + lw $v1, 8( $t4 ) + nop + andi $v0, $v1, 0xffff + sh $v0, POLYFT4_tpage( $a1 ) + srl $v0, $v1, 16 + sh $v0, POLYFT4_clut( $a1 ) + + mfc2 $v0, C2_RGB2 + lui $v1, 0x2c00 + or $v0, $v1 + + b .sort_FT4_pri + sw $v0, POLYFT4_rgbc( $a1 ) + +.F4_light_smt: + + lhu $v0, 2( $t4 ) # Load normals 1 and 2 + lhu $v1, 4( $t4 ) + sll $v0, 3 + sll $v1, 3 + addu $v0, $t2 + addu $v1, $t2 + lwc2 C2_VXY1, 0( $v0 ) + lwc2 C2_VZ1 , 4( $v0 ) + lwc2 C2_VXY2, 0( $v1 ) + lwc2 C2_VZ2 , 4( $v1 ) + + lw $v0, 8( $t4 ) + lui $v1, 0x3800 # Load color + or $v0, $v1 + mtc2 $v0, C2_RGB + + nNCCT + + lhu $v0, 6( $t4 ) # Load normal 3 + + addiu $t4, 12 + + sll $v0, 3 + addu $v0, $t2 + lwc2 C2_VXY0, 0( $v0 ) + lwc2 C2_VZ0 , 4( $v0 ) + + andi $v0, $a3, 0x20 # Textured triangle + bnez $v0, .F4_light_tex_smt + nop + + swc2 C2_RGB0, POLYG4_rgbc0( $a1 ) + swc2 C2_RGB1, POLYG4_rgbc1( $a1 ) + swc2 C2_RGB2, POLYG4_rgbc2( $a1 ) + + nNCCS + + swc2 C2_RGB2, POLYG4_rgbc3( $a1 ) + + b .sort_G4_pri + nop + +.F4_light_tex_smt: + + mfc2 $v0, C2_RGB0 + lui $v1, 0x3400 + or $v0, $v1 + sw $v0, POLYGT4_rgbc0( $a1 ) + swc2 C2_RGB1, POLYGT4_rgbc1( $a1 ) + swc2 C2_RGB2, POLYGT4_rgbc2( $a1 ) + + NCCS + + lhu $v0, 0( $t4 ) # Load texture coordinates + lhu $v1, 2( $t4 ) + sh $v0, POLYGT4_uv0( $a1 ) + lhu $v0, 4( $t4 ) + sh $v1, POLYGT4_uv1( $a1 ) + lhu $v1, 6( $t4 ) + sh $v0, POLYGT4_uv2( $a1 ) + sh $v1, POLYGT4_uv3( $a1 ) + + lw $v1, 8( $t4 ) + swc2 C2_RGB2, POLYGT4_rgbc3( $a1 ) + + andi $v0, $v1, 0xffff + sh $v0, POLYGT4_tpage( $a1 ) + srl $v0, $v1, 16 + + b .sort_GT4_pri + sh $v0, POLYGT4_clut( $a1 ) + +.sort_F4_pri: + + sw $t6, POLYF4_xy0($a1) + swc2 C2_SXY0, POLYF4_xy1($a1) + swc2 C2_SXY1, POLYF4_xy2($a1) + swc2 C2_SXY2, POLYF4_xy3($a1) + + la $v0, _smd_tpage_base + lhu $v0, 0($v0) + srl $v1, $a3, 6 # Get blend mode + andi $v1, 0x3 + sll $v1, 5 + or $v0, $v1 + lui $v1, 0xe100 + or $v0, $v1 + sw $v0, POLYF4_tpage($a1) # Store TPage + + .set noat + + lui $v1, 0x0600 + lw $v0, 0($t5) + lui $at, 0xff00 + and $v1, $at + lui $at, 0x00ff + or $at, 0xffff + and $v0, $at + or $v1, $v0 + sw $v1, 0($a1) + lw $v0, 0($t5) + and $a1, $at + lui $at, 0xff00 + and $v0, $at + or $v0, $a1 + sw $v0, 0($t5) + + .set at + + lui $v0, 0x8000 + or $a1, $v0 + + b .sort_loop + addiu $a1, POLYF4_len + +.sort_FT4_pri: + + sw $t6, POLYFT4_xy0($a1) + swc2 C2_SXY0, POLYFT4_xy1($a1) + swc2 C2_SXY1, POLYFT4_xy2($a1) + swc2 C2_SXY2, POLYFT4_xy3($a1) + + .set noat + + lui $v1, 0x0900 + lw $v0, 0($t5) + lui $at, 0xff00 + and $v1, $at + lui $at, 0x00ff + or $at, 0xffff + and $v0, $at + or $v1, $v0 + sw $v1, 0($a1) + lw $v0, 0($t5) + and $a1, $at + lui $at, 0xff00 + and $v0, $at + or $v0, $a1 + sw $v0, 0($t5) + + .set at + + lui $v0, 0x8000 + or $a1, $v0 + + b .sort_loop + addiu $a1, POLYFT4_len + +.sort_G4_pri: + + sw $t6, POLYG4_xy0($a1) + swc2 C2_SXY0, POLYG4_xy1($a1) + swc2 C2_SXY1, POLYG4_xy2($a1) + swc2 C2_SXY2, POLYG4_xy3($a1) + + la $v0, _smd_tpage_base + lhu $v0, 0($v0) + srl $v1, $a3, 6 # Get blend mode + andi $v1, 0x3 + sll $v1, 5 + or $v0, $v1 + lui $v1, 0xe100 + or $v0, $v1 + sw $v0, POLYG4_tpage($a1) # Store TPage + + .set noat + + lui $v1, 0x0900 + lw $v0, 0($t5) + lui $at, 0xff00 + and $v1, $at + lui $at, 0x00ff + or $at, 0xffff + and $v0, $at + or $v1, $v0 + sw $v1, 0($a1) + lw $v0, 0($t5) + and $a1, $at + lui $at, 0xff00 + and $v0, $at + or $v0, $a1 + sw $v0, 0($t5) + + .set at + + lui $v0, 0x8000 + or $a1, $v0 + + b .sort_loop + addiu $a1, POLYG4_len + +.sort_GT4_pri: + + sw $t6, POLYGT4_xy0($a1) + swc2 C2_SXY0, POLYGT4_xy1($a1) + swc2 C2_SXY1, POLYGT4_xy2($a1) + swc2 C2_SXY2, POLYGT4_xy3($a1) + + .set noat + + lui $v1, 0x0c00 + lw $v0, 0($t5) + lui $at, 0xff00 + and $v1, $at + lui $at, 0x00ff + or $at, 0xffff + and $v0, $at + or $v1, $v0 + sw $v1, 0($a1) + lw $v0, 0($t5) + and $a1, $at + lui $at, 0xff00 + and $v0, $at + or $v0, $a1 + sw $v0, 0($t5) + + .set at + + lui $v0, 0x8000 + or $a1, $v0 + + b .sort_loop + addiu $a1, POLYGT4_len + +.skip_prim: + + b .sort_loop + nop + +.exit: + + lw $s0, 0( $sp ) + lw $s1, 4( $sp ) + lw $s2, 8( $sp ) + lw $s3, 12( $sp ) + addiu $sp, 16 + jr $ra + move $v0, $a1 + + +.comm _smd_tpage_base, 4, 4 + +.comm _sc_clip, 8, 4 diff --git a/examples/n00bdemo/smd_cel.s b/examples/n00bdemo/smd_cel.s new file mode 100644 index 0000000..ece0dd8 --- /dev/null +++ b/examples/n00bdemo/smd_cel.s @@ -0,0 +1,1073 @@ +.set noreorder + +.include "gtereg.h" +.include "inline_s.h" +.include "smd_s.h" + + +.section .text + +.global smdSetCelTex +.type smdSetCelTex, @function +smdSetCelTex: + # a0 - TPage value + # a1 - CLUT value + la $v0, _smd_cel_tpage + andi $a0, 0xffff + sll $a1, 16 + or $a0, $a1 + jr $ra + sw $a0, 0($v0) + + + +.global smdSetCelParam +.type smdSetCelParam, @function +smdSetCelParam: + # a0 - Shading texture U offset + # a1 - Shading texture V offset + # a2 - Shading primitive color + andi $a1, 0xff + sll $a1, 8 + andi $a0, 0xff + or $a0, $a1 + la $v0, _smd_cel_param + sw $a0, 0($v0) + la $v0, _smd_cel_col + lui $v1, 0x0200 + or $a3, $v1 + jr $ra + sw $a2, 0($v0) + + +.global smdSortModelCel +.type smdSortModelCel, @function +smdSortModelCel: + + # a0 - Pointer SC_OT structure + # a1 - Pointer to next primitive + # a2 - Pointer to SMD data address + # v0 - New pointer of primitive buffer (return) + + addiu $sp, -16 + sw $s0, 0($sp) + sw $s1, 4($sp) + sw $s2, 8($sp) + sw $s3, 12($sp) + + la $v0, _sc_clip + lw $t8, 0($v0) + lw $t9, 4($v0) + + lw $t0, OT_LEN($a0) + lw $a0, OT_ADDR($a0) + lw $t1, SMD_HEAD_PVERTS($a2) + lw $t2, SMD_HEAD_PNORMS($a2) + lw $t3, SMD_HEAD_PPRIMS($a2) + +.sort_loop: + + nop + lw $a3, 0($t3) # Get primitive ID word + move $t4, $t3 + + beqz $a3, .exit # Check if terminator (just zero) + addiu $t4, 4 + + lhu $t5, 0( $t4 ) # Load vertices + lhu $t6, 2( $t4 ) + lhu $t7, 4( $t4 ) + sll $t5, 3 + sll $t6, 3 + sll $t7, 3 + addu $t5, $t1 + addu $t6, $t1 + addu $t7, $t1 + lwc2 C2_VXY0, 0( $t5 ) + lwc2 C2_VZ0 , 4( $t5 ) + lwc2 C2_VXY1, 0( $t6 ) + lwc2 C2_VZ1 , 4( $t6 ) + lwc2 C2_VXY2, 0( $t7 ) + lwc2 C2_VZ2 , 4( $t7 ) + + srl $v1, $a3, 24 # Get primitive size + addu $t3, $v1 # Step main pointer to next primitive + + RTPT + + cfc2 $v0, C2_FLAG # Get GTE flag value + nop + + bltz $v0, .skip_prim # Skip primitive if Z overflow + andi $v0, $a3, 0x3 + + NCLIP # Backface culling + + srl $v1, $a3, 12 + andi $v1, 1 + + bnez $v1, .no_culling + nop + + mfc2 $v1, C2_MAC0 + nop + bltz $v1, .skip_prim + nop + +.no_culling: + + beq $v0, 0x1, .prim_tri # If primitive is a triangle + nop + beq $v0, 0x2, .prim_quad # If primitive is a quad + nop + + b .skip_prim + nop + +## Triangles + +.prim_tri: # Triangle processing + + addiu $t4, 8 # Advance from indices + + AVSZ3 # Calculate average Z + + srl $v0, $t0, 16 # Get Z divisor from OT_LEN value + andi $v0, 0xff + + mfc2 $t5, C2_OTZ # Get AVSZ3 result + + sra $v1, $t0, 24 # Get Z offset from OT_LEN value + + srl $t5, $v0 # Apply divisor and offset + sub $t5, $v1 + + blez $t5, .skip_prim # Skip primitive if less than zero + andi $v1, $t0, 0xffff + bge $t5, $v1, .skip_prim # Skip primitive if greater than OT length + sll $t5, 2 + addu $t5, $a0 # Append OTZ to OT address + + ClipTestTri + + and $v0, $s0, $s1 # v0 & v1 + beqz $v0, .do_draw + and $v0, $s1, $s2 # v1 & v2 + beqz $v0, .do_draw + and $v0, $s2, $s0 # v2 & v0 + beqz $v0, .do_draw + nop + b .skip_prim + nop + +.do_draw: + + + srl $v0, $a3, 2 # Lighting enabled? + andi $v0, 0x3 + bnez $v0, .F3_light + nop + + andi $v0, $a3, 0x10 # Gouraud shaded + bnez $v0, .F3_gouraud + nop + + andi $v0, $a3, 0x20 # Textured triangle + bnez $v0, .F3_textured + nop + + lw $v0, 0( $t4 ) # Flat color, no lighting + lui $v1, 0x2000 + or $v0, $v1 + + b .sort_F3_pri + sw $v0, POLYF3_rgbc( $a1 ) + +.F3_gouraud: + + lw $v0, 0($t4) + lw $v1, 4($t4) + .set noat + lui $at, 0x3000 + or $v0, $at + .set at + sw $v0, POLYG3_rgbc0($a1) + lw $v0, 8($t4) + sw $v1, POLYG3_rgbc1($a1) + b .sort_G3_pri + sw $v0, POLYG3_rgbc2($a1) + +.F3_textured: + + lw $v0, 0( $t4 ) # Flat color, no lighting + lui $v1, 0x2400 + or $v0, $v1 + sw $v0, POLYFT3_rgbc( $a1 ) + addiu $t4, 4 + + lhu $v0, 0( $t4 ) # Load texture coordinates + lhu $v1, 2( $t4 ) + sh $v0, POLYFT3_uv0( $a1 ) + lhu $v0, 4( $t4 ) + sh $v1, POLYFT3_uv1( $a1 ) + sh $v0, POLYFT3_uv2( $a1 ) + + lw $v0, 8( $t4 ) # Tpage + CLUT + nop + andi $v1, $v0, 0xffff + sh $v1, POLYFT3_tpage( $a1 ) + srl $v0, 16 + + b .sort_FT3_pri + sh $v0, POLYFT3_clut( $a1 ) + +.F3_light: + + lhu $v0, 0( $t4 ) # Load normal 0 + + srl $v1, $a3, 2 + andi $v1, $v1, 0x3 + + sll $v0, 3 + addu $v0, $t2 + lwc2 C2_VXY0, 0( $v0 ) + lwc2 C2_VZ0 , 4( $v0 ) + + beq $v1, 0x2, .F3_light_smt + nop + + lw $v0, 4( $t4 ) + lui $v1, 0x2000 + or $v0, $v1 + mtc2 $v0, C2_RGB + + addiu $t4, 8 + nop + + NCCS + + andi $v0, $a3, 0x20 # Textured triangle + bnez $v0, .F3_light_tex + nop + + swc2 C2_RGB2, POLYF3_rgbc( $a1 ) + + b .sort_F3_pri + nop + +.F3_light_tex: + + lhu $v0, 0( $t4 ) # Load texture coordinates + lhu $v1, 2( $t4 ) + sh $v0, POLYFT3_uv0( $a1 ) + lhu $v0, 4( $t4 ) + sh $v1, POLYFT3_uv1( $a1 ) + sh $v0, POLYFT3_uv2( $a1 ) + + lw $v1, 8( $t4 ) + nop + andi $v0, $v1, 0xffff + sh $v0, POLYFT3_tpage( $a1 ) + srl $v0, $v1, 16 + sh $v0, POLYFT3_clut( $a1 ) + + mfc2 $v0, C2_RGB2 + lui $v1, 0x2400 + or $v0, $v1 + + b .sort_FT3_pri + sw $v0, POLYFT3_rgbc( $a1 ) + +.F3_light_smt: + + lhu $v0, 2($t4) # Load normals 1 and 2 + lhu $v1, 4($t4) + sll $v0, 3 + sll $v1, 3 + addu $v0, $t2 + addu $v1, $t2 + lwc2 C2_VXY1, 0($v0) + lwc2 C2_VZ1 , 4($v0) + #la $v0, _smd_cel_col + #lw $v0, 0($v0) + lwc2 C2_VXY2, 0($v1) + lwc2 C2_VZ2 , 4($v1) + mtc2 $v0, C2_RGB + + swc2 C2_SXY0, POLYFT3_xy0($a1) + swc2 C2_SXY1, POLYFT3_xy1($a1) + swc2 C2_SXY2, POLYFT3_xy2($a1) + + la $v0, _smd_cel_tpage # Load cel shader TPage and CLUT values + lw $v0, 0($v0) + + NCT + + andi $v1, $v0, 0xffff + sh $v1, POLYFT3_tpage($a1) + srl $v1, $v0, 16 + sh $v1, POLYFT3_clut($a1) + + # Usable regs: v0, v1, at, t6, t7 + + .set noat + + la $at, _smd_cel_param # Load cel shader parameters + lhu $at, 0($at) + + mfc2 $t7, C2_RGB0 # Get first shaded color + andi $v1, $at, 0xff # Get U divisor value + andi $t7, 0xffff # Only keep R and G colors + + andi $v0, $t7, 0xff # U0 + srl $v0, $v1 + sb $v0, POLYFT3_uv0($a1) + srl $v0, $t7, 8 # V0 + srl $v1, $at, 8 + srl $v0, $v1 + sb $v0, POLYFT3_uv0+1($a1) + + mfc2 $t7, C2_RGB1 + andi $v1, $at, 0xff + andi $t7, 0xffff + andi $v0, $t7, 0xff # U1 + srl $v0, $v1 + sb $v0, POLYFT3_uv1($a1) + srl $v0, $t7, 8 # V1 + srl $v1, $at, 8 + srl $v0, $v1 + sb $v0, POLYFT3_uv1+1($a1) + + mfc2 $t7, C2_RGB2 + andi $v1, $at, 0xff + andi $t7, 0xffff + andi $v0, $t7, 0xff # U2 + srl $v0, $v1 + sb $v0, POLYFT3_uv2($a1) + srl $v0, $t7, 8 # V2 + srl $v1, $at, 8 + srl $v0, $v1 + sb $v0, POLYFT3_uv2+1($a1) + + la $v0, _smd_cel_col + lw $v0, 0($v0) + lui $v1, 0x2600 + or $v0, $v1 + sw $v0, POLYFT3_rgbc($a1) + + lw $t7, 8($t4) + addiu $t4, 12 + + lui $v1, 0x0700 + lw $v0, 0($t5) + lui $at, 0xff00 + and $v1, $at + lui $at, 0x00ff + or $at, 0xffff + and $v0, $at + or $v1, $v0 + sw $v1, 0($a1) + lw $v0, 0($t5) + and $v1, $a1, $at + lui $at, 0xff00 + and $v0, $at + or $v0, $v1 + sw $v0, 0($t5) + + lui $v0, 0x8000 + or $a1, $v0 + addiu $a1, POLYFT3_len + + .set at + + andi $v0, $a3, 0x20 # Textured triangle + bnez $v0, .F3_light_tex_smt + nop + + #swc2 C2_RGB0, POLYG3_rgbc0( $a1 ) + #swc2 C2_RGB1, POLYG3_rgbc1( $a1 ) + #swc2 C2_RGB2, POLYG3_rgbc2( $a1 ) + + lui $v0, 0x2000 + or $t7, $v0 + b .sort_F3_pri + sw $t7, POLYF3_rgbc($a1) + +.F3_light_tex_smt: + + lhu $v0, 0( $t4 ) # Load texture coordinates + lhu $v1, 2( $t4 ) + sh $v0, POLYFT3_uv0( $a1 ) + lhu $v0, 4( $t4 ) + sh $v1, POLYFT3_uv1( $a1 ) + sh $v0, POLYFT3_uv2( $a1 ) + + lw $v1, 8( $t4 ) + nop + andi $v0, $v1, 0xffff + sh $v0, POLYFT3_tpage( $a1 ) + srl $v0, $v1, 16 + sh $v0, POLYFT3_clut( $a1 ) + + lui $v1, 0x2400 + or $t7, $v1 + + b .sort_FT3_pri + sw $t7, POLYFT3_rgbc( $a1 ) + +.sort_F3_pri: + + swc2 C2_SXY0, POLYF3_xy0($a1) + swc2 C2_SXY1, POLYF3_xy1($a1) + swc2 C2_SXY2, POLYF3_xy2($a1) + + la $v0, _smd_tpage_base + lhu $v0, 0($v0) + srl $v1, $a3, 6 # Get blend mode + andi $v1, 0x3 + sll $v1, 5 + or $v0, $v1 + lui $v1, 0xe100 + or $v0, $v1 + sw $v0, POLYF3_tpage($a1) # Store TPage + + .set noat + + lui $v1, 0x0500 + lw $v0, 0($t5) + lui $at, 0xff00 + and $v1, $at + lui $at, 0x00ff + or $at, 0xffff + and $v0, $at + or $v1, $v0 + sw $v1, 0($a1) + lw $v0, 0($t5) + and $a1, $at + lui $at, 0xff00 + and $v0, $at + or $v0, $a1 + sw $v0, 0($t5) + + .set at + + lui $v0, 0x8000 + or $a1, $v0 + + b .sort_loop + addiu $a1, POLYF3_len + +.sort_FT3_pri: + + swc2 C2_SXY0, POLYFT3_xy0( $a1 ) + swc2 C2_SXY1, POLYFT3_xy1( $a1 ) + swc2 C2_SXY2, POLYFT3_xy2( $a1 ) + + .set noat + + lui $v1, 0x0700 + lw $v0, 0($t5) + lui $at, 0xff00 + and $v1, $at + lui $at, 0x00ff + or $at, 0xffff + and $v0, $at + or $v1, $v0 + sw $v1, 0($a1) + lw $v0, 0($t5) + and $a1, $at + lui $at, 0xff00 + and $v0, $at + or $v0, $a1 + sw $v0, 0($t5) + + .set at + + lui $v0, 0x8000 + or $a1, $v0 + + b .sort_loop + addiu $a1, POLYFT3_len + +.sort_G3_pri: + + swc2 C2_SXY0, POLYG3_xy0( $a1 ) + swc2 C2_SXY1, POLYG3_xy1( $a1 ) + swc2 C2_SXY2, POLYG3_xy2( $a1 ) + + la $v0, _smd_tpage_base + lhu $v0, 0($v0) + srl $v1, $a3, 6 # Get blend mode + andi $v1, 0x3 + sll $v1, 5 + or $v0, $v1 + lui $v1, 0xe100 + or $v0, $v1 + sw $v0, POLYG3_tpage($a1) # Store TPage + + .set noat + + lui $v1, 0x0700 + lw $v0, 0($t5) + lui $at, 0xff00 + and $v1, $at + lui $at, 0x00ff + or $at, 0xffff + and $v0, $at + or $v1, $v0 + sw $v1, 0($a1) + lw $v0, 0($t5) + and $a1, $at + lui $at, 0xff00 + and $v0, $at + or $v0, $a1 + sw $v0, 0($t5) + + .set at + + lui $v0, 0x8000 + or $a1, $v0 + + b .sort_loop + addiu $a1, POLYG3_len + +.sort_GT3_pri: + + swc2 C2_SXY0, POLYGT3_xy0( $a1 ) + swc2 C2_SXY1, POLYGT3_xy1( $a1 ) + swc2 C2_SXY2, POLYGT3_xy2( $a1 ) + + .set noat + + lui $v1, 0x0900 + lw $v0, 0($t5) + lui $at, 0xff00 + and $v1, $at + lui $at, 0x00ff + or $at, 0xffff + and $v0, $at + or $v1, $v0 + sw $v1, 0($a1) + lw $v0, 0($t5) + and $a1, $at + lui $at, 0xff00 + and $v0, $at + or $v0, $a1 + sw $v0, 0($t5) + + .set at + + lui $v0, 0x8000 + or $a1, $v0 + + b .sort_loop + addiu $a1, POLYGT3_len + +## Quads + +.prim_quad: # Quad processing + + mfc2 $t6, C2_SXY0 # Retrieve first projected vertex + + lhu $t5, 6( $t4 ) # Project the last vertex + addiu $t4, 8 + sll $t5, 3 + addu $t5, $t1 + lwc2 C2_VXY0, 0( $t5 ) + lwc2 C2_VZ0 , 4( $t5 ) + + nRTPS + + cfc2 $v1, C2_FLAG # Get GTE flag value + + srl $v0, $t0, 16 # Get Z divisor from OT_LEN value + + bltz $v1, .skip_prim + nop + + AVSZ4 + + andi $v0, 0xff + + mfc2 $t5, C2_OTZ + + sra $v1, $t0, 24 # Get Z offset from OT_LEN value + + srl $t5, $v0 # Apply divisor and offset + sub $t5, $v1 + + blez $t5, .skip_prim # Skip primitive if less than zero + andi $v1, $t0, 0xffff + bge $t5, $v1, .skip_prim # Skip primitive if greater than OT length + sll $t5, 2 + addu $t5, $a0 # Append OTZ to OT address + + # no touch: + # a0, a1, a2, a3, t0, t1, t2, t3, t4, t5(ot), t6(sxy0) + + ClipTestQuad + + and $v0, $s0, $s1 # v0 & v1 + beqz $v0, .do_draw_q + and $v0, $s1, $s2 # v1 & v2 + beqz $v0, .do_draw_q + and $v0, $s2, $s3 # v2 & v3 + beqz $v0, .do_draw_q + and $v0, $s3, $s0 # v3 & v0 + beqz $v0, .do_draw_q + and $v0, $s0, $s2 # v0 & v2 + beqz $v0, .do_draw_q + and $v0, $s1, $s3 # v1 & v3 + beqz $v0, .do_draw_q + nop + b .skip_prim + nop + +.do_draw_q: + + srl $v0, $a3, 2 # Lighting enabled? + andi $v0, 0x3 + bnez $v0, .F4_light + nop + + andi $v0, $a3, 0x10 # Gouraud quad + bnez $v0, .F4_gouraud + nop + + andi $v0, $a3, 0x20 # Textured quad + bnez $v0, .F4_textured + nop + + lw $v0, 0($t4) + lui $v1, 0x2800 + or $v0, $v1 + + b .sort_F4_pri + sw $v0, POLYF4_rgbc($a1) + +.F4_gouraud: + + lw $v0, 0($t4) + lw $v1, 4($t4) + .set noat + lui $at, 0x3800 + or $v0, $at + .set at + sw $v0, POLYG4_rgbc0($a1) + lw $v0, 8($t4) + sw $v1, POLYG4_rgbc1($a1) + lw $v1, 12($t4) + sw $v0, POLYG4_rgbc2($a1) + b .sort_G4_pri + sw $v1, POLYG4_rgbc3($a1) + +.F4_textured: + + lw $v0, 0($t4) + lui $v1, 0x2c00 + or $v0, $v1 + sw $v0, POLYFT4_rgbc( $a1 ) + addiu $t4, 4 + + lhu $v0, 0($t4) # Load texture coordinates + lhu $v1, 2($t4) + sh $v0, POLYFT4_uv0( $a1 ) + lhu $v0, 4( $t4 ) + sh $v1, POLYFT4_uv1( $a1 ) + lhu $v1, 6( $t4 ) + sh $v0, POLYFT4_uv2( $a1 ) + sh $v1, POLYFT4_uv3( $a1 ) + + lw $v1, 8( $t4 ) + nop + andi $v0, $v1, 0xffff + sh $v0, POLYFT4_tpage( $a1 ) + srl $v0, $v1, 16 + + b .sort_FT4_pri + sh $v0, POLYFT4_clut($a1) + +.F4_light: + + lhu $v0, 0( $t4 ) # Load normal 0 + + srl $v1, $a3, 2 + andi $v1, $v1, 0x3 + + sll $v0, 3 + addu $v0, $t2 + lwc2 C2_VXY0, 0( $v0 ) + lwc2 C2_VZ0 , 4( $v0 ) + + beq $v1, 0x2, .F4_light_smt + nop + + lw $v0, 4( $t4 ) + lui $v1, 0x2800 + or $v0, $v1 + mtc2 $v0, C2_RGB + + addiu $t4, 8 + nop + + NCS + + andi $v0, $a3, 0x20 # Textured triangle + bnez $v0, .F4_light_tex + nop + + swc2 C2_RGB2, POLYF4_rgbc( $a1 ) + + b .sort_F4_pri + nop + +.F4_light_tex: + + lhu $v0, 0( $t4 ) # Load texture coordinates + lhu $v1, 2( $t4 ) + sh $v0, POLYFT4_uv0( $a1 ) + lhu $v0, 4( $t4 ) + sh $v1, POLYFT4_uv1( $a1 ) + lhu $v1, 6( $t4 ) + sh $v0, POLYFT4_uv2( $a1 ) + sh $v1, POLYFT4_uv3( $a1 ) + + lw $v1, 8( $t4 ) + nop + andi $v0, $v1, 0xffff + sh $v0, POLYFT4_tpage( $a1 ) + srl $v0, $v1, 16 + sh $v0, POLYFT4_clut( $a1 ) + + mfc2 $v0, C2_RGB2 + lui $v1, 0x2c00 + or $v0, $v1 + + b .sort_FT4_pri + nop + sw $v0, POLYFT4_rgbc( $a1 ) + +.F4_light_smt: + + lhu $v0, 2( $t4 ) # Load normals 1 and 2 + lhu $v1, 4( $t4 ) + sll $v0, 3 + sll $v1, 3 + addu $v0, $t2 + addu $v1, $t2 + lwc2 C2_VXY1, 0( $v0 ) + lwc2 C2_VZ1 , 4( $v0 ) + lwc2 C2_VXY2, 0( $v1 ) + lwc2 C2_VZ2 , 4( $v1 ) + + sw $t6, POLYFT4_xy0($a1) + swc2 C2_SXY0, POLYFT4_xy1($a1) + swc2 C2_SXY1, POLYFT4_xy2($a1) + swc2 C2_SXY2, POLYFT4_xy3($a1) + + la $v0, _smd_cel_tpage # Load cel shader TPage and CLUT values + lw $v0, 0($v0) + + NCT + + andi $v1, $v0, 0xffff + sh $v1, POLYFT4_tpage($a1) + srl $v1, $v0, 16 + sh $v1, POLYFT4_clut($a1) + + # Usable regs: v0, v1, at, t7 + + .set noat + + la $at, _smd_cel_param # Load cel shader parameters + lhu $at, 0($at) + + mfc2 $t7, C2_RGB0 + andi $v1, $at, 0xff # Get U divisor value + andi $t7, 0xffff # Only keep R and G colors + + andi $v0, $t7, 0xff # U0 + srl $v0, $v1 + sb $v0, POLYFT4_uv0($a1) + srl $v0, $t7, 8 # V0 + srl $v1, $at, 8 + srl $v0, $v1 + sb $v0, POLYFT4_uv0+1($a1) + + mfc2 $t7, C2_RGB1 + andi $v1, $at, 0xff + andi $t7, 0xffff + andi $v0, $t7, 0xff # U1 + srl $v0, $v1 + sb $v0, POLYFT4_uv1($a1) + srl $v0, $t7, 8 # V1 + srl $v1, $at, 8 + srl $v0, $v1 + sb $v0, POLYFT4_uv1+1($a1) + + mfc2 $t7, C2_RGB2 + andi $v1, $at, 0xff + andi $t7, 0xffff + andi $v0, $t7, 0xff # U2 + srl $v0, $v1 + sb $v0, POLYFT4_uv2($a1) + srl $v0, $t7, 8 # V2 + srl $v1, $at, 8 + srl $v0, $v1 + sb $v0, POLYFT4_uv2+1($a1) + + la $v0, _smd_cel_col + lw $v0, 0($v0) + lui $v1, 0x2E00 + or $v0, $v1 + sw $v0, POLYFT4_rgbc($a1) + + lw $t7, 8($t4) + + lhu $v0, 6($t4) # Load normal 3 + addiu $t4, 12 + sll $v0, 3 + addu $v0, $t2 + lwc2 C2_VXY0, 0( $v0 ) + lwc2 C2_VZ0 , 4( $v0 ) + + nNCS + + mfc2 $s0, C2_RGB2 + andi $v1, $at, 0xff + andi $s0, 0xffff + andi $v0, $s0, 0xff # U3 + srl $v0, $v1 + sb $v0, POLYFT4_uv3($a1) + srl $v0, $s0, 8 # V3 + srl $v1, $at, 8 + srl $v0, $v1 + sb $v0, POLYFT4_uv3+1($a1) + + lui $v1, 0x0900 + lw $v0, 0($t5) + lui $at, 0xff00 + and $v1, $at + lui $at, 0x00ff + or $at, 0xffff + and $v0, $at + or $v1, $v0 + sw $v1, 0($a1) + lw $v0, 0($t5) + and $v1, $a1, $at + lui $at, 0xff00 + and $v0, $at + or $v0, $v1 + sw $v0, 0($t5) + + lui $v0, 0x8000 + or $a1, $v0 + addiu $a1, POLYFT4_len + + .set at + + andi $v0, $a3, 0x20 # Textured quad + bnez $v0, .F4_light_tex_smt + nop + + lui $v0, 0x2800 + or $t7, $v0 + b .sort_F4_pri + sw $t7, POLYF4_rgbc($a1) + +.F4_light_tex_smt: + + lhu $v0, 0($t4) # Load texture coordinates + lhu $v1, 2($t4) + sh $v0, POLYFT4_uv0($a1) + lhu $v0, 4($t4) + sh $v1, POLYFT4_uv1($a1) + lhu $v1, 6($t4) + sh $v0, POLYFT4_uv2($a1) + sh $v1, POLYFT4_uv3($a1) + + lw $v1, 8($t4) + + lui $v0, 0x2E00 + or $t7, $v0 + sw $t7, POLYFT4_rgbc($a1) + + andi $v0, $v1, 0xffff + sh $v0, POLYFT4_tpage($a1) + srl $v0, $v1, 16 + + b .sort_FT4_pri + sh $v0, POLYFT4_clut($a1) + +.sort_F4_pri: + + sw $t6, POLYF4_xy0($a1) + swc2 C2_SXY0, POLYF4_xy1($a1) + swc2 C2_SXY1, POLYF4_xy2($a1) + swc2 C2_SXY2, POLYF4_xy3($a1) + + la $v0, _smd_tpage_base + lhu $v0, 0($v0) + srl $v1, $a3, 6 # Get blend mode + andi $v1, 0x3 + sll $v1, 5 + or $v0, $v1 + lui $v1, 0xe100 + or $v0, $v1 + sw $v0, POLYF4_tpage($a1) # Store TPage + + .set noat + + lui $v1, 0x0600 + lw $v0, 0($t5) + lui $at, 0xff00 + and $v1, $at + lui $at, 0x00ff + or $at, 0xffff + and $v0, $at + or $v1, $v0 + sw $v1, 0($a1) + lw $v0, 0($t5) + and $a1, $at + lui $at, 0xff00 + and $v0, $at + or $v0, $a1 + sw $v0, 0($t5) + + .set at + + lui $v0, 0x8000 + or $a1, $v0 + + b .sort_loop + addiu $a1, POLYF4_len + +.sort_FT4_pri: + + sw $t6, POLYFT4_xy0($a1) + swc2 C2_SXY0, POLYFT4_xy1($a1) + swc2 C2_SXY1, POLYFT4_xy2($a1) + swc2 C2_SXY2, POLYFT4_xy3($a1) + + .set noat + + lui $v1, 0x0900 + lw $v0, 0($t5) + lui $at, 0xff00 + and $v1, $at + lui $at, 0x00ff + or $at, 0xffff + and $v0, $at + or $v1, $v0 + sw $v1, 0($a1) + lw $v0, 0($t5) + and $a1, $at + lui $at, 0xff00 + and $v0, $at + or $v0, $a1 + sw $v0, 0($t5) + + .set at + + lui $v0, 0x8000 + or $a1, $v0 + + b .sort_loop + addiu $a1, POLYFT4_len + +.sort_G4_pri: + + sw $t6, POLYG4_xy0($a1) + swc2 C2_SXY0, POLYG4_xy1($a1) + swc2 C2_SXY1, POLYG4_xy2($a1) + swc2 C2_SXY2, POLYG4_xy3($a1) + + la $v0, _smd_tpage_base + lhu $v0, 0($v0) + srl $v1, $a3, 6 # Get blend mode + andi $v1, 0x3 + sll $v1, 5 + or $v0, $v1 + lui $v1, 0xe100 + or $v0, $v1 + sw $v0, POLYG4_tpage($a1) # Store TPage + + .set noat + + lui $v1, 0x0900 + lw $v0, 0($t5) + lui $at, 0xff00 + and $v1, $at + lui $at, 0x00ff + or $at, 0xffff + and $v0, $at + or $v1, $v0 + sw $v1, 0($a1) + lw $v0, 0($t5) + and $a1, $at + lui $at, 0xff00 + and $v0, $at + or $v0, $a1 + sw $v0, 0($t5) + + .set at + + lui $v0, 0x8000 + or $a1, $v0 + + b .sort_loop + addiu $a1, POLYG4_len + +.sort_GT4_pri: + + sw $t6, POLYGT4_xy0($a1) + swc2 C2_SXY0, POLYGT4_xy1($a1) + swc2 C2_SXY1, POLYGT4_xy2($a1) + swc2 C2_SXY2, POLYGT4_xy3($a1) + + .set noat + + lui $v1, 0x0c00 + lw $v0, 0($t5) + lui $at, 0xff00 + and $v1, $at + lui $at, 0x00ff + or $at, 0xffff + and $v0, $at + or $v1, $v0 + sw $v1, 0($a1) + lw $v0, 0($t5) + and $a1, $at + lui $at, 0xff00 + and $v0, $at + or $v0, $a1 + sw $v0, 0($t5) + + .set at + + lui $v0, 0x8000 + or $a1, $v0 + + b .sort_loop + addiu $a1, POLYGT4_len + +.skip_prim: + + b .sort_loop + nop + +.exit: + + lw $s0, 0( $sp ) + lw $s1, 4( $sp ) + lw $s2, 8( $sp ) + lw $s3, 12( $sp ) + addiu $sp, 16 + jr $ra + move $v0, $a1 + + +.comm _smd_cel_col, 4, 4 # STP shading polygon color +.comm _smd_cel_param, 4, 4 # U divisor, V divisor, shading clip +.comm _smd_cel_tpage, 4, 4 # CEL shader texture page & CLUT + diff --git a/examples/n00bdemo/smd_flat.s b/examples/n00bdemo/smd_flat.s new file mode 100644 index 0000000..0d48c63 --- /dev/null +++ b/examples/n00bdemo/smd_flat.s @@ -0,0 +1,832 @@ +.set noreorder + +.include "gtereg.h" +.include "inline_s.h" +.include "smd_s.h" + + +.section .text + +.global smdSortModelFlat +.type smdSortModelFlat, @function +smdSortModelFlat: + # a0 - Pointer SC_OT structure + # a1 - Pointer to next primitive + # a2 - Pointer to SMD data address + # v0 - New pointer of primitive buffer (return) + + addiu $sp, -16 + sw $s0, 0( $sp ) + sw $s1, 4( $sp ) + sw $s2, 8( $sp ) + sw $s3, 12( $sp ) + + la $v0, _sc_clip + lw $t8, 0($v0) + lw $t9, 4($v0) + + lw $t1, SMD_HEAD_PVERTS( $a2 ) + lw $t2, SMD_HEAD_PNORMS( $a2 ) + lw $t3, SMD_HEAD_PPRIMS( $a2 ) + +.sort_loop: + + nop + lw $a3, 0($t3) # Get primitive ID word + move $t4, $t3 + + beqz $a3, .exit # Check if terminator (just zero) + addiu $t4, 4 + + lhu $t5, 0( $t4 ) # Load vertices + lhu $t6, 2( $t4 ) + lhu $t7, 4( $t4 ) + sll $t5, 3 + sll $t6, 3 + sll $t7, 3 + addu $t5, $t1 + addu $t6, $t1 + addu $t7, $t1 + lwc2 C2_VXY0, 0( $t5 ) + lwc2 C2_VZ0 , 4( $t5 ) + lwc2 C2_VXY1, 0( $t6 ) + lwc2 C2_VZ1 , 4( $t6 ) + lwc2 C2_VXY2, 0( $t7 ) + lwc2 C2_VZ2 , 4( $t7 ) + + srl $v1, $a3, 24 # Get primitive size + addu $t3, $v1 # Step main pointer to next primitive + + RTPT + + cfc2 $v0, C2_FLAG # Get GTE flag value + nop + + bltz $v0, .skip_prim # Skip primitive if Z overflow + nop + + #NCLIP # Backface culling + + #mfc2 $v1, C2_MAC0 + + andi $v0, $a3, 0x3 + + #bltz $v1, .skip_prim + #nop + + beq $v0, 0x1, .prim_tri # If primitive is a triangle + nop + beq $v0, 0x2, .prim_quad # If primitive is a quad + nop + + b .skip_prim + nop + +## Triangles + +.prim_tri: # Triangle processing + + addiu $t4, 8 # Advance from indices + + #AVSZ3 # Calculate average Z + + ClipTestTri + + and $v0, $s0, $s1 # v0 & v1 + beqz $v0, .do_draw + and $v0, $s1, $s2 # v1 & v2 + beqz $v0, .do_draw + and $v0, $s2, $s0 # v2 & v0 + beqz $v0, .do_draw + nop + b .skip_prim + nop + +.do_draw: + + #srl $v0, $a3, 2 # Lighting enabled? + #andi $v0, 0x3 + #bnez $v0, .F3_light + #nop + + andi $v0, $a3, 0x20 # Textured triangle + bnez $v0, .F3_textured + nop + + andi $v0, $a3, 0x10 # Gouraud shaded + bnez $v0, .F3_gouraud + nop + + lw $v0, 0( $t4 ) # Flat color, no lighting + lui $v1, 0x2000 + or $v0, $v1 + + b .sort_F3_pri + sw $v0, POLYF3_rgbc( $a1 ) + +.F3_textured: + + lw $v0, 0( $t4 ) # Flat color, no lighting + lui $v1, 0x2400 + or $v0, $v1 + sw $v0, POLYFT3_rgbc( $a1 ) + addiu $t4, 4 + + lhu $v0, 0( $t4 ) # Load texture coordinates + lhu $v1, 2( $t4 ) + sh $v0, POLYFT3_uv0( $a1 ) + lhu $v0, 4( $t4 ) + sh $v1, POLYFT3_uv1( $a1 ) + sh $v0, POLYFT3_uv2( $a1 ) + + lw $v0, 8( $t4 ) # Tpage + CLUT + nop + andi $v1, $v0, 0xffff + sh $v1, POLYFT3_tpage( $a1 ) + srl $v0, 16 + + b .sort_FT3_pri + sh $v0, POLYFT3_clut( $a1 ) + +.F3_gouraud: + lw $v0, 0($t4) + lw $v1, 4($t4) + .set noat + lui $at, 0x3000 + or $v0, $at + .set at + sw $v0, POLYG3_rgbc0($a1) + lw $v0, 8($t4) + sw $v1, POLYG3_rgbc1($a1) + b .sort_G3_pri + sw $v0, POLYG3_rgbc2($a1) + +#.F3_light: + + #lhu $v0, 0( $t4 ) # Load normal 0 + + #srl $v1, $a3, 2 + #andi $v1, $v1, 0x3 + + #sll $v0, 3 + #addu $v0, $t2 + #lwc2 C2_VXY0, 0( $v0 ) + #lwc2 C2_VZ0 , 4( $v0 ) + + #beq $v1, 0x2, .F3_light_smt + #nop + + #lw $v0, 4( $t4 ) + #lui $v1, 0x2000 + #or $v0, $v1 + #mtc2 $v0, C2_RGB + + #addiu $t4, 8 + #nop + + #NCCS + + #andi $v0, $a3, 0x20 # Textured triangle + #bnez $v0, .F3_light_tex + #nop + + #swc2 C2_RGB2, POLYF3_rgbc( $a1 ) + + #b .sort_F3_pri + #nop + +#.F3_light_tex: + + #lhu $v0, 0( $t4 ) # Load texture coordinates + #lhu $v1, 2( $t4 ) + #sh $v0, POLYFT3_uv0( $a1 ) + #lhu $v0, 4( $t4 ) + #sh $v1, POLYFT3_uv1( $a1 ) + #sh $v0, POLYFT3_uv2( $a1 ) + + #lw $v1, 8( $t4 ) + #nop + #andi $v0, $v1, 0xffff + #sh $v0, POLYFT3_tpage( $a1 ) + #srl $v0, $v1, 16 + #sh $v0, POLYFT3_clut( $a1 ) + + #mfc2 $v0, C2_RGB2 + #lui $v1, 0x2400 + #or $v0, $v1 + + #b .sort_FT3_pri + #sw $v0, POLYFT3_rgbc( $a1 ) + +#.F3_light_smt: + + #lhu $v0, 2( $t4 ) # Load normals 1 and 2 + #lhu $v1, 4( $t4 ) + #sll $v0, 3 + #sll $v1, 3 + #addu $v0, $t2 + #addu $v1, $t2 + #lwc2 C2_VXY1, 0( $v0 ) + #lwc2 C2_VZ1 , 4( $v0 ) + #lw $v0, 8( $t4 ) + #lwc2 C2_VXY2, 0( $v1 ) + #lwc2 C2_VZ2 , 4( $v1 ) + #lui $v1, 0x3000 # Load color + #or $v0, $v1 + #mtc2 $v0, C2_RGB + + #addiu $t4, 12 + #nop + + #NCCT + + #andi $v0, $a3, 0x20 # Textured triangle + #bnez $v0, .F3_light_tex_smt + #nop + + #swc2 C2_RGB0, POLYG3_rgbc0( $a1 ) + #swc2 C2_RGB1, POLYG3_rgbc1( $a1 ) + #swc2 C2_RGB2, POLYG3_rgbc2( $a1 ) + + #b .sort_G3_pri + #nop + +# .F3_light_tex_smt: + + # lhu $v0, 0( $t4 ) # Load texture coordinates + # lhu $v1, 2( $t4 ) + # sh $v0, POLYGT3_uv0( $a1 ) + # lhu $v0, 4( $t4 ) + # sh $v1, POLYGT3_uv1( $a1 ) + # sh $v0, POLYGT3_uv2( $a1 ) + + # lw $v1, 8( $t4 ) + # nop + # andi $v0, $v1, 0xffff + # sh $v0, POLYGT3_tpage( $a1 ) + # srl $v0, $v1, 16 + # sh $v0, POLYGT3_clut( $a1 ) + + # mfc2 $v0, C2_RGB0 + # lui $v1, 0x3400 + # or $v0, $v1 + + # swc2 C2_RGB1, POLYGT3_rgbc1( $a1 ) + # swc2 C2_RGB2, POLYGT3_rgbc2( $a1 ) + + # b .sort_GT3_pri + # sw $v0, POLYGT3_rgbc0( $a1 ) + +.sort_F3_pri: + + swc2 C2_SXY0, POLYF3_xy0($a1) + swc2 C2_SXY1, POLYF3_xy1($a1) + swc2 C2_SXY2, POLYF3_xy2($a1) + + la $v0, _smd_tpage_base + lhu $v0, 0($v0) + srl $v1, $a3, 6 # Get blend mode + andi $v1, 0x3 + sll $v1, 5 + or $v0, $v1 + lui $v1, 0xe100 + or $v0, $v1 + sw $v0, POLYF3_tpage($a1) # Store TPage + + .set noat + + lui $v1, 0x0500 + lw $v0, 0($a0) + lui $at, 0xff00 + and $v1, $at + lui $at, 0x00ff + or $at, 0xffff + and $v0, $at + or $v1, $v0 + sw $v1, 0($a1) + lw $v0, 0($a0) + and $a1, $at + lui $at, 0xff00 + and $v0, $at + or $v0, $a1 + sw $v0, 0($a0) + + .set at + + lui $v0, 0x8000 + or $a1, $v0 + + b .sort_loop + addiu $a1, POLYF3_len + +.sort_FT3_pri: + + swc2 C2_SXY0, POLYFT3_xy0( $a1 ) + swc2 C2_SXY1, POLYFT3_xy1( $a1 ) + swc2 C2_SXY2, POLYFT3_xy2( $a1 ) + + .set noat + + lui $v1, 0x0700 + lw $v0, 0($a0) + lui $at, 0xff00 + and $v1, $at + lui $at, 0x00ff + or $at, 0xffff + and $v0, $at + or $v1, $v0 + sw $v1, 0($a1) + lw $v0, 0($a0) + and $a1, $at + lui $at, 0xff00 + and $v0, $at + or $v0, $a1 + sw $v0, 0($a0) + + .set at + + lui $v0, 0x8000 + or $a1, $v0 + + b .sort_loop + addiu $a1, POLYFT3_len + +.sort_G3_pri: + + swc2 C2_SXY0, POLYG3_xy0( $a1 ) + swc2 C2_SXY1, POLYG3_xy1( $a1 ) + swc2 C2_SXY2, POLYG3_xy2( $a1 ) + + la $v0, _smd_tpage_base + lhu $v0, 0($v0) + srl $v1, $a3, 6 # Get blend mode + andi $v1, 0x3 + sll $v1, 5 + or $v0, $v1 + lui $v1, 0xe100 + or $v0, $v1 + sw $v0, POLYG3_tpage($a1) # Store TPage + + .set noat + + lui $v1, 0x0700 + lw $v0, 0($a0) + lui $at, 0xff00 + and $v1, $at + lui $at, 0x00ff + or $at, 0xffff + and $v0, $at + or $v1, $v0 + sw $v1, 0($a1) + lw $v0, 0($a0) + and $a1, $at + lui $at, 0xff00 + and $v0, $at + or $v0, $a1 + sw $v0, 0($a0) + + .set at + + lui $v0, 0x8000 + or $a1, $v0 + + b .sort_loop + addiu $a1, POLYG3_len + +.sort_GT3_pri: + + swc2 C2_SXY0, POLYGT3_xy0( $a1 ) + swc2 C2_SXY1, POLYGT3_xy1( $a1 ) + swc2 C2_SXY2, POLYGT3_xy2( $a1 ) + + .set noat + + lui $v1, 0x0900 + lw $v0, 0($a0) + lui $at, 0xff00 + and $v1, $at + lui $at, 0x00ff + or $at, 0xffff + and $v0, $at + or $v1, $v0 + sw $v1, 0($a1) + lw $v0, 0($a0) + and $a1, $at + lui $at, 0xff00 + and $v0, $at + or $v0, $a1 + sw $v0, 0($a0) + + .set at + + lui $v0, 0x8000 + or $a1, $v0 + + b .sort_loop + addiu $a1, POLYGT3_len + +## Quads + +.prim_quad: # Quad processing + + mfc2 $t6, C2_SXY0 # Retrieve first projected vertex + + lhu $t5, 6( $t4 ) # Project the last vertex + addiu $t4, 8 + sll $t5, 3 + addu $t5, $t1 + lwc2 C2_VXY0, 0( $t5 ) + lwc2 C2_VZ0 , 4( $t5 ) + + nRTPS + + cfc2 $v1, C2_FLAG # Get GTE flag value + + nop + + bltz $v1, .skip_prim + nop + + ClipTestQuad + + and $v0, $s0, $s1 # v0 & v1 + beqz $v0, .do_draw_q + and $v0, $s1, $s2 # v1 & v2 + beqz $v0, .do_draw_q + and $v0, $s2, $s3 # v2 & v3 + beqz $v0, .do_draw_q + and $v0, $s3, $s0 # v3 & v0 + beqz $v0, .do_draw_q + and $v0, $s0, $s2 # v0 & v2 + beqz $v0, .do_draw_q + and $v0, $s1, $s3 # v1 & v3 + beqz $v0, .do_draw_q + nop + b .skip_prim + nop + +.do_draw_q: + + srl $v0, $a3, 2 # Lighting enabled? + andi $v0, 0x3 + bnez $v0, .F4_light + nop + + andi $v0, $a3, 0x10 # Gouraud quad + bnez $v0, .F4_gouraud + nop + + andi $v0, $a3, 0x20 # Textured quad + bnez $v0, .F4_textured + nop + + lw $v0, 0($t4) + lui $v1, 0x2800 + or $v0, $v1 + + b .sort_F4_pri + sw $v0, POLYF4_rgbc($a1) + +.F4_textured: + + lw $v0, 0($t4) + lui $v1, 0x2c00 + or $v0, $v1 + sw $v0, POLYFT4_rgbc( $a1 ) + addiu $t4, 4 + + lhu $v0, 0($t4) # Load texture coordinates + lhu $v1, 2($t4) + sh $v0, POLYFT4_uv0( $a1 ) + lhu $v0, 4( $t4 ) + sh $v1, POLYFT4_uv1( $a1 ) + lhu $v1, 6( $t4 ) + sh $v0, POLYFT4_uv2( $a1 ) + sh $v1, POLYFT4_uv3( $a1 ) + + lw $v1, 8( $t4 ) + nop + andi $v0, $v1, 0xffff + sh $v0, POLYFT4_tpage( $a1 ) + srl $v0, $v1, 16 + + b .sort_FT4_pri + sh $v0, POLYFT4_clut($a1) + +.F4_gouraud: + + lw $v0, 0($t4) + lw $v1, 4($t4) + .set noat + lui $at, 0x3800 + or $v0, $at + .set at + sw $v0, POLYG4_rgbc0($a1) + lw $v0, 8($t4) + sw $v1, POLYG4_rgbc1($a1) + lw $v1, 12($t4) + sw $v0, POLYG4_rgbc2($a1) + b .sort_G4_pri + sw $v1, POLYG4_rgbc3($a1) + + +.F4_light: + + lhu $v0, 0( $t4 ) # Load normal 0 + + srl $v1, $a3, 2 + andi $v1, $v1, 0x3 + + sll $v0, 3 + addu $v0, $t2 + lwc2 C2_VXY0, 0( $v0 ) + lwc2 C2_VZ0 , 4( $v0 ) + + beq $v1, 0x2, .F4_light_smt + nop + + lw $v0, 4( $t4 ) + lui $v1, 0x2800 + or $v0, $v1 + mtc2 $v0, C2_RGB + + addiu $t4, 8 + nop + + NCCS + + andi $v0, $a3, 0x20 # Textured triangle + bnez $v0, .F4_light_tex + nop + + swc2 C2_RGB2, POLYF4_rgbc( $a1 ) + + b .sort_F4_pri + nop + +.F4_light_tex: + + lhu $v0, 0( $t4 ) # Load texture coordinates + lhu $v1, 2( $t4 ) + sh $v0, POLYFT4_uv0( $a1 ) + lhu $v0, 4( $t4 ) + sh $v1, POLYFT4_uv1( $a1 ) + lhu $v1, 6( $t4 ) + sh $v0, POLYFT4_uv2( $a1 ) + sh $v1, POLYFT4_uv3( $a1 ) + + lw $v1, 8( $t4 ) + nop + andi $v0, $v1, 0xffff + sh $v0, POLYFT4_tpage( $a1 ) + srl $v0, $v1, 16 + sh $v0, POLYFT4_clut( $a1 ) + + mfc2 $v0, C2_RGB2 + lui $v1, 0x2c00 + or $v0, $v1 + + b .sort_FT4_pri + sw $v0, POLYFT4_rgbc( $a1 ) + +.F4_light_smt: + + lhu $v0, 2( $t4 ) # Load normals 1 and 2 + lhu $v1, 4( $t4 ) + sll $v0, 3 + sll $v1, 3 + addu $v0, $t2 + addu $v1, $t2 + lwc2 C2_VXY1, 0( $v0 ) + lwc2 C2_VZ1 , 4( $v0 ) + lwc2 C2_VXY2, 0( $v1 ) + lwc2 C2_VZ2 , 4( $v1 ) + + lw $v0, 8( $t4 ) + lui $v1, 0x3800 # Load color + or $v0, $v1 + mtc2 $v0, C2_RGB + + nNCCT + + lhu $v0, 6( $t4 ) # Load normal 3 + + addiu $t4, 12 + + sll $v0, 3 + addu $v0, $t2 + lwc2 C2_VXY0, 0( $v0 ) + lwc2 C2_VZ0 , 4( $v0 ) + + andi $v0, $a3, 0x20 # Textured triangle + bnez $v0, .F4_light_tex_smt + nop + + swc2 C2_RGB0, POLYG4_rgbc0( $a1 ) + swc2 C2_RGB1, POLYG4_rgbc1( $a1 ) + swc2 C2_RGB2, POLYG4_rgbc2( $a1 ) + + nNCCS + + swc2 C2_RGB2, POLYG4_rgbc3( $a1 ) + + b .sort_G4_pri + nop + +.F4_light_tex_smt: + + mfc2 $v0, C2_RGB0 + lui $v1, 0x3400 + or $v0, $v1 + sw $v0, POLYGT4_rgbc0( $a1 ) + swc2 C2_RGB1, POLYGT4_rgbc1( $a1 ) + swc2 C2_RGB2, POLYGT4_rgbc2( $a1 ) + + NCCS + + lhu $v0, 0( $t4 ) # Load texture coordinates + lhu $v1, 2( $t4 ) + sh $v0, POLYGT4_uv0( $a1 ) + lhu $v0, 4( $t4 ) + sh $v1, POLYGT4_uv1( $a1 ) + lhu $v1, 6( $t4 ) + sh $v0, POLYGT4_uv2( $a1 ) + sh $v1, POLYGT4_uv3( $a1 ) + + lw $v1, 8( $t4 ) + swc2 C2_RGB2, POLYGT4_rgbc3( $a1 ) + + andi $v0, $v1, 0xffff + sh $v0, POLYGT4_tpage( $a1 ) + srl $v0, $v1, 16 + + b .sort_GT4_pri + sh $v0, POLYGT4_clut( $a1 ) + +.sort_F4_pri: + + sw $t6, POLYF4_xy0($a1) + swc2 C2_SXY0, POLYF4_xy1($a1) + swc2 C2_SXY1, POLYF4_xy2($a1) + swc2 C2_SXY2, POLYF4_xy3($a1) + + la $v0, _smd_tpage_base + lhu $v0, 0($v0) + srl $v1, $a3, 6 # Get blend mode + andi $v1, 0x3 + sll $v1, 5 + or $v0, $v1 + lui $v1, 0xe100 + or $v0, $v1 + sw $v0, POLYF4_tpage($a1) # Store TPage + + .set noat + + lui $v1, 0x0600 + lw $v0, 0($a0) + lui $at, 0xff00 + and $v1, $at + lui $at, 0x00ff + or $at, 0xffff + and $v0, $at + or $v1, $v0 + sw $v1, 0($a1) + lw $v0, 0($a0) + and $a1, $at + lui $at, 0xff00 + and $v0, $at + or $v0, $a1 + sw $v0, 0($a0) + + .set at + + lui $v0, 0x8000 + or $a1, $v0 + + b .sort_loop + addiu $a1, POLYF4_len + +.sort_FT4_pri: + + sw $t6, POLYFT4_xy0($a1) + swc2 C2_SXY0, POLYFT4_xy1($a1) + swc2 C2_SXY1, POLYFT4_xy2($a1) + swc2 C2_SXY2, POLYFT4_xy3($a1) + + .set noat + + lui $v1, 0x0900 + lw $v0, 0($a0) + lui $at, 0xff00 + and $v1, $at + lui $at, 0x00ff + or $at, 0xffff + and $v0, $at + or $v1, $v0 + sw $v1, 0($a1) + lw $v0, 0($a0) + and $a1, $at + lui $at, 0xff00 + and $v0, $at + or $v0, $a1 + sw $v0, 0($a0) + + .set at + + lui $v0, 0x8000 + or $a1, $v0 + + b .sort_loop + addiu $a1, POLYFT4_len + +.sort_G4_pri: + + sw $t6, POLYG4_xy0($a1) + swc2 C2_SXY0, POLYG4_xy1($a1) + swc2 C2_SXY1, POLYG4_xy2($a1) + swc2 C2_SXY2, POLYG4_xy3($a1) + + la $v0, _smd_tpage_base + lhu $v0, 0($v0) + srl $v1, $a3, 6 # Get blend mode + andi $v1, 0x3 + sll $v1, 5 + or $v0, $v1 + lui $v1, 0xe100 + or $v0, $v1 + sw $v0, POLYG4_tpage($a1) # Store TPage + + .set noat + + lui $v1, 0x0900 + lw $v0, 0($a0) + lui $at, 0xff00 + and $v1, $at + lui $at, 0x00ff + or $at, 0xffff + and $v0, $at + or $v1, $v0 + sw $v1, 0($a1) + lw $v0, 0($a0) + and $a1, $at + lui $at, 0xff00 + and $v0, $at + or $v0, $a1 + sw $v0, 0($a0) + + .set at + + lui $v0, 0x8000 + or $a1, $v0 + + b .sort_loop + addiu $a1, POLYG4_len + +.sort_GT4_pri: + + sw $t6, POLYGT4_xy0($a1) + swc2 C2_SXY0, POLYGT4_xy1($a1) + swc2 C2_SXY1, POLYGT4_xy2($a1) + swc2 C2_SXY2, POLYGT4_xy3($a1) + + .set noat + + lui $v1, 0x0c00 + lw $v0, 0($a0) + lui $at, 0xff00 + and $v1, $at + lui $at, 0x00ff + or $at, 0xffff + and $v0, $at + or $v1, $v0 + sw $v1, 0($a1) + lw $v0, 0($a0) + and $a1, $at + lui $at, 0xff00 + and $v0, $at + or $v0, $a1 + sw $v0, 0($a0) + + .set at + + lui $v0, 0x8000 + or $a1, $v0 + + b .sort_loop + addiu $a1, POLYGT4_len + +.skip_prim: + + b .sort_loop + nop + +.exit: + + lw $s0, 0( $sp ) + lw $s1, 4( $sp ) + lw $s2, 8( $sp ) + lw $s3, 12( $sp ) + addiu $sp, 16 + jr $ra + move $v0, $a1 +
\ No newline at end of file diff --git a/examples/n00bdemo/smd_s.h b/examples/n00bdemo/smd_s.h new file mode 100644 index 0000000..4dca4dd --- /dev/null +++ b/examples/n00bdemo/smd_s.h @@ -0,0 +1,336 @@ +.set OT_ADDR, 0 +.set OT_LEN, 4 +.set OT_ZDIV, 8 +.set OT_ZOFF, 10 + +.set SMD_HEAD_ID, 0 +.set SMD_HEAD_FLAG, 4 +.set SMD_HEAD_NVERTS, 6 +.set SMD_HEAD_NNORMS, 8 +.set SMD_HEAD_NPRIMS, 10 +.set SMD_HEAD_PVERTS, 12 +.set SMD_HEAD_PNORMS, 16 +.set SMD_HEAD_PPRIMS, 20 +.set SMD_HEAD_SIZE, 24 + +.set POLYF3_tag, 0 +.set POLYF3_tpage, 4 +.set POLYF3_rgbc, 8 +.set POLYF3_xy0, 12 +.set POLYF3_xy1, 16 +.set POLYF3_xy2, 20 +.set POLYF3_len, 24 + +.set POLYFT3_tag, 0 +.set POLYFT3_rgbc, 4 +.set POLYFT3_xy0, 8 +.set POLYFT3_uv0, 12 +.set POLYFT3_clut, 14 +.set POLYFT3_xy1, 16 +.set POLYFT3_uv1, 20 +.set POLYFT3_tpage, 22 +.set POLYFT3_xy2, 24 +.set POLYFT3_uv2, 28 +.set POLYFT3_pad, 30 +.set POLYFT3_len, 32 + +.set POLYG3_tag, 0 +.set POLYG3_tpage, 4 +.set POLYG3_rgbc0, 8 +.set POLYG3_xy0, 12 +.set POLYG3_rgbc1, 16 +.set POLYG3_xy1, 20 +.set POLYG3_rgbc2, 24 +.set POLYG3_xy2, 28 +.set POLYG3_len, 32 + +.set POLYGT3_tag, 0 +.set POLYGT3_rgbc0, 4 +.set POLYGT3_xy0, 8 +.set POLYGT3_uv0, 12 +.set POLYGT3_clut, 14 +.set POLYGT3_rgbc1, 16 +.set POLYGT3_xy1, 20 +.set POLYGT3_uv1, 24 +.set POLYGT3_tpage, 26 +.set POLYGT3_rgbc2, 28 +.set POLYGT3_xy2, 32 +.set POLYGT3_uv2, 36 +.set POLYGT3_pad, 38 +.set POLYGT3_len, 40 + +.set POLYF4_tag, 0 +.set POLYF4_tpage, 4 +.set POLYF4_rgbc, 8 +.set POLYF4_xy0, 12 +.set POLYF4_xy1, 16 +.set POLYF4_xy2, 20 +.set POLYF4_xy3, 24 +.set POLYF4_len, 28 + +.set POLYFT4_tag, 0 +.set POLYFT4_rgbc, 4 +.set POLYFT4_xy0, 8 +.set POLYFT4_uv0, 12 +.set POLYFT4_clut, 14 +.set POLYFT4_xy1, 16 +.set POLYFT4_uv1, 20 +.set POLYFT4_tpage, 22 +.set POLYFT4_xy2, 24 +.set POLYFT4_uv2, 28 +.set POLYFT4_pad0, 30 +.set POLYFT4_xy3, 32 +.set POLYFT4_uv3, 36 +.set POLYFT4_pad1, 38 +.set POLYFT4_len, 40 + +.set POLYG4_tag, 0 +.set POLYG4_tpage, 4 +.set POLYG4_rgbc0, 8 +.set POLYG4_xy0, 12 +.set POLYG4_rgbc1, 16 +.set POLYG4_xy1, 20 +.set POLYG4_rgbc2, 24 +.set POLYG4_xy2, 28 +.set POLYG4_rgbc3, 32 +.set POLYG4_xy3, 36 +.set POLYG4_len, 40 + +.set POLYGT4_tag, 0 +.set POLYGT4_rgbc0, 4 +.set POLYGT4_xy0, 8 +.set POLYGT4_uv0, 12 +.set POLYGT4_clut, 14 +.set POLYGT4_rgbc1, 16 +.set POLYGT4_xy1, 20 +.set POLYGT4_uv1, 24 +.set POLYGT4_tpage, 26 +.set POLYGT4_rgbc2, 28 +.set POLYGT4_xy2, 32 +.set POLYGT4_uv2, 36 +.set POLYGT4_pad0, 38 +.set POLYGT4_rgbc3, 40 +.set POLYGT4_xy3, 44 +.set POLYGT4_uv3, 48 +.set POLYGT4_pad1, 50 +.set POLYGT4_len, 52 + +.set CLIP_LEFT, 1 +.set CLIP_RIGHT, 2 +.set CLIP_TOP, 4 +.set CLIP_BOTTOM, 8 + + +# Clip routine macros, based on Cohen-Sutherland line clipping algorithm +# but only with the off-screen dectection logic extended for polygons + +.macro ClipTestTri + + # X0 clip test + mfc2 $t7, C2_SXY0 + sll $v1, $t8, 16 + sra $v1, 16 + sll $v0, $t7, 16 + sra $v0, 16 + bge $v0, $v1, .no_clip_l_x0 + move $s0, $0 + ori $s0, CLIP_LEFT +.no_clip_l_x0: + sll $v1, $t9, 16 + sra $v1, 16 + ble $v0, $v1, .no_clip_r_x0 + nop + ori $s0, CLIP_RIGHT +.no_clip_r_x0: + # Y0 clip test + sra $v0, $t7, 16 + sra $v1, $t8, 16 + bge $v0, $v1, .no_clip_t_y0 + nop + ori $s0, CLIP_TOP +.no_clip_t_y0: + sra $v1, $t9, 16 + ble $v0, $v1, .no_clip_b_y0 + nop + ori $s0, CLIP_BOTTOM +.no_clip_b_y0: + + # X1 clip test + mfc2 $t7, C2_SXY1 + sll $v1, $t8, 16 + sra $v1, 16 + sll $v0, $t7, 16 + sra $v0, 16 + bge $v0, $v1, .no_clip_l_x1 + move $s1, $0 + ori $s1, CLIP_LEFT +.no_clip_l_x1: + sll $v1, $t9, 16 + sra $v1, 16 + ble $v0, $v1, .no_clip_r_x1 + nop + ori $s1, CLIP_RIGHT +.no_clip_r_x1: + # Y1 clip test + sra $v0, $t7, 16 + sra $v1, $t8, 16 + bge $v0, $v1, .no_clip_t_y1 + nop + ori $s1, CLIP_TOP +.no_clip_t_y1: + sra $v1, $t9, 16 + ble $v0, $v1, .no_clip_b_y1 + nop + ori $s1, CLIP_BOTTOM +.no_clip_b_y1: + + # X2 clip test + mfc2 $t7, C2_SXY2 + sll $v1, $t8, 16 + sra $v1, 16 + sll $v0, $t7, 16 + sra $v0, 16 + bge $v0, $v1, .no_clip_l_x2 + move $s2, $0 + ori $s2, CLIP_LEFT +.no_clip_l_x2: + sll $v1, $t9, 16 + sra $v1, 16 + ble $v0, $v1, .no_clip_r_x2 + nop + ori $s2, CLIP_RIGHT +.no_clip_r_x2: + # Y2 clip test + sra $v0, $t7, 16 + sra $v1, $t8, 16 + bge $v0, $v1, .no_clip_t_y2 + nop + ori $s2, CLIP_TOP +.no_clip_t_y2: + sra $v1, $t9, 16 + ble $v0, $v1, .no_clip_b_y2 + nop + ori $s2, CLIP_BOTTOM +.no_clip_b_y2: + +.endm + + +.macro ClipTestQuad + + # X0 clip test + sll $v0, $t6, 16 + sra $v0, 16 + sll $v1, $t8, 16 + sra $v1, 16 + bge $v0, $v1, .no_clip_l_x0_q + move $s0, $0 + ori $s0, CLIP_LEFT +.no_clip_l_x0_q: + sll $v1, $t9, 16 + sra $v1, 16 + ble $v0, $v1, .no_clip_r_x0_q + nop + ori $s0, CLIP_RIGHT +.no_clip_r_x0_q: + # Y0 clip test + sra $v0, $t6, 16 + sra $v1, $t8, 16 + bge $v0, $v1, .no_clip_t_y0_q + nop + ori $s0, CLIP_TOP +.no_clip_t_y0_q: + sra $v1, $t9, 16 + ble $v0, $v1, .no_clip_b_y0_q + nop + ori $s0, CLIP_BOTTOM +.no_clip_b_y0_q: + + # X1 clip test + mfc2 $t7, C2_SXY0 + sll $v1, $t8, 16 + sra $v1, 16 + sll $v0, $t7, 16 + sra $v0, 16 + bge $v0, $v1, .no_clip_l_x1_q + move $s1, $0 + ori $s1, CLIP_LEFT +.no_clip_l_x1_q: + sll $v1, $t9, 16 + sra $v1, 16 + ble $v0, $v1, .no_clip_r_x1_q + nop + ori $s1, CLIP_RIGHT +.no_clip_r_x1_q: + # Y1 clip test + sra $v0, $t7, 16 + sra $v1, $t8, 16 + bge $v0, $v1, .no_clip_t_y1_q + nop + ori $s1, CLIP_TOP +.no_clip_t_y1_q: + sra $v1, $t9, 16 + ble $v0, $v1, .no_clip_b_y1_q + nop + ori $s1, CLIP_BOTTOM +.no_clip_b_y1_q: + + # X2 clip test + mfc2 $t7, C2_SXY1 + sll $v1, $t8, 16 + sra $v1, 16 + sll $v0, $t7, 16 + sra $v0, 16 + bge $v0, $v1, .no_clip_l_x2_q + move $s2, $0 + ori $s2, CLIP_LEFT +.no_clip_l_x2_q: + sll $v1, $t9, 16 + sra $v1, 16 + ble $v0, $v1, .no_clip_r_x2_q + nop + ori $s2, CLIP_RIGHT +.no_clip_r_x2_q: + # Y2 clip test + sra $v0, $t7, 16 + sra $v1, $t8, 16 + bge $v0, $v1, .no_clip_t_y2_q + nop + ori $s2, CLIP_TOP +.no_clip_t_y2_q: + sra $v1, $t9, 16 + ble $v0, $v1, .no_clip_b_y2_q + nop + ori $s2, CLIP_BOTTOM +.no_clip_b_y2_q: + + # X3 clip test + mfc2 $t7, C2_SXY2 + sll $v1, $t8, 16 + sra $v1, 16 + sll $v0, $t7, 16 + sra $v0, 16 + bge $v0, $v1, .no_clip_l_x3_q + move $s3, $0 + ori $s3, CLIP_LEFT +.no_clip_l_x3_q: + sll $v1, $t9, 16 + sra $v1, 16 + ble $v0, $v1, .no_clip_r_x3_q + nop + ori $s3, CLIP_RIGHT +.no_clip_r_x3_q: + # Y4 clip test + sra $v0, $t7, 16 + sra $v1, $t8, 16 + bge $v0, $v1, .no_clip_t_y3_q + nop + ori $s3, CLIP_TOP +.no_clip_t_y3_q: + sra $v1, $t9, 16 + ble $v0, $v1, .no_clip_b_y3_q + nop + ori $s3, CLIP_BOTTOM +.no_clip_b_y3_q: + +.endm diff --git a/examples/n00bdemo/smdparser.s b/examples/n00bdemo/smdparser.s new file mode 100644 index 0000000..379690f --- /dev/null +++ b/examples/n00bdemo/smdparser.s @@ -0,0 +1,129 @@ +.set noreorder + +.include "smd_s.h" + +.set SMD_PRI_ID, 0 +.set SMD_PRI_v0, 4 +.set SMD_PRI_v1, 6 +.set SMD_PRI_v2, 8 +.set SMD_PRI_v3, 10 +.set SMD_PRI_n0, 12 +.set SMD_PRI_n1, 14 +.set SMD_PRI_n2, 16 +.set SMD_PRI_n3, 18 +.set SMD_PRI_rgbc0, 20 +.set SMD_PRI_rgbc1, 24 +.set SMD_PRI_rgbc2, 28 +.set SMD_PRI_rgbc3, 32 +.set SMD_PRI_tuv0, 36 +.set SMD_PRI_tuv1, 38 +.set SMD_PRI_tuv2, 40 +.set SMD_PRI_tuv3, 42 +.set SMD_PRI_tpage, 44 +.set SMD_PRI_clut, 46 + +.section .text + + +.comm _smd_parse_addr, 4, 4 + + +.global OpenSMD +.type OpenSMD, @function +OpenSMD: + lw $v0, SMD_HEAD_ID($a0) + li $v1, 0x01444d53 + + bne $v0, $v1, .not_smd + nop + + lw $v0, SMD_HEAD_PPRIMS($a0) + la $v1, _smd_parse_addr + sw $v0, 0($v1) + + jr $ra + lhu $v0, SMD_HEAD_NPRIMS($a0) + +.not_smd: + jr $ra + move $v0, $0 + + +.global ReadSMD +.type ReadSMD, @function +ReadSMD: + + la $v0, _smd_parse_addr + lw $v0, 0($v0) + nop + + lw $a2, 0($v0) # Load primitive ID + addiu $a1, $v0, 4 + + sw $a2, SMD_PRI_ID($a0) + + beqz $a2, $end_prim + nop + + srl $v1, $a2, 24 # Get primitive size + addu $v0, $v1 + la $v1, _smd_parse_addr + sw $v0, 0($v1) + + lw $v0, 0($a1) # Copy vertex coords + lw $v1, 4($a1) + sw $v0, SMD_PRI_v0($a0) + sw $v1, SMD_PRI_v2($a0) + addiu $a1, 8 + + srl $v0, $a2, 2 # Lighting enabled? + andi $v0, 0x3 + bnez $v0, $light + nop + + b $no_light + nop + +$light: + srl $v1, $a2, 2 + lw $v0, 0($a1) # Copy vertex coords + andi $v1, 0x3 + sw $v0, SMD_PRI_n0($a0) + + bne $v1, 0x2, $light_flat + addiu $a1, 4 + + lw $v1, 0($a1) + addiu $a1, 4 + sw $v1, SMD_PRI_n2($a0) + +$light_flat: +$no_light: + + lw $v0, 0($a1) + nop + sw $v0, SMD_PRI_rgbc0($a0) + addiu $a1, 4 + + srl $v0, $a2, 5 + andi $v0, 0x1 + beqz $v0, $not_textured + nop + + lw $v0, 0($a1) + lw $v1, 4($a1) + sw $v0, SMD_PRI_tuv0($a0) + lw $v0, 8($a1) + sw $v1, SMD_PRI_tuv2($a0) + sw $v0, SMD_PRI_tpage($a0) + +$not_textured: + + jr $ra + move $v0, $a0 + +$end_prim: + + jr $ra + move $v0, $0 +
\ No newline at end of file diff --git a/examples/sdk-common.mk b/examples/sdk-common.mk new file mode 100644 index 0000000..8a92dbf --- /dev/null +++ b/examples/sdk-common.mk @@ -0,0 +1,19 @@ +# Adjustable common makefile values for PSn00bSDK example programs. +# You may need to modify these values to correspond to your toolchain setup. + +# Toolchain prefix. Can include an absolute path to the toolchain executables. +PREFIX = mipsel-unknown-elf- + +# Include directories. +INCLUDE = -I../../libpsn00b/include + +# Library directories. Last entry must point to a directory containing libgcc. +LIBDIRS = -L../../libpsn00b +# Directory path for toolchain's libraries (you may need to change this) +ifeq "$(OS)" "Windows_NT" +# For Windows +LIBDIRS += -L/c/psn00bsdk/lib +else +# For Linux/BSDs +LIBDIRS += -L/usr/local/mipsel-unknown-elf/lib/gcc/mipsel-unknown-elf/6.3.0 +endif diff --git a/libpsn00b/include/ctype.h b/libpsn00b/include/ctype.h new file mode 100644 index 0000000..b79498a --- /dev/null +++ b/libpsn00b/include/ctype.h @@ -0,0 +1,7 @@ +#ifndef _CTYPE_H +#define _CTYPE_H + +extern int tolower(int chr); +extern int toupper(int chr); + +#endif
\ No newline at end of file diff --git a/libpsn00b/include/gtereg.h b/libpsn00b/include/gtereg.h new file mode 100644 index 0000000..0d051fc --- /dev/null +++ b/libpsn00b/include/gtereg.h @@ -0,0 +1,81 @@ +# GTE register definitions for GNU assembler (as). +# +# Part of the PSn00bSDK Project by Lameguy64. +# 2019 Meido-Tek Productions + +# +# GTE data registers (use mfc2, mtc2, lwc2, swc2) +# +.set C2_VXY0, $0 +.set C2_VZ0, $1 +.set C2_VXY1, $2 +.set C2_VZ1, $3 +.set C2_VXY2, $4 +.set C2_VZ2, $5 +.set C2_RGB, $6 +.set C2_OTZ, $7 + +.set C2_IR0, $8 +.set C2_IR1, $9 +.set C2_IR2, $10 +.set C2_IR3, $11 +.set C2_SXY0, $12 +.set C2_SXY1, $13 +.set C2_SXY2, $14 +.set C2_SXYP, $15 + +.set C2_SZ0, $16 +.set C2_SZ1, $17 +.set C2_SZ2, $18 +.set C2_SZ3, $19 +.set C2_RGB0, $20 +.set C2_RGB1, $21 +.set C2_RGB2, $22 + +.set C2_MAC0, $24 +.set C2_MAC1, $25 +.set C2_MAC2, $26 +.set C2_MAC3, $27 +.set C2_IRGB, $28 +.set C2_ORGB, $29 +.set C2_LZCS, $30 +.set C2_LZCR, $31 + +# +# GTE control registers (use cfc2/ctc2) +# +.set C2_R11R12, $0 +.set C2_R13R21, $1 +.set C2_R22R23, $2 +.set C2_R31R32, $3 +.set C2_R33, $4 +.set C2_TRX, $5 +.set C2_TRY, $6 +.set C2_TRZ, $7 + +.set C2_L11L12, $8 +.set C2_L13L21, $9 +.set C2_L22L23, $10 +.set C2_L31L32, $11 +.set C2_L33, $12 +.set C2_RBK, $13 +.set C2_GBK, $14 +.set C2_BBK, $15 + +.set C2_LR1LR2, $16 +.set C2_LR3LG1, $17 +.set C2_LG2LG3, $18 +.set C2_LB1LB2, $19 +.set C2_LB3, $20 +.set C2_RFC, $21 +.set C2_GFC, $22 +.set C2_BFC, $23 + +.set C2_OFX, $24 +.set C2_OFY, $25 +.set C2_H, $26 +.set C2_DQA, $27 +.set C2_DQB, $28 +.set C2_ZSF3, $29 +.set C2_ZSF4, $30 +.set C2_FLAG, $31 diff --git a/libpsn00b/include/hwregs_a.h b/libpsn00b/include/hwregs_a.h new file mode 100644 index 0000000..a71a657 --- /dev/null +++ b/libpsn00b/include/hwregs_a.h @@ -0,0 +1,97 @@ +# Hardware register definitions for GNU assembler (as) +# +# Part of the PSn00bSDK Project by Lameguy64 +# 2019 Meido-Tek Productions + + +.set IOBASE, 0x1f80 # IO segment base + +# GPU +.set GP0, 0x1810 # Also GPUREAD +.set GP1, 0x1814 # Also GPUSTAT + +# CD +.set CD_STAT, 0x1800 +.set CD_CMD, 0x1801 # Also response FIFO +.set CD_DATA, 0x1802 # Also parameters +.set CD_IRQ, 0x1803 + +.set CD_REG0, 0x1800 +.set CD_REG1, 0x1801 +.set CD_REG2, 0x1802 +.set CD_REG3, 0x1803 + +.set COM_DELAY, 0x1020 + +# SPU (must be used with 16-bit load/store instructions) +.set SPU_VOICE_BASE, 0x1c00 + +.set SPU_MASTER_VOL, 0x1d80 +.set SPU_REVERB_VOL, 0x1d84 +.set SPU_KEY_ON, 0x1d88 +.set SPU_KEY_OFF, 0x1d8c +.set SPU_FM_MODE, 0x1d90 +.set SPU_NOISE_MODE, 0x1d94 +.set SPU_REVERB_ON, 0x1d98 +.set SPU_CHAN_STATUS, 0x1d9c + +.set SPU_REVERB_ADDR, 0x1da2 +.set SPU_IRQ_ADDR, 0x1da4 +.set SPU_ADDR, 0x1da6 +.set SPU_DATA, 0x1da8 + +.set SPUCNT, 0x1daa +.set SPUDTCNT, 0x1dac +.set SPUSTAT, 0x1dae + +.set SPU_CD_VOL, 0x1db0 +.set SPU_EXT_VOL, 0x1db4 +.set SPU_CURRENT_VOL, 0x1db8 + +.set SPU_VOICE_VOL_L, 0x00 +.set SPU_VOICE_VOL_R, 0x02 +.set SPU_VOICE_FREQ, 0x04 +.set SPU_VOICE_ADDR, 0x06 +.set SPU_VOICE_ADSR_L, 0x08 +.set SPU_VOICE_ADSR_H, 0x0a +.set SPU_VOICE_LOOP, 0x0e + +# Pads +.set JOY_TXRX, 0x1040 +.set JOY_STAT, 0x1044 +.set JOY_MODE, 0x1048 +.set JOY_CTRL, 0x104A +.set JOY_BAUD, 0x104E + +# IRQ +.set ISTAT, 0x1070 +.set IMASK, 0x1074 + +# DMA +.set DPCR, 0x10f0 +.set DICR, 0x10f4 + +.set D2_MADR, 0x10a0 +.set D2_BCR, 0x10a4 +.set D2_CHCR, 0x10a8 + +.set D4_MADR, 0x10c0 +.set D4_BCR, 0x10c4 +.set D4_CHCR, 0x10c8 + +.set D6_MADR, 0x10e0 +.set D6_BCR, 0x10e4 +.set D6_CHCR, 0x10e8 + +# Timers +.set T0_CNT, 0x1100 +.set T0_MODE, 0x1104 +.set T0_TGT, 0x1108 + +.set T1_CNT, 0x1110 +.set T1_MODE, 0x1114 +.set T1_TGT, 0x1118 + +.set T2_CNT, 0x1120 +.set T2_MODE, 0x1124 +.set T2_TGT, 0x1128 diff --git a/libpsn00b/include/inline_c.h b/libpsn00b/include/inline_c.h new file mode 100644 index 0000000..4341624 --- /dev/null +++ b/libpsn00b/include/inline_c.h @@ -0,0 +1,433 @@ +/* Inline GTE macros for the GNU C compiler. + * + * Part of the PSn00bSDK Project by Lameguy64. + * 2019 Meido-Tek Production + * + * All GTE commands can be used without having to pass your object file + * through some stupid tool such as DMPSX. Perhaps it was Sony's attempt + * to prevent people from quickly discovering the GTE commands from the + * official SDK easily? Though people could just extract the cop2 opcodes + * of an object file after it has been passed through DMPSX. + * + * Todo: A couple of GTE operation macros are still missing such as + * gte_rtv*() though they appear to be just variants of gte_mvmva more or + * less (gte_rtv0() is actually gte_mvmva(1, 0, 0, 3, 0) for example). + * + */ + +#ifndef _INLINE_C_H +#define _INLINE_C_H + +/* + * GTE load macros + */ + +/* Load a SVECTOR (passed as a pointer) to GTE V0 + */ +#define gte_ldv0( r0 ) __asm__ volatile ( \ + "lwc2 $0 , 0( %0 );" \ + "lwc2 $1 , 4( %0 );" \ + : \ + : "r"( r0 ) \ + : "$t0" ) + +/* Load a SVECTOR (passed as a pointer) to GTE V1 + */ +#define gte_ldv1( r0 ) __asm__ volatile ( \ + "lwc2 $2 , 0( %0 );" \ + "lwc2 $3 , 4( %0 );" \ + : \ + : "r"( r0 ) \ + : "$t0" ) + +/* Load a SVECTOR (passed as a pointer) to GTE V2 + */ +#define gte_ldv2( r0 ) __asm__ volatile ( \ + "lwc2 $4 , 0( %0 );" \ + "lwc2 $5 , 4( %0 );" \ + : \ + : "r"( r0 ) \ + : "$t0" ) + +/* Load three SVECTORs (passed as a pointer) to the GTE at once + */ +#define gte_ldv3( r0, r1, r2 ) __asm__ volatile ( \ + "lwc2 $0 , 0( %0 );" \ + "lwc2 $1 , 4( %0 );" \ + "lwc2 $2 , 0( %1 );" \ + "lwc2 $3 , 4( %1 );" \ + "lwc2 $4 , 0( %2 );" \ + "lwc2 $5 , 4( %2 );" \ + : \ + : "r"( r0 ), "r"( r1 ), "r"( r2 ) ) + +#define gte_ldrgb( r0 ) __asm__ volatile ( \ + "lwc2 $6 , 0( %0 );" \ + : \ + : "r"( r0 ) ) + +#define gte_ldopv2( r0 ) __asm__ volatile ( \ + "lwc2 $11, 8( %0 );" \ + "lwc2 $9 , 0( %0 );" \ + "lwc2 $10, 4( %0 );" \ + : \ + : "r"( r0 ) ) + +/* Sets the GTE offset + */ +#define gte_SetGeomOffset( r0, r1 ) __asm__ volatile ( \ + "sll $t0, %0, 16;" \ + "sll $t1, %1, 16;" \ + "ctc2 $t0, $24;" \ + "ctc2 $t1, $25;" \ + : \ + : "r"( r0 ), "r"( r1 ) \ + : "$t0", "$t1" ) + +#define gte_SetGeomScreen( r0 ) __asm__ volatile ( \ + "ctc2 %0, $26;" \ + : \ + : "r"( r0 ) ) + +#define gte_SetTransMatrix( r0 ) __asm__ volatile ( \ + "lw $t0, 20( %0 );" \ + "lw $t1, 24( %0 );" \ + "ctc2 $t0, $5;" \ + "lw $t2, 28( %0 );" \ + "ctc2 $t1, $6;" \ + "ctc2 $t2, $7;" \ + : \ + : "r"( r0 ) \ + : "$t2" ) + +#define gte_SetRotMatrix( r0 ) __asm__ volatile ( \ + "lw $t0, 0( %0 );" \ + "lw $t1, 4( %0 );" \ + "ctc2 $t0, $0;" \ + "ctc2 $t1, $1;" \ + "lw $t0, 8( %0 );" \ + "lw $t1, 12( %0 );" \ + "lhu $t2, 16( %0 );" \ + "ctc2 $t0, $2;" \ + "ctc2 $t1, $3;" \ + "ctc2 $t2, $4;" \ + : \ + : "r"( r0 ) \ + : "$t2" ) + +#define gte_SetLightMatrix( r0 ) __asm__ volatile ( \ + "lw $t0, 0( %0 );" \ + "lw $t1, 4( %0 );" \ + "ctc2 $t0, $8;" \ + "ctc2 $t1, $9;" \ + "lw $t0, 8( %0 );" \ + "lw $t1, 12( %0 );" \ + "lhu $t2, 16( %0 );" \ + "ctc2 $t0, $10;" \ + "ctc2 $t1, $11;" \ + "ctc2 $t2, $12;" \ + : \ + : "r"( r0 ) \ + : "$t2" ) + +#define gte_SetColorMatrix( r0 ) __asm__ volatile ( \ + "lw $t0, 0( %0 );" \ + "lw $t1, 4( %0 );" \ + "ctc2 $t0, $16;" \ + "ctc2 $t1, $17;" \ + "lw $t0, 8( %0 );" \ + "lw $t1, 12( %0 );" \ + "lhu $t2, 16( %0 );" \ + "ctc2 $t0, $18;" \ + "ctc2 $t1, $19;" \ + "ctc2 $t2, $20;" \ + : \ + : "r"( r0 ) \ + : "$t2" ) + +#define gte_SetBackColor( r0, r1, r2 ) __asm__ volatile ( \ + "sll $t0, %0, 4;" \ + "sll $t1, %1, 4;" \ + "sll $t2, %2, 4;" \ + "ctc2 $t0, $13;" \ + "ctc2 $t1, $14;" \ + "ctc2 $t2, $15;" \ + : \ + : "r"( r0 ), "r"( r1 ), "r"( r2 ) \ + : "$t0", "$t1", "$t2" ) + +/* + * GTE store macros + */ + +#define gte_otz( r0 ) __asm__ volatile ( \ + "swc2 $7, 0( %0 );" \ + : \ + : "r"( r0 ) \ + : "memory" ) + +#define gte_stflg( r0 ) __asm__ volatile ( \ + "cfc2 $t0, $31;" \ + "nop;" \ + "sw $t0, 0( %0 );" \ + : \ + : "r"( r0 ) \ + : "memory" ) + +#define gte_stsxy( r0 ) __asm__ volatile ( \ + "swc2 $14, 0( %0 );" \ + : \ + : "r"( r0 ) \ + : "memory" ) + +#define gte_stsxy0( r0 ) __asm__ volatile ( \ + "swc2 $12, 0( %0 );" \ + : \ + : "r"( r0 ) \ + : "memory" ) + +#define gte_stsxy1( r0 ) __asm__ volatile ( \ + "swc2 $13, 0( %0 );" \ + : \ + : "r"( r0 ) \ + : "memory" ) + +#define gte_stsxy2( r0 ) __asm__ volatile ( \ + "swc2 $14, 0( %0 );" \ + : \ + : "r"( r0 ) \ + : "memory" ) + +#define gte_stsxy3( r0, r1, r2 ) __asm__ volatile ( \ + "swc2 $12, 0( %0 );" \ + "swc2 $13, 0( %1 );" \ + "swc2 $14, 0( %2 );" \ + : \ + : "r"( r0 ), "r"( r1 ), "r"( r2 ) \ + : "memory" ) + +#define gte_stotz( r0 ) __asm__ volatile ( \ + "swc2 $7, 0( %0 );" \ + : \ + : "r"( r0 ) \ + : "memory" ) + +#define gte_stopz( r0 ) __asm__ volatile ( \ + "swc2 $24, 0( %0 );" \ + : \ + : "r"( r0 ) \ + : "memory" ) + +#define gte_strgb( r0 ) __asm__ volatile ( \ + "swc2 $22, 0( %0 );" \ + : \ + : "r"( r0 ) \ + : "memory" ) + +#define gte_strgb3( r0, r1, r2 ) __asm__ volatile ( \ + "swc2 $20, 0( %0 );" \ + "swc2 $21, 0( %1 );" \ + "swc2 $22, 0( %2 );" \ + : \ + : "r"( r0 ), "r"( r1 ), "r" ( r2 ) \ + : "memory" ) + +#define gte_stsv( r0 ) __asm__ volatile ( \ + "mfc2 $t0, $9;" \ + "mfc2 $t1, $10;" \ + "mfc2 $t2, $11;" \ + "sh $t0, 0( %0 );" \ + "sh $t1, 2( %0 );" \ + "sh $t2, 4( %0 );" \ + : \ + : "r"( r0 ) \ + : "memory" ) + +#define gte_stlvnl( r0 ) __asm__ volatile ( \ + "swc2 $25, 0( %0 );" \ + "swc2 $26, 4( %0 );" \ + "swc2 $27, 8( %0 );" \ + : \ + : "r"( r0 ) \ + : "memory" ) + + +/* + * GTE operation macros (does not need a stupid tool such as dmpsx!) + */ + +#define gte_rtps() __asm__ volatile ( \ + "nop;" \ + "nop;" \ + "cop2 0x0180001;" ) + +#define gte_rtpt() __asm__ volatile ( \ + "nop;" \ + "nop;" \ + "cop2 0x0280030;" ) + +#define gte_nclip() __asm__ volatile ( \ + "nop;" \ + "nop;" \ + "cop2 0x1400006;" ) + +#define gte_avsz3() __asm__ volatile ( \ + "nop;" \ + "nop;" \ + "cop2 0x158002D;" ) + +#define gte_avsz4() __asm__ volatile ( \ + "nop;" \ + "nop;" \ + "cop2 0x168002E;" ) + +#define gte_sqr0() __asm__ volatile ( \ + "nop;" \ + "nop;" \ + "cop2 0x0A00428;" ) + +#define gte_sqr12() __asm__ volatile ( \ + "nop;" \ + "nop;" \ + "cop2 0x0A80428;" ) + +#define gte_op0() __asm__ volatile ( \ + "nop;" \ + "nop;" \ + "cop2 0x170000C;" ) + +#define gte_op12() __asm__ volatile ( \ + "nop;" \ + "nop;" \ + "cop2 0x178000C;" ) + +#define gte_ncs() __asm__ volatile ( \ + "nop;" \ + "nop;" \ + "cop2 0x0C8041E;" ) + +#define gte_nct() __asm__ volatile ( \ + "nop;" \ + "nop;" \ + "cop2 0x0D80420;" ) + +#define gte_nccs() __asm__ volatile ( \ + "nop;" \ + "nop;" \ + "cop2 0x108041B;" ) \ + +#define gte_ncct() __asm__ volatile ( \ + "nop;" \ + "nop;" \ + "cop2 0x118043F;" ) + +#define gte_ncds() __asm__ volatile ( \ + "nop;" \ + "nop;" \ + "cop2 0x0E80413;" ) + +#define gte_ncdt() __asm__ volatile ( \ + "nop;" \ + "nop;" \ + "cop2 0x0F80416;" ) + +#define gte_cc() __asm__ volatile ( \ + "nop;" \ + "nop;" \ + "cop2 0x138041C;" ) + +#define gte_cdp() __asm__ volatile ( \ + "nop;" \ + "nop;" \ + "cop2 0x1280414;" ) + +#define gte_dcpl() __asm__ volatile ( \ + "nop;" \ + "nop;" \ + "cop2 0x0680029;" ) + +#define gte_dpcs() __asm__ volatile ( \ + "nop;" \ + "nop;" \ + "cop2 0x0780010;" ) + +#define gte_dpct() __asm__ volatile ( \ + "nop;" \ + "nop;" \ + "cop2 0x0180001;" ) + +#define gte_intpl() __asm__ volatile ( \ + "nop;" \ + "nop;" \ + "cop2 0x0980011;" ) + +#define gte_gpf0() __asm__ volatile ( \ + "nop;" \ + "nop;" \ + "cop2 0x190003D;" ) + +#define gte_gpf12() __asm__ volatile ( \ + "nop;" \ + "nop;" \ + "cop2 0x198003D;" ) + +#define gte_gpl0() __asm__ volatile ( \ + "nop;" \ + "nop;" \ + "cop2 0x1A0003E;" ) + +#define gte_gpl12() __asm__ volatile ( \ + "nop;" \ + "nop;" \ + "cop2 0x1A8003E;" ) + +#define gte_mvmva_core( r0 ) __asm__ volatile ( \ + "nop;" \ + "nop;" \ + "cop2 %0" \ + : \ + : "g"( r0 ) ) + +#define gte_mvmva(sf, mx, v, cv, lm) gte_mvmva_core( 0x0400012 | \ + ((sf)<<19) | ((mx)<<17) | ((v)<<15) | ((cv)<<13) | ((lm)<<10) ) + + +/* + * GTE operation macros without leading nops + * + * Checking assembler output when using these is advised. + */ + +#define gte_rtps_b() __asm__ volatile ( "cop2 0x0180001;" ) +#define gte_rtpt_b() __asm__ volatile ( "cop2 0x0280030;" ) +#define gte_nclip_b() __asm__ volatile ( "cop2 0x1400006;" ) +#define gte_avsz3_b() __asm__ volatile ( "cop2 0x158002D;" ) +#define gte_avsz4_b() __asm__ volatile ( "cop2 0x168002E;" ) +#define gte_sqr0_b() __asm__ volatile ( "cop2 0x0A00428;" ) +#define gte_sqr12_b() __asm__ volatile ( "cop2 0x0A80428;" ) +#define gte_op0_b() __asm__ volatile ( "cop2 0x170000C;" ) +#define gte_op12_b() __asm__ volatile ( "cop2 0x178000C;" ) +#define gte_ncs_b() __asm__ volatile ( "cop2 0x0C8041E;" ) +#define gte_nct_b() __asm__ volatile ( "cop2 0x0D80420;" ) +#define gte_nccs_b() __asm__ volatile ( "cop2 0x108041B;" ) +#define gte_ncct_b() __asm__ volatile ( "cop2 0x118043F;" ) +#define gte_ncds_b() __asm__ volatile ( "cop2 0x0E80413;" ) +#define gte_ncdt_b() __asm__ volatile ( "cop2 0x0F80416;" ) +#define gte_cc_b() __asm__ volatile ( "cop2 0x138041C;" ) +#define gte_cdp_b() __asm__ volatile ( "cop2 0x1280414;" ) +#define gte_dcpl_b() __asm__ volatile ( "cop2 0x0680029;" ) +#define gte_dpcs_b() __asm__ volatile ( "cop2 0x0780010;" ) +#define gte_dpct_b() __asm__ volatile ( "cop2 0x0180001;" ) +#define gte_intpl_b() __asm__ volatile ( "cop2 0x0980011;" ) +#define gte_gpf0_b() __asm__ volatile ( "cop2 0x190003D;" ) +#define gte_gpf12_b() __asm__ volatile ( "cop2 0x198003D;" ) +#define gte_gpl0_b() __asm__ volatile ( "cop2 0x1A0003E;" ) +#define gte_gpl12_b() __asm__ volatile ( "cop2 0x1A8003E;" ) +#define gte_mvmva_core_b( r0 ) __asm__ volatile ( \ + "cop2 %0" \ + : \ + : "g"( r0 ) ) +#define gte_mvmva_b(sf, mx, v, cv, lm) gte_mvmva_core_b( 0x0400012 | \ + ((sf)<<19) | ((mx)<<17) | ((v)<<15) | ((cv)<<13) | ((lm)<<10) ) + +#endif // _INLINE_C_H
\ No newline at end of file diff --git a/libpsn00b/include/inline_s.h b/libpsn00b/include/inline_s.h new file mode 100644 index 0000000..68e0d07 --- /dev/null +++ b/libpsn00b/include/inline_s.h @@ -0,0 +1,230 @@ +# Inline GTE macros for GNU assembler (as). +# +# Part of the PSn00bSDK Project by Lameguy64. +# 2019 Meido-Tek Productions +# +# Similar to inline_c.h, it does not require running your object file +# through some silly tool. + +.macro nRTPS + nop + nop + cop2 0x0180001 +.endm + +.macro nRTPT + nop + nop + cop2 0x0280030 +.endm + +.macro nNCLIP + nop + nop + cop2 0x1400006 +.endm + +.macro nAVSZ3 + nop + nop + cop2 0x158002D +.endm + +.macro nAVSZ4 + nop + nop + cop2 0x168002E +.endm + +.macro nMVMVA sf mx v cv lm + nop + nop + cop2 0x0400012|(\sf<<19)|(\mx<<17)|(\v<<15)|(\cv<<13)|(\lm<<10) +.endm + +.macro nSQR sf + nop + nop + cop2 0x0A00428|(\sf<<19) +.endm + +.macro nnOP sf lm # extra n to prevent conflict with the nop opcode + nop + nop + cop2 0x170000C|(\sf<<19)|(\lm<<10) +.endm + +.macro nNCS + nop + nop + cop2 0x0C8041E +.endm + +.macro nNCT + nop + nop + cop2 0x0D80420 +.endm + +.macro nNCCS + nop + nop + cop2 0x108041B +.endm + +.macro nNCCT + nop + nop + cop2 0x118043F +.endm + +.macro nNCDS + nop + nop + cop2 0x0E80413 +.endm + +.macro nNCDT + nop + nop + cop2 0x0F80416 +.endm + +.macro nCC + nop + nop + cop2 0x138041C +.endm + +.macro nCDP + nop + nop + cop2 0x1280414 +.endm + +.macro nDCPL + nop + nop + cop2 0x0680029 +.endm + +.macro nDPCS + nop + nop + cop2 0x0780010 +.endm + +.macro nDPCT + nop + nop + cop2 0x0180001 +.endm + +.macro nINTPL + nop + nop + cop2 0x0980011 +.endm + +.macro nGPF sf + nop + nop + cop2 0x190003D|(\sf<<19) +.endm + +.macro nGPL sf + nop + nop + cop2 0x1A0003E|(\sf<<19) +.endm + +# +# Macros without leading nops (for optimized usage) +# +.macro RTPS + cop2 0x0180001 +.endm + +.macro RTPT + cop2 0x0280030 +.endm + +.macro NCLIP + cop2 0x1400006 +.endm + +.macro AVSZ3 + cop2 0x158002D +.endm + +.macro AVSZ4 + cop2 0x168002E +.endm + +.macro MVMVA sf mx v cv lm + cop2 0x0400012|(\sf<<19)|(\mx<<17)|(\v<<15)|(\cv<<13)|(\lm<<10) +.endm + +.macro SQR sf + cop2 0x0A00428|(\sf<<19) +.endm + +.macro OP sf lm + cop2 0x170000C|(\sf<<19)|(\lm<<10) +.endm + +.macro NCS + cop2 0x0C8041E +.endm + +.macro NCT + cop2 0x0D80420 +.endm + +.macro NCCS + cop2 0x108041B +.endm + +.macro NCCT + cop2 0x118043F +.endm + +.macro NCDS + cop2 0x0E80413 +.endm + +.macro NCDT + cop2 0x0F80416 +.endm + +.macro CC + cop2 0x138041C +.endm + +.macro CDP + cop2 0x1280414 +.endm + +.macro DCPL + cop2 0x0680029 +.endm + +.macro DPCS + cop2 0x0780010 +.endm + +.macro DPCT + cop2 0x0180001 +.endm + +.macro INTPL + cop2 0x0980011 +.endm + +.macro GPF sf + cop2 0x190003D|(\sf<<19) +.endm + +.macro GPL sf + cop2 0x1A0003E|(\sf<<19) +.endm diff --git a/libpsn00b/include/lzconfig.h b/libpsn00b/include/lzconfig.h new file mode 100644 index 0000000..cb8a830 --- /dev/null +++ b/libpsn00b/include/lzconfig.h @@ -0,0 +1,68 @@ +/*! \file lzconfig.h + * \brief Library configuration header + * \details Define settings will only take effect when you recompile the library. + */ + +#ifndef _LZP_CONFIG_H +#define _LZP_CONFIG_H + + +#ifndef TRUE +#define TRUE 1 +#endif +#ifndef FALSE +#define FALSE 0 +#endif + + +/* Set to TRUE to compile without data compression routines useful if you + * plan to use this library on a program that does not require said routines + * especially on a platform with limited memory (such as the PlayStation). + * + * This define will rule out lzCompress(), lzSetHashSizes() and + * lzResetHashSizes() functions and their associated functions. + */ +#define LZP_NO_COMPRESS TRUE + + +/* Set to TRUE to make default compression table sizes to maximum and works best + * when compressing large amounts of data. LZP_USE_MALLOC must be set to TRUE to + * prevent stack overflow errors. + * + * Do not enable this if you plan to compile for a platform with limited memory + * otherwise, the library will consume all memory and crash the system. + * + * This define only affects lzCompress(). + */ +#define LZP_MAX_COMPRESS FALSE + + +/* Uncomment to make the library use malloc() instead of array initializers to + * allocate hash tables. Enabling this is a must if you plan to use large hash + * and window table sizes. + */ +#define LZP_USE_MALLOC FALSE + + +/* Hash table sizes (in power-of-two multiple units) + * + * These define only affect lzCompress(). + */ +#if LZP_MAX_COMPRESS == TRUE + +// Minimal defaults +#define LZP_WINDOW_SIZE 17 +#define LZP_HASH1_SIZE 8 +#define LZP_HASH2_SIZE 10 + +#else + +// Maximum defaults +#define LZP_WINDOW_SIZE 17 +#define LZP_HASH1_SIZE 22 +#define LZP_HASH2_SIZE 24 + +#endif + + +#endif // _LZP_CONFIG_H diff --git a/libpsn00b/include/malloc.h b/libpsn00b/include/malloc.h new file mode 100644 index 0000000..e6cd126 --- /dev/null +++ b/libpsn00b/include/malloc.h @@ -0,0 +1,17 @@ +#ifndef _MALLOC_H +#define _MALLOC_H + +#ifdef __cplusplus +extern "C" { +#endif + +unsigned int *GetBSSend(); +void InitHeap(unsigned int *addr, int size); +void *malloc(int size); +void free(void *ptr); + +#ifdef __cplusplus +} +#endif + +#endif // _MALLOC_H
\ No newline at end of file diff --git a/libpsn00b/include/psxapi.h b/libpsn00b/include/psxapi.h new file mode 100644 index 0000000..54b87ee --- /dev/null +++ b/libpsn00b/include/psxapi.h @@ -0,0 +1,97 @@ +#ifndef __PSXAPI__ +#define __PSXAPI__ + +typedef struct { // Device control block + char *name; + int flags; + int ssize; + char *desc; + void *f_init; + void *f_open; + void *f_inout; + void *f_close; + void *f_ioctl; + void *f_read; + void *f_write; + void *f_erase; + void *f_undelete; + void *f_firstfile; + void *f_nextfile; + void *f_format; + void *f_chdir; + void *f_rename; + void *f_remove; + void *f_testdevice; +} DCB; + +typedef struct { // File control block + int status; + unsigned int diskid; + void *trns_addr; + unsigned int trns_len; + unsigned int filepos; + unsigned int flags; + unsigned int lasterr; + DCB *dcb; + unsigned int filesize; + unsigned int lba; + unsigned int fcbnum; +} FCB; + +struct DIRENTRY { // Directory entry + char name[20]; + int attr; + int size; + struct DIRENTRY *next; + int head; + char system[4]; +}; + +// Not recommended to use these functions to install IRQ handlers + +typedef struct { + unsigned int* next; + unsigned int* func2; + unsigned int* func1; + unsigned int pad; +} INT_RP; + +extern void SysEnqIntRP(int pri, INT_RP *rp); +extern void SysDeqIntRP(int pri, INT_RP *rp); + +// Use event handlers instead + +extern int OpenEvent(unsigned int class, int spec, int mode, void (*func)()); +extern int CloseEvent(int ev_desc); +extern int EnableEvent(int ev_desc); +extern int DisableEvent(int ev_desc); + +// BIOS file functions + +extern int open(const char *name, int mode); +extern int close(int fd); +extern int seek(int fd, unsigned int offset, int mode); +extern int read(int fd, char *buff, unsigned int len); +extern int write(int fd, const char *buff, unsigned int len); +extern int ioctl(int fd, int cmd, int arg); +extern struct DIRENTRY *firstfile(const char *wildcard, struct DIRENTRY *entry); +extern struct DIRENTRY *nextfile(struct DIRENTRY *entry); +extern int erase(const char *name); +extern int chdir(const char *path); + +#define delete( p ) erase( p ) +#define cd( p ) chdir( p ) // For compatibility + +int AddDev(DCB *dcb); +int DelDev(const char *name); +extern void ListDev(); + +extern void EnterCriticalSection(); +extern void ExitCriticalSection(); + +extern void _96_init(); +extern void _96_remove(); + +extern void ChangeClearPAD(int mode); + +#endif diff --git a/libpsn00b/include/psxetc.h b/libpsn00b/include/psxetc.h new file mode 100644 index 0000000..67df29f --- /dev/null +++ b/libpsn00b/include/psxetc.h @@ -0,0 +1,15 @@ +#ifndef _PSXETC_H +#define _PSXETC_H + +#ifdef __cplusplus +extern "C" { +#endif + +void FntLoad(int x, int y); +char *FntSort(unsigned int *ot, char *pri, int x, int y, const char *text); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/libpsn00b/include/psxgpu.h b/libpsn00b/include/psxgpu.h new file mode 100644 index 0000000..24d023a --- /dev/null +++ b/libpsn00b/include/psxgpu.h @@ -0,0 +1,556 @@ +#ifndef __PSXGPU_H +#define __PSXGPU_H + +// Low-level display parameters for DISPENV_RAW. A leftover from prototyping +#define DISP_WIDTH_256 0 +#define DISP_WIDTH_320 1 +#define DISP_WIDTH_384 64 +#define DISP_WIDTH_512 2 +#define DISP_WIDTH_640 3 + +#define DISP_HEIGHT_LOW 0 // Could be 240 for NTSC, 256 for PAL +#define DISP_HEIGHT_HIGH 4 // Could be 480 for NTSC, 512 for PAL +#define DISP_INTERLACE 32 +#define DISP_24BIT_COLOR 16 +#define DISP_MODE_NTSC 0 +#define DISP_MODE_PAL 8 + + +#define MODE_NTSC 0 +#define MODE_PAL 1 + + +// Vector macros + +#define setVector( v, _x, _y, _z ) \ + (v)->vx = _x, (v)->vy = _y, (v)->vz = _z + +#define setRECT( r, _x, _y, _w, _h ) \ + (v)->x = _x, (v)->y = _y, (v)->w = _w, (v)->h = _h + + + + + +// Primitive macros + + +#define setDrawTPage( p, tp, abr, x, y ) \ + ( (p)->code[0] = getTPage( tp, abr, x, y ), \ + setlen( p, 1 ), setcode( p, 0xe1 ) ) + +/** ORIGINAL FUNCTION **/ +#define setDrawTPageVal( p, tp ) \ + ( (p)->code[0] = tp, \ + setlen( p, 1 ), setcode( p, 0xe1 ) ) + +/*#define setVram2Vram( p ) ( setlen( p, 8 ), setcode( p, 0x80 ), \ + (p)->nop[0] = 0, (p)->nop[1] = 0, (p)->nop[2] = 0, (p)->nop[3] = 0 )*/ + +/* + +#define setTPagePri2( p, dth, tp, abr, x, y ) \ + ( (p)->code[0] = getTPage( tp, abr, x, y )|(dth<<9), \ + setlen( p, 1 ), setcode( p, 0xe1 ) )*/ + +/* + * Set primitive attributes + */ +#define setTPage( p, tp, abr, x, y ) \ + ( (p)->tpage = getTPage( tp, abr, x, y ) ) + +#define setClut( p, x, y ) \ + ( (p)->clut = getClut(x, y) ) + + +/* + * Set primitive colors + */ +#define setRGB0( p, r, g, b ) ( (p)->r0 = r, (p)->g0 = g, (p)->b0 = b ) +#define setRGB1( p, r, g, b ) ( (p)->r1 = r, (p)->g1 = g, (p)->b1 = b ) +#define setRGB2( p, r, g, b ) ( (p)->r2 = r, (p)->g2 = g, (p)->b2 = b ) +#define setRGB3( p, r, g, b ) ( (p)->r3 = r, (p)->g3 = g, (p)->b3 = b ) + + +/* + * Set primitive screen coordinates + */ +#define setXY0( p, _x0, _y0 ) \ + (p)->x0 = _x0, (p)->y0 = _y0 + +#define setXY2( p, _x0, _y0, _x1, _y1 ) \ + (p)->x0 = _x0, (p)->y0 = _y0, \ + (p)->x1 = _x1, (p)->y1 = _y1 + +#define setXY3( p, _x0, _y0, _x1, _y1, _x2, _y2 ) \ + (p)->x0 = _x0, (p)->y0 = _y0, \ + (p)->x1 = _x1, (p)->y1 = _y1, \ + (p)->x2 = _x2, (p)->y2 = _y2 + +#define setXY4( p, _x0, _y0, _x1, _y1, _x2, _y2, _x3, _y3 ) \ + (p)->x0 = _x0, (p)->y0 = _y0, \ + (p)->x1 = _x1, (p)->y1 = _y1, \ + (p)->x2 = _x2, (p)->y2 = _y2, \ + (p)->x3 = _x3, (p)->y3 = _y3 + +#define setWH( p, _w, _h ) \ + (p)->w = _w, (p)->h = _h + + +/* + * Set texture coordinates + */ +#define setUV0( p, _u0, _v0 ) \ + (p)->u0 = _u0, (p)->v0 = _v0 + +#define setUV3( p, _u0, _v0, _u1, _v1, _u2, _v2 ) \ + (p)->u0 = _u0, (p)->v0 = _v0, \ + (p)->u1 = _u1, (p)->v1 = _v1, \ + (p)->u2 = _u2, (p)->v2 = _v2 + +#define setUV4( p, _u0, _v0, _u1, _v1, _u2, _v2, _u3, _v3 ) \ + (p)->u0 = _u0, (p)->v0 = _v0, \ + (p)->u1 = _u1, (p)->v1 = _v1, \ + (p)->u2 = _u2, (p)->v2 = _v2, \ + (p)->u3 = _u3, (p)->v3 = _v3 + +#define setUVWH( p, _u0, _v0, _w, _h ) \ + (p)->u0 = _u0, (p)->v0 = _v0, \ + (p)->u1 = _u1+(_w), (p)->v1 = _v1, \ + (p)->u2 = _u2, (p)->v2 = _v2+(_h), \ + (p)->u2 = _u3+(_h), (p)->v2 = _v3+(_h) + + +/* + * Primitive handling macros + */ +#define setlen( p, _len ) ( ((P_TAG*)(p))->len = (unsigned char)_len ) +#define setaddr( p, _addr ) ( ((P_TAG*)(p))->addr = (unsigned int)_addr ) +#define setcode( p, _code ) ( ((P_TAG*)(p))->code = (unsigned char)_code ) + +#define getlen( p ) ( ((P_TAG*)(p))->len ) +#define getaddr( p ) ( ((P_TAG*)(p))->addr ) +#define getcode( p ) ( ((P_TAG*)(p))->code ) + +#define nextPrim( p ) (void*)((((P_TAG*)(p))->addr)|0x80000000) +#define isendprim( p ) ((((P_TAG*)(p))->addr)==0xffffff) + +#define addPrim( ot, p ) setaddr( p, getaddr( ot ) ), setaddr( ot, p ) +#define addPrims(ot, p0, p1) setaddr( p1, getaddr( ot ) ), setaddr( ot, p0 ) + +#define catPrim( p0, p1 ) setaddr( p0, p1 ) +#define termPrim( p ) setaddr( p, 0xffffffff ) + +#define setSemiTrans( p, abe ) \ + ( (abe)?setcode( p, getcode( p )|0x2 ):setcode( p, getcode( p )&~0x2 ) ) + +#define setShadeTex( p, tge ) \ + ( (tge)?setcode( p, getcode( p )|0x1 ):setcode( p, getcode( p )&~0x1 ) ) + + +/* ORIGINAl CODE */ +#define setDrawMask( p, sb, mt ) \ + setlen( p, 1 ), p->code[0] = sb|(mt<<1), \ + setcode( p, 0xe6 ) + + +#define getTPage( tp, abr, x, y ) \ + ( (((x)&0x3ff)>>6) | (((y)>>8)<<4) | (((abr)&0x3)<<5) | (((tp)&0x3)<<7) ) + +#define getClut( x, y ) \ + ( ((y)<<6)|(((x)>>4)&0x3f) ) + + +/* + * Primitive initializers + */ +#define setPolyF3( p ) setlen( p, 4 ), setcode( p, 0x20 ) +#define setPolyFT3( p ) setlen( p, 7 ), setcode( p, 0x24 ) +#define setPolyG3( p ) setlen( p, 6 ), setcode( p, 0x30 ) +#define setPolyGT3( p ) setlen( p, 9 ), setcode( p, 0x34 ) + +#define setPolyF4( p ) setlen( p, 5 ), setcode( p, 0x28 ) +#define setPolyFT4( p ) setlen( p, 9 ), setcode( p, 0x2c ) +#define setPolyG4( p ) setlen( p, 8 ), setcode( p, 0x38 ) +#define setPolyGT4( p ) setlen( p, 12 ), setcode( p, 0x3c ) + +#define setSprt8( p ) setlen( p, 3 ), setcode( p, 0x74 ) +#define setSprt16( p ) setlen( p, 3 ), setcode( p, 0x7c ) +#define setSprt( p ) setlen( p, 4 ), setcode( p, 0x64 ) + +#define setTile1( p ) setlen( p, 2 ), setcode( p, 0x68 ) +#define setTile8( p ) setlen( p, 2 ), setcode( p, 0x70 ) +#define setTile16( p ) setlen( p, 2 ), setcode( p, 0x78 ) +#define setTile( p ) setlen( p, 3 ), setcode( p, 0x60 ) + +#define setLineG2( p ) setlen( p, 4 ), setcode( p, 0x50 ) + +#define setLineF4( p ) setlen( p, 6 ), setcode( p, 0x4c ), (p)->pad = 0x55555555 +#define setLineG4( p ) setlen( p, 9 ), setcode( p, 0x5c ), (p)->pad = 0x55555555, \ + (p)->p2 = 0, (p)->p3 = 0 + +#define setFill( p ) setlen( p, 3 ), setcode( p, 0x02 ) + + +/* + * Primitive definitions + */ +typedef struct { + unsigned int addr:24; + unsigned int len:8; + unsigned char r,g,b; + unsigned char code; +} P_TAG; + +/* + * Polygon primitive definitions + */ +typedef struct { + unsigned int tag; + unsigned char r0,g0,b0,code; + short x0,y0; + short x1,y1; + short x2,y2; +} POLY_F3; + +typedef struct { + unsigned int tag; + unsigned char r0,g0,b0,code; + short x0,y0; + unsigned char u0,v0; + unsigned short clut; + short x1,y1; + unsigned char u1,v1; + unsigned short tpage; + short x2,y2; + unsigned char u2,v2; + unsigned short pad; +} POLY_FT3; + +typedef struct { + unsigned int tag; + unsigned char r0,g0,b0,code; + short x0,y0; + unsigned char r1,g1,b1,pad0; + short x1,y1; + unsigned char r2,g2,b2,pad1; + short x2,y2; +} POLY_G3; + +typedef struct { + unsigned int tag; + unsigned char r0,g0,b0,code; + short x0,y0; + unsigned char u0,v0; + unsigned short clut; + unsigned char r1,g1,b1,pad0; + short x1,y1; + unsigned char u1,v1; + unsigned short tpage; + unsigned char r2,g2,b2,pad1; + short x2,y2; + unsigned char u2,v2; + unsigned short pad2; +} POLY_GT3; + +typedef struct { + unsigned int tag; + unsigned char r0,g0,b0,code; + short x0,y0; + short x1,y1; + short x2,y2; + short x3,y3; +} POLY_F4; + +typedef struct { + unsigned int tag; + unsigned char r0,g0,b0,code; + short x0,y0; + unsigned char u0,v0; + unsigned short clut; + short x1,y1; + unsigned char u1,v1; + unsigned short tpage; + short x2,y2; + unsigned char u2,v2; + unsigned short pad0; + short x3,y3; + unsigned char u3,v3; + unsigned short pad1; +} POLY_FT4; + +typedef struct { + unsigned int tag; + unsigned char r0,g0,b0,code; + short x0,y0; + unsigned char r1,g1,b1,pad0; + short x1,y1; + unsigned char r2,g2,b2,pad1; + short x2,y2; + unsigned char r3,g3,b3,pad2; + short x3,y3; +} POLY_G4; + +typedef struct { + unsigned int tag; + unsigned char r0,g0,b0,code; + short x0,y0; + unsigned char u0,v0; + unsigned short clut; + unsigned char r1,g1,b1,pad0; + short x1,y1; + unsigned char u1,v1; + unsigned short tpage; + unsigned char r2,g2,b2,pad1; + short x2,y2; + unsigned char u2,v2; + unsigned short pad2; + unsigned char r3,g3,b3,pad3; + short x3,y3; + unsigned char u3,v3; + unsigned short pad4; +} POLY_GT4; + +/* + * Line primitive definitions + */ +typedef struct { + unsigned int tag; + unsigned char r0,g0,b0,code; + short x0,y0; + short x1,y1; +} LINE_F2; + +typedef struct { + unsigned int tag; + unsigned char r0,g0,b0,code; + short x0,y0; + unsigned char r1,g1,b1,p1; + short x1,y1; +} LINE_G2; + +typedef struct { + unsigned int tag; + unsigned char r0,g0,b0,code; + short x0,y0; + short x1,y1; + short x2,y2; + unsigned int pad; +} LINE_F3; + +typedef struct { + unsigned int tag; + unsigned char r0,g0,b0,code; + short x0,y0; + unsigned char r1,g1,b1,p1; + short x1,y1; + unsigned char r2,g2,b2,p2; + short x2,y2; + unsigned int pad; +} LINE_G3; + +typedef struct { + unsigned int tag; + unsigned char r0,g0,b0,code; + short x0,y0; + short x1,y1; + short x2,y2; + short x3,y3; + unsigned int pad; +} LINE_F4; + +typedef struct { + unsigned int tag; + unsigned char r0,g0,b0,code; + short x0,y0; + unsigned char r1,g1,b1,p1; + short x1,y1; + unsigned char r2,g2,b2,p2; + short x2,y2; + unsigned char r3,g3,b3,p3; + short x3,y3; + unsigned int pad; +} LINE_G4; + +/* + * Tile and sprite primitive definitions + */ +typedef struct { + unsigned int tag; + unsigned char r0,g0,b0,code; + short x0,y0; + short w,h; +} TILE; + +typedef struct { + unsigned int tag; + unsigned char r0,g0,b0,code; + short x0,y0; +} TILE_1; + +typedef struct { + unsigned int tag; + unsigned char r0,g0,b0,code; + short x0,y0; +} TILE_8; + +typedef struct { + unsigned int tag; + unsigned char r0,g0,b0,code; + short x0,y0; +} TILE_16; + +/* + * Sprite primitive definitions + */ +typedef struct { + unsigned int tag; + unsigned char r0,g0,b0,code; + short x0,y0; + unsigned char u0,v0; + unsigned short clut; + unsigned short w,h; +} SPRT; + +typedef struct { + unsigned int tag; + unsigned char r0,g0,b0,code; + short x0,y0; + unsigned char u0,v0; + unsigned short clut; +} SPRT_8; + +typedef struct { + unsigned int tag; + unsigned char r0,g0,b0,code; + short x0,y0; + unsigned char u0,v0; + unsigned short clut; +} SPRT_16; + +/* + * VRAM fill and transfer primitive definitions + */ +typedef struct { + unsigned int tag; + unsigned char r0,g0,b0,code; + unsigned short x0,y0; // Note: coordinates must be in 16 pixel steps + unsigned short w,h; +} FILL; + +typedef struct { + unsigned int tag; + unsigned char p0,p1,p2,code; + unsigned short x0,y0; + unsigned short x1,y1; + unsigned short w,h; + unsigned int nop[4]; +} VRAM2VRAM; + +typedef struct { + unsigned int tag; + unsigned int code[15]; +} DR_ENV; + +typedef struct { + unsigned int tag; + unsigned int code[2]; +} DR_TWIN; + +typedef struct { + unsigned int tag; + unsigned int code[1]; +} DR_TPAGE; + +typedef struct { /* ORIGINAL CODE */ + unsigned int tag; + unsigned int code[1]; +} DR_MASK; + + +// General structs + +typedef struct { + short x,y; + short w,h; +} RECT; + +typedef struct { + unsigned int vid_mode; // Video mode + short vid_xpos,vid_ypos; // Video position (not framebuffer) + short fb_x,fb_y; // Framebuffer display position +} DISPENV_RAW; + +typedef struct { + RECT disp; + RECT screen; + char isinter; + char isrgb24; + char reverse; + char pad; +} DISPENV; + +typedef struct { + RECT clip; // Drawing area + short ofs[2]; // GPU draw offset (relative to draw area) + RECT tw; // Texture window (doesn't do anything atm) + unsigned short tpage; // Initial tpage value + unsigned char dtd; // Dither processing flag (simply OR'ed to tpage) + unsigned char dfe; // Drawing to display area blocked/allowed (simply OR'ed to tpage) + unsigned char isbg; // Clear draw area if non-zero + unsigned char r0,g0,b0; // Draw area clear color (if isbg iz nonzero) + DR_ENV dr_env; // Draw mode packet area (used by PutDrawEnv) +} DRAWENV; + +typedef struct { + unsigned int mode; + RECT *crect; + unsigned int *caddr; + RECT *prect; + unsigned int *paddr; +} TIM_IMAGE; + + +#ifdef __cplusplus +extern "C" { +#endif + +// Function definitions (asm) + +void ResetGraph(int mode); + +int GetVideoMode(); +void SetVideoMode(int mode); + +void PutDispEnvRaw(DISPENV_RAW *disp); +void PutDispEnv(DISPENV *disp); +void PutDrawEnv(DRAWENV *draw); + +void SetDispMask(int mask); + +void VSync(); +void DrawSync(); +void WaitGPUcmd(); +void WaitGPUdma(); + +void VSyncCallback(void (*func)()); + +void LoadImage(RECT *rect, unsigned int *data); + +void ClearOTagR(unsigned int* ot, int n); +void DrawOTag(unsigned int* ot); + +void AddPrim(unsigned int* ot, void* pri); + +// Function definitions (C) + +int GetTimInfo(unsigned int *tim, TIM_IMAGE *timimg); + +DISPENV *SetDefDispEnv(DISPENV *disp, int x, int y, int w, int h); +DRAWENV *SetDefDrawEnv(DRAWENV *draw, int x, int y, int w, int h); + +#ifdef __cplusplus +} +#endif + +#endif
\ No newline at end of file diff --git a/libpsn00b/include/psxgte.h b/libpsn00b/include/psxgte.h new file mode 100644 index 0000000..0a8ded0 --- /dev/null +++ b/libpsn00b/include/psxgte.h @@ -0,0 +1,72 @@ +#ifndef _PSXGTE_H +#define _PSXGTE_H + + +#define ONE 4096 + + +// For compatibility with official library syntax +#define csin(a) isin(a) +#define ccos(a) icos(a) +#define rsin(a) isin(a) +#define rcos(a) icos(a) + + +typedef struct { + short m[3][3]; + int t[3]; +} MATRIX; + +typedef struct { + int vx, vy, vz; +} VECTOR; + +typedef struct { + short vx, vy, vz, pad; +} SVECTOR; + +typedef struct { + unsigned char r, g, b, cd; +} CVECTOR; + + +#ifdef __cplusplus +extern "C" { +#endif + +void InitGeom(); + +// Integer SIN/COS functions (4096 = 360 degrees) +// Does not use tables! +int isin(int a); +int icos(int a); + +// Higher precision integer sin/cos functions (131072 = 360 degrees) +// Does not use tables! +int hisin(int a); +int hicos(int a); + +void PushMatrix(); +void PopMatrix(); + +MATRIX *RotMatrix(SVECTOR *r, MATRIX *m); +MATRIX *HiRotMatrix(VECTOR *r, MATRIX *m); + +MATRIX *TransMatrix(MATRIX *m, VECTOR *r); +MATRIX *ScaleMatrix(MATRIX *m, VECTOR *s); + +MATRIX *MulMatrix(MATRIX *m0, MATRIX *m1); +MATRIX *MulMatrix0(MATRIX *m0, MATRIX *m1, MATRIX *m2); + +MATRIX *CompMatrixLV(MATRIX *v0, MATRIX *v1, MATRIX *v2); +VECTOR *ApplyMatrixLV(MATRIX *m, VECTOR *v0, VECTOR *v1); + +void VectorNormalS(VECTOR *v0, SVECTOR *v1); + +void Square0(VECTOR *v0, VECTOR *v1); + +#ifdef __cplusplus +} +#endif + +#endif // _PSXGTE_H diff --git a/libpsn00b/include/psxkernel.h b/libpsn00b/include/psxkernel.h new file mode 100644 index 0000000..0c55bcb --- /dev/null +++ b/libpsn00b/include/psxkernel.h @@ -0,0 +1,45 @@ +#ifndef _PSXKERNEL_H +#define _PSXKERNEL_H + +// Event descriptors +#define DescMask 0xff000000 // Event descriptor mask +#define DescTH DescMask +#define DescHW 0xf0000000 // Hardware event (IRQ) +#define DescEV 0xf1000000 // Event event +#define DescRC 0xf2000000 // Root counter event +#define DescUEV 0xf3000000 // User event +#define DescSW 0xf4000000 // BIOS event + +// Hardware events +#define HwVBLANK (DescHW|0x01) // VBlank +#define HwGPU (DescHW|0x02) // GPU +#define HwCdRom (DescHW|0x03) // CDROM +#define HwDMAC (DescHW|0x04) // DMA +#define HwRTC0 (DescHW|0x05) // Timer 0 +#define HwRTC1 (DescHW|0x06) // Timer 1 +#define HwRTC2 (DescHW|0x07) // Timer 2 +#define HwCNTL (DescHW|0x08) // Controller +#define HwSPU (DescHW|0x09) // SPU +#define HwPIO (DescHW|0x0a) // PIO & lightgun +#define HwSIO (DescHW|0x0b) // Serial + +#define HwCPU (DescHW|0x10) // Processor exception +#define HwCARD (DescHW|0x11) // Memory card (lower level BIOS functions) +#define HwCard_0 (DescHW|0x12) // Memory card (unused) +#define HwCard_1 (DescHW|0x13) // Memory card (unused) +#define SwCARD (DescSW|0x01) // Memory card (higher level BIOS functions) +#define SwMATH (DescSW|0x02) // Libmath related apparently, unknown purpose + +#define RCntCNT0 (DescRC|0x00) // Root counter 0 (dot clock) +#define RCntCNT1 (DescRC|0x01) // Horizontal sync +#define RCntCNT2 (DescRC|0x02) // 1/8 of system clock +#define RCntCNT3 (DescRC|0x03) // Vertical blank + +#define RCntMdINTR 0x1000 // General interrupt +#define RCntMdNOINTR 0x2000 // New device +#define RCntMdSC 0x0001 // Counter becomes zero +#define RCntMdSP 0x0000 // Unknown purpose +#define RCntMdFR 0x0000 +#define RCntMdGATE 0x0010 // Command acknowledged + +#endif // _PSXKERNEL_H
\ No newline at end of file diff --git a/libpsn00b/include/psxpad.h b/libpsn00b/include/psxpad.h new file mode 100644 index 0000000..09d17b1 --- /dev/null +++ b/libpsn00b/include/psxpad.h @@ -0,0 +1,108 @@ +/* Controller support header + * Part of PSn00bSDK + * 2019 Lameguy64 / Meido-Tek Productions + * + * Currently only provides a bunch of definitions and a few structs but no + * handling functions yet. Use the code in pad.s in one of the sample + * programs for the meantime instead. + * + * Work in progress, subject to change significantly in future releases. + */ + +#ifndef _PSXPAD_H +#define _PSXPAD_H + +// Pad button definitions for digital pad, joystick, dual analog, +// Dualshock and Jogcon +#define PAD_SELECT 1 +#define PAD_L3 2 +#define PAD_R3 4 +#define PAD_START 8 +#define PAD_UP 16 +#define PAD_RIGHT 32 +#define PAD_DOWN 64 +#define PAD_LEFT 128 +#define PAD_L2 256 +#define PAD_R2 512 +#define PAD_L1 1024 +#define PAD_R1 2048 +#define PAD_TRIANGLE 4096 +#define PAD_CIRCLE 8192 +#define PAD_CROSS 16384 +#define PAD_SQUARE 32768 + +// Mouse button definitions +#define MOUSE_RIGHT 1024 +#define MOUSE_LEFT 2048 + +// neGcon button definitions +#define NCON_START 8 +#define NCON_UP 16 +#define NCON_RIGHT 32 +#define NCON_DOWN 64 +#define NCON_LEFT 128 +#define NCON_R 256 +#define NCON_B 512 +#define NCON_A 1024 + +// Guncon button definitions +#define GCON_A 8 +#define GCON_TRIGGER 8192 +#define GCON_B 16384 + +// Struct for digital, joystick, dual analog and Dualshock controllers +typedef struct { + unsigned char stat; // Status + unsigned char len:4; // Data length (in halfwords) + unsigned char type:4; // Device type: + // 0x4 - digital pad + // 0x5 - analog joystick + // 0x7 - dual analog & Dualshock + unsigned short btn; // Button states + unsigned char rs_x,rs_y; // Right stick coordinates + unsigned char ls_x,ls_y; // Left stick coordinates +} PADTYPE; + +// Struct for a mouse controller +typedef struct { + unsigned char stat; + unsigned char len:4; + unsigned char type:4; // Device type (0x1) + unsigned char btn; + char x_mov; // X movement of mouse + char y_mov; // Y movement of mouse +} MOUSETYPE; + +// Struct for a neGcon controller (for Namco neGcon) +typedef struct { + unsigned char stat; + unsigned char len:4; + unsigned char type:4; // (0x2) + unsigned short btn; + unsigned char twist; // Controller twist + unsigned char btn_i; // I button value + unsigned char btn_ii; // II button value + unsigned char trg_l; // L trigger value +} NCONTYPE; + +// Struct for a Jogcon controller (for Namco Jogcon) +typedef struct { + unsigned char stat; + unsigned char len:4; + unsigned char type:4; // (0xE) + unsigned short btn; + unsigned short jog_rot; // Jog rotation +} JCONTYPE; + +// Struct for a Gun-Con controller (for Namco Gun-Con) +typedef struct { + unsigned char status; + unsigned char len:4; + unsigned char type:4; // (0x6) + unsigned short btn; + unsigned short gun_x; // Gun X position in dotclocks + unsigned short gun_y; // Gun Y position in scanlines +} GCONTYPE; + + +#endif
\ No newline at end of file diff --git a/libpsn00b/include/psxspu.h b/libpsn00b/include/psxspu.h new file mode 100644 index 0000000..a87e347 --- /dev/null +++ b/libpsn00b/include/psxspu.h @@ -0,0 +1,138 @@ +#ifndef __PSXSPU_H +#define __PSXSPU_H + +#include <sys/types.h> + +// Mask settings bits for specifying voice channels + +#define SPU_00CH (1<<0) +#define SPU_01CH (1<<1) +#define SPU_02CH (1<<2) +#define SPU_03CH (1<<3) +#define SPU_04CH (1<<4) +#define SPU_05CH (1<<5) +#define SPU_06CH (1<<6) +#define SPU_07CH (1<<7) +#define SPU_08CH (1<<8) +#define SPU_09CH (1<<9) +#define SPU_10CH (1<<10) +#define SPU_11CH (1<<11) +#define SPU_12CH (1<<12) +#define SPU_13CH (1<<13) +#define SPU_14CH (1<<14) +#define SPU_15CH (1<<15) +#define SPU_16CH (1<<16) +#define SPU_17CH (1<<17) +#define SPU_18CH (1<<18) +#define SPU_19CH (1<<19) +#define SPU_20CH (1<<20) +#define SPU_21CH (1<<21) +#define SPU_22CH (1<<22) +#define SPU_23CH (1<<23) + +#define SPU_0CH SPU_00CH +#define SPU_1CH SPU_01CH +#define SPU_2CH SPU_02CH +#define SPU_3CH SPU_03CH +#define SPU_4CH SPU_04CH +#define SPU_5CH SPU_05CH +#define SPU_6CH SPU_06CH +#define SPU_7CH SPU_07CH +#define SPU_8CH SPU_08CH +#define SPU_9CH SPU_09CH + +#define SPU_KEYCH(x) (1<<(x)) +#define SPU_VOICECH(x) SPU_KEYCH(x) + + +// Mask setting bits for SpuVoiceAttr.mask + +#define SPU_VOICE_VOLL (1<<0) // Left volume +#define SPU_VOICE_VOLR (1<<1) // Right volume +#define SPU_VOICE_VOLMODEL (1<<2) // Left volume mode +#define SPU_VOICE_VOLMODER (1<<3) // Right volume mode +#define SPU_VOICE_PITCH (1<<4) // Pitch tone +#define SPU_VOICE_NOTE (1<<5) // Pitch note +#define SPU_VOICE_SAMPLE_NOTE (1<<6) // Sample base frequency? +#define SPU_VOICE_WDSA (1<<7) // Sample start address (in SPU RAM) +#define SPU_VOICE_ADSR_AMODE (1<<8) // ADSR attack mode +#define SPU_VOICE_ADSR_SMODE (1<<9) // ADSR sustain mode +#define SPU_VOICE_ADSR_RMODE (1<<10) // ADSR release mode +#define SPU_VOICE_ADSR_AR (1<<11) // ADSR attack rate +#define SPU_VOICE_ADSR_DR (1<<12) // ADSR decay rate +#define SPU_VOICE_ADSR_SR (1<<13) // ADSR sustain rate +#define SPU_VOICE_ADSR_RR (1<<14) // ADSR release rate +#define SPU_VOICE_ADSR_SL (1<<15) // ADSR sustain level +#define SPU_VOICE_LSAX (1<<16) // Loop start address (in SPU RAM) +#define SPU_VOICE_ADSR_ADSR1 (1<<17) // adsr1 for VagAtr (?) +#define SPU_VOICE_ADSR_ADSR2 (1<<18) // adsr2 for VagAtr (?) + + +#define SPU_TRANSFER_BY_DMA 0 + + +typedef struct { + short left; + short right; +} SpuVolume; + +typedef struct { + SpuVolume vol; // 0 + unsigned short freq; // 4 + unsigned short addr; // 6 + unsigned short loop_addr; // 8 + unsigned short res; // 10 + unsigned int adsr_param; // 12 +} SpuVoiceRaw; + +typedef struct { + u_int voice; + u_int mask; + SpuVolume volume; + SpuVolume volmode; + SpuVolume volumex; + u_short pitch; + u_short note; + u_short sample_note; + short envx; + u_int addr; + u_int loop_addr; + int a_mode; + int s_mode; + int r_mode; + u_short ar; + u_short dr; + u_short sr; + u_short rr; + u_short sl; + u_short adsr1; + u_short adsr2; +} SpuVoiceAttr; + +#ifdef __cplusplus +extern "C" { +#endif + +void SpuInit(); + +void SpuSetVoiceRaw( int voice, SpuVoiceRaw* param ); +void SpuReverbOn( int voice ); +void SpuSetReverb(); + +void SpuSetReverbAddr( int addr ); +void SpuSetReverbVolume( int left, int right ); + + +void SpuSetKey(int on_off, u_int voice_bit); + +// SPU transfer functions +int SpuSetTransferMode(int mode); +int SpuSetTransferStartAddr(int addr); +int SpuWrite(unsigned char* addr, int size); +void SpuWait(); + +#ifdef __cplusplus +} +#endif + +#endif
\ No newline at end of file diff --git a/libpsn00b/include/stdarg.h b/libpsn00b/include/stdarg.h new file mode 100644 index 0000000..bdf4c00 --- /dev/null +++ b/libpsn00b/include/stdarg.h @@ -0,0 +1,122 @@ +/* Copyright (C) 1989-2018 Free Software Foundation, Inc. +This file is part of GCC. +GCC 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 3, or (at your option) +any later version. +GCC 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. +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +<http://www.gnu.org/licenses/>. */ + +/* + * ISO C Standard: 7.15 Variable arguments <stdarg.h> + */ + +#ifndef _STDARG_H +#ifndef _ANSI_STDARG_H_ +#ifndef __need___va_list +#define _STDARG_H +#define _ANSI_STDARG_H_ +#endif /* not __need___va_list */ +#undef __need___va_list + +/* Define __gnuc_va_list. */ + +#ifndef __GNUC_VA_LIST +#define __GNUC_VA_LIST +typedef __builtin_va_list __gnuc_va_list; +#endif + +/* Define the standard macros for the user, + if this invocation was from the user program. */ +#ifdef _STDARG_H + +#define va_start(v,l) __builtin_va_start(v,l) +#define va_end(v) __builtin_va_end(v) +#define va_arg(v,l) __builtin_va_arg(v,l) +#if !defined(__STRICT_ANSI__) || __STDC_VERSION__ + 0 >= 199900L \ + || __cplusplus + 0 >= 201103L +#define va_copy(d,s) __builtin_va_copy(d,s) +#endif +#define __va_copy(d,s) __builtin_va_copy(d,s) + +/* Define va_list, if desired, from __gnuc_va_list. */ +/* We deliberately do not define va_list when called from + stdio.h, because ANSI C says that stdio.h is not supposed to define + va_list. stdio.h needs to have access to that data type, + but must not use that name. It should use the name __gnuc_va_list, + which is safe because it is reserved for the implementation. */ + +#ifdef _BSD_VA_LIST +#undef _BSD_VA_LIST +#endif + +#if defined(__svr4__) || (defined(_SCO_DS) && !defined(__VA_LIST)) +/* SVR4.2 uses _VA_LIST for an internal alias for va_list, + so we must avoid testing it and setting it here. + SVR4 uses _VA_LIST as a flag in stdarg.h, but we should + have no conflict with that. */ +#ifndef _VA_LIST_ +#define _VA_LIST_ +#ifdef __i860__ +#ifndef _VA_LIST +#define _VA_LIST va_list +#endif +#endif /* __i860__ */ +typedef __gnuc_va_list va_list; +#ifdef _SCO_DS +#define __VA_LIST +#endif +#endif /* _VA_LIST_ */ +#else /* not __svr4__ || _SCO_DS */ + +/* The macro _VA_LIST_ is the same thing used by this file in Ultrix. + But on BSD NET2 we must not test or define or undef it. + (Note that the comments in NET 2's ansi.h + are incorrect for _VA_LIST_--see stdio.h!) */ +#if !defined (_VA_LIST_) || defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__sequent__) || defined (__FreeBSD__) || defined(WINNT) +/* The macro _VA_LIST_DEFINED is used in Windows NT 3.5 */ +#ifndef _VA_LIST_DEFINED +/* The macro _VA_LIST is used in SCO Unix 3.2. */ +#ifndef _VA_LIST +/* The macro _VA_LIST_T_H is used in the Bull dpx2 */ +#ifndef _VA_LIST_T_H +/* The macro __va_list__ is used by BeOS. */ +#ifndef __va_list__ +typedef __gnuc_va_list va_list; +#endif /* not __va_list__ */ +#endif /* not _VA_LIST_T_H */ +#endif /* not _VA_LIST */ +#endif /* not _VA_LIST_DEFINED */ +#if !(defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__sequent__) || defined (__FreeBSD__)) +#define _VA_LIST_ +#endif +#ifndef _VA_LIST +#define _VA_LIST +#endif +#ifndef _VA_LIST_DEFINED +#define _VA_LIST_DEFINED +#endif +#ifndef _VA_LIST_T_H +#define _VA_LIST_T_H +#endif +#ifndef __va_list__ +#define __va_list__ +#endif + +#endif /* not _VA_LIST_, except on certain systems */ + +#endif /* not __svr4__ */ + +#endif /* _STDARG_H */ + +#endif /* not _ANSI_STDARG_H_ */ +#endif /* not _STDARG_H */
\ No newline at end of file diff --git a/libpsn00b/include/stdio.h b/libpsn00b/include/stdio.h new file mode 100644 index 0000000..5ee9e9b --- /dev/null +++ b/libpsn00b/include/stdio.h @@ -0,0 +1,47 @@ +#ifndef _STDIO_H +#define _STDIO_H + +#include <stdarg.h> + +#ifndef NULL +#define NULL (void*)0 +#endif + +// BIOS seek modes +#ifndef SEEK_SET +#define SEEK_SET 0 +#endif +#ifndef SEEK_CUR +#define SEEK_CUR 1 +#endif +#ifndef SEEK_END +#define SEEK_END 2 /* warning: reportedly buggy */ +#endif + +#ifndef _SIZE_T +#define _SIZE_T +typedef unsigned int size_t; +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +// The following functions use the BIOS +extern void printf (const char *__format, ...); + +extern int getc(int __fd); +extern int putc(int __char, int __fd); +extern void putchar(int __c); + +// The following functions do not use the BIOS +int vsnprintf(char *string, unsigned int size, char *fmt, va_list ap); +int vsprintf(char *string, char *fmt, va_list ap); +int sprintf(char *string, char *fmt, ...); +int snprintf(char *string, unsigned int size, char *fmt, ...); + +#ifdef __cplusplus +} +#endif + +#endif // _STDIO_H
\ No newline at end of file diff --git a/libpsn00b/include/stdlib.h b/libpsn00b/include/stdlib.h new file mode 100644 index 0000000..3909796 --- /dev/null +++ b/libpsn00b/include/stdlib.h @@ -0,0 +1,57 @@ +/* + * stdlib.h + * + * Standard library functions + * + * Inherited from PSXSDK + */ + +#ifndef _STDLIB_H +#define _STDLIB_H + +#define RAND_MAX 0x7fff + +/* Conversion functions (not yet implemented) */ + +/* +extern int atoi(char *s); +extern long atol(char *s); +extern char atob(char *s); // Is this right? +*/ + +// Random number functions (not yet implemented) + +/* +int rand(); +void srand(unsigned int seed); +*/ + +// Quick sort (not yet implemented) + +//void qsort(void *base , int nel , int width , int (*cmp)(const void *,const void *)); + +// Memory allocation functions (not yet implemented, avoid using BIOS as they are reportedly buggy) + +/* +#warning "malloc() family of functions NEEDS MORE TESTING" + +void *malloc(int size); +void free(void *buf); +void *calloc(int number, int size); +void *realloc(void *buf , int n); +*/ + +int rand(); +void srand(unsigned long seed); + +int abs(int j); +long long strtoll(const char *nptr, char **endptr, int base); +long strtol(const char *nptr, char **endptr, int base); +long double strtold(const char *nptr, char **endptr); + +// Note: these use floats internally! +double strtod(const char *nptr, char **endptr); +float strtof(const char *nptr, char **endptr); + +#endif + diff --git a/libpsn00b/include/string.h b/libpsn00b/include/string.h new file mode 100644 index 0000000..95796d5 --- /dev/null +++ b/libpsn00b/include/string.h @@ -0,0 +1,42 @@ +/* + * string.h + * + * Prototypes for string functions of the C library + * + * PSXSDK + */ + +#ifndef _STRING_H +#define _STRING_H + +int strcmp(const char *dst , const char *src); +int strncmp(const char *dst , const char *src , int len); +char *strpbrk(const char *dst , const char *src); +char *strtok(char *s , char *set); +char *strstr(const char *big , const char *little); + +//int strspn(char *s , char *set); +//int strcspn(char *s , char *set); +//int index(char *s , int c); +//int rindex(char *s , int c); + +char *strcat(char *s , const char *append); +char *strncat(char *s , const char *append, int n); +char *strcpy(char *dst , const char *src); +char *strncpy(char *dst , const char *src , int n); +int strlen(const char *s); +//char *strchr(const char *s , int c); +//char *strrchr(const char *s , int c); + +void *memmove(void *dst , const void *src , int n); +void *memchr(void *s , int c , int n); + +// Functions converted to ASM + +void *memcpy(void *dst , const void *src , int n); +void *memset(void *dst , char c , int n); +int memcmp(const void *b1 , const void *b2 , int n); + + +#endif + diff --git a/libpsn00b/include/strings.h b/libpsn00b/include/strings.h new file mode 100644 index 0000000..e5e88d4 --- /dev/null +++ b/libpsn00b/include/strings.h @@ -0,0 +1,18 @@ +/* + * strings.h + * + * PSXSDK + */ + +#ifndef _STRINGS_H +#define _STRINGS_H + +#include <string.h> + +#define bcopy(src,dst,len) memmove(dst,src,len) +#define bzero(ptr, len) memset(ptr, 0, len) +#define bcmp(b1,b2,len) memcmp(b1,b2,len) +#define index(s, c) strchr(s, c) +#define rindex(s, c) strrchr(s, c) + +#endif diff --git a/libpsn00b/include/sys/fcntl.h b/libpsn00b/include/sys/fcntl.h new file mode 100644 index 0000000..dfbf5b2 --- /dev/null +++ b/libpsn00b/include/sys/fcntl.h @@ -0,0 +1,20 @@ +#ifndef _SYS_FCNTL_H +#define _SYS_FCNTL_H + +// File control mode flags for BIOS file functions +// (many weren't documented in nocash docs) +#define FREAD 0x1 // Read +#define FWRITE 0x2 // Write +#define FNBLOCK 0x4 // Non-blocking read access +#define FRLOCK 0x10 // Read lock +#define FWLOCK 0x20 // Write lock +#define FAPPEND 0x100 // Append +#define FCREATE 0x200 // Create if not exist +#define FTRUNC 0x400 // Truncate to zero length +#define FSCAN 0x2000 // Scanning type +#define FRCOM 0x2000 // Remote command entry +#define FNBUF 0x4000 // No ring buffer and terminal interrupt +#define FASYNC 0x8000 // Asynchronous I/O +#define FNBLOCKS(a) (a<<16) // Number of blocks? (from nocash docs) + +#endif
\ No newline at end of file diff --git a/libpsn00b/include/sys/types.h b/libpsn00b/include/sys/types.h new file mode 100644 index 0000000..2f30a5f --- /dev/null +++ b/libpsn00b/include/sys/types.h @@ -0,0 +1,9 @@ +#ifndef _TYPES_H +#define _TYPES_H + +typedef unsigned char u_char; +typedef unsigned short u_short; +typedef unsigned int u_int; +typedef unsigned long u_long; + +#endif // _TYPES_H
\ No newline at end of file diff --git a/libpsn00b/libc/makefile b/libpsn00b/libc/makefile new file mode 100644 index 0000000..feadbdb --- /dev/null +++ b/libpsn00b/libc/makefile @@ -0,0 +1,38 @@ +# Run using make (Linux) or gmake (BSD) +# Part of the PSn00bSDK Project +# 2019 Lameguy64 / Meido-Tek Productions + +PREFIX = mipsel-unknown-elf- + +TARGET = ../libc.a + +CFILES = $(notdir $(wildcard ./*.c)) +AFILES = $(notdir $(wildcard ./*.s)) +OFILES = $(addprefix build/,$(CFILES:.c=.o) $(AFILES:.s=.o)) + +INCLUDE = -I../include + +CFLAGS = -O2 -msoft-float -fno-builtin -fdata-sections -ffunction-sections -Wa,--strip-local-absolute +AFLAGS = -msoft-float -Wa,--strip-local-absolute + +CC = $(PREFIX)gcc +AS = $(PREFIX)as +AR = $(PREFIX)ar +RANLIB = $(PREFIX)ranlib + +all: $(TARGET) + +$(TARGET): $(OFILES) + $(AR) cr $(TARGET) $(OFILES) + $(RANLIB) $(TARGET) + +build/%.o: %.c + @mkdir -p $(dir $@) + $(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@ + +build/%.o: %.s + @mkdir -p $(dir $@) + $(CC) $(AFLAGS) $(INCLUDE) -c $< -o $@ + +clean: + rm -Rf build $(TARGET) diff --git a/libpsn00b/libc/malloc.s b/libpsn00b/libc/malloc.s new file mode 100644 index 0000000..20e5371 --- /dev/null +++ b/libpsn00b/libc/malloc.s @@ -0,0 +1,216 @@ +# Custom first-fit malloc routines by Lameguy64 +# Part of the PSn00bSDK Project + +.set noreorder + +.set ND_PREV, 0 # Address to previous block (NULL if starting block) +.set ND_NEXT, 4 # Address to next block (NULL if end block) +.set ND_SIZE, 8 # Size of block +.set ND_HSIZ, 12 + +.section .text + + +# Stupid small function just to get bss end +# due to GCC insisting externs to be gp relative +.global GetBSSend +.type GetBSSend, @function +GetBSSend: + la $v0, _end + jr $ra + nop + + +# Initializes the heap for malloc +# a0 - Starting address of heap +# a1 - Size of memory heap +# +.global InitHeap +.type InitHeap, @function +InitHeap: + la $v0, _malloc_addr + sw $a0, 0($v0) + la $v0, _malloc_size + sw $a1, 0($v0) + + sw $0 , ND_PREV($a0) # Set heap header + sw $0 , ND_NEXT($a0) + jr $ra + sw $0 , ND_SIZE($a0) + + +# Allocates a block of memory in the heap +# a0 - Size of memory block to allocate. +# +.global malloc +.type malloc, @function +malloc: + addiu $a0, 3 # Round size to a multiple of 4 + srl $a0, 2 + + la $a2, _malloc_addr + lw $a2, 0($a2) + sll $a0, 2 + +.find_next: + + move $a1, $a2 + + lw $a2, ND_NEXT($a1) # Get block header + lw $v1, ND_SIZE($a1) + + subu $v0, $a2, $a1 # Compute space between current and next + + beqz $v1, .empty_block # Occupy empty block (if size = 0) + nop + + beqz $a2, .new_block # Allocate a new block (if no next) + nop + + addiu $v0, -(ND_HSIZ*2) # Compute remaining space of block + subu $v0, $v1 + + blt $v0, $a0, .find_next # Search for the next block if space is not big enough + nop + + # Perform a block split using remaining space of current block + + addiu $v0, $a1, ND_HSIZ # Compute address for new header + addu $v0, $v1 + + sw $a1, ND_PREV($v0) # Set the new block header + sw $a2, ND_NEXT($v0) + sw $a0, ND_SIZE($v0) + + sw $v0, ND_NEXT($a1) # Update previous and next blocks + sw $v0, ND_PREV($a2) + + jr $ra + addiu $v0, ND_HSIZ + +.empty_block: # Occupy an empty block + + beqz $a2, .no_next # Skip size calculation if there's no next + nop + + addiu $v0, -ND_HSIZ + blt $v0, $a0, .find_next + nop + + b .skip_space_check + nop + +.no_next: + + la $v1, _malloc_addr # Check if there's enough space for a block + lw $v1, 0($v1) + la $v0, _malloc_size + lw $v0, 0($v0) + + subu $v1, $a1, $v1 + addu $v1, $a0 + addiu $v1, ND_HSIZ + + bgt $v1, $v0, .no_space + nop + +.skip_space_check: + + sw $a0, ND_SIZE($a1) + jr $ra # Return address + addiu $v0, $a1, ND_HSIZ + +.new_block: # Create a new block + + addu $a2, $a1, $v1 # Compute address for new block + addiu $a2, ND_HSIZ + + la $v1, _malloc_addr + lw $v1, 0($v1) + la $v0, _malloc_size + lw $v0, 0($v0) + + subu $v1, $a2, $v1 + addu $v1, $a0 + addiu $v1, ND_HSIZ + + bgt $v1, $v0, .no_space # Reject if it exceeds specified size + nop + + sw $a1, ND_PREV($a2) + sw $0 , ND_NEXT($a2) + sw $a0, ND_SIZE($a2) + + sw $a2, ND_NEXT($a1) + + jr $ra # Return address + addiu $v0, $a2, ND_HSIZ + +.no_space: # Return a null if no space can be found + jr $ra + move $v0, $0 + + +# Allocates a block of memory in block units and zero fills the +# allocated block. +# a0 - Block size. +# a1 - Number of blocks to allocate +# +.global calloc +.type calloc, @function +calloc: + mult $a0, $a1 + addiu $sp, -4 + sw $ra, 0($sp) + + jal malloc + mflo $a0 + + move $a0, $v0 + mflo $a1 +.clear_loop: + sw $0 , 0($a0) + addi $a1, 4 + bgtz $a1, .clear_loop + addiu $a0, 4 + + lw $ra, 0($sp) + addiu $sp, 4 + jr $ra + nop + + +# Deallocates an allocated block +# a0 - An address returned by malloc to deallocate +# +.global free +.type free, @function +free: + + addiu $a0, -ND_HSIZ + lw $a1, ND_PREV($a0) + lw $a2, ND_NEXT($a0) + + beqz $a1, .is_start # Check if block is a starting block + nop + + beqz $a2, .is_end + nop + + # Unlink + + sw $a2, ND_NEXT($a1) + jr $ra + sw $a1, ND_PREV($a2) + +.is_end: # Unlinks the ending block + jr $ra + sw $0 , ND_NEXT($a1) +.is_start: # Simply set size to 0 if starting block + jr $ra + sw $0 , ND_SIZE($a0) + + +# Internal variables +.comm _malloc_addr, 4, 4 +.comm _malloc_size, 4, 4 diff --git a/libpsn00b/libc/memcmp.s b/libpsn00b/libc/memcmp.s new file mode 100644 index 0000000..b8b495d --- /dev/null +++ b/libpsn00b/libc/memcmp.s @@ -0,0 +1,31 @@ +# High speed ASM memcmp implementation by Lameguy64 +# +# Part of PSn00bSDK + +.set noreorder + +.section .text + +# Arguments: +# a0 - buffer 1 address +# a1 - buffer 2 address +# a2 - bytes to compare +.global memcmp +.type memcmp, @function +memcmp: + blez $a2, .exit + addi $a2, -1 + lbu $v0, 0($a0) + lbu $v1, 0($a1) + addiu $a0, 1 + bne $v0, $v1, .mismatch + addiu $a1, 1 + b memcmp + nop +.mismatch: + jr $ra + sub $v0, $v1 +.exit: + jr $ra + move $v0, $0 +
\ No newline at end of file diff --git a/libpsn00b/libc/memcpy.s b/libpsn00b/libc/memcpy.s new file mode 100644 index 0000000..e1a4e30 --- /dev/null +++ b/libpsn00b/libc/memcpy.s @@ -0,0 +1,28 @@ +# High speed ASM memcpy implementation by Lameguy64 +# +# Part of PSn00bSDK + +.set noreorder + +.section .text + +# Arguments: +# a0 - destination address +# a1 - source adress +# a2 - bytes to copy +.global memcpy +.type memcpy, @function +memcpy: + move $v0, $a0 +.loop: + blez $a2, .exit + addi $a2, -1 + lbu $a3, 0($a1) + addiu $a1, 1 + sb $a3, 0($a0) + b .loop + addiu $a0, 1 +.exit: + jr $ra + nop +
\ No newline at end of file diff --git a/libpsn00b/libc/memmove.s b/libpsn00b/libc/memmove.s new file mode 100644 index 0000000..961e71f --- /dev/null +++ b/libpsn00b/libc/memmove.s @@ -0,0 +1,29 @@ +.set noreorder + +.section .text + +# Arguments +# a0 - destination address +# a1 - source address +# a2 - bytes to move +.global memmove +.type memmove, @function +memmove: + move $v0, $a0 + addu $a0, $a2 + addu $a1, $a2 + addiu $a0, -1 + addiu $a1, -1 +.loop: + blez $a2, .exit + addi $a2, -1 + lbu $v1, 0($a1) + addiu $a1, -1 + sb $v1, 0($a0) + addiu $a0, -1 + b .loop + nop +.exit: + jr $ra + nop +
\ No newline at end of file diff --git a/libpsn00b/libc/memset.s b/libpsn00b/libc/memset.s new file mode 100644 index 0000000..f7d86b1 --- /dev/null +++ b/libpsn00b/libc/memset.s @@ -0,0 +1,25 @@ +# High speed ASM memset implementation by Lameguy64 +# +# Part of PSn00bSDK + +.set noreorder + +.section .text + +# Arguments: +# a0 - address to buffer +# a1 - value to set +# a2 - bytes to set +.global memset +.type memset,@function +memset: + move $v0, $a0 + blez $a2, .exit + addi $a2, -1 + sb $a1, 0($a0) + b memset + addiu $a0, 1 +.exit: + jr $ra + nop +
\ No newline at end of file diff --git a/libpsn00b/libc/printf.c b/libpsn00b/libc/printf.c new file mode 100644 index 0000000..7350648 --- /dev/null +++ b/libpsn00b/libc/printf.c @@ -0,0 +1,788 @@ +/* printf.c + * + * Inherited from the PSXSDK C library + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#define SPRINTF_ALT_FLAG (1<<0) +#define SPRINTF_ZERO_FLAG (1<<1) +#define SPRINTF_NEGFIELD_FLAG (1<<2) +#define SPRINTF_SPACE_FLAG (1<<3) +#define SPRINTF_SIGN_FLAG (1<<4) + +// sprintf() macros to calculate the real padding and to write it +// these were made to not repeat the code in the function +// they can only be used in sprintf() + +// sprintf macros START + +#define calculate_real_padding() \ + y = 1; \ + \ + for(x=0;x<=19;x++) \ + { \ + if(x == 0) \ + pad_quantity--; \ + else \ + { \ + if(arg / y) \ + pad_quantity--; \ + } \ + \ + y *= 10; \ + } \ + \ + if(pad_quantity < 0) pad_quantity = 0; + +/*#define calculate_real_padding_hex() \ + for (x = 0; x < 8; x++) \ + { \ + if(x == 0) \ + pad_quantity--; \ + else \ + { \ + if((arg >> (x * 4)) & 0xf) \ + pad_quantity--; \ + } \ + }*/ + +#define calculate_real_padding_hex() \ + last = 0; \ + for (x = 0; x < 16; x++) \ + if((arg >> (x * 4)) & 0xf) \ + last = x; \ + \ + pad_quantity = (pad_quantity - 1) - last; \ + if(pad_quantity < 0) pad_quantity = 0; + +#define write_padding() \ + if(!(flags & SPRINTF_NEGFIELD_FLAG)) \ + for(x = 0; x < pad_quantity; x++) \ + { \ + if(flags & SPRINTF_ZERO_FLAG) \ + put_in_string(string, ssz, '0', string_pos++); \ + else \ + put_in_string(string, ssz, ' ', string_pos++); \ + } + +#define write_neg_padding() \ + if(flags & SPRINTF_NEGFIELD_FLAG) \ + { \ + for(x = 0; x < pad_quantity; x++) \ + put_in_string(string, ssz, ' ', string_pos++);\ + } + +// sprintf macros END + +enum +{ + SPRINTF_SIZE_CHAR, + SPRINTF_SIZE_SHORT, + SPRINTF_SIZE_INT, + SPRINTF_SIZE_LONG, + SPRINTF_SIZE_LONG_LONG, +}; + +unsigned int get_arg_in_size(int size, unsigned long long *arg, unsigned int check_sign) +{ + int s = 0; + + switch(size) + { + case SPRINTF_SIZE_CHAR: + *arg &= 0xff; + + if(check_sign) + { + if(*arg & (1<<7)) + { + *arg |= 0xffffff00; + *arg = ~(*arg - 1); + s = 1; + } + } + break; + case SPRINTF_SIZE_SHORT: + *arg &= 0xffff; + + if(check_sign) + { + if(*arg & (1<<15)) + { + *arg |= 0xffff0000; + *arg = ~(*arg - 1); + s = 1; + } + } + break; + +// sizeof(long) == sizeof(int) on 32bit, so this will suffice for the psx + + case SPRINTF_SIZE_INT: + case SPRINTF_SIZE_LONG: + *arg &= 0xffffffff; + + if(check_sign) + { + if(*arg & (1<<31)) + { + *arg |= (long long)0xffffffff00000000; + *arg = ~(*arg - 1); + s = 1; + } + } + break; + + case SPRINTF_SIZE_LONG_LONG: + if(check_sign) + { + if(*arg & ((long long)1<<63)) + { + *arg = ~(*arg - 1); + s = 1; + } + } + break; + } + + return s; +} + +int put_in_string(char *string, unsigned int sz, char c, int pos) +{ + if(pos>=sz) + return 0; + else + string[pos] = c; + + return 1; +} + +int libc_ulltoa(unsigned long long i, char *dst, int n) +{ + int x, y; + unsigned long long a, b; + int empty_digit = 1; + int sp=0; + int n2=0; + + for(x=20;x>=0;x--) + { + a = 1; + for(y = 0; y<x; y++) + a *= 10; + + b = (i/a); + + if(b>=1) + empty_digit = 0; + + if(empty_digit == 0 || x == 0) + { + i -= b*a; + + //put_in_string(string, ssz, b + '0', string_pos++); + if(n2!=n) + { + //printf("n2=%d\n",n2); + dst[sp++] = b + '0'; + n2++; + } + } + } + + if(n2!=n)dst[sp] = 0; + + return n2; +} + +void libc_float_to_string(float fl, char *dst, int n) +{ + unsigned int *p = (unsigned int*)&fl; + unsigned long long i = 0; + unsigned long long f = 0; + int e, m, s; + int x, y; + unsigned long long z; + + s = *p >> 31; + + e = (*p >> 23) & 0xff; + + m = *p & 0x7fffff; + + if(e == 255 && m == 0) // Infinity + { + if(s) strncpy(dst, "-inf", n); + else strncpy(dst, "inf", n); + }else if(e == 255 && m != 0) // NaN + { + strncpy(dst, "nan", n); + } + else + { + e -= 127; + m |= 1<<23; + + + + for(x = 23; x >= 0; x--) + { + if(m & (1<<x)) + { + if(e >= 0) + { + z = 1; + for(y=0;y<e;y++) + z*=2; + + i+=z; + } + else + { + z = 5000000000000000000; + for(y = 1; y < -e; y++) + z /= 2; + + f+=z; + } + } + e--; + } + + if(s && n) + { + *(dst++) = '-'; + n--; + } + + x = libc_ulltoa(i, dst, n); + n-=x; + dst+=x; + + if(n) + { + *(dst++) = '.'; + n--; + if(n) + { + x = libc_ulltoa(f, dst, n<6?n:6); + n-=x; + dst+=x; + + if(n) + *dst=0; + } + } + } +} + +void libc_double_to_string(double fl, char *dst, int n) +{ + unsigned long long *p = (unsigned long long *)&fl; + unsigned long long i = 0; + unsigned long long f = 0; + unsigned long long m, s; + long long e; + int x, y; + unsigned long long z; + + s = *p >> 63; + + e = (*p >> 52) & 0x7ff; + //printf("%d\n", e); + + m = *p & 0xfffffffffffff; + + for(x=0;x<52;x++) + if(m&((unsigned long long)1<<(52-x))) putchar('1'); else putchar('0'); + + if(e == 255 && m == 0) // Infinity + { + if(s) strncpy(dst, "-inf", n); + else strncpy(dst, "inf", n); + }else if(e == 255 && m != 0) // NaN + { + strncpy(dst, "nan", n); + } + else + { + e -= 1023; + m |= (unsigned long long)1<<52; + + for(x = 52; x >= 0; x--) + { + if(m & ((unsigned long long)1<<x)) + { + if(e >= 0) + { + z = (long long)1<<e; + + i+=z; + } + else + { + z = 5000000000000000000; + z >>= -(e + 1); + + f+=z; + } + } + e--; + } + + if(s && n) + { + *(dst++) = '-'; + n--; + } + + x = libc_ulltoa(i, dst, n); + n-=x; + dst+=x; + + if(n) + { + *(dst++) = '.'; + n--; + if(n) + libc_ulltoa(f, dst, n<6?n:6); + } + } +} + +char libc_sprintf_floatbuf[64]; + +int vsnprintf(char *string, unsigned int size, char *fmt, va_list ap) +{ + int string_pos,fmt_pos; + int l; + unsigned long long arg; + unsigned char *argcp; + unsigned char *argcp_tmp; + int directive_coming = 0; + int alternate_form = 0; + int flags = 0; + int argsize = 2; // int + int x, y; + unsigned long long a, b; + int empty_digit; + int ssz = size - 1; + int zero_flag_imp = 0; + int pad_quantity = 0; + int last; + + l = strlen(fmt); + + string_pos = 0; + + for(fmt_pos=0;fmt_pos<l;fmt_pos++) + { + if(directive_coming) + { + switch(fmt[fmt_pos]) + { + case '%': + put_in_string(string, ssz, '%', string_pos++); + directive_coming = 0; + break; + case ' ': + flags |= SPRINTF_SPACE_FLAG; + break; + case '#': // Specify alternate form + flags |= SPRINTF_ALT_FLAG; + break; + case '+': // Specify sign in signed conversions + flags |= SPRINTF_SIGN_FLAG; + break; + case '0': // Padding with zeros... + if(zero_flag_imp == 0) + { + flags |= SPRINTF_ZERO_FLAG; + zero_flag_imp = 1; + //printf("Zero padding enabled!\n"); + } + else + { + pad_quantity *= 10; + //printf("pad_quantity = %d\n", pad_quantity); + } + break; + case '1' ... '9': // '...' cases are a GNU extension, + // but they simplify a lot + + pad_quantity *= 10; + pad_quantity += fmt[fmt_pos] - '0'; + zero_flag_imp = 1; + + //printf("pad_quantity = %d\n", pad_quantity); + break; + case '-': // Negative field flag + if(flags & SPRINTF_ZERO_FLAG) + flags &= ~SPRINTF_ZERO_FLAG; + + flags |= SPRINTF_NEGFIELD_FLAG; + break; + case 'h': // Half argument size + if(argsize) argsize--; + break; + case 'l': // Double argument size + if(argsize < 2) argsize = 2; + else if(argsize < SPRINTF_SIZE_LONG_LONG) argsize++; + break; + case 'd': // signed decimal + case 'i': + empty_digit = 1; + + //printf("argsize = %d\n", argsize); + + if(argsize < SPRINTF_SIZE_LONG_LONG) + arg = (unsigned long long)va_arg(ap, unsigned int); + else + arg = va_arg(ap, unsigned long long); + + if(get_arg_in_size(argsize, &arg, 1)) + { + put_in_string(string, ssz, '-', string_pos++); + pad_quantity--; + } + else + { + if(flags & SPRINTF_SIGN_FLAG) + { + put_in_string(string, ssz, '+', string_pos++); + pad_quantity--; + } + } + + /* Calculate how much padding we have to write */ + + /*y = 1; + + for(x=0;x<=9;x++) + { + if(x == 0) + pad_quantity--; + else + { + if(arg / y) + pad_quantity--; + } + + y *= 10; + } + if(pad_quantity < 0) pad_quantity = 0;*/ + + calculate_real_padding(); + + //printf("Actual pad quantity = %d\n", pad_quantity); + + + + /*if(!(flags & SPRINTF_NEGFIELD_FLAG)) + { + for(x = 0; x < pad_quantity; x++) + { + if(flags & SPRINTF_ZERO_FLAG) + put_in_string(string, ssz, '0', string_pos++); + else + put_in_string(string, ssz, ' ', string_pos++); + } + }*/ + + write_padding(); + + for(x=19;x>=0;x--) + { + a = 1; + for(y = 0; y<x; y++) + a *= 10; + + b = (arg/a); + + if(b>=1) + empty_digit = 0; + + if(empty_digit == 0 || x == 0) + { + arg -= b*a; + + put_in_string(string, ssz, b + '0', string_pos++); + } + } + + /*if(flags & SPRINTF_NEGFIELD_FLAG) + { + for(x = 0; x < pad_quantity; x++) + put_in_string(string, ssz, ' ', string_pos++); + }*/ + write_neg_padding(); + + directive_coming = 0; + break; + case 'u': // unsigned decimal + empty_digit = 1; + + if(argsize < SPRINTF_SIZE_LONG_LONG) + arg = (unsigned long long)va_arg(ap, unsigned int); + else + arg = va_arg(ap, unsigned long long); + + get_arg_in_size(argsize, &arg, 0); + + calculate_real_padding(); + write_padding(); + + for(x=19;x>=0;x--) + { + a = 1; + for(y = 0; y<x; y++) + a *= 10; + + + + b = (arg/a); + + if(b>=1) + empty_digit = 0; + + if(empty_digit == 0 || x == 0) + { + arg -= b*a; + + put_in_string(string, ssz, b + '0', string_pos++); + } + } + + write_neg_padding(); + + directive_coming = 0; + break; + case 'x': // Hexadecimal + case 'X': // Hexadecimal with big letters + case 'p': // Hexadecimal with small letters with '0x' prefix + empty_digit = 1; + + if(argsize < SPRINTF_SIZE_LONG_LONG) + arg = (unsigned long long)va_arg(ap, unsigned int); + else + arg = va_arg(ap, unsigned long long int); + + get_arg_in_size(argsize, &arg, 0); + + if(fmt_pos == 'p') + flags |= SPRINTF_ALT_FLAG; + + if(flags & SPRINTF_ALT_FLAG) + { + put_in_string(string, ssz, '0', string_pos++); + + if(fmt[fmt_pos] == 'X') + put_in_string(string, ssz, 'X', string_pos++); + else + put_in_string(string, ssz, 'x', string_pos++); + } + + calculate_real_padding_hex(); + write_padding(); + + for(x=15;x>=0;x--) + { + y = arg >> (x << 2); + y &= 0xf; + + if(y>=1) + empty_digit = 0; + + if(empty_digit == 0 || x == 0) + { + if(y>=0 && y<=9) + put_in_string(string, ssz, y + '0', string_pos++); + else if(y>=0xA && y<=0xF) + { + if(fmt[fmt_pos] == 'X') + put_in_string(string, ssz, (y - 0xa) + 'A', string_pos++); + else + put_in_string(string, ssz, (y - 0xa) + 'a', string_pos++); + } + } + } + + write_neg_padding(); + + directive_coming = 0; + break; + case 'c': // character + arg = va_arg(ap, int); + + put_in_string(string, ssz, arg & 0xff, string_pos++); + + directive_coming = 0; + break; + case 's': // string + argcp = va_arg(ap, char *); + argcp_tmp = argcp; + + if(argcp == NULL) + { + // Non standard extension, but supported by Linux and the BSDs. + + put_in_string(string, ssz, '(', string_pos++); + put_in_string(string, ssz, 'n', string_pos++); + put_in_string(string, ssz, 'u', string_pos++); + put_in_string(string, ssz, 'l', string_pos++); + put_in_string(string, ssz, 'l', string_pos++); + put_in_string(string, ssz, ')', string_pos++); + + directive_coming = 0; + break; + } + + while(*argcp_tmp) + { + if(pad_quantity > 0) pad_quantity--; + argcp_tmp++; + } + + if(!(flags & SPRINTF_NEGFIELD_FLAG)) + { + while(pad_quantity > 0) + { + put_in_string(string,ssz, ' ', string_pos++); + pad_quantity--; + } + } + + while(*argcp) + { + put_in_string(string, ssz, *argcp, string_pos++); + argcp++; + } + + if(flags & SPRINTF_NEGFIELD_FLAG) + { + while(pad_quantity > 0) + { + put_in_string(string,ssz, ' ', string_pos++); + pad_quantity--; + } + } + + directive_coming = 0; + break; + case 'o': // Octal + empty_digit = 1; + + if(argsize < SPRINTF_SIZE_LONG_LONG) + arg = (unsigned long long)va_arg(ap, unsigned int); + else + arg = va_arg(ap, unsigned long long); + + for(x=21;x>=0;x--) + { + y = arg >> (x * 3); + y &= 0x7; + + if(y>=1) + empty_digit = 0; + + if(empty_digit == 0 || x == 0) + put_in_string(string, ssz, y + '0', string_pos++); + } + + directive_coming = 0; + break; + case '@': // Binary + empty_digit = 1; + + if(argsize < SPRINTF_SIZE_LONG_LONG) + arg = (unsigned long long)va_arg(ap, unsigned int); + else + arg = va_arg(ap, unsigned long long); + + for(x=63;x>=0;x--) + { + y = (arg >> x); + y &= 1; + + if(y>=1) + empty_digit = 0; + + if(empty_digit == 0 || x == 0) + put_in_string(string, ssz, y + '0', string_pos++); + } + + directive_coming = 0; + break; + + case 'f': + libc_double_to_string(va_arg(ap, double), libc_sprintf_floatbuf, 64); + + for(x=0;libc_sprintf_floatbuf[x]!=0;x++) + put_in_string(string, ssz, libc_sprintf_floatbuf[x], string_pos++); + + directive_coming = 0; + break; + case 'n': // Number of characters written + *(va_arg(ap,unsigned int*)) = string_pos; + + directive_coming = 0; + break; + // default + } + } + else + { + if(fmt[fmt_pos] == '%') + { + directive_coming = 1; + flags = 0; + argsize = 2; + pad_quantity = 0; + zero_flag_imp = 0; + } + else + put_in_string(string, ssz, fmt[fmt_pos], string_pos++); + } + } + string[string_pos] = 0; + return string_pos; +} + +int vsprintf(char *string, char *fmt, va_list ap) +{ + return vsnprintf(string, 0xffffffff, fmt, ap); +} + +int sprintf(char *string, char *fmt, ...) +{ + int r; + + va_list ap; + + va_start(ap, fmt); + + r = vsprintf(string, fmt, ap); + + va_end(ap); + + return r; +} + +int snprintf(char *string, unsigned int size, char *fmt, ...) +{ + int r; + + va_list ap; + + va_start(ap, fmt); + + r = vsnprintf(string, size, fmt, ap); + + va_end(ap); + + return r; +} diff --git a/libpsn00b/libc/rand.s b/libpsn00b/libc/rand.s new file mode 100644 index 0000000..a502e87 --- /dev/null +++ b/libpsn00b/libc/rand.s @@ -0,0 +1,38 @@ +.set noreorder +.set noat + +.section .text + + +.global rand +.type rand, @function +rand: + + la $at, _randseed + lw $v0, 0($at) + li $v1, 0x41c64e6d + + multu $v0, $v1 + mflo $v0 + nop + addiu $v0, 12345 + sw $v0, 0($at) + + jr $ra + andi $v0, 0x7fff + + +.global srand +.type srand, @function +srand: + la $at, _randseed + jr $ra + sw $a0, 0($at) + + +.section .data + +.type _randseed, @object +_randseed: + .word 1 +
\ No newline at end of file diff --git a/libpsn00b/libc/readme.txt b/libpsn00b/libc/readme.txt new file mode 100644 index 0000000..d7abf0a --- /dev/null +++ b/libpsn00b/libc/readme.txt @@ -0,0 +1,48 @@ +Limited C standard library implementation, part of PSn00bSDK +2019 Lameguy64 / Meido-Tek Productions + + Some components were inherited from PSXSDK. This library covers only the +most commonly used C functions, mainly most string and memory manipulation +functions. Improvements to this library such as adding more standard C +functions are welcome. + + This library also contains the start code written in assembler which +performs basic initialization such as clearing the bss section, setting the +correct gp register value and initializing the heap for malloc. + + The dynamic memory allocation functions featured in this library are of +an original implementation and do not use the BIOS memory allocation functions +as they are are reportedly prone to memory leakage and is even explained in +the official library documents. The implementation employed uses a simple +first-fit memory allocation logic. + + +Library developer(s)/contributor(s): + + Lameguy64 + + +Library header(s): + + stdio.h + stdlib.h + string.h + strings.h + malloc.h + + +Todo list: + + * Current vsprintf/sprintf implementation from PSXSDK needs to be replaced + as it performs quite slow likely due to the unnecessary int64 arithmetic + performed on any integer value which the compiler has to emulate on the + R3000. A more efficient implementation that only uses int32 is much + preferred. + + * Many of the string manipulation and memory fill functions in string.c + are yet to be replaced with more efficient assembly implementations. + + +Changelog: + + None thus far... diff --git a/libpsn00b/libc/scanf.c b/libpsn00b/libc/scanf.c new file mode 100644 index 0000000..b6d4510 --- /dev/null +++ b/libpsn00b/libc/scanf.c @@ -0,0 +1,427 @@ +// vsscanf +// Programmed by Giuseppe Gatta, 2011 +// Inherited from PSXSDK C library + +#include <stdio.h> +#include <stdarg.h> +#include <stdlib.h> +#include <string.h> +#include <strings.h> + +char libc_vsscanf_buf[512]; +char libc_vsscanf_allow[256]; + +enum +{ + elem_skip_space = 1, +}; + +int libc_vsscanf_get_element(char *dst, const char *src, int flag, int s) +{ + int i; + const char *osrc = src; + + if(flag & elem_skip_space) + { + while(*src == ' ') + src++; + } + + for(i=0;i<s;i++) + { + if((flag & elem_skip_space) && *src == ' ') + break; + + if(*src != 0) + *(dst++) = *(src++); + else + break; + } + + *dst = 0; + + return src - osrc; +} + +enum +{ + scanf_s_char, scanf_s_short, scanf_s_int, + scanf_s_long, + scanf_s_long_long +}; + +int vsscanf(const char *str, const char *format, va_list ap) +{ + int fp = 0; + int sp = 0; + int conv = 0; + int sz = scanf_s_int; // size for numbers defaults to 32-bit + int i,x,y,z, h; + int suppress = 0; + int neg = 0; + int fsz = 512; + int def_fsz = 1; + int exspace = 0; + int alt = 0; + int r = 0; + int exit_loop=0; + int sp2,sp3; + char *ep; + long long buf; + double fbuf; + + + while(format[fp] && str[sp] && !exit_loop) + { + if(conv) + { + switch(format[fp]) + { + case '%': // Percent, assignment does not occur + conv = 0; + break; + + case 'h': // Halve size + sz--; + break; + + case 'l': // Double size + sz++; + break; + + case '*': // Suppress + suppress = 1; + break; + + case ' ': // Explicit space + exspace = 1; + break; + + case '#': // Alternate format + alt = 1; + break; + + case '0' ... '9': // '0' ... '9' is a GNU C extension! + if(def_fsz) + { + def_fsz = 0; + fsz = 0; + } + + fsz *= 10; + fsz+=format[fp]-'0'; + + if(fsz > 512) + fsz = 512; // 512 is the maximum. + break; + + case '@': // Binary. Non-standard extension + libc_vsscanf_get_element(libc_vsscanf_buf, &str[sp], elem_skip_space, fsz); + buf = strtoll(libc_vsscanf_buf, &ep, 2); + sp += ep - libc_vsscanf_buf; + + if(!suppress) + { + switch(sz) + { + case scanf_s_char: *(va_arg(ap, signed char*)) = (signed char)buf;break; + case scanf_s_short: *(va_arg(ap, short*)) = (short)buf; break; + case scanf_s_int: *(va_arg(ap, int*)) = (int)buf; break; + case scanf_s_long: *(va_arg(ap, long*)) = (long)buf; break; + case scanf_s_long_long: *(va_arg(ap, long long*)) = buf; break; + } + r++; + } + + conv = 0; + break; + + case 'D': + sz++; + case 'd': // Decimal + case 'u': + libc_vsscanf_get_element(libc_vsscanf_buf, &str[sp], elem_skip_space, fsz); + buf = strtoll(libc_vsscanf_buf, &ep, 10); + sp += ep - libc_vsscanf_buf; + + if(!suppress) + { + switch(sz) + { + case scanf_s_char: *(va_arg(ap, signed char*)) = (signed char)buf;break; + case scanf_s_short: *(va_arg(ap, short*)) = (short)buf; break; + case scanf_s_int: *(va_arg(ap, int*)) = (int)buf; break; + case scanf_s_long: *(va_arg(ap, long*)) = (long)buf; break; + case scanf_s_long_long: *(va_arg(ap, long long*)) = buf; break; + } + r++; + } + + conv = 0; + break; + + case 's': // String + sp += libc_vsscanf_get_element(libc_vsscanf_buf, &str[sp], elem_skip_space, fsz); + + if(!suppress) + { + strcpy(va_arg(ap, char*), libc_vsscanf_buf); + r++; + } + + conv = 0; + break; + + case 'c': + if(def_fsz) + fsz = 1; + + sp += (i = libc_vsscanf_get_element(libc_vsscanf_buf, &str[sp], (exspace ? elem_skip_space : 0), fsz)); + if(!suppress) + { + memcpy(va_arg(ap, char*), libc_vsscanf_buf, (fsz>i)?i:fsz); + r++; + } + break; + + case 'n': + if(!suppress) + { + *(va_arg(ap, int*)) = sp; + r++; + } + break; + + case 'p': + case 'x': + case 'X': + libc_vsscanf_get_element(libc_vsscanf_buf, &str[sp], elem_skip_space, fsz); + buf = strtoll(libc_vsscanf_buf, &ep, 16); + sp += ep - libc_vsscanf_buf; + + if(!suppress) + { + switch(sz) + { + case scanf_s_char: *(va_arg(ap, unsigned char*)) = (unsigned char)buf; break; + case scanf_s_short: *(va_arg(ap, unsigned short*)) = (unsigned short)buf; break; + case scanf_s_int: *(va_arg(ap, unsigned int*)) = (unsigned int)buf; break; + case scanf_s_long: *(va_arg(ap, unsigned long*)) = (unsigned long)buf; break; + case scanf_s_long_long: *(va_arg(ap, unsigned long long*)) = (unsigned long long)buf; break; + } + r++; + } + + conv = 0; + break; + + case 'O': + sz++; + case 'o': // Octal integer + libc_vsscanf_get_element(libc_vsscanf_buf, &str[sp], elem_skip_space, fsz); + buf = strtoll(libc_vsscanf_buf, &ep, 8); + sp += ep - libc_vsscanf_buf; + + if(!suppress) + { + switch(sz) + { + case scanf_s_char: *(va_arg(ap, unsigned char*)) = (unsigned char)buf;break; + case scanf_s_short: *(va_arg(ap, unsigned short*)) = (unsigned short)buf; break; + case scanf_s_int: *(va_arg(ap, unsigned int*)) = (unsigned int)buf;break; + case scanf_s_long: *(va_arg(ap, unsigned long*)) = (unsigned long)buf; break; + case scanf_s_long_long: *(va_arg(ap, unsigned long long*)) = (unsigned long long)buf;break; + } + r++; + } + + conv = 0; + break; + + case 'i': + libc_vsscanf_get_element(libc_vsscanf_buf, &str[sp], elem_skip_space, fsz); + + if(libc_vsscanf_buf[0] == '0') + { + if(libc_vsscanf_buf[1] == 'x' || libc_vsscanf_buf[1] == 'X') + i = 16; + else + i = 8; + } + else + i = 10; + + buf = strtoll(libc_vsscanf_buf, &ep, i); + sp += ep - libc_vsscanf_buf; + + if(!suppress) + { + switch(sz) + { + case scanf_s_char: *(va_arg(ap, signed char*)) = (signed char)buf; break; + case scanf_s_short: *(va_arg(ap, short*)) = (short)buf; break; + case scanf_s_int: *(va_arg(ap, int*)) = (int)buf; break; + case scanf_s_long: *(va_arg(ap, long*)) = (long)buf; break; + case scanf_s_long_long: *(va_arg(ap, long long*)) = (long long)buf; break; + } + r++; + } + + conv = 0; + break; + + case '[': + i=0; + x=0; // Exclusion? + h=0; // Hyphen? + + fp++; + i++; + + while(format[fp]) + { + if(format[fp] == '^' && i==1) + { + memset(libc_vsscanf_allow, 1, 256); + x = 1; + fp++; i++; continue; + } + + if(x) + { + if(format[fp] == ']' && i>=3) + break; + } + else + { + if(format[fp] == ']' && i>=2) + break; + } + + if(format[fp] == '-') + { + if(format[fp+1] != ']') + y = 1; + else + libc_vsscanf_allow['-'] = x^1; + } + else + { + if(y == 1) + { + if(format[fp] < format[fp-2]) + libc_vsscanf_allow[format[fp]] = x^1; + else + for(z = format[fp-2]; z <= format[fp]; z++) + libc_vsscanf_allow[z] = x^1; + + y = 0; + + //printf("%s all chars from %c to %c\n", x?"Excluding":"Including",format[fp-2], format[fp]); + } + else + libc_vsscanf_allow[format[fp]] = x^1; + } + + fp++; + i++; + } + +// Now as we know what our character set is, let's get data from the string + /* puts("Character set:"); + + for(y=0;y<16;y++) + { + for(x=0;x<16;x++) + if(libc_vsscanf_allow[(y*16) + x]) + putchar((y*16)+x); + else + putchar('*'); + + putchar('\n'); + } + */ + i = 0; + + while(libc_vsscanf_allow[str[sp]] && i<512) + libc_vsscanf_buf[i++] = str[sp++]; + + libc_vsscanf_buf[i] = 0; + + if(!suppress) + { + strcpy(va_arg(ap, char*), libc_vsscanf_buf); + r++; + } + break; + + case 'f': // Floating point number + libc_vsscanf_get_element(libc_vsscanf_buf, &str[sp], elem_skip_space, fsz); + fbuf = strtod(libc_vsscanf_buf, &ep); + sp += ep - libc_vsscanf_buf; + + if(!suppress) + { + switch(sz) + { + case scanf_s_char: + case scanf_s_short: + case scanf_s_int: + *(va_arg(ap, float*)) = (float)fbuf; + break; + + case scanf_s_long: + case scanf_s_long_long: + *(va_arg(ap, double*)) = fbuf; + break; + } + r++; + } + + conv = 0; + break; + + } + } + else + { + if(format[fp] == '%') + { + conv = 1; + neg = 0; + suppress = 0; + sz = scanf_s_int; + fsz = 512; + def_fsz = 1; + exspace = 0; + alt = 0; + bzero(libc_vsscanf_allow, 256); + //chset = 0; + } + else if(format[fp] != ' ') + { + if(format[fp] != str[sp]) + exit_loop=1; + + sp++; + } + + } + + fp++; + } + + return r; +} + +int sscanf(const char *str, const char *fmt, ...) +{ + int r; + va_list ap; + + va_start(ap, fmt); + r = vsscanf(str, fmt, ap); + + va_end(ap); + return r; +} diff --git a/libpsn00b/libc/start.s b/libpsn00b/libc/start.s new file mode 100644 index 0000000..c9b529b --- /dev/null +++ b/libpsn00b/libc/start.s @@ -0,0 +1,39 @@ +# Start function! +# This is essentially the entrypoint of the PS-EXE + +.set noreorder + +.section .text + +.global _start +.type _start, @function +_start: + + addiu $sp, -32 + sw $ra, 28($sp) + + la $gp, _gp # Very important to set! + + la $a0, .bss # What are the CORRECT symbols for BSS start and end? + la $a1, _end +.clear_bss: + sb $0 , 0($a0) + blt $a0, $a1, .clear_bss + addiu $a0, 1 + + la $a0, _end+4 # Initialize heap for malloc (does not use BIOS maalloc) + li $a1, 1572864 + jal InitHeap + nop + + move $a0, $0 # No support for arguments for now + move $a1, $0 + + jal main + nop + + lw $ra, 28($sp) + addiu $sp, 32 + jr $ra + nop +
\ No newline at end of file diff --git a/libpsn00b/libc/string.c b/libpsn00b/libc/string.c new file mode 100644 index 0000000..4943877 --- /dev/null +++ b/libpsn00b/libc/string.c @@ -0,0 +1,301 @@ +/* + * string.c + * + * Inherited from PSXSDK C library + */ + +#include <stdio.h> +#include <string.h> +#include <malloc.h> + +int tolower(int chr) +{ + return (chr >='A' && chr<='Z') ? (chr + 32) : (chr); +} + +int toupper(int chr) +{ + return (chr >='a' && chr<='z') ? (chr - 32) : (chr); +} + +// Need to be replaced with MIPS assembler equivalents + +void *memchr(void *s , int c , int n) +{ + while(n--) + { + if(*((unsigned char*)s) == (unsigned char)c) + return s; + + s++; + } + + return NULL; +} + +char *strncpy(char *dst, const char *src, int len) +{ + char *odst=dst; + + while(*src && len) + { + *(dst++) = *(src++); + len--; + } + + if(len)*dst = 0; + + return odst; +} + +char *strcpy(char *dst, const char *src) +{ + char *odst = dst; + + while(*(dst++) = *(src++)); + return odst; +} + +char *strncat(char *s, const char *append, int len) +{ + char *o=s; + + while(*s) + s++; + + strncpy(s, append, len); + + return o; +} + +int strlen(const char *str) +{ + int i = 0; + while(*(str++))i++; + return i; +} + +char *strchr(const char *s, int c) +{ + int x; + + for(x = 0; x <= strlen(s); x++) + if(s[x] == c) return (char*)&s[x]; + + return NULL; +} + +char *strrchr(const char *s, int c) +{ + int x; + + for(x = strlen(s); x>=0; x--) + if(s[x] == c) return (char*)&s[x]; + + return NULL; +} + +char *strpbrk(const char *s, const char *charset) +{ + int x,y; + + for(x = 0; x < strlen(s); x++) + for(y = 0; y < strlen(charset); y++) + if(s[x] == charset[y]) return (char*)&s[x]; + + return NULL; +} + +char *strstr(const char *big, const char *little) +{ + int ls = strlen(little); + int bs = strlen(big); + int x; + + if(ls == 0) + return (char*)big; + + if(ls > bs) + return NULL; + + for(x = 0; x <= bs-ls; x++) + if(memcmp(little, &big[x], ls) == 0) + return (char*)&big[x]; + + return NULL; +} + +int strcmp(const char *s1, const char *s2) +{ + while(*s1 && *s2 && (*s1 == *s2)) + { + s1++; + s2++; + } + + return *s1-*s2; +} + +int strncmp(const char *s1, const char *s2, int len) +{ + int p = 0; + + while(*s1 && *s2 && (*s1 == *s2) && p<len) + { + p++; + + if(p<len) + { + s1++; + s2++; + } + } + + return *s1-*s2; +} + +// Requires a malloc implementation +char *strdup(const char *str) +{ + char *ns = (void*)malloc(strlen(str) + 1); + + if(ns == NULL) + return NULL; + + strcpy(ns, str); + return ns; +} + +char *strndup(const char *str, int len) +{ + int n=strlen(str); + char *ns = (void*)malloc((n+1)>len?len:(n+1)); + + if(ns == NULL) + return NULL; + + strncpy(ns, str, (n+1)>len?len:(n+1)); + return ns; +} + +long long strtoll(const char *nptr, char **endptr, int base) +{ + int r = 0; + int t = 0; + int n = 0; + + if(*nptr == '-') + { + nptr++; + n = 1; + } + + if(base == 0) + if(*nptr == '0') + base = 8; + else + base = 10; + + if(!(base >= 2 && base <= 36)) + return 0; + + if(base == 16 && *nptr == '0') + { + if(*(nptr+1) == 'x' || *(nptr+1) == 'X') + nptr+=2; + } + + while(*nptr) + { + switch(*nptr) + { + case '0'...'9': + t = *nptr - '0'; + break; + case 'a' ... 'z': + t = (*nptr - 'a') + 10; + break; + case 'A' ... 'Z': + t = (*nptr - 'A') + 10; + break; + default: + t = 1000; + break; + } + + if(t>=base) + break; + + r*=base; + r+=t; + nptr++; + } + + if(endptr)*endptr = (char*)nptr; + return n?-r:r; +} + +long strtol(const char *nptr, char **endptr, int base) +{ + return (long)strtoll(nptr, endptr, base); +} + +double strtod(const char *nptr, char **endptr) +{ + char strbuf[64]; + int x = 0; + int y; + double i=0, d=0; + int s=1; + + if(*nptr == '-') + { + nptr++; + s=-1; + } + + while(*nptr >= '0' && *nptr <= '9' && x < 18) + strbuf[x++] = *(nptr++); + + strbuf[x] = 0; + + i = (double)strtoll(strbuf, NULL, 10); + + if(*nptr == '.') + { + nptr++; + x = 0; + + while(*nptr >= '0' && *nptr <= '9' && x < 7) + strbuf[x++] = *(nptr++); + + strbuf[x] = 0; + + if(endptr != NULL) *endptr = (char*)nptr; + + y=1; + + for(x=0;x<strlen(strbuf);x++) + y*=10; + + d = (double)strtoll(strbuf, NULL, 10); + d /= y; + } + else + { + if(endptr != NULL) + *endptr = (char*)nptr; + } + + return (i + d)*s; +} + +long double strtold(const char *nptr, char **endptr) +{ + return (long double)strtod(nptr, endptr); +} + +float strtof(const char *nptr, char **endptr) +{ + return (float)strtod(nptr, endptr); +} diff --git a/libpsn00b/lzp/bit.c b/libpsn00b/lzp/bit.c new file mode 100644 index 0000000..aefa45d --- /dev/null +++ b/libpsn00b/lzp/bit.c @@ -0,0 +1,65 @@ +#include "bit.h" + +// Bit I/O +// + +unsigned char* inPtr = 0; +int inBytes = 0; +unsigned char* outPtr = 0; +int outBytes = 0; + +int bit_buf; +int bit_count; + +void init_bits() { + + bit_count = bit_buf=0; + +} + +void put_bits(int n, int x) { + + bit_buf |= x<<bit_count; + bit_count += n; + + while(bit_count >= 8) { + + *outPtr = bit_buf; + outPtr++; + outBytes++; + + bit_buf >>= 8; + bit_count -= 8; + + } + +} + +void flush_bits() { + + put_bits(7, 0); + bit_count = bit_buf = 0; + +} + +int get_bits(int n) { + + int x; + + while(bit_count < n) { + + bit_buf |= *inPtr<<bit_count; + inPtr++; + inBytes++; + + bit_count += 8; + + } + + x = bit_buf&((1<<n)-1); + bit_buf >>= n; + bit_count -= n; + + return(x); + +} diff --git a/libpsn00b/lzp/bit.h b/libpsn00b/lzp/bit.h new file mode 100644 index 0000000..ff71025 --- /dev/null +++ b/libpsn00b/lzp/bit.h @@ -0,0 +1,26 @@ +#ifndef _LZP_BIT_H +#define _LZP_BIT_H + +extern unsigned char* inPtr; +extern int inBytes; +extern unsigned char* outPtr; +extern int outBytes; + +extern int bit_buf; +extern int bit_count; + +#ifdef __cplusplus +extern "C" { +#endif + +void init_bits(); +void put_bits(int n, int x); +void flush_bits(); +int get_bits(int n); + +#ifdef __cplusplus +} +#endif + + +#endif // _LZP_BIT_H diff --git a/libpsn00b/lzp/compress.c b/libpsn00b/lzp/compress.c new file mode 100644 index 0000000..33af08d --- /dev/null +++ b/libpsn00b/lzp/compress.c @@ -0,0 +1,488 @@ +// Based on ilia muraviev's CRUSH compressor program which falls under public domain + +#include <string.h> +#if LZP_USE_MALLOC == TRUE +#include <stdlib.h> +#endif + +#include "lzconfig.h" +#include "bit.h" +#include "lzp.h" + + +// Internal structure for hash table allocation sizes +#if LZP_NO_COMPRESS == FALSE + +struct { + short WindowSize; // Window size (17 - 23) + short Hash1Size; // Hash 1 table size (10 - 21) + short Hash2Size; // Hash 2 table size (12 - 24) +} lzHashParam = { + LZP_WINDOW_SIZE, + LZP_HASH1_SIZE, + LZP_HASH2_SIZE +}; + +#endif + + +// Defines and macros for lz77 compression/decompression (don't touch) +#define W_BITS lzHashParam.WindowSize +#define HASH1_BITS lzHashParam.Hash1Size +#define HASH2_BITS lzHashParam.Hash2Size + +#define W_SIZE (1<<W_BITS) +#define W_MASK (W_SIZE-1) +#define SLOT_BITS 4 +#define NUM_SLOTS (1<<SLOT_BITS) + +#define A_BITS 2 // 1 xx +#define B_BITS 2 // 01 xx +#define C_BITS 2 // 001 xx +#define D_BITS 3 // 0001 xxx +#define E_BITS 5 // 00001 xxxxx +#define F_BITS 9 // 00000 xxxxxxxxx +#define A (1<<A_BITS) +#define B ((1<<B_BITS)+A) +#define C ((1<<C_BITS)+B) +#define D ((1<<D_BITS)+C) +#define E ((1<<E_BITS)+D) +#define F ((1<<F_BITS)+E) +#define MIN_MATCH 3 +#define MAX_MATCH ((F-1)+MIN_MATCH) + +#define BUF_SIZE (1<<26) +#define TOO_FAR (1<<16) + +#define HASH1_LEN MIN_MATCH +#define HASH2_LEN (MIN_MATCH+1) +#define HASH1_SIZE (1<<HASH1_BITS) +#define HASH2_SIZE (1<<HASH2_BITS) +#define HASH1_MASK (HASH1_SIZE-1) +#define HASH2_MASK (HASH2_SIZE-1) +#define HASH1_SHIFT ((HASH1_BITS+(HASH1_LEN-1))/HASH1_LEN) +#define HASH2_SHIFT ((HASH2_BITS+(HASH2_LEN-1))/HASH2_LEN) + + +// LZ77 +// + +#if LZP_NO_COMPRESS == FALSE + +int update_hash1(int h, int c) { + + return(((h<<HASH1_SHIFT)+c)&HASH1_MASK); + +} + +int update_hash2(int h, int c) { + + return(((h<<HASH2_SHIFT)+c)&HASH2_MASK); + +} + +int get_min(int a, int b) { + + return(a<b?a:b); + +} + +int get_max(int a, int b) { + + return(a>b?a:b); + +} + +int get_penalty(int a, int b) { + + int p=0; + + while(a > b) { + a >>= 3; + ++p; + } + + return(p); + +} + +int lzCompress(void* outBuff, void* inBuff, int inSize, int level) { + + #if LZP_USE_MALLOC == FALSE + int head[HASH1_SIZE+HASH2_SIZE]; + int prev[W_SIZE]; + #else + int* head = malloc(4*(HASH1_SIZE+HASH2_SIZE)); + int* prev = malloc(4*W_SIZE); + #endif + + + int max_chain[] = {4, 256, 1<<12}; + + int i,s; + int h1=0; + int h2=0; + int p=0; + + int len; + int offset; + + int max_match; + int limit; + + int chain_len; + int next_p; + int max_lazy; + int log; + + + inPtr = (unsigned char*)inBuff; + outPtr = (unsigned char*)outBuff; + outBytes = 0; + + + for (i=0; i<HASH1_SIZE+HASH2_SIZE; ++i) + head[i] = -1; + + for (i=0; i<HASH1_LEN; ++i) + h1=update_hash1(h1, inPtr[i]); + + for (i=0; i<HASH2_LEN; ++i) + h2=update_hash2(h2, inPtr[i]); + + init_bits(); + + // Put window size value so that the compressed data will be independent of the compression settings + put_bits(5, lzHashParam.WindowSize); + + while(p < inSize) { + + len = MIN_MATCH-1; + offset = W_SIZE; + + max_match = get_min(MAX_MATCH, inSize-p); + limit = get_max(p-W_SIZE, 0); + + if (head[h1] >= limit) { + + s = head[h1]; + + if (inPtr[s] == inPtr[p]) { + + i = 0; + + while(++i < max_match) { + if (inPtr[s+i] != inPtr[p+i]) + break; + } + + if (i > len) { + len = i; + offset = p-s; + } + + } + + } + + if (len < MAX_MATCH) { + + chain_len = max_chain[level]; + s = head[h2+HASH1_SIZE]; + + while((chain_len-- != 0) && (s >= limit)) { + + if ((inPtr[s+len] == inPtr[p+len]) && (inPtr[s] == inPtr[p])) { + + i = 0; + + while(++i < max_match) { + if (inPtr[s+i] != inPtr[p+i]) + break; + } + + if (i > len+get_penalty((p-s)>>4, offset)) { + len = i; + offset = p-s; + } + + if (i == max_match) + break; + + } + + s=prev[s&W_MASK]; + + } + + } + + if ((len == MIN_MATCH) && (offset > TOO_FAR)) + len=0; + + if ((level >= 2) && (len >= MIN_MATCH) && (len < max_match)) { + + next_p = p+1; + max_lazy = get_min(len+4, max_match); + + chain_len = max_chain[level]; + s = head[update_hash2(h2, inPtr[next_p+(HASH2_LEN-1)])+HASH1_SIZE]; + + while((chain_len-- != 0) && (s >= limit)) { + + if ((inPtr[s+len] == inPtr[next_p+len]) && (inPtr[s] == inPtr[next_p])) { + + i = 0; + + while(++i < max_lazy) { + if (inPtr[s+i] != inPtr[next_p+i]) + break; + } + + if (i > len+get_penalty(next_p-s, offset)) { + len = 0; + break; + } + + if (i == max_lazy) + break; + + } + + s = prev[s&W_MASK]; + + } + + } + + + if (len >= MIN_MATCH) { // Match + + put_bits(1, 1); + + i = len-MIN_MATCH; + + if (i < A) { + put_bits(1, 1); // 1 + put_bits(A_BITS, i); + } else if (i < B) { + put_bits(2, 1<<1); // 01 + put_bits(B_BITS, i-A); + } else if (i < C) { + put_bits(3, 1<<2); // 001 + put_bits(C_BITS, i-B); + } else if (i < D) { + put_bits(4, 1<<3); // 0001 + put_bits(D_BITS, i-C); + } else if (i < E) { + put_bits(5, 1<<4); // 00001 + put_bits(E_BITS, i-D); + } else { + put_bits(5, 0); // 00000 + put_bits(F_BITS, i-E); + } + + --offset; + log = W_BITS-NUM_SLOTS; + + while(offset >= (2<<log)) + ++log; + + put_bits(SLOT_BITS, log-(W_BITS-NUM_SLOTS)); + + if (log>(W_BITS-NUM_SLOTS)) + put_bits(log, offset-(1<<log)); + else + put_bits(W_BITS-(NUM_SLOTS-1), offset); + + } else { // Literal + + len = 1; + put_bits(9, inPtr[p]<<1); // 0 xxxxxxxx + + } + + while(len-- != 0) { // Insert new strings + + head[h1] = p; + prev[p&W_MASK] = head[h2+HASH1_SIZE]; + head[h2+HASH1_SIZE] = p; + + ++p; + + h1 = update_hash1(h1, inPtr[p+(HASH1_LEN-1)]); + h2 = update_hash2(h2, inPtr[p+(HASH2_LEN-1)]); + + } + + } + + flush_bits(); + + #if LZP_USE_MALLOC == TRUE + free(head); + free(prev); + #endif + + return(outBytes); + +} + +void lzSetHashSizes(int window, int hash1, int hash2) { + + lzHashParam.WindowSize = window; + lzHashParam.Hash1Size = hash1; + lzHashParam.Hash2Size = hash2; + +} + +void lzResetHashSizes() { + + lzHashParam.WindowSize = LZP_WINDOW_SIZE; + lzHashParam.Hash1Size = LZP_HASH1_SIZE; + lzHashParam.Hash2Size = LZP_HASH2_SIZE; + +} + +#endif // LZP_NO_COMPRESS + +int lzDecompress(void* outBuff, void* inBuff, int inSize) { + + int p=0; + int len; + int log; + int s; + int windowSize; + + inPtr = (unsigned char*)inBuff; + outPtr = (unsigned char*)outBuff; + inBytes = 0; + outBytes = 0; + + init_bits(); + + // Get window size value + windowSize = get_bits(5); + + while(inBytes < inSize) { + + if (get_bits(1)) { + + if (get_bits(1)) + len = get_bits(A_BITS); + else if (get_bits(1)) + len = get_bits(B_BITS)+A; + else if (get_bits(1)) + len = get_bits(C_BITS)+B; + else if (get_bits(1)) + len = get_bits(D_BITS)+C; + else if (get_bits(1)) + len = get_bits(E_BITS)+D; + else + len = get_bits(F_BITS)+E; + + log = get_bits(SLOT_BITS)+(windowSize-NUM_SLOTS); + + s =~ (log>(windowSize-NUM_SLOTS) ? get_bits(log)+(1<<log) : get_bits(windowSize-(NUM_SLOTS-1)))+p; + + if (s < 0) + return(LZP_ERR_DECOMPRESS); + + outPtr[p++] = outPtr[s++]; + outPtr[p++] = outPtr[s++]; + outPtr[p++] = outPtr[s++]; + + while(len-- != 0) + outPtr[p++] = outPtr[s++]; + + } else { + + outPtr[p++] = get_bits(8); + + } + + } + + return(p); + +} + +int lzDecompressLen(void* outBuff, int outSize, void* inBuff, int inSize) { + + int p=0; + int len; + int log; + int s; + int windowSize; + + inPtr = (unsigned char*)inBuff; + outPtr = (unsigned char*)outBuff; + inBytes = 0; + outBytes = 0; + + init_bits(); + + // Get window size value + windowSize = get_bits(5); + + while(inBytes < inSize) { + + if (get_bits(1)) { + + if (get_bits(1)) + len = get_bits(A_BITS); + else if (get_bits(1)) + len = get_bits(B_BITS)+A; + else if (get_bits(1)) + len = get_bits(C_BITS)+B; + else if (get_bits(1)) + len = get_bits(D_BITS)+C; + else if (get_bits(1)) + len = get_bits(E_BITS)+D; + else + len = get_bits(F_BITS)+E; + + log = get_bits(SLOT_BITS)+(windowSize-NUM_SLOTS); + + s =~ (log>(windowSize-NUM_SLOTS) ? get_bits(log)+(1<<log) : get_bits(windowSize-(NUM_SLOTS-1)))+p; + + if (s < 0) + return(LZP_ERR_DECOMPRESS); + + outPtr[p++] = outPtr[s++]; + if (p >= outSize) + break; + + outPtr[p++] = outPtr[s++]; + if (p >= outSize) + break; + + outPtr[p++] = outPtr[s++]; + if (p >= outSize) + break; + + while(len-- != 0) { + + outPtr[p++] = outPtr[s++]; + if (p >= outSize) + break; + + } + + if (p >= outSize) + break; + + } else { + + outPtr[p++] = get_bits(8); + + } + + if (p >= outSize) + break; + + } + + return(p); + +} diff --git a/libpsn00b/lzp/crc.c b/libpsn00b/lzp/crc.c new file mode 100644 index 0000000..c5ab702 --- /dev/null +++ b/libpsn00b/lzp/crc.c @@ -0,0 +1,91 @@ +#include "lzp.h" + +void initTable16(unsigned short* table) { + + int i, j; + unsigned short crc, c; + + for (i=0; i<256; i++) { + + crc = 0; + c = (unsigned short) i; + + for (j=0; j<8; j++) { + + if ( (crc ^ c) & 0x0001 ) + crc = ( crc >> 1 ) ^ 0xA001; + else + crc = crc >> 1; + + c = c >> 1; + } + + table[i] = crc; + } + +} + +void initTable32(unsigned int* table) { + + int i,j; + unsigned int crcVal; + + for(i=0; i<256; i++) { + + crcVal = i; + + for(j=0; j<8; j++) { + + if (crcVal&0x00000001L) + crcVal = (crcVal>>1)^0xEDB88320L; + else + crcVal = crcVal>>1; + + } + + table[i] = crcVal; + + } + +} + +unsigned short lzCRC16(void* buff, int bytes, unsigned short crc) { + + int i; + unsigned short tmp, short_c; + unsigned short crcTable[256]; + + initTable16(crcTable); + + for(i=0; i<bytes; i++) { + + short_c = 0x00ff & (unsigned short)((unsigned char*)buff)[i]; + + tmp = crc ^ short_c; + crc = (crc >> 8) ^ crcTable[tmp&0xff]; + + } + + return(crc); + +} + +unsigned int lzCRC32(void* buff, int bytes, unsigned int crc) { + + int i; + unsigned char* byteBuff = (unsigned char*)buff; + unsigned int byte; + unsigned int crcTable[256]; + + initTable32(crcTable); + + for(i=0; i<bytes; i++) { + + byte = 0x000000ffL&(unsigned int)byteBuff[i]; + crc = (crc>>8)^crcTable[(crc^byte)&0xff]; + + } + + return(crc^0xFFFFFFFF); + +} diff --git a/libpsn00b/lzp/lzp.c b/libpsn00b/lzp/lzp.c new file mode 100644 index 0000000..1f4fea4 --- /dev/null +++ b/libpsn00b/lzp/lzp.c @@ -0,0 +1,88 @@ +#include <stdio.h> +#include <string.h> +#include <ctype.h> + +#include "lzp.h" + + +static char* lcase(char* text) { + + int i; + + for(i=0; text[i]!=0x00; i++) + text[i] = tolower(text[i]); + + return(text); + +} + + +int lzpSearchFile(const char* fileName, void* lzpack) { + + int i; + char searchName[16]; + char compareName[16]; + LZP_FILE* fileEntry; + + strcpy(searchName, fileName); + lcase(searchName); + + fileEntry = (LZP_FILE*)(lzpack+4); + for(i=0; i<((LZP_HEAD*)lzpack)->numFiles; i++) { + + strcpy(compareName, fileEntry[i].fileName); + lcase(compareName); + + if (strcmp(searchName, compareName) == 0) + return(i); + + } + + return(LZP_ERR_NOTFOUND); + +} + +LZP_FILE* lzpFileEntry(void* lzpack, int fileNum) { + + if (strncmp("LZP", ((LZP_HEAD*)lzpack)->id, 3) != 0) + return(NULL); + + if ((fileNum < 0) || (fileNum > (((LZP_HEAD*)lzpack)->numFiles-1))) + return(NULL); + + return(&((LZP_FILE*)(lzpack+4))[fileNum]); + +} + +int lzpFileSize(void* lzpack, int fileNum) { + + if (strncmp("LZP", ((LZP_HEAD*)lzpack)->id, 3) != 0) + return 0; + + if ((fileNum < 0) || (fileNum > (((LZP_HEAD*)lzpack)->numFiles-1))) + return 0; + + return ((LZP_FILE*)(lzpack+4))[fileNum].fileSize; +} + +int lzpUnpackFile(void* buff, void* lzpack, int fileNum) { + + LZP_FILE* fileEntry = &((LZP_FILE*)(lzpack+4))[fileNum]; + int unpackedSize; + + // Check ID header + if (strncmp("LZP", ((LZP_HEAD*)lzpack)->id, 3) != 0) + return(LZP_ERR_INVALID_PACK); + + // Do a CRC16 check of the compressed data's integrity + if (lzCRC32(lzpack+fileEntry->offset, fileEntry->packedSize, LZP_CRC32_REMAINDER) != fileEntry->crc) + return(LZP_ERR_CRC_MISMATCH); + + // Decompress data to the specified address + unpackedSize = lzDecompress(buff, lzpack+fileEntry->offset, fileEntry->packedSize); + if (unpackedSize < 0) + return(unpackedSize); + + return(unpackedSize); + +} diff --git a/libpsn00b/lzp/lzp.h b/libpsn00b/lzp/lzp.h new file mode 100644 index 0000000..ffd7933 --- /dev/null +++ b/libpsn00b/lzp/lzp.h @@ -0,0 +1,223 @@ +/*! \file lzp.h + * \brief Main library header + */ + +/*! \mainpage + * \version 0.20b + * \author John Wilbert 'Lameguy64' Villamor + * + * \section creditsSection Credits + * - LZ77 data compression/decompression routines based from Ilya Muravyov's + * crush.cpp released under public domain. Refined and ported to C by Lameguy64. + * - CRC calculation routines based from Lammert Bies' lib_crc routines. + * + */ + +#ifndef _LZPACK_H +#define _LZPACK_H + +#include <sys/types.h> +#ifdef _WIN32 +#include <windows.h> +#endif + +/*! \addtogroup crcBaseRemainders CRC Base Remainder Values + * @{ + */ +//! Initial remainder value for lzCRC16() +#define LZP_CRC16_REMAINDER 0x0000 +//! Initial remainder value for lzCRC32() +#define LZP_CRC32_REMAINDER 0xFFFFFFFF +/*! @} */ + + +/*! \addtogroup compLevels Compression Levels + * \brief Compression levels for the lzCompress() function. + * @{ + */ +//! Minimal (but fast) compression +#define LZP_COMPRESS_FAST 0 +//! Normal compression level +#define LZP_COMPRESS_NORMAL 1 +//! Maximum compression level +#define LZP_COMPRESS_MAX 2 +/*! @} */ + + +/*! \addtogroup libraryErrorCodes Library Error Codes + * @{ + */ +//! No error +#define LZP_ERR_NONE 0 +//! Decompression error +#define LZP_ERR_DECOMPRESS -1 +//! Not a valid LZP/QLP/PCK archive +#define LZP_ERR_INVALID_PACK -2 +//! File not found +#define LZP_ERR_NOTFOUND -3 +//! CRC check mismatch (data corruption) +#define LZP_ERR_CRC_MISMATCH -4 +/*! @} */ + + +//! Header structure of an LZP format archive file +typedef struct { + + //! File ID (must always be 'LZP') + char id[3]; + //! File count + u_char numFiles; + +} LZP_HEAD; + +//! File entry structure for an LZP format archive file +typedef struct { + + //! File name + char fileName[16]; + //! CRC32 checksum of file + u_int crc; + //! Original size of file in bytes + u_int fileSize; + //! Compressed size of file + u_int packedSize; + //! File data offset + u_int offset; + +} LZP_FILE; + + +// Function prototypes +#ifdef __cplusplus +extern "C" { +#endif + + +/*! \addtogroup compressFuncs Data Compression and Decompression Functions + * \brief Functions to compress and decompress data. + * @{ + */ + +/*! Compress a block of data. + * + * \details This function compresses a specified block of data in LZ77 encoding. + * Depending on the size of the input data and speed of the computer, compression + * may take a while to complete. + * + * \param[out] *outBuff Pointer to buffer to store compressed data. + * \param[in] *inBuff Pointer to data to compress. + * \param[in] inSize Size of data to compress in bytes. + * \param[in] level Compression level (see \ref compLevels). + * + * \returns The size of the compressed data in bytes. + */ +int lzCompress(void* outBuff, void* inBuff, int inSize, int level); + +/*! Decompress a compressed block of data. + * + * \details Decompressed a compressed block of data produced by lzCompress(). It cannot + * return the decompressed size of the data ahead of time so you must preserve the decompressed + * size of the data yourself. + * + * \note The decompression algorithm used in this function is completely independent + * of the compression settings set by lzSetHashSizes() before compressing the data with + * lzCompress(). + * + * \param[out] *outBuff Pointer to buffer to store decompressed data. + * \param[in] *inBuff Pointer to compressed data to decompress. + * \param[in] inSize Compressed data size in bytes. + * + * \returns Size of decompressed data in bytes or LZP_ERR_DECOMPRESS if a + * decompression error occurred. + */ +int lzDecompress(void* outBuff, void* inBuff, int inSize); + +int lzDecompressLen(void* outBuff, int outSize, void* inBuff, int inSize); + +/*! Sets the sizes of hash tables for data compression. + * + * \param[in] window Sliding window size. + * \param[in] hash1 Hash table 1 size. + * \param[in] hash2 Hash table 2 size. + */ +void lzSetHashSizes(int window, int hash1, int hash2); + +/*! Reset the sizes of hash tables to their defaults. + */ +void lzResetHashSizes(); + +/*! @} */ + + +/*! \addtogroup crcFuncs CRC Hashing Functions + * \brief Functions to calculate CRC hashes of data. + * @{ + */ + +/*! Calculates a CRC16 hash of the specified buffer. + * + * \param[in] *buff Pointer to buffer to calculate a hash of. + * \param[in] bytes Size of buffer in bytes. + * \param[in] crc CRC remainder (use LZP_CRC16_REMAINDER). + * + * \returns CRC16 hash of specified buffer. + */ +unsigned short lzCRC16(void* buff, int bytes, unsigned short crc); + +/*! Calculates a CRC32 hash of the specified buffer. + * + * \param[in] *buff Pointer to buffer to calculate a hash of. + * \param[in] bytes Size of buffer in bytes. + * \param[in] crc CRC remainder (use LZP_CRC16_REMAINDER). + * + * \returns CRC32 hash of specified buffer. + */ +unsigned int lzCRC32(void* buff, int bytes, unsigned int crc); + +/*! @} */ + + +/*! \addtogroup lzpFunctions LZP Archive Handling Routines + * \brief Functions to index and unpack files from LZP archives. + * @{ + */ + +/*! Searches for a file by name in an LZP archive and returns a file entry number. + * + * \param[in] *fileName String of file to search (must be less than 13 characters). + * \param[in] *lzpack Pointer to LZP archive file. + * + * \returns File index of found file or one of \ref libraryErrorCodes if an error occurred. + */ +int lzpSearchFile(const char* fileName, void* lzpack); + +int lzpFileSize(void* lzpack, int fileNum); + +/*! Get a pointer to a file entry inside of an LZP archive. + * + * \param[in] *lzpack Pointer to LZP archive file. + * \param[in] fileNum File number to get an entry of (you may use lzpSearchFile()). + * + * \returns A pointer to an LZP_FILE struct or NULL if an error occurred. + */ +LZP_FILE* lzpFileEntry(void* lzpack, int fileNum); + +/*! Unpacks a file from an LZP archive to the specified memory buffer. + * + * \param[in] *buff Pointer to buffer to store unpacked file. + * \param[in] *lzpack Pointer to LZP archive file. + * \param[in] fileNum File entry number of file to extract (you may use lzpSearchFile()). + * + * \returns Size of decompressed file in bytes or one of \ref libraryErrorCodes if an error occurred. + */ +int lzpUnpackFile(void* buff, void* lzpack, int fileNum); + +/*! @} */ + + +#ifdef __cplusplus +} +#endif + + +#endif // _LZPACK_H diff --git a/libpsn00b/lzp/lzqlp.h b/libpsn00b/lzp/lzqlp.h new file mode 100644 index 0000000..fae6438 --- /dev/null +++ b/libpsn00b/lzp/lzqlp.h @@ -0,0 +1,26 @@ +#ifndef _QLP_H +#define _QLP_H + +#define PACK_ERR_NONE 0 +#define PACK_ERR_INVALID -1 +#define PACK_ERR_NOTFOUND -2 +#define PACK_ERR_INCOMPLETE -3 +#define PACK_ERR_READ_FAULT -4 + +typedef struct { + char id[3]; + unsigned char numfiles; +} QLP_HEAD; + +typedef struct { + char name[16]; + unsigned int size; + unsigned int offs; +} QLP_FILE; + +int qlpFileCount(void* qlpfile); +QLP_FILE* qlpFileEntry(int index, void* qlpfile); +void* qlpFileAddr(int index, void* qlpfile); +int qlpFindFile(char* fileName, void* qlpfile); + +#endif // _QLP_H
\ No newline at end of file diff --git a/libpsn00b/lzp/makefile b/libpsn00b/lzp/makefile new file mode 100644 index 0000000..cf82872 --- /dev/null +++ b/libpsn00b/lzp/makefile @@ -0,0 +1,28 @@ +PREFIX = mipsel-unknown-elf- + +TARGET = liblzp.a + +CFILES = $(notdir $(wildcard ./*.c)) +OFILES = $(addprefix build/,$(CFILES:.c=.o)) + +INCLUDE = -I../include + +CFLAGS = -O2 -msoft-float -fno-builtin -nostdlib -Wa,--strip-local-absolute +AFLAGS = -msoft-float --strip-local-absolute + +CC = $(PREFIX)gcc +AR = $(PREFIX)ar +RANLIB = $(PREFIX)ranlib + +all: $(TARGET) + +$(TARGET): $(OFILES) + $(AR) cr $(TARGET) $(OFILES) + $(RANLIB) $(TARGET) + +build/%.o: %.c + @mkdir -p build + $(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@ + +clean: + rm -Rf build $(OFILES) $(TARGET) diff --git a/libpsn00b/lzp/qlp.c b/libpsn00b/lzp/qlp.c new file mode 100644 index 0000000..3be8356 --- /dev/null +++ b/libpsn00b/lzp/qlp.c @@ -0,0 +1,64 @@ +#include <stdio.h> +#include <string.h> +#include <ctype.h> +#include "lzqlp.h" + +static char* lcase(char* str) { + + while(*str != 0x00) { + *str = tolower(*str); + str++; + } + + return(str); + +} + +int qlpFileCount(void* qlpfile) { + + if (strncmp(((QLP_HEAD*)qlpfile)->id, "QLP", 3) != 0) + return(PACK_ERR_INVALID); + + return(((QLP_HEAD*)qlpfile)->numfiles); + +} + +QLP_FILE* qlpFileEntry(int index, void* qlpfile) { + + if (strncmp(((QLP_HEAD*)qlpfile)->id, "QLP", 3) != 0) + return(NULL); + + if (index > ((QLP_HEAD*)qlpfile)->numfiles) + return(NULL); + + return(&((QLP_FILE*)(qlpfile+4))[index]); + +} + +void* qlpFileAddr(int index, void* qlpfile) { + + return( qlpfile+((QLP_FILE*)(qlpfile+4))[index].offs ); + +} + +int qlpFindFile(char* fileName, void* qlpfile) { + + int i; + char nameBuff[2][16]; + + strcpy(nameBuff[0], fileName); + lcase(nameBuff[0]); + + for(i=0; i<((QLP_HEAD*)qlpfile)->numfiles; i++) { + + strcpy(nameBuff[1], ((QLP_FILE*)(qlpfile+4))[i].name); + lcase(nameBuff[1]); + + if (strcmp(nameBuff[0], nameBuff[1]) == 0) + return(i); + + } + + return(PACK_ERR_NOTFOUND); + +}
\ No newline at end of file diff --git a/libpsn00b/makefile b/libpsn00b/makefile new file mode 100644 index 0000000..bcfc9a5 --- /dev/null +++ b/libpsn00b/makefile @@ -0,0 +1,16 @@ +# Run using make (Linux) or gmake (BSD) +# Part of the PSn00bSDK Project +# 2019 Lameguy64 / Meido-Tek Productions + +TOPTARGETS = all clean + +LIBDIRS = libc lzp psxgpu psxgte psxapi psxetc psxspu + + +$(TOPTARGETS): $(LIBDIRS) +$(LIBDIRS): + @$(MAKE) -C $@ $(MAKECMDGOALS) + +clean: $(LIBDIRS) + +.PHONY: $(TOPTARGETS) $(LIBDIRS) diff --git a/libpsn00b/psxapi/fs/_96_init.s b/libpsn00b/psxapi/fs/_96_init.s new file mode 100644 index 0000000..ac35d6b --- /dev/null +++ b/libpsn00b/psxapi/fs/_96_init.s @@ -0,0 +1,10 @@ +.set noreorder +.section .text + +.global _96_init +.type _96_init, @function +_96_init: + addiu $t2, $0 , 0xa0 + jr $t2 + addiu $t1, $0 , 0x71 +
\ No newline at end of file diff --git a/libpsn00b/psxapi/fs/_96_remove.s b/libpsn00b/psxapi/fs/_96_remove.s new file mode 100644 index 0000000..a65c0ba --- /dev/null +++ b/libpsn00b/psxapi/fs/_96_remove.s @@ -0,0 +1,10 @@ +.set noreorder +.section .text + +.global _96_remove +.type _96_remove, @function +_96_remove: + addiu $t2, $0 , 0xa0 + jr $t2 + addiu $t1, $0 , 0x72 +
\ No newline at end of file diff --git a/libpsn00b/psxapi/fs/chdir.s b/libpsn00b/psxapi/fs/chdir.s new file mode 100644 index 0000000..83abf70 --- /dev/null +++ b/libpsn00b/psxapi/fs/chdir.s @@ -0,0 +1,10 @@ +.set noreorder +.section .text + +.global chdir +.type chdir, @function +chdir: + addiu $t2, $0, 0xb0 + jr $t2 + addiu $t1, $0, 0x40 +
\ No newline at end of file diff --git a/libpsn00b/psxapi/fs/erase.s b/libpsn00b/psxapi/fs/erase.s new file mode 100644 index 0000000..0ddd05f --- /dev/null +++ b/libpsn00b/psxapi/fs/erase.s @@ -0,0 +1,10 @@ +.set noreorder +.section .text + +.global erase +.type erase, @function +erase: + addiu $t2, $0, 0xb0 + jr $t2 + addiu $t1, $0, 0x45 +
\ No newline at end of file diff --git a/libpsn00b/psxapi/fs/firstfile.s b/libpsn00b/psxapi/fs/firstfile.s new file mode 100644 index 0000000..2d1c1cd --- /dev/null +++ b/libpsn00b/psxapi/fs/firstfile.s @@ -0,0 +1,10 @@ +.set noreorder +.section .text + +.global firstfile +.type firstfile, @function +firstfile: + addiu $t2, $0, 0xb0 + jr $t2 + addiu $t1, $0, 0x42 +
\ No newline at end of file diff --git a/libpsn00b/psxapi/fs/nextfile.s b/libpsn00b/psxapi/fs/nextfile.s new file mode 100644 index 0000000..51a285a --- /dev/null +++ b/libpsn00b/psxapi/fs/nextfile.s @@ -0,0 +1,10 @@ +.set noreorder +.section .text + +.global nextfile +.type nextfile, @function +nextfile: + addiu $t2, $0, 0xb0 + jr $t2 + addiu $t1, $0, 0x43 +
\ No newline at end of file diff --git a/libpsn00b/psxapi/fs/rename.s b/libpsn00b/psxapi/fs/rename.s new file mode 100644 index 0000000..5815dba --- /dev/null +++ b/libpsn00b/psxapi/fs/rename.s @@ -0,0 +1,10 @@ +.set noreorder +.section .text + +.global rename +.type rename, @function +rename: + addiu $t2, $0, 0xb0 + jr $t2 + addiu $t1, $0, 0x44 +
\ No newline at end of file diff --git a/libpsn00b/psxapi/makefile b/libpsn00b/psxapi/makefile new file mode 100644 index 0000000..30c1522 --- /dev/null +++ b/libpsn00b/psxapi/makefile @@ -0,0 +1,34 @@ +# Run using make (Linux) or gmake (BSD) +# Part of the PSn00bSDK Project +# 2019 Lameguy64 / Meido-Tek Productions + +PREFIX = mipsel-unknown-elf- + +TARGET = ../libpsxapi.a + +SOURCES = stdio fs sys + +AFILES = $(foreach dir,$(SOURCES),$(wildcard $(dir)/*.s)) +OFILES = $(addprefix build/,$(AFILES:.s=.o)) + +INCLUDE = -I../include + +AFLAGS = -msoft-float -Wa,--strip-local-absolute + +CC = $(PREFIX)gcc +AS = $(PREFIX)as +AR = $(PREFIX)ar +RANLIB = $(PREFIX)ranlib + +all: $(TARGET) + +$(TARGET): $(OFILES) + $(AR) cr $(TARGET) $(OFILES) + $(RANLIB) $(TARGET) + +build/%.o: %.s + @mkdir -p $(dir $@) + $(CC) $(AFLAGS) $(INCLUDE) -c $< -o $@ + +clean: + rm -Rf build $(TARGET) diff --git a/libpsn00b/psxapi/stdio/close.s b/libpsn00b/psxapi/stdio/close.s new file mode 100644 index 0000000..6d52762 --- /dev/null +++ b/libpsn00b/psxapi/stdio/close.s @@ -0,0 +1,10 @@ +.set noreorder +.section .text + +.global close +.type close, @function +close: + addiu $t2, $0, 0xa0 + jr $t2 + addiu $t1, $0, 0x04 +
\ No newline at end of file diff --git a/libpsn00b/psxapi/stdio/getc.s b/libpsn00b/psxapi/stdio/getc.s new file mode 100644 index 0000000..2a93af6 --- /dev/null +++ b/libpsn00b/psxapi/stdio/getc.s @@ -0,0 +1,10 @@ +.set noreorder +.section .text + +.global getc +.type getc, @function +getc: + addiu $t2, $0, 0xa0 + jr $t2 + addiu $t1, $0, 0x08 +
\ No newline at end of file diff --git a/libpsn00b/psxapi/stdio/ioctl.s b/libpsn00b/psxapi/stdio/ioctl.s new file mode 100644 index 0000000..9ba17e6 --- /dev/null +++ b/libpsn00b/psxapi/stdio/ioctl.s @@ -0,0 +1,10 @@ +.set noreorder +.section .text + +.global ioctl +.type ioctl, @function +ioctl: + addiu $t2, $0, 0xa0 + jr $t2 + addiu $t1, $0, 0x05 +
\ No newline at end of file diff --git a/libpsn00b/psxapi/stdio/open.s b/libpsn00b/psxapi/stdio/open.s new file mode 100644 index 0000000..ce8c684 --- /dev/null +++ b/libpsn00b/psxapi/stdio/open.s @@ -0,0 +1,10 @@ +.set noreorder +.section .text + +.global open +.type open, @function +open: + addiu $t2, $0, 0xa0 + jr $t2 + addiu $t1, $0, 0x00 +
\ No newline at end of file diff --git a/libpsn00b/psxapi/stdio/printf.s b/libpsn00b/psxapi/stdio/printf.s new file mode 100644 index 0000000..64f1390 --- /dev/null +++ b/libpsn00b/psxapi/stdio/printf.s @@ -0,0 +1,10 @@ +.set noreorder +.section .text + +.global printf +.type printf, @function +printf: + addiu $t2, $0, 0xa0 + jr $t2 + addiu $t1, $0, 0x3f +
\ No newline at end of file diff --git a/libpsn00b/psxapi/stdio/putc.s b/libpsn00b/psxapi/stdio/putc.s new file mode 100644 index 0000000..7c73241 --- /dev/null +++ b/libpsn00b/psxapi/stdio/putc.s @@ -0,0 +1,10 @@ +.set noreorder +.section .text + +.global putchar +.type putc, @function +putchar: + addiu $t2, $0, 0xa0 + jr $t2 + addiu $t1, $0, 0x09 +
\ No newline at end of file diff --git a/libpsn00b/psxapi/stdio/read.s b/libpsn00b/psxapi/stdio/read.s new file mode 100644 index 0000000..4209232 --- /dev/null +++ b/libpsn00b/psxapi/stdio/read.s @@ -0,0 +1,10 @@ +.set noreorder +.section .text + +.global read +.type read, @function +read: + addiu $t2, $0, 0xa0 + jr $t2 + addiu $t1, $0, 0x02 +
\ No newline at end of file diff --git a/libpsn00b/psxapi/stdio/seek.s b/libpsn00b/psxapi/stdio/seek.s new file mode 100644 index 0000000..944afd9 --- /dev/null +++ b/libpsn00b/psxapi/stdio/seek.s @@ -0,0 +1,10 @@ +.set noreorder +.section .text + +.global seek +.type seek, @function +seek: + addiu $t2, $0, 0xA0 + jr $t2 + addiu $t1, $0, 0x01 +
\ No newline at end of file diff --git a/libpsn00b/psxapi/stdio/write.s b/libpsn00b/psxapi/stdio/write.s new file mode 100644 index 0000000..c451952 --- /dev/null +++ b/libpsn00b/psxapi/stdio/write.s @@ -0,0 +1,10 @@ +.set noreorder +.section .text + +.global write +.type write, @function +write: + addiu $t2, $0, 0xa0 + jr $t2 + addiu $t1, $0, 0x03 +
\ No newline at end of file diff --git a/libpsn00b/psxapi/sys/adddev.s b/libpsn00b/psxapi/sys/adddev.s new file mode 100644 index 0000000..7fa717d --- /dev/null +++ b/libpsn00b/psxapi/sys/adddev.s @@ -0,0 +1,10 @@ +.set noreorder + +.section .text + +.global AddDev +.type AddDev, @function +AddDev: + addiu $t2, $0, 0xb0 + jr $t2 + addiu $t1, $0, 0x47
\ No newline at end of file diff --git a/libpsn00b/psxapi/sys/b_initheap.s b/libpsn00b/psxapi/sys/b_initheap.s new file mode 100644 index 0000000..7411dd6 --- /dev/null +++ b/libpsn00b/psxapi/sys/b_initheap.s @@ -0,0 +1,10 @@ +.set noreorder +.section .text + +.global b_InitHeap +.type b_InitHeap, @function +b_InitHeap: + addiu $t2, $0, 0xa0 + jr $t2 + addiu $t1, $0, 0x39 +
\ No newline at end of file diff --git a/libpsn00b/psxapi/sys/changeclearpad.s b/libpsn00b/psxapi/sys/changeclearpad.s new file mode 100644 index 0000000..509b03f --- /dev/null +++ b/libpsn00b/psxapi/sys/changeclearpad.s @@ -0,0 +1,10 @@ +.set noreorder +.section .text + +.global ChangeClearPAD +.type ChangeClearPAD, @function +ChangeClearPAD: + addiu $t2, $0 , 0xb0 + jr $t2 + addiu $t1, $0 , 0x5b +
\ No newline at end of file diff --git a/libpsn00b/psxapi/sys/changeclearrcnt.s b/libpsn00b/psxapi/sys/changeclearrcnt.s new file mode 100644 index 0000000..a65676d --- /dev/null +++ b/libpsn00b/psxapi/sys/changeclearrcnt.s @@ -0,0 +1,10 @@ +.set noreorder +.section .text + +.global ChangeClearRCnt +.type ChangeClearRCnt, @function +ChangeClearRCnt: + addiu $t2, $0 , 0xc0 + jr $t2 + addiu $t1, $0 , 0x0a +
\ No newline at end of file diff --git a/libpsn00b/psxapi/sys/deldev.s b/libpsn00b/psxapi/sys/deldev.s new file mode 100644 index 0000000..185cd32 --- /dev/null +++ b/libpsn00b/psxapi/sys/deldev.s @@ -0,0 +1,10 @@ +.set noreorder + +.section .text + +.global DelDev +.type DelDev, @function +DelDev: + addiu $t2, $0, 0xb0 + jr $t2 + addiu $t1, $0, 0x48
\ No newline at end of file diff --git a/libpsn00b/psxapi/sys/disableevent.s b/libpsn00b/psxapi/sys/disableevent.s new file mode 100644 index 0000000..fb60549 --- /dev/null +++ b/libpsn00b/psxapi/sys/disableevent.s @@ -0,0 +1,10 @@ +.set noreorder +.section .text + +.global DisableEvent +.type DisableEvent, @function +DisableEvent: + addiu $t2, $0, 0xb0 + jr $t2 + addiu $t1, $0, 0x0d +
\ No newline at end of file diff --git a/libpsn00b/psxapi/sys/enableevent.s b/libpsn00b/psxapi/sys/enableevent.s new file mode 100644 index 0000000..a95e1fc --- /dev/null +++ b/libpsn00b/psxapi/sys/enableevent.s @@ -0,0 +1,10 @@ +.set noreorder +.section .text + +.global EnableEvent +.type EnableEvent, @function +EnableEvent: + addiu $t2, $0, 0xb0 + jr $t2 + addiu $t1, $0, 0x0c +
\ No newline at end of file diff --git a/libpsn00b/psxapi/sys/entercriticalsection.s b/libpsn00b/psxapi/sys/entercriticalsection.s new file mode 100644 index 0000000..ce9a368 --- /dev/null +++ b/libpsn00b/psxapi/sys/entercriticalsection.s @@ -0,0 +1,11 @@ +.set noreorder +.section .text + +.global EnterCriticalSection +.type EnterCriticalSection, @function +EnterCriticalSection: + addiu $a0, $0, 1 + syscall 0 + jr $ra + nop +
\ No newline at end of file diff --git a/libpsn00b/psxapi/sys/exitcriticalsection.s b/libpsn00b/psxapi/sys/exitcriticalsection.s new file mode 100644 index 0000000..e2ee060 --- /dev/null +++ b/libpsn00b/psxapi/sys/exitcriticalsection.s @@ -0,0 +1,11 @@ +.set noreorder +.section .text + +.global ExitCriticalSection +.type ExitCriticalSection, @function +ExitCriticalSection: + addiu $a0, $0, 2 + syscall 0 + jr $ra + nop +
\ No newline at end of file diff --git a/libpsn00b/psxapi/sys/initcard.s b/libpsn00b/psxapi/sys/initcard.s new file mode 100644 index 0000000..e589592 --- /dev/null +++ b/libpsn00b/psxapi/sys/initcard.s @@ -0,0 +1,10 @@ +.set noreorder +.section .text + +.global InitCard +.type InitCard, @function +InitCard: + addiu $t2, $0, 0xb0 + jr $t2 + addiu $t1, $0, 0x4a +
\ No newline at end of file diff --git a/libpsn00b/psxapi/sys/initpad.s b/libpsn00b/psxapi/sys/initpad.s new file mode 100644 index 0000000..b0f1b6f --- /dev/null +++ b/libpsn00b/psxapi/sys/initpad.s @@ -0,0 +1,11 @@ +.set noreorder +.section .text + +.include "hwregs_a.h" + +.global InitPad +.type InitPad, @function +InitPad: + addiu $t2, $0, 0xb0 + jr $t2 + addiu $t1, $0, 0x12 diff --git a/libpsn00b/psxapi/sys/listdev.s b/libpsn00b/psxapi/sys/listdev.s new file mode 100644 index 0000000..fa3afec --- /dev/null +++ b/libpsn00b/psxapi/sys/listdev.s @@ -0,0 +1,10 @@ +.set noreorder +.section .text + +.global ListDev +.type ListDev, @function +ListDev: + addiu $t2, $0 , 0xb0 + jr $t2 + addiu $t1, $0 , 0x49 +
\ No newline at end of file diff --git a/libpsn00b/psxapi/sys/openevent.s b/libpsn00b/psxapi/sys/openevent.s new file mode 100644 index 0000000..9be0a3e --- /dev/null +++ b/libpsn00b/psxapi/sys/openevent.s @@ -0,0 +1,10 @@ +.set noreorder +.section .text + +.global OpenEvent +.type OpenEvent, @function +OpenEvent: + addiu $t2, $0, 0xb0 + jr $t2 + addiu $t1, $0, 0x08 +
\ No newline at end of file diff --git a/libpsn00b/psxapi/sys/setcustomexitfromexception.s b/libpsn00b/psxapi/sys/setcustomexitfromexception.s new file mode 100644 index 0000000..bcba057 --- /dev/null +++ b/libpsn00b/psxapi/sys/setcustomexitfromexception.s @@ -0,0 +1,10 @@ +.set noreorder +.section .text + +.global SetCustomExitFromException +.type SetCustomExitFromException, @function +SetCustomExitFromException: + addiu $t2, $0, 0xb0 + jr $t2 + addiu $t1, $0, 0x19 +
\ No newline at end of file diff --git a/libpsn00b/psxapi/sys/setdefaultexitfromexception.s b/libpsn00b/psxapi/sys/setdefaultexitfromexception.s new file mode 100644 index 0000000..baaf591 --- /dev/null +++ b/libpsn00b/psxapi/sys/setdefaultexitfromexception.s @@ -0,0 +1,10 @@ +.set noreorder +.section .text + +.global SetDefaultExitFromException +.type SetDefaultExitFromException, @function +SetDefaultExitFromException: + addiu $t2, $0, 0xb0 + jr $t2 + addiu $t1, $0, 0x18 + diff --git a/libpsn00b/psxapi/sys/startpad.s b/libpsn00b/psxapi/sys/startpad.s new file mode 100644 index 0000000..b15b0c0 --- /dev/null +++ b/libpsn00b/psxapi/sys/startpad.s @@ -0,0 +1,10 @@ +.set noreorder +.section .text + +.global StartPad +.type StartPad, @function +StartPad: + addiu $t2, $0, 0xb0 + jr $t2 + addiu $t1, $0, 0x13 +
\ No newline at end of file diff --git a/libpsn00b/psxapi/sys/stoppad.s b/libpsn00b/psxapi/sys/stoppad.s new file mode 100644 index 0000000..562ac0f --- /dev/null +++ b/libpsn00b/psxapi/sys/stoppad.s @@ -0,0 +1,10 @@ +.set noreorder +.section .text + +.global StopPad +.type StopPad, @function +StartPad: + addiu $t2, $0, 0xb0 + jr $t2 + addiu $t1, $0, 0x14 +
\ No newline at end of file diff --git a/libpsn00b/psxapi/sys/sysenqintrp.s b/libpsn00b/psxapi/sys/sysenqintrp.s new file mode 100644 index 0000000..b1efe65 --- /dev/null +++ b/libpsn00b/psxapi/sys/sysenqintrp.s @@ -0,0 +1,10 @@ +.set noreorder +.section .text + +.global SysEnqIntRP +.type SysEnqIntRP, @function +SysEnqIntRP: + addiu $t2, $0, 0xc0 + jr $t2 + addiu $t1, $0, 0x02 +
\ No newline at end of file diff --git a/libpsn00b/psxetc/dbugfont.c b/libpsn00b/psxetc/dbugfont.c new file mode 100644 index 0000000..ff21d84 --- /dev/null +++ b/libpsn00b/psxetc/dbugfont.c @@ -0,0 +1,144 @@ +unsigned int dbugfont_size=2112; +unsigned char dbugfont[] = { +0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x00,0x00,0xe0, +0x01,0x10,0x00,0x01,0x00,0x00,0x00,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x08,0x00,0x00,0x80,0x02,0x00,0x00, +0x20,0x00,0x20,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x01,0x01, +0x00,0x10,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x11, +0x00,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x01, +0x00,0x00,0x01,0x01,0x00,0x01,0x01,0x01,0x00,0x10,0x00,0x10,0x00,0x10,0x00, +0x01,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, +0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x01,0x00, +0x00,0x00,0x00,0x00,0x00,0x10,0x11,0x11,0x00,0x01,0x01,0x00,0x00,0x11,0x01, +0x01,0x00,0x10,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x00, +0x10,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x10,0x00,0x11, +0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x10,0x11, +0x00,0x00,0x10,0x10,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x10, +0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x10,0x11,0x00,0x00,0x11,0x11,0x01,0x00, +0x00,0x00,0x00,0x00,0x11,0x11,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00, +0x00,0x10,0x10,0x10,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x11, +0x11,0x00,0x00,0x01,0x01,0x00,0x00,0x01,0x01,0x00,0x01,0x10,0x01,0x00,0x00, +0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x01,0x01,0x01,0x00, +0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x01,0x00,0x00,0x10,0x01,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x01,0x00,0x01,0x01,0x01,0x00,0x10,0x10,0x11,0x00,0x01, +0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00, +0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x11,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x00,0x01, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x10,0x11,0x00,0x00,0x01, +0x00,0x01,0x00,0x10,0x01,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00, +0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x11, +0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x10,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x11,0x01,0x00,0x00, +0x11,0x01,0x00,0x00,0x10,0x01,0x00,0x10,0x11,0x11,0x00,0x00,0x10,0x01,0x00, +0x10,0x11,0x11,0x00,0x00,0x11,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x10,0x00, +0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x11,0x11,0x00,0x00,0x11,0x00,0x00,0x10, +0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x01,0x01,0x00,0x10,0x00,0x00,0x00, +0x00,0x01,0x00,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10, +0x00,0x00,0x11,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x01,0x10, +0x10,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x01,0x00, +0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x10, +0x00,0x10,0x00,0x10,0x00,0x00,0x11,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01, +0x00,0x00,0x10,0x11,0x11,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x10,0x00,0x10, +0x10,0x01,0x01,0x00,0x10,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x10,0x01,0x00, +0x10,0x11,0x11,0x00,0x10,0x11,0x01,0x00,0x10,0x11,0x01,0x00,0x00,0x00,0x01, +0x00,0x00,0x11,0x01,0x00,0x00,0x11,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00, +0x00,0x01,0x00,0x10,0x10,0x01,0x01,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00, +0x00,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x10, +0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x10,0x11,0x11,0x00,0x00, +0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x10,0x10,0x11,0x00,0x00,0x10,0x00,0x00, +0x10,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x10, +0x00,0x10,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x10,0x00,0x00,0x00, +0x01,0x00,0x00,0x11,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x10,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00, +0x10,0x11,0x11,0x00,0x10,0x11,0x11,0x00,0x00,0x11,0x01,0x00,0x00,0x00,0x01, +0x00,0x10,0x11,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x11, +0x01,0x00,0x00,0x11,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x11,0x00,0x00,0x00, +0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x10,0x00,0x00, +0x00,0x11,0x11,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10, +0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x10,0x11,0x01, +0x00,0x00,0x11,0x01,0x00,0x10,0x11,0x01,0x00,0x10,0x11,0x11,0x00,0x10,0x11, +0x11,0x00,0x00,0x11,0x11,0x00,0x10,0x00,0x10,0x00,0x10,0x11,0x11,0x00,0x00, +0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x10,0x00, +0x10,0x00,0x10,0x00,0x00,0x11,0x01,0x00,0x10,0x11,0x01,0x00,0x00,0x01,0x01, +0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00, +0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x00, +0x10,0x00,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x00, +0x10,0x01,0x11,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10, +0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x10,0x00, +0x10,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10, +0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x01,0x00, +0x10,0x00,0x00,0x00,0x10,0x10,0x10,0x00,0x10,0x01,0x10,0x00,0x10,0x00,0x10, +0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x11,0x01,0x00,0x10,0x00, +0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x11,0x00,0x00,0x10,0x11,0x00,0x00,0x10, +0x10,0x11,0x00,0x10,0x11,0x11,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x10,0x00, +0x10,0x11,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x10,0x10, +0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x11,0x11,0x00,0x10,0x00, +0x10,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x10, +0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x10,0x00,0x00, +0x10,0x00,0x10,0x00,0x10,0x00,0x01,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x10, +0x00,0x10,0x00,0x11,0x00,0x10,0x00,0x10,0x00,0x10,0x11,0x01,0x00,0x10,0x00, +0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10, +0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00, +0x00,0x10,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00, +0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00, +0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x11,0x01,0x00,0x00,0x11,0x01,0x00,0x10, +0x11,0x01,0x00,0x10,0x11,0x11,0x00,0x10,0x00,0x00,0x00,0x00,0x11,0x01,0x00, +0x10,0x00,0x10,0x00,0x10,0x11,0x11,0x00,0x00,0x11,0x01,0x00,0x10,0x00,0x10, +0x00,0x10,0x11,0x11,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x11, +0x01,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x01,0x00,0x10, +0x11,0x01,0x00,0x00,0x11,0x01,0x00,0x10,0x11,0x11,0x00,0x10,0x00,0x10,0x00, +0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10, +0x00,0x10,0x11,0x11,0x00,0x00,0x11,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x11, +0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x00,0x10, +0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x10,0x00,0x00, +0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10, +0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x01,0x00,0x00,0x10,0x00, +0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x11,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x00, +0x00,0x10,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10, +0x00,0x00,0x01,0x01,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x01, +0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x01,0x00,0x10,0x01,0x11,0x00,0x00, +0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x11,0x01,0x00, +0x00,0x11,0x01,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10, +0x00,0x10,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x10, +0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x01,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x00, +0x10,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x10, +0x00,0x10,0x00,0x10,0x00,0x10,0x10,0x10,0x00,0x00,0x01,0x01,0x00,0x00,0x10, +0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x01,0x00,0x00, +0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x10,0x00,0x01,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x10,0x00, +0x00,0x10,0x00,0x10,0x00,0x00,0x01,0x01,0x00,0x10,0x01,0x11,0x00,0x10,0x00, +0x10,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, +0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x11,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x11,0x01, +0x00,0x00,0x10,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x10,0x00,0x00,0x10,0x00, +0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x10,0x11,0x11,0x00,0x00, +0x11,0x01,0x00,0x00,0x00,0x00,0x01,0x00,0x11,0x01,0x00,0x00,0x00,0x00,0x00, +0x11,0x11,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}; diff --git a/libpsn00b/psxetc/dbugfont.tim b/libpsn00b/psxetc/dbugfont.tim Binary files differnew file mode 100644 index 0000000..4e6cce2 --- /dev/null +++ b/libpsn00b/psxetc/dbugfont.tim diff --git a/libpsn00b/psxetc/fntsort.c b/libpsn00b/psxetc/fntsort.c new file mode 100644 index 0000000..29e7de5 --- /dev/null +++ b/libpsn00b/psxetc/fntsort.c @@ -0,0 +1,47 @@ +#include <stdio.h> +#include <ctype.h> +#include <psxgpu.h> + +extern unsigned short _font_tpage; +extern unsigned short _font_clut; + +char *FntSort(unsigned int *ot, char *pri, int x, int y, const char *text) { + + DR_TPAGE *tpage; + SPRT_8 *sprt = (SPRT_8*)pri; + int i; + + while( *text != 0 ) { + + i = toupper( *text )-32; + + if( i > 0 ) { + + i--; + setSprt8( sprt ); + setRGB0( sprt, 128, 128, 128 ); + setXY0( sprt, x, y ); + setUV0( sprt, (i%16)<<3, (i>>4)<<3 ); + sprt->clut = _font_clut; + addPrim( ot, sprt ); + sprt++; + + } + + x += 8; + text++; + + } + + pri = (char*)sprt; + + tpage = (DR_TPAGE*)pri; + setlen( tpage, 1 ); + tpage->code[0] = _font_tpage; + setcode( tpage, 0xe1 ); + addPrim( ot, pri ); + pri += sizeof(DR_TPAGE); + + return pri; + +}
\ No newline at end of file diff --git a/libpsn00b/psxetc/font.c b/libpsn00b/psxetc/font.c new file mode 100644 index 0000000..3b0370b --- /dev/null +++ b/libpsn00b/psxetc/font.c @@ -0,0 +1,37 @@ +#include <stdio.h> +#include <ctype.h> +#include <psxgpu.h> + +extern unsigned char dbugfont[]; + +unsigned short _font_tpage; +unsigned short _font_clut; + +void FntLoad(int x, int y) { + + RECT pos; + TIM_IMAGE tim; + + GetTimInfo( (unsigned int*)dbugfont, &tim ); + + // Load font image + pos = *tim.prect; + pos.x = x; + pos.y = y; + + _font_tpage = getTPage( 0, 0, pos.x, 0 ) | 0x200; + + LoadImage( &pos, tim.paddr ); + DrawSync(); + + // Load font clut + pos = *tim.crect; + pos.x = x; + pos.y = y+tim.prect->h; + + _font_clut = getClut( pos.x, pos.y ); + + LoadImage( &pos, tim.caddr ); + DrawSync(); + +}
\ No newline at end of file diff --git a/libpsn00b/psxetc/makefile b/libpsn00b/psxetc/makefile new file mode 100644 index 0000000..676fc6e --- /dev/null +++ b/libpsn00b/psxetc/makefile @@ -0,0 +1,38 @@ +# Run using make (Linux) or gmake (BSD) +# Part of the PSn00bSDK Project +# 2019 Lameguy64 / Meido-Tek Productions + +PREFIX = mipsel-unknown-elf- + +TARGET = ../libpsxetc.a + +CFILES = $(notdir $(wildcard ./*.c)) +AFILES = $(notdir $(wildcard ./*.s)) +OFILES = $(addprefix build/,$(CFILES:.c=.o) $(AFILES:.s=.o)) + +INCLUDE = -I../include + +CFLAGS = -O2 -msoft-float -fno-builtin -nostdlib -Wa,--strip-local-absolute +AFLAGS = -msoft-float --strip-local-absolute + +CC = $(PREFIX)gcc +AS = $(PREFIX)as +AR = $(PREFIX)ar +RANLIB = $(PREFIX)ranlib + +all: $(TARGET) + +$(TARGET): $(OFILES) + $(AR) cr $(TARGET) $(OFILES) + $(RANLIB) $(TARGET) + +build/%.o: %.c + @mkdir -p $(dir $@) + $(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@ + +build/%.o: %.s + @mkdir -p $(dir $@) + $(AS) $(AFLAGS) $(INCLUDE) $< -o $@ + +clean: + rm -Rf build $(TARGET) diff --git a/libpsn00b/psxetc/readme.txt b/libpsn00b/psxetc/readme.txt new file mode 100644 index 0000000..ba4db50 --- /dev/null +++ b/libpsn00b/psxetc/readme.txt @@ -0,0 +1,22 @@ +PSX Misc library, part of PSn00bSDK +2019 Lameguy64 / Meido-Tek Productions + +Licensed under Mozilla Public License + +Open source implementation of the ETC library. Doesn't really provide much +aside from some debug font stuff at the moment. + + +Library developer(s): + + Lameguy64 + + +Library header(s): + + psxetc.h + + +Changelog: + + None thus far... diff --git a/libpsn00b/psxgpu/addprim.s b/libpsn00b/psxgpu/addprim.s new file mode 100644 index 0000000..1b66274 --- /dev/null +++ b/libpsn00b/psxgpu/addprim.s @@ -0,0 +1,26 @@ +.set noreorder +.set noat + +.section .text + + +.global AddPrim +.type AddPrim, @function +AddPrim: + + lw $v0, 0($a0) # Load OT entry + lw $v1, 0($a1) # Set packet length value (in words) + lui $at, 0x00ff + or $at, 0xffff + and $v0, $at # Mask off the upper 8 bits of OT entry + or $v1, $v0 # OR values together + sw $v1, 0($a1) # Store new address to primitive tag + lw $v0, 0($a0) # Load OT entry + and $a1, $at # Mask off the upper 8 bits of primitive tag + lui $at, 0xff00 + and $v0, $at # Mask off the first 24 bits of OT entry + or $v0, $a1 # OR values together + + jr $ra + sw $v0, 0($a0) # Store result to OT + diff --git a/libpsn00b/psxgpu/clearotagr.s b/libpsn00b/psxgpu/clearotagr.s new file mode 100644 index 0000000..3e888f1 --- /dev/null +++ b/libpsn00b/psxgpu/clearotagr.s @@ -0,0 +1,21 @@ +.set noreorder + +.include "hwregs_a.h" + +.section .text + + +.global ClearOTagR +.type ClearOTagR, @function +ClearOTagR: + lui $a2, 0x1f80 + addi $v0, $a1, -1 + sll $v0, 2 + addu $a0, $v0 + sw $a0, D6_MADR($a2) + andi $a1, 0xffff + sw $a1, D6_BCR($a2) + lui $v0, 0x1100 + addiu $v0, 2 + jr $ra + sw $v0, D6_CHCR($a2) diff --git a/libpsn00b/psxgpu/drawotag.s b/libpsn00b/psxgpu/drawotag.s new file mode 100644 index 0000000..8a5ff0c --- /dev/null +++ b/libpsn00b/psxgpu/drawotag.s @@ -0,0 +1,38 @@ +.set noreorder + +.include "hwregs_a.h" + +.section .text + + +.global DrawOTag +.type DrawOTag, @function +DrawOTag: + addiu $sp, -4 + sw $ra, 0($sp) + + lui $a3, 0x1f80 # I/O segment base + +.gpu_wait: # Wait for GPU to be ready for commands & DMA + jal ReadGPUstat + nop + srl $v0, 26 + andi $v0, 1 + beqz $v0, .gpu_wait + nop + + lui $v0, 0x0400 # Set DMA direction to CPUtoGPU + ori $v0, 0x2 + sw $v0, GP1($a3) + + sw $a0, D2_MADR($a3) # Set DMA base address to specified OT + sw $0, D2_BCR($a3) + + lui $v0, 0x0100 # Begin OT transfer! + ori $v0, 0x0401 + sw $v0, D2_CHCR($a3) + + lw $ra, 0($sp) + addiu $sp, 4 + jr $ra + nop diff --git a/libpsn00b/psxgpu/drawsync.s b/libpsn00b/psxgpu/drawsync.s new file mode 100644 index 0000000..149519d --- /dev/null +++ b/libpsn00b/psxgpu/drawsync.s @@ -0,0 +1,26 @@ +.set noreorder + +.include "hwregs_a.h" + +.section .text + + +.global DrawSync +.type DrawSync, @function +DrawSync: + addiu $sp, -4 + sw $ra, 0($sp) + +.gpu_wait: # Wait for GPU to be ready for commands and DMA + jal ReadGPUstat + nop + srl $v0, 0x1a + andi $v0, 0x5 + li $v1, 5 + bne $v0, $v1, .gpu_wait + nop + + lw $ra, 0($sp) + addiu $sp, 4 + jr $ra + nop diff --git a/libpsn00b/psxgpu/gettimimage.c b/libpsn00b/psxgpu/gettimimage.c new file mode 100644 index 0000000..49ce8e9 --- /dev/null +++ b/libpsn00b/psxgpu/gettimimage.c @@ -0,0 +1,39 @@ +#include <psxgpu.h> + +int GetTimInfo(unsigned int *tim, TIM_IMAGE *timimg) { + + unsigned int *rtim; + + // Check ID + if( ( tim[0]&0xff ) != 0x10 ) { + return 1; + } + + // Check version + if( ( (tim[0]>>8)&0xff ) != 0x0 ) { + return 2; + } + + timimg->mode = tim[1]; + rtim = tim+2; + + // Clut present? + if( timimg->mode & 0x8 ) { + + timimg->crect = (RECT*)(rtim+1); + timimg->caddr = (unsigned int*)(rtim+3); + + rtim += rtim[0]>>2; + + } else { + + timimg->caddr = 0; + + } + + timimg->prect = (RECT*)(rtim+1); + timimg->paddr = (unsigned int*)(rtim+3); + + return 0; + +} diff --git a/libpsn00b/psxgpu/getvideomode.s b/libpsn00b/psxgpu/getvideomode.s new file mode 100644 index 0000000..6f1613c --- /dev/null +++ b/libpsn00b/psxgpu/getvideomode.s @@ -0,0 +1,14 @@ +.set noreorder + + +.section .text + +.global GetVideoMode +.type GetVideoMode, @function +GetVideoMode: + + la $v0, _gpu_standard + lw $v0, 0($v0) + + jr $ra + nop diff --git a/libpsn00b/psxgpu/loadimage.s b/libpsn00b/psxgpu/loadimage.s new file mode 100644 index 0000000..2376b31 --- /dev/null +++ b/libpsn00b/psxgpu/loadimage.s @@ -0,0 +1,70 @@ +.set noreorder + +.include "hwregs_a.h" + +.set RECT_x, 0 +.set RECT_y, 2 +.set RECT_w, 4 +.set RECT_h, 6 + +.section .text + + +.global LoadImage +.type LoadImage, @function +LoadImage: + addiu $sp, -8 + sw $ra, 0($sp) + sw $s0, 4($sp) + + lui $s0, 0x1f80 # Set I/O segment base address + +.gpu_wait: # Wait for GPU to be ready for commands and DMA + jal ReadGPUstat + nop + srl $v0, 0x1a + andi $v0, 0x5 + li $v1, 5 + #srl $v0, 28 + #andi $v0, 1 + bne $v0, $v1, .gpu_wait + nop + + lui $v0, 0x400 # Set DMA direction to off + sw $v0, GP1($s0) + + lui $v0, 0x0100 # Clear GPU cache + sw $v0, GP0($s0) + + lui $v1, 0xa000 # Load image to VRAM + sw $v1, GP0($s0) + lw $v0, RECT_x($a0) # Set XY and dimensions of image + lw $v1, RECT_w($a0) + sw $v0, GP0($s0) + sw $v1, GP0($s0) + + lui $v0, 0x400 # Set DMA direction to CPUtoVRAM + ori $v0, 0x2 + sw $v0, GP1($s0) + + lhu $v0, RECT_w($a0) # Get rectangle size + lhu $v1, RECT_h($a0) + nop + mult $v0, $v1 # Calculate BCR value + mflo $v1 + srl $v1, 0x4 + sll $v1, 0x10 + ori $v1, 0x8 + + sw $a1, D2_MADR($s0) # Set DMA base address and transfer length + sw $v1, D2_BCR($s0) + + lui $v0, 0x100 # Start DMA transfer + ori $v0, 0x201 + sw $v0, D2_CHCR($s0) + + lw $ra, 0($sp) + lw $s0, 4($sp) + jr $ra + addiu $sp, 8 + diff --git a/libpsn00b/psxgpu/makefile b/libpsn00b/psxgpu/makefile new file mode 100644 index 0000000..5eb6265 --- /dev/null +++ b/libpsn00b/psxgpu/makefile @@ -0,0 +1,38 @@ +# Run using make (Linux) or gmake (BSD) +# Part of the PSn00bSDK Project +# 2019 Lameguy64 / Meido-Tek Productions + +PREFIX = mipsel-unknown-elf- + +TARGET = ../libpsxgpu.a + +CFILES = $(notdir $(wildcard ./*.c)) +AFILES = $(notdir $(wildcard ./*.s)) +OFILES = $(addprefix build/,$(CFILES:.c=.o) $(AFILES:.s=.o)) + +INCLUDE = -I../include + +CFLAGS = -O2 -msoft-float -fno-builtin -Wa,--strip-local-absolute +AFLAGS = -msoft-float -Wa,--strip-local-absolute + +CC = $(PREFIX)gcc +AS = $(PREFIX)as +AR = $(PREFIX)ar +RANLIB = $(PREFIX)ranlib + +all: $(TARGET) + +$(TARGET): $(OFILES) + $(AR) cr $(TARGET) $(OFILES) + $(RANLIB) $(TARGET) + +build/%.o: %.c + @mkdir -p $(dir $@) + $(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@ + +build/%.o: %.s + @mkdir -p $(dir $@) + $(CC) $(AFLAGS) $(INCLUDE) -c $< -o $@ + +clean: + rm -Rf build $(TARGET) diff --git a/libpsn00b/psxgpu/putdispenv.s b/libpsn00b/psxgpu/putdispenv.s new file mode 100644 index 0000000..0993e5c --- /dev/null +++ b/libpsn00b/psxgpu/putdispenv.s @@ -0,0 +1,174 @@ +.set noreorder + +.include "hwregs_a.h" + +.set DISP_dx, 0 +.set DISP_dy, 2 +.set DISP_dw, 4 +.set DISP_dh, 6 +.set DISP_sx, 8 +.set DISP_sy, 10 +.set DISP_sw, 12 +.set DISP_sh, 14 +.set DISP_inter, 16 +.set DISP_isrgb24, 17 +.set DISP_reverse, 18 + +.section .text + + +.global PutDispEnv +.type PutDispEnv, @function +PutDispEnv: + + lui $a3, IOBASE + + # Horizontal resolution stuff + + lh $a2, DISP_dw($a0) # Get X resolution + + lh $v0, DISP_sx($a0) + lh $v1, DISP_sw($a0) # Get X screen width + + move $a1, $0 # To use as mode value + + bgt $a2, 560, .mode_640 + nop + bgt $a2, 400, .mode_512 + nop + bgt $a2, 352, .mode_384 + nop + bgt $a2, 280, .mode_320 + nop + + .set noat + +.mode_256: + li $at, 10 + mult $at, $v1 + li $a2, 0x24e + sll $v0, 2 + add $a2, $v0 + b .mode_end + li $v1, 0xa00 +.mode_320: + li $at, 8 + mult $at, $v1 + li $a2, 0x258 + ori $a1, 0x01 + sll $v0, 2 + add $a2, $v0 + b .mode_end + li $v1, 0xa00 +.mode_384: + li $at, 7 + mult $at, $v1 + li $a2, 0x21b + ori $a1, 0x64 + sll $v0, 2 + add $a2, $v0 + b .mode_end + li $v1, 0xa80 +.mode_512: + li $at, 5 + mult $at, $v1 + li $a2, 0x267 + ori $a1, 0x02 + sll $v0, 2 + add $a2, $v0 + b .mode_end + li $v1, 0xa00 +.mode_640: + li $at, 4 + mult $at, $v1 + li $a2, 0x26c + ori $a1, 0x03 + sll $v0, 2 + add $a2, $v0 + li $v1, 0xa00 +.mode_end: + + .set at + + mflo $v0 + bnez $v0, .no_default # Check if screen with is non zero + nop + move $v0, $v1 # Use default if screen width is 0 +.no_default: + + addu $v0, $a2 # Apply horizontal display coordinates + sll $v0, 12 + andi $a2, 0xfff + or $a2, $v0 + lui $v0, 0x0600 + or $v0, $a2 + sw $v0, GP1($a3) + + # Vertical resolution + + lh $v0, DISP_dh($a0) + li $a2, 0x10 + ble $v0, 256, .mode_low + nop + +.mode_high: + ori $a1, 0x04 +.mode_low: + lh $v0, DISP_sy($a0) + lh $v1, DISP_sh($a0) + add $a2, $v0 + bnez $v1, .no_default_vert + nop + li $v1, 0xf0 +.no_default_vert: + add $v1, $a2 + and $a2, 0x3ff + sll $v1, 10 + or $v1, $a2 + lui $v0, 0x0700 + or $v1, $v0 + sw $v1, GP1($a3) + + # Video mode + + la $v0, _gpu_standard + lbu $v0, 0($v0) + nop + beqz $v0, .config_ntsc + nop +.config_pal: + ori $a1, 0x08 +.config_ntsc: + + lbu $v0, DISP_inter($a0) + lbu $v1, DISP_isrgb24($a0) + beqz $v0, .no_inter + nop + or $a1, 0x20 +.no_inter: + beqz $v1, .no_rgb24 + nop + or $a1, 0x10 +.no_rgb24: + lbu $v0, DISP_inter($a0) + nop + beqz $v0, .no_reverse + nop + or $a1, 0x80 +.no_reverse: + + lui $v0, 0x800 # Apply mode + or $a1, $v0 + sw $a1, GP1($a3) + + lhu $v0, DISP_dx($a0) # Set VRAM XY offset + lhu $v1, DISP_dy($a0) + andi $v0, 0x3ff + andi $v1, 0x1ff + sll $v1, 10 + or $v0, $v1 + lui $v1, 0x500 + or $v0, $v1 + + jr $ra + sw $v0, GP1($a3) diff --git a/libpsn00b/psxgpu/putdispenvraw.s b/libpsn00b/psxgpu/putdispenvraw.s new file mode 100644 index 0000000..157150d --- /dev/null +++ b/libpsn00b/psxgpu/putdispenvraw.s @@ -0,0 +1,71 @@ +.set noreorder +.set noat + +.include "hwregs_a.h" + +.set DISP_mode, 0 +.set DISP_vxpos, 4 +.set DISP_vypos, 6 +.set DISP_fbx, 8 +.set DISP_fby, 10 + +.section .text + + +.global PutDispEnvRaw +.type PutDispEnvRaw, @function +PutDispEnvRaw: + addiu $sp, -8 + sw $ra, 0($sp) + sw $s0, 4($sp) + + lui $s0, 0x1f80 + + lh $at, DISP_vxpos($a0) # Set horizontal display range + li $v0, 608 + add $v0, $at + li $v1, 3168 + add $v1, $at + sll $v1, 12 + or $v0, $v1 + lui $v1, 0x600 + or $v1, $v0 + sw $v1, GP1($s0) + + lh $at, DISP_vypos($a0) # Set vertical display range (for NTSC) + li $v1, 120 # (values differet for PAL modes) + sub $v1, $at + li $v0, 136 + sub $v0, $v1 + andi $v0, 0x1ff + li $v1, 120 + add $v1, $at + li $at, 136 + add $at, $v1 + andi $at, 0x1ff + sll $at, 10 + or $v0, $at + lui $at, 0x700 + or $v0, $at + sw $v0, GP1($s0) + + lw $v0, DISP_mode($a0) # Set video mode + lui $at, 0x800 + or $v0, $at + sw $v0, GP1($s0) + + lhu $v0, DISP_fbx($a0) # Set VRAM XY offset + lhu $v1, DISP_fby($a0) + andi $v0, 0x3ff + andi $v1, 0x1ff + sll $v1, 10 + or $v0, $v1 + lui $v1, 0x500 + or $v0, $v1 + sw $v0, GP1($s0) + + lw $ra, 0($sp) + lw $s0, 4($sp) + jr $ra + addiu $sp, 8 + diff --git a/libpsn00b/psxgpu/putdrawenv.s b/libpsn00b/psxgpu/putdrawenv.s new file mode 100644 index 0000000..69af437 --- /dev/null +++ b/libpsn00b/psxgpu/putdrawenv.s @@ -0,0 +1,142 @@ +.set noreorder +.set noat + +.include "hwregs_a.h" + +.set DRAW_x, 0 # Drawing area +.set DRAW_y, 2 +.set DRAW_w, 4 +.set DRAW_h, 6 +.set DRAW_ofx, 8 # Draw offset +.set DRAW_ofy, 10 +.set DRAW_tx, 12 # Texture window +.set DRAW_ty, 14 +.set DRAW_tw, 16 +.set DRAW_th, 18 +.set DRAW_tpage, 20 # TPage values +.set DRAW_dtd, 22 +.set DRAW_dfe, 23 +.set DRAW_isbg, 24 # Clear draw area +.set DRAW_r0, 25 +.set DRAW_g0, 26 +.set DRAW_b0, 27 +.set DRAW_env, 28 + + +.section .text + +.global PutDrawEnv +.type PutDrawEnv, @function +PutDrawEnv: + addiu $sp, -4 + sw $ra, 0($sp) + + addiu $a1, $a0, DRAW_env + + li $v0, 0x04ffffff # Packet header (length+terminator) + sw $v0, 0($a1) + + lhu $v0, DRAW_x($a0) # Set draw area top-left + lhu $v1, DRAW_y($a0) + andi $v0, 0x3ff + andi $v1, 0x1ff + sll $v1, 10 + or $v0, $v1 + lui $v1, 0xe300 + or $v0, $v1 + sw $v0, 4($a1) # 1 + + .set noat + + lhu $v0, DRAW_w($a0) # Set draw area bottom-right + lhu $at, DRAW_x($a0) + addiu $v0, -1 + addu $at, $v0 + andi $at, 0x3ff + lhu $v1, DRAW_h($a0) + lhu $v0, DRAW_y($a0) + addiu $v1, -1 + addu $v0, $v1 + andi $v0, 0x1ff + sll $v0, 10 + or $at, $v0 + lui $v0, 0xe400 + or $at, $v0 + sw $at, 8($a1) # 2 + + lhu $v0, DRAW_x($a0) # Set drawing offset + lhu $v1, DRAW_ofx($a0) + nop + add $v0, $v1 + andi $at, $v0, 0x7ff + lhu $v0, DRAW_y($a0) + lhu $v1, DRAW_ofy($a0) + nop + add $v0, $v1 + andi $v0, 0x7ff + sll $v0, 11 + or $at, $v0 + lui $v0, 0xe500 + or $at, $v0 + sw $at, 12($a1) # 3 + + lhu $at, DRAW_tpage($a0) # Set tpage + lbu $v0, DRAW_dtd($a0) + lbu $v1, DRAW_dfe($a0) + andi $v0, 1 + and $v1, 1 + sll $v0, 9 + sll $v1, 10 + or $at, $v0 + or $at, $v1 + lui $v0, 0xe100 + or $at, $v0 + sw $at, 16($a1) # 4 + + .set at + + lbu $v0, DRAW_isbg($a0) + nop + beqz $v0, .no_fillVRAM + nop + + lw $v0, DRAW_isbg($a0) # FillVRAM + lui $v1, 0x0200 + srl $v0, 8 + or $v0, $v1 + sw $v0, 20($a1) # 5 + lw $v0, DRAW_x($a0) + lw $v1, DRAW_w($a0) + sw $v0, 24($a1) # 6 + + srl $v0, $v1, 16 # Workaround as rectangle primitives + blt $v0, 511, .no_overflow # don't accept a height of 512 + nop + + li $v0, 511 + sll $v0, 16 + andi $v1, 0xffff + or $v1, $v0 + +.no_overflow: + sw $v1, 28($a1) # 7 + li $v0, 0x07ffffff # Packet header (length+terminator) + sw $v0, 0($a1) + +.no_fillVRAM: + +.gpu_wait: # Wait for GPU to become ready for commands and DMA + jal ReadGPUstat + nop + srl $v0, 26 + andi $v0, 1 + beqz $v0, .gpu_wait + nop + + jal DrawOTag + move $a0, $a1 + + lw $ra, 0($sp) + addiu $sp, 4 + jr $ra + nop diff --git a/libpsn00b/psxgpu/readgpustat.s b/libpsn00b/psxgpu/readgpustat.s new file mode 100644 index 0000000..c587cfb --- /dev/null +++ b/libpsn00b/psxgpu/readgpustat.s @@ -0,0 +1,14 @@ +.set noreorder + +.include "hwregs_a.h" + +.section .text + + +.global ReadGPUstat +.type ReadGPUstat, @function +ReadGPUstat: + lui $v0, 0x1f80 + lw $v0, GP1($v0) + jr $ra + nop diff --git a/libpsn00b/psxgpu/readme.txt b/libpsn00b/psxgpu/readme.txt new file mode 100644 index 0000000..55fcb68 --- /dev/null +++ b/libpsn00b/psxgpu/readme.txt @@ -0,0 +1,50 @@ +PSX GPU library, part of PSn00bSDK +2019 Lameguy64 / Meido-Tek Productions + +Licensed under Mozilla Public License + + Open source implementation of the GPU library written mostly in MIPS +assembly. Supports DMA transfers for ordering table draw and transferring +image data to VRAM. The syntax is intentionally made to closely resemble +Sony's syntax for familiarity and to make porting homebrew made using the +official SDK to PSn00bSDK a little easier. + + +Library developer(s): + + Lameguy64 + + +Library header(s): + + hwregs_a.h (GNU assembler port defs) + psxgpu.h + + +Todo list: + + * VSync() and DrawSync() functions lack alternate operating modes such as + getting number of vsyncs elapsed and waiting until a specified number of + vsyncs have passed. + + * VSync interrupt handler should be hooked using BIOS function + SetCustomExitFromException() like the official GPU library instead of + hooking an event handler, but said hook never seems to work. Perhaps + something in the kernel area needs to be patched/set or some event/IRQ + handler needs to be removed as such handlers can skip the custom + exception exit entirely. + + It also appears that all interrupt handling in the official libraries + are done through the GPU library. This would also explain why the + official documentation tells you to always call ResetGraph() at the + very beginning of your programs. + + * ClearOTag() function (non reverse version of ClearOTagR()) yet to be + implemented. + + * StoreImage() equivalent yet to be implemented. + + +Changelog: + + None thus far... diff --git a/libpsn00b/psxgpu/resetgraph.s b/libpsn00b/psxgpu/resetgraph.s new file mode 100644 index 0000000..bc30d3b --- /dev/null +++ b/libpsn00b/psxgpu/resetgraph.s @@ -0,0 +1,223 @@ +.set noreorder +.set noat + +.include "hwregs_a.h" + +.section .text + + +.global ResetGraph # Resets the GPU and installs a +.type ResetGraph, @function # VSync event handler +ResetGraph: + addiu $sp, -0x20 # C style stack allocation (required if + sw $ra, 28($sp) # you call BIOS functions from asm) + sw $a0, 24($sp) + + la $v0, _hooks_installed # Skip installing hooks if this function + lbu $v0, 0($v0) # has already been called before once + nop + bnez $v0, .skip_hook_init + nop + + # Temporary, may help improve compatibility? + jal SetDefaultExitFromException + nop + + jal ChangeClearPAD # Remove pad handler left by the BIOS + move $a0, $0 + + li $a0, 1 + jal ChangeClearRCnt # Remove RCnt handler + move $a1, $0 + + jal _96_remove # Remove CD handling left by the BIOS + nop + + lui $a3, 0x1f80 # Base address for I/O + + lui $v0, 0x3b33 # Enables DMA channel 6 (for ClearOTag) + ori $v0, 0x3b33 # Enables DMA channel 2 + sw $v0, DPCR($a3) + sw $0 , DICR($a3) # Clear DICR (not needed) + + li $v0, 0x9 # Enable IRQ0 (vblank) + sw $v0, IMASK($a3) + + # Set an event handler + + li $a0, 0xf2000003 # RCntCNT3 (vsync class) + li $a1, 0x2 + li $a2, 0x1000 + la $a3, _vsync_func # VSync event handler + + jal OpenEvent # Open a VSync event handler + # (PSXSDK style vsync handler) + nop + + la $v1, _vsync_event_desc # Save event descriptor + sw $v0, 0($v1) + + jal EnableEvent # Enable the opened event + move $a0, $v0 + + la $v0, _hooks_installed # Set installed flag + li $v1, 0x1 + sb $v1, 0($v0) + + la $v0, _vsync_counter # Clear VSync counter + sw $0 , 0($v0) + + la $v0, _vsync_callback_func # Clear callback function + sw $0 , 0($v0) + + jal ExitCriticalSection # Re-enable interrupts + nop + +.skip_hook_init: + + lui $a3, 0x1f80 + + lw $v0, GP1($a3) # Get video standard + lui $v1, 0x0010 + and $v0, $v1 + la $v1, _gpu_standard + beqz $v0, .not_pal + sw $0 , 0($v1) + li $v0, 1 + sw $v0, 0($v1) +.not_pal: + + lw $a0, 24($sp) # Get argument value + + lui $a3, 0x1f80 # Set base I/O again (likely destroyed + # by previous calls) + + li $v0, 0x1d00 # Configure timer 1 as Hblank counter + sw $v0, T1_MODE($a3) # Set timer 1 value + + li $at, 1 + beq $a0, $at, .gpu_init_1 + nop + li $at, 3 + beq $a0, $at, .gpu_init_3 + nop + + sw $0 , GP1($a3) # Reset the GPU + + b .init_done + nop + +.gpu_init_1: + + sw $0 , D2_CHCR($a3) # Stop any DMA + +.gpu_init_3: + + li $v0, 0x1 # Reset the command buffer + sw $v0, GP1($a3) + +.init_done: + + lw $ra, 28($sp) + lw $a0, 24($sp) # Return + jr $ra + addiu $sp, 0x20 + + +.global _vsync_func # VSync event handler, executed on +.type _vsync_func, @function # every VBlank +_vsync_func: + + la $gp, _gp + + lui $at, 0x1f80 # Check if there's a VSync IRQ + lw $v0, IMASK($at) + nop + andi $v0, $v0, 0x1 + beqz $v0, .exit + nop + + lw $v1, ISTAT($at) + nop + andi $v0, $v1, 0x1 + beqz $v0, .exit + nop + xori $v1, $v1, 0x1 # Acknowledge the IRQ + sw $v1, ISTAT($at) + + la $v1, _vsync_counter # Increment VSync counter + lw $v0, 0($v1) + nop + addiu $v0, 1 + sw $v0, 0($v1) + + la $v0, _vsync_callback_func # Check if a callback function is set + lw $v0, 0($v0) + nop + beqz $v0, .exit + nop + + addiu $sp, -0x20 # Save return address + sw $ra, 28($sp) + + jalr $v0 # Execute user function + nop + + lw $ra, 28($sp) # Restore previous return address + addiu $sp, 0x20 + +.exit: + jr $ra + nop + + +.global VSync # VSync function +.type VSync, @function +VSync: + addiu $sp, -4 + sw $ra, 0($sp) + + la $a1, _vsync_counter + lw $v0, 0($a1) + nop +.loop: + lw $v1, 0($a1) + nop + beq $v0, $v1, .loop + nop + + la $v0, _gpu_current_field # Get last field value + lbu $v1, 0($v0) +.wait_field: # Wait for field bit to change + jal ReadGPUstat + nop + srl $v0, 31 + beq $v0, $v1, .wait_field + nop + + la $v1, _gpu_current_field # Store new field value + sb $v0, 0($v1) + + lw $ra, 0($sp) + addiu $sp, 4 + jr $ra + nop + + +.section .data + +.global library_credits +.type library_credits, @object +library_credits: + .string "psxgpu programs by Lameguy64" + +.type _vsync_counter, @object +_vsync_counter: + .word 0 + +.comm _vsync_callback_func, 4, 4 +.comm _vsync_event_desc, 4, 4 + +.comm _gpu_standard, 4, 4 +.comm _gpu_current_field, 4, 4 +.comm _hooks_installed, 4, 4 diff --git a/libpsn00b/psxgpu/setdefdispenv.c b/libpsn00b/psxgpu/setdefdispenv.c new file mode 100644 index 0000000..6dec49c --- /dev/null +++ b/libpsn00b/psxgpu/setdefdispenv.c @@ -0,0 +1,21 @@ +#include <psxgpu.h> + +DISPENV *SetDefDispEnv(DISPENV *disp, int x, int y, int w, int h) { + + disp->disp.x = x; + disp->disp.y = y; + disp->disp.w = w; + disp->disp.h = h; + + disp->screen.x = 0; + disp->screen.y = 0; + disp->screen.w = 0; + disp->screen.h = 0; + + disp->isinter = 0; + disp->isrgb24 = 0; + disp->reverse = 0; + + return disp; + +} diff --git a/libpsn00b/psxgpu/setdefdrawenv.c b/libpsn00b/psxgpu/setdefdrawenv.c new file mode 100644 index 0000000..bcd93ca --- /dev/null +++ b/libpsn00b/psxgpu/setdefdrawenv.c @@ -0,0 +1,26 @@ +#include <psxgpu.h> + +DRAWENV *SetDefDrawEnv(DRAWENV *draw, int x, int y, int w, int h) { + + draw->clip.x = x; + draw->clip.y = y; + draw->clip.w = w; + draw->clip.h = h; + + draw->ofs[0] = 0; + draw->ofs[1] = 0; + + draw->tw.x = 0; + draw->tw.y = 0; + draw->tw.w = 0; + draw->tw.h = 0; + + draw->tpage = 0x0a; + draw->dtd = 1; + draw->dfe = 0; + draw->isbg = 0; + setRGB0( draw, 0, 0, 0 ); + + return draw; + +} diff --git a/libpsn00b/psxgpu/setdispmask.s b/libpsn00b/psxgpu/setdispmask.s new file mode 100644 index 0000000..77ceb04 --- /dev/null +++ b/libpsn00b/psxgpu/setdispmask.s @@ -0,0 +1,19 @@ +.set noreorder + +.include "hwregs_a.h" + +.section .text + + +.global SetDispMask +.type SetDispMask, @function +SetDispMask: + lui $v1, 0x1f80 + andi $a0, 0x1 + lui $v0, 0x300 + ori $v0, 0x1 + sub $v0, $a0 + sw $v0, GP1($v1) + jr $ra + nop + diff --git a/libpsn00b/psxgpu/setvideomode.s b/libpsn00b/psxgpu/setvideomode.s new file mode 100644 index 0000000..718a4dd --- /dev/null +++ b/libpsn00b/psxgpu/setvideomode.s @@ -0,0 +1,50 @@ +.set noreorder + +.include "hwregs_a.h" + + +.section .text + +.global SetVideoMode +.type SetVideoMode, @function +SetVideoMode: + addiu $sp, -4 + sw $ra, 0($sp) + + jal ReadGPUstat + nop + + srl $a1, $v0, 17 + andi $a1, 0x1f + + srl $v1, $v0, 14 # Reverse flag + andi $v1, 1 + sll $v1, 6 + or $a1, $v1 + + srl $v1, $v0, 16 # Horizontal resolution 2 + andi $v1, 1 + sll $v1, 6 + or $a1, $v1 + + andi $a1, 0xf7 # Mask off PAL bit + + la $v0, _gpu_standard + beqz $a0, .set_done + sw $0 , 0($v0) + li $v1, 1 + sw $v1, 0($v0) + b .set_done + or $a1, 0x8 +.set_done: + + lui $v0, 0x800 # Apply new mode + or $a1, $v0 + lui $v0, IOBASE + sw $a1, GP1($v0) + + lw $ra, 0($sp) + addiu $sp, 4 + jr $ra + nop + diff --git a/libpsn00b/psxgpu/vsynccallback.s b/libpsn00b/psxgpu/vsynccallback.s new file mode 100644 index 0000000..1f96bbc --- /dev/null +++ b/libpsn00b/psxgpu/vsynccallback.s @@ -0,0 +1,25 @@ +.set noreorder + +.section .text + +.global VSyncCallback +.type VSyncCallback, @function +VSyncCallback: + addiu $sp, -8 + sw $ra, 0($sp) + + jal EnterCriticalSection + sw $a0, 4($sp) + + lw $a0, 4($sp) + la $v0, _vsync_callback_func + sw $a0, 0($v0) + + jal ExitCriticalSection + nop + + lw $ra, 0($sp) + addiu $sp, 8 + jr $ra + nop + diff --git a/libpsn00b/psxgte/applymatrixlv.s b/libpsn00b/psxgte/applymatrixlv.s new file mode 100644 index 0000000..332a2f8 --- /dev/null +++ b/libpsn00b/psxgte/applymatrixlv.s @@ -0,0 +1,40 @@ +.set noreorder + +.include "gtereg.h" +.include "inline_s.h" + +.section .text + + +.global ApplyMatrixLV +.type ApplyMatrixLV, @function +ApplyMatrixLV: + + # Load matrix to GTE + lw $t0, 0($a0) + lw $t1, 4($a0) + ctc2 $t0, $0 + ctc2 $t1, $1 + lw $t0, 8($a0) + lw $t1, 12($a0) + lhu $t2, 16($a0) + ctc2 $t0, $2 + ctc2 $t1, $3 + ctc2 $t2, $4 + + lw $t0, 0($a1) + lw $t1, 4($a1) + mtc2 $t0, C2_IR1 + lw $t0, 8($a1) + mtc2 $t1, C2_IR2 + mtc2 $t0, C2_IR3 + + nMVMVA(1, 0, 3, 3, 0) + + swc2 C2_IR1, 0($a2) + swc2 C2_IR2, 4($a2) + swc2 C2_IR3, 8($a2) + + jr $ra + move $v0, $a2 +
\ No newline at end of file diff --git a/libpsn00b/psxgte/compmatrixlv.s b/libpsn00b/psxgte/compmatrixlv.s new file mode 100644 index 0000000..95da5e9 --- /dev/null +++ b/libpsn00b/psxgte/compmatrixlv.s @@ -0,0 +1,100 @@ +.set noreorder + +.include "gtereg.h" +.include "inline_s.h" + +.set MATRIX_r11r12, 0 +.set MATRIX_r13r21, 4 +.set MATRIX_r22r23, 8 +.set MATRIX_r31r32, 12 +.set MATRIX_r33, 16 +.set MATRIX_trx, 20 +.set MATRIX_try, 24 +.set MATRIX_trz, 28 + + +.global CompMatrixLV +.type CompMatrixLV, @function +CompMatrixLV: + + # Load matrix v0 to GTE + lw $t0, MATRIX_r11r12($a0) + lw $t1, MATRIX_r13r21($a0) + ctc2 $t0, C2_R11R12 + ctc2 $t1, C2_R13R21 + lw $t0, MATRIX_r22r23($a0) + lw $t1, MATRIX_r31r32($a0) + lhu $t2, MATRIX_r33($a0) + ctc2 $t0, C2_R22R23 + lw $t0, MATRIX_trx($a0) + ctc2 $t1, C2_R31R32 + lw $t1, MATRIX_try($a0) + ctc2 $t2, C2_R33 + lw $t2, MATRIX_trz($a0) + ctc2 $t0, C2_TRX + ctc2 $t1, C2_TRY + ctc2 $t2, C2_TRZ + + lw $t0, MATRIX_trx($a1) + lw $t1, MATRIX_try($a1) + mtc2 $t0, C2_IR1 + lw $t0, MATRIX_trz($a1) + mtc2 $t1, C2_IR2 + mtc2 $t0, C2_IR3 + + nMVMVA(1, 0, 3, 0, 0) + + swc2 C2_IR1, MATRIX_trx($a2) + swc2 C2_IR2, MATRIX_try($a2) + swc2 C2_IR3, MATRIX_trz($a2) + + lhu $t1, 2*(0+(3*1))($a1) # Load values for first + lhu $t0, 2*(0+(3*0))($a1) # R11 R21 R31 + sll $t1, 16 + or $t0, $t1 + lhu $t1, 2*(0+(3*2))($a1) + mtc2 $t0, C2_VXY0 + mtc2 $t1, C2_VZ0 + + lhu $t1, 2*(1+(3*1))($a1) # Load values for second + lhu $t0, 2*(1+(3*0))($a1) # R12 R22 R32 + MVMVA(1, 0, 0, 3, 0) # First multiply + sll $t1, 16 + or $t0, $t1 + lhu $t1, 2*(1+(3*2))($a1) + mtc2 $t0, C2_VXY0 + mtc2 $t1, C2_VZ0 + + mfc2 $t0, C2_IR1 # Store results of first + mfc2 $t1, C2_IR2 + sh $t0, 2*(0+(3*0))($a2) + mfc2 $t0, C2_IR3 + sh $t1, 2*(0+(3*1))($a2) + sh $t0, 2*(0+(3*2))($a2) + + lhu $t1, 2*(2+(3*1))($a1) # Load values for third + lhu $t0, 2*(2+(3*0))($a1) # R13 R23 R33 + MVMVA(1, 0, 0, 3, 0) # Second multiply + sll $t1, 16 + or $t0, $t1 + lhu $t1, 2*(2+(3*2))($a1) + mtc2 $t0, C2_VXY0 + mtc2 $t1, C2_VZ0 + + mfc2 $t0, C2_IR1 # Store results of second + mfc2 $t1, C2_IR2 + sh $t0, 2*(1+(3*0))($a2) + mfc2 $t0, C2_IR3 + sh $t1, 2*(1+(3*1))($a2) + sh $t0, 2*(1+(3*2))($a2) + MVMVA(1, 0, 0, 3, 0) # Third multiply + + mfc2 $t0, C2_IR1 # Store results of third + mfc2 $t1, C2_IR2 + sh $t0, 2*(2+(3*0))($a2) + mfc2 $t0, C2_IR3 + sh $t1, 2*(2+(3*1))($a2) + sh $t0, 2*(2+(3*2))($a2) + + jr $ra + move $v0, $a2
\ No newline at end of file diff --git a/libpsn00b/psxgte/hirotmatrix.c b/libpsn00b/psxgte/hirotmatrix.c new file mode 100644 index 0000000..56516b0 --- /dev/null +++ b/libpsn00b/psxgte/hirotmatrix.c @@ -0,0 +1,35 @@ +#include <psxgte.h> + +MATRIX *HiRotMatrix(VECTOR *r, MATRIX *m) { + + short s[3],c[3]; + MATRIX tm[3]; + + s[0] = hisin(r->vx); s[1] = hisin(r->vy); s[2] = hisin(r->vz); + c[0] = hicos(r->vx); c[1] = hicos(r->vy); c[2] = hicos(r->vz); + + // mX + m->m[0][0] = ONE; m->m[0][1] = 0; m->m[0][2] = 0; + m->m[1][0] = 0; m->m[1][1] = c[0]; m->m[1][2] = -s[0]; + m->m[2][0] = 0; m->m[2][1] = s[0]; m->m[2][2] = c[0]; + + // mY + tm[0].m[0][0] = c[1]; tm[0].m[0][1] = 0; tm[0].m[0][2] = s[1]; + tm[0].m[1][0] = 0; tm[0].m[1][1] = ONE; tm[0].m[1][2] = 0; + tm[0].m[2][0] = -s[1]; tm[0].m[2][1] = 0; tm[0].m[2][2] = c[1]; + + // mZ + tm[1].m[0][0] = c[2]; tm[1].m[0][1] = -s[2]; tm[1].m[0][2] = 0; + tm[1].m[1][0] = s[2]; tm[1].m[1][1] = c[2]; tm[1].m[1][2] = 0; + tm[1].m[2][0] = 0; tm[1].m[2][1] = 0; tm[1].m[2][2] = ONE; + + PushMatrix(); + + MulMatrix0( m, &tm[0], &tm[2] ); + MulMatrix0( &tm[2], &tm[1], m ); + + PopMatrix(); + + return m; + +} diff --git a/libpsn00b/psxgte/hisin.c b/libpsn00b/psxgte/hisin.c new file mode 100644 index 0000000..68d5d28 --- /dev/null +++ b/libpsn00b/psxgte/hisin.c @@ -0,0 +1,33 @@ +/* Based on isin_S4 implementation from coranac: + * http://www.coranac.com/2009/07/sines/ + * + */ + +#define qN 15 +#define qA 12 +#define B 19900 +#define C 3516 + +int hisin(int x) { + + int c, x2, y; + + c= x<<(30-qN); // Semi-circle info into carry. + x -= 1<<qN; // sine -> cosine calc + + x= x<<(31-qN); // Mask with PI + x= x>>(31-qN); // Note: SIGNED shift! (to qN) + x= x*x>>(2*qN-14); // x=x^2 To Q14 + + y= B - (x*C>>14); // B - x^2*C + y= (1<<qA)-(x*y>>16); // A - x^2*(B-x^2*C) + + return c>=0 ? y : -y; + +} + +int hicos(int x) { + + return hisin( x+32768 ); + +} diff --git a/libpsn00b/psxgte/initgeom.s b/libpsn00b/psxgte/initgeom.s new file mode 100644 index 0000000..14ca293 --- /dev/null +++ b/libpsn00b/psxgte/initgeom.s @@ -0,0 +1,45 @@ +.set noreorder + +.include "gtereg.h" + +.section .text + + +.global InitGeom +.type InitGeom, @function +InitGeom: + addiu $sp, -4 + sw $ra, 0($sp) + + jal EnterCriticalSection + nop + + mfc0 $v0, $12 # Get SR + lui $v1, 0x4000 # Set bit to enable cop2 + or $v0, $v1 + mtc0 $v0, $12 # Set new SR + + jal ExitCriticalSection + nop + + ctc2 $0 , $24 # Reset GTE offset + ctc2 $0 , $25 + + li $v0, 320 # Set default projection plane + ctc2 $v0, $26 + + li $v0, 0x155 # Set ZSF3 and ZSF4 defaults + ctc2 $v0, $29 + li $v0, 0x100 + ctc2 $v0, $30 + + li $v0, 0xef9e # DQA and DQB defaults + lui $v1, 0x0140 + ctc2 $v0, C2_DQA + ctc2 $v1, C2_DQB + + lw $ra, 0($sp) + addiu $sp, 4 + jr $ra + nop + diff --git a/libpsn00b/psxgte/isin.c b/libpsn00b/psxgte/isin.c new file mode 100644 index 0000000..79e2970 --- /dev/null +++ b/libpsn00b/psxgte/isin.c @@ -0,0 +1,34 @@ +/* Based on isin_S4 implementation from coranac: + * http://www.coranac.com/2009/07/sines/ + * + */ + +#define qN 10 +#define qA 12 +#define B 19900 +#define C 3516 + +int isin(int x) { + + int c, x2, y; + + c= x<<(30-qN); // Semi-circle info into carry. + x -= 1<<qN; // sine -> cosine calc + + x= x<<(31-qN); // Mask with PI + x= x>>(31-qN); // Note: SIGNED shift! (to qN) + + x= x*x>>(2*qN-14); // x=x^2 To Q14 + + y= B - (x*C>>14); // B - x^2*C + y= (1<<qA)-(x*y>>16); // A - x^2*(B-x^2*C) + + return c>=0 ? y : -y; + +} + +int icos(int x) { + + return isin( x+1024 ); + +} diff --git a/libpsn00b/psxgte/makefile b/libpsn00b/psxgte/makefile new file mode 100644 index 0000000..6b0cb28 --- /dev/null +++ b/libpsn00b/psxgte/makefile @@ -0,0 +1,38 @@ +# Run using make (Linux) or gmake (BSD) +# Part of the PSn00bSDK Project +# 2019 Lameguy64 / Meido-Tek Productions + +PREFIX = mipsel-unknown-elf- + +TARGET = ../libpsxgte.a + +CFILES = $(notdir $(wildcard ./*.c)) +AFILES = $(notdir $(wildcard ./*.s)) +OFILES = $(addprefix build/,$(CFILES:.c=.o) $(AFILES:.s=.o)) + +INCLUDE = -I../include + +CFLAGS = -O2 -msoft-float -fno-builtin -fdata-sections -ffunction-sections -Wa,--strip-local-absolute +AFLAGS = -msoft-float --strip-local-absolute + +CC = $(PREFIX)gcc +AS = $(PREFIX)as +AR = $(PREFIX)ar +RANLIB = $(PREFIX)ranlib + +all: $(TARGET) + +$(TARGET): $(OFILES) + $(AR) cr $(TARGET) $(OFILES) + $(RANLIB) $(TARGET) + +build/%.o: %.c + @mkdir -p $(dir $@) + $(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@ + +build/%.o: %.s + @mkdir -p $(dir $@) + $(AS) $(AFLAGS) $(INCLUDE) $< -o $@ + +clean: + rm -Rf build $(TARGET) diff --git a/libpsn00b/psxgte/matrix.c b/libpsn00b/psxgte/matrix.c new file mode 100644 index 0000000..b4dea12 --- /dev/null +++ b/libpsn00b/psxgte/matrix.c @@ -0,0 +1,45 @@ +#include <psxgte.h> + +MATRIX *RotMatrix(SVECTOR *r, MATRIX *m) { + + short s[3],c[3]; + MATRIX tm[3]; + + s[0] = isin(r->vx); s[1] = isin(r->vy); s[2] = isin(r->vz); + c[0] = icos(r->vx); c[1] = icos(r->vy); c[2] = icos(r->vz); + + // mX + m->m[0][0] = ONE; m->m[0][1] = 0; m->m[0][2] = 0; + m->m[1][0] = 0; m->m[1][1] = c[0]; m->m[1][2] = -s[0]; + m->m[2][0] = 0; m->m[2][1] = s[0]; m->m[2][2] = c[0]; + + // mY + tm[0].m[0][0] = c[1]; tm[0].m[0][1] = 0; tm[0].m[0][2] = s[1]; + tm[0].m[1][0] = 0; tm[0].m[1][1] = ONE; tm[0].m[1][2] = 0; + tm[0].m[2][0] = -s[1]; tm[0].m[2][1] = 0; tm[0].m[2][2] = c[1]; + + // mZ + tm[1].m[0][0] = c[2]; tm[1].m[0][1] = -s[2]; tm[1].m[0][2] = 0; + tm[1].m[1][0] = s[2]; tm[1].m[1][1] = c[2]; tm[1].m[1][2] = 0; + tm[1].m[2][0] = 0; tm[1].m[2][1] = 0; tm[1].m[2][2] = ONE; + + PushMatrix(); + + MulMatrix0( m, &tm[0], &tm[2] ); + MulMatrix0( &tm[2], &tm[1], m ); + + PopMatrix(); + + return m; + +} + +MATRIX *TransMatrix(MATRIX *m, VECTOR *r) { + + m->t[0] = r->vx; + m->t[1] = r->vy; + m->t[2] = r->vz; + + return m; + +} diff --git a/libpsn00b/psxgte/mulmatrix.s b/libpsn00b/psxgte/mulmatrix.s new file mode 100644 index 0000000..19dabe8 --- /dev/null +++ b/libpsn00b/psxgte/mulmatrix.s @@ -0,0 +1,74 @@ +.set noreorder + +.include "gtereg.h" +.include "inline_s.h" + +.section .text + + +.global MulMatrix +.type MulMatrix, @function +MulMatrix: + + # Load m1 to GTE + lw $t0, 0($a1) + lw $t1, 4($a1) + ctc2 $t0, $0 + ctc2 $t1, $1 + lw $t0, 8($a1) + lw $t1, 12($a1) + lhu $t2, 16($a1) + ctc2 $t0, $2 + ctc2 $t1, $3 + ctc2 $t2, $4 + + lhu $t1, 2*(0+(3*1))($a0) # Load values for first + lhu $t0, 2*(0+(3*0))($a0) # R11 R21 R31 + sll $t1, 16 + or $t0, $t1 + lhu $t1, 2*(0+(3*2))($a0) + mtc2 $t0, C2_VXY0 + mtc2 $t1, C2_VZ0 + + lhu $t1, 2*(1+(3*1))($a0) # Load values for second + lhu $t0, 2*(1+(3*0))($a0) # R12 R22 R32 + MVMVA(1, 0, 0, 3, 0) # First multiply + sll $t1, 16 + or $t0, $t1 + lhu $t1, 2*(1+(3*2))($a0) + mtc2 $t0, C2_VXY0 + mtc2 $t1, C2_VZ0 + + mfc2 $t0, C2_IR1 # Store results of first + mfc2 $t1, C2_IR2 + sh $t0, 2*(0+(3*0))($a0) + mfc2 $t0, C2_IR3 + sh $t1, 2*(0+(3*1))($a0) + sh $t0, 2*(0+(3*2))($a0) + + lhu $t1, 2*(2+(3*1))($a0) # Load values for third + lhu $t0, 2*(2+(3*0))($a0) # R13 R23 R33 + MVMVA(1, 0, 0, 3, 0) # Second multiply + sll $t1, 16 + or $t0, $t1 + lhu $t1, 2*(2+(3*2))($a0) + mtc2 $t0, C2_VXY0 + mtc2 $t1, C2_VZ0 + + mfc2 $t0, C2_IR1 # Store results of second + mfc2 $t1, C2_IR2 + sh $t0, 2*(1+(3*0))($a0) + mfc2 $t0, C2_IR3 + sh $t1, 2*(1+(3*1))($a0) + sh $t0, 2*(1+(3*2))($a0) + MVMVA(1, 0, 0, 3, 0) # Third multiply + + mfc2 $t0, C2_IR1 # Store results of third + mfc2 $t1, C2_IR2 + sh $t0, 2*(2+(3*0))($a0) + mfc2 $t0, C2_IR3 + sh $t1, 2*(2+(3*1))($a0) + sh $t0, 2*(2+(3*2))($a0) + + jr $ra + move $v0, $a0 diff --git a/libpsn00b/psxgte/mulmatrix0.s b/libpsn00b/psxgte/mulmatrix0.s new file mode 100644 index 0000000..874226b --- /dev/null +++ b/libpsn00b/psxgte/mulmatrix0.s @@ -0,0 +1,74 @@ +.set noreorder + +.include "gtereg.h" +.include "inline_s.h" + +.section .text + + +.global MulMatrix0 +.type MulMatrix0, @function +MulMatrix0: + + # Load m1 to GTE + lw $t0, 0($a0) + lw $t1, 4($a0) + ctc2 $t0, $0 + ctc2 $t1, $1 + lw $t0, 8($a0) + lw $t1, 12($a0) + lhu $t2, 16($a0) + ctc2 $t0, $2 + ctc2 $t1, $3 + ctc2 $t2, $4 + + lhu $t1, 2*(0+(3*1))($a1) # Load values for first + lhu $t0, 2*(0+(3*0))($a1) # R11 R21 R31 + sll $t1, 16 + or $t0, $t1 + lhu $t1, 2*(0+(3*2))($a1) + mtc2 $t0, C2_VXY0 + mtc2 $t1, C2_VZ0 + + lhu $t1, 2*(1+(3*1))($a1) # Load values for second + lhu $t0, 2*(1+(3*0))($a1) # R12 R22 R32 + MVMVA(1, 0, 0, 3, 0) # First multiply + sll $t1, 16 + or $t0, $t1 + lhu $t1, 2*(1+(3*2))($a1) + mtc2 $t0, C2_VXY0 + mtc2 $t1, C2_VZ0 + + mfc2 $t0, C2_IR1 # Store results of first + mfc2 $t1, C2_IR2 + sh $t0, 2*(0+(3*0))($a2) + mfc2 $t0, C2_IR3 + sh $t1, 2*(0+(3*1))($a2) + sh $t0, 2*(0+(3*2))($a2) + + lhu $t1, 2*(2+(3*1))($a1) # Load values for third + lhu $t0, 2*(2+(3*0))($a1) # R13 R23 R33 + MVMVA(1, 0, 0, 3, 0) # Second multiply + sll $t1, 16 + or $t0, $t1 + lhu $t1, 2*(2+(3*2))($a1) + mtc2 $t0, C2_VXY0 + mtc2 $t1, C2_VZ0 + + mfc2 $t0, C2_IR1 # Store results of second + mfc2 $t1, C2_IR2 + sh $t0, 2*(1+(3*0))($a2) + mfc2 $t0, C2_IR3 + sh $t1, 2*(1+(3*1))($a2) + sh $t0, 2*(1+(3*2))($a2) + MVMVA(1, 0, 0, 3, 0) # Third multiply + + mfc2 $t0, C2_IR1 # Store results of third + mfc2 $t1, C2_IR2 + sh $t0, 2*(2+(3*0))($a2) + mfc2 $t0, C2_IR3 + sh $t1, 2*(2+(3*1))($a2) + sh $t0, 2*(2+(3*2))($a2) + + jr $ra + move $v0, $a2 diff --git a/libpsn00b/psxgte/pushpopmatrix.s b/libpsn00b/psxgte/pushpopmatrix.s new file mode 100644 index 0000000..d10687a --- /dev/null +++ b/libpsn00b/psxgte/pushpopmatrix.s @@ -0,0 +1,68 @@ +.set noreorder + +.include "gtereg.h" +.include "inline_s.h" + +.section .text + + +.global PushMatrix +.type PushMatrix, @function +PushMatrix: + la $a0, _matrix_stack + cfc2 $v0, C2_R11R12 + cfc2 $v1, C2_R13R21 + sw $v0, 0($a0) + cfc2 $v0, C2_R22R23 + sw $v1, 4($a0) + sw $v0, 8($a0) + cfc2 $v0, C2_R31R32 + cfc2 $v1, C2_R33 + sw $v0, 12($a0) + sw $v1, 16($a0) + cfc2 $v0, C2_TRX + cfc2 $v1, C2_TRY + sw $v0, 20($a0) + cfc2 $v0, C2_TRZ + sw $v1, 24($a0) + jr $ra + sw $v0, 28($a0) + +.global PopMatrix +.type PopMatrix, @function +PopMatrix: + la $a0, _matrix_stack + lw $v0, 0($a0) + lw $v1, 4($a0) + ctc2 $v0, C2_R11R12 + ctc2 $v1, C2_R13R21 + lw $v0, 8($a0) + lw $v1, 12($a0) + ctc2 $v0, C2_R22R23 + lw $v0, 16($a0) + ctc2 $v1, C2_R31R32 + ctc2 $v0, C2_R33 + lw $v0, 20($a0) + lw $v1, 24($a0) + ctc2 $v0, C2_TRX + lw $v0, 28($a0) + ctc2 $v1, C2_TRY + ctc2 $v0, C2_TRZ + jr $ra + nop + + +.section .data + + +.type matrix_stack, @object +_matrix_stack: + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + diff --git a/libpsn00b/psxgte/readme.txt b/libpsn00b/psxgte/readme.txt new file mode 100644 index 0000000..13b92b6 --- /dev/null +++ b/libpsn00b/psxgte/readme.txt @@ -0,0 +1,39 @@ +PSX GTE library, part of PSn00bSDK +2019 Lameguy64 / Meido-Tek Productions + +Licensed under Mozilla Public License + + Open source implementation of the GTE library written mostly in MIPS +assembly. It makes full use of the GTE in complex matrix multiplication +operations. The syntax is intentionally made to closely resemble Sony's syntax +for familiarity and to make porting homebrew made using the official SDK to +PSn00bSDK a little easier. + + Unlike the official GTE libraries using the inline GTE macro functions does +not require running your object file through some stupid tool such as DMPSX. +The GTE macros use the corresponding cop2 opcodes already. + + +Library developer(s): + + Lameguy64 + + +Library header(s): + + gtereg.h + inline_c.h + inline_s.h + psxgte.h + + +Todo list: + + * Alternate RotMatrix() functions with different rotation order are yet to + be implemented. + * Various high level RotTransPersp style functions not yet implemented. + + +Changelog: + + None thus far... diff --git a/libpsn00b/psxgte/scalematrix.s b/libpsn00b/psxgte/scalematrix.s new file mode 100644 index 0000000..3e83800 --- /dev/null +++ b/libpsn00b/psxgte/scalematrix.s @@ -0,0 +1,68 @@ +.set noreorder + +.include "gtereg.h" +.include "inline_s.h" + +.section .text + + +.global ScaleMatrix +.type ScaleMatrix, @function +ScaleMatrix: + + lwc2 C2_IR0, 0($a1) # X + + lh $v0, 2*(0+(3*0))($a0) + lh $v1, 2*(0+(3*1))($a0) + mtc2 $v0, C2_IR1 + lh $v0, 2*(0+(3*2))($a0) + mtc2 $v1, C2_IR2 + mtc2 $v0, C2_IR3 + + nGPF(1) + + mfc2 $v0, C2_IR1 + mfc2 $v1, C2_IR2 + sh $v0, 2*(0+(3*0))($a0) + mfc2 $v0, C2_IR3 + sh $v1, 2*(0+(3*1))($a0) + sh $v0, 2*(0+(3*2))($a0) + + lwc2 C2_IR0, 4($a1) # Y + + lh $v0, 2*(1+(3*0))($a0) + lh $v1, 2*(1+(3*1))($a0) + mtc2 $v0, C2_IR1 + lh $v0, 2*(1+(3*2))($a0) + mtc2 $v1, C2_IR2 + mtc2 $v0, C2_IR3 + + nGPF(1) + + mfc2 $v0, C2_IR1 + mfc2 $v1, C2_IR2 + sh $v0, 2*(1+(3*0))($a0) + mfc2 $v0, C2_IR3 + sh $v1, 2*(1+(3*1))($a0) + sh $v0, 2*(1+(3*2))($a0) + + lwc2 C2_IR0, 8($a1) # Z + + lh $v0, 2*(2+(3*0))($a0) + lh $v1, 2*(2+(3*1))($a0) + mtc2 $v0, C2_IR1 + lh $v0, 2*(2+(3*2))($a0) + mtc2 $v1, C2_IR2 + mtc2 $v0, C2_IR3 + + nGPF(1) + + mfc2 $v0, C2_IR1 + mfc2 $v1, C2_IR2 + sh $v0, 2*(2+(3*0))($a0) + mfc2 $v0, C2_IR3 + sh $v1, 2*(2+(3*1))($a0) + sh $v0, 2*(2+(3*2))($a0) + + jr $ra + move $v0, $a0 diff --git a/libpsn00b/psxgte/square0.s b/libpsn00b/psxgte/square0.s new file mode 100644 index 0000000..d037b7e --- /dev/null +++ b/libpsn00b/psxgte/square0.s @@ -0,0 +1,27 @@ +.set noreorder + +.include "gtereg.h" +.include "inline_s.h" + +.section .text + + +.global Square0 +.type Square0, @function +Square0: + + # a0 - Pointer to input vector (v0) + # a1 - Pointer to output vector (v1) + + lwc2 C2_IR1, 0($a0) + lwc2 C2_IR2, 4($a0) + lwc2 C2_IR3, 8($a0) + + nSQR(0) + + swc2 C2_IR1, 0($a1) + swc2 C2_IR2, 4($a1) + swc2 C2_IR3, 8($a1) + + jr $ra + nop diff --git a/libpsn00b/psxgte/squareroot.s b/libpsn00b/psxgte/squareroot.s new file mode 100644 index 0000000..71f40a9 --- /dev/null +++ b/libpsn00b/psxgte/squareroot.s @@ -0,0 +1,121 @@ +.set noreorder + +.include "gtereg.h" +.include "inline_s.h" + +.section .text + +.global SquareRoot12 +.type SquareRoot12, @function +SquareRoot12: + mtc2 $a0, C2_LZCS + nop + nop + mfc2 $v0, C2_LZCR + beq $v0, 32, $bad_sqr12 + nop + andi $t0, $v0, 0x1 + addiu $v1, $0 , -2 + and $t2, $v0, $v1 + li $t1, 19 + sub $t1, $t2 + sra $t1, 1 + addi $t3, $t2, -24 + bltz $t3, $value_less12 + nop + sllv $t4, $a0, $t3 + b $value_greater12 +$value_less12: + addiu $t3, $0 , 24 + sub $t3, $t2 + srav $t4, $a0, $t3 +$value_greater12: + addi $t4, -64 + sll $t4, 1 + la $t5, sqrt_table + addu $t5, $t4 + lh $t5, 0($t5) + nop + + bltz $t1, $1594c + nop + jr $ra + sllv $v0, $t5, $t1 + +$1594c: + + sub $t1, $0 , $t1 + jr $ra + srl $v0, $t5, $t1 + +$bad_sqr12: + jr $ra + move $v0, $0 + + +.global SquareRoot0 +.type SquareRoot0, @function +SquareRoot0: + mtc2 $a0, C2_LZCS + nop + nop + mfc2 $v0, C2_LZCR + beq $v0, 32, $bad_sqr + nop + andi $t0, $v0, 0x1 + addiu $v1, $0 , -2 + and $t2, $v0, $v1 + li $t1, 31 + sub $t1, $t2 + sra $t1, 1 + addi $t3, $t2, -24 + bltz $t3, $value_less + nop + sllv $t4, $a0, $t3 + b $value_greater +$value_less: + addiu $t3, $0 , 24 + sub $t3, $t2 + srav $t4, $a0, $t3 +$value_greater: + addi $t4, -64 + sll $t4, 1 + la $t5, sqrt_table + addu $t5, $t4 + lh $t5, 0($t5) + nop + sllv $t5, $t5, $t1 + jr $ra + srl $v0, $t5, 12 +$bad_sqr: + jr $ra + move $v0, $0 + + +.section .data + +sqrt_table: + .hword 0x1000,0x101f,0x103f,0x105e,0x107e,0x109c,0x10bb,0x10da + .hword 0x10f8,0x1116,0x1134,0x1152,0x116f,0x118c,0x11a9,0x11c6 + .hword 0x11e3,0x1200,0x121c,0x1238,0x1254,0x1270,0x128c,0x12a7 + .hword 0x12c2,0x12de,0x12f9,0x1314,0x132e,0x1349,0x1364,0x137e + .hword 0x1398,0x13b2,0x13cc,0x13e6,0x1400,0x1419,0x1432,0x144c + .hword 0x1465,0x147e,0x1497,0x14b0,0x14c8,0x14e1,0x14f9,0x1512 + .hword 0x152a,0x1542,0x155a,0x1572,0x158a,0x15a2,0x15b9,0x15d1 + .hword 0x15e8,0x1600,0x1617,0x162e,0x1645,0x165c,0x1673,0x1689 + .hword 0x16a0,0x16b7,0x16cd,0x16e4,0x16fa,0x1710,0x1726,0x173c + .hword 0x1752,0x1768,0x177e,0x1794,0x17aa,0x17bf,0x17d5,0x17ea + .hword 0x1800,0x1815,0x182a,0x183f,0x1854,0x1869,0x187e,0x1893 + .hword 0x18a8,0x18bd,0x18d1,0x18e6,0x18fa,0x190f,0x1923,0x1938 + .hword 0x194c,0x1960,0x1974,0x1988,0x199c,0x19b0,0x19c4,0x19d8 + .hword 0x19ec,0x1a00,0x1a13,0x1a27,0x1a3a,0x1a4e,0x1a61,0x1a75 + .hword 0x1a88,0x1a9b,0x1aae,0x1ac2,0xa1d5,0x1ae8,0x1afb,0x1b0e + .hword 0x1b21,0x1b33,0x1b46,0x1b59,0x1b6c,0x1b7e,0x1b91,0x1ba3 + .hword 0x1bb6,0x1bc8,0x1bdb,0x1bed,0x1c00,0x1c12,0x1c24,0x1c36 + .hword 0x1c48,0x1c5a,0x1c6c,0x1c7e,0x1c90,0x1ca2,0x1cb4,0x1cc6 + .hword 0x1cd8,0x1ce9,0x1cfb,0x1d0d,0x1d1e,0x1d30,0x1d41,0x1d53 + .hword 0x1d64,0x1d76,0x1d87,0x1d98,0x1daa,0x1dbb,0x1dcc,0x1ddd + .hword 0x1dee,0x1e00,0x1e11,0x1e22,0x1e33,0x1e43,0x1e54,0x1e65 + .hword 0x1e76,0x1e87,0x1e98,0x1ea8,0x1eb9,0x1eca,0x1eda,0x1eeb + .hword 0x1efb,0x1f0c,0x1f1c,0x1f2d,0x1f3d,0x1f4e,0x1f5e,0x1f6e + .hword 0x1f7e,0x1f8f,0x1f9f,0x1faf,0x1fbf,0x1fcf,0x1fdf,0x1fef
\ No newline at end of file diff --git a/libpsn00b/psxgte/vectornormals.s b/libpsn00b/psxgte/vectornormals.s new file mode 100644 index 0000000..8907d43 --- /dev/null +++ b/libpsn00b/psxgte/vectornormals.s @@ -0,0 +1,110 @@ +.set noreorder +.set noat + +.include "gtereg.h" +.include "inline_s.h" + +.section .text + + +.global VectorNormalS +.type VectorNormalS, @function +VectorNormalS: + + # Implementation ripped from Sony libs + + lw $t0, 0($a0) + lw $t1, 4($a0) + lw $t2, 8($a0) + + mtc2 $t0, C2_IR1 + mtc2 $t1, C2_IR2 + mtc2 $t2, C2_IR3 + + nSQR(0) + + mfc2 $t3, C2_MAC1 + mfc2 $t4, C2_MAC2 + mfc2 $t5, C2_MAC3 + + add $t3, $t4 + add $v0, $t3, $t5 + mtc2 $v0, C2_LZCS + nop + nop + mfc2 $v1, C2_LZCR + + addiu $at, $0 , -2 + and $v1, $at + + addiu $t6, $0 , 0x1f + sub $t6, $v1 + sra $t6, 1 + addiu $t3, $v1, -24 + + bltz $t3, $value_neg + nop + b $value_pos + sllv $t4, $v0, $t3 +$value_neg: + addiu $t3, $0 , 24 + sub $t3, $v1 + srav $t4, $v0, $t3 +$value_pos: + addi $t4, -64 + sll $t4, 1 + + la $t5, _norm_table + addu $t5, $t4 + lh $t5, 0($t5) + nop + + mtc2 $t5, C2_IR0 + mtc2 $t0, C2_IR1 + mtc2 $t1, C2_IR2 + mtc2 $t2, C2_IR3 + + nGPF(0) + + mfc2 $t0, C2_MAC1 + mfc2 $t1, C2_MAC2 + mfc2 $t2, C2_MAC3 + + sra $t0, $t6 + sra $t1, $t6 + sra $t2, $t6 + + sh $t0, 0($a1) + sh $t1, 2($a1) + jr $ra + sh $t2, 4($a1) + + +.section .data + +_norm_table: + .hword 0x1000, 0x0FE0, 0x0FC1, 0x0FA3, 0x0F85, 0x0F68, 0x0F4C, 0x0F30 + .hword 0x0F15, 0x0EFB, 0x0EE1, 0x0EC7, 0x0EAE, 0x0E96, 0x0E7E, 0x0E66 + .hword 0x0E4F, 0x0E38, 0x0E22, 0x0E0C, 0x0DF7, 0x0DE2, 0x0DCD, 0x0DB9 + .hword 0x0DA5, 0x0D91, 0x0D7E, 0x0D6B, 0x0D58, 0x0D45, 0x0D33, 0x0D21 + .hword 0x0D10, 0x0CFF, 0x0CEE, 0x0CDD, 0x0CCC, 0x0CBC, 0x0CAC, 0x0C9C + .hword 0x0C8D, 0x0C7D, 0x0C6E, 0x0C5F, 0x0C51, 0x0C42, 0x0C34, 0x0C26 + .hword 0x0C18, 0x0C0A, 0x0BFD, 0x0BEF, 0x0BE2, 0x0BD5, 0x0BC8, 0x0BBB + .hword 0x0BAF, 0x0BA2, 0x0B96, 0x0B8A, 0x0B7E, 0x0B72, 0x0B67, 0x0B5B + .hword 0x0B50, 0x0B45, 0x0B39, 0x0B2E, 0x0B24, 0x0B19, 0x0B0E, 0x0B04 + .hword 0x0AF9, 0x0AEF, 0x0AE5, 0x0ADB, 0x0AD1, 0x0AC7, 0x0ABD, 0x0AB4 + .hword 0x0AAA, 0x0AA1, 0x0A97, 0x0A8E, 0x0A85, 0x0A7C, 0x0A73, 0x0A6A + .hword 0x0A61, 0x0A59, 0x0A50, 0x0A47, 0x0A3F, 0x0A37, 0x0A2E, 0x0A26 + .hword 0x0A1E, 0x0A16, 0x0A0E, 0x0A06, 0x09FE, 0x09F6, 0x09EF, 0x09E7 + .hword 0x09E0, 0x09D8, 0x09D1, 0x09C9, 0x09C2, 0x09BB, 0x09B4, 0x09AD + .hword 0x09A5, 0x099E, 0x0998, 0x0991, 0x098A, 0x0983, 0x097C, 0x0976 + .hword 0x096F, 0x0969, 0x0962, 0x095C, 0x0955, 0x094F, 0x0949, 0x0943 + .hword 0x093C, 0x0936, 0x0930, 0x092A, 0x0924, 0x091E, 0x0918, 0x0912 + .hword 0x090D, 0x0907, 0x0901, 0x08FB, 0x08F6, 0x08F0, 0x08EB, 0x08E5 + .hword 0x08E0, 0x08DA, 0x08D5, 0x08CF, 0x08CA, 0x08C5, 0x08BF, 0x08BA + .hword 0x08B5, 0x08B0, 0x08AB, 0x08A6, 0x08A1, 0x089C, 0x0897, 0x0892 + .hword 0x088D, 0x0888, 0x0883, 0x087E, 0x087A, 0x0875, 0x0870, 0x086B + .hword 0x0867, 0x0862, 0x085E, 0x0859, 0x0855, 0x0850, 0x084C, 0x0847 + .hword 0x0843, 0x083E, 0x083A, 0x0836, 0x0831, 0x082D, 0x0829, 0x0824 + .hword 0x0820, 0x081C, 0x0818, 0x0814, 0x0810, 0x080C, 0x0808, 0x0804 +
\ No newline at end of file diff --git a/libpsn00b/psxspu/makefile b/libpsn00b/psxspu/makefile new file mode 100644 index 0000000..d6b3604 --- /dev/null +++ b/libpsn00b/psxspu/makefile @@ -0,0 +1,34 @@ +PREFIX = mipsel-unknown-elf- + +TARGET = ../libpsxspu.a + +CFILES = $(notdir $(wildcard ./*.c)) +AFILES = $(notdir $(wildcard ./*.s)) +OFILES = $(addprefix build/,$(CFILES:.c=.o) $(AFILES:.s=.o)) + +INCLUDE = -I../include + +CFLAGS = -O2 -g -msoft-float -Wa,--strip-local-absolute +AFLAGS = -g -msoft-float --strip-local-absolute + +CC = $(PREFIX)gcc +AS = $(PREFIX)as +AR = $(PREFIX)ar +RANLIB = $(PREFIX)ranlib + +all: $(TARGET) + +$(TARGET): $(OFILES) + $(AR) cr $(TARGET) $(OFILES) + $(RANLIB) $(TARGET) + +build/%.o: %.c + @mkdir -p $(dir $@) + $(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@ + +build/%.o: %.s + @mkdir -p $(dir $@) + $(AS) $(AFLAGS) $(INCLUDE) $< -o $@ + +clean: + rm -Rf build $(TARGET) diff --git a/libpsn00b/psxspu/readme.txt b/libpsn00b/psxspu/readme.txt new file mode 100644 index 0000000..4cac976 --- /dev/null +++ b/libpsn00b/psxspu/readme.txt @@ -0,0 +1,36 @@ +PSX SPU Library, part of PSn00bSDK +2019 Lameguy64 / Meido-Tek Productions + +Licensed under Mozilla Public License + + Open source implementation of the SPU library written mostly in MIPS +assembly. Currently only supports SPU init, uploading sample data using DMA +transfer and basic sample playback but is currently lacking a bunch of +important functions. + + Very work in progress currently. + + +Library developer(s): + + Lameguy64 + + +Library header(s): + + psxspu.h + + +Todo list: + + * SPU RAM allocation routines yet to be implemented (heap must only be + stored in main RAM and not SPU RAM like in the official SDK). + + * SpuKeyOn() is actually not part of the official library. + + * SPU reverb configuration functions yet to be implemented. + + +Changelog: + + None so far... diff --git a/libpsn00b/psxspu/spuinit.s b/libpsn00b/psxspu/spuinit.s new file mode 100644 index 0000000..fa5ec32 --- /dev/null +++ b/libpsn00b/psxspu/spuinit.s @@ -0,0 +1,130 @@ +.set noreorder +.set noat + +.include "hwregs_a.h" + +.section .data + + +.global SpuInit +.type SpuInit, @function +SpuInit: + + addiu $sp, -4 + sw $ra, 0($sp) + + lui $v1, IOBASE + + # Stop and mute everything + + sh $0 , SPUCNT($v1) # Clear control settings + jal SpuCtrlSync + move $a0, $0 + + sh $0 , SPU_MASTER_VOL($v1) # Clear master volume + sh $0 , SPU_MASTER_VOL+2($v1) + + sh $0 , SPU_REVERB_VOL($v1) # Clear reverb volume + sh $0 , SPU_REVERB_VOL+2($v1) + + sh $0 , SPU_CD_VOL($v1) # Clear CD volume + sh $0 , SPU_CD_VOL+2($v1) + + sh $0 , SPU_EXT_VOL($v1) # Clear external audio volume + sh $0 , SPU_EXT_VOL+2($v1) + + sh $0 , SPU_FM_MODE($v1) # Turn off FM modes + sh $0 , SPU_FM_MODE+2($v1) + + sh $0 , SPU_NOISE_MODE($v1) # Turn off noise modes + sh $0 , SPU_NOISE_MODE+2($v1) + + sh $0 , SPU_REVERB_ON($v1) # Turn off reverb modes + sh $0 , SPU_REVERB_ON+2($v1) + + li $v0, 0xfffe + sh $v0, SPU_REVERB_ADDR($v1) + + lui $v0, 0x0200; + ori $v0, 0x3fff; + + # Clear all voices + + addiu $a1, $sp, -20 + sw $0 , 0($a1) + sw $0 , 4($a1) + sw $0 , 8($a1) + sw $0 , 12($a1) + + li $a2, 23 + +.clear_voices: + jal SpuSetVoiceRaw + move $a0, $a2 + addiu $a2, -1 + bgez $a2, .clear_voices + nop + + li $v0, 0xffff # Set all keys to off + sh $v0, SPU_KEY_OFF($v1) + sh $v0, SPU_KEY_OFF+2($v1) + + li $v0, 0x4 # Set SPU data transfer control + sh $v0, SPUDTCNT($v1) # (usually always 0x4) + + lw $v0, DPCR($v1) # Enable DMA channel 4 (SPU DMA) + lui $at, 0xb + or $v0, $at + sw $v0, DPCR($v1) + + li $v0, 0xc000 # Enable SPU + sh $v0, SPUCNT($v1) + jal SpuCtrlSync + move $a0, $v0 + + li $v0, 0x3fff # Activate master volume + sh $v0, SPU_MASTER_VOL($v1) + sh $v0, SPU_MASTER_VOL+2($v1) + + sh $v0, SPU_CD_VOL($v1) # Activate CD volume + sh $v0, SPU_CD_VOL+2($v1) + + lw $ra, 0($sp) + addiu $sp, 4 + jr $ra + nop + + +# Waits until bits 0-5 of SPUSTAT are equal to SPUCNT +# +# Destroys v0, v1, a0 +# +.global SpuCtrlSync +.type SpuCtrlSync, @function +SpuCtrlSync: + lui $v1, IOBASE + andi $a0, 0x3f +.ctrl_wait: + lhu $v0, SPUSTAT($v1) # Get SPUSTAT value + nop + andi $v0, 0x3f + bne $v0, $a0, .ctrl_wait # Wait until SPUCNT and SPUSTAT are equal + nop + jr $ra + nop + + +# Waits until SPU has finished transfers +# +.global SpuWait +.type SpuWait, @function +SpuWait: + lui $v0, IOBASE + lhu $v0, SPUSTAT($v0) + nop + andi $v0, 0x400 + bnez $v0, SpuWait + nop + jr $ra + nop +
\ No newline at end of file diff --git a/libpsn00b/psxspu/spukeyon.s b/libpsn00b/psxspu/spukeyon.s new file mode 100644 index 0000000..556f976 --- /dev/null +++ b/libpsn00b/psxspu/spukeyon.s @@ -0,0 +1,16 @@ +.set noreorder + +.include "hwregs_a.h" + +.section .data + + +.global SpuKeyOn +.type SpuKeyOn, @function +SpuKeyOn: + lui $v1, IOBASE + li $v0, 1 + sll $v0, $a0 + sh $v0, SPU_KEY_ON($v1) + jr $ra + nop
\ No newline at end of file diff --git a/libpsn00b/psxspu/spureverbon.s b/libpsn00b/psxspu/spureverbon.s new file mode 100644 index 0000000..852bff3 --- /dev/null +++ b/libpsn00b/psxspu/spureverbon.s @@ -0,0 +1,16 @@ +.set noreorder + +.include "hwregs_a.h" + +.section .data + + +.global SpuReverbOn +.type SpuReverbOn, @function +SpuReverbOn: + lui $v1, IOBASE + li $v0, 1 + sll $v0, $a0 + sh $v0, SPU_REVERB_ON($v1) + jr $ra + nop
\ No newline at end of file diff --git a/libpsn00b/psxspu/spusetkey.s b/libpsn00b/psxspu/spusetkey.s new file mode 100644 index 0000000..1270b2a --- /dev/null +++ b/libpsn00b/psxspu/spusetkey.s @@ -0,0 +1,26 @@ +.set noreorder + +.include "hwregs_a.h" + +.section .data + + +.global SpuSetKey +.type SpuSetKey, @function +SpuSetKey: + # a0 - 0: key off, 1: key on + # a1 - Voice bit mask + + lui $a2, IOBASE + + beqz $a0, .key_off + nop + + jr $ra + sh $a1, SPU_KEY_ON($v1) + +.key_off: + + jr $ra + sh $a1, SPU_KEY_OFF($v1) +
\ No newline at end of file diff --git a/libpsn00b/psxspu/spusetreverb.s b/libpsn00b/psxspu/spusetreverb.s new file mode 100644 index 0000000..993b166 --- /dev/null +++ b/libpsn00b/psxspu/spusetreverb.s @@ -0,0 +1,24 @@ +.set noreorder + +.include "hwregs_a.h" + +.section .data + + +.global SpuSetReverb +.type SpuSetReverb, @function +SpuSetReverb: + addiu $sp, -4 + sw $ra, 0($sp) + + lhu $v0, SPUCNT($v1) + nop + ori $v0, 0x80 # Enable reverb + sh $v0, SPUCNT($v1) + jal SpuCtrlSync + move $a0, $v0 + + lw $ra, 0($sp) + addiu $sp, 4 + jr $ra + nop
\ No newline at end of file diff --git a/libpsn00b/psxspu/spusetreverbaddr.s b/libpsn00b/psxspu/spusetreverbaddr.s new file mode 100644 index 0000000..6ddbf44 --- /dev/null +++ b/libpsn00b/psxspu/spusetreverbaddr.s @@ -0,0 +1,25 @@ +.set noreorder + +.include "hwregs_a.h" + + +.section .text + +.global SpuSetReverbAddr +.type SpuSetReverbAddr, @function +SpuSetReverbAddr: + lui $a3, 0x1f80 + srl $a0, 3 + sh $a0, SPU_REVERB_ADDR($a3) + jr $ra + nop + + +.global SpuSetReverbVolume +.type SpuSetReverbVolume, @function +SpuSetReverbVolume: + lui $a3, 0x1f80 + sh $a0, SPU_REVERB_VOL($a3) + sh $a1, SPU_REVERB_VOL+2($a3) + jr $ra + nop
\ No newline at end of file diff --git a/libpsn00b/psxspu/spusetvoiceraw.s b/libpsn00b/psxspu/spusetvoiceraw.s new file mode 100644 index 0000000..43450f6 --- /dev/null +++ b/libpsn00b/psxspu/spusetvoiceraw.s @@ -0,0 +1,60 @@ +.set noreorder + +.include "hwregs_a.h" + + +.set PARAM_L, 0 +.set PARAM_R, 2 +.set PARAM_FREQ, 4 +.set PARAM_ADDR, 6 +.set PARAM_LOOP, 8 +.set PARAM_RES, 10 +.set PARAM_ADSR, 12 + + +.section .text + +.global SpuSetVoiceRaw +.type SpuSetVoiceRaw, @function +SpuSetVoiceRaw: + + # a0 - Voice number + # a1 - Address to parameters + + sll $a0, 4 + addiu $a0, SPU_VOICE_BASE + + lui $v1, IOBASE + or $a0, $v1 + + lhu $v0, PARAM_L($a1) + nop + sh $v0, SPU_VOICE_VOL_L($a0) + + lhu $v0, PARAM_R($a1) + nop + sh $v0, SPU_VOICE_VOL_R($a0) + + lhu $v0, PARAM_FREQ($a1) + nop + sh $v0, SPU_VOICE_FREQ($a0) + + lhu $v0, PARAM_ADDR($a1) + nop + sh $v0, SPU_VOICE_ADDR($a0) + + lhu $v0, PARAM_LOOP($a1) + nop + sh $v0, SPU_VOICE_LOOP($a0) + + + lw $v0, PARAM_ADSR($a1) + nop + sh $v0, SPU_VOICE_ADSR_L($a0) + srl $v0, 16 + sh $v0, SPU_VOICE_ADSR_H($a0) + + + jr $ra + nop +
\ No newline at end of file diff --git a/libpsn00b/psxspu/transfer.s b/libpsn00b/psxspu/transfer.s new file mode 100644 index 0000000..aed69dc --- /dev/null +++ b/libpsn00b/psxspu/transfer.s @@ -0,0 +1,107 @@ +.set noreorder + +.include "hwregs_a.h" + + +.section .text + +.global SpuSetTransferMode +.type SpuSetTransferMode, @function +SpuSetTransferMode: + la $v0, _spu_transfer_mode + sb $a0, 0($v0) + jr $ra + move $v0, $a0 + + +.global SpuSetTransferStartAddr +.type SpuSetTransferStartAddr, @function +SpuSetTransferStartAddr: + li $v0, 0x1000 # Check if value is valid + blt $a0, $v0, .bad_value + nop + li $v0, 0xffff + bgt $a0, $v0, .bad_value + nop + + la $v1, _spu_transfer_addr + srl $v0, $a0, 3 # Set transfer destination address + sh $v0, 0($v1) + + jr $ra + move $v0, $a0 + +.bad_value: + jr $ra + move $v0, $0 + + +.global SpuWrite +.type SpuWrite, @function +SpuWrite: + addiu $sp, -8 + sw $ra, 0($sp) + sw $a0, 4($sp) + + lui $a3, IOBASE + + lhu $v0, SPUCNT($a3) # Set transfer mode to Stop + nop + andi $v0, 0xffcf + sh $v0, SPUCNT($a3) + jal SpuCtrlSync + move $a0, $v0 + + la $v1, _spu_transfer_addr # Set SPU write address + lhu $v1, 0($v1) + nop + sh $v1, SPU_ADDR($a3) + + lhu $v0, SPUCNT($a3) # Set transfer mode to DMA write + nop + ori $v0, 0x20 + sh $v0, SPUCNT($a3) + #jal SpuCtrlSync # Locks up on most emulators (bit 5 in + #move $a0, $v0 # SPUSTAT likely not updating, seems to + # be okay to not wait for it on real HW) + + lw $a0, 4($sp) + +.dma_wait: # Wait for SPU to be ready for DMA + lhu $v0, SPUSTAT($a3) + nop + andi $v0, 0x400 # Bit 8 in SPUSTAT never changes to 1 on + bnez $v0, .dma_wait # emulators so use bit 10 instead + nop + + sw $a0, D4_MADR($a3) # Set DMA source address + + li $v0, 0x10 # 16 words per block (64 bytes) + addiu $a1, 63 # Add by 63 to ensure all bytes get sent + srl $a1, 6 # Equivalent to divide by 64 + andi $a1, 0xffff + sll $a1, 16 + or $v0, $a1 + sw $v0, D4_BCR($a3) + + lui $v0, 0x0100 # Commence transfer + ori $v0, 0x0201 + sw $v0, D4_CHCR($a3) + + lw $ra, 0($sp) + addiu $sp, 8 + jr $ra + nop + + +.section .data + +.global _spu_transfer_mode +.type _spu_transfer_mode, @object +_spu_transfer_mode: + .word 0x0 + +.global _spu_transfer_addr +.type _spu_transfer_addr, @object +_spu_transfer_addr: + .word 0x200
\ No newline at end of file diff --git a/libpsn00b/readme.txt b/libpsn00b/readme.txt new file mode 100644 index 0000000..c5fee34 --- /dev/null +++ b/libpsn00b/readme.txt @@ -0,0 +1,101 @@ +LibPSn00b, PSn00bSDK software libraries +2019 Lameguy64 / Meido-Tek Productions + +Licensed under Mozilla Public License + +LibPSn00b make up the majority of PSn00bSDK as it provides the functions +necessary for developing software for the PSX. Most libraries, mainly the +GPU and GTE libraries are written mostly in assembly language. + + +Brief library overview: + + libc - Standard C library. Contains only a small subset of the full + standard C library, mostly string and memory manipulation + functions. + + psxgpu - GPU library for video and graphics control. Most of the + important functions are implemented. + + psxgte - GTE library for GTE accelerated vector transformations. Most + important functions are implemented. + + psxapi - Provides access to most of the BIOS functions calls of the + PSX BIOS. + + psxetc - Provides some misc functions such as debug font. + + psxspu - SPU library. Basic functions such as hardware init, uploading + data to SPU RAM via DMA transfer and playing sound playback + are fully working but is currently lacking a number of + important functions, especially reverb. + + Each library has its own readme file that contains its changelog, todo + list, credits and some additional details of the library. + + +Compiling: + + Compiling the LibPSn00b libraries requires GCC and binutils targetting + mipsel-unknown-elf built with libgcc. The path to those binaries must be + specified in your PATH environment variable and the binaries must be + prefixed by the target architecture (ie. mipsel-unknown-elf-gcc). + + Simply run the Makefile in this directory using make (or gmake if you're + in a BSD environment). The Makefile should parse though each library + directory and run the makefile in it. + + +Documentation: + + Documentation of all the libraries are found in libn00bref.odf and it features + the same formatting as the official library documents. The document can be + exported in PDF format for easier viewing with a web browser or PDF viewer. + + +Contributing: + + Contributions are open for this project. Just obey the following rules + when making a contribution: + + * If you add new functions to libpsn00b make sure you document them in + libn00bref.odf. Documentation using Doxygen is discouraged. + * This project desires functions that interact with hardware registers to + be written in assembly language. If you decide to write your functions + that interact with hardware registers in C make sure you define your + register pointers as volatile and they must work properly when compiled + with -O2 optimization. + * Functions must work flawlessly on both emulators and real hardware. + * Don't forget to put your user name in the readme file of the library + you've made a contribution on and details of what you've added/modified. + * New functions that are not originally in the official SDK must be marked + as original code in both the library headers and the libn00bref document. + + +Library to-do list: + + Since the PSn00bSDK project still a work in progress, essential libraries + for CD and controllers support are not yet created but are high priority. + + libc - Yet to include a complete C standard function + + psxcd - CD library. Not much progress as getting the CD controller to + cooperate has been one heck of a force to be reckoned with. + Gave up with my repeated attempts with no success. Absolutely + huge props to anyone who can figure out how to use the CD + controller properly! -Lameguy64 + + psxpad - Pad/tap/gun library. No work has been done on it currently. + Supporting the Konami Justifier can be ignored as the way how + that lightgun works is pretty crude and likely going to be + awful to implement. Namco's Guncon is a lot simpler to + implement. + + psxpress - MDEC library. No work has been done on it currently. libpress + from the official libraries also contains functions for + encoding SPU compatible ADPCM data from raw PCM samples. + + Before implementing CD and controller support a better interrupt handling + scheme must be implemented as it would save a lot of trouble. Details + regarding this interrupt handler implementation can be found in psxgpu's + readme document.
\ No newline at end of file diff --git a/toolchain.txt b/toolchain.txt new file mode 100644 index 0000000..36f04fa --- /dev/null +++ b/toolchain.txt @@ -0,0 +1,44 @@ +If you wish to build the toolchain yourself, beware that this process can get pretty tedious. A system with at least 4 physical cores or 8 total threads is recommended. You may have better success building the toolchain in ArchLinux especially if you want to build the most recent version of GCC. + +These instructions may work for Windows using MSys2 or Cygwin64. + + +Building binutils: + +* Download binutils source files at ftp://ftp.gnu.org and choose a version you prefer to use. +* Extract the contents of the archive. Preferably to a directory called gcc for example. +* Create a directory named binutils-build inside the gcc directory. +* Configure binutils from the binutils-build directory with the following parameters: + +../binutils-<version>/configure --prefix=/usr/local/mipsel-unknown-elf --target=mipsel-unknown-elf --with-float=soft + +Replace <version> with the version of binutils you downloaded. You may also want to change the prefix to a path you wish to install the toolchain to. +* Run 'make -j 4' to compile binutils (-j specifies how many jobs to execute at once). +* Run make install-strip to install binutils to the path specified by --prefix (may require root priviledges). Binutils needs to be installed in order for GCC to compile. + + +Building gcc: + +* Download gcc source files at ftp://ftp.gnu.org and choose a version you prefer to use. +* Extract it to the same directory you extracted binutils in. +* Create a directory named gcc-build inside the gcc directory. +* Configure gcc from the gcc-build directory with the following parameters: + +../gcc-<version>/configure --disable-nls --disable-libada --disable-libssp --disable-libquadmath --disable-libstdc++-v3 --disable-libgomp --disable-libatomic --disable-libcilkrts --disable-libitm --disable-libsanitizer --disable-liblibvtv --disable-libmpx --disable-libhsail-rt --disable-libgfortran --disable-libbacktrace --disable-libgo --disable-libffi --disable-libobjc --disable-liboffloadmic --enable-libgcc --target=mipsel-unknown-elf --prefix=/usr/local/mipsel-unknown-elf --with-float=soft --enable-languages=c,c++ --with-gnu-as --with-gnu-ld + +Replace <version> with the version of gcc you downloaded. The prefix must be the same as the prefix you specified for binutils. +* Run make in the same manner as you built binutils to build gcc. +* Run make install-strip to install gcc (may require root priviledges). +* Include the path to the bin directory of the toolchain you just built into your PATH environment variable. The compiler and binutils programs are prefixed with mipsel-unknown-elf (ie. mipsel-unknown-elf-gcc). + + +Note regarding C++ support: + +By default C++ support such as classes are unavailable due to the lack of a C++ support library as GCC's stdc++-v3 never seems to compile for mipsel-unknown-elf which explains why the suggested config disables it. Newlib may work instead but it might be too bloated to be practical to use on the PS1 considering the system only has 2MB of DRAM so more than 200KB taken up by libraries to support C++ is considered unacceptable in the PSn00bSDK project. + + +Note for Windows users: + +From my experience GCC won't build with libgcc even in Msys, Msys2 and Cygwin64. To get around this you'll have to steal a copy of the libgcc libraries from a Linux build. A complete binary download of PSn00bSDK for Windows should have this library included. + +If you don't compile with libgcc int64 and floating point emulation will be unavailable so the advice of getting GCC to compile by disabling libgcc is like repairing the flat tire of a car by taking out the tire entirely. Though use of in64 and floating point are not really optimal on the PS1 hardware to begin with.
\ No newline at end of file diff --git a/tools/lzpack/filelist.cpp b/tools/lzpack/filelist.cpp new file mode 100644 index 0000000..8554ae0 --- /dev/null +++ b/tools/lzpack/filelist.cpp @@ -0,0 +1,79 @@ +#include "filelist.h" + +FileListClass::FileListClass() { + + NumFiles = 0; + AllocFiles = 1; + + FileList = (FileListEntry*)malloc(sizeof(FileListEntry)); + memset(FileList, 0x00, sizeof(FileListEntry)); + +} + +FileListClass::~FileListClass() { + + for(int i=NumFiles-1; i>=0; i--) { + + if (FileList[i].fileName != NULL) + free(FileList[i].fileName); + + if (FileList[i].aliasName != NULL) + free(FileList[i].aliasName); + + } + + free(FileList); + +} + +void FileListClass::AddFileEntry(const char* fileName, const char* aliasName, short windowSize, short hash1Size, short hash2Size) { + + if (NumFiles >= AllocFiles) { + + FileList = (FileListEntry*)realloc(FileList, sizeof(FileListEntry)*(AllocFiles+1)); + memset(&FileList[AllocFiles], 0x00, sizeof(FileListEntry)); + + AllocFiles++; + + } + + if (aliasName == NULL) + FileList[NumFiles].aliasName = NULL; + else + FileList[NumFiles].aliasName = strdup(aliasName); + + FileList[NumFiles].fileName = strdup(fileName); + FileList[NumFiles].windowSize = windowSize; + FileList[NumFiles].hash1Size = hash1Size; + FileList[NumFiles].hash2Size = hash2Size; + NumFiles++; + +} + +const FileListEntry* FileListClass::Entry(int index) { + + return(&FileList[index]); + +} + +int FileListClass::EntryCount() { + + return(NumFiles); + +} + +void FileListClass::PrintEntries() { + + for(int i=0; i<NumFiles; i++) { + + printf("FL FILE:%s", FileList[i].fileName); + + if (FileList[i].aliasName != NULL) { + printf(" ALIAS:%s\n", FileList[i].aliasName); + } else { + printf("\n"); + } + + } + +} diff --git a/tools/lzpack/filelist.h b/tools/lzpack/filelist.h new file mode 100644 index 0000000..5351335 --- /dev/null +++ b/tools/lzpack/filelist.h @@ -0,0 +1,43 @@ +#ifndef _FILELIST_H +#define _FILELIST_H + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <unistd.h> +#include <limits.h> + +#ifndef MAX_PATH +#define MAX_PATH PATH_MAX +#endif + +typedef struct { + char* fileName; + char* aliasName; + int windowSize; + int hash1Size; + int hash2Size; +} FileListEntry; + +class FileListClass { + + int NumFiles; + int AllocFiles; + FileListEntry* FileList; + +public: + + FileListClass(); + virtual ~FileListClass(); + + void AddFileEntry(const char* fileName, const char* aliasName, short windowSize, short hash1Size, short hash2Size); + + const FileListEntry* Entry(int index); + int EntryCount(); + + void PrintEntries(); + +}; + + +#endif diff --git a/tools/lzpack/lzp/lzconfig.h b/tools/lzpack/lzp/lzconfig.h new file mode 100644 index 0000000..65e623c --- /dev/null +++ b/tools/lzpack/lzp/lzconfig.h @@ -0,0 +1,68 @@ +/*! \file lzconfig.h + * \brief Library configuration header + * \details Define settings will only take effect when you recompile the library. + */ + +#ifndef _LZP_CONFIG_H +#define _LZP_CONFIG_H + + +#ifndef TRUE +#define TRUE 1 +#endif +#ifndef FALSE +#define FALSE 0 +#endif + + +/* Set to TRUE to compile without data compression routines useful if you + * plan to use this library on a program that does not require said routines + * especially on a platform with limited memory (such as the PlayStation). + * + * This define will rule out lzCompress(), lzSetHashSizes() and + * lzResetHashSizes() functions and their associated functions. + */ +#define LZP_NO_COMPRESS FALSE + + +/* Set to TRUE to make default compression table sizes to maximum and works best + * when compressing large amounts of data. LZP_USE_MALLOC must be set to TRUE to + * prevent stack overflow errors. + * + * Do not enable this if you plan to compile for a platform with limited memory + * otherwise, the library will consume all memory and crash the system. + * + * This define only affects lzCompress(). + */ +#define LZP_MAX_COMPRESS TRUE + + +/* Uncomment to make the library use malloc() instead of array initializers to + * allocate hash tables. Enabling this is a must if you plan to use large hash + * and window table sizes. + */ +#define LZP_USE_MALLOC TRUE + + +/* Hash table sizes (in power-of-two multiple units) + * + * These define only affect lzCompress(). + */ +#if LZP_MAX_COMPRESS == TRUE + +// Minimal defaults +#define LZP_WINDOW_SIZE 17 +#define LZP_HASH1_SIZE 8 +#define LZP_HASH2_SIZE 10 + +#else + +// Maximum defaults +#define LZP_WINDOW_SIZE 17 +#define LZP_HASH1_SIZE 22 +#define LZP_HASH2_SIZE 24 + +#endif + + +#endif // _LZP_CONFIG_H diff --git a/tools/lzpack/lzp/makefile b/tools/lzpack/lzp/makefile new file mode 100644 index 0000000..83da67d --- /dev/null +++ b/tools/lzpack/lzp/makefile @@ -0,0 +1,30 @@ +# This LZP library builds off the lzp sources in libpsn00b/lzp. The only +# difference is this is built with compression enabled specified in the +# lzconfig.h file and the library is built for the host platform. + +TARGET = liblzp.a + +CFILES = $(wildcard ../../../libpsn00b/lzp/*.c) +OFILES = $(addprefix build/, $(notdir $(CFILES:.c=.o))) + +INCLUDE = -I../include -I. + +CFLAGS = -g -O2 + +CC = $(PREFIX)gcc +AR = $(PREFIX)ar +RANLIB = $(PREFIX)ranlib + +all: $(TARGET) + +$(TARGET): $(OFILES) + $(AR) cr $(TARGET) $(OFILES) + $(RANLIB) $(TARGET) + +# Dunno if there's a better way to do this but it works at least +build/%.o: ../../../libpsn00b/lzp/%.c + @mkdir -p $(dir $@) + $(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@ + +clean: + rm -Rf build $(TARGET)
\ No newline at end of file diff --git a/tools/lzpack/main.cpp b/tools/lzpack/main.cpp new file mode 100644 index 0000000..ed650d2 --- /dev/null +++ b/tools/lzpack/main.cpp @@ -0,0 +1,615 @@ +#include <stdio.h> +#include <tinyxml2.h> + +#include "lzp/lzconfig.h" +#include "lzp/lzp.h" +#include "filelist.h" + + +#define BUFF_SIZE 4096 + + +typedef struct { + char id[3]; + u_char numFiles; +} QLP_HEAD; + +typedef struct { + char fileName[16]; + u_long fileSize; + u_long offset; +} QLP_FILE; + + +typedef struct { + char name[16]; + int size; + int offset; // In 2048 byte sector units +} PCK_FILE; + +typedef struct { + char id[3]; + u_char numFiles; + PCK_FILE file[85]; // File entries + int lba; // LBA of the PCK file (in 2048 byte sector units) +} PCK_TOC; + + +namespace param { + + bool AlwaysOverwrite = false; + char ScriptFile[MAX_PATH]= { 0 }; + +} + + +int ParseCreateElement(tinyxml2::XMLElement* element); + +char* lcase(char* str); +const char* TrimPathName(const char* path); + + +int main(int argc, const char* argv[]) { + + printf("LZPack v0.60b - File Compression and Packing Utility\n"); + printf("2016-2019 Meido-Tek Productions (Lameguy64)\n\n"); + + if (argc <= 1) { + + printf("Parameters:\n"); + printf(" lzpack [-y] <scriptFile>\n\n"); + printf(" -y - Always overwrite existing files.\n"); + printf(" <scriptFile> - Script file to parse (in XML format, see readme.txt).\n"); + + exit(0); + + } + + + // Parse arguments + for(int i=1; i<argc; i++) { + + if (strcmp("-y", argv[i]) == 0) { + + param::AlwaysOverwrite = true; + + } else if ((argv[i][0] == '-') || (argv[i][0] == '/')) { + + printf("Unknown parameter: %s\n", argv[i]); + + } else { + + strcpy(param::ScriptFile, argv[i]); + + } + + } + + if (strlen(param::ScriptFile) == 0) { + printf("ERROR: No script file specified.\n"); + exit(EXIT_FAILURE); + } + + + tinyxml2::XMLDocument document; + + switch(document.LoadFile(param::ScriptFile)) { + case tinyxml2::XML_SUCCESS: + + break; + + case tinyxml2::XML_ERROR_FILE_NOT_FOUND: + + printf("ERROR: Could not find file: %s\n", param::ScriptFile); + exit(EXIT_FAILURE); + + case tinyxml2::XML_ERROR_FILE_COULD_NOT_BE_OPENED: + case tinyxml2::XML_ERROR_FILE_READ_ERROR: + + printf("ERROR: Could not load file: %s\n", param::ScriptFile); + exit(EXIT_FAILURE); + + case tinyxml2::XML_ERROR_EMPTY_DOCUMENT: + + printf("ERROR: %s is empty.\n", param::ScriptFile); + exit(EXIT_FAILURE); + + default: + + printf("ERROR: Unknown error when loading %s\n", param::ScriptFile); + exit(EXIT_FAILURE); + + } + + + tinyxml2::XMLElement* element = document.FirstChildElement("lzp_project"); + + if (element == NULL) { + + printf("ERROR: <lzp_project> element not found.\n"); + exit(EXIT_FAILURE); + + } + + + tinyxml2::XMLElement* createElement = element->FirstChildElement("create"); + + while(createElement != NULL) { + + ParseCreateElement(createElement); + + createElement = createElement->NextSiblingElement(); + + } + + + return(0); + +} + + +int CreateLZPfile(const char* packFile, FileListClass* fileList) { + + FILE* packp; + LZP_FILE entry[fileList->EntryCount()]; + int overallSize=0; + int overallPackedSize=0; + + + packp = fopen(packFile, "wb"); + + fseek(packp, sizeof(LZP_HEAD)+(sizeof(LZP_FILE)*fileList->EntryCount()), SEEK_SET); + + for(int i=0; i<fileList->EntryCount(); i++) { + + const char* name; + + if (fileList->Entry(i)->aliasName == NULL) { + + name = TrimPathName(fileList->Entry(i)->fileName); + + } else { + + name = fileList->Entry(i)->aliasName; + + } + + if (strlen(name) > 15) { + + printf("ERROR: Entry '%s' has more than 15 characters.\n", name); + fclose(packp); + unlink(packFile); + + return(0); + + } + + strcpy(entry[i].fileName, name); + + if (fileList->Entry(i)->aliasName == NULL) { + printf(" Packing %s... ", fileList->Entry(i)->fileName); + } else { + printf(" Packing %s as %s... ", fileList->Entry(i)->fileName, fileList->Entry(i)->aliasName); + } + + + FILE* fp = fopen(fileList->Entry(i)->fileName, "rb"); + + fseek(fp, 0, SEEK_END); + int fileSize = ftell(fp); + fseek(fp, 0, SEEK_SET); + + void* fileBuff = malloc(fileSize); + fread(fileBuff, fileSize, 1, fp); + + fclose(fp); + + + void* compBuff = malloc(fileSize+16384); + int compSize = lzCompress(compBuff, fileBuff, fileSize, 2); + + + entry[i].crc = lzCRC32(compBuff, compSize, LZP_CRC32_REMAINDER); + entry[i].fileSize = fileSize; + entry[i].packedSize = compSize; + entry[i].offset = ftell(packp); + + fwrite(compBuff, compSize, 1, packp); + + free(compBuff); + free(fileBuff); + + printf("Ok. (%.02f%%)\n", 100.f*((float)compSize/fileSize)); + + overallSize += fileSize; + overallPackedSize += compSize; + + } + + + LZP_HEAD head; + + strncpy(head.id, "LZP", 4); + head.numFiles = fileList->EntryCount(); + + fseek(packp, 0, SEEK_SET); + fwrite(&head, sizeof(LZP_HEAD), 1, packp); + + fwrite(entry, sizeof(LZP_FILE), fileList->EntryCount(), packp); + + fclose(packp); + + + printf("Packed %d file(s) totaling %d bytes (%.02f%% compression ratio).\n", + fileList->EntryCount(), + overallPackedSize, + 100.f*((float)overallPackedSize/overallSize) + ); + + + return(true); + +} + +int CreateQLPfile(const char* packFile, FileListClass* fileList) { + + FILE* packp; + QLP_HEAD head; + QLP_FILE fileEntry[fileList->EntryCount()]; + + strncpy(head.id, "QLP", 3); + head.numFiles = fileList->EntryCount(); + + packp = fopen(packFile, "wb"); + + fseek(packp, sizeof(QLP_HEAD)+(sizeof(QLP_FILE)*head.numFiles), SEEK_SET); + + for(int i=0; i<head.numFiles; i++) { + + // Get name for the file entry either from its source file name or specified alias + const char* name; + + if (fileList->Entry(i)->aliasName == NULL) { + + name = TrimPathName(fileList->Entry(i)->fileName); + + } else { + + name = fileList->Entry(i)->aliasName; + + } + + // Make sure entry name does not exceed 15 characters (16 with null terminator byte) + if (strlen(name) > 15) { + + printf("ERROR: Entry '%s' has more than 15 characters.\n", name); + fclose(packp); + unlink(packFile); + + return(0); + + } + + strcpy(fileEntry[i].fileName, name); + + if (fileList->Entry(i)->aliasName == NULL) { + + printf(" Packing %s... ", fileList->Entry(i)->fileName); + + } else { + + printf(" Packing %s as %s... ", fileList->Entry(i)->fileName, fileList->Entry(i)->aliasName); + + } + + // Make sure written data is aligned in multiples of 4 bytes + if ((4*((ftell(packp)+3)/4)) != ftell(packp)) + fseek(packp, (4*((ftell(packp)+3)/4)), SEEK_SET); + + // Set name and offset of file entry + memset(fileEntry[i].fileName, 0x00, 16); + strcpy(fileEntry[i].fileName, name); + fileEntry[i].offset = ftell(packp); + + // Open file and copy its contents to the pack file + FILE* fp = fopen(fileList->Entry(i)->fileName, "rb"); + + int bytesCopied = 0; + void* copyBuff = malloc(BUFF_SIZE); + + while(!feof(fp)) { + + int bytesRead = fread(copyBuff, 1, BUFF_SIZE, fp); + + fwrite(copyBuff, bytesRead, 1, packp); + + bytesCopied += bytesRead; + + } + + free(copyBuff); + fclose(fp); + + fileEntry[i].fileSize = bytesCopied; + + printf("Done.\n"); + + } + + printf("Packed %d file(s) totaling %d bytes.\n", head.numFiles, (int)ftell(packp)); + + fseek(packp, 0, SEEK_SET); + fwrite(&head, sizeof(QLP_HEAD), 1, packp); + + fwrite(fileEntry, sizeof(QLP_FILE), head.numFiles, packp); + + fclose(packp); + + return(true); + +} + +int CreatePCKfile(const char* packFile, FileListClass* fileList) { + + FILE* packp; + PCK_TOC toc; + + memset(&toc, 0x00, sizeof(PCK_TOC)); + + toc.numFiles = fileList->EntryCount(); + + packp = fopen(packFile, "wb"); + + fseek(packp, 2048, SEEK_SET); + + for(int i=0; i<toc.numFiles; i++) { + + // Get name for the file entry either from its source file name or specified alias + const char* name; + + if (fileList->Entry(i)->aliasName == NULL) { + + name = TrimPathName(fileList->Entry(i)->fileName); + + } else { + + name = fileList->Entry(i)->aliasName; + + } + + // Make sure entry name does not exceed 15 characters (16 with null terminator byte) + if (strlen(name) > 15) { + + printf("ERROR: Entry '%s' has more than 15 characters.\n", name); + fclose(packp); + unlink(packFile); + + return(0); + + } + + strcpy(toc.file[i].name, name); + toc.file[i].offset = ftell(packp)/2048; + + if (fileList->Entry(i)->aliasName == NULL) { + + printf(" Packing %s... ", fileList->Entry(i)->fileName); + + } else { + + printf(" Packing %s as %s... ", fileList->Entry(i)->fileName, fileList->Entry(i)->aliasName); + + } + + FILE* fp = fopen(fileList->Entry(i)->fileName, "rb"); + void* buff = malloc(BUFF_SIZE); + + int bytesTotal = 0; + + while(!feof(fp)) { + + int bytesRead = fread(buff, 1, BUFF_SIZE, fp); + fwrite(buff, 1, bytesRead, packp); + bytesTotal += bytesRead; + + } + + fclose(fp); + free(buff); + + toc.file[i].size = bytesTotal; + + if ((2048*((ftell(packp)+2047)/2048)) != ftell(packp)) { + + int pad = (2048*(((ftell(packp)%2048)+2047)/2048))-(ftell(packp)%2048); + char padding[pad]; + + memset(padding, 0x00, pad); + fwrite(padding, pad, 1, packp); + + } + + printf("Done.\n"); + + } + + printf("Packed %d file(s) totaling %d bytes.\n", toc.numFiles, (int)ftell(packp)); + + strncpy(toc.id, "PCK", 3); + + fseek(packp, 0, SEEK_SET); + fwrite(&toc, sizeof(PCK_TOC), 1, packp); + + fclose(packp); + + return(true); + +} + +int ParseCreateElement(tinyxml2::XMLElement* element) { + + + const char* packName = element->Attribute("packname"); + + if (packName == NULL) { + printf("ERROR: No 'packname' attribute found in <create> element.\n"); + return(false); + } + + + int packFormat; + + { + + char* packType = (char*)element->Attribute("format"); + + if (packType == NULL) { + + packType = strdup("lzp"); + + } else { + + packType = strdup(packType); + lcase(packType); + + } + + if (strcmp("lzp", packType) == 0) { + packFormat = 0; + } else if (strcmp("qlp", packType) == 0) { + packFormat = 1; + } else if (strcmp("pck", packType) == 0) { + packFormat = 2; + } else { + + printf("ERROR: Unknown pack format: %s\n", packType); + free(packType); + return(false); + + } + + free(packType); + + } + + + printf("Creating %s in ", packName); + switch(packFormat) { + case 0: + + printf("LZP"); + break; + + case 1: + + printf("QLP"); + break; + + case 2: + + printf("PCK"); + break; + + } + printf(" format...\n"); + + + tinyxml2::XMLElement* fileElement = element->FirstChildElement("file"); + + if (fileElement == NULL) { + printf("ERROR: No file element(s) found.\n"); + return(false); + } + + + FileListClass fileList; + + while(1) { + + bool valid = true; + + int entryWindowSize = LZP_WINDOW_SIZE; + int entryHash1Size = LZP_HASH1_SIZE; + int entryHash2Size = LZP_HASH2_SIZE; + + if (fileElement->GetText() == NULL) { + printf("WARNING: <file> element not containing text found.\n"); + valid = false; + } + + + FILE* fp = fopen(fileElement->GetText(), "rb"); + if (!fp) { + printf("WARNING: File '%s' either does not exist or it cannot be opened.\n", fileElement->GetText()); + valid = false; + } + fclose(fp); + + + if (valid) { + fileList.AddFileEntry( + fileElement->GetText(), + fileElement->Attribute("alias"), + entryWindowSize, + entryHash1Size, + entryHash2Size + ); + } + + + fileElement = fileElement->NextSiblingElement(); + + if (fileElement == NULL) + break; + + } + + + if (fileList.EntryCount() == 0) { + printf("No file(s) to pack.\n"); + return(true); + } + + switch(packFormat) { + case 0: // Create LZP + CreateLZPfile(packName, &fileList); + break; + case 1: // Create QLP + CreateQLPfile(packName, &fileList); + break; + case 2: // Create PCK + CreatePCKfile(packName, &fileList); + break; + } + + + return(true); + +} + + +const char* TrimPathName(const char* path) { + + if ((strrchr(path, '\\') == NULL) && (strrchr(path, '/') == NULL)) { + + return(path); + + } else { + + if (strrchr(path, '\\') == NULL) + return(strrchr(path, '/')+1); + + return(strrchr(path, '\\')+1); + + } + +} + +char* lcase(char* str) { + + for(int i=0; str[i]!=0x00; i++) + str[i] = tolower(str[i]); + + return(str); + +} diff --git a/tools/lzpack/makefile b/tools/lzpack/makefile new file mode 100644 index 0000000..e11f5c7 --- /dev/null +++ b/tools/lzpack/makefile @@ -0,0 +1,46 @@ +TARGET := lzpack + +CPPFILES = main.cpp filelist.cpp +CFLAGS = -O2 +LDFLAGS = -s + +LIBS = -ltinyxml2 -llzp + +CC = gcc +CXX = g++ + +OFILES = $(addprefix build/,$(CPPFILES:.cpp=.o)) + +ifeq "$(OS)" "Windows_NT" + +# Config for Windows +INCLUDE = -I/c/tinyxml2 +LIBDIRS = -L/c/tinyxml2 +TARGET := $(TARGET).exe + +else + +# Config for anything else that isn't Linux + +endif + +INCLUDE += -I../../libpsn00b +LIBDIRS += -Llzp + +build/%.o: %.cpp + @mkdir -p $(dir $@) + $(CXX) $(CFLAGS) $(INCLUDE) -c $< -o $@ + +all: $(OFILES) + $(MAKE) -C lzp + $(CXX) $(CFLAGS) $(LDFLAGS) $(LIBDIRS) $(OFILES) $(LIBS) -o $(TARGET) + +install: + mkdir -p ../bin + cp $(TARGET) ../bin/$(TARGET) + +clean: + $(MAKE) -C lzp clean + rm -Rf build $(TARGET) + +cleanall: clean diff --git a/tools/makefile b/tools/makefile new file mode 100644 index 0000000..aec452c --- /dev/null +++ b/tools/makefile @@ -0,0 +1,12 @@ +TOPTARGETS = all install clean + +TOOLDIRS = lzpack smxlink util + +$(TOPTARGETS): $(TOOLDIRS) +$(TOOLDIRS): + $(MAKE) -C $@ $(MAKECMDGOALS) + +clean: $(LIBDIRS) + rm -Rf bin + +.PHONY: $(TOPTARGETS) $(TOOLDIRS) diff --git a/tools/plugin/io_export_smx_v3.py b/tools/plugin/io_export_smx_v3.py new file mode 100644 index 0000000..22c38b6 --- /dev/null +++ b/tools/plugin/io_export_smx_v3.py @@ -0,0 +1,320 @@ +# This plugin is part of Scarlet Engine (formerly Project Scarlet) +# +# It is still a work in progress and the SMX file specification may change +# in future versions. + +""" +This script exports Scarlet Game Engine SDK compatible SMX files. +Supports normals, colors and texture mapped triangles. +Only one object can be exported at a time. +""" + +import os +import bpy + +from bpy.props import (CollectionProperty, + StringProperty, + BoolProperty, + EnumProperty, + FloatProperty, + ) + +from bpy_extras.io_utils import (ImportHelper, + ExportHelper, + axis_conversion, + ) + +bl_info = { + "name": "Export: Project Scarlet SMX Raw Model", + "author": "Jobert 'Lameguy' Villamor (Lameguy64)", + "blender": (2,6,9), + "version": (3,1,2), + "location": "File > Export", + "description": "Export mesh to Project Scarlet SMX model format", + "category": "Import-Export" +} + +class ExportSMX(bpy.types.Operator, ExportHelper): + + bl_idname = "export_test.smx"; + bl_label = "Export SMX"; + + filename_ext = ".smx"; + filter_glob = StringProperty(default="*.smx", options={'HIDDEN'}) + + # Export options + exp_applyModifiers = BoolProperty( + name="Apply Modifiers", + description="Apply modifiers to the exported mesh", + default=True, + ) + + exp_writeNormals = BoolProperty( + name="Normals", + description="Export normals for smooth and hard shaded faces", + default=True, + ) + + #exp_vertexWeights = BoolProperty( + # name="Vertex Weights", + # description="Export vertex weights", + # default=False, + # ) + + #exp_vertexGroups = BoolProperty( + # name="Vertex Groups", + # description="Export vertex group information", + # default=False, + # ) + + #exp_doubleSided = BoolProperty( + # name="Double-sided", + # description="Sets the double-sided attribute to all exported polygons", + # default=False, + # ) + + #exp_subsurfMode = BoolProperty( + # name="Subsurf-Mode", + # description="Enable this if the mesh you're exporting uses a subsurf divide modifier, faster but often wasteful", + # default=False, + # ) + + #exp_blendMode = EnumProperty( + # name="Semi-trans:", + # description="Sets the semi-transparency attribute for all exported polygons", + # items=(('BN', "Off", ""), + # ('B0', "0: 50%B + 50%F", ""), + # ('B1', "1: 100%B + 100%F", ""), + # ('B2', "2: 100%B - 100%F", ""), + # ('B3', "3: 100%B + 25%F", ""), + # ), + # default='BN', + # ) + + #exp_scaleFactor = FloatProperty( + # name="Scale Factor", + # description="Scale factor of exported mesh", + # min=0.01, max=1000.0, + # default=1.0, + # ) + + def execute(self, context): + + print("Export execute...\n") + + obj = context.object + mesh = obj.to_mesh(context.scene, self.exp_applyModifiers, 'PREVIEW') + + if not mesh.tessfaces and mesh.polygons: + mesh.calc_tessface() + + filepath = self.filepath + filepath = bpy.path.ensure_ext(filepath, self.filename_ext) + + with open(filepath, "w") as f: + + # Write a banner + f.write("<!-- Created using Project Scarlet SMX Export Plug-in for Blender -->\n") + f.write("<!-- NOTE: If you plan to use this model as a static mesh, it is recommended that you run this file through smxopt -->\n") + f.write("<!-- or smxtool to clean up duplicate/unused normals which are kept for animation purposes. -->\n") + + f.write("<model version=\"1\">\n") + + # Write vertices + f.write("<vertices count=\"%d\">\n" % len(mesh.vertices)) + for v in mesh.vertices: + f.write("<v x=\"%f\" y=\"%f\" z=\"%f\"/>\n" % (v.co.x, -v.co.z, v.co.y)) + f.write("</vertices>\n") + + + # Scan if there are any flat primitives + has_flats = False + for i,p in enumerate(mesh.tessfaces): + if p.use_smooth is False: + has_flats = True + break + + # Export normals + if self.exp_writeNormals: + if has_flats: + f.write("<normals count=\"%d\">\n" % (len(mesh.vertices)+len(mesh.polygons))) + else: + f.write("<normals count=\"%d\">\n" % (len(mesh.vertices))) + f.write("<!-- Smooth normals begin here -->\n") + for v in mesh.vertices: + f.write("<v x=\"%f\" y=\"%f\" z=\"%f\"/>\n" % (v.normal.x, -v.normal.z, v.normal.y)) + if has_flats: + f.write("<!-- Flat normals begin here -->\n") + flatnorms_start = len(mesh.vertices) + for p in mesh.polygons: + f.write("<v x=\"%f\" y=\"%f\" z=\"%f\"/>\n" % (p.normal.x, -p.normal.z, p.normal.y)) + f.write("</normals>\n") + + + # Write texture files + mesh_uvs = mesh.tessface_uv_textures.active + + if mesh_uvs is not None: + mesh_uvs = mesh_uvs.data + + # Scan through all faces for assigned textures + if mesh_uvs is not None: + tex_table = [] + tex_files = [] + for uv in mesh_uvs: + if uv.image is not None: + addTex = True + texFileName = bpy.path.display_name_from_filepath(uv.image.filepath) + if len(tex_files)>0: + for c,t in enumerate(tex_files): + if t == texFileName: + tex_table.append(c+1) + addTex = False + break + if addTex: + print("TF:%s" % (texFileName)) + tex_files.append(texFileName) + tex_table.append(len(tex_files)) + else: + tex_table.append(0) + + # Write texture files + f.write("<textures count=\"%d\">\n" % len(tex_files)) + for n in tex_files: + f.write("<texture file=\"%s\"/>\n" % n) + f.write("</textures>\n") + else: + tex_table = None + tex_files = None + + + mesh_cols = mesh.tessface_vertex_colors.active + + if mesh_cols is not None: + mesh_cols = mesh_cols.data + + tri_indices = ( 0, 2, 1 ); + quad_indices = ( 3, 2, 0, 1 ); + + f.write("<primitives count=\"%d\">\n" % len(mesh.tessfaces)) + for i,p in enumerate(mesh.tessfaces): + + # Write vertex indices + f.write("<poly ") + if (len(p.vertices) == 3): + f.write("v0=\"%d\" " % (p.vertices[0])) + f.write("v1=\"%d\" " % (p.vertices[2])) + f.write("v2=\"%d\" " % (p.vertices[1])) + elif (len(p.vertices) == 4): + f.write("v0=\"%d\" " % (p.vertices[3])) + f.write("v1=\"%d\" " % (p.vertices[2])) + f.write("v2=\"%d\" " % (p.vertices[0])) + f.write("v3=\"%d\" " % (p.vertices[1])) + + # Write normal indices and shading mode + if self.exp_writeNormals: + if p.use_smooth: + if (len(p.vertices) == 3): + f.write("n0=\"%d\" " % (p.vertices[0])) + f.write("n1=\"%d\" " % (p.vertices[2])) + f.write("n2=\"%d\" " % (p.vertices[1])) + elif (len(p.vertices) == 4): + f.write("n0=\"%d\" " % (p.vertices[3])) + f.write("n1=\"%d\" " % (p.vertices[2])) + f.write("n2=\"%d\" " % (p.vertices[0])) + f.write("n3=\"%d\" " % (p.vertices[1])) + f.write("shading=\"S\" ") + else: + f.write("n0=\"%d\" " % (flatnorms_start+i)) + f.write("shading=\"F\" ") + + if tex_table is not None: + if (tex_table[i] > 0): + color_mul = 128.0 + else: + color_mul = 255.0 + else: + color_mul = 255.0 + + # Write out vertex colors if available + if mesh_cols is None: + f.write("r0=\"128\" g0=\"128\" b0=\"128\" ") + typecode = "F" + else: + col = mesh_cols[i] + col = col.color1[:], col.color2[:], col.color3[:], col.color4[:] + # Check if polygon is flat shaded + if (col[0] == col[1]) and (col[1] == col[2]) and (col[2] == col[0]): + # is flat... + color = col[0] + color = (int(color[0]*color_mul), + int(color[1]*color_mul), + int(color[2]*color_mul), + ) + f.write("r0=\"%d\" g0=\"%d\" b0=\"%d\" " % color[:]) + typecode = "F" + else: + # is gouraud... + for j,c in enumerate(p.vertices): + if (len(p.vertices) == 4): + color = col[quad_indices[j]] + else: + color = col[tri_indices[j]] + color = (int(color[0]*color_mul), + int(color[1]*color_mul), + int(color[2]*color_mul), + ) + f.write("r%d=\"%d\" g%d=\"%d\" b%d=\"%d\" " % + (j, color[0], j, color[1], j, color[2])) + typecode = "G" + + # Add texcoords + if tex_table is not None: + if (tex_table[i] > 0): + f.write("texture=\"%d\" " % (tex_table[i]-1)); + if (len(p.vertices) == 3): + uv = (mesh_uvs[i].uv1, + mesh_uvs[i].uv3, + mesh_uvs[i].uv2 + ) + elif (len(p.vertices) == 4): + uv = (mesh_uvs[i].uv4, + mesh_uvs[i].uv3, + mesh_uvs[i].uv1, + mesh_uvs[i].uv2 + ) + tex_w = mesh_uvs[i].image.size[0]-0.85#(1.0/mesh_uvs[i].image.size[0]) + tex_h = mesh_uvs[i].image.size[1]-0.85#(1.0-(1.0/mesh_uvs[i].image.size[1])) + for j,c in enumerate(uv): + f.write("tu%d=\"%d\" tv%d=\"%d\" " % + (j, round(tex_w*uv[j].x), j, round(tex_h-(tex_h*uv[j].y)))) + typecode += "T" + + typecode += "%d" % len(p.vertices) + f.write("type=\"%s\" " % typecode) + f.write("/>\n") + + f.write("</primitives>\n") + + f.write("</model>") + + f.close() + + return {'FINISHED'}; + +# For registering to Blender menus +def menu_func(self, context): + self.layout.operator(ExportSMX.bl_idname, text="Scarlet 3D SMX v3 (.smx)"); + +def register(): + bpy.utils.register_module(__name__); + bpy.types.INFO_MT_file_export.append(menu_func); + +def unregister(): + bpy.utils.unregister_module(__name__); + bpy.types.INFO_MT_file_export.remove(menu_func); + +if __name__ == "__main__": + register() + # Uncomment when testing this script + #bpy.ops.export_test.smx('INVOKE_DEFAULT')
\ No newline at end of file diff --git a/tools/smxlink/main.cpp b/tools/smxlink/main.cpp new file mode 100644 index 0000000..ec6f707 --- /dev/null +++ b/tools/smxlink/main.cpp @@ -0,0 +1,1003 @@ +/* This tool was originally developed for Scarlet Engine + * (formerly Project Scarlet) + * + * This utility is still a work in progress and the SMX and SMD specification + * is subject to change without notice. It is included as part of the + * PSn00bSDK project as an example utility for the n00bdemo example which + * uses SMD format model data files. + * + */ + +#include <stdio.h> +#include <math.h> +#include <tinyxml2.h> +#include <string> +//#include <windef.h> +#include "timreader.h" + +#define VERSION "0.25b" + +namespace param +{ + std::string smxFileName; + std::string smdFileName; + std::string texDir; + + float scaleFactor = 1.f; +} + +typedef struct { + char id[3]; // File ID (SMD) + unsigned char version; // Version number (0x01) + unsigned short flags; + unsigned short numverts; + unsigned short numnorms; + unsigned short numprims; + unsigned long vtxAddr; + unsigned long nrmAddr; + unsigned long priAddr; +} SMD_HEADER; + +typedef struct { + short vx,vy,vz,vp; +} SVECTOR; + + +#define PRIM_TYPE_LINE 0 +#define PRIM_TYPE_TRI 1 +#define PRIM_TYPE_QUAD 2 + +#define PRIM_LIGHTING_NONE 0 // No shading (no normals) +#define PRIM_LIGHTING_FLAT 1 // Flat shading (1 normal) +#define PRIM_LIGHTING_SMOOTH 2 // Smooth shading (3 normals per vertex) + +typedef struct { + + unsigned char type:2; // Primitive type + unsigned char l_type:2; // Lighting type (0 - none, 1 - flat shading, 2 - smooth shading) + unsigned char c_type:1; // Coloring type (0 - solid color, 1 - gouraud) + unsigned char texture:1; // Texture mapped + unsigned char blend:2; // Blend mode setting (actual blend enable is determined by primitive code) + // byte boundary + unsigned char zoff:4; + unsigned char nocull:1; // Double sided (no cull) + unsigned char mask:1; // Force mask bit setting + unsigned char texwin:2; + // byte boundary + unsigned char texoff:2; + unsigned char reserved:6; + // byte boundary + unsigned char len; +} PRIM_ID; + +typedef struct { + unsigned short v0,v1,v2,v3; +} PRIM_V; + +typedef struct { + unsigned char r,g,b,c; +} PRIM_RGBC; + +typedef struct { + unsigned short tpage,clut; +} PRIM_TC; + +typedef struct { + unsigned char u,v; +} PRIM_UV; + + +int main(int argc, const char* argv[]) { + + printf("SMXLINK " VERSION " - Scarlet SMX to SMD Model Converter " + "(part of Scarlet Engine)\n"); + printf("Note: Outputs in *NEW* revision 1 format!\n"); + printf("2017-2019 Meido-Tek Productions\n\n"); + + if (argc <= 1) { + + printf("Parameters:\n"); + printf(" smxlink [-o <filename>] [-s <scale>] <smxfile>\n\n"); + printf(" -o <filename> - Specify output filename (default: first file specified)\n"); + printf(" -s <scale> - Scale factor to apply to model on conversion (default: 1.0)\n"); + printf(" -tp <path> - Specify directory path to TIM texture files\n"); + printf(" <smxfile> - SMX file to convert to SMD\n"); + + return EXIT_SUCCESS; + + } + + for(int i=1; i<argc; i++) { + + if (strcasecmp(argv[i], "-o") == 0) { + + i++; + param::smdFileName = argv[i]; + + } else if (strcasecmp(argv[i], "-s") == 0) { + + i++; + param::scaleFactor = atof(argv[i]); + + } else if (strcasecmp(argv[i], "-tp") == 0) { + + i++; + param::texDir = argv[i]; + + if( ( param::texDir[param::texDir.size()-1] != '\\' ) && + ( param::texDir[param::texDir.size()-1] != '/') ) { + + param::texDir += "/"; + + } + + } else { + + param::smxFileName = argv[i]; + + } + + } + + if (param::smdFileName.empty()) { + + param::smdFileName = param::smxFileName; + param::smdFileName.erase(param::smdFileName.rfind(".")); + param::smdFileName += ".smd"; + + } + + printf("Input : %s\n", param::smxFileName.c_str()); + printf("Output : %s\n", param::smdFileName.c_str()); + + if (!param::texDir.empty()) + printf("TexDir : %s\n", param::texDir.c_str()); + + printf("\n"); + + tinyxml2::XMLDocument smxFile; + + if (smxFile.LoadFile(param::smxFileName.c_str()) != tinyxml2::XML_SUCCESS) { + printf("ERROR: Unable to load SMX file:\n"); + smxFile.PrintError(); + return EXIT_FAILURE; + } + + tinyxml2::XMLElement* smxModel = smxFile.FirstChildElement("model"); + + // Parse textures + TIM_COORDS *texCoords = NULL; + int numTextures = 0; + + if (smxModel->FirstChildElement("textures") != NULL) { + + tinyxml2::XMLElement *texFileElement = smxModel->FirstChildElement("textures"); + + if (texFileElement != NULL) { + + numTextures = atoi(texFileElement->Attribute("count")); + texFileElement = texFileElement->FirstChildElement("texture"); + + texCoords = (TIM_COORDS*)malloc(sizeof(TIM_COORDS)*numTextures); + + int index = 0; + + while(texFileElement != NULL) { + + std::string timFileName = texFileElement->Attribute("file"); + + if (timFileName.rfind(".") == std::string::npos) + { + timFileName.append(".tim"); + } + + timFileName = param::texDir + timFileName; + + if (!GetTimCoords(timFileName.c_str(), &texCoords[index])) { + printf("ERROR: Unable to open texture file: %s\n", timFileName.c_str()); + free(texCoords); + return EXIT_FAILURE; + } + + switch(texCoords[index].flag.pmode) { + case 0: // 4-bit + texCoords[index].pixdata.pw *= 4; + break; + case 1: // 8-bit + texCoords[index].pixdata.pw *= 2; + break; + } + + texFileElement = texFileElement->NextSiblingElement("texture"); + index++; + + } + + } + + } + + + FILE* smdFile = fopen(param::smdFileName.c_str(), "wb"); + + // Create temporary header + SMD_HEADER smdHeader; + + memset(&smdHeader, 0x00, sizeof(SMD_HEADER)); + fwrite(&smdHeader, sizeof(SMD_HEADER), 1, smdFile); + + + // Convert vertices + if (smxModel->FirstChildElement("vertices") != NULL) { + + smdHeader.vtxAddr = ftell(smdFile); + + tinyxml2::XMLElement* smxVertices = smxModel->FirstChildElement("vertices"); + smxVertices = smxVertices->FirstChildElement("v"); + + while(smxVertices != NULL) { + + SVECTOR vertex; + + vertex.vx = round(param::scaleFactor * atof(smxVertices->Attribute("x"))); + vertex.vy = round(param::scaleFactor * atof(smxVertices->Attribute("y"))); + vertex.vz = round(param::scaleFactor * atof(smxVertices->Attribute("z"))); + vertex.vp = 0; + + fwrite(&vertex, sizeof(SVECTOR), 1, smdFile); + smdHeader.numverts++; + + smxVertices = smxVertices->NextSiblingElement("v"); + + } + + smdHeader.flags |= 0x1; + + } + + + // Convert normals + if (smxModel->FirstChildElement("normals") != NULL) { + + smdHeader.nrmAddr = ftell(smdFile); + + tinyxml2::XMLElement* smxVertices = smxModel->FirstChildElement("normals"); + + smxVertices = smxVertices->FirstChildElement("v"); + + while(smxVertices != NULL) { + + SVECTOR vertex; + + vertex.vx = round(4096 * atof(smxVertices->Attribute("x"))); + vertex.vy = round(4096 * atof(smxVertices->Attribute("y"))); + vertex.vz = round(4096 * atof(smxVertices->Attribute("z"))); + vertex.vp = 0; + + fwrite(&vertex, sizeof(SVECTOR), 1, smdFile); + smdHeader.numnorms++; + + smxVertices = smxVertices->NextSiblingElement("v"); + + } + + smdHeader.flags |= 0x2; + + } else { + + smdHeader.numnorms = 0; + + } + + + if (smxModel->FirstChildElement("primitives") != NULL) { + + smdHeader.priAddr = ftell(smdFile); + + tinyxml2::XMLElement* smxPrimitive = smxModel->FirstChildElement("primitives"); + smxPrimitive = smxPrimitive->FirstChildElement("poly"); + + PRIM_ID *prim; + char pribuff[40]; + char* priptr; + while(smxPrimitive != NULL) { + + const char* primType = smxPrimitive->Attribute("type"); + + if( primType == NULL ) { + smxPrimitive = smxPrimitive->NextSiblingElement("poly"); + continue; + } + + memset( pribuff, 0x0, 32 ); + priptr = pribuff; + + prim = (PRIM_ID*)priptr; + + if( smxPrimitive->IntAttribute( "double", 0 ) ) + prim->nocull = true; + + if( ( strcasecmp( "F3", primType ) == 0 ) || + ( strcasecmp( "FT3", primType ) == 0 ) ) { + + prim->type = PRIM_TYPE_TRI; + prim->len = 4; + + priptr += sizeof(PRIM_ID); + + // Write vertex indices + ((PRIM_V*)priptr)->v0 = atoi( smxPrimitive->Attribute( "v0" ) ); + ((PRIM_V*)priptr)->v1 = atoi( smxPrimitive->Attribute( "v1" ) ); + ((PRIM_V*)priptr)->v2 = atoi( smxPrimitive->Attribute( "v2" ) ); + ((PRIM_V*)priptr)->v3 = 0; + + priptr += 8; + prim->len += 8; + + if( strcasecmp( "F", smxPrimitive->Attribute( "shading" ) ) == 0 ) { + + prim->l_type = PRIM_LIGHTING_FLAT; + + ((PRIM_V*)priptr)->v0 = atoi( smxPrimitive->Attribute( "n0" ) ); + ((PRIM_V*)priptr)->v1 = 0; + priptr += 4; + prim->len += 4; + + } else if( strcasecmp( "S", smxPrimitive->Attribute( "shading" ) ) == 0 ) { + + prim->l_type = PRIM_LIGHTING_SMOOTH; + + ((PRIM_V*)priptr)->v0 = atoi( smxPrimitive->Attribute( "n0" ) ); + ((PRIM_V*)priptr)->v1 = atoi( smxPrimitive->Attribute( "n1" ) ); + ((PRIM_V*)priptr)->v2 = atoi( smxPrimitive->Attribute( "n2" ) ); + ((PRIM_V*)priptr)->v3 = 0; + + priptr += 8; + prim->len += 8; + + } + + ((PRIM_RGBC*)priptr)->r = atoi( smxPrimitive->Attribute( "r0" ) ); + ((PRIM_RGBC*)priptr)->g = atoi( smxPrimitive->Attribute( "g0" ) ); + ((PRIM_RGBC*)priptr)->b = atoi( smxPrimitive->Attribute( "b0" ) ); + + if( smxPrimitive->IntAttribute( "blend" ) > 0 ) { + ((PRIM_RGBC*)priptr)->c = 0x2; + prim->blend = smxPrimitive->IntAttribute( "blend" )-1; + } + + priptr += 4; + prim->len += 4; + + if( strcasecmp( "FT3", primType ) == 0 ) { // Textured + + TIM_COORDS *tex; + int uoffs,voffs; + int texNum = atoi( smxPrimitive->Attribute( "texture" ) ); + + if( texNum < 0 ) { + + printf( "ERROR: Primitive with negative texture index encountered.\n" ); + + fclose( smdFile ); + + if( texCoords != NULL ) { + free( texCoords ); + } + + return EXIT_FAILURE; + + } else if( texNum > numTextures-1 ) { + + printf( "ERROR: Primitive with texture index greater than specified encountered.\n" ); + + fclose( smdFile ); + + if( texCoords != NULL ) { + free( texCoords ); + } + + return EXIT_FAILURE; + + } + + tex = &texCoords[texNum]; + + uoffs = tex->pixdata.px; + voffs = tex->pixdata.py&0xff; + + switch(tex->flag.pmode) { + case 0: // 4-bit + uoffs = (uoffs*4)%256; + break; + case 1: // 8-bit + uoffs = (uoffs*2)%128; + break; + case 2: // 16-bit + uoffs = uoffs%64; + break; + } + + ((PRIM_UV*)priptr)[0].u = smxPrimitive->IntAttribute( "tu0" )+uoffs; + ((PRIM_UV*)priptr)[0].v = smxPrimitive->IntAttribute( "tv0" )+voffs; + ((PRIM_UV*)priptr)[1].u = smxPrimitive->IntAttribute( "tu1" )+uoffs; + ((PRIM_UV*)priptr)[1].v = smxPrimitive->IntAttribute( "tv1" )+voffs; + ((PRIM_UV*)priptr)[2].u = smxPrimitive->IntAttribute( "tu2" )+uoffs; + ((PRIM_UV*)priptr)[2].v = smxPrimitive->IntAttribute( "tv2" )+voffs; + ((PRIM_UV*)priptr)[3].u = 0; + ((PRIM_UV*)priptr)[3].v = 0; + + priptr += 8; + prim->len += 8; + + ((PRIM_TC*)priptr)->tpage = GetTPage( tex->flag.pmode, + prim->blend, tex->pixdata.px, tex->pixdata.py ); + ((PRIM_TC*)priptr)->clut = GetClut( tex->clutdata.px, tex->clutdata.py ); + + priptr += 4; + prim->len += 4; + + prim->texture = true; + + } + + fwrite( pribuff, 1, prim->len, smdFile ); + smdHeader.numprims++; + + } else if( strcasecmp( "G3", primType ) == 0 ) { + + prim->type = PRIM_TYPE_TRI; + prim->len = 4; + prim->c_type = 1; // Gouraud + + priptr += sizeof(PRIM_ID); + + // Write vertex indices + ((PRIM_V*)priptr)->v0 = atoi( smxPrimitive->Attribute( "v0" ) ); + ((PRIM_V*)priptr)->v1 = atoi( smxPrimitive->Attribute( "v1" ) ); + ((PRIM_V*)priptr)->v2 = atoi( smxPrimitive->Attribute( "v2" ) ); + ((PRIM_V*)priptr)->v3 = 0; + + priptr += 8; + prim->len += 8; + + if( strcasecmp( "F", smxPrimitive->Attribute( "shading" ) ) == 0 ) { + + prim->l_type = PRIM_LIGHTING_FLAT; + + ((PRIM_V*)priptr)->v0 = atoi( smxPrimitive->Attribute( "n0" ) ); + ((PRIM_V*)priptr)->v1 = 0; + priptr += 4; + prim->len += 4; + + } else if( strcasecmp( "S", smxPrimitive->Attribute( "shading" ) ) == 0 ) { + + prim->l_type = PRIM_LIGHTING_SMOOTH; + + ((PRIM_V*)priptr)->v0 = atoi( smxPrimitive->Attribute( "n0" ) ); + ((PRIM_V*)priptr)->v1 = atoi( smxPrimitive->Attribute( "n1" ) ); + ((PRIM_V*)priptr)->v2 = atoi( smxPrimitive->Attribute( "n2" ) ); + ((PRIM_V*)priptr)->v3 = 0; + + priptr += 8; + prim->len += 8; + + } + + ((PRIM_RGBC*)priptr)->r = atoi( smxPrimitive->Attribute( "r0" ) ); + ((PRIM_RGBC*)priptr)->g = atoi( smxPrimitive->Attribute( "g0" ) ); + ((PRIM_RGBC*)priptr)->b = atoi( smxPrimitive->Attribute( "b0" ) ); + if( smxPrimitive->IntAttribute( "blend" ) > 0 ) { + ((PRIM_RGBC*)priptr)->c = 0x2; + prim->blend = smxPrimitive->IntAttribute( "blend" )-1; + } + priptr += 4; + prim->len += 4; + + // Color 1 + ((PRIM_RGBC*)priptr)->r = atoi( smxPrimitive->Attribute( "r1" ) ); + ((PRIM_RGBC*)priptr)->g = atoi( smxPrimitive->Attribute( "g1" ) ); + ((PRIM_RGBC*)priptr)->b = atoi( smxPrimitive->Attribute( "b1" ) ); + priptr += 4; + prim->len += 4; + + // Color 2 + ((PRIM_RGBC*)priptr)->r = atoi( smxPrimitive->Attribute( "r2" ) ); + ((PRIM_RGBC*)priptr)->g = atoi( smxPrimitive->Attribute( "g2" ) ); + ((PRIM_RGBC*)priptr)->b = atoi( smxPrimitive->Attribute( "b2" ) ); + priptr += 4; + prim->len += 4; + + fwrite( pribuff, 1, prim->len, smdFile ); + smdHeader.numprims++; + + } else if( ( strcasecmp( "F4", primType ) == 0 ) || + ( strcasecmp( "FT4", primType ) == 0 ) ) { + + prim->type = PRIM_TYPE_QUAD; + prim->len = 4; + + priptr += sizeof(PRIM_ID); + + // Write vertex indices + ((PRIM_V*)priptr)->v0 = atoi( smxPrimitive->Attribute( "v0" ) ); + ((PRIM_V*)priptr)->v1 = atoi( smxPrimitive->Attribute( "v1" ) ); + ((PRIM_V*)priptr)->v2 = atoi( smxPrimitive->Attribute( "v2" ) ); + ((PRIM_V*)priptr)->v3 = atoi( smxPrimitive->Attribute( "v3" ) ); + + priptr += 8; + prim->len += 8; + + if( strcasecmp( "F", smxPrimitive->Attribute( "shading" ) ) == 0 ) { + + prim->l_type = PRIM_LIGHTING_FLAT; + + ((PRIM_V*)priptr)->v0 = atoi( smxPrimitive->Attribute( "n0" ) ); + ((PRIM_V*)priptr)->v1 = 0; + priptr += 4; + prim->len += 4; + + } else if( strcasecmp( "S", smxPrimitive->Attribute( "shading" ) ) == 0 ) { + + prim->l_type = PRIM_LIGHTING_SMOOTH; + + ((PRIM_V*)priptr)->v0 = atoi( smxPrimitive->Attribute( "n0" ) ); + ((PRIM_V*)priptr)->v1 = atoi( smxPrimitive->Attribute( "n1" ) ); + ((PRIM_V*)priptr)->v2 = atoi( smxPrimitive->Attribute( "n2" ) ); + ((PRIM_V*)priptr)->v3 = atoi( smxPrimitive->Attribute( "n3" ) ); + + priptr += 8; + prim->len += 8; + + } + + ((PRIM_RGBC*)priptr)->r = atoi( smxPrimitive->Attribute( "r0" ) ); + ((PRIM_RGBC*)priptr)->g = atoi( smxPrimitive->Attribute( "g0" ) ); + ((PRIM_RGBC*)priptr)->b = atoi( smxPrimitive->Attribute( "b0" ) ); + + if( smxPrimitive->IntAttribute( "blend" ) > 0 ) { + ((PRIM_RGBC*)priptr)->c = 0x2; + prim->blend = smxPrimitive->IntAttribute( "blend" )-1; + } + + priptr += 4; + prim->len += 4; + + if( strcasecmp( "FT4", primType ) == 0 ) { // Textured + + TIM_COORDS *tex; + int uoffs,voffs; + int texNum = atoi( smxPrimitive->Attribute( "texture" ) ); + + if( texNum < 0 ) { + + printf( "ERROR: Primitive with negative texture index encountered.\n" ); + + fclose( smdFile ); + + if( texCoords != NULL ) { + free( texCoords ); + } + + return EXIT_FAILURE; + + } else if( texNum > numTextures-1 ) { + + printf( "ERROR: Primitive with texture index greater than specified encountered.\n" ); + + fclose( smdFile ); + + if( texCoords != NULL ) { + free( texCoords ); + } + + return EXIT_FAILURE; + + } + + tex = &texCoords[texNum]; + + uoffs = tex->pixdata.px; + voffs = tex->pixdata.py&0xff; + + switch(tex->flag.pmode) { + case 0: // 4-bit + uoffs = (uoffs*4)%256; + break; + case 1: // 8-bit + uoffs = (uoffs*2)%128; + break; + case 2: // 16-bit + uoffs = uoffs%64; + break; + } + + ((PRIM_UV*)priptr)[0].u = smxPrimitive->IntAttribute( "tu0" )+uoffs; + ((PRIM_UV*)priptr)[0].v = smxPrimitive->IntAttribute( "tv0" )+voffs; + ((PRIM_UV*)priptr)[1].u = smxPrimitive->IntAttribute( "tu1" )+uoffs; + ((PRIM_UV*)priptr)[1].v = smxPrimitive->IntAttribute( "tv1" )+voffs; + ((PRIM_UV*)priptr)[2].u = smxPrimitive->IntAttribute( "tu2" )+uoffs; + ((PRIM_UV*)priptr)[2].v = smxPrimitive->IntAttribute( "tv2" )+voffs; + ((PRIM_UV*)priptr)[3].u = smxPrimitive->IntAttribute( "tu3" )+uoffs; + ((PRIM_UV*)priptr)[3].v = smxPrimitive->IntAttribute( "tv3" )+voffs; + + priptr += 8; + prim->len += 8; + + ((PRIM_TC*)priptr)->tpage = GetTPage( tex->flag.pmode, + prim->blend, tex->pixdata.px, tex->pixdata.py ); + ((PRIM_TC*)priptr)->clut = GetClut( tex->clutdata.px, tex->clutdata.py ); + + priptr += 4; + prim->len += 4; + + prim->texture = true; + + } + + fwrite( pribuff, 1, prim->len, smdFile ); + smdHeader.numprims++; + + } else if( strcasecmp( "G4", primType ) == 0 ) { + + prim->type = PRIM_TYPE_QUAD; + prim->len = 4; + prim->c_type = 1; // Gouraud + + priptr += sizeof(PRIM_ID); + + // Write vertex indices + ((PRIM_V*)priptr)->v0 = atoi( smxPrimitive->Attribute( "v0" ) ); + ((PRIM_V*)priptr)->v1 = atoi( smxPrimitive->Attribute( "v1" ) ); + ((PRIM_V*)priptr)->v2 = atoi( smxPrimitive->Attribute( "v2" ) ); + ((PRIM_V*)priptr)->v3 = atoi( smxPrimitive->Attribute( "v3" ) ); + + priptr += 8; + prim->len += 8; + + if( strcasecmp( "F", smxPrimitive->Attribute( "shading" ) ) == 0 ) { + + prim->l_type = PRIM_LIGHTING_FLAT; + + ((PRIM_V*)priptr)->v0 = atoi( smxPrimitive->Attribute( "n0" ) ); + ((PRIM_V*)priptr)->v1 = 0; + priptr += 4; + prim->len += 4; + + } else if( strcasecmp( "S", smxPrimitive->Attribute( "shading" ) ) == 0 ) { + + prim->l_type = PRIM_LIGHTING_SMOOTH; + + ((PRIM_V*)priptr)->v0 = atoi( smxPrimitive->Attribute( "n0" ) ); + ((PRIM_V*)priptr)->v1 = atoi( smxPrimitive->Attribute( "n1" ) ); + ((PRIM_V*)priptr)->v2 = atoi( smxPrimitive->Attribute( "n2" ) ); + ((PRIM_V*)priptr)->v3 = atoi( smxPrimitive->Attribute( "n3" ) ); + + priptr += 8; + prim->len += 8; + + } + + // Color 0 + ((PRIM_RGBC*)priptr)->r = atoi( smxPrimitive->Attribute( "r0" ) ); + ((PRIM_RGBC*)priptr)->g = atoi( smxPrimitive->Attribute( "g0" ) ); + ((PRIM_RGBC*)priptr)->b = atoi( smxPrimitive->Attribute( "b0" ) ); + + if( smxPrimitive->IntAttribute( "blend" ) > 0 ) { + ((PRIM_RGBC*)priptr)->c = 0x2; + prim->blend = smxPrimitive->IntAttribute( "blend" )-1; + } + + priptr += 4; + prim->len += 4; + + // Color 1 + ((PRIM_RGBC*)priptr)->r = atoi( smxPrimitive->Attribute( "r1" ) ); + ((PRIM_RGBC*)priptr)->g = atoi( smxPrimitive->Attribute( "g1" ) ); + ((PRIM_RGBC*)priptr)->b = atoi( smxPrimitive->Attribute( "b1" ) ); + ((PRIM_RGBC*)priptr)->c = 0; + priptr += 4; + prim->len += 4; + + // Color 2 + ((PRIM_RGBC*)priptr)->r = atoi( smxPrimitive->Attribute( "r2" ) ); + ((PRIM_RGBC*)priptr)->g = atoi( smxPrimitive->Attribute( "g2" ) ); + ((PRIM_RGBC*)priptr)->b = atoi( smxPrimitive->Attribute( "b2" ) ); + ((PRIM_RGBC*)priptr)->c = 0; + priptr += 4; + prim->len += 4; + + // Color 3 + ((PRIM_RGBC*)priptr)->r = atoi( smxPrimitive->Attribute( "r3" ) ); + ((PRIM_RGBC*)priptr)->g = atoi( smxPrimitive->Attribute( "g3" ) ); + ((PRIM_RGBC*)priptr)->b = atoi( smxPrimitive->Attribute( "b3" ) ); + ((PRIM_RGBC*)priptr)->c = 0; + priptr += 4; + prim->len += 4; + + fwrite( pribuff, 1, prim->len, smdFile ); + smdHeader.numprims++; + + } else { + + printf( "ERROR: Unknown or unsupported primitive type: %s\n", + primType ); + + fclose( smdFile ); + + if( texCoords != NULL ) { + free( texCoords ); + } + + return EXIT_FAILURE; + + } + + smxPrimitive = smxPrimitive->NextSiblingElement("poly"); + + } + + { + int term = 0; + fwrite( &term, 1, 4, smdFile ); + } + + /* + while(smxPrimitive != NULL) { + + bool polyBlended = false; + const char* primType = smxPrimitive->Attribute("type"); + + memset(&prim, 0x00, sizeof(PRIM_ID)); + + if (strcasecmp("F", smxPrimitive->Attribute("shading")) == 0) { + + prim.lighting = PRIM_LIGHTING_FLAT; + + } else if (strcasecmp("S", smxPrimitive->Attribute("shading")) == 0) { + + prim.lighting = PRIM_LIGHTING_SMOOTH; + + } + + // 3-point polygons + if ((strcasecmp("F3", primType) == 0) || + (strcasecmp("G3", primType) == 0) || + (strcasecmp("FT3", primType) == 0) || + (strcasecmp("GT3", primType) == 0)) { + + if (strcasecmp("F3", primType) == 0) { + + prim.type = PRIM_TYPE_TRI; + prim.len = 20; + + } else if (strcasecmp("G3", primType) == 0) { + + prim.type = PRIM_TYPE_TRI; + prim.gouraud = true; + prim.len = 28; + + } else if (strcasecmp("FT3", primType) == 0) { + + prim.type = PRIM_TYPE_TRI; + prim.textured = true; + prim.len = 32; + + } else if (strcasecmp("GT3", primType) == 0) { + + prim.type = PRIM_TYPE_TRI; + prim.gouraud = true; + prim.textured = true; + prim.len = 42; + + } + + if ( smxPrimitive->IntAttribute("blendmode") > 0 ) { + + polyBlended = true; + prim.blendmode = smxPrimitive->IntAttribute("blendmode")-1; + + } + + if ( smxPrimitive->IntAttribute("doublesided") ) { + + prim.noculling = true; + + } + + PRIM_V3 vert; + + vert.v0 = atoi(smxPrimitive->Attribute("v0")); + vert.v1 = atoi(smxPrimitive->Attribute("v1")); + vert.v2 = atoi(smxPrimitive->Attribute("v2")); + + if ((vert.v0 < 0) || (vert.v1 < 0) || (vert.v2 < 0)) { + + printf("ERROR: Primitive with negative vertex index encountered.\n"); + + fclose(smdFile); + + if (texCoords != NULL) + free(texCoords); + + return EXIT_FAILURE; + + } + + PRIM_V3 norm = { 0 }; + + if (prim.lighting == PRIM_LIGHTING_FLAT) { + + norm.v0 = atoi(smxPrimitive->Attribute("n0")); + prim.len += 4; + + } else if (prim.lighting == PRIM_LIGHTING_SMOOTH) { + + norm.v0 = atoi(smxPrimitive->Attribute("n0")); + norm.v1 = atoi(smxPrimitive->Attribute("n1")); + norm.v2 = atoi(smxPrimitive->Attribute("n2")); + prim.len += 12; + + } + + if ((norm.v0 < 0) || (norm.v1 < 0) || (norm.v2 < 0)) { + + printf("ERROR: Primitive with negative normal index encountered.\n"); + + fclose(smdFile); + + if (texCoords != NULL) + free(texCoords); + + return EXIT_FAILURE; + + } + + fwrite(&prim, sizeof(PRIM_ID), 1, smdFile); + fwrite(&vert, sizeof(PRIM_V3), 1, smdFile); + + if (prim.lighting == PRIM_LIGHTING_FLAT) { + fwrite(&norm, 4, 1, smdFile); + } else if (prim.lighting == PRIM_LIGHTING_SMOOTH) { + fwrite(&norm, sizeof(PRIM_V3), 1, smdFile); + } + + PRIM_RGBC col; + + col.r = atoi(smxPrimitive->Attribute("r0")); + col.g = atoi(smxPrimitive->Attribute("g0")); + col.b = atoi(smxPrimitive->Attribute("b0")); + col.c = 0x00; + + if (polyBlended) { + col.c |= 0x2; + } + + fwrite(&col, sizeof(PRIM_RGBC), 1, smdFile); + + if ((strcasecmp("G3", primType) == 0) || + (strcasecmp("GT3", primType) == 0)) { + + col.r = atoi(smxPrimitive->Attribute("r1")); + col.g = atoi(smxPrimitive->Attribute("g1")); + col.b = atoi(smxPrimitive->Attribute("b1")); + col.c = 0x00; + + fwrite(&col, sizeof(PRIM_RGBC), 1, smdFile); + + col.r = atoi(smxPrimitive->Attribute("r2")); + col.g = atoi(smxPrimitive->Attribute("g2")); + col.b = atoi(smxPrimitive->Attribute("b2")); + col.c = 0x00; + + fwrite(&col, sizeof(PRIM_RGBC), 1, smdFile); + + } + + if ((strcasecmp("FT3", primType) == 0) || (strcasecmp("GT3", primType) == 0)) { + + PRIM_TC tc; + PRIM_UV uvcd; + + int texNum = atoi(smxPrimitive->Attribute("texture")); + + if (texNum < 0) { + + printf("ERROR: Primitive with negative texture index encountered.\n"); + + fclose(smdFile); + + if (texCoords != NULL) + free(texCoords); + + return EXIT_FAILURE; + + } else if (texNum > numTextures-1) { + + printf("ERROR: Primitive with texture index greater than specified encountered.\n"); + + fclose(smdFile); + + if (texCoords != NULL) + free(texCoords); + + return EXIT_FAILURE; + + } + + TIM_COORDS *tex = &texCoords[texNum]; + + int uoffs = tex->pixdata.px; + int voffs = tex->pixdata.py&0xff; + + switch(tex->flag.pmode) { + case 0: // 4-bit + uoffs = (uoffs*4)%256; + break; + case 1: // 8-bit + uoffs = (uoffs*2)%128; + break; + case 2: // 16-bit + uoffs = uoffs%64; + break; + } + + // TPAGE and CLUT + tc.tpage = GetTPage( tex->flag.pmode, prim.blendmode, + tex->pixdata.px, tex->pixdata.py ); + tc.clut = GetClut( tex->clutdata.px, tex->clutdata.py ); + fwrite(&tc, sizeof(PRIM_TC), 1, smdFile); + + // Texcoords + uvcd.u = smxPrimitive->IntAttribute("tu0")+uoffs; + uvcd.v = smxPrimitive->IntAttribute("tv0")+voffs; + fwrite(&uvcd, sizeof(PRIM_UV), 1, smdFile); + + uvcd.u = smxPrimitive->IntAttribute("tu1")+uoffs; + uvcd.v = smxPrimitive->IntAttribute("tv1")+voffs; + fwrite(&uvcd, sizeof(PRIM_UV), 1, smdFile); + + uvcd.u = smxPrimitive->IntAttribute("tu2")+uoffs; + uvcd.v = smxPrimitive->IntAttribute("tv2")+voffs; + fwrite(&uvcd, sizeof(PRIM_UV), 1, smdFile); + + // Padding + uvcd.u = uvcd.v = 0; + fwrite(&uvcd, sizeof(PRIM_UV), 1, smdFile); + + } + + } else { + + printf("Unsupported primitive %s, ignoring...\n", primType); + + } + + smxPrimitive = smxPrimitive->NextSiblingElement("poly"); + + } + + // Write terminator + memset(&prim, 0x00, sizeof(PRIM_ID)); + fwrite(&prim, sizeof(PRIM_ID), 1, smdFile); + */ + + } + + + strcpy(smdHeader.id, "SMD"); + smdHeader.version = 1; + + fseek(smdFile, 0, SEEK_SET); + fwrite(&smdHeader, sizeof(SMD_HEADER), 1, smdFile); + + fclose(smdFile); + + if (texCoords != NULL) + free(texCoords); + + printf("Converted successfully.\n"); + + return EXIT_SUCCESS; + +} diff --git a/tools/smxlink/makefile b/tools/smxlink/makefile new file mode 100644 index 0000000..b50fd26 --- /dev/null +++ b/tools/smxlink/makefile @@ -0,0 +1,42 @@ +TARGET := smxlink + +CPPFILES = main.cpp timreader.cpp +CFLAGS = -O2 +LDFLAGS = -s + +LIBS = -ltinyxml2 + +CC = gcc +CXX = g++ + +OFILES = $(addprefix build/,$(CPPFILES:.cpp=.o)) + +ifeq "$(OS)" "Windows_NT" + +# Config for Windows +INCLUDE = -I/c/tinyxml2 +LIBDIRS = -L/c/tinyxml2 +TARGET := $(TARGET).exe + +else + +# Config for anything else that isn't Windows +EXE_SUFFIX = + +endif + +build/%.o: %.cpp + @mkdir -p $(dir $@) + $(CXX) $(CFLAGS) $(INCLUDE) -c $< -o $@ + +all: $(OFILES) + $(CXX) $(CFLAGS) $(LDFLAGS) $(LIBDIRS) $(OFILES) $(LIBS) -o $(TARGET) + +install: + mkdir -p ../bin + cp $(TARGET) ../bin/$(TARGET) + +clean: + rm -Rf build $(TARGET) + +cleanall: clean diff --git a/tools/smxlink/timreader.cpp b/tools/smxlink/timreader.cpp new file mode 100644 index 0000000..a8fba94 --- /dev/null +++ b/tools/smxlink/timreader.cpp @@ -0,0 +1,65 @@ +#include <stdio.h> +#include <string.h> +#include "timreader.h" + +int GetTimCoords(const char* fileName, TIM_COORDS *coords) { + + FILE* fp = fopen(fileName, "rb"); + + if (fp == NULL) + return false; + + + unsigned int id; + + fread(&id, 4, 1, fp); + + if (id != 0x00000010) { + + fclose(fp); + return false; + + } + + fread(&coords->flag, 4, 1, fp); + + if (coords->flag.cf) { + + fread(&coords->clutdata, 12, 1, fp); + fseek(fp, coords->clutdata.length-12, SEEK_CUR); + + } else { + + memset(&coords->clutdata, 0x00, 12); + + } + + fread(&coords->pixdata, 12, 1, fp); + + fclose(fp); + + return true; + +} + +unsigned short GetClut(int cx, int cy) { + + unsigned short clut = (cx/16)&0x3f; + clut |= (cy&0x1ff)<<6; + + return clut; + +} + +unsigned short GetTPage(int tp, int abr, int x, int y) { + + unsigned short tpage = (x/64)&0xf; // Set X + tpage |= ((y/256)&0x1)<<4; // Set Y + + tpage |= (abr&0x3)<<5; // Set blend mode + tpage |= (tp&0x3)<<7; // Set page mode + tpage |= 1<<9; // Set dither processing bit + + return tpage; + +} diff --git a/tools/smxlink/timreader.h b/tools/smxlink/timreader.h new file mode 100644 index 0000000..a1a48b3 --- /dev/null +++ b/tools/smxlink/timreader.h @@ -0,0 +1,28 @@ +#ifndef _TIMREADER_H +#define _TIMREADER_H + +typedef struct { + struct { + unsigned int pmode:3; // Pixel mode (0: 4-bit, 1: 8-bit, 2: 16-bit, 3: 24-bit) + unsigned int cf:1; // CLUT flag (if 1, CLUT is present) + unsigned int reserved:28; + } flag; + struct { + unsigned int length; + unsigned short px,py; + unsigned short pw,ph; + } clutdata; + struct { + unsigned int length; + unsigned short px,py; + unsigned short pw,ph; + } pixdata; +} TIM_COORDS; + +int GetTimCoords(const char *fileName, TIM_COORDS *coords); + +unsigned short GetClut(int cx, int cy); + +unsigned short GetTPage(int tp, int abr, int x, int y); + +#endif // _TIMREADER_H diff --git a/tools/tools.txt b/tools/tools.txt new file mode 100644 index 0000000..f701308 --- /dev/null +++ b/tools/tools.txt @@ -0,0 +1,30 @@ +To build the tools, simply run 'make all install' in this directory. The +binaries of the tools should reside in a directory named bin for your +convenience. + + +Brief tools summary: + +lzpack - File compression and packing utility for creating LZP, PCK and + QLP archive files. Depends on tinyxml2. + +smxlink - SMX to SMD linker tool (from Project Scarlet/Scarlet Engine). + SMD drawing and parsing code can be found in the n00bdemo example. + Depends on tinyxml2. + +plugins - Includes a plugin for exporting models into Project Scarlet/Scarlet + Engine SMX model data format. + +util - A collection of small single C or C++ file tools such as elf2x. + + +Other tools you may want: + +img2tim - Image to TIM texture file converter powered by FreeImage. + https://github.com/Lameguy64/img2tim + +smxtool - SMX model data tweaking tool. + https://github.com/Lameguy64/smxtool + +mkpsxiso - PlayStation ISO creation tool with CD-DA, CD-XA and STR file support. + https://github.com/Lameguy64/mkpsxiso
\ No newline at end of file diff --git a/tools/util/elf2x.c b/tools/util/elf2x.c new file mode 100644 index 0000000..940e4a1 --- /dev/null +++ b/tools/util/elf2x.c @@ -0,0 +1,300 @@ +// Originally written in C++ by Lameguy64 +// Ported to plain C by Orion + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#define MAX_prg_entry_count 128 +#define true (1) +#define false (0) + +#pragma pack(push, 1) + +typedef struct { + + unsigned int magic; // 0-3 + unsigned char word_size; // 4 + unsigned char endianness; // 5 + unsigned char elf_version; // 6 + unsigned char os_abi; // 7 + unsigned int unused[2]; // 8-15 + + unsigned short type; // 16-17 + unsigned short instr_set; // 18-19 + unsigned int elf_version2; // 20-23 + + unsigned int prg_entry_addr; // 24-27 + unsigned int prg_head_pos; // 28-31 + unsigned int sec_head_pos; // 32-35 + unsigned int flags; // 36-39 + unsigned short head_size; // 40-41 + unsigned short prg_entry_size; // 42-23 + unsigned short prg_entry_count; // 44-45 + unsigned short sec_entry_size; // 46-47 + unsigned short sec_entry_count; // 48-49 + unsigned short sec_names_index; // 50-51 + +} ELF_HEADER; + +typedef struct { + unsigned int seg_type; + unsigned int p_offset; + unsigned int p_vaddr; + unsigned int undefined; + unsigned int p_filesz; + unsigned int p_memsz; + unsigned int flags; + unsigned int alignment; +} PRG_HEADER; + +#pragma pack(pop) + +typedef struct { + unsigned int pc0; + unsigned int gp0; + unsigned int t_addr; + unsigned int t_size; + unsigned int d_addr; + unsigned int d_size; + unsigned int b_addr; + unsigned int b_size; + unsigned int sp_addr; + unsigned int sp_size; + unsigned int sp; + unsigned int fp; + unsigned int gp; + unsigned int ret; + unsigned int base; +} EXEC; + +typedef struct { + char header[8]; + char pad[8]; + EXEC params; + char license[64]; + char pad2[1908]; +} PSEXE; + +int main(int argc, char** argv) { + + char* in_file = NULL; + char* out_file = NULL; + int quiet = false; + int i; + FILE* fp; + ELF_HEADER head; + PRG_HEADER prg_heads[MAX_prg_entry_count]; + unsigned int exe_taddr = 0xffffffff; + unsigned int exe_haddr = 0; + unsigned int exe_tsize = 0; + unsigned char* binary; + PSEXE exe; + char *output_name; + + for( i=1; i<argc; i++ ) { + + if( strcasecmp( "-q", argv[i] ) == 0 ) { + + quiet = true; + + } else { + + if( in_file == NULL ) { + in_file = argv[i]; + } else if( out_file == NULL ) { + out_file = argv[i]; + } + + } + + } + + if( !quiet ) { + printf( "PSn00bSDK elf2x - ELF to PS-EXE Converter\n" ); + printf( "2018-2019 Meido-Tek Productions\n\n" ); + } + + if( argc == 1 ) { + printf( "Usage:\n" ); + printf( " elf2x [-q] <elf_file> [exe_file]\n" ); + return 0; + } + + if( in_file == NULL ) { + printf( "No input file specified.\n" ); + return EXIT_FAILURE; + } + + + fp = fopen( in_file, "rb" ); + + if( fp == NULL ) { + printf( "Cannot open file %s.\n", in_file ); + return EXIT_FAILURE; + } + + fread( &head, 1, sizeof(head), fp ); + + + // Check header + if( head.magic != 0x464c457f ) { + printf( "File is not an ELF file.\n" ); + return EXIT_FAILURE; + } + + if( head.type != 2 ) { + printf( "Only executable ELF files are supported.\n" ); + fclose( fp ); + return EXIT_FAILURE; + } + + if( head.instr_set != 8 ) { + printf( "ELF file is not a MIPS binary.\n" ); + fclose( fp ); + return EXIT_FAILURE; + } + + if( head.word_size != 1 ) { + printf( "Only 32-bit ELF files are supported.\n" ); + fclose( fp ); + return EXIT_FAILURE; + } + + if( head.endianness != 1 ) { + printf( "Only little endian ELF files are supported.\n" ); + fclose( fp ); + return EXIT_FAILURE; + } + + + // Load program headers and determine binary size and load address + + fseek( fp, head.prg_head_pos, SEEK_SET ); + for( i=0; i<head.prg_entry_count; i++ ) { + + fread( &prg_heads[i], 1, sizeof(PRG_HEADER), fp ); + + if( prg_heads[i].flags == 4 ) { + continue; + } + + if( prg_heads[i].p_vaddr < exe_taddr ) { + exe_taddr = prg_heads[i].p_vaddr; + } + + if( prg_heads[i].p_vaddr > exe_haddr ) { + exe_haddr = prg_heads[i].p_vaddr; + } + + } + + exe_tsize = (exe_haddr-exe_taddr); + exe_tsize += prg_heads[head.prg_entry_count-1].p_filesz; + + if( !quiet ) { + + printf( "pc:%08x t_addr:%08x t_size:%d\n", + head.prg_entry_addr, exe_taddr, exe_tsize ); + + } + + // Check if load address is appropriate in main RAM locations + if( ( ( exe_taddr>>24 ) == 0x0 ) || ( ( exe_taddr>>24 ) == 0x80 ) || + ( ( exe_taddr>>24 ) == 0xA0 ) ) { + + if( ( exe_taddr&0x00ffffff ) < 65536 ) { + + printf( "Warning: Program text address overlaps kernel area!\n" ); + + } + + } + + + // Pad out the size to multiples of 2KB + exe_tsize = 2048*((exe_tsize+2047)/2048); + + // Load the binary data + binary = (unsigned char*)malloc( exe_tsize ); + memset( binary, 0x0, exe_tsize ); + + for( i=0; i<head.prg_entry_count; i++ ) { + + if( prg_heads[i].flags == 4 ) { + continue; + } + + fseek( fp, prg_heads[i].p_offset, SEEK_SET ); + fread( &binary[(int)(prg_heads[i].p_vaddr-exe_taddr)], + 1, prg_heads[i].p_filesz, fp ); + + } + + fclose( fp ); + + + if( out_file ) { + + output_name = out_file; + + } else { + char *ptr; + + // Generate output filename if no output is specified + output_name = in_file; + + ptr = &output_name[strlen(output_name)]; + while (ptr != output_name) + { + if (*ptr == '.') + break; + else + ptr--; + } + + if (ptr != output_name) + { + strcpy(ptr, ".exe"); + } + else + { + strcat(ptr, ".exe"); + } + } + + + // Prepare PS-EXE header + memset( &exe, 0, sizeof(PSEXE) ); + + exe.params.sp_addr = 0x801FFFF0; + exe.params.t_addr = exe_taddr; + exe.params.t_size = exe_tsize; + exe.params.pc0 = head.prg_entry_addr; + + strncpy( exe.header, "PS-X EXE", 8 ); + strcpy( exe.license, + "Not Licensed or Endorsed by Sony Computer Entertainment Inc." ); + strcpy( exe.pad2, "Built using GCC and PSn00bSDK libraries" ); + + + // Write file + fp = fopen( output_name, "wb" ); + + if( !fp ) { + printf( "Cannot write output: %s\n", output_name ); + free( binary ); + fclose( fp ); + } + + fwrite( &exe, 1, sizeof( PSEXE ), fp ); + fwrite( binary, 1, exe_tsize, fp ); + + fclose( fp ); + + + free( binary ); + + return 0; +} + diff --git a/tools/util/makefile b/tools/util/makefile new file mode 100644 index 0000000..c49a581 --- /dev/null +++ b/tools/util/makefile @@ -0,0 +1,19 @@ +CFLAGS = -O2 -s + +CC = gcc + +ifeq "$(OS)" "Windows_NT" +EXE_SUFFIX = .exe +else +EXE_SUFFIX = +endif + +all: + $(CC) $(CFLAGS) elf2x.c -o elf2x$(EXE_SUFFIX) + +install: + mkdir -p ../bin + cp elf2x$(EXE_SUFFIX) ../bin/elf2x$(EXE_SUFFIX) + +clean: + rm -f elf2x$(EXE_SUFFIX) |
