#include <glib.h>
#include <sys/types.h>
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <merc.h>
#include <tables.h>
/* wiznet table and prototype for future flag setting */
const struct wiznet_type wiznet_table [] =
{
{ "on", WIZ_ON, LEVEL_IMMORTAL },
{ "prefix", WIZ_PREFIX, LEVEL_IMMORTAL },
{ "ticks", WIZ_TICKS, LEVEL_IMMORTAL },
{ "logins", WIZ_LOGINS, LEVEL_IMMORTAL },
{ "sites", WIZ_SITES, LEVEL_QUESTMAKER },
{ "decap", WIZ_DECAP, LEVEL_QUESTMAKER },
{ "newbies", WIZ_NEWBIE, LEVEL_IMMORTAL },
{ "spam", WIZ_SPAM, LEVEL_QUESTMAKER },
{ "deaths", WIZ_DEATHS, LEVEL_IMMORTAL },
{ "resets", WIZ_RESETS, LEVEL_QUESTMAKER },
{ "debug", WIZ_DEBUG, LEVEL_JUDGE },
{ "flags", WIZ_FLAGS, LEVEL_QUESTMAKER },
{ "penalties", WIZ_PENALTIES, LEVEL_QUESTMAKER },
{ "saccing", WIZ_SACCING, LEVEL_QUESTMAKER },
{ "levels", WIZ_LEVELS, LEVEL_IMMORTAL },
{ "load", WIZ_LOAD, LEVEL_QUESTMAKER },
{ "restore", WIZ_RESTORE, LEVEL_QUESTMAKER },
{ "snoops", WIZ_SNOOPS, LEVEL_QUESTMAKER },
{ "switches", WIZ_SWITCHES, LEVEL_QUESTMAKER },
{ "general", WIZ_GENERAL, LEVEL_IMMORTAL },
{ "link", WIZ_LINK, LEVEL_QUESTMAKER },
{ "board", WIZ_BOARD, LEVEL_IMMORTAL },
{ "glibdebug", WIZ_GLIB, LEVEL_IMPLEMENTOR},
{ NULL, 0, 0 }
};
/* Sect table, cause I hated how they were set up. */
const struct sect_type sect_table[]=
{
{ SECT_INDEPENDENT, "Independent", SPC_INDEPENDENT, "{W","Independent" },
{ SECT_SABBAT , "Sabbat", SPC_SABBAT , "{R","Sabbat" },
{ SECT_CAMARILLA, "Camarilla", SPC_CAMARILLA , "{C","Camarilla" },
{ SECT_FOLLOWERS, "Followers", SPC_FOLLOWERS , "{B","Followers" },
{ SECT_WYRM , "Wyrm", SPC_WYRM , "{M","Wyrm" },
//{ SECT_PACK , "The Pack", SPC_PACK , "{g","ThePack" },
{ SECT_PACK , "The Pack", SPC_PACK , "{g","ThePack" },
{ SECT_NEWPACK, "New Pack", SPC_NEWPACK , "{G","NewPack" },
{ SECT_TECHNOCRACY, "Technocracy", SPC_TECHNOCRACY, "{Y","Technocracy" },
{ SECT_TRADITIONS, "Traditions", SPC_TRADITIONS , "{y","Traditions" },
{ SECT_ANARCHS, "Anarchs", SPC_ANARCH , "{R","Anarchs" },
{ SECT_INCONNU, "Inconnu", SPC_INCONNU , "{W","Inconnu" },
{ SECT_NEPHANDI, "Nephandi", 0 , "{m","Nephandi" }, /* New Sect for Mages */
{ SECT_MARAUDERS, "Marauders", 0 , "{c","Marauders" }, /* New Sect for Mages */
{ SECT_MARAUDERS, "Marauders", 0 , "{c","Marauders" } /* New Sect for Mages */
};
const struct iclan_type iclan_table []=
{
{ CLAN_NONE , "Clanless", SPC_INDEPENDENT, "{C", CLASS_MAGE },
{ CLAN_BAALI , "Baali", SPC_INDEPENDENT, "{R", CLASS_VAMPIRE },
{ CLAN_BLOOD_BROTHERS,"BloodBros", SPC_INDEPENDENT, "{R", CLASS_VAMPIRE },
{ CLAN_BRUJAH , "Brujah", SPC_CAMARILLA, "{R", CLASS_VAMPIRE },
{ CLAN_CAPPADOCIANS, "Cappadocian", SPC_INDEPENDENT, "{R", CLASS_VAMPIRE },
{ CLAN_HARBINGERS_OF_SKULLS,"Harbingers", SPC_INDEPENDENT, "{R", CLASS_VAMPIRE },
{ CLAN_DAUGHTERS_OF_CACOPHONY,"Daughters", SPC_INDEPENDENT, "{R", CLASS_VAMPIRE },
{ CLAN_GANGREL , "Gangrel", SPC_CAMARILLA, "{R", CLASS_VAMPIRE },
{ CLAN_GARGOYLES , "Gargoyles", SPC_INDEPENDENT, "{R", CLASS_VAMPIRE },
{ CLAN_GIOVANNI , "Giovanni", SPC_INDEPENDENT, "{R", CLASS_VAMPIRE },
{ CLAN_KINDRED_OF_THE_EAST, "KindredEast", SPC_INDEPENDENT, "{R", CLASS_VAMPIRE },
{ CLAN_LASOMBRA , "Lasombra", SPC_SABBAT, "{R", CLASS_VAMPIRE },
{ CLAN_LAMIA , "Lamia", SPC_INDEPENDENT, "{R", CLASS_VAMPIRE },
{ CLAN_LHIANNAN , "Lhiannan", SPC_INDEPENDENT, "{R", CLASS_VAMPIRE },
{ CLAN_LIABON , "Liabon", SPC_INDEPENDENT, "{R", CLASS_VAMPIRE },
{ CLAN_MALKAVIAN , "Malkavian", SPC_CAMARILLA, "{R", CLASS_VAMPIRE },
{ CLAN_NAGARAJA , "Nagaraja", SPC_INDEPENDENT, "{R", CLASS_VAMPIRE },
{ CLAN_NOSFERATU , "Nosferatu", SPC_CAMARILLA, "{R", CLASS_VAMPIRE },
{ CLAN_NICTUKU , "Nictuku", SPC_INDEPENDENT, "{R", CLASS_VAMPIRE },
{ CLAN_RAVNOS , "Ravnos", SPC_INDEPENDENT, "{R", CLASS_VAMPIRE },
{ CLAN_SALUBRI , "Salubri", SPC_INDEPENDENT, "{R", CLASS_VAMPIRE },
{ CLAN_SAMEDI , "Samedi", SPC_INDEPENDENT, "{R", CLASS_VAMPIRE },
{ CLAN_SETITES , "Setites", SPC_FOLLOWERS, "{R", CLASS_VAMPIRE },
{ CLAN_TOREADOR , "Toreador", SPC_CAMARILLA, "{R", CLASS_VAMPIRE },
{ CLAN_TREMERE , "Tremere", SPC_CAMARILLA, "{R", CLASS_VAMPIRE },
{ CLAN_TRUE_BRUJAH, "TrueBrujah", SPC_INDEPENDENT, "{R", CLASS_VAMPIRE },
{ CLAN_TZIMISCE , "Tzimisce", SPC_SABBAT, "{R", CLASS_VAMPIRE },
{ CLAN_VENTRUE , "Ventrue", SPC_CAMARILLA, "{R", CLASS_VAMPIRE },
{ CLAN_CATIFF , "Catiff", SPC_INDEPENDENT, "{R", CLASS_VAMPIRE },
{ TRIBE_BASTET , "Bastet", SPC_INDEPENDENT, "{G", CLASS_WEREWOLF },
{ TRIBE_BLACK_FURIES, "BlackFuries", SPC_INDEPENDENT, "{G", CLASS_WEREWOLF },
{ TRIBE_BSD, "BlackSpiral", SPC_WYRM, "{G", CLASS_WEREWOLF },
{ TRIBE_BONE_GNAWERS, "BoneGnawers", SPC_SABBAT, "{G", CLASS_WEREWOLF },
{ TRIBE_CHILD_OF_SPIRAL, "ChildofSpiral", SPC_INDEPENDENT, "{G", CLASS_WEREWOLF },
{ TRIBE_FIANNA , "Fianna", SPC_NEWPACK, "{G", CLASS_WEREWOLF },
{ TRIBE_GET_OF_FENRIS, "GetofFenris", SPC_NEWPACK, "{G", CLASS_WEREWOLF },
{ TRIBE_GLASSWALKERS, "GlassWalkers", SPC_INDEPENDENT, "{G", CLASS_WEREWOLF },
{ TRIBE_RED_TALONS, "RedTalons", SPC_INDEPENDENT, "{G", CLASS_WEREWOLF },
{ TRIBE_SHADOW_LORDS, "ShadowLords", SPC_NEWPACK, "{G", CLASS_WEREWOLF },
{ TRIBE_SILENT_STRIDERS, "SilentStrider", SPC_INDEPENDENT, "{G", CLASS_WEREWOLF },
{ TRIBE_SILVER_FANGS, "SilverFangs", SPC_PACK, "{G", CLASS_WEREWOLF },
{ TRIBE_STARGAZERS, "Stargazers", SPC_INDEPENDENT, "{G", CLASS_WEREWOLF },
{ TRIBE_UKTENA, "Uktena", SPC_INDEPENDENT, "{G", CLASS_WEREWOLF },
{ TRIBE_WENDIGO, "Wendigo", SPC_INDEPENDENT, "{G", CLASS_WEREWOLF },
{ TRIBE_RONIN, "Ronin", SPC_INDEPENDENT, "{G", CLASS_WEREWOLF },
{ CLAN_AKASHIC_BROTHERHOOD, "Akashic", SPC_INDEPENDENT, "{C", CLASS_MAGE },
{ CLAN_CELESTRIAL_CHORUS , "CelestChorus", SPC_INDEPENDENT, "{C", CLASS_MAGE },
{ CLAN_CULT_OF_ECSTASY , "CultEcstasy", SPC_INDEPENDENT, "{C", CLASS_MAGE },
{ CLAN_DREAMSPEAKERS , "Dreamspeakr", SPC_INDEPENDENT, "{C", CLASS_MAGE },
{ CLAN_EUTHANATOS , "Euthanatos", SPC_INDEPENDENT, "{C", CLASS_MAGE },
{ CLAN_HOLLOW_ONES , "HollowOnes", SPC_INDEPENDENT, "{C", CLASS_MAGE },
{ CLAN_ORDER_OF_HERMES , "OrderHermes", SPC_INDEPENDENT, "{C", CLASS_MAGE },
{ CLAN_SONS_OF_ETHER , "SonsEther", SPC_INDEPENDENT, "{C", CLASS_MAGE },
{ CLAN_VERBENA , "Verbena", SPC_INDEPENDENT, "{C", CLASS_MAGE },
{ CLAN_ITERATION_X , "IterationX", SPC_INDEPENDENT, "{C", CLASS_MAGE },
{ CLAN_PROGENITORS , "Progenitors", SPC_INDEPENDENT, "{C", CLASS_MAGE },
{ CLAN_SYNDICATE , "Syndicate", SPC_INDEPENDENT, "{C", CLASS_MAGE },
{ CLAN_NEW_WORLD_ORDER , "NewWorldOrder", SPC_INDEPENDENT, "{C", CLASS_MAGE },
{ CLAN_VOID_ENGINEERS , "VoidEngineer", SPC_INDEPENDENT, "{C", CLASS_MAGE },
{ CLAN_ASHAMED , "Ashamed", SPC_INDEPENDENT, "{C", CLASS_MAGE },
{ CLAN_ASSAMITES , "Assamites", SPC_INDEPENDENT, "{R", CLASS_VAMPIRE },
{ CLAN_GAKI , "Gaki", SPC_INDEPENDENT, "{R", CLASS_VAMPIRE },
{ CLAN_BUSHI , "Bushi", SPC_INDEPENDENT, "{R", CLASS_VAMPIRE },
{ CLAN_ASSAMITES , "Assamites", SPC_INDEPENDENT, "{R", CLASS_VAMPIRE },
{ CLAN_LEOPOLD , "Leopold", SPC_SOCIETY_LEO, "{R", CLASS_HUNTER }
};
const struct haunt_type breed_table[]=
{
{ "Homid" },
{ "Lupus" },
{ "Metis" }
};
const struct haunt_type auspice_table[]=
{
{ "Ragabash" },
{ "Theurge" },
{ "Philodox" },
{ "Galliard" },
{ "Ahroun" }
};
const struct haunt_type tribe_table[]=
{
{ "Black Furies" },
{ "Bone Gnawers" },
{ "Children of Gaia" },
{ "Fianna" },
{ "Get of Fenris" },
{ "Glass Walkers" },
{ "Red Talons" },
{ "Shadow Lords" },
{ "Silent Striders" },
{ "Silver Fangs" },
{ "Stargazers" },
{ "Uktena" },
{ "Wendigo" },
{ "Ronin" },
{ "Child of Spiral" },
{ "Black Spiral Dancers" }
};
const struct haunt_type disc_table[]=
{
{ "Abombwe" },
{ "Animalism" },
{ "Auspex" },
{ "Celerity" },
{ "Chimerstry" },
{ "Daimoinon" },
{ "Demios" },
{ "Dementation" },
{ "Dominate" },
{ "Fortitude" },
{ "Grotesquous" },
{ "Kai" },
{ "Melpominee" },
{ "Mortis" },
{ "Necromancy" },
{ "Nihilistics" },
{ "Obeah" },
{ "Obfuscate" },
{ "Obtenebration" },
{ "Ogham" },
{ "Potence" },
{ "Presence" },
{ "Protean" },
{ "Quietus" },
{ "Rift" },
{ "Sanguinus" },
{ "Serpentis" },
{ "Temporis" },
{ "Thanatosis" },
{ "Thaumaturgy" },
{ "Vicissitude" },
{ "Visceratika" },
{ "" }
};
const struct haunt_type stance_msg_table[]=
{
{""},
{"$n arches $s body into the viper fighting stance."},
{"$n swings $s body into the crane fighting stance."},
{"$n squats down into the crab fighting stance. "},
{"$n twists into the mongoose fighting stance. "},
{"$n hunches down into the bull fighting stance. "},
{"$n spins $s body into the mantis fighting stance."},
{"$n coils $s body into the dragon fighting stance."},
{"$n lunges into the tiger fighting stance."},
{"$n rotates $s body into the monkey fighting stance."},
{"$n slides into the swallow fighting stance."},
{ "" }
};
const struct haunt_type remember_table[]=
{
{"Your ass is mine!"}, //0
{"Did you think I have forgotten you?"},
{"Ah, we meet again!"},
{"Let's see how you fare this round!"},
{"My memory is not as short as your lifespan!"},
{"Did you think I have forgotten you? "}, //5
{"This time, to the death..."},
{"So you want to play rough do you?"},
{"You just saw your last fight!"},
{ "" }
};
const struct haunt_type haunt_table[]=
{
{"Someone examines you closely, looking for your weaknesses."},
{"The white aura around your body fades."},
{"Nah... You feel too relaxed..."},
{"You can't see a thing!"},
{"You have been killed!"},
{"You become visible."},
{"You dodge the web!"},
{"You have been stunned!"},
{"Someone's claw strikes you {Wtoo HARD to comprehend!{x"},
{"Someone's hit strikes you {Wtoo HARD to comprehend!{x"},
{"Someone's slap strikes you {Wtoo HARD to comprehend!{x"},
{ "" }
};
const struct mage_sphere_type mage_sphere_table[]=
{
{ "correspondence", SPHERE_CORRESPONDENCE },
{ "entropy", SPHERE_ENTROPY },
{ "forces", SPHERE_FORCES },
{ "mind", SPHERE_MIND },
{ "matter", SPHERE_MATTER },
{ "prime", SPHERE_PRIME },
{ "spirit", SPHERE_SPIRIT },
{ "life", SPHERE_LIFE },
{ "time", SPHERE_TIME },
{ "", 0 }
};
const struct renown_rank_type ragabash_table[]=
{
{ 0, 0, 0 }, //0
{ 1, 1, 1 },
{ 2, 3, 2 },
{ 4, 4, 4 },
{ 6, 5, 6 },
{ 8, 8, 7 }, //5
};
const struct renown_rank_type theurge_table[]=
{
{ 0, 0, 0 }, //0
{ 0, 0, 3 },
{ 1, 0, 5 },
{ 2, 1, 7 },
{ 4, 2, 9 },
{ 5, 3, 10 }, //5
};
const struct renown_rank_type philodox_table[]=
{
{ 0, 0, 0 }, //0
{ 0, 3, 0 },
{ 1, 5, 1 },
{ 3, 7, 4 },
{ 3, 9, 7 },
{ 4, 10, 9 }, //5
};
const struct renown_rank_type galliard_table[]=
{
{ 0, 0, 0 }, //0
{ 2, 0, 1 },
{ 4, 0, 3 },
{ 6, 1, 5 },
{ 8, 2, 6 },
{ 10, 3, 8 }, //5
};
const struct renown_rank_type ahroun_table[]=
{
{ 0, 0, 0 }, //0
{ 2, 1, 0 },
{ 5, 3, 1 },
{ 7, 5, 1 },
{ 9, 7, 2 },
{ 10, 8, 3 }, //5
};
const struct mage_spell_type mage_affect_table[]=
{
{ "Entropy Shield", "You are surrounded by an entropy shield.", "Your entropy shield fades away." },
{ "TrueSight", "You can see more clear.\n\r", "Your sight get muddled.\n\r" },
{ "Life Shield", "You are surrounded by a life shield.", "Your life shield fades away." },
{ "NightSight", "Your sight is no longer hindered by the dark.", "The darkness now affects your sight." },
{ "Shield", "You are now shielded.", "You are no longer shielded." },
{ "Force Shield", "You are surrounded by a force shield.", "Your force shield fades away." },
{ "Mind Shield", "You are surrounded by a mind shield.", "Your mind shield fades away." },
{ "Prime Shield", "You are surrounded by a prime shield.", "Your prime shield fades away." },
{ "Spirit Shield", "You are surrounded by a spirit shield.", "Your spirit shield fades away." },
{ "Mana Shield", "A blue shield surrounds your body.\n\r", "A blue shield fades from your body.\n\r" },
{ "Charged Bolt", "", "" },
{ "Shadowplane", "Your body becomes a shadow.\n\r", "You return to normal.\n\r" },
{ "Spiritplane", "Your body becomes a spirit.\n\r", "You return to normal.\n\r" },
{ "Shadowsight", "Your sight becomes a shadowed.\n\r", "Your sight returns to normal.\n\r" },
{ "Slowtime", "Your body becomes lag.\n\r", "The lag frees your body.\n\r" },
{ "Speedtime", "Your body becomes faster then light.\n\r", "You feel slow.\n\r" },
{ "Flames of Purification", "The Flames of Pureification burn at your inner soul.\n\r","The flames around your soul are freed" },
{ "Mist Poly", "You body becomes mist.\n\r","Your Body returns to normal.\n\r" },
{ "Nightfall", "","The Nightfall around your body disappears.\n\r" },
{ "Insane", "","Your feeling alot more sane.\n\r" },
{ "Haunt", "","Your personal demons are gone. (For now)\n\r" },
{ "Vanish","Your body dissapears in a shroud.\n\r","You start to see your skin as your shroud dissapears\n\r" },
{ "Tainted","Your mind becomes tainted.\n\r","Your mind becomes clear and you can think again.\n\r" },
{ "False Pride","You have a sence of pride in you!\n\r","You loose that sence of pride.\n\r"},
{ "Night Sight","Your eyes become alive in the night sky.\n\r","Your eyes loose that alive feeling.\n\r" },
{ "Cloak EQ", "Your eq dissapears.\n\r","Your eq appears instantly.\n\r"},
{ "Regen", "You feel as if you have the healing power of Garou!\n\r","You have lost your regeneration ability.\n\r"},
{ "Confuse Mind", "you feel confused.\n\r","You lost that confusion.\n\r"},
{ "Square Circle", "You concentrait on paradox.. and how to not get it.\n\r","You stop concentrating.\n\r"},
{ "Porcupine", "Long quill-like spines extend from your body.\n\r","The porcupine like quills retract from your body.\n\r"},
{ "Bacchantes' Rage", "You feel the Bacchantes' Rage.\n\r","The rage leaves your body.\n\r"},
{ "giftofspriggan", "You howl in rage as your body grows.\n\r","Your body shriks to normal.\n\r"},
{ "lunasavenger", "Your body has a erie aura aournd you.\n\r","Your body turns to normal as you are no longer are protected by luna's avenger.\n\r"},
{ "spiritsight", "Your eyes glows as you can now see the lands of the dead.\n\r","You can no longer notice spirits.\n\r"},
{ "Detectinvis", "\n\r","You can no longer detect invisable things.\n\r"},
{ "DetectMagic", "\n\r","You can no longer detect magic.\n\r"},
{ "DetectHidden", "\n\r","You can no longer detect hidden things.\n\r"},
{ "DetectEvil", "\n\r","You can no longer detect alignments.\n\r"},
{ "", "", "" }
};
/*
* Attribute bonus tables.
*/
const struct str_app_type str_app [26] =
{
{ -5, -4, 0, 0 }, /* 0 */
{ -5, -4, 3, 1 }, /* 1 */
{ -3, -2, 3, 2 },
{ -3, -1, 10, 3 }, /* 3 */
{ -2, -1, 25, 4 },
{ -2, -1, 55, 5 }, /* 5 */
{ -1, 0, 80, 6 },
{ -1, 0, 90, 7 },
{ 0, 0, 100, 8 },
{ 0, 0, 100, 9 },
{ 0, 0, 115, 10 }, /* 10 */
{ 0, 0, 115, 11 },
{ 0, 0, 140, 12 },
{ 0, 0, 140, 13 }, /* 13 */
{ 0, 1, 170, 14 },
{ 1, 1, 170, 15 }, /* 15 */
{ 1, 2, 195, 16 },
{ 2, 3, 220, 22 },
{ 2, 4, 250, 25 }, /* 18 */
{ 3, 5, 400, 30 },
{ 3, 6, 500, 35 }, /* 20 */
{ 4, 7, 600, 40 },
{ 5, 7, 700, 45 },
{ 6, 8, 800, 50 },
{ 8, 10, 900, 55 },
{ 10, 12, 999, 60 } /* 25 */
};
const struct int_app_type int_app [26] =
{
{ 1 }, /* 0 */
{ 1 }, /* 1 */
{ 1 },
{ 1 }, /* 3 */
{ 1 },
{ 1 }, /* 5 */
{ 1 },
{ 1 },
{ 1 },
{ 1 },
{ 1 }, /* 10 */
{ 1 },
{ 1 },
{ 2 },
{ 2 },
{ 2 }, /* 15 */
{ 2 },
{ 3 },
{ 3 }, /* 18 */
{ 3 },
{ 4 }, /* 20 */
{ 4 },
{ 4 },
{ 6 },
{ 6 },
{ 5 } /* 25 */
};
const struct wis_app_type wis_app [26] =
{
{ 0 }, /* 0 */
{ 0 }, /* 1 */
{ 0 },
{ 0 }, /* 3 */
{ 0 },
{ 1 }, /* 5 */
{ 1 },
{ 1 },
{ 1 },
{ 2 },
{ 2 }, /* 10 */
{ 2 },
{ 2 },
{ 2 },
{ 2 },
{ 3 }, /* 15 */
{ 3 },
{ 4 },
{ 5 }, /* 18 */
{ 5 },
{ 5 }, /* 20 */
{ 6 },
{ 6 },
{ 6 },
{ 6 },
{ 7 } /* 25 */
};
const struct dex_app_type dex_app [26] =
{
{ 60 }, /* 0 */
{ 50 }, /* 1 */
{ 50 },
{ 40 },
{ 30 },
{ 20 }, /* 5 */
{ 10 },
{ 0 },
{ 0 },
{ 0 },
{ 0 }, /* 10 */
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ - 10 }, /* 15 */
{ - 15 },
{ - 20 },
{ - 30 },
{ - 40 },
{ - 50 }, /* 20 */
{ - 60 },
{ - 75 },
{ - 90 },
{ -105 },
{ -120 } /* 25 */
};
const struct con_app_type con_app [26] =
{
{ -4, 20 }, /* 0 */
{ -3, 25 }, /* 1 */
{ -2, 30 },
{ -2, 35 }, /* 3 */
{ -1, 40 },
{ -1, 45 }, /* 5 */
{ -1, 50 },
{ 0, 55 },
{ 0, 60 },
{ 0, 65 },
{ 0, 70 }, /* 10 */
{ 0, 75 },
{ 0, 80 },
{ 0, 85 },
{ 0, 88 },
{ 1, 90 }, /* 15 */
{ 2, 95 },
{ 2, 97 },
{ 3, 99 }, /* 18 */
{ 3, 99 },
{ 4, 99 }, /* 20 */
{ 4, 99 },
{ 5, 99 },
{ 6, 99 },
{ 7, 99 },
{ 8, 99 } /* 25 */
};