Fichiers VSF

De T4C Tech
Révision datée du 25 février 2016 à 18:16 par FunJp (discussion | contributions) (Page créée avec « (auteur original de ce document: Foxy - http://www.foxysofts.com) == Format des fichiers VSF == Les fichiers .VSF sont les librairies graphique du jeu, elles contiennent l... »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigation Aller à la recherche

(auteur original de ce document: Foxy - http://www.foxysofts.com)

Format des fichiers VSF

Les fichiers .VSF sont les librairies graphique du jeu, elles contiennent l'ensemble des sprites et images utilisés dans le jeu. Ces fichiers sont encryptés à l'aide d'une clef de 8192 octets. A l'interieur, les éléments sont organisés à l'aide d'un système de noms de fichiers et répertoires. On notera aussi qu'il existe deux grands groupes: les palettes et les données graphiques.

Les fichiers .VSB sont encodés avec la même clef mais sont architecturés sur un principe plus simple et contiennent l'ensemble des sons et musiques du jeu.

Décodage des fichiers VSF

La clef de décodage est générée dans le client en utilisant une fonction random.

La routine de décryptage peut se présenter ainsi :

for (i = 0; i < taille; i++)
   vsf_datas[i] ^= vsfkey[(i / 4096) & 0xfff];

Chaque octet de la clef decode un bloc de 4096 octets du fichier à l'aide d'un OU exclusif (XOR).

Format et structures

Une fois décodé le fichier VSF est organisé en chunks (blocs).

Le premier étant le header:

+00 : Un long (???)
+04 : Nb de chuncks
+08 : Offset du chunck 1 par rapport au debut du fichier
+12 : Offset du chunck 2 par rapport au debut du fichier
... 

Dans le cas d'un VSF normal, le premier chunck correspond à la zone des "dossiers" et le deuxieme à la zone des "fichiers".

Le chunck "Dossiers"

Ces dossiers sont virtuels et ne servent qu'à l'organisation des données pour l'affichage dans l'éditeur.

+00 : Nombre de structures "Folder" dans ce chunck.
+04 : Premiere structure.
+xx : Deuxieme structure.
... 

Les structures "Folder"

+00 : [byte]  Type de données 1=Graphique / 2=Palette
+01 : [long]  Numéro d'identifiant du dossier
+05 : [long]  Numéro d'itentifiant du dossier parent
+09 : [short] Nombre de caracteres du nom du dossier
+11 : [byte]  Nom du dossier 

Remarque: Il existe 2 dossiers "maître" qui ont pour id parent 0, il s'agit des dossiers "Sprites" et "Palettes" qui contiennent l'ensemble des sous dossiers.

Le chunck "Fichiers"

+00 : Nombre de structures "File" dans ce chunck.
+04 : Premiere structure.
+xx : Deuxieme structure.
... 

Les structures "File"

+00 : [byte]  Type de données 1=Graphique / 2=Palette
+01 : [long]  Offset de la structure "Object" par rapport au debut du fichier.
+05 : [short] Nombre de caracteres du nom de l'objet
+07 : [byte]  Nom de l'objet 

Ces structures File pointent sur les données (Objects) elles-mêmes.

Les structures "Object"

Il existe 2 types d'objets: les palettes et les sprites. Ces 2 types utilisent la même entête de structure.

Les palettes:

+00 : Numéro d'identifiant du dossier parent
+04 : Données de la palette: 256 x RGB (1 octet par composante) 

Les sprites:

+00 : Numéro d'identifiant du dossier parent
+04 : Type de sprite: 1=unpack/2=pack/3=empty
+05 : 1 octet padding
+06 : Largeur du sprite en pixel
+08 : Hauteur du sprite en pixel
+10 : Offset d'affichage X
+12 : Offset d'affichage Y
+14 : 2eme offset d'affichage X
+16 : 2eme offset d'affichage Y
+18 : 2 octets padding
+20 : 4 octets non définis (a "1" si il s'agit d'une tile "sol")
+24 : Numéro de la couleur transparente du sprite
+25 : 3 octets padding
+28 : Taille des données du sprite
+32 : Données graphique du sprite 

Le 2eme offset d'affichage sert à l'affichage mirroir du sprite. Les sprites non compactés sont des images indéxée, c'est à dire que chaque octet correspond à une entrée dans la palette. Les sprites compactés utilisent une compression run byte length décrite dans le paragraphe suivant. Les sprites "empty" quand à eux sont des sprites vide qui ne sont là que pour reserver l'entrée.

Décompression

La compression est faite ligne par ligne. Elle est organisée de la façon suivante:

+00 : Offset X du premier pixel à decompresser
+02 : Nombre de pixel à decompresser (octet 1*4+octet 2)
+04 : Marqueur de decompression (1=N pixels transparents/#1=copier les N pixels suivants)
+xx : Marqueur de decompression (0=fin de sprite/2=fin de ligne)

Voici un exemple de code C de decompactage:

pt_pack=data;
x=y=0;

while(1)
{
   // Index du premier pixel à decompresser
   x=*(short *)pt_pack;
   pt_pack+=2;

   // Nombre de pixels à decompresser
   nb_pix=pt_pack[0]*4+pt_pack[1];
   pt_pack+=2;

   pt_dpack=&tmp_sprite[x+(y*lg)];

   if (*pt_pack++ != 1)
   {
      for (i=0; i<nb_pix; i++)
         pt_dpack[i]=*pt_pack++;
   }
   else
      x+=nb_pix;

   if (*pt_pack == 0)   // Fin de sprite
      break;
   if (*pt_pack++ == 2) // Fin de ligne
      y++;

   if (y==ht)           // Par sécurité
      break;
}; 

Annexe

Clef de décodage

unsigned char vsfkey[] = {
0x30, 0x2A, 0xF8, 0x57, 0xA2, 0x51, 0x84, 0xA8,
0x91, 0x09, 0x70, 0x8F, 0x37, 0x0F, 0x48, 0xA9,
0xD4, 0x59, 0x89, 0xD9, 0xD2, 0x75, 0x50, 0x32,
0xE4, 0xEE, 0xF3, 0xD2, 0x32, 0xB3, 0xAF, 0xCE,
0x73, 0x75, 0x46, 0x11, 0x1B, 0x12, 0xA3, 0x40,
0x79, 0xF2, 0x82, 0xA3, 0xDE, 0x72, 0x10, 0x03,
0xBC, 0x43, 0x92, 0x92, 0xD2, 0xCF, 0x06, 0xCC,
0x49, 0x9F, 0xC9, 0x5E, 0xDA, 0xBC, 0x3C, 0x09,
0xF4, 0x16, 0x63, 0x82, 0xDF, 0xE4, 0x91, 0x5F,
0xDE, 0x11, 0x06, 0xF1, 0x56, 0x90, 0x91, 0x30,
0xEE, 0xD0, 0x3E, 0x97, 0xB9, 0x1B, 0xED, 0x13,
0x54, 0xF1, 0x04, 0xDA, 0x0F, 0x7D, 0x03, 0x5B,
0x0B, 0xE7, 0x37, 0x18, 0x65, 0xC7, 0x54, 0x91,
0x55, 0x7F, 0x20, 0x27, 0x53, 0xA3, 0x10, 0xFA,
0x3E, 0x5E, 0xF1, 0xD7, 0x7A, 0xD3, 0x8D, 0x14,
0x1B, 0x84, 0x47, 0x74, 0x03, 0xB2, 0xC9, 0x12,
0x0A, 0xC8, 0xA4, 0x3E, 0x1F, 0xB6, 0xEF, 0x63,
0x70, 0x5C, 0xF5, 0xEF, 0x8B, 0xEA, 0xD0, 0x31,
0x80, 0x48, 0x12, 0x3F, 0x0B, 0x76, 0x66, 0xDA,
0xB0, 0xF1, 0x38, 0x57, 0xEA, 0x1A, 0x55, 0x7A,
0x45, 0x93, 0x90, 0x60, 0x82, 0xAC, 0x69, 0x62,
0xC6, 0xC1, 0xAB, 0xF8, 0xB1, 0xA0, 0x18, 0x9E,
0x89, 0xEB, 0x04, 0xB8, 0x5E, 0x7F, 0x00, 0x74,
0x2B, 0xD7, 0x7B, 0xB1, 0xFB, 0x6E, 0x69, 0xE0,
0x11, 0x25, 0xDF, 0xEC, 0x04, 0xA7, 0xC3, 0x1A,
0xEA, 0xCD, 0x65, 0xED, 0x7A, 0x02, 0x29, 0x11,
0x2F, 0xA3, 0x2A, 0x32, 0x6A, 0x6C, 0xDC, 0xED,
0x9E, 0xD1, 0xB5, 0xAD, 0x6A, 0x6C, 0xC9, 0x91,
0xC3, 0x5B, 0x76, 0x4F, 0x18, 0xA4, 0x04, 0x17,
0x71, 0x9D, 0x48, 0x7C, 0x9B, 0x4C, 0x4A, 0x53,
0x44, 0xCD, 0xEA, 0x97, 0x23, 0xB7, 0x82, 0x52,
0x1F, 0x7C, 0x8A, 0x79, 0x6A, 0xD1, 0x3C, 0xD8,
0xB0, 0x11, 0x3A, 0xF2, 0x33, 0x9E, 0x30, 0xE6,
0xF0, 0x4B, 0x77, 0x51, 0xC7, 0xBB, 0xBF, 0x33,
0x9D, 0xC6, 0xA9, 0xD6, 0x7D, 0xDF, 0x75, 0xAE,
0xC0, 0x75, 0x9E, 0x41, 0x31, 0x5A, 0x84, 0x04,
0x2C, 0x23, 0x0E, 0x47, 0xC9, 0x92, 0x4A, 0x14,
0xFA, 0xF5, 0x1A, 0x17, 0xB5, 0x8B, 0xCC, 0x7C,
0x10, 0xE9, 0xCB, 0xD9, 0x6D, 0x5F, 0x39, 0x11,
0x99, 0x58, 0x96, 0x31, 0xF2, 0xC1, 0x67, 0x5E,
0x8B, 0x6F, 0xD6, 0xB5, 0x4F, 0x7D, 0x59, 0x2D,
0x26, 0xB8, 0x51, 0x7B, 0x18, 0xF9, 0xB6, 0xFB,
0x71, 0x95, 0xB4, 0x8F, 0xE6, 0xB4, 0x53, 0x83,
0xBC, 0xC1, 0x17, 0x75, 0xE2, 0xC5, 0xA9, 0x36,
0x23, 0xD0, 0x79, 0xAC, 0x3A, 0x5C, 0x5F, 0xBD,
0x06, 0xAF, 0x44, 0x2B, 0xA3, 0x42, 0xC1, 0x7D,
0x93, 0x24, 0xC9, 0xE2, 0xDF, 0x5B, 0x47, 0x14,
0x3F, 0x4D, 0xC5, 0x3B, 0x38, 0x22, 0x10, 0xD5,
0x46, 0x24, 0xDA, 0x97, 0xFD, 0x2A, 0x63, 0x51,
0x30, 0xF7, 0x16, 0xD2, 0x0E, 0xA1, 0x33, 0xCE,
0x4D, 0xF2, 0x6F, 0xC0, 0x4B, 0xCF, 0x9A, 0xCE,
0x35, 0x99, 0x44, 0xAF, 0x24, 0x93, 0x5D, 0x8B,
0x4A, 0x46, 0xDD, 0xE3, 0x0F, 0xE3, 0x67, 0x76,
0x38, 0xAD, 0xEB, 0x1E, 0x0A, 0x54, 0x4F, 0xBB,
0x71, 0x5F, 0x0A, 0x16, 0x1F, 0x8E, 0xD1, 0xC0,
0xB3, 0x41, 0x3A, 0xFC, 0xDD, 0xD5, 0x58, 0xA2,
0x84, 0x13, 0x68, 0xFD, 0xE1, 0x87, 0x72, 0xB7,
0xB1, 0xEE, 0xEA, 0xBA, 0x4E, 0x97, 0x59, 0x11,
0xD5, 0xC4, 0xFD, 0xCF, 0x4F, 0x15, 0x71, 0xF5,
0xCE, 0xE1, 0x4A, 0x52, 0x99, 0xA7, 0xC3, 0x68,
0x47, 0x68, 0x5F, 0x51, 0xEB, 0x0F, 0x86, 0xA2,
0x33, 0xD5, 0x35, 0x53, 0x8D, 0xA6, 0x97, 0x9A,
0x4D, 0x80, 0xAF, 0xD8, 0xCE, 0xDD, 0xFB, 0x7A,
0x9A, 0x17, 0x19, 0xDA, 0x89, 0xC2, 0x65, 0x28,
0xE9, 0x21, 0xA5, 0x4B, 0x9F, 0x79, 0xA9, 0xC4,
0x50, 0x80, 0xF1, 0x95, 0x7C, 0xBD, 0x4D, 0x25,
0xAE, 0xED, 0x84, 0x1E, 0x94, 0x67, 0xF8, 0x5B,
0x2D, 0x7D, 0x4B, 0xC2, 0xE4, 0xE5, 0x00, 0x30,
0xBE, 0x1B, 0x20, 0x58, 0x74, 0xC1, 0xE0, 0xA7,
0x9C, 0x0B, 0x43, 0x2E, 0xD0, 0x1B, 0xBE, 0x7D,
0xCC, 0x6B, 0xDE, 0x8D, 0x94, 0x2D, 0xEA, 0xA4,
0x99, 0xB2, 0x86, 0x37, 0xDE, 0xCC, 0x5A, 0xCB,
0x1B, 0x32, 0xB4, 0xE4, 0xDB, 0xE3, 0x2F, 0xDA,
0xAD, 0x91, 0x50, 0xC9, 0x3E, 0xF9, 0x32, 0x6F,
0x7B, 0x53, 0x26, 0x12, 0xC1, 0xAC, 0x56, 0x63,
0xF4, 0x52, 0x6D, 0x64, 0xAC, 0x33, 0x37, 0x48,
0x52, 0x42, 0x47, 0x5C, 0x4C, 0xDD, 0x99, 0xE8,
0x18, 0x31, 0x3B, 0x14, 0x78, 0x96, 0xE9, 0xC8,
0x91, 0x03, 0xBC, 0x99, 0x12, 0x60, 0xC0, 0xA3,
0x53, 0xF8, 0xA5, 0x76, 0x81, 0xD5, 0x5C, 0xF0,
0xBA, 0x29, 0xBA, 0x2D, 0x39, 0xAB, 0x25, 0x5F,
0x70, 0x05, 0x29, 0xB9, 0x35, 0x2F, 0x2C, 0x54,
0xE1, 0xD7, 0x07, 0x0F, 0x79, 0xC6, 0xAD, 0x72,
0xC9, 0x42, 0xD3, 0x9A, 0x92, 0x72, 0x8C, 0x14,
0xA8, 0xC2, 0xF5, 0xC2, 0x18, 0x49, 0xD4, 0xC9,
0x4A, 0x2C, 0x3F, 0x67, 0x28, 0xFE, 0x3D, 0xDF,
0x41, 0x2D, 0x6B, 0x5F, 0xEB, 0x5B, 0xA2, 0xDC,
0x6C, 0xCC, 0x9B, 0xFC, 0x15, 0xC3, 0x8D, 0xFB,
0x6F, 0xEA, 0xDB, 0x8A, 0x5C, 0xB3, 0xAF, 0xB4,
0x3A, 0xC0, 0xA2, 0xC9, 0x07, 0x42, 0x60, 0x38,
0x84, 0x5F, 0x4C, 0x78, 0x5F, 0x9B, 0x23, 0xEC,
0x4F, 0x33, 0xA1, 0xCA, 0x3C, 0x87, 0x24, 0xF5,
0x64, 0x7E, 0x51, 0xEE, 0x7B, 0xE7, 0xB7, 0xAE,
0xD5, 0xDF, 0x75, 0x8D, 0x84, 0x35, 0xDA, 0x28,
0x7F, 0xCB, 0x0F, 0x44, 0xC7, 0x02, 0xB4, 0xB1,
0x87, 0x13, 0x8A, 0x2F, 0x3D, 0x7A, 0x14, 0x50,
0xDA, 0x5B, 0x3B, 0x5E, 0xE9, 0xE1, 0xF2, 0x41,
0xB0, 0xA6, 0xDD, 0x5E, 0x56, 0x16, 0xF1, 0x7E,
0x08, 0xCE, 0x19, 0xB1, 0x18, 0x0D, 0xDA, 0x36,
0x2A, 0x08, 0xFB, 0x57, 0x4D, 0x57, 0x23, 0x54,
0x29, 0x5C, 0x7D, 0x45, 0x1B, 0x9D, 0x65, 0xFA,
0x5F, 0x31, 0x00, 0xE8, 0x31, 0x1F, 0xE8, 0x05,
0xF0, 0xC4, 0xCD, 0xAC, 0x47, 0x39, 0x1A, 0x88,
0x4A, 0xAE, 0x98, 0x70, 0x9F, 0xDC, 0x13, 0x51,
0xA1, 0x5E, 0xFC, 0x0F, 0x84, 0x18, 0x13, 0x67,
0x76, 0x9B, 0x01, 0xDA, 0xC8, 0x8F, 0x04, 0x8A,
0x0F, 0x0A, 0x91, 0x21, 0x48, 0x01, 0xF7, 0xB2,
0xFD, 0xA4, 0x06, 0xA5, 0x69, 0xC5, 0xAB, 0x92,
0x9B, 0x3E, 0x9E, 0x28, 0x9A, 0x4D, 0x02, 0x14,
0x8A, 0x04, 0x04, 0xDF, 0xD1, 0xA0, 0x89, 0xDA,
0x38, 0xFB, 0xC9, 0xFA, 0x10, 0xE2, 0xF7, 0xC3,
0x58, 0x85, 0xE8, 0x25, 0xDE, 0xCF, 0xAE, 0x64,
0x68, 0xD7, 0x46, 0xFE, 0xD0, 0x3A, 0x35, 0x8B,
0x30, 0x84, 0x2F, 0xA3, 0x01, 0x91, 0xBB, 0xC1,
0x3F, 0xF4, 0xD9, 0x28, 0x93, 0x5B, 0x9F, 0xC5,
0x6E, 0xEC, 0xE4, 0x19, 0x35, 0xB6, 0xE1, 0x14,
0x5F, 0x08, 0xD7, 0xFD, 0x9D, 0xDB, 0xB0, 0x5C,
0xFC, 0x3B, 0xA5, 0xD3, 0x0B, 0x9D, 0xE1, 0x0C,
0xF9, 0x53, 0x27, 0x94, 0xC5, 0xE5, 0x72, 0xC7,
0x55, 0x79, 0x9E, 0xB0, 0x9F, 0x37, 0x0A, 0xEC,
0xD2, 0xAB, 0x39, 0x92, 0x73, 0x2E, 0x7B, 0x12,
0x82, 0x44, 0x8C, 0x1D, 0xA3, 0x02, 0x3D, 0x86,
0x3C, 0x73, 0x15, 0x2C, 0x9C, 0xFE, 0xF4, 0xD4,
0x20, 0xC5, 0xBB, 0x16, 0x54, 0x0E, 0xEB, 0x3C,
0x19, 0x9E, 0x4E, 0x28, 0xC7, 0x2E, 0x97, 0x39,
0x58, 0xBB, 0x08, 0x2A, 0x80, 0xF9, 0x15, 0xFD,
0xDA, 0xB1, 0x0A, 0xDC, 0x0C, 0x24, 0xAB, 0xF8,
0xE4, 0x6F, 0xDE, 0x77, 0x85, 0xF6, 0x4A, 0x4E,
0x84, 0xBE, 0xFB, 0x2D, 0x10, 0xD7, 0x0A, 0x5E,
0x11, 0xBE, 0x3D, 0xA9, 0x54, 0xC2, 0xAC, 0x3F,
0xA9, 0x69, 0x68, 0x91, 0x09, 0xD0, 0x1C, 0x41,
0xB7, 0x13, 0xAE, 0x00, 0x6A, 0xAE, 0xEB, 0x70,
0x6B, 0xE6, 0x25, 0x0D, 0xBE, 0x27, 0xD8, 0x0E,
0x42, 0x69, 0x4F, 0x47, 0xD5, 0x99, 0x48, 0x15,
0x7D, 0xF8, 0x96, 0x37, 0x87, 0x81, 0xC8, 0xBA,
0xAB, 0x4C, 0xCD, 0xDD, 0x35, 0xF2, 0x92, 0xED,
0x22, 0xF3, 0xB0, 0x34, 0x49, 0x19, 0x06, 0xD3,
0x7F, 0xD7, 0x64, 0xAF, 0xB7, 0xB9, 0x2D, 0x4D,
0x2B, 0xBB, 0xF7, 0xBA, 0x7C, 0xB3, 0x38, 0x71,
0xD6, 0xB8, 0xE0, 0x3B, 0x1C, 0x7E, 0x06, 0x14,
0xFB, 0xC2, 0x81, 0x10, 0x25, 0xAA, 0x98, 0x3E,
0x5D, 0x28, 0xA0, 0x8E, 0xAF, 0x60, 0x9E, 0xB3,
0x87, 0x0E, 0xF0, 0x09, 0xDA, 0xE3, 0xEE, 0x72,
0x4D, 0xF2, 0x8D, 0x47, 0x52, 0x0F, 0x08, 0x2F,
0x4F, 0x30, 0x7B, 0x0B, 0xC5, 0xD7, 0x93, 0xD7,
0x71, 0x75, 0x27, 0x91, 0x71, 0xC9, 0xE2, 0x16,
0x65, 0x4C, 0xE6, 0x0D, 0x99, 0x8D, 0x6F, 0xC8,
0x24, 0x99, 0x78, 0x2C, 0x0C, 0x60, 0x5E, 0x8B,
0x6E, 0x17, 0x85, 0x93, 0x9F, 0x9C, 0xFB, 0x2F,
0x4F, 0xDB, 0x1E, 0x64, 0xB1, 0x33, 0x3C, 0x3F,
0x9B, 0xD3, 0x3D, 0xB4, 0xAB, 0x2D, 0x40, 0x82,
0x6E, 0x48, 0x45, 0x17, 0x7F, 0x30, 0xCD, 0x75,
0xAF, 0x56, 0x81, 0x16, 0x27, 0xF6, 0xD5, 0xCD,
0x8C, 0x78, 0xA9, 0xB3, 0x25, 0xD6, 0xF1, 0xFC,
0xFC, 0x01, 0x58, 0xEB, 0x06, 0x40, 0xE3, 0xAB,
0x42, 0x9A, 0x97, 0x35, 0xDF, 0x39, 0x19, 0x39,
0x66, 0xC8, 0x56, 0xFD, 0xD0, 0xE1, 0x25, 0x43,
0xBB, 0x68, 0xEC, 0x2B, 0x80, 0xF3, 0x46, 0x1C,
0x5E, 0x30, 0x9E, 0x9F, 0x9D, 0x43, 0xE0, 0x4F,
0xB2, 0x2E, 0x16, 0xB2, 0x62, 0x39, 0x07, 0x25,
0xE6, 0x4B, 0xE6, 0xB7, 0x12, 0x5A, 0xEF, 0x1A,
0x72, 0xC7, 0x0E, 0x79, 0x77, 0xC5, 0x7D, 0x67,
0x94, 0xBD, 0x72, 0xBB, 0x65, 0xB1, 0xBA, 0x7C,
0xD4, 0xA0, 0x63, 0xBC, 0x3B, 0xEB, 0x5B, 0x83,
0x87, 0xBA, 0x18, 0xB1, 0x5E, 0x5E, 0x3A, 0xDF,
0x45, 0xB2, 0x31, 0x49, 0xBE, 0x89, 0xDE, 0xAC,
0x73, 0x06, 0x3A, 0x2D, 0x54, 0x08, 0xF5, 0x3E,
0xBD, 0x8B, 0x25, 0x7E, 0x9F, 0x0E, 0xD8, 0xA2,
0x9A, 0xF2, 0xCD, 0x56, 0x2B, 0xE7, 0x08, 0x20,
0xC8, 0x46, 0x7A, 0x48, 0x0B, 0x7A, 0xAB, 0xB7,
0xCF, 0x65, 0x58, 0xE0, 0x5C, 0xC3, 0x18, 0xA0,
0x81, 0x8D, 0xFE, 0x24, 0xC1, 0x5C, 0x47, 0xCC,
0x76, 0xD1, 0xED, 0x12, 0xEB, 0xF4, 0x5E, 0x68,
0x91, 0x9D, 0x0F, 0x21, 0x12, 0xD5, 0x2A, 0x55,
0x7F, 0x39, 0x33, 0xC1, 0x72, 0x61, 0xA3, 0xB0,
0x34, 0x42, 0x96, 0xDB, 0xD8, 0x93, 0x67, 0x51,
0x6D, 0x31, 0x5C, 0x53, 0x16, 0x81, 0x40, 0x44,
0x33, 0xD6, 0x12, 0x82, 0x86, 0xD7, 0x9F, 0x52,
0x54, 0xDD, 0x2E, 0xBD, 0x8C, 0x5C, 0x1E, 0x7B,
0xE9, 0x47, 0x8E, 0xD1, 0x18, 0x70, 0x01, 0x7A,
0xD5, 0xF0, 0xFC, 0x85, 0x1E, 0x8A, 0xB4, 0x40,
0x43, 0x0E, 0xA8, 0x18, 0x1D, 0xBC, 0x4E, 0x7A,
0x25, 0xAE, 0xAD, 0xC0, 0x9E, 0x32, 0x0C, 0x0D,
0xB8, 0x38, 0x8D, 0x32, 0xB3, 0xAD, 0xD6, 0x95,
0x04, 0xEA, 0xB4, 0x15, 0x77, 0x0C, 0xBD, 0xE9,
0x56, 0x5F, 0xF8, 0x8D, 0x8B, 0xC2, 0x7B, 0x9B,
0xC5, 0x09, 0x17, 0xB7, 0x9C, 0x5F, 0xF2, 0x71,
0xB4, 0xB0, 0x37, 0x28, 0xE0, 0x0A, 0xAD, 0xEE,
0x4C, 0xFB, 0x68, 0x6E, 0x96, 0x03, 0x62, 0xCC,
0xFE, 0xE7, 0x25, 0x90, 0x84, 0x24, 0x6D, 0x80,
0x0A, 0x49, 0xCD, 0x8E, 0x7B, 0x5F, 0x55, 0xB5,
0xF0, 0x4F, 0x2F, 0xE2, 0xD3, 0x40, 0x4A, 0xD2,
0x02, 0x02, 0xFB, 0xFD, 0xF1, 0x6B, 0xA4, 0x76,
0xD4, 0xC2, 0x52, 0xCC, 0xBE, 0x1E, 0x66, 0xF6,
0xC6, 0xCB, 0x37, 0x32, 0x2F, 0xAF, 0xB8, 0xE6,
0x83, 0xAE, 0x1B, 0x8C, 0xC1, 0x0E, 0x70, 0x8E,
0x7B, 0xD8, 0x54, 0x31, 0xFB, 0x42, 0x8A, 0x71,
0x69, 0x0E, 0xA5, 0xEE, 0xEC, 0xEE, 0xAB, 0xCA,
0xD1, 0xEC, 0xB7, 0x8F, 0xAC, 0xCB, 0xA1, 0x10,
0x80, 0x6C, 0x9E, 0x52, 0xDD, 0x2F, 0xE5, 0x6E,
0x0C, 0x5C, 0x56, 0x72, 0x2A, 0x84, 0x18, 0x4C,
0x53, 0xE4, 0x43, 0xA3, 0xC3, 0xCF, 0x81, 0xC8,
0xFC, 0x0A, 0xB3, 0x91, 0xE8, 0x32, 0x95, 0x3E,
0xFB, 0x24, 0x5F, 0x61, 0x5D, 0x60, 0x6E, 0xBD,
0x08, 0x69, 0xE5, 0x31, 0xEF, 0x2D, 0x52, 0x91,
0x25, 0x65, 0x4F, 0x97, 0xF8, 0x00, 0x2D, 0xBD,
0x1F, 0x7E, 0x8F, 0x26, 0xD6, 0x5C, 0x17, 0x7F,
0x0B, 0x73, 0x01, 0xE5, 0x74, 0x5E, 0xCE, 0xCA,
0xC4, 0xDC, 0xE6, 0xD7, 0xC3, 0x39, 0x3C, 0xCF,
0x75, 0xAA, 0xEE, 0x77, 0x3F, 0xBA, 0xF2, 0x75,
0x0C, 0xA7, 0xAF, 0x39, 0x6C, 0xC9, 0xAB, 0xDD,
0xC0, 0xF6, 0x28, 0x0B, 0x58, 0xE4, 0xCA, 0xE0,
0x96, 0x92, 0x3F, 0xD2, 0x19, 0xA5, 0xDB, 0x92,
0xD7, 0xD1, 0x46, 0xEE, 0x4D, 0x3D, 0x16, 0xBD,
0x97, 0xE1, 0x78, 0xB8, 0x9D, 0xF4, 0xD7, 0x67,
0x34, 0x49, 0x78, 0x00, 0x3D, 0xB1, 0x27, 0x4D,
0xD1, 0x68, 0xD1, 0x8F, 0x63, 0x6F, 0x35, 0x65,
0xDF, 0xF7, 0x7A, 0xAB, 0xD5, 0xC2, 0xDC, 0x61,
0x97, 0x89, 0x4F, 0x8E, 0x5F, 0x5B, 0x1F, 0x27,
0x77, 0x09, 0x98, 0xEE, 0x56, 0x80, 0xA8, 0x5B,
0xCA, 0x39, 0x85, 0x7A, 0x19, 0x91, 0x4D, 0xD6,
0x24, 0x38, 0xAE, 0x58, 0x8D, 0x89, 0x8A, 0x2D,
0xDE, 0xFA, 0x97, 0xA8, 0xA5, 0x79, 0x08, 0x2C,
0x9F, 0xD0, 0x2B, 0x05, 0xD9, 0x0E, 0x14, 0x58,
0xD5, 0xE1, 0x3C, 0x00, 0xAD, 0x0A, 0x28, 0x71,
0x37, 0xAF, 0x09, 0xA3, 0x2A, 0xCC, 0x64, 0xEE,
0x43, 0x92, 0xB6, 0xF3, 0x65, 0xCB, 0x15, 0x80,
0xC2, 0x3F, 0xD4, 0x6F, 0xFB, 0x16, 0x2D, 0x90,
0x48, 0x40, 0xDB, 0x8B, 0x94, 0xD4, 0xC9, 0xC2,
0xAD, 0x7A, 0xAC, 0x38, 0x5F, 0xC8, 0xAE, 0x71,
0x98, 0xAD, 0x10, 0x5C, 0x92, 0xCD, 0xCC, 0x32,
0xF2, 0xEE, 0x3B, 0x5A, 0xF0, 0x56, 0xB9, 0x51,
0x75, 0x2F, 0x49, 0x8B, 0x44, 0xED, 0x37, 0x57,
0x1D, 0xB6, 0xBE, 0xC3, 0xE0, 0xBB, 0xAD, 0x82,
0xB2, 0xA7, 0x0A, 0xCE, 0x22, 0xFC, 0xB1, 0x4C,
0x47, 0x7D, 0x02, 0xF1, 0xEC, 0x89, 0x7C, 0xE5,
0xB2, 0x8B, 0x67, 0x6A, 0x31, 0x52, 0x74, 0xBA,
0x1A, 0x7E, 0x63, 0xF1, 0x64, 0xDF, 0xA6, 0xED,
0x68, 0xDD, 0x07, 0x36, 0x08, 0xD5, 0x48, 0xDC,
0xD1, 0x86, 0xCD, 0x62, 0x25, 0x6E, 0x3B, 0x9B,
0x55, 0x32, 0x1C, 0x96, 0xCD, 0xFE, 0x86, 0x7A,
0x38, 0xEF, 0xBE, 0x6F, 0x9D, 0x73, 0xDC, 0x81,
0x8B, 0xAB, 0x6C, 0x81, 0x39, 0xD4, 0x17, 0xEE,
0xA8, 0xA7, 0x43, 0xD8, 0xCC, 0xBF, 0xB9, 0xBE,
0xAF, 0xFE, 0x4B, 0x7B, 0x90, 0xEE, 0x72, 0x23,
0x0C, 0x28, 0xF6, 0xE9, 0x42, 0xB2, 0x94, 0x07,
0xF2, 0x6F, 0x9E, 0x9B, 0xA9, 0x75, 0xA0, 0x90,
0xDE, 0x7C, 0x07, 0x81, 0x1A, 0x3B, 0xBD, 0x9B,
0x18, 0xCF, 0xD9, 0x85, 0xEC, 0x20, 0x3B, 0x40,
0x2B, 0x41, 0x2F, 0x0C, 0x05, 0xD9, 0x14, 0x4E,
0x71, 0x83, 0x03, 0x71, 0x4F, 0x36, 0x6A, 0xCC,
0x8A, 0xA1, 0xBC, 0x88, 0x40, 0x9C, 0x0A, 0x7F,
0xE1, 0x7F, 0xAC, 0x22, 0x57, 0x8E, 0xE6, 0x5F,
0x29, 0x59, 0x8B, 0x84, 0x9B, 0x24, 0x9F, 0x21,
0xDB, 0x46, 0xFB, 0xEE, 0x1D, 0x91, 0xF8, 0xB1,
0xBF, 0xB4, 0x09, 0x1C, 0x74, 0xA0, 0x64, 0xB5,
0x62, 0xEB, 0xA6, 0xBC, 0x45, 0x36, 0x79, 0x0C,
0x99, 0x8D, 0x32, 0xFC, 0xBA, 0xD0, 0x79, 0x4D,
0x07, 0x13, 0xF0, 0x01, 0x08, 0x05, 0xD0, 0x4A,
0x92, 0x50, 0x91, 0x66, 0xEA, 0x03, 0x90, 0x8A,
0xEC, 0xF0, 0xAD, 0xC2, 0x2B, 0x14, 0xF6, 0xD3,
0x13, 0xF8, 0x46, 0x24, 0x16, 0x19, 0xE8, 0x9F,
0xC7, 0x47, 0x43, 0x95, 0x05, 0x0D, 0x75, 0xA2,
0x17, 0x13, 0xF9, 0x95, 0xD8, 0x82, 0x53, 0x4C,
0xD7, 0x6A, 0xA6, 0x9F, 0x7C, 0x25, 0x64, 0x42,
0x29, 0xB8, 0xEB, 0xA6, 0x62, 0x3C, 0x30, 0xE3,
0xF0, 0x3E, 0x5A, 0x96, 0x08, 0x26, 0x6B, 0xC9,
0x62, 0x97, 0xE7, 0xD4, 0x71, 0xD8, 0x71, 0x46,
0x76, 0x36, 0x74, 0xC0, 0xAD, 0x65, 0xC5, 0xE3,
0x6F, 0xE8, 0x49, 0x2F, 0x54, 0x76, 0x95, 0xE5,
0x59, 0x55, 0x98, 0xF1, 0x05, 0xCC, 0x39, 0xC9,
0x89, 0x7A, 0xFD, 0x52, 0xE9, 0xC3, 0xAE, 0xC4,
0x1D, 0x30, 0xFB, 0x91, 0x34, 0xD1, 0x1F, 0x45,
0x7B, 0xA6, 0x81, 0x6B, 0xA0, 0x02, 0x5D, 0x73,
0xD3, 0xE8, 0x63, 0x94, 0xF1, 0x7C, 0x61, 0xB0,
0xA0, 0x5A, 0xE0, 0x39, 0x76, 0x00, 0xD0, 0x15,
0x21, 0x35, 0x23, 0x80, 0x84, 0x65, 0x77, 0xF3,
0xE1, 0x0F, 0xB9, 0x08, 0xFA, 0x1E, 0xC9, 0x59,
0x36, 0x56, 0x1F, 0x6A, 0xC2, 0xB3, 0x69, 0x89,
0xBA, 0xD0, 0x37, 0xB6, 0x4C, 0x4A, 0x9A, 0x82,
0xD5, 0x20, 0xCC, 0xF7, 0x12, 0x1E, 0xCF, 0x7B,
0x36, 0x3C, 0x16, 0xB1, 0x19, 0x05, 0x22, 0x62,
0x53, 0xF7, 0x30, 0x5F, 0x6B, 0xEC, 0xD4, 0x62,
0xEE, 0x7C, 0xA3, 0xF6, 0x9E, 0x5E, 0xD1, 0x5B,
0x91, 0xCF, 0xDE, 0x65, 0x53, 0xF7, 0x2F, 0x68,
0x0E, 0x4D, 0xBA, 0x13, 0xAD, 0xF4, 0xA9, 0x5C,
0x01, 0x2B, 0xFA, 0x60, 0xE0, 0xA6, 0x29, 0x46,
0x4F, 0xF9, 0xCA, 0x26, 0xA3, 0xF8, 0x3B, 0xE9,
0xA6, 0x1F, 0x3C, 0x35, 0xBA, 0xEF, 0x99, 0x46,
0xFD, 0x5D, 0xCD, 0xDA, 0x6F, 0x29, 0xA5, 0x14,
0x14, 0x4D, 0xE4, 0x5A, 0x17, 0x5C, 0xE9, 0x42,
0xF1, 0xE3, 0x51, 0x70, 0x8E, 0xD6, 0x9A, 0x7C,
0x6B, 0xEA, 0xCA, 0xD4, 0xBD, 0x02, 0x13, 0xA3,
0x98, 0x88, 0x71, 0xB4, 0x11, 0xDF, 0x59, 0x55,
0x5F, 0xBA, 0x51, 0x39, 0x03, 0x89, 0x9C, 0x64,
0xEA, 0xD7, 0xDB, 0x04, 0x94, 0xB3, 0xB3, 0x5E,
0x33, 0x10, 0x6E, 0xAE, 0xCF, 0x2A, 0x9F, 0x0C,
0x74, 0xEC, 0xCC, 0x4D, 0x48, 0x53, 0x0A, 0xEB,
0xB8, 0xCF, 0xA5, 0xEA, 0x99, 0xAC, 0xC4, 0xB6,
0x4F, 0x72, 0x0F, 0x0D, 0xE9, 0x4D, 0x4C, 0xDD,
0x52, 0x6B, 0x0B, 0x31, 0x67, 0x66, 0x45, 0x0C,
0x25, 0xA5, 0x02, 0x50, 0xC8, 0xC1, 0xFB, 0xA5,
0xF3, 0xE7, 0x45, 0x59, 0xCE, 0x40, 0xE7, 0x46,
0x32, 0x50, 0x8F, 0xB5, 0xC2, 0x5F, 0x29, 0x45,
0x1E, 0xD7, 0x86, 0xC8, 0xF7, 0xB1, 0x07, 0x30,
0x3F, 0xCF, 0x36, 0x6B, 0x47, 0x66, 0x73, 0x4E,
0xE4, 0x60, 0x95, 0x73, 0x97, 0xC2, 0x8A, 0x21,
0xA8, 0x0E, 0x02, 0x2D, 0x54, 0xA6, 0x0D, 0xE1,
0xEA, 0x34, 0xC4, 0xDF, 0xF4, 0x0A, 0xE9, 0x04,
0x57, 0x87, 0x8E, 0x4A, 0x78, 0x7E, 0xB5, 0xB2,
0x62, 0x96, 0xF9, 0x24, 0xE7, 0xAE, 0x30, 0x52,
0xC7, 0x47, 0x0A, 0x9F, 0xD2, 0xDE, 0xBE, 0x01,
0x0D, 0x5A, 0xA9, 0xE4, 0xD4, 0x6A, 0xF2, 0x15,
0x03, 0xE9, 0x2F, 0x99, 0x11, 0x46, 0x07, 0x9E,
0x3F, 0xE4, 0xD8, 0x58, 0xB3, 0x82, 0x5D, 0xE6,
0xA3, 0x99, 0x4C, 0x37, 0x72, 0xC5, 0x01, 0xED,
0xD9, 0x29, 0x1B, 0x44, 0x0B, 0xCF, 0x26, 0xEF,
0xD4, 0x12, 0x3D, 0x06, 0xC4, 0xFA, 0xAB, 0xDF,
0x4F, 0xAA, 0x95, 0xFD, 0xF0, 0xB9, 0x97, 0xEA,
0x50, 0xA0, 0x6E, 0x23, 0x67, 0x17, 0x98, 0xF5,
0xA3, 0x7B, 0xFB, 0x69, 0x0C, 0x37, 0x88, 0x21,
0x61, 0x1E, 0xDB, 0x3C, 0x49, 0xD7, 0xE7, 0x42,
0x69, 0x41, 0x93, 0xFE, 0x92, 0xD0, 0x62, 0x6B,
0xE2, 0xF8, 0x13, 0x8E, 0xE6, 0x8F, 0x4A, 0x65,
0xC1, 0x2F, 0x31, 0xC2, 0x4C, 0x9C, 0x1D, 0x34,
0x3F, 0x2A, 0x30, 0xE8, 0x51, 0x1B, 0x01, 0x91,
0x5F, 0x08, 0x39, 0x49, 0x8E, 0x44, 0x42, 0x74,
0x70, 0x3F, 0xDF, 0xA6, 0x26, 0xEA, 0xDA, 0x88,
0x86, 0x1F, 0xA0, 0xBA, 0x40, 0xFC, 0xE9, 0xB5,
0x01, 0x52, 0x5F, 0xB7, 0x92, 0xFE, 0x3A, 0x9B,
0x08, 0x59, 0xEA, 0xC9, 0xD8, 0x90, 0xBC, 0x13,
0x0C, 0x10, 0x7A, 0x97, 0x57, 0xE6, 0x0E, 0xAC,
0x47, 0x29, 0x2D, 0xBD, 0x5D, 0x54, 0xF2, 0x34,
0x3B, 0xB3, 0x8C, 0x55, 0xC1, 0xC1, 0xD8, 0x2C,
0x36, 0x93, 0x0C, 0x6C, 0x65, 0x32, 0x55, 0x53,
0xCA, 0x08, 0x84, 0x8D, 0xB0, 0x40, 0xA9, 0x1D,
0x58, 0x2A, 0xBB, 0x3A, 0x17, 0x9F, 0x3D, 0x39,
0x83, 0x69, 0xDD, 0x6E, 0x93, 0x9F, 0x21, 0x10,
0xBE, 0x11, 0x01, 0x1D, 0x29, 0xA5, 0x91, 0x41,
0xC1, 0xC3, 0xA4, 0xB5, 0x67, 0xB1, 0x71, 0x27,
0x0E, 0xFC, 0x31, 0x9B, 0xE2, 0xDB, 0xCB, 0x53,
0x6E, 0x91, 0x76, 0xAF, 0xBA, 0xD4, 0x58, 0x13,
0x77, 0x30, 0x30, 0xC9, 0x19, 0x68, 0xF4, 0xEA,
0x05, 0xDE, 0x7F, 0x3B, 0xAD, 0xF8, 0x29, 0x17,
0xBC, 0x7E, 0x71, 0x4E, 0x33, 0x04, 0xA4, 0x0F,
0x8F, 0x48, 0x7B, 0xC5, 0xED, 0x9D, 0xC2, 0x03,
0x32, 0x4C, 0xFB, 0x5E, 0x29, 0xF4, 0x04, 0x5A,
0xA8, 0xF6, 0xB8, 0x4C, 0xB9, 0xD1, 0x95, 0x39,
0xBA, 0x8C, 0x62, 0xBE, 0x7F, 0x15, 0xCB, 0xF7,
0x7B, 0xA8, 0x11, 0x5C, 0xDF, 0x36, 0xA3, 0xAA,
0xC6, 0xC2, 0xC8, 0xC5, 0x4D, 0xC9, 0x44, 0x9E,
0xC1, 0xA8, 0xF3, 0x14, 0xBF, 0xF9, 0x7C, 0xD9,
0x59, 0x02, 0xE5, 0x59, 0x3A, 0x0C, 0x45, 0x9A,
0xC6, 0xD0, 0x5C, 0x21, 0x47, 0xDC, 0x41, 0xD7,
0x07, 0xEE, 0xFC, 0xEE, 0x7B, 0x62, 0x39, 0xC3,
0x64, 0x8E, 0xD7, 0xC0, 0xF3, 0x2D, 0xA1, 0x46,
0xEF, 0xBC, 0xE2, 0x8B, 0xD7, 0xE4, 0x16, 0x83,
0x06, 0xDC, 0x81, 0xBF, 0xD5, 0xCB, 0xDD, 0x56,
0xC8, 0x2E, 0xFB, 0xC4, 0xA6, 0x3B, 0x67, 0xD4,
0xA5, 0x47, 0x07, 0x7C, 0x8B, 0x28, 0xC8, 0xCA,
0xD1, 0x98, 0x3D, 0xC0, 0xCD, 0x9D, 0x43, 0x3F,
0xCD, 0xE9, 0xA4, 0xE4, 0x42, 0x41, 0xC0, 0xF3,
0xDF, 0xDD, 0x2B, 0x35, 0xC3, 0xD1, 0x53, 0xDE,
0x99, 0x6E, 0x27, 0x76, 0xB9, 0xA6, 0xB6, 0xB2,
0x54, 0x71, 0xD9, 0x66, 0x90, 0x30, 0xCF, 0x5B,
0xB2, 0x13, 0xEA, 0x3D, 0x40, 0x78, 0x2C, 0x7A,
0x21, 0x58, 0xEC, 0x2B, 0xC8, 0xA1, 0x81, 0xEE,
0x54, 0xA0, 0xDB, 0xD8, 0xB3, 0x66, 0x31, 0x4C,
0xC9, 0x25, 0x9B, 0xE7, 0x93, 0x9B, 0xC1, 0x63,
0x49, 0x75, 0x78, 0x75, 0x83, 0xAE, 0x65, 0xB9,
0x61, 0xFA, 0xA7, 0x93, 0xA7, 0x27, 0x77, 0x11,
0xEA, 0x7A, 0xCA, 0xD0, 0xAD, 0x22, 0xFA, 0xE3,
0x88, 0x8E, 0x68, 0xB2, 0x4C, 0xDA, 0x1C, 0xE2,
0x25, 0x2D, 0x71, 0x39, 0xC1, 0x20, 0xB1, 0x7B,
0x74, 0x23, 0xBF, 0x5B, 0x57, 0xDE, 0xB8, 0x52,
0x72, 0x98, 0x97, 0x8B, 0xDD, 0x98, 0xD9, 0xC3,
0xE4, 0x8C, 0x24, 0x33, 0x2F, 0xEA, 0xE4, 0x68,
0xDB, 0x57, 0xF9, 0x35, 0xAF, 0x0A, 0x54, 0x8E,
0x2F, 0x2D, 0x98, 0x6E, 0xCA, 0x45, 0xC9, 0xBE,
0xFD, 0x96, 0xE6, 0x34, 0x76, 0x84, 0x91, 0x3B,
0x33, 0xF8, 0xB3, 0xD4, 0xB0, 0xC7, 0x20, 0x7E,
0x02, 0x11, 0x38, 0x17, 0x00, 0xA7, 0x92, 0xBC,
0x65, 0x74, 0x97, 0xBA, 0xF6, 0xD7, 0x2F, 0x62,
0xA3, 0x12, 0x5D, 0xF8, 0xAC, 0xA3, 0xE6, 0x95,
0xC7, 0xB1, 0xFA, 0x05, 0x44, 0x6E, 0xD1, 0xB3,
0x2C, 0x75, 0x50, 0x89, 0x69, 0x36, 0xB0, 0xD4,
0xEC, 0x56, 0x21, 0x2B, 0xCF, 0x12, 0x6E, 0x4B,
0x76, 0xA6, 0x9E, 0x06, 0xB5, 0xB0, 0x9E, 0x1E,
0xF7, 0x93, 0xDF, 0x30, 0x60, 0xDB, 0xFD, 0x92,
0xEC, 0xA1, 0x65, 0x3A, 0x9E, 0xF2, 0xF2, 0xA2,
0x99, 0x2F, 0x99, 0xAC, 0x4B, 0x71, 0x0A, 0x83,
0x8B, 0xF1, 0x50, 0x86, 0xC4, 0x6A, 0x7C, 0x24,
0x17, 0x7A, 0x45, 0xC3, 0x77, 0x0B, 0xAA, 0xA8,
0xDA, 0xB2, 0x9C, 0xD5, 0x55, 0x18, 0x9D, 0xF2,
0x40, 0x5A, 0x65, 0x2B, 0x5C, 0x70, 0x88, 0x1A,
0xF6, 0x8F, 0x17, 0xA7, 0x10, 0x8B, 0x46, 0xF0,
0x79, 0x43, 0x10, 0x2A, 0xFE, 0xF9, 0xDA, 0x82,
0x8A, 0xC3, 0x1B, 0x09, 0x42, 0xE4, 0xF5, 0x91,
0xB4, 0x37, 0xE8, 0x94, 0xF7, 0x8E, 0x6C, 0x1A,
0xCE, 0x1B, 0x96, 0x96, 0xCA, 0xD1, 0xBE, 0xD3,
0x74, 0xC9, 0x25, 0xD0, 0x6C, 0xA4, 0x94, 0xAB,
0x8E, 0xF1, 0x05, 0x7F, 0x18, 0x93, 0x40, 0x4A,
0xCB, 0x1F, 0x89, 0xD4, 0x13, 0x45, 0x3C, 0x90,
0x25, 0x33, 0x73, 0x7F, 0x2A, 0xF8, 0xAB, 0x17,
0x5C, 0xEA, 0x69, 0x25, 0x33, 0x07, 0xDB, 0xB1,
0x7D, 0x5A, 0x7E, 0xE5, 0x8D, 0x62, 0xC0, 0xEB,
0x5A, 0x70, 0xAA, 0xD7, 0xA1, 0x13, 0x7B, 0x89,
0x10, 0x73, 0x52, 0x8E, 0x61, 0xBD, 0xD0, 0x09,
0x86, 0x83, 0xC0, 0x92, 0xC6, 0x1F, 0xB3, 0x21,
0xE9, 0x19, 0xAB, 0xE7, 0x55, 0x8C, 0xBC, 0x41,
0x34, 0x87, 0xB0, 0x8B, 0x98, 0x73, 0xAD, 0x12,
0xA4, 0x77, 0xD7, 0xEF, 0xA6, 0xDC, 0xF3, 0xF4,
0x45, 0x6F, 0x10, 0x86, 0x9D, 0xE7, 0x22, 0x85,
0x6A, 0x4A, 0xB2, 0x34, 0x25, 0x4E, 0x77, 0x17,
0x2E, 0xBF, 0x01, 0xD9, 0xEC, 0xE3, 0x59, 0x36,
0xF5, 0xDC, 0xA7, 0xD1, 0x2E, 0x12, 0xD7, 0x28,
0xEE, 0x8B, 0x3A, 0x6C, 0x2B, 0x5E, 0x2C, 0x6C,
0x91, 0x0B, 0xB5, 0x75, 0xB0, 0xE5, 0x36, 0x3A,
0x1C, 0x76, 0x00, 0xB1, 0x91, 0xDF, 0x02, 0x02,
0x18, 0x40, 0x68, 0x5E, 0x2B, 0x1A, 0x42, 0xED,
0xD7, 0xB4, 0x26, 0xB0, 0xE4, 0x7E, 0xD4, 0x61,
0xF4, 0x77, 0xDB, 0x59, 0xAC, 0x8E, 0x3D, 0x76,
0xD3, 0x09, 0x12, 0xFE, 0x7B, 0xE3, 0x2C, 0x83,
0x22, 0x3D, 0xBC, 0xC3, 0xD3, 0xB2, 0xF6, 0x94,
0x53, 0xC6, 0xB6, 0xC1, 0x3E, 0x46, 0x21, 0xF0,
0x29, 0xAC, 0x47, 0x8B, 0xCD, 0x85, 0xD0, 0x99,
0x29, 0xD1, 0x9A, 0xAD, 0xA0, 0x6D, 0x5B, 0xC5,
0x26, 0x71, 0x49, 0x2D, 0x5B, 0x96, 0xBB, 0x67,
0xB7, 0x9E, 0xD1, 0x09, 0xAB, 0xB0, 0x15, 0xA8,
0xC1, 0xC5, 0x1E, 0xB8, 0xC8, 0x06, 0x36, 0x6E,
0xF0, 0x2F, 0x00, 0xAA, 0xF3, 0xF7, 0x16, 0xD4,
0x39, 0x77, 0xB2, 0xC8, 0xF5, 0x83, 0x53, 0xB2,
0x58, 0x18, 0x5A, 0xF5, 0xA1, 0xBB, 0xB6, 0x14,
0x54, 0xE0, 0x83, 0x8C, 0x52, 0x4E, 0xB1, 0xC2,
0xFE, 0x7C, 0xA5, 0xE1, 0x6A, 0x01, 0xDE, 0xBF,
0x6F, 0xED, 0x9D, 0xC1, 0xD9, 0x35, 0x82, 0xC2,
0x88, 0x10, 0x35, 0xF3, 0x95, 0x61, 0x09, 0xC0,
0x75, 0x19, 0x9D, 0xB5, 0x1D, 0x98, 0x87, 0x63,
0x28, 0x17, 0xEF, 0x40, 0xF8, 0x05, 0x3C, 0x90,
0xDE, 0x6F, 0xAF, 0x45, 0x3A, 0x68, 0x0F, 0xE5,
0x9F, 0x64, 0x48, 0x6E, 0xFB, 0xA0, 0x11, 0x39,
0xB8, 0x8C, 0x8F, 0xDE, 0xDF, 0x24, 0xFB, 0x1B,
0x41, 0x5B, 0x43, 0xB2, 0x93, 0x7E, 0xB0, 0x54,
0x9B, 0x9A, 0x8B, 0x7F, 0x4C, 0xD9, 0xBC, 0x66,
0xEF, 0xEE, 0x76, 0xD3, 0x48, 0x75, 0xD3, 0x0C,
0xB2, 0x56, 0x7E, 0xB5, 0x4E, 0x2B, 0x53, 0xB8,
0x1E, 0xA4, 0x05, 0x25, 0x2F, 0xEC, 0xC1, 0x19,
0xB8, 0x0A, 0xD5, 0x9D, 0x44, 0x46, 0x4F, 0x92,
0xCE, 0x8E, 0xA4, 0x8E, 0xEE, 0xDB, 0x54, 0xC4,
0xF7, 0x92, 0x8E, 0xE4, 0x1C, 0xEA, 0xD2, 0x06,
0x93, 0x51, 0x99, 0x84, 0xBF, 0xCA, 0xF3, 0xE8,
0x4B, 0x5B, 0x34, 0xCA, 0x55, 0x69, 0x8C, 0xB5,
0x90, 0x1F, 0xB7, 0x0D, 0x66, 0xCF, 0x99, 0xEF,
0x1D, 0x5F, 0xE3, 0x1B, 0xFE, 0xA0, 0xBE, 0xD1,
0x76, 0xBB, 0x64, 0xBC, 0x39, 0x94, 0xCB, 0xD1,
0x68, 0x2B, 0x4B, 0x34, 0xB6, 0x00, 0x38, 0x1D,
0x89, 0x7B, 0x93, 0xBA, 0x20, 0x4F, 0xA5, 0x19,
0xB7, 0xD8, 0xA4, 0x04, 0xAA, 0x87, 0x5B, 0xE7,
0x9B, 0x42, 0xCA, 0xBB, 0x91, 0xC7, 0xCD, 0xDF,
0x25, 0x14, 0xBD, 0x07, 0x9A, 0xC6, 0x17, 0x14,
0x0E, 0x82, 0x1E, 0x04, 0x93, 0x55, 0x7D, 0xCE,
0x5A, 0x1A, 0xF2, 0x4B, 0xD3, 0xDC, 0xED, 0x14,
0xD5, 0x40, 0x31, 0x6B, 0xBC, 0xDF, 0x7D, 0x20,
0x94, 0xB5, 0x32, 0x6E, 0x36, 0x7A, 0xED, 0xE8,
0x73, 0x10, 0x39, 0x56, 0x34, 0xDF, 0x27, 0x9C,
0x9B, 0x41, 0xF5, 0x9E, 0x30, 0xDD, 0xB9, 0x23,
0xFA, 0x13, 0xFB, 0xBA, 0xAE, 0x5B, 0x61, 0x9D,
0xCA, 0xA9, 0x4B, 0x98, 0xBE, 0xD6, 0x80, 0xE5,
0x0E, 0xFE, 0xCC, 0x1D, 0x75, 0xE9, 0xA4, 0x0E,
0x0E, 0x6A, 0xCF, 0xA9, 0x71, 0xC5, 0x04, 0xE2,
0xDE, 0x17, 0x8F, 0x94, 0x5D, 0xB3, 0xFB, 0x67,
0xDE, 0x8D, 0xAE, 0xAF, 0x67, 0x98, 0x93, 0x59,
0x31, 0x2E, 0xB9, 0xC5, 0xCC, 0x70, 0xFC, 0xB1,
0x47, 0xB0, 0xA5, 0x19, 0x4F, 0xD0, 0x11, 0x1D,
0x57, 0xA8, 0x50, 0xE6, 0xBA, 0x67, 0xD1, 0x87,
0xE2, 0xFE, 0x01, 0xE2, 0x66, 0x7D, 0xEB, 0x8F,
0x33, 0x78, 0xE7, 0xBB, 0xAE, 0x70, 0x33, 0x12,
0xDA, 0x33, 0x9C, 0x99, 0x7B, 0x3D, 0x25, 0xA1,
0x37, 0x23, 0xA3, 0x9C, 0xBD, 0xF2, 0x69, 0x0B,
0xEB, 0x98, 0xE5, 0x5C, 0xED, 0x40, 0x4E, 0xD4,
0x66, 0xBB, 0x39, 0x6C, 0x8F, 0xE6, 0x4C, 0xBC,
0x5F, 0x0C, 0xD9, 0xD7, 0xAC, 0x45, 0x85, 0x3A,
0x54, 0xE4, 0xEC, 0xA2, 0x5A, 0xD2, 0x45, 0xFE,
0x0F, 0xF7, 0x03, 0x4A, 0x35, 0x9D, 0x7D, 0x74,
0x21, 0xD2, 0x93, 0x44, 0xE3, 0xCE, 0x4C, 0x3D,
0x66, 0x58, 0x7F, 0x80, 0x95, 0x28, 0x76, 0xB4,
0x81, 0x48, 0x91, 0xE6, 0x83, 0x82, 0xEA, 0x70,
0x60, 0xB9, 0xFB, 0xD8, 0x6E, 0x53, 0x40, 0xBC,
0xB7, 0x9A, 0xDA, 0xAF, 0x20, 0x26, 0x38, 0x21,
0x86, 0x36, 0xB3, 0x3F, 0xEB, 0x20, 0x3C, 0xDD,
0x95, 0xAC, 0xF4, 0x54, 0x2F, 0x7F, 0xDD, 0x6A,
0xF3, 0x79, 0x75, 0x33, 0xCE, 0x1D, 0x5A, 0xF8,
0x7D, 0xF0, 0xF3, 0x1B, 0xB8, 0xE7, 0x15, 0xF4,
0x54, 0xBF, 0x9B, 0xC1, 0x64, 0x69, 0x1B, 0x80,
0x63, 0x6C, 0x7C, 0xD7, 0x52, 0x46, 0xA4, 0xF9,
0xDF, 0xD4, 0x13, 0x87, 0x8B, 0xB6, 0x8F, 0x76,
0xC7, 0xB0, 0xC3, 0xF1, 0x22, 0x11, 0xE5, 0x44,
0x62, 0x13, 0x5A, 0xB3, 0xB2, 0x43, 0x58, 0x6B,
0xBF, 0xE3, 0x8C, 0x5E, 0xDF, 0x52, 0xC0, 0x2C,
0x37, 0x67, 0x7B, 0x02, 0xD7, 0xDD, 0xA4, 0x80,
0xEA, 0xB7, 0x2D, 0xA2, 0xD1, 0x9F, 0xAF, 0x9B,
0x47, 0x4C, 0x14, 0xC0, 0x8A, 0xE7, 0x37, 0x69,
0x7E, 0x70, 0x89, 0xD3, 0xCD, 0x21, 0xB9, 0x0D,
0x0E, 0xCD, 0x51, 0xCD, 0xE9, 0x4E, 0x5F, 0x65,
0x3C, 0xE1, 0x17, 0x98, 0x3A, 0x8D, 0x77, 0x88,
0x96, 0x87, 0xEE, 0x96, 0xA2, 0x93, 0xFC, 0x47,
0x75, 0x6F, 0xD7, 0x25, 0x0F, 0x2E, 0x12, 0xA8,
0x7A, 0xA4, 0x3A, 0x19, 0xF4, 0xC5, 0x81, 0x70,
0x0E, 0x0C, 0x63, 0x40, 0xD1, 0xD9, 0x41, 0x97,
0xE4, 0xE0, 0x0E, 0xE1, 0xAD, 0x84, 0xED, 0xD1,
0x78, 0x3B, 0xDC, 0x3F, 0x99, 0xF7, 0x4F, 0x0D,
0x8F, 0x88, 0xD8, 0x10, 0x2D, 0xFE, 0xD2, 0xED
};

Structure "Folder"

typedef struct
{
   unsigned char  type;
   unsigned int   index;
   unsigned int   parent;
   unsigned short lg_nom;
   char           nom[];
} VSFFOLDER, *LPVSFFOLDER;

Structure "File"

typedef struct
{
   unsigned char  type;
   unsigned int   offset;
   unsigned short lg_nom;
   char           nom[];
} VSFFILE, *LPVSFFILE;

Structure "Object"

typedef struct
{
   unsigned long id_folder;
   union
   {
      unsigned char type_pack;
      unsigned char pal_datas;
   };
   unsigned char  dummy1;
   unsigned short lg_sprite;
   unsigned short ht_sprite;
   short          offset_x;
   short          offset_y;
   short          offset_x2;
   short          offset_y2;
   unsigned char  dummy2[2];
   unsigned int   flag_floor;
   unsigned char  color_key;
   unsigned char  dummy3[3];
   unsigned int   lg_datas;
   unsigned char  datas;
} VSFOBJECT, *LPVSFOBJECT;