diff --git a/docs/item-data.md b/docs/item-data.md index d107adb528..791ecec10f 100644 --- a/docs/item-data.md +++ b/docs/item-data.md @@ -180,7 +180,7 @@ variants or option words. An online keyword need not select the same items offli | `excellentBonus` | A fixed excellent bonus of damage and magic power instead of the [item stat file's](#item-stats-by-level) excellent term; left out = the term. The Chaos Dragon Axe has 15, the Chaos Nature Bow 30 and the Chaos Lightning Staff 25. The bmd import keeps it | | `excellentRaisesLevel` | `false`: excellent options do not raise the level requirement by the [item stat file's](#item-stats-by-level) `excellentLevelAdd`. Left out = they do. The shipped data has it on the Dragon Knight, Venom Mist, Sylphid Ray, Volcano, Sunlight and Storm Blitz armour, the Bone Blade, Explosion Blade, Soleil Scepter, Sylph Wind Bow, Grand Viper Staff and Storm Blitz Stick, the lucky items and the Horn of Fenrir. The bmd import keeps it | | `defense`, `magicDefense`, `blockRate` | Armor and shield values | -| `attackType` | Attack type used by the client | +| `attackType` | Which [ancient bonus](#item-options) an item of an ancient set has: 1 strength, 2 agility, 3 energy, 4 vitality, until the item sets link one | | `sellValue` | Value factor used by the price calculation of some items | | `buyPrice` | Fixed price; when set, it replaces the calculated price | | `requirements` | `level`, `strength`, `dexterity`, `energy`, `vitality`, `leadership`. The stat requirements of the orbs, crystals and scrolls (groups 12 and 15, without a slot) are the values the game asks for, as OpenMU stores them: their profiles keep them as they are. The original client's bmd files hold weights for them, which Import from bmd turns into the values and Export as bmd and Export as S6E3 turn back (the smallest weight that gives each value). Which ones convert follows the item's profile: a requirement it keeps as it is while the default grows it (an orb given the default profile holds weights like any item) | @@ -927,11 +927,12 @@ definitions: the files of `Data/Items/Options` hold the definitions, one file per option group, and each item names the ones it can have in its `options` list. Which of them an item has comes from the server: its item data turns them on (luck by the luck flag, the additional option by its -level, the excellent options by the excellent byte). Luck, the additional -option of the items that are no wings and the excellent options are in data +level, the excellent options by the excellent byte, the ancient bonus by +the ancient byte's bonus level). Luck, the additional option of the items +that are no wings, the excellent options and the ancient bonus are in data so far; the wings' and the Horn of Dinorant's options, the Wizard's rings', -the harmony, guardian, socket and pet options and the ancient bonus are -still code and move into data one group at a time. +the harmony, guardian, socket and pet options and the ancient set options +are still code and move into data one group at a time. ```json { @@ -959,9 +960,13 @@ still code and move into data one group at a time. low four bits, 1 to 15; Season 6 sends 1 to 4), its options numbered (`"number": 0`) by the option type the server sends in the byte's high four bits, their value by that level; `excellent` is the excellent byte, - its options numbered 1 to 6, each turned on by the byte's bit number - 1. - Each option group brings its type when it moves into data. An item links - at most one definition of a type. + its options numbered 1 to 6, each turned on by the byte's bit number - 1; + `ancientBonus` is the ancient byte's bonus level (its high four bits), + with one option without a number, its value by that level; + `ancientOption` is an ancient set's options, numbered from 1 (no + definition has it yet: the item sets bring them). Each option group + brings its type when it moves into data. An item links at most one + definition of a type. - `displayName`: the definition's name by language, English first. - `openMu` and `server`: OpenMU's labels of the same definition (its GUID and its English name, which the exchange with the server will match by) @@ -1039,8 +1044,9 @@ known difference from OpenMU) and the pendants 13/12, 13/25 and 13/27. Arrows and bolts have none, as on Season 6 and OpenMU. The Zen option is +30 %, Season 6's value; OpenMU has +40 %. "Level / 20" -divides the hero's level, as the client did; OpenMU divides level plus -master level (`totalLevel`). +divides level plus master level (`totalLevel`), rounded down, as the +Season 6 servers and OpenMU do; the client before divided the hero's level +only, so a level 400 hero with 200 master levels now gets +30, not +20. "Excellent" (the name's prefix and green colour, the excellent +15 durability, the tooltip state `excellent`, the ground label's excellent @@ -1057,6 +1063,26 @@ cent (what wear takes off the stats) reads it only for weapons, shields and armour, whose byte holds excellent options; wings pass no excellent flags to it. +`Options/Ancient.json` holds the ancient bonus, as OpenMU's "Ancient Bonus +of Total Strength" and the others: an item of an ancient set raises a stat +by its bonus level, +5 at level 1 and +10 at level 2. + +| Name | Attribute | Value | `attackType` | +|---|---|---|---| +| `ancientBonusStrength` | `totalStrength` | `[5, 10]` | 1 | +| `ancientBonusAgility` | `totalAgility` | `[5, 10]` | 2 | +| `ancientBonusEnergy` | `totalEnergy` | `[5, 10]` | 3 | +| `ancientBonusVitality` | `totalVitality` | `[5, 10]` | 4 | + +No item links them: until the item sets link a bonus to each item of a +set, the item's `attackType` picks the definition by these names (the last +column), as the code before them picked the stat. The attribute decides the +stat the bonus adds to (strength, agility, energy, vitality; another one +adds nothing), and the value list its value; a bonus level above the list +takes its last entry (servers send 1 and 2; the ancient byte holds up to +15). The elemental rings and pendants keep their second line, +"Increase Attribute Damage", in code until the item sets. + `Tooltips/OptionTexts.json` holds the lines' texts: ```json @@ -1188,8 +1214,9 @@ an option without `attribute` or with none or more than one of `add`, 0 to 65535 or that has `perLevel`, a term (`per`) without `attribute` or without exactly one of `times` and `divisor` (whole numbers from 1), a number used twice in a definition, an additional option's number above 15, -an excellent option's number outside 1 to 6, a luck definition with more -than one option or a numbered one, OpenMU +an excellent option's number outside 1 to 6, an ancient set option's +number below 1, a luck or ancient bonus definition with more than one +option or a numbered one, OpenMU labels or server values of the wrong kind, and a rule naming a definition that does not exist or a condition it does not have. Errors: an item linking a definition that does not exist (the link is left out) @@ -1203,8 +1230,13 @@ unknown fields, an attribute the client does not compute, a term on a hero attribute the client does not read, a text with `{divisor}` on an option without a term that has a divisor (the line shows 0 there) or with several (it shows the first one's), a definition no -item and no rule links, a text no option names and a text in a language -the game has no texts in. +item and no rule links (but the four ancient bonus definitions the item's +`attackType` picks), an item linking an ancient +bonus or set options (the link does nothing), an `attackType` above 4 (it +picks no ancient bonus), an ancient bonus name +`attackType` picks that no `ancientBonus` definition has (those items show +and add no bonus), a text no option names and a text in a language the +game has no texts in. --- diff --git a/src/MuEditor/UI/DataChecks/FileCheckArea.cpp b/src/MuEditor/UI/DataChecks/FileCheckArea.cpp index ef8318f896..b950a96513 100644 --- a/src/MuEditor/UI/DataChecks/FileCheckArea.cpp +++ b/src/MuEditor/UI/DataChecks/FileCheckArea.cpp @@ -144,6 +144,7 @@ std::unique_ptr CreateItemOptionCheckArea() if (!Data::Items::HasFatal(issues)) { Data::Items::ValidateOptionDefinitionUse(g_ItemDatabase.GetAllSlots(), options, issues); + Data::Items::ValidateAncientBonusNames(options, issues); } return issues; }, diff --git a/src/bin/Data/Items/Options/Ancient.json b/src/bin/Data/Items/Options/Ancient.json new file mode 100644 index 0000000000..81b805696a --- /dev/null +++ b/src/bin/Data/Items/Options/Ancient.json @@ -0,0 +1,89 @@ +{ + "formatVersion": 1, + "definitions": [ + { + "name": "ancientBonusStrength", + "type": "ancientBonus", + "displayName": { + "en": "Ancient bonus: strength", + "de": "Antiker Bonus: Stärke", + "es": "Bonificación antigua: fuerza", + "id": "Bonus kuno: kekuatan", + "ja": "エンシェントボーナス:力", + "pl": "Starożytny bonus: siła", + "pt": "Bônus ancestral: força", + "ru": "Древний бонус: сила", + "tl": "Sinaunang bonus: lakas", + "uk": "Стародавній бонус: сила", + "zh-TW": "遠古加成:力量" + }, + "openMu": {"id": "00000083-0030-09a3-0000-000000000000", "name": "Ancient Bonus of Total Strength"}, + "options": [ + {"attribute": "totalStrength", "add": {"values": [5, 10]}, "text": "increaseStrength"} + ] + }, + { + "name": "ancientBonusAgility", + "type": "ancientBonus", + "displayName": { + "en": "Ancient bonus: agility", + "de": "Antiker Bonus: Beweglichkeit", + "es": "Bonificación antigua: agilidad", + "id": "Bonus kuno: kelincahan", + "ja": "エンシェントボーナス:敏捷", + "pl": "Starożytny bonus: zwinność", + "pt": "Bônus ancestral: agilidade", + "ru": "Древний бонус: ловкость", + "tl": "Sinaunang bonus: liksi", + "uk": "Стародавній бонус: спритність", + "zh-TW": "遠古加成:敏捷" + }, + "openMu": {"id": "00000083-0030-1207-0000-000000000000", "name": "Ancient Bonus of Total Agility"}, + "options": [ + {"attribute": "totalAgility", "add": {"values": [5, 10]}, "text": "increaseAgility"} + ] + }, + { + "name": "ancientBonusEnergy", + "type": "ancientBonus", + "displayName": { + "en": "Ancient bonus: energy", + "de": "Antiker Bonus: Energie", + "es": "Bonificación antigua: energía", + "id": "Bonus kuno: energi", + "ja": "エンシェントボーナス:エナジー", + "pl": "Starożytny bonus: energia", + "pt": "Bônus ancestral: energia", + "ru": "Древний бонус: энергия", + "tl": "Sinaunang bonus: enerhiya", + "uk": "Стародавній бонус: енергія", + "zh-TW": "遠古加成:能量" + }, + "openMu": {"id": "00000083-0030-6b45-0000-000000000000", "name": "Ancient Bonus of Total Energy"}, + "options": [ + {"attribute": "totalEnergy", "add": {"values": [5, 10]}, "text": "increaseEnergy"} + ] + }, + { + "name": "ancientBonusVitality", + "type": "ancientBonus", + "displayName": { + "en": "Ancient bonus: vitality", + "de": "Antiker Bonus: Vitalität", + "es": "Bonificación antigua: vitalidad", + "id": "Bonus kuno: vitalitas", + "ja": "エンシェントボーナス:体力", + "pl": "Starożytny bonus: witalność", + "pt": "Bônus ancestral: vitalidade", + "ru": "Древний бонус: выносливость", + "tl": "Sinaunang bonus: tibay", + "uk": "Стародавній бонус: витривалість", + "zh-TW": "遠古加成:體力" + }, + "openMu": {"id": "00000083-0030-76e4-0000-000000000000", "name": "Ancient Bonus of Total Vitality"}, + "options": [ + {"attribute": "totalVitality", "add": {"values": [5, 10]}, "text": "increaseVitality"} + ] + } + ] +} diff --git a/src/bin/Data/Items/Options/Excellent.json b/src/bin/Data/Items/Options/Excellent.json index 477ded377f..0e814d1d75 100644 --- a/src/bin/Data/Items/Options/Excellent.json +++ b/src/bin/Data/Items/Options/Excellent.json @@ -51,7 +51,7 @@ {"number": 2, "attribute": "healthAfterMonsterKillMultiplier", "add": {"values": 8}, "text": "lifeAfterKill"}, {"number": 3, "attribute": "attackSpeedAny", "add": {"values": 7}, "text": "increaseAttackSpeed"}, {"number": 4, "attribute": "physicalBaseDmgIncrease", "percent": {"values": 2}, "text": "increaseDamagePercent"}, - {"number": 5, "attribute": "physicalBaseDmg", "add": {"values": 0, "per": [{"attribute": "level", "divisor": 20}]}, "text": "increaseDamageLevel20"}, + {"number": 5, "attribute": "physicalBaseDmg", "add": {"values": 0, "per": [{"attribute": "totalLevel", "divisor": 20}]}, "text": "increaseDamageLevel20"}, {"number": 6, "attribute": "excellentDamageChance", "percent": {"values": 10}, "text": "excellentDamageRate"} ] }, @@ -78,7 +78,7 @@ {"number": 2, "attribute": "healthAfterMonsterKillMultiplier", "add": {"values": 8}, "text": "lifeAfterKill"}, {"number": 3, "attribute": "attackSpeedAny", "add": {"values": 7}, "text": "increaseAttackSpeed"}, {"number": 4, "attribute": "wizardryBaseDmgIncrease", "percent": {"values": 2}, "text": "increaseWizardryPercent"}, - {"number": 5, "attribute": "wizardryBaseDmg", "add": {"values": 0, "per": [{"attribute": "level", "divisor": 20}]}, "text": "increaseWizardryLevel20"}, + {"number": 5, "attribute": "wizardryBaseDmg", "add": {"values": 0, "per": [{"attribute": "totalLevel", "divisor": 20}]}, "text": "increaseWizardryLevel20"}, {"number": 6, "attribute": "excellentDamageChance", "percent": {"values": 10}, "text": "excellentDamageRate"} ] } diff --git a/src/bin/Data/Items/Tooltips/OptionTexts.json b/src/bin/Data/Items/Tooltips/OptionTexts.json index b5c8ad659d..b55e9a0dd7 100644 --- a/src/bin/Data/Items/Tooltips/OptionTexts.json +++ b/src/bin/Data/Items/Tooltips/OptionTexts.json @@ -118,6 +118,19 @@ "uk": "Відмінний рівень шкоди +{value}%", "zh-TW": "優 破損率+{value}%" }, + "increaseAgility": { + "en": "Increase agility +{value}", + "de": "Beweglichkeit erhöhen +{value}", + "es": "Aumentar la agilidad +{value}", + "id": "Meningkatkan kelincahan +{value}", + "ja": "敏捷増加 +{value}", + "pl": "Zwiększa zwinność +{value}", + "pt": "Aumente a agilidade +{value}", + "ru": "Увеличение ловкости +{value}", + "tl": "Dagdagan ang liksi +{value}", + "uk": "Збільшення спритності +{value}", + "zh-TW": "增加敏捷性+{value}" + }, "increaseAttackSpeed": { "en": "Increase Attacking(Wizardry)speed +{value}", "de": "Erhöht Angriffsgeschwindigkeit (Zauberei) +{value}", @@ -157,6 +170,19 @@ "uk": "Збільшення шкоди +{value}%", "zh-TW": "增加傷害+{value}%" }, + "increaseEnergy": { + "en": "Increase energy +{value}", + "de": "Energie erhöhen +{value}", + "es": "Aumentar energía +{value}", + "id": "Meningkatkan energi +{value}", + "ja": "エナジー増加 +{value}", + "pl": "Zwiększa energię +{value}", + "pt": "Aumentar energia +{value}", + "ru": "Увеличение энергии +{value}", + "tl": "Dagdagan ang enerhiya +{value}", + "uk": "Збільшити енергію +{value}", + "zh-TW": "增加能量+{value}" + }, "increaseMaxHp": { "en": "Increase Max HP +{value}%", "de": "Erhöht max. HP +{value}%", @@ -183,6 +209,32 @@ "uk": "Збільшення максимальної мани +{value}%", "zh-TW": "增加最大法力 +{value}%" }, + "increaseStrength": { + "en": "Increase strength +{value}", + "de": "Stärke erhöhen +{value}", + "es": "Aumentar la fuerza +{value}", + "id": "Meningkatkan kekuatan +{value}", + "ja": "力増加 +{value}", + "pl": "Zwiększa siłę +{value}", + "pt": "Aumentar força +{value}", + "ru": "Увеличение силы +{value}", + "tl": "Dagdagan ang lakas +{value}", + "uk": "Збільшити силу +{value}", + "zh-TW": "增加強度+{value}" + }, + "increaseVitality": { + "en": "Increase stamina +{value}", + "de": "Vitalität erhöhen +{value}", + "es": "Aumentar la resistencia +{value}", + "id": "Meningkatkan stamina +{value}", + "ja": "体力増加 +{value}", + "pl": "Zwiększa wytrzymałość +{value}", + "pt": "Aumenta a resistência +{value}", + "ru": "Увеличение выносливости +{value}", + "tl": "Dagdagan ang tibay +{value}", + "uk": "Підвищення витривалості +{value}", + "zh-TW": "增加體力+{value}" + }, "increaseWizardryLevel20": { "en": "Increase Wizardry Dmg +level/{divisor}", "de": "Erhöht Zaubereischaden +Level/{divisor}", diff --git a/src/source/Data/DataHandler/ItemData/ItemDataHandler.cpp b/src/source/Data/DataHandler/ItemData/ItemDataHandler.cpp index 9342ea001e..d8fc09171b 100644 --- a/src/source/Data/DataHandler/ItemData/ItemDataHandler.cpp +++ b/src/source/Data/DataHandler/ItemData/ItemDataHandler.cpp @@ -79,6 +79,7 @@ ItemOptionDatabase LoadItemOptions(std::vector& items, std::vect } ValidateItemOptionLinks(items, options, issues); ValidateOptionDefinitionUse(items, options, issues); + ValidateAncientBonusNames(options, issues); for (ItemDefinition& item : items) { options.OrderLinks(item.options); diff --git a/src/source/Data/GameData/ItemData/ItemDataValidation.cpp b/src/source/Data/GameData/ItemData/ItemDataValidation.cpp index 8c229c4666..f048befec9 100644 --- a/src/source/Data/GameData/ItemData/ItemDataValidation.cpp +++ b/src/source/Data/GameData/ItemData/ItemDataValidation.cpp @@ -5,6 +5,7 @@ #include "ItemDescriptionPlaceholders.h" #include "ItemEnumNames.h" #include "ItemJsonFormat.h" +#include "ItemOptionDatabase.h" #include "ItemModelJsonFormat.h" #include "ItemTooltipLines.h" #include "ItemType.h" @@ -225,6 +226,19 @@ void ValidateExcellentBonus(const ItemDefinition& definition, std::vector& issues) +{ + if (definition.attackType > AncientBonusNames.size()) + { + AddIssue( + issues, ItemDataIssueSeverity::Warning, definition, + std::to_string(definition.attackType) + + " picks no ancient bonus (0: none, 1 strength, 2 agility, 3 energy, 4 vitality): the item has none", + "attackType"); + } +} + // Item files saved before the stat profiles have none; the item then has the // default until an edit or a bmd import gives it the profile its data gives. void ValidateStatProfileGiven(const ItemDefinition& definition, const ItemStatProfiles& profiles, @@ -366,6 +380,7 @@ void ValidateItems(std::span items, std::vector, ItemRequirementCount> ItemRequir {ItemRequirement::Leadership, "leadership"}, }}; -constexpr std::array, 3> ItemOptionTypeNames = {{ +constexpr std::array, 5> ItemOptionTypeNames = {{ {ItemOptionType::Luck, "luck"}, {ItemOptionType::Option, "option"}, {ItemOptionType::Excellent, "excellent"}, + {ItemOptionType::AncientOption, "ancientOption"}, + {ItemOptionType::AncientBonus, "ancientBonus"}, }}; constexpr std::array, ItemTextColorCount> ItemTextColorNames = {{ diff --git a/src/source/Data/GameData/ItemData/ItemOptionDatabase.cpp b/src/source/Data/GameData/ItemData/ItemOptionDatabase.cpp index 2b0b72f99c..e2554f7224 100644 --- a/src/source/Data/GameData/ItemData/ItemOptionDatabase.cpp +++ b/src/source/Data/GameData/ItemData/ItemOptionDatabase.cpp @@ -9,10 +9,13 @@ namespace Data::Items { namespace { -// The order the game takes an item's definitions in, by type (the tooltip shows their lines in it): wing options, -// the skill (no definition), luck, the additional option, the Dark Horse, excellent options, fixed options. -constexpr std::array TakeOrder = {ItemOptionType::Luck, ItemOptionType::Option, - ItemOptionType::Excellent}; +// The order the game takes an item's definitions in, by type (the tooltip shows the option slots' lines in it): wing +// options, the skill (no definition), luck, the additional option, the Dark Horse, excellent options, fixed options. +// The ancient types follow them only for the order of a saved list (names of no definition last): they take no slot, +// and the tooltip shows the ancient bonus above the slots' lines. +constexpr std::array TakeOrder = {ItemOptionType::Luck, ItemOptionType::Option, + ItemOptionType::Excellent, ItemOptionType::AncientOption, + ItemOptionType::AncientBonus}; size_t GetTakeOrder(ItemOptionType type) { @@ -46,6 +49,14 @@ ItemOptionDatabase::ItemOptionDatabase(std::vector definit { return definition.options[left].number > definition.options[right].number; }); } } + for (size_t attackType = 0; attackType < AncientBonusNames.size(); ++attackType) + { + const int index = Find(AncientBonusNames[attackType]); + if (index != NoDefinition && m_definitions[static_cast(index)].type == ItemOptionType::AncientBonus) + { + m_ancientBonuses[attackType] = index; + } + } } int ItemOptionDatabase::Find(std::string_view name) const diff --git a/src/source/Data/GameData/ItemData/ItemOptionDatabase.h b/src/source/Data/GameData/ItemData/ItemOptionDatabase.h index d663ac2cdd..92516ff889 100644 --- a/src/source/Data/GameData/ItemData/ItemOptionDatabase.h +++ b/src/source/Data/GameData/ItemData/ItemOptionDatabase.h @@ -4,6 +4,7 @@ #include "Data/GameData/ItemData/ItemOptionEffects.h" #include "Data/GameData/ItemData/OptionRule.h" +#include #include #include #include @@ -16,6 +17,10 @@ // options". namespace Data::Items { +// The ancient bonus definitions by the item's attackType 1 to 4, until the item sets link them (phase 10). +constexpr std::array AncientBonusNames = {"ancientBonusStrength", "ancientBonusAgility", + "ancientBonusEnergy", "ancientBonusVitality"}; + // A definition's index, as an item's resolved links hold it. using ItemOptionIndex = std::uint16_t; @@ -61,6 +66,16 @@ class ItemOptionDatabase return m_texts; } + // The ancient bonus definition an item of a set takes by its attackType (1 strength, 2 agility, 3 energy, + // 4 vitality: AncientBonusNames), or NoDefinition. Until the item sets link a bonus to each item of a set (phase + // 10), the item's attackType picks it, as the code before the definitions did; looked up when the options load. + int FindAncientBonus(int attackType) const + { + return attackType >= 1 && attackType <= static_cast(m_ancientBonuses.size()) + ? m_ancientBonuses[static_cast(attackType - 1)] + : NoDefinition; + } + // The option rules; empty in the game, which reads only the items' lists. std::span GetRules() const { @@ -80,6 +95,17 @@ class ItemOptionDatabase std::vector m_definitions; std::vector> m_effects; std::vector> m_optionOrders; + using AncientBonuses = std::array; + + // No ancient bonus for any attackType, what an empty database has. + static constexpr AncientBonuses NoAncientBonuses() + { + AncientBonuses none{}; + none.fill(NoDefinition); + return none; + } + + AncientBonuses m_ancientBonuses = NoAncientBonuses(); ItemOptionTexts m_texts; std::vector m_rules; }; diff --git a/src/source/Data/GameData/ItemData/ItemOptionDefinition.h b/src/source/Data/GameData/ItemData/ItemOptionDefinition.h index fd2d297e94..c7236e4e07 100644 --- a/src/source/Data/GameData/ItemData/ItemOptionDefinition.h +++ b/src/source/Data/GameData/ItemData/ItemOptionDefinition.h @@ -26,6 +26,13 @@ enum class ItemOptionType : BYTE Option, // The excellent byte (ITEM::ExcellentFlags); its options numbered 1 to 6, each on with the byte's bit number - 1. Excellent, + // An ancient set's options, numbered 1 to n in the order the set gives them. Known to the loader for the item sets + // (phase 10); no definition has it yet. + AncientOption, + // The ancient bonus of an item of a set; one option, its level the ancient byte's bonus level + // (ITEM::AncientBonusOption). Until the item sets link it, the item's attackType picks the definition + // (ItemOptionDatabase::FindAncientBonus). + AncientBonus, }; // An excellent option's number - 1 is its bit of the excellent byte, whose bits 0 to 5 hold them. diff --git a/src/source/Data/GameData/ItemData/ItemOptionEffects.cpp b/src/source/Data/GameData/ItemData/ItemOptionEffects.cpp index 290af9f953..9fad3ff401 100644 --- a/src/source/Data/GameData/ItemData/ItemOptionEffects.cpp +++ b/src/source/Data/GameData/ItemData/ItemOptionEffects.cpp @@ -22,7 +22,7 @@ struct EffectRow // (GameLogic::Combat::GetHeroCriticalDamageRate). The additional options write theirs. A magic sword's option // (baseDamageBonus) is one slot, AT_IMPROVE_DAMAGE, as before, which the stat code adds to the wizardry damage too; // its definition shows two lines. -constexpr std::array EffectRows = {{ +constexpr std::array EffectRows = {{ {ItemOptionType::Luck, "criticalDamageChance", ItemOptionAdd::Percent, {AT_LUCK, true}}, {ItemOptionType::Option, "physicalBaseDmg", ItemOptionAdd::Add, {AT_IMPROVE_DAMAGE, true}}, {ItemOptionType::Option, "baseDamageBonus", ItemOptionAdd::Add, {AT_IMPROVE_DAMAGE, true, true}}, @@ -50,6 +50,12 @@ constexpr std::array EffectRows = {{ {ItemOptionType::Excellent, "attackSpeedAny", ItemOptionAdd::Add, {AT_IMPROVE_ATTACK_SPEED, true}}, {ItemOptionType::Excellent, "healthAfterMonsterKillMultiplier", ItemOptionAdd::Add, {AT_IMPROVE_GAIN_LIFE, false}}, {ItemOptionType::Excellent, "manaAfterMonsterKillMultiplier", ItemOptionAdd::Add, {AT_IMPROVE_GAIN_MANA, false}}, + // The ancient bonus raises a stat, as the set options do: the stat code adds its value at the item's bonus level + // (CSItemOption::getAllAddState). It takes no option slot, so it writes no slot value. + {ItemOptionType::AncientBonus, "totalStrength", ItemOptionAdd::Add, {AT_SET_OPTION_IMPROVE_STRENGTH, false}}, + {ItemOptionType::AncientBonus, "totalAgility", ItemOptionAdd::Add, {AT_SET_OPTION_IMPROVE_DEXTERITY, false}}, + {ItemOptionType::AncientBonus, "totalEnergy", ItemOptionAdd::Add, {AT_SET_OPTION_IMPROVE_ENERGY, false}}, + {ItemOptionType::AncientBonus, "totalVitality", ItemOptionAdd::Add, {AT_SET_OPTION_IMPROVE_VITALITY, false}}, }}; } // namespace diff --git a/src/source/Data/GameData/ItemData/ItemOptionValidation.cpp b/src/source/Data/GameData/ItemData/ItemOptionValidation.cpp index ba262efe84..42250df6e5 100644 --- a/src/source/Data/GameData/ItemData/ItemOptionValidation.cpp +++ b/src/source/Data/GameData/ItemData/ItemOptionValidation.cpp @@ -16,6 +16,25 @@ namespace { constexpr const char* OptionsField = "options"; +// The types the item sets give an item (phase 10), which no item links. +bool IsAncientType(ItemOptionType type) +{ + return type == ItemOptionType::AncientOption || type == ItemOptionType::AncientBonus; +} + +// Whether an item's attackType picks the definition at `index` (ItemOptionDatabase::FindAncientBonus). +bool IsPickedByAttackType(const ItemOptionDatabase& options, size_t index) +{ + for (int attackType = 1; attackType <= static_cast(AncientBonusNames.size()); ++attackType) + { + if (options.FindAncientBonus(attackType) == static_cast(index)) + { + return true; + } + } + return false; +} + // A definition's problems name its file in Data/Items/Options and its place there. std::string DefinitionField(std::span definitions, size_t index) { @@ -186,6 +205,16 @@ void ValidateItemOptionLinks(std::span items, const ItemOp "links excellent options, but its excellent byte holds its wing options or a horn's kind, " "or nothing: no horn is excellent"}); } + // Until the item sets link them (phase 10), the item's attackType picks its ancient bonus; its set options come + // from its set (the ancient byte's set number). + const bool linksAncient = std::any_of(links.begin(), links.end(), [&options](ItemOptionIndex link) + { return IsAncientType(options.Get(link).type); }); + if (linksAncient) + { + issues.push_back({ItemDataIssueSeverity::Warning, "", item.group, item.number, OptionsField, + "links an ancient bonus or set options, which the item sets give: the link does " + "nothing, the item's attackType picks its ancient bonus"}); + } } } @@ -207,7 +236,8 @@ void ValidateOptionDefinitionUse(std::span items, const It const std::span definitions = options.GetDefinitions(); for (size_t index = 0; index < definitions.size(); ++index) { - if (!linked.contains(definitions[index].name)) + // The item's attackType links the four ancient bonus definitions of AncientBonusNames. + if (!linked.contains(definitions[index].name) && !IsPickedByAttackType(options, index)) { issues.push_back({ItemDataIssueSeverity::Warning, DefinitionSource(definitions[index]), ItemDataIssue::NoItem, ItemDataIssue::NoItem, @@ -216,4 +246,24 @@ void ValidateOptionDefinitionUse(std::span items, const It } } } + +void ValidateAncientBonusNames(const ItemOptionDatabase& options, std::vector& issues) +{ + for (size_t attackType = 0; attackType < AncientBonusNames.size(); ++attackType) + { + if (options.FindAncientBonus(static_cast(attackType) + 1) == ItemOptionDatabase::NoDefinition) + { + // The file of a definition of that name of another type, else the file the four belong in. + const int named = options.Find(AncientBonusNames[attackType]); + const std::string source = named != ItemOptionDatabase::NoDefinition + ? DefinitionSource(options.Get(static_cast(named))) + : std::string("Options/Ancient.json"); + issues.push_back( + {ItemDataIssueSeverity::Warning, source, ItemDataIssue::NoItem, ItemDataIssue::NoItem, "definitions", + "no definition of type ancientBonus is named \"" + std::string(AncientBonusNames[attackType]) + + "\": the ancient items with attackType " + std::to_string(attackType + 1) + + " show and add no ancient bonus"}); + } + } +} } // namespace Data::Items diff --git a/src/source/Data/GameData/ItemData/ItemOptionValidation.h b/src/source/Data/GameData/ItemData/ItemOptionValidation.h index 20eccc44d2..419f115068 100644 --- a/src/source/Data/GameData/ItemData/ItemOptionValidation.h +++ b/src/source/Data/GameData/ItemData/ItemOptionValidation.h @@ -23,13 +23,18 @@ void ValidateItemOptions(std::span definitions, cons void ValidateOptionRules(std::span rules, std::span definitions, const std::string& source, std::vector& issues); -// The items' links: a name of no definition (an error: the link is left out), and two definitions whose options the -// same part of the server's item data turns on (an error: the later one is left out). +// The items' links: a name of no definition (an error: the link is left out), two definitions whose options the +// same part of the server's item data turns on (an error: the later one is left out), excellent options on wings and +// horns (an error), and an ancient bonus or set options (a warning: the item sets give them, not the item's links). void ValidateItemOptionLinks(std::span items, const ItemOptionDatabase& options, std::vector& issues); // A definition neither an item nor a rule of `options` links (a warning; without the rules, as in the game, only the -// items count). +// items count), except the ancient bonus definitions the items' attackType picks. void ValidateOptionDefinitionUse(std::span items, const ItemOptionDatabase& options, std::vector& issues); + +// An ancient bonus name of AncientBonusNames with no definition of type ancientBonus (a warning: the items with that +// attackType show and add no bonus). +void ValidateAncientBonusNames(const ItemOptionDatabase& options, std::vector& issues); } // namespace Data::Items diff --git a/src/source/Data/GameData/ItemData/ItemOptionsJson.cpp b/src/source/Data/GameData/ItemData/ItemOptionsJson.cpp index dc305dbe09..a470145225 100644 --- a/src/source/Data/GameData/ItemData/ItemOptionsJson.cpp +++ b/src/source/Data/GameData/ItemData/ItemOptionsJson.cpp @@ -62,12 +62,19 @@ const KeySet TermKeys = {Keys::Attribute, Keys::Times, Keys::Divisor}; // option only. bool HasNumbers(ItemOptionType type) { - return type != ItemOptionType::Luck; + return type != ItemOptionType::Luck && type != ItemOptionType::AncientBonus; } bool HasOneOption(ItemOptionType type) { - return type == ItemOptionType::Luck; + return type == ItemOptionType::Luck || type == ItemOptionType::AncientBonus; +} + +// "a luck", "an ancientBonus": a type name with its article, for the messages. +std::string WithArticle(std::string_view name) +{ + const bool vowel = !name.empty() && std::string_view("aeiou").find(name.front()) != std::string_view::npos; + return (vowel ? "an " : "a ") + std::string(name); } bool IsGuid(std::string_view text) @@ -393,7 +400,7 @@ void ItemOptionsReader::ReadNumber(const OrderedJson& json, const std::string& f if (number != json.end()) { AddFatal(field + "." + Keys::Number, - std::string("a ") + FindEnumName(type) + " option has no number; leave it out"); + WithArticle(FindEnumName(type)) + " option has no number; leave it out"); } return; } @@ -402,7 +409,8 @@ void ItemOptionsReader::ReadNumber(const OrderedJson& json, const std::string& f AddFatal(field + "." + Keys::Number, "missing"); return; } - const int minimum = type == ItemOptionType::Excellent ? 1 : 0; + // Excellent options count from 1 (bit number - 1), an ancient set's options in the order the set gives them. + const int minimum = type == ItemOptionType::Excellent || type == ItemOptionType::AncientOption ? 1 : 0; const int maximum = type == ItemOptionType::Option ? MaxOptionTypeNumber : type == ItemOptionType::Excellent ? MaxExcellentOptionNumber : MaxNumber; @@ -469,7 +477,7 @@ void ItemOptionsReader::ReadOptions(const OrderedJson& json, const std::string& } if (HasOneOption(definition.type) && options->size() > 1) { - AddFatal(optionsField, std::string("a ") + FindEnumName(definition.type) + " definition has one option"); + AddFatal(optionsField, WithArticle(FindEnumName(definition.type)) + " definition has one option"); } std::set numbers; for (size_t index = 0; index < options->size(); ++index) diff --git a/src/source/Engine/Object/ItemTooltipSnapshot.cpp b/src/source/Engine/Object/ItemTooltipSnapshot.cpp index 6ed44d425b..e5ca882ac2 100644 --- a/src/source/Engine/Object/ItemTooltipSnapshot.cpp +++ b/src/source/Engine/Object/ItemTooltipSnapshot.cpp @@ -32,6 +32,13 @@ void ApplyOption(ItemCreationParams& params, BYTE level, BYTE type) params.OptionType = type; } +void ApplyAncientBonus(ItemCreationParams& params, BYTE level) +{ + params.IsAncient = true; + params.AncientDiscriminator = 1; + params.AncientBonusOption = level; +} + constexpr TooltipVariant TooltipVariants[] = { {"plain", [](ItemCreationParams&) {}}, {"full", @@ -50,6 +57,11 @@ constexpr TooltipVariant TooltipVariants[] = { params.IsAncient = true; params.AncientDiscriminator = 1; }}, + // The ancient bonus at the levels a server sends (1: +5, 2: +10 of the stat the item's bonus raises) and one above + // them, which the ancient byte can hold. + {"ancient bonus 1", [](ItemCreationParams& params) { ApplyAncientBonus(params, 1); }}, + {"ancient bonus 2", [](ItemCreationParams& params) { ApplyAncientBonus(params, 2); }}, + {"ancient bonus 3", [](ItemCreationParams& params) { ApplyAncientBonus(params, 3); }}, {"harmony", [](ItemCreationParams& params) { diff --git a/src/source/Engine/Object/ZzzInventory.cpp b/src/source/Engine/Object/ZzzInventory.cpp index 49fb643bf0..d01438c0da 100644 --- a/src/source/Engine/Object/ZzzInventory.cpp +++ b/src/source/Engine/Object/ZzzInventory.cpp @@ -1092,9 +1092,15 @@ std::optional WriteDefinitionOptionLines(const ITEM& item, int slot, int te { return std::nullopt; } + return WriteOptionLines(*slotOption->option, GameLogic::Items::GetSlotOptionValue(item, *slotOption), textNum, + rowLimit); +} + +int WriteOptionLines(const Data::Items::ItemOption& option, int value, int textNum, int rowLimit) +{ Engine::Items::OptionLines::LineValues values; - values.value = GameLogic::Items::GetSlotOptionValue(item, *slotOption); - for (const Data::Items::ItemOptionTerm& term : slotOption->option->value.per) + values.value = value; + for (const Data::Items::ItemOptionTerm& term : option.value.per) { if (term.divisor > 0) { @@ -1104,7 +1110,7 @@ std::optional WriteDefinitionOptionLines(const ITEM& item, int slot, int te } const int lastRow = std::min(rowLimit, MaxTextListRows); int row = textNum; - for (const std::string& name : slotOption->option->texts) + for (const std::string& name : option.texts) { if (row < lastRow && Engine::Items::OptionLines::Write(name, values, TextList[row], std::size(TextList[row]))) { diff --git a/src/source/Engine/Object/ZzzInventory.h b/src/source/Engine/Object/ZzzInventory.h index 73de7d6443..b96555ae0c 100644 --- a/src/source/Engine/Object/ZzzInventory.h +++ b/src/source/Engine/Object/ZzzInventory.h @@ -106,6 +106,7 @@ void ClearTooltipRows(); namespace Data::Items { struct ItemDefinition; +struct ItemOption; } struct ItemTooltipValues; @@ -247,6 +248,9 @@ void GetSpecialOptionText(wchar_t* Text, WORD Option, WORD Value, int iMana); // its value, blue and not bold, from row `textNum` on and before row `rowLimit`. The rows written (a text the option // texts lack has none), or nothing for a slot the code wrote, whose line the caller writes (GetSpecialOptionText). std::optional WriteDefinitionOptionLines(const ITEM& item, int slot, int textNum, int rowLimit); +// The tooltip lines of `option` with `value`: its texts, blue and not bold, from row `textNum` on and before row +// `rowLimit`; the rows written. +int WriteOptionLines(const Data::Items::ItemOption& option, int value, int textNum, int rowLimit); // The item's information and repair tooltips, anchored in window pixels: their layout runs in the // screen's 640x480 stretch, the space the original computed it in, whichever window asks. void RenderItemInfoAtPx(float x, float y, const ITEM* ip, bool Sell, int Inventype = 0, diff --git a/src/source/GameLogic/Items/CSItemOption.cpp b/src/source/GameLogic/Items/CSItemOption.cpp index 18aaf7ab15..1a33fa634d 100644 --- a/src/source/GameLogic/Items/CSItemOption.cpp +++ b/src/source/GameLogic/Items/CSItemOption.cpp @@ -17,6 +17,7 @@ #include "UI/Core/WindowSystem.h" #include "GameLogic/Skills/SkillManager.h" #include "GameLogic/Items/CSItemOption.h" +#include "GameLogic/Items/ItemOptions.h" #include "I18N/All.h" #include "Render/Text/CUIRenderText.h" @@ -28,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -535,56 +537,6 @@ int CSItemOption::GetMasteryBonus(const SET_SEARCH_RESULT_OPT& set, std::uint8_t return bonus; } -int CSItemOption::GetDefaultOptionValue(ITEM* ip, std::uint16_t* Value) -{ - if (ip->Type > MAX_ITEM) - { - return -1; - } - - *Value = ip->AncientBonusOption; - - const ITEM_ATTRIBUTE* p = &ItemAttribute[ip->Type]; - - return p->AttType; -} - -bool CSItemOption::GetDefaultOptionText(const ITEM* ip, wchar_t* Text) -{ - if (ip->Type > MAX_ITEM) - { - return false; - } - - if (ip->AncientBonusOption <= 0) - { - return false; - } - - switch (ItemAttribute[ip->Type].AttType) - { - case SET_OPTION_STRENGTH: - mu_swprintf(Text, I18N::Game::IncreaseStrengthD, ip->AncientBonusOption * 5); - break; - - case SET_OPTION_DEXTERITY: - mu_swprintf(Text, I18N::Game::IncreaseAgilityD, ip->AncientBonusOption * 5); - break; - - case SET_OPTION_ENERGY: - mu_swprintf(Text, I18N::Game::IncreaseEnergyD, ip->AncientBonusOption * 5); - break; - - case SET_OPTION_VITALITY: - mu_swprintf(Text, I18N::Game::IncreaseStaminaD, ip->AncientBonusOption * 5); - break; - - default: - return false; - } - return true; -} - bool CSItemOption::IsNonWeaponSkillOrIsSkillEquipped(ActionSkillType skill) { bool checkForWeaponSkill; @@ -630,15 +582,62 @@ bool CSItemOption::IsNonWeaponSkillOrIsSkillEquipped(ActionSkillType skill) return false; } +namespace +{ +// Adds `value` to the stat `effect` raises (AT_SET_OPTION_IMPROVE_STRENGTH to AT_SET_OPTION_IMPROVE_CHARISMA), as the +// set options and the ancient bonus do; another effect adds nothing. +void AddToStat(int effect, int value, std::uint16_t* strength, std::uint16_t* dexterity, std::uint16_t* energy, + std::uint16_t* vitality, std::uint16_t* charisma) +{ + const auto added = static_cast(value); + switch (effect) + { + case AT_SET_OPTION_IMPROVE_STRENGTH: + *strength += added; + break; + case AT_SET_OPTION_IMPROVE_DEXTERITY: + *dexterity += added; + break; + case AT_SET_OPTION_IMPROVE_ENERGY: + *energy += added; + break; + case AT_SET_OPTION_IMPROVE_VITALITY: + *vitality += added; + break; + case AT_SET_OPTION_IMPROVE_CHARISMA: + *charisma += added; + break; + default: + break; + } +} + +// Adds the item's ancient bonus to the stat its definition's attribute raises (its effect); an attribute the client +// doesn't add adds nothing. +void AddAncientBonus(const ITEM& item, std::uint16_t* strength, std::uint16_t* dexterity, std::uint16_t* energy, + std::uint16_t* vitality, std::uint16_t* charisma) +{ + if (const std::optional bonus = GameLogic::Items::FindAncientBonus(item)) + { + AddToStat(bonus->effect, bonus->value, strength, dexterity, energy, vitality, charisma); + } +} +} // namespace + int CSItemOption::RenderDefaultOptionText(const ITEM* ip, int TextNum) { int TNum = TextNum; - if (GetDefaultOptionText(ip, TextList[TNum])) + const std::optional bonus = GameLogic::Items::FindAncientBonus(*ip); + // The elemental rings' and pendants' second line belongs to the bonus line: none without it. + const int bonusRows = bonus ? WriteOptionLines(*bonus->option, bonus->value, TNum, MaxTextListRows) : 0; + if (bonusRows > 0) { - TextListColor[TNum] = TEXT_COLOR_BLUE; - TNum++; + TNum += bonusRows; - if ((ip->Type >= ITEM_RING_OF_ICE && ip->Type <= ITEM_RING_OF_POISON) || (ip->Type >= ITEM_PENDANT_OF_LIGHTING && ip->Type <= ITEM_PENDANT_OF_FIRE) || (ip->Type >= ITEM_RING_OF_FIRE && ip->Type <= ITEM_PENDANT_OF_WATER)) + const bool elemental = (ip->Type >= ITEM_RING_OF_ICE && ip->Type <= ITEM_RING_OF_POISON) || + (ip->Type >= ITEM_PENDANT_OF_LIGHTING && ip->Type <= ITEM_PENDANT_OF_FIRE) || + (ip->Type >= ITEM_RING_OF_FIRE && ip->Type <= ITEM_PENDANT_OF_WATER); + if (elemental && TNum < MaxTextListRows) { mu_swprintf(TextList[TNum], I18N::Game::IncreaseAttributeDamage); // "Increase Attribute Damage" TextListColor[TNum] = TEXT_COLOR_BLUE; @@ -660,25 +659,7 @@ void CSItemOption::getAllAddState(std::uint16_t* Strength, std::uint16_t* Dexter continue; } - std::uint16_t Result = 0; - switch (GetDefaultOptionValue(item, &Result)) - { - case SET_OPTION_STRENGTH: - *Strength += Result * 5; - break; - - case SET_OPTION_DEXTERITY: - *Dexterity += Result * 5; - break; - - case SET_OPTION_ENERGY: - *Energy += Result * 5; - break; - - case SET_OPTION_VITALITY: - *Vitality += Result * 5; - break; - } + AddAncientBonus(*item, Strength, Dexterity, Energy, Vitality, Charisma); } AddStatsBySetOptions(Strength, Dexterity, Energy, Vitality, Charisma); @@ -697,31 +678,7 @@ void CSItemOption::AddStatsBySetOptions(std::uint16_t* Strength, std::uint16_ continue; } - switch (option.OptionNumber) - { - case AT_SET_OPTION_IMPROVE_STRENGTH: - *Strength += option.Value; - break; - - case AT_SET_OPTION_IMPROVE_DEXTERITY: - *Dexterity += option.Value; - break; - - case AT_SET_OPTION_IMPROVE_ENERGY: - *Energy += option.Value; - break; - - case AT_SET_OPTION_IMPROVE_VITALITY: - *Vitality += option.Value; - break; - - case AT_SET_OPTION_IMPROVE_CHARISMA: - *Charisma += option.Value; - break; - default: - // other options are not handled here. - break; - } + AddToStat(option.OptionNumber, option.Value, Strength, Dexterity, Energy, Vitality, Charisma); } } } @@ -750,25 +707,7 @@ void CSItemOption::getAllAddOptionStatesbyCompare(std::uint16_t* Strength, std:: continue; } - std::uint16_t Result = 0; - switch (GetDefaultOptionValue(item, &Result)) - { - case SET_OPTION_STRENGTH: - *Strength += Result * 5; - break; - - case SET_OPTION_DEXTERITY: - *Dexterity += Result * 5; - break; - - case SET_OPTION_ENERGY: - *Energy += Result * 5; - break; - - case SET_OPTION_VITALITY: - *Vitality += Result * 5; - break; - } + AddAncientBonus(*item, Strength, Dexterity, Energy, Vitality, Charisma); } AddStatsBySetOptions(Strength, Dexterity, Energy, Vitality, Charisma); diff --git a/src/source/GameLogic/Items/CSItemOption.h b/src/source/GameLogic/Items/CSItemOption.h index b49df59a88..c8ec680caf 100644 --- a/src/source/GameLogic/Items/CSItemOption.h +++ b/src/source/GameLogic/Items/CSItemOption.h @@ -163,8 +163,8 @@ class CSItemOption : public Singleton // `masteryType` (SKILL_ATTRIBUTE::MasteryType, the skill's element). static int GetMasteryBonus(const SET_SEARCH_RESULT_OPT& set, std::uint8_t masteryType); - static int GetDefaultOptionValue(ITEM* ip, std::uint16_t* Value); - static bool GetDefaultOptionText(const ITEM* ip, wchar_t* Text); + // Writes the item's ancient bonus lines from row TextNum on: the texts of its definition (GameLogic::Items:: + // FindAncientBonus) and, for the elemental rings and pendants, "Increase Attribute Damage"; the next free row. static int RenderDefaultOptionText(const ITEM* ip, int TextNum); // The format a set option's value is described with (`option` counts from diff --git a/src/source/GameLogic/Items/ItemOptions.cpp b/src/source/GameLogic/Items/ItemOptions.cpp index 6de0e7e03f..b82ceb7006 100644 --- a/src/source/GameLogic/Items/ItemOptions.cpp +++ b/src/source/GameLogic/Items/ItemOptions.cpp @@ -66,9 +66,13 @@ bool IsOptionTurnedOn(const ITEM& item, ItemOptionType type, const ItemOption& o case ItemOptionType::Excellent: return IsExcellentBitSet(item.ExcellentFlags, option); case ItemOptionType::Luck: + return true; + // The ancient types take no option slots (IsTurnedOn gives them none). + case ItemOptionType::AncientOption: + case ItemOptionType::AncientBonus: break; } - return true; + return false; } // The value of a hero attribute a term reads; 0 for one the client doesn't read. @@ -109,7 +113,8 @@ std::optional FindValidSource(const ITEM& item, int slot) return source; } -// The level the option's value is taken at: the additional option's level, else the constant's. +// The level the option's value is taken at: the additional option's level, else the constant's. The ancient bonus +// takes no option slot; FindAncientBonus takes its value at the bonus level. int GetOptionLevel(const ITEM& item, ItemOptionType type) { return type == ItemOptionType::Option ? item.OptionLevel : LevelOfTypesWithoutLevels; @@ -311,6 +316,26 @@ int GetCurrentSlotValue(const ITEM& item, int slot) return item.SpecialValue[slot]; } +std::optional FindAncientBonus(const ITEM& item) +{ + if (item.AncientBonusOption == 0 || item.Type < 0 || item.Type >= MAX_ITEM) + { + return std::nullopt; + } + const Data::Items::ItemOptionDatabase& options = g_ItemDatabase.GetOptions(); + const int index = options.FindAncientBonus(ItemAttribute[item.Type].AttType); + if (index == Data::Items::ItemOptionDatabase::NoDefinition) + { + return std::nullopt; + } + const auto definitionIndex = static_cast(index); + const ItemOptionDefinition& definition = options.Get(definitionIndex); + // The loader gives an ancient bonus definition exactly one option. + const ItemOption& option = definition.options.front(); + return AncientBonus{&definition, &option, options.GetEffect(definitionIndex, 0).effect, + ComputeOptionValue(option.value, item.AncientBonusOption)}; +} + int GetItemOptionValue(const ITEM& item, int slot) { if (const std::optional slotOption = FindSlotOption(item, slot)) diff --git a/src/source/GameLogic/Items/ItemOptions.h b/src/source/GameLogic/Items/ItemOptions.h index b513cb835e..c36980ad3d 100644 --- a/src/source/GameLogic/Items/ItemOptions.h +++ b/src/source/GameLogic/Items/ItemOptions.h @@ -77,4 +77,20 @@ int GetCurrentSlotValue(const ITEM& item, int slot); // The same for the item's slot `slot`; a slot the code wrote gives its SpecialValue. int GetItemOptionValue(const ITEM& item, int slot); + +// An item's ancient bonus: its definition and option, the effect of its attribute (AT_SET_OPTION_IMPROVE_STRENGTH to +// AT_SET_OPTION_IMPROVE_VITALITY, or NoItemOptionEffect for an attribute the client doesn't add) and its value at the +// item's bonus level. +struct AncientBonus +{ + const Data::Items::ItemOptionDefinition* definition = nullptr; + const Data::Items::ItemOption* option = nullptr; + WORD effect = 0; + int value = 0; +}; + +// The item's ancient bonus when its ancient byte has a bonus level (ITEM::AncientBonusOption): of the definition its +// attackType picks until the item sets link one (Data::Items::ItemOptionDatabase::FindAncientBonus); nothing without +// a bonus level or such a definition. +std::optional FindAncientBonus(const ITEM& item); } // namespace GameLogic::Items diff --git a/tests/data/CharacterMachineScope.h b/tests/data/CharacterMachineScope.h new file mode 100644 index 0000000000..13d7443fe6 --- /dev/null +++ b/tests/data/CharacterMachineScope.h @@ -0,0 +1,38 @@ +#pragma once + +#include "Engine/Object/ZzzInfomation.h" + +#include + +// A character machine of the test's own (CharacterMachine) with nothing worn, for the scope: what the stat code reads +// as the hero's equipment. The previous machine is back when the scope goes. +class CharacterMachineScope +{ +public: + CharacterMachineScope() : m_previous(CharacterMachine), m_machine(std::make_unique()) + { + for (ITEM& equipped : m_machine->Equipment) + { + equipped = ITEM{}; + equipped.Type = -1; + } + CharacterMachine = m_machine.get(); + } + + ~CharacterMachineScope() + { + CharacterMachine = m_previous; + } + + CharacterMachineScope(const CharacterMachineScope&) = delete; + CharacterMachineScope& operator=(const CharacterMachineScope&) = delete; + + CHARACTER_MACHINE& Machine() + { + return *m_machine; + } + +private: + CHARACTER_MACHINE* m_previous; + std::unique_ptr m_machine; +}; diff --git a/tests/data/item_tooltip_snapshot.txt b/tests/data/item_tooltip_snapshot.txt index c8f6cb0b58..db8d6a3a57 100644 --- a/tests/data/item_tooltip_snapshot.txt +++ b/tests/data/item_tooltip_snapshot.txt @@ -1,1822 +1,1822 @@ -bladeMaster 0/0 c66afc623f25fb6e -bladeMaster 0/1 cfb6515046a74110 -bladeMaster 0/10 508c4aeefc187980 -bladeMaster 0/11 b73d818c5408c499 -bladeMaster 0/12 77c14afb23544df3 -bladeMaster 0/13 70d2b6014d0257ca -bladeMaster 0/14 e4cba606d95bebba -bladeMaster 0/15 784f2e08c8598a8f -bladeMaster 0/16 244b88bcff8cac15 -bladeMaster 0/17 c1dcb7c86f762daa -bladeMaster 0/18 d7d203184d1531b3 -bladeMaster 0/19 6e16ac221fecf119 -bladeMaster 0/2 78b1e862ba603b5e -bladeMaster 0/20 f6ea31351c6311d9 -bladeMaster 0/21 64ae9f8661b84ebd -bladeMaster 0/22 eb08bdd0a48f0ab0 -bladeMaster 0/23 b3a6ff94e34b8d40 -bladeMaster 0/24 4d02759508076c5e -bladeMaster 0/25 e93f7f7866163bc9 -bladeMaster 0/26 b5d4bdd4c0257b3b -bladeMaster 0/27 4a37f5f091a30904 -bladeMaster 0/28 fe8cdcd72e67a887 -bladeMaster 0/3 ce48047dfabdbc90 -bladeMaster 0/31 f9c441613537fbd3 -bladeMaster 0/32 079534bb64bd5a89 -bladeMaster 0/33 918b92275f46e933 -bladeMaster 0/34 f436f3dcb7863983 -bladeMaster 0/35 d18a7c7b095eeac2 -bladeMaster 0/4 de26745239a7599f -bladeMaster 0/5 5209da8853ccfd8d -bladeMaster 0/6 c166dfb4d933f351 -bladeMaster 0/7 619c750aa942bca7 -bladeMaster 0/8 eabdbceed036b9c3 -bladeMaster 0/9 15e062f8a8482a00 -bladeMaster 1/0 ac68500f4f7abcf8 -bladeMaster 1/1 fdbd7329a7e61df2 -bladeMaster 1/2 3f90d7d965b4d7e4 -bladeMaster 1/3 a72b65f061aa1be0 -bladeMaster 1/4 4c84727493646a3d -bladeMaster 1/5 52940409761a9f76 -bladeMaster 1/6 040be442b0bb7964 -bladeMaster 1/7 358b7098546d803e -bladeMaster 1/8 ad2d086282fc2325 -bladeMaster 10/0 c9a642db9140e956 -bladeMaster 10/1 c65666c6d55d41fa -bladeMaster 10/10 822a9840f8fb3cc0 -bladeMaster 10/11 4c823683dfc189c7 -bladeMaster 10/12 98ac02b70ab2bcca -bladeMaster 10/13 ec1abf451a084af7 -bladeMaster 10/14 a3586995074ca258 -bladeMaster 10/15 202eefc7335a59ff -bladeMaster 10/16 e79f22566418039f -bladeMaster 10/17 54e9f9737a8a4b08 -bladeMaster 10/18 6f5b94e092ef0933 -bladeMaster 10/19 be70001232656943 -bladeMaster 10/2 f3cfd61f427d5749 -bladeMaster 10/20 4650c3cd3ef719a2 -bladeMaster 10/21 75804b9d47d4f30b -bladeMaster 10/22 330907e92192bac2 -bladeMaster 10/23 e4fd58654ffb9b0f -bladeMaster 10/24 eca87402c8a597eb -bladeMaster 10/25 2d4daba6197a5a31 -bladeMaster 10/26 43b09fedbb7e861e -bladeMaster 10/27 eb75301be001f358 -bladeMaster 10/28 89e94aecd31479d3 -bladeMaster 10/29 e633946468c57679 -bladeMaster 10/3 f74f899fae9ed405 -bladeMaster 10/30 e4d0f15e5064e521 -bladeMaster 10/31 6570e61d156ff6aa -bladeMaster 10/32 3b8721023f7c53bc -bladeMaster 10/33 8fda41ca31469618 -bladeMaster 10/34 684327ba26b6bcfd -bladeMaster 10/35 dfd13424f6390dde -bladeMaster 10/36 02856d7994447290 -bladeMaster 10/37 57802a1294d7cf28 -bladeMaster 10/38 e94c6128cb6bdf8b -bladeMaster 10/39 076f891d4a73b626 -bladeMaster 10/4 36912e51c5299c3f -bladeMaster 10/40 b16fcb1f8ec6543b -bladeMaster 10/41 495355b5ce89ac30 -bladeMaster 10/42 d5388df059a5f4c4 -bladeMaster 10/43 79f111175c12ece0 -bladeMaster 10/44 7fd937070d65e0d1 -bladeMaster 10/45 ccf41a5b04fd66a3 -bladeMaster 10/46 dfcf5f0ec2ac6b30 -bladeMaster 10/47 1de03c415fb5a37f -bladeMaster 10/48 add14c634beffee1 -bladeMaster 10/49 7e55b2449856a54b -bladeMaster 10/5 8b0145233d5e3d61 -bladeMaster 10/50 930581b6e5cdc055 -bladeMaster 10/51 11d560ded799be22 -bladeMaster 10/52 045c13976196f20a -bladeMaster 10/6 02706a2d047d6285 -bladeMaster 10/62 eb35fe638dafdb01 -bladeMaster 10/63 3626f9615960865b -bladeMaster 10/64 26eaf352b6c4de5b -bladeMaster 10/65 35c65f2fb1e9664b -bladeMaster 10/66 dbba8e6d2f503650 -bladeMaster 10/67 1c8890b79c40b4b9 -bladeMaster 10/68 d1ed34c7fa2d5fa3 -bladeMaster 10/69 1be1227ffafac124 -bladeMaster 10/7 869f0b2b613f6909 -bladeMaster 10/70 3ee8bddf015af201 -bladeMaster 10/71 2b5e1181a03efc61 -bladeMaster 10/8 c84f67f4844934f3 -bladeMaster 10/9 e1f616ccdbdcf491 -bladeMaster 11/0 6a33798727df042e -bladeMaster 11/1 650e019491596569 -bladeMaster 11/10 f38e5fb23b0d0aad -bladeMaster 11/11 4a8d08bf55166770 -bladeMaster 11/12 7f821e7b6e35316f -bladeMaster 11/13 2b2aa27b425115d1 -bladeMaster 11/14 9778c5685449a188 -bladeMaster 11/15 5bb4c4eab66ea6f7 -bladeMaster 11/16 5e91fc15c35a466d -bladeMaster 11/17 779ae23a76cedf2b -bladeMaster 11/18 eb52dd0ace351bbb -bladeMaster 11/19 66e853aed9b05fd1 -bladeMaster 11/2 351bcb01d5ff7dc7 -bladeMaster 11/20 2d18f4b2f1f86f18 -bladeMaster 11/21 f82fbc5697ccbe0e -bladeMaster 11/22 e4e857d3fd95200c -bladeMaster 11/23 5b23dd547050fe7e -bladeMaster 11/24 e73289b9f455b6b2 -bladeMaster 11/25 98099d9bdb39f147 -bladeMaster 11/26 da29bb729b6ea018 -bladeMaster 11/27 78e57a6d74df5469 -bladeMaster 11/28 92393316536fe094 -bladeMaster 11/29 7a8dd8225a7fb28c -bladeMaster 11/3 ca63803812f369be -bladeMaster 11/30 d624f3d59917f7a0 -bladeMaster 11/31 02cc384fc6387994 -bladeMaster 11/32 29fd9769b40b02d8 -bladeMaster 11/33 8a317aa85198a3b2 -bladeMaster 11/34 56615923dc6524b0 -bladeMaster 11/35 1f4645e0ed0caf27 -bladeMaster 11/36 6cfe0746b9704208 -bladeMaster 11/37 766d1ae83b1d4e08 -bladeMaster 11/38 ff768dfb3f77eaa5 -bladeMaster 11/39 e2331136bb4ae977 -bladeMaster 11/4 4dbc7f898a0b08cf -bladeMaster 11/40 dd8be159f37a4332 -bladeMaster 11/41 022b2114cf808fda -bladeMaster 11/42 6aa1a55b64ad56e5 -bladeMaster 11/43 fb2add802fad733c -bladeMaster 11/44 216ecc318cbf8a2f -bladeMaster 11/45 e6e402b418e68792 -bladeMaster 11/46 abe8b8841d90b463 -bladeMaster 11/47 a39055f516c43df4 -bladeMaster 11/48 66945bc91a880f57 -bladeMaster 11/49 62c5c77aaf6a3b5b -bladeMaster 11/5 6eb9b23255fa5a8b -bladeMaster 11/50 d0e3bf2f1a695ff0 -bladeMaster 11/51 402809399e174077 -bladeMaster 11/52 15a20d160757396a -bladeMaster 11/59 06a8a51fdafa95b5 -bladeMaster 11/6 338311b2961d992a -bladeMaster 11/60 1d3393ca313a9f79 -bladeMaster 11/61 8e8e252beabf79cb -bladeMaster 11/62 0e52d6f9c69de551 -bladeMaster 11/63 89374c72922e6e1f -bladeMaster 11/64 320d9c71a80dfb6a -bladeMaster 11/65 4f45923e564861c4 -bladeMaster 11/66 eb0f636b079bb096 -bladeMaster 11/67 e9f1b9cca5f67fa3 -bladeMaster 11/68 87e807bcc5e4f242 -bladeMaster 11/69 c932b3c0bfbafc23 -bladeMaster 11/7 d9eccb30e4f34bf0 -bladeMaster 11/70 56479b12a4c7db9d -bladeMaster 11/71 3927b33fe8fcbaa5 -bladeMaster 11/72 dac2088ddd5737c3 -bladeMaster 11/73 eddcf8c463e5748d -bladeMaster 11/8 8dfde27dd4c51778 -bladeMaster 11/9 f700fd68e7c76cbf -bladeMaster 12/0 8edc292b5b4194e8 -bladeMaster 12/1 6cace1b58688db60 -bladeMaster 12/10 719850b38e8b1788 -bladeMaster 12/100 b3e98f2c9c545699 -bladeMaster 12/101 b62a10942cb65a35 -bladeMaster 12/102 1ce5fa5f6514c3c0 -bladeMaster 12/103 8d22b303177919e8 -bladeMaster 12/104 28f5ac64917bd204 -bladeMaster 12/105 ba3ead8c8b3c48a0 -bladeMaster 12/106 3e25a5d904e496d2 -bladeMaster 12/107 55170f7f895233f8 -bladeMaster 12/108 e66ae20426adc18a -bladeMaster 12/109 efb7331191a62aa1 -bladeMaster 12/11 e8130735d0cfc175 -bladeMaster 12/110 f9cb0b5cf573a34e -bladeMaster 12/111 e9183aec3d4d4e90 -bladeMaster 12/112 e6a782a585e0d81d -bladeMaster 12/113 1004f1fc067a4046 -bladeMaster 12/114 0aea4bea44ff1d36 -bladeMaster 12/115 e07b13c674710ea2 -bladeMaster 12/116 be94d6102ff0fd6b -bladeMaster 12/117 ef7c8c6034882a1a -bladeMaster 12/118 6ef57b16fa193efb -bladeMaster 12/119 a4f8944c95ab94e3 -bladeMaster 12/12 c6f44cdbd633c906 -bladeMaster 12/120 6195fc48c9c3ce0e -bladeMaster 12/121 84137fd517c0771a -bladeMaster 12/122 eca684a8bc0d863b -bladeMaster 12/123 fd2c3e65beb8ca02 -bladeMaster 12/124 ee88a6837303e1ef -bladeMaster 12/125 81db3a30e1b44e06 -bladeMaster 12/126 bafadcf8e278e89f -bladeMaster 12/127 16ad09f1c05a13a3 -bladeMaster 12/128 bcf2f1dda7d056ed -bladeMaster 12/129 00971f39b84b94dc -bladeMaster 12/13 dc8dbe53af7fc720 -bladeMaster 12/130 f09df24897432af2 -bladeMaster 12/131 81f4a4b8beb19e11 -bladeMaster 12/132 ec1f5a3ae4aa224f -bladeMaster 12/133 7364bec808cd19d1 -bladeMaster 12/134 4bfa30575d959b46 -bladeMaster 12/135 b8aab0f335106700 -bladeMaster 12/136 deed836136f8a36f -bladeMaster 12/137 26e4cfd83b53b2f9 -bladeMaster 12/138 a4770273a8e335eb -bladeMaster 12/139 44872c8b99a75c3b -bladeMaster 12/14 c3d1ad28a105ed8c -bladeMaster 12/140 15a879787bbcbf19 -bladeMaster 12/141 173d76d6c3d41d27 -bladeMaster 12/142 7e8d2372777c01b9 -bladeMaster 12/143 8d331dabc1bac6d3 -bladeMaster 12/15 bbe0e7917dd8aaa8 -bladeMaster 12/16 724ca0f9279e71ec -bladeMaster 12/17 79d013b99eaae644 -bladeMaster 12/18 ef5ee2e58be80b78 -bladeMaster 12/19 497dce7b6341e94c -bladeMaster 12/2 94ce733c777591ab -bladeMaster 12/21 79be295ed89949c6 -bladeMaster 12/22 ceb105257095b350 -bladeMaster 12/23 49fd4c9b8e9ea512 -bladeMaster 12/24 012531db9daf69a2 -bladeMaster 12/26 56b00b7c00d1fd28 -bladeMaster 12/3 2d36094a284d2eac -bladeMaster 12/30 cac9cad9b5951fb7 -bladeMaster 12/31 284c17aa996e5e0d -bladeMaster 12/32 46f67b1cc531f17b -bladeMaster 12/33 7e1e271a991930b9 -bladeMaster 12/34 b911958ef761edcd -bladeMaster 12/35 ed3f06de7196efd9 -bladeMaster 12/36 40ff5f2dbb785c6c -bladeMaster 12/37 4390a9461491c47b -bladeMaster 12/38 0e003ca1043bc3bf -bladeMaster 12/39 fda53bdedc9a9230 -bladeMaster 12/4 d5fd21629b7e45d2 -bladeMaster 12/40 89cfd6f9411d31e7 -bladeMaster 12/41 adbb5f54f6abdb18 -bladeMaster 12/42 10644bbe4646aa66 -bladeMaster 12/43 96c3fd1564e7bdaf -bladeMaster 12/44 84d81ea49253a9d4 -bladeMaster 12/45 34a1cc066787d308 -bladeMaster 12/46 96c88789c7d35004 -bladeMaster 12/47 a4d6c623bf8cc15e -bladeMaster 12/48 551d07f9581ff1ec -bladeMaster 12/49 e13c2054c1e05e83 -bladeMaster 12/5 a724e1ccfcc5d6f7 -bladeMaster 12/50 ba222614bee65177 -bladeMaster 12/6 2b3d67c035c84efc -bladeMaster 12/60 dc16ebda90571882 -bladeMaster 12/61 dfbb75ea2cddc690 -bladeMaster 12/62 b43d8f3b24526cc5 -bladeMaster 12/63 7aaaabe90740b10a -bladeMaster 12/64 86e39525c0233d4d -bladeMaster 12/65 cc960f30a80c2115 -bladeMaster 12/7 17c023b74cbb980c -bladeMaster 12/70 701ad68f7523e5db -bladeMaster 12/71 f2d1c5dd88bf6fb7 -bladeMaster 12/72 a0036bf2b5c9f901 -bladeMaster 12/8 ac801184e8faca90 -bladeMaster 12/9 46943f8c5c66c3c2 -bladeMaster 13/0 a1fed971c4872d33 -bladeMaster 13/1 d464a3b24fb13b90 -bladeMaster 13/10 2f08702e3de13710 -bladeMaster 13/103 2e29a549431c3526 -bladeMaster 13/104 9efa0dd03d7ed822 -bladeMaster 13/105 46a39d1427bc7e0e -bladeMaster 13/106 431f343dfcb2f4ec -bladeMaster 13/107 4a2a64479b1228ef -bladeMaster 13/109 c61e5b23b0eec304 -bladeMaster 13/11 d13c6459bbb64a40 -bladeMaster 13/110 39722cb662031540 -bladeMaster 13/111 837fa79b85f32d64 -bladeMaster 13/112 8775f5a1a66dbd4e -bladeMaster 13/113 bbc36515dfe130e6 -bladeMaster 13/114 f1fcf8fda34bbede -bladeMaster 13/115 4b62bbdd097e1cba -bladeMaster 13/116 f2e15b06ca0c8910 -bladeMaster 13/117 67f8b90e8b358668 -bladeMaster 13/118 0e8c88a0874a8f1a -bladeMaster 13/119 68a6074b5f86dcf8 -bladeMaster 13/12 b307cdc33ade5287 -bladeMaster 13/120 103cd2914f3ef79a -bladeMaster 13/121 992df813fed0e7a0 -bladeMaster 13/122 35971924c35cc59c -bladeMaster 13/123 19137f0ac3a7df1c -bladeMaster 13/124 9ac7f172011c19f6 -bladeMaster 13/125 a2f10043f762d614 -bladeMaster 13/126 d60487047dcdbbc6 -bladeMaster 13/127 3e7ce14410201fe2 -bladeMaster 13/128 4ab89476787d5096 -bladeMaster 13/129 6293ea2678781194 -bladeMaster 13/13 5172dd02d4838a2f -bladeMaster 13/130 afa434877766766c -bladeMaster 13/131 8b01ff51ed0964d2 -bladeMaster 13/132 9b4d447a033c6ff8 -bladeMaster 13/133 4c7b7cf5ecff27da -bladeMaster 13/134 bf7cecc2cdff11e2 -bladeMaster 13/135 eff3fb845f3233c0 -bladeMaster 13/136 65186b97705adc6c -bladeMaster 13/137 6d630b3e31aae100 -bladeMaster 13/138 ab9e2ddbf72a88fe -bladeMaster 13/139 59cd2a15e6baefb4 -bladeMaster 13/14 b3f81ee5a9f4c648 -bladeMaster 13/140 f9bc591f06433b54 -bladeMaster 13/141 a0a2ddd265a5350c -bladeMaster 13/142 0e8add9381725c70 -bladeMaster 13/143 808b265bccc50fee -bladeMaster 13/144 ea6ae6a3b9372580 -bladeMaster 13/15 ffc1beb4bff6fc3d -bladeMaster 13/16 0e793b2f56c36818 -bladeMaster 13/17 5771722e4297e152 -bladeMaster 13/18 ae372773a7f32aa0 -bladeMaster 13/19 5b53d4ea6df240fa -bladeMaster 13/2 a434844519ed6ac2 -bladeMaster 13/20 7664cc5a14b9f313 -bladeMaster 13/21 cf55a13a1f7d11b9 -bladeMaster 13/22 67b50726f487f0eb -bladeMaster 13/23 65d534436250ccd1 -bladeMaster 13/24 a590f61bfa17a4b3 -bladeMaster 13/25 e8464a571e5fa972 -bladeMaster 13/26 1984508a42126b85 -bladeMaster 13/27 d931df1eaea652a0 -bladeMaster 13/28 2be3431177670e53 -bladeMaster 13/29 5df1300966feea3e -bladeMaster 13/3 b7636b350ef51ab2 -bladeMaster 13/30 3d089e3119a7a0c2 -bladeMaster 13/31 1da2b5ed08b97d76 -bladeMaster 13/32 943ea9352304524b -bladeMaster 13/33 2b1982b2b6e88a2d -bladeMaster 13/34 4428ef56c0659e11 -bladeMaster 13/35 8964d76b11562cdd -bladeMaster 13/36 c96e488744f9009f -bladeMaster 13/37 92fe128387431eef -bladeMaster 13/38 2c05bf6358869039 -bladeMaster 13/39 d9c0d91f5f53498e -bladeMaster 13/4 a93231a25048c6ed -bladeMaster 13/40 130c034a78849fd0 -bladeMaster 13/41 8501e62553b8b296 -bladeMaster 13/42 58317cfa8406cc3b -bladeMaster 13/43 c8c0b7cf150746ce -bladeMaster 13/44 6c6d131ef71d36e6 -bladeMaster 13/45 c0faaf63b34b749c -bladeMaster 13/46 9a0d6d50410b26e0 -bladeMaster 13/47 85f907d4f58701dc -bladeMaster 13/48 8ccf5abcb50f420c -bladeMaster 13/49 21d2e28fce57b296 -bladeMaster 13/5 6e204d87a0904853 -bladeMaster 13/50 5999577e295ec696 -bladeMaster 13/51 cea4322a520f4396 -bladeMaster 13/52 b2fec3c09ed665c8 -bladeMaster 13/53 ca39bb43cc2103f2 -bladeMaster 13/54 203f1e4dcdae2364 -bladeMaster 13/55 911d375e01e17082 -bladeMaster 13/56 54f6c96237df3cd6 -bladeMaster 13/57 a1d8a4e97e864de8 -bladeMaster 13/58 9b67e33a3a80e2d6 -bladeMaster 13/59 162212b838841cd2 -bladeMaster 13/60 18eab2127715308c -bladeMaster 13/61 6317b0d6356c5972 -bladeMaster 13/62 0647de455bf41a6e -bladeMaster 13/63 15084336bae2b9de -bladeMaster 13/64 2266c19bc34eca70 -bladeMaster 13/65 a444eea947cae64a -bladeMaster 13/66 23d61a9d08b64d9c -bladeMaster 13/67 3f7380acfa637eac -bladeMaster 13/68 e16a32660a1e686a -bladeMaster 13/69 c7cc241c5e39ba18 -bladeMaster 13/7 e4b865a49e5d7e18 -bladeMaster 13/70 c56f2a9a482d7c14 -bladeMaster 13/71 0cc8df0da73ae888 -bladeMaster 13/72 d6a8e5253c646814 -bladeMaster 13/73 2c3eaab8cd2ef8aa -bladeMaster 13/74 6ed7fb85dab50aec -bladeMaster 13/75 68d83f8d90db519e -bladeMaster 13/76 4001ff3fdf728f20 -bladeMaster 13/8 79225f6d37ff34fd -bladeMaster 13/80 48d0111251b424c6 -bladeMaster 13/81 af5045acd1fdbb48 -bladeMaster 13/82 b9a945ed967df6aa -bladeMaster 13/83 5af11662c05881d4 -bladeMaster 13/84 674b0fd5517921fa -bladeMaster 13/85 538c949b979b3f30 -bladeMaster 13/86 f1743c69961b640a -bladeMaster 13/87 2a5b0386dd103ce8 -bladeMaster 13/88 bbb6fcdecca098b2 -bladeMaster 13/89 6988ca2f28aaad60 -bladeMaster 13/9 fdc75f2e592c6e73 -bladeMaster 13/90 8c515c2f1d5fb8ba -bladeMaster 13/91 a433ad9b34f0966e -bladeMaster 13/92 d22a90cfa813d354 -bladeMaster 13/93 a1ff3164a7488c18 -bladeMaster 13/94 0f70104308088426 -bladeMaster 13/95 9062522078f5ff2c -bladeMaster 13/96 d2b46c9364c44268 -bladeMaster 13/97 38ee94908f28c636 -bladeMaster 13/98 94385a23a173e28a -bladeMaster 13/99 2ca6b790b9ed0e88 -bladeMaster 14/0 7687ed5c5a0bb3cc -bladeMaster 14/1 43efe29f5a7b367c -bladeMaster 14/10 ebc17bd6838c4c1a -bladeMaster 14/100 c3c1c2018ed854d2 -bladeMaster 14/101 4aeb9ad5b9824447 -bladeMaster 14/102 c54820f6d2711b4f -bladeMaster 14/103 a1fa9d72e4ba8b35 -bladeMaster 14/104 53263af3c8182769 -bladeMaster 14/105 3d864ea4c675ac43 -bladeMaster 14/106 0fd113a915866565 -bladeMaster 14/107 864dd94b38b96937 -bladeMaster 14/108 ef8e330ec3c1a5af -bladeMaster 14/109 72badc46b1be28d9 -bladeMaster 14/11 af37be6d7fb64aea -bladeMaster 14/110 a0919415cdc1655a -bladeMaster 14/111 36eb21124772bd51 -bladeMaster 14/112 a1a651b2cfb98548 -bladeMaster 14/113 702670042271cb48 -bladeMaster 14/114 2dd1e312768bc4a0 -bladeMaster 14/115 985272396eb1f18e -bladeMaster 14/116 772aaaf5a39b83b8 -bladeMaster 14/117 5a85748f68a698c6 -bladeMaster 14/118 2320c542dbac586a -bladeMaster 14/119 526afc5288ce72de -bladeMaster 14/12 4dad4b1d2301d0bf -bladeMaster 14/120 248b1b1dd150131a -bladeMaster 14/121 b77ff345b3189f7e -bladeMaster 14/122 0a042784c14ca2b0 -bladeMaster 14/123 385f18b517e7127c -bladeMaster 14/124 9d26838c6249afd2 -bladeMaster 14/125 0991a2018c39e978 -bladeMaster 14/126 510c1f6fdbfd3042 -bladeMaster 14/127 4b0f668f3a61af88 -bladeMaster 14/128 8929e865c36d9bd8 -bladeMaster 14/129 a6da5012265e0c72 -bladeMaster 14/13 0838130c898a904a -bladeMaster 14/130 a29c550bcfff37b8 -bladeMaster 14/131 84cd4ebfa1e4a1be -bladeMaster 14/132 71c52f5e2e4cf38e -bladeMaster 14/133 21171bb1040b9486 -bladeMaster 14/134 aa24c347d7e530c2 -bladeMaster 14/135 5085d8581e5db5b2 -bladeMaster 14/136 4371a56c60158526 -bladeMaster 14/137 3fe5a1fb3f879b8e -bladeMaster 14/138 5cc28da8b1c98ea2 -bladeMaster 14/139 b0eb7780e103633a -bladeMaster 14/14 84900ac408a7a05a -bladeMaster 14/140 2d090c128ea6cf60 -bladeMaster 14/141 1ba76cf5bdd445d2 -bladeMaster 14/142 4f269794114dedac -bladeMaster 14/143 fcab1a14123edcac -bladeMaster 14/144 d600902b31f3833a -bladeMaster 14/145 d3d93c927b7a8e84 -bladeMaster 14/146 bf78d8be2dbb5178 -bladeMaster 14/147 01629755528c480c -bladeMaster 14/148 eb9bc684792188c4 -bladeMaster 14/149 728ed6c42247a870 -bladeMaster 14/15 7c12d60791a13e36 -bladeMaster 14/150 0a5e090f2c8303a2 -bladeMaster 14/151 accd2b0c434585d2 -bladeMaster 14/152 87606823d10effe4 -bladeMaster 14/153 426d307ef487c0d0 -bladeMaster 14/154 b44f8a7e3bf6c7ec -bladeMaster 14/155 cbb7cb6e0e86ea36 -bladeMaster 14/156 bebf7cf6a99941be -bladeMaster 14/157 10a943a530248f40 -bladeMaster 14/158 76ae7ca1d81ac196 -bladeMaster 14/159 3a329cf37ba03708 -bladeMaster 14/16 922aef98fa16d5d0 -bladeMaster 14/160 bb7a8542dc4d5dd6 -bladeMaster 14/161 90755485950e6310 -bladeMaster 14/162 66e291ba2aea6e0c -bladeMaster 14/163 07dc56eba635feca -bladeMaster 14/169 594beea6626ff9be -bladeMaster 14/17 29aa3fff7727a0f4 -bladeMaster 14/18 4080bb375ad7314a -bladeMaster 14/19 c6acab5d038fbb4a -bladeMaster 14/2 739d114d44fef314 -bladeMaster 14/20 91c9456c261f6630 -bladeMaster 14/21 60da8775fefa236b -bladeMaster 14/22 86e4a42b7cecc804 -bladeMaster 14/23 a649a7d8cb0e8a18 -bladeMaster 14/24 b13f2bd6248f6a3d -bladeMaster 14/25 d4e734c039a7a45b -bladeMaster 14/26 2953b98d49f69e35 -bladeMaster 14/28 c132b360871a628c -bladeMaster 14/29 a300f5a1d7e34d08 -bladeMaster 14/3 edffbafc46d4b488 -bladeMaster 14/31 b99b62b26f94b4d0 -bladeMaster 14/32 b5c4129a02ca6f76 -bladeMaster 14/33 18b5d21922609b66 -bladeMaster 14/34 8cc44a4740cf5835 -bladeMaster 14/35 17b98d102bed7bc8 -bladeMaster 14/36 4a6841647506be78 -bladeMaster 14/37 68c2b70bbcabbd5c -bladeMaster 14/38 6fba31e96ed3bfce -bladeMaster 14/39 468af4c0a4dedcd6 -bladeMaster 14/4 806e1d96a2770e1a -bladeMaster 14/40 6a1bcc71bbbc0394 -bladeMaster 14/41 5d37f80c1996f6a5 -bladeMaster 14/42 2da58f1adce2b465 -bladeMaster 14/43 e527d6ed9ab30357 -bladeMaster 14/44 8fc47fcd5c13f5d7 -bladeMaster 14/45 04092953f41e2c0d -bladeMaster 14/46 3164ae11d06f2aa3 -bladeMaster 14/47 8dd999f3b500bc01 -bladeMaster 14/48 4cacbdf84f5c084f -bladeMaster 14/49 e4497d6e86b06b91 -bladeMaster 14/5 d4e23c84af5b61b6 -bladeMaster 14/50 297dc274145243f9 -bladeMaster 14/51 eaae49a22d67ed98 -bladeMaster 14/52 82ea682b095553aa -bladeMaster 14/53 3e36219f41dd49da -bladeMaster 14/54 f7e14ec176498914 -bladeMaster 14/55 6422dc67c13905ac -bladeMaster 14/56 7457aa9af99f9b62 -bladeMaster 14/57 ccb12e55b843cfe0 -bladeMaster 14/58 2d1874c554adeab6 -bladeMaster 14/59 e420fe067568960e -bladeMaster 14/6 42cbbeef57197576 -bladeMaster 14/60 2d85beaf78e48e8c -bladeMaster 14/61 f1977d765ef163d8 -bladeMaster 14/62 bf251654df5e2888 -bladeMaster 14/63 fcab362470a76c50 -bladeMaster 14/64 6f32b9156477fbca -bladeMaster 14/65 ffb1be9817394cc0 -bladeMaster 14/66 4656d34ed9a21292 -bladeMaster 14/67 d20e8869c4fb436a -bladeMaster 14/68 16bcb794330ab43a -bladeMaster 14/7 f98ef4bf81ceca2e -bladeMaster 14/70 fba79d623c23adc4 -bladeMaster 14/71 feb13c5d5fba6f0a -bladeMaster 14/72 c73fe2104cc5c98a -bladeMaster 14/73 2040bb0b44f2ab8c -bladeMaster 14/74 335af2dc3ca957ba -bladeMaster 14/75 77ae291006880ad2 -bladeMaster 14/76 11d4a9135aaf2d94 -bladeMaster 14/77 0bc76098922a22c4 -bladeMaster 14/78 5ce19675f29ffef2 -bladeMaster 14/79 b103519805edca7e -bladeMaster 14/8 396e7465dbd5103a -bladeMaster 14/80 3945ca93e700a3d2 -bladeMaster 14/81 2eac8a445168a550 -bladeMaster 14/82 d689c7b05af56ece -bladeMaster 14/83 1e96afbab5dfc08e -bladeMaster 14/84 724f869df7b45a2c -bladeMaster 14/85 1dced9af29daa258 -bladeMaster 14/86 6b8f8ccb229327e4 -bladeMaster 14/87 d2e73e24f6db65f0 -bladeMaster 14/88 f4358467e18ca506 -bladeMaster 14/89 44928c2926a3d930 -bladeMaster 14/9 b2fffac7a48f72dc -bladeMaster 14/90 53f0311b9f2fc5de -bladeMaster 14/91 65022da49602d932 -bladeMaster 14/92 751ece030d8f586e -bladeMaster 14/93 dc23b041672dbf8c -bladeMaster 14/94 fb77641969753e80 -bladeMaster 14/95 bfdb112f180a54a4 -bladeMaster 14/96 a54778a0852d5934 -bladeMaster 14/97 cfe8357cdbe016fa -bladeMaster 14/98 1376f8214eacff26 -bladeMaster 14/99 b37ed90fcb22cd02 -bladeMaster 15/0 c39e0cd1232f4f22 -bladeMaster 15/1 7ebff6c213d668a2 -bladeMaster 15/10 8d8be8686b77b10a -bladeMaster 15/11 e02e57133c110218 -bladeMaster 15/12 c8826dd22b27dfa2 -bladeMaster 15/13 384892d9324e0b40 -bladeMaster 15/14 517074de135ff97a -bladeMaster 15/15 6651e3518ff39d7c -bladeMaster 15/16 6828ebbaf3d72a80 -bladeMaster 15/17 dc7237d9a781a842 -bladeMaster 15/18 152cbbbc3aeb766a -bladeMaster 15/19 fc251bf3853d9218 -bladeMaster 15/2 2f1c8fd9ba2f6006 -bladeMaster 15/20 6b6c5a01f9cd3308 -bladeMaster 15/21 ce528442e85fa510 -bladeMaster 15/22 265ed9eab73b2025 -bladeMaster 15/23 4af36b770495df4e -bladeMaster 15/24 b506b837e02489f0 -bladeMaster 15/26 f96be02902dbcab2 -bladeMaster 15/27 f9026bd7482a6b3b -bladeMaster 15/28 adb2e8f4f4df5df2 -bladeMaster 15/29 bdbed04eb5174350 -bladeMaster 15/3 57415de3c19e4394 -bladeMaster 15/30 8c61026807e55151 -bladeMaster 15/31 629a50743cc58a3f -bladeMaster 15/32 d1da8ee6040de879 -bladeMaster 15/33 6b0f71f11284328d -bladeMaster 15/34 40670c3317e95be7 -bladeMaster 15/35 21bfea5a9b2a609e -bladeMaster 15/36 0044cdbb56ac238b -bladeMaster 15/4 cca4c98fc3461efa -bladeMaster 15/5 57e02a76cb1baec6 -bladeMaster 15/6 a1886db20fc1139a -bladeMaster 15/7 53aad8a73468ce86 -bladeMaster 15/8 7151c81adc4f2642 -bladeMaster 15/9 e38f52f5f60b1b2a -bladeMaster 2/0 4aeb835b15e41f21 -bladeMaster 2/1 cac59c4759bdbbc7 -bladeMaster 2/10 a25d816c1eda9070 -bladeMaster 2/11 3b2e92afcf07ec1e -bladeMaster 2/12 d00faac57f349137 -bladeMaster 2/13 8305d73ef37f2982 -bladeMaster 2/14 32a62a87f34c5c22 -bladeMaster 2/15 aef108776706e121 -bladeMaster 2/16 17f468b8f44f0cb6 -bladeMaster 2/17 8aff505c83add137 -bladeMaster 2/18 cc32a7822912e529 -bladeMaster 2/2 6a3882a4e76d83cb -bladeMaster 2/3 46c3912d6735a5b0 -bladeMaster 2/4 c3d12829d9ed8e5e -bladeMaster 2/5 263576bda6bd6851 -bladeMaster 2/6 9b07c422ef47284d -bladeMaster 2/7 adddf5fa117ee142 -bladeMaster 2/8 0f9bbc06d8714e8c -bladeMaster 2/9 86de26b98e30474d -bladeMaster 3/0 cd54cb90213b1c8d -bladeMaster 3/1 071e1d037487526b -bladeMaster 3/10 2a01712c8e4bb9ad -bladeMaster 3/11 07896c22f60e3938 -bladeMaster 3/2 dad42b872f2593b4 -bladeMaster 3/3 6e9290bab28a52ea -bladeMaster 3/4 ebcf59909a0fc28e -bladeMaster 3/5 381ebd1eb87304a5 -bladeMaster 3/6 876b21def5540a21 -bladeMaster 3/7 ea070dfee267da81 -bladeMaster 3/8 65963bad8fa3ad3a -bladeMaster 3/9 a4c776620919a741 -bladeMaster 4/0 2e21561e73f0bc55 -bladeMaster 4/1 4f23133620771733 -bladeMaster 4/10 96f55233e1c077e0 -bladeMaster 4/11 1ba079613d98bd15 -bladeMaster 4/12 b81a71dbb9850b6a -bladeMaster 4/13 08542c019ae83f60 -bladeMaster 4/14 e91942cb53111a5a -bladeMaster 4/15 77473bfd07e18407 -bladeMaster 4/16 7b586e12019d1720 -bladeMaster 4/17 c25dda80515e5e9c -bladeMaster 4/18 8d3765090f997dd1 -bladeMaster 4/19 cf665aeb7a8a8da4 -bladeMaster 4/2 1f86ccfa203c8325 -bladeMaster 4/20 bb02ebf40de5b928 -bladeMaster 4/21 aa2300938bbb8068 -bladeMaster 4/22 cae98b1aed21ac7a -bladeMaster 4/23 cca4dd1cf627060c -bladeMaster 4/24 4d3cdd8dd0a2666d -bladeMaster 4/3 107d889d6e76b898 -bladeMaster 4/4 9ebb035aebb50f92 -bladeMaster 4/5 5771c99bdc6fcbad -bladeMaster 4/6 3e2af290399d90f5 -bladeMaster 4/7 2fa1607b3b6d70d9 -bladeMaster 4/8 c0e5d700d999b244 -bladeMaster 4/9 4dd8c13d02d7b1f3 -bladeMaster 5/0 f53b0ccd912b67f9 -bladeMaster 5/1 7645c4fb66ff0247 -bladeMaster 5/10 98c9e5799c7653a4 -bladeMaster 5/11 4d7ba53861a9851f -bladeMaster 5/12 36a45fcb1aa44e41 -bladeMaster 5/13 2b1298cb42120d68 -bladeMaster 5/14 e2ab325cd8327486 -bladeMaster 5/15 feb6c1bd3208212b -bladeMaster 5/16 761b2d55a1cfed3c -bladeMaster 5/17 69bd6fa9aea1833d -bladeMaster 5/18 6ae1a9a00ca9ff2d -bladeMaster 5/19 796f6baded303824 -bladeMaster 5/2 f03005d926cdf678 -bladeMaster 5/20 bf6706f607887c22 -bladeMaster 5/21 770ab10bccd4765a -bladeMaster 5/22 5d78a8c9d8b77beb -bladeMaster 5/23 b313940dbe0df7a1 -bladeMaster 5/3 93f113bc2e683218 -bladeMaster 5/30 137c348dd062cf07 -bladeMaster 5/31 779fd471758c4cfc -bladeMaster 5/33 1568d5a38eeff02b -bladeMaster 5/34 1b423693808d3b8f -bladeMaster 5/36 57e3e41ae0ec22c5 -bladeMaster 5/4 b02c5d84f5e784a5 -bladeMaster 5/5 05997a8b84c5049f -bladeMaster 5/6 7c2669aad95339a0 -bladeMaster 5/7 2e1b0a535ea8830b -bladeMaster 5/8 4534d895ada7269b -bladeMaster 5/9 95dbcf21b83c7569 -bladeMaster 6/0 8f6b21fdee7e2b32 -bladeMaster 6/1 bcb55c6ed3375ee7 -bladeMaster 6/10 fcb0e34288166a99 -bladeMaster 6/11 a7ca68a6112a4bea -bladeMaster 6/12 5cc65faeee2c396b -bladeMaster 6/13 4698b0e6f68b06fa -bladeMaster 6/14 96c7d6266f69b5b0 -bladeMaster 6/15 1509842edb7a45a2 -bladeMaster 6/16 086371e2ac441320 -bladeMaster 6/17 c677fb83b8aeb7f3 -bladeMaster 6/18 ec3474166de5cb55 -bladeMaster 6/19 c99de851d6ad8498 -bladeMaster 6/2 e4eb30d775a40a34 -bladeMaster 6/20 5995f39336919c04 -bladeMaster 6/21 5ad1684495e80293 -bladeMaster 6/3 5d35f0336c7e164c -bladeMaster 6/4 5dbe1af5f3797cdf -bladeMaster 6/5 033b8c36de2805fb -bladeMaster 6/6 d17faaa26daa6f48 -bladeMaster 6/7 c5879fdfb5e6bbb0 -bladeMaster 6/8 daf5cf1e203b6dcb -bladeMaster 6/9 d3e14d98c69cac82 -bladeMaster 7/0 fd27c492660a0e84 -bladeMaster 7/1 276e942fc7b40fb6 -bladeMaster 7/10 ef825e1930ed8f9a -bladeMaster 7/11 657baaf82d604a39 -bladeMaster 7/12 27194c49c306e15a -bladeMaster 7/13 f92791cea3ffaf8f -bladeMaster 7/14 2d31ad99107c2931 -bladeMaster 7/16 f2554f111ba9acec -bladeMaster 7/17 b7932e9dfa741099 -bladeMaster 7/18 ba72b3bb9e55ccba -bladeMaster 7/19 fb81defc65e593d2 -bladeMaster 7/2 51f5e6956aef6b54 -bladeMaster 7/21 105e121835e9c35c -bladeMaster 7/22 eba9c9cf02b25edc -bladeMaster 7/24 8304063f8b8bbd2c -bladeMaster 7/25 1c08bbf2dc85a85e -bladeMaster 7/26 5561913361b93da5 -bladeMaster 7/27 12a4152cf97e5f91 -bladeMaster 7/28 06e9a438c14d28ec -bladeMaster 7/29 3c877ce3353a9fb6 -bladeMaster 7/3 b41258b2dd9dd8cf -bladeMaster 7/30 ca352b119665c06d -bladeMaster 7/31 490919a76692083b -bladeMaster 7/33 b20e60d0a776c525 -bladeMaster 7/34 124e502e4f372b79 -bladeMaster 7/35 2c0a263385234e9d -bladeMaster 7/36 146bd733fe858989 -bladeMaster 7/38 d00fea0810881024 -bladeMaster 7/39 4ffeec0b6db5eefa -bladeMaster 7/4 d4f2a61d56e9d241 -bladeMaster 7/40 33ead686fd69c029 -bladeMaster 7/41 0b3cc3eeb990d7e1 -bladeMaster 7/42 6bef819119689f44 -bladeMaster 7/43 e2b0dfd925fb10f8 -bladeMaster 7/44 7d29d12a01e5168b -bladeMaster 7/45 7363ee6e461a8bb2 -bladeMaster 7/46 a2bd8ac892a0b781 -bladeMaster 7/49 6fba8ffe6f89d1eb -bladeMaster 7/5 03931d27f546a221 -bladeMaster 7/50 ddbf097caa73f4fc -bladeMaster 7/51 b4d1f3fee99e5efa -bladeMaster 7/52 cb3a69a39fb56a74 -bladeMaster 7/59 5ac26211f090acd3 -bladeMaster 7/6 e2d1a1d5017d1c0c -bladeMaster 7/60 141ea166c671ef4b -bladeMaster 7/61 85626d9063a379b2 -bladeMaster 7/62 a656a0f59fa2ea03 -bladeMaster 7/63 b98b042320fcdfde -bladeMaster 7/64 2aa9eb71979426b1 -bladeMaster 7/65 9630c08ac4e087d3 -bladeMaster 7/66 16a962dbb3c7c3f1 -bladeMaster 7/67 0d3a560fa1d746ce -bladeMaster 7/68 ce8241ee75ceaa46 -bladeMaster 7/69 282f47483acaabea -bladeMaster 7/7 aa8d3301e5057236 -bladeMaster 7/70 d16ff92b7007ded5 -bladeMaster 7/72 d4d5fd2b2f1dad13 -bladeMaster 7/73 68f776162a8792ca -bladeMaster 7/8 4feaa0e3d0c7c8a5 -bladeMaster 7/9 5ad9624c5620ae8c -bladeMaster 8/0 9b9a7a7bf861be8a -bladeMaster 8/1 634609a920e991d8 -bladeMaster 8/10 9ce3be8a17f752bd -bladeMaster 8/11 66d2d68dfcc6914b -bladeMaster 8/12 59f640bd96b716ba -bladeMaster 8/13 a7b48976784fac21 -bladeMaster 8/14 25d03feee06736b6 -bladeMaster 8/15 de6cecd6538ce15b -bladeMaster 8/16 66d9369fd917fd5d -bladeMaster 8/17 7b4162572a96b92f -bladeMaster 8/18 6726786323094263 -bladeMaster 8/19 35292b6772e129fd -bladeMaster 8/2 31d1b8010dd6f691 -bladeMaster 8/20 bbf5ee37ece07164 -bladeMaster 8/21 b3e580191404ac0d -bladeMaster 8/22 132ee1f0a2ee3178 -bladeMaster 8/23 21ee4134ab09c2cb -bladeMaster 8/24 2ef7d69c70af8b3e -bladeMaster 8/25 ec1d8a199cd28f39 -bladeMaster 8/26 430ffbb81db2bb56 -bladeMaster 8/27 102c10486d70557e -bladeMaster 8/28 6a31c471035d92b2 -bladeMaster 8/29 f73577e8d7cd8cd7 -bladeMaster 8/3 70452b47711a6e03 -bladeMaster 8/30 e72a4b8afd9e422f -bladeMaster 8/31 815fbc34c04edd73 -bladeMaster 8/32 411de2c71a15b4c1 -bladeMaster 8/33 b194d4908c49ec2c -bladeMaster 8/34 1bc73d0f76a88b6f -bladeMaster 8/35 a309936b7717eedc -bladeMaster 8/36 722a5e8395d79411 -bladeMaster 8/37 b702d4d82f4b08cf -bladeMaster 8/38 8158c1adf2ad09e6 -bladeMaster 8/39 0ec3ef0af2462c4e -bladeMaster 8/4 b7eee9e29abeb525 -bladeMaster 8/40 62d81d7bce347527 -bladeMaster 8/41 dc8356c53bd5047c -bladeMaster 8/42 788c7b408689bf09 -bladeMaster 8/43 3bedd3d9aac0e300 -bladeMaster 8/44 4be4f54c1020014d -bladeMaster 8/45 919c60babc56136d -bladeMaster 8/46 dc3d4d6bf65dcfd9 -bladeMaster 8/47 3e8f4d4b9ca71d65 -bladeMaster 8/48 a53c4db3bacf635a -bladeMaster 8/49 58199b28d3f7729b -bladeMaster 8/5 523f735c90d37a0d -bladeMaster 8/50 adf744d367638172 -bladeMaster 8/51 0d6456709065c20a -bladeMaster 8/52 53efbb368668ec43 -bladeMaster 8/59 ff033336c5f744b5 -bladeMaster 8/6 b4a29265abe94b1f -bladeMaster 8/60 91b03d9456c97748 -bladeMaster 8/61 af71081f4096a120 -bladeMaster 8/62 f629e33fb0099c7b -bladeMaster 8/63 17a8a44263ab5bbb -bladeMaster 8/64 338b0c4f7485bb61 -bladeMaster 8/65 3efc565807ca7927 -bladeMaster 8/66 9520ac3f4eeec17f -bladeMaster 8/67 77195732f4c822a5 -bladeMaster 8/68 0dd8cf0cc57c4952 -bladeMaster 8/69 bb01008303f50246 -bladeMaster 8/7 86661c7f402ab106 -bladeMaster 8/70 bd324a9e5e8d16ce -bladeMaster 8/71 8ad5efac0639ffea -bladeMaster 8/72 404286820d80a35d -bladeMaster 8/73 2331974c95a90f91 -bladeMaster 8/8 d32189d70efbb9d1 -bladeMaster 8/9 83df4380fed3865c -bladeMaster 9/0 a2024beecf7678bf -bladeMaster 9/1 943400494704c5b8 -bladeMaster 9/10 aaf36ec24761935b -bladeMaster 9/11 973eaebab5e57b8d -bladeMaster 9/12 0167686f779a0840 -bladeMaster 9/13 6330e3d433b5db1f -bladeMaster 9/14 c5b22505dc4851b8 -bladeMaster 9/15 dc7905c33ff9c531 -bladeMaster 9/16 38e79518e8c12fb3 -bladeMaster 9/17 e354b954598de66f -bladeMaster 9/18 dbe41a0e2e3349c6 -bladeMaster 9/19 1e3489aec5bb312d -bladeMaster 9/2 c0bfddb65f019c13 -bladeMaster 9/20 5e4c05cc899093e5 -bladeMaster 9/21 162ea3ca43fce9cf -bladeMaster 9/22 ed76474b7ebda956 -bladeMaster 9/23 ecc11216cc960dd9 -bladeMaster 9/24 b8b0a2e056910ef7 -bladeMaster 9/25 eca14f0e53b9933a -bladeMaster 9/26 247c2597c4e614de -bladeMaster 9/27 0e189bdcd24b53fe -bladeMaster 9/28 57d034692c11506f -bladeMaster 9/29 abcbafa723c2da7e -bladeMaster 9/3 3d388fb0d6516d94 -bladeMaster 9/30 7397c416d676795d -bladeMaster 9/31 bf25c603c54d7b6b -bladeMaster 9/32 f43cf6d473972b55 -bladeMaster 9/33 836e44c63246ea92 -bladeMaster 9/34 36c268d2dca63598 -bladeMaster 9/35 4fa987824aed9168 -bladeMaster 9/36 42a1a37a3aa75559 -bladeMaster 9/37 7b65942e5bbd4ecb -bladeMaster 9/38 b9b3bbe46e6fc731 -bladeMaster 9/39 8330b0be73f28483 -bladeMaster 9/4 65327a98602c9670 -bladeMaster 9/40 7128ef91a1a3f14c -bladeMaster 9/41 d3f3622d16ec12dd -bladeMaster 9/42 63532487b9e13ded -bladeMaster 9/43 80e4d93f5c33b9c3 -bladeMaster 9/44 54936208c89e1abe -bladeMaster 9/45 d110a33f260a3710 -bladeMaster 9/46 c4ba8711b39158e7 -bladeMaster 9/47 120255b32930fa44 -bladeMaster 9/48 d23b58adde7c3fb8 -bladeMaster 9/49 2c6e7ff6cd0ee63c -bladeMaster 9/5 55faf332f8c9bd34 -bladeMaster 9/50 26944c61ae60d433 -bladeMaster 9/51 bbbd327cf9ebb2f7 -bladeMaster 9/52 96d3ea51d1988aad -bladeMaster 9/59 742ae58bc4a22dd6 -bladeMaster 9/6 7867f8bffc130f84 -bladeMaster 9/60 bcd5d2d14e804036 -bladeMaster 9/61 df0b78b1634930f8 -bladeMaster 9/62 6be8c428ad9fc8c8 -bladeMaster 9/63 cce79bc37ba15b6e -bladeMaster 9/64 a2e99f65d9e77c92 -bladeMaster 9/65 f057d7fcc033debb -bladeMaster 9/66 22413bc8142a7581 -bladeMaster 9/67 7e217967cfce17b3 -bladeMaster 9/68 8d9d4c67ed4c4453 -bladeMaster 9/69 96818dd633e401ff -bladeMaster 9/7 e7e0ba254538db29 -bladeMaster 9/70 66cfa71cf9ee9f88 -bladeMaster 9/71 b395f8d7750fc752 -bladeMaster 9/72 1ea7b3cf6359659d -bladeMaster 9/73 731021c2d50569b5 -bladeMaster 9/8 d5f1b5ae4c47f4ed -bladeMaster 9/9 5e5a0777ece28872 -newDarkWizard 0/0 6148c644d5bcc24a -newDarkWizard 0/1 3b6272f42a76e0b0 -newDarkWizard 0/10 af418bcce3ae0eb7 -newDarkWizard 0/11 ecdc29ba70e5da94 -newDarkWizard 0/12 f7ce84c4cedb6199 -newDarkWizard 0/13 8ad8e7356f8fe75d -newDarkWizard 0/14 481804e16d65b011 -newDarkWizard 0/15 64e4b861f3655c78 -newDarkWizard 0/16 b715f645bfb4e692 -newDarkWizard 0/17 40b98407df77a05c -newDarkWizard 0/18 55062da5392f303e -newDarkWizard 0/19 c80d481a22a9dd39 -newDarkWizard 0/2 446bb49b54716507 -newDarkWizard 0/20 b04607a1834e3801 -newDarkWizard 0/21 0570a2e7bf35f1c7 -newDarkWizard 0/22 e52762f1f0c69368 -newDarkWizard 0/23 0c54eac040e3ec9a -newDarkWizard 0/24 2eb6930d78a08bcd -newDarkWizard 0/25 d465c44bee53bf35 -newDarkWizard 0/26 76b127c82449129c -newDarkWizard 0/27 b290ce9d9a4418d6 -newDarkWizard 0/28 2ffdaac0a7cc4932 -newDarkWizard 0/3 8fc7944a94383abc -newDarkWizard 0/31 c52f3f5451c23f05 -newDarkWizard 0/32 bcd855a71ed02596 -newDarkWizard 0/33 29292a3fd568596e -newDarkWizard 0/34 5551e248e4e17e20 -newDarkWizard 0/35 e63340e2b213ebb0 -newDarkWizard 0/4 f3ac45596d4d7cf0 -newDarkWizard 0/5 5a085dab281cc3ed -newDarkWizard 0/6 1a0548e13255d118 -newDarkWizard 0/7 574604be40ab500b -newDarkWizard 0/8 2936b3cec8107278 -newDarkWizard 0/9 e1d77eccac1cefc1 -newDarkWizard 1/0 e2b774cd20bc0457 -newDarkWizard 1/1 3a7450498aac1b71 -newDarkWizard 1/2 f6e8bd3efa40904e -newDarkWizard 1/3 eba4517f76bc5199 -newDarkWizard 1/4 10e97ec4c698f3c6 -newDarkWizard 1/5 2b156cdfd049c813 -newDarkWizard 1/6 3d649c09a2c3b41c -newDarkWizard 1/7 1123bfe5218fd00c -newDarkWizard 1/8 87ae108c8e1a1b88 -newDarkWizard 10/0 6e5834a4270a9e15 -newDarkWizard 10/1 5d61a3ca60f0cd8b -newDarkWizard 10/10 e4697b0f3129273d -newDarkWizard 10/11 57a12fbc53629c88 -newDarkWizard 10/12 94505a03137b2b44 -newDarkWizard 10/13 4b765aef198648f6 -newDarkWizard 10/14 1423fd959a2e6138 -newDarkWizard 10/15 dbc03b2d52ebba2a -newDarkWizard 10/16 1966161011d464d6 -newDarkWizard 10/17 cc483b574fb4ff31 -newDarkWizard 10/18 11a473a1bf9f4f5b -newDarkWizard 10/19 f77c9baf03ffe1e0 -newDarkWizard 10/2 a3dfc866c7d200bd -newDarkWizard 10/20 207dd2d349cad1b8 -newDarkWizard 10/21 d1bff0494374ed3e -newDarkWizard 10/22 2f0afa6072f4fa2f -newDarkWizard 10/23 5243cae8a52fb15f -newDarkWizard 10/24 724c605e4a9f3b4c -newDarkWizard 10/25 ff5f3315d1b20ec3 -newDarkWizard 10/26 c4648370b3385146 -newDarkWizard 10/27 e7736d7ffbf8d312 -newDarkWizard 10/28 84993b553f45222c -newDarkWizard 10/29 e5e2a37a39edd5fc -newDarkWizard 10/3 051dc4b2cc996020 -newDarkWizard 10/30 147396b5579bc552 -newDarkWizard 10/31 bb747fcd7b7bb1ce -newDarkWizard 10/32 e484e2b4827490db -newDarkWizard 10/33 ed6ef671e97509dc -newDarkWizard 10/34 5396997a6cd04470 -newDarkWizard 10/35 6aa00ae348fc2056 -newDarkWizard 10/36 1d33aea4aca172cb -newDarkWizard 10/37 c76db39088c9f8d1 -newDarkWizard 10/38 737dd2fe9fc7ee79 -newDarkWizard 10/39 4dd0f52003db88d2 -newDarkWizard 10/4 79ba200805e1d3ae -newDarkWizard 10/40 20b965bdf784ad88 -newDarkWizard 10/41 4cc7be24862af47c -newDarkWizard 10/42 21de59d01ee484b0 -newDarkWizard 10/43 c90d71604f432c86 -newDarkWizard 10/44 8c4162377e9d18d8 -newDarkWizard 10/45 eeb018c49e789ce0 -newDarkWizard 10/46 4fb1db8d2e56f3d5 -newDarkWizard 10/47 1c1ba2df23c3e92e -newDarkWizard 10/48 33f5efc919992aad -newDarkWizard 10/49 c5cf1a52d2985873 -newDarkWizard 10/5 3835977f5d7296f0 -newDarkWizard 10/50 c7199716ff423976 -newDarkWizard 10/51 0167e5d36cd76078 -newDarkWizard 10/52 691a4aab8288dca9 -newDarkWizard 10/6 3084b9d168a46505 -newDarkWizard 10/62 260df4f87ccc963b -newDarkWizard 10/63 3626f9615960865b -newDarkWizard 10/64 4315260362cb4349 -newDarkWizard 10/65 35c65f2fb1e9664b -newDarkWizard 10/66 401552d7439ecd18 -newDarkWizard 10/67 a468c17e7338079f -newDarkWizard 10/68 8dcc91847bc8c1f3 -newDarkWizard 10/69 d4a32dc80cb74710 -newDarkWizard 10/7 974da2edebb28704 -newDarkWizard 10/70 2e74955f84ba7789 -newDarkWizard 10/71 278f26a27944d771 -newDarkWizard 10/8 a4f7f137be7b2ba8 -newDarkWizard 10/9 5fa066f2fdb49a8f -newDarkWizard 11/0 de1c704ab9a4bf86 -newDarkWizard 11/1 4440ef621f96fccc -newDarkWizard 11/10 13a4b0ab835fbed4 -newDarkWizard 11/11 a8392a4ae4686453 -newDarkWizard 11/12 dbede2222b753e21 -newDarkWizard 11/13 17c77cb6769ec011 -newDarkWizard 11/14 d8aab84a2d6ab89b -newDarkWizard 11/15 ee60faf23d6e1e38 -newDarkWizard 11/16 7b58ab9348f485eb -newDarkWizard 11/17 ac28c4643168af6f -newDarkWizard 11/18 3cfbb5598cf61099 -newDarkWizard 11/19 766e7565d2539965 -newDarkWizard 11/2 5b7b26b66387a51d -newDarkWizard 11/20 dc19315add4a745a -newDarkWizard 11/21 46250ca7984d2421 -newDarkWizard 11/22 02f236609d568107 -newDarkWizard 11/23 d5157b1566e83943 -newDarkWizard 11/24 c3a95d23f3184c1f -newDarkWizard 11/25 07335efa420d6ff9 -newDarkWizard 11/26 a41c4dcc142571b6 -newDarkWizard 11/27 9a9f3408b9a0f91a -newDarkWizard 11/28 4a88ded4b094197a -newDarkWizard 11/29 314c7b3fbc81863b -newDarkWizard 11/3 e373654bb4cd0d16 -newDarkWizard 11/30 8e806938095cb258 -newDarkWizard 11/31 c92e90b77d420bd3 -newDarkWizard 11/32 c21a097ae69c0d57 -newDarkWizard 11/33 ce99323dc186fa15 -newDarkWizard 11/34 1d0f4763ba3942e5 -newDarkWizard 11/35 fa88da337fa4bd19 -newDarkWizard 11/36 22c05a51b41c7cb2 -newDarkWizard 11/37 00fc256906de36de -newDarkWizard 11/38 c0967ac8cf0f237e -newDarkWizard 11/39 6769b4f21c6171bf -newDarkWizard 11/4 e7a614b2715048c6 -newDarkWizard 11/40 5037599e804948bb -newDarkWizard 11/41 fc276994e5578df1 -newDarkWizard 11/42 b54c6d3f98a67033 -newDarkWizard 11/43 98873df7f3118fcc -newDarkWizard 11/44 a425f97453152101 -newDarkWizard 11/45 c256264a369281f7 -newDarkWizard 11/46 32e352bc5c8bdcc5 -newDarkWizard 11/47 834760fd51626bc5 -newDarkWizard 11/48 0727e89a3aec966a -newDarkWizard 11/49 7b74d65a9eb1144e -newDarkWizard 11/5 574bd7a993e65b40 -newDarkWizard 11/50 71c6b6747d155c86 -newDarkWizard 11/51 fa284725e9d3786a -newDarkWizard 11/52 f63bcf36146fc5bd -newDarkWizard 11/59 dcb8cd79c3deeb9e -newDarkWizard 11/6 8d1023bf06541866 -newDarkWizard 11/60 657200b2bd385eb1 -newDarkWizard 11/61 cde2977a61d59884 -newDarkWizard 11/62 ee6045669d164f05 -newDarkWizard 11/63 89374c72922e6e1f -newDarkWizard 11/64 cb296d084484930a -newDarkWizard 11/65 4f45923e564861c4 -newDarkWizard 11/66 98e5f016e1cbb4ea -newDarkWizard 11/67 972fbe051bf8d6f7 -newDarkWizard 11/68 e42b301e980861d2 -newDarkWizard 11/69 85eea92e47abed13 -newDarkWizard 11/7 aac0434f887c9969 -newDarkWizard 11/70 85d3d1b6f12a9175 -newDarkWizard 11/71 d6e916d42140381d -newDarkWizard 11/72 9cde63ae1edbaafb -newDarkWizard 11/73 edbdd0c8b9954399 -newDarkWizard 11/8 827d1f695d96c665 -newDarkWizard 11/9 425b3f6393905ea3 -newDarkWizard 12/0 93ff30c6bad63fa4 -newDarkWizard 12/1 4a8b6ee2d58134a2 -newDarkWizard 12/10 1f0d281e869f0018 -newDarkWizard 12/100 0f44a3aef740a467 -newDarkWizard 12/101 47065e92aa162629 -newDarkWizard 12/102 624af3ca096f867c -newDarkWizard 12/103 8d22b303177919e8 -newDarkWizard 12/104 28f5ac64917bd204 -newDarkWizard 12/105 ba3ead8c8b3c48a0 -newDarkWizard 12/106 4f8b7623c6c11d2f -newDarkWizard 12/107 a4526078ac031e78 -newDarkWizard 12/108 3fc8ee674556ca7a -newDarkWizard 12/109 efb7331191a62aa1 -newDarkWizard 12/11 261da925c0199441 -newDarkWizard 12/110 f9cb0b5cf573a34e -newDarkWizard 12/111 e9183aec3d4d4e90 -newDarkWizard 12/112 105db025d1fee6a3 -newDarkWizard 12/113 4ea2fd61eb749772 -newDarkWizard 12/114 e942089f9673f9a0 -newDarkWizard 12/115 e07b13c674710ea2 -newDarkWizard 12/116 be94d6102ff0fd6b -newDarkWizard 12/117 ef7c8c6034882a1a -newDarkWizard 12/118 9df14e0771a3ed28 -newDarkWizard 12/119 b7d5e704cd20d8ab -newDarkWizard 12/12 d746766633d9d7a6 -newDarkWizard 12/120 9fa1f1f0e439f7fe -newDarkWizard 12/121 84137fd517c0771a -newDarkWizard 12/122 eca684a8bc0d863b -newDarkWizard 12/123 fd2c3e65beb8ca02 -newDarkWizard 12/124 a79e9e3c3cb30899 -newDarkWizard 12/125 e9c6e71ea30868fa -newDarkWizard 12/126 e57a33d4f2e4884d -newDarkWizard 12/127 16ad09f1c05a13a3 -newDarkWizard 12/128 bcf2f1dda7d056ed -newDarkWizard 12/129 00971f39b84b94dc -newDarkWizard 12/13 b7008e58df70ec90 -newDarkWizard 12/130 f09df24897432af2 -newDarkWizard 12/131 81f4a4b8beb19e11 -newDarkWizard 12/132 ec1f5a3ae4aa224f -newDarkWizard 12/133 549d13e55deba441 -newDarkWizard 12/134 cfb4db0d622e9952 -newDarkWizard 12/135 b8aab0f335106700 -newDarkWizard 12/136 deed836136f8a36f -newDarkWizard 12/137 26e4cfd83b53b2f9 -newDarkWizard 12/138 a4770273a8e335eb -newDarkWizard 12/139 44872c8b99a75c3b -newDarkWizard 12/14 1c67519b1147cc1c -newDarkWizard 12/140 15a879787bbcbf19 -newDarkWizard 12/141 173d76d6c3d41d27 -newDarkWizard 12/142 7e8d2372777c01b9 -newDarkWizard 12/143 8d331dabc1bac6d3 -newDarkWizard 12/15 bbe0e7917dd8aaa8 -newDarkWizard 12/16 9cb3ca87776c3a24 -newDarkWizard 12/17 3a8d0dffa49a4aa4 -newDarkWizard 12/18 dec5e842bfeabf50 -newDarkWizard 12/19 37c0feff1cec03b0 -newDarkWizard 12/2 22adb7de6b9c1aab -newDarkWizard 12/21 0792af6ade79b23e -newDarkWizard 12/22 df69e19845bcf6dc -newDarkWizard 12/23 dab587ec6e6659be -newDarkWizard 12/24 75bc9308644aaa9e -newDarkWizard 12/26 56b00b7c00d1fd28 -newDarkWizard 12/3 d009334cdf829fb4 -newDarkWizard 12/30 cac9cad9b5951fb7 -newDarkWizard 12/31 284c17aa996e5e0d -newDarkWizard 12/32 46f67b1cc531f17b -newDarkWizard 12/33 7e1e271a991930b9 -newDarkWizard 12/34 b911958ef761edcd -newDarkWizard 12/35 4b2a86be6d945ab7 -newDarkWizard 12/36 9e7f8d98fc4b706c -newDarkWizard 12/37 1ee3f1babce223bd -newDarkWizard 12/38 9c733099dbdd5d99 -newDarkWizard 12/39 86467194d304c4b4 -newDarkWizard 12/4 17e138804375366e -newDarkWizard 12/40 a1da41fa15b7bd15 -newDarkWizard 12/41 16b6121afc453edc -newDarkWizard 12/42 cb0840807e6202e6 -newDarkWizard 12/43 f4b5ff0c2f21a1d1 -newDarkWizard 12/44 1535432187544f64 -newDarkWizard 12/45 fd1c887439786238 -newDarkWizard 12/46 53e6128df3287e14 -newDarkWizard 12/47 ca91a9ac7feab5ae -newDarkWizard 12/48 571e43fe4f174904 -newDarkWizard 12/49 737470c8eb088c97 -newDarkWizard 12/5 4ccf03c572cbb72d -newDarkWizard 12/50 2ea0afa078b2e851 -newDarkWizard 12/6 e6c54e868d9c8276 -newDarkWizard 12/60 dc16ebda90571882 -newDarkWizard 12/61 dfbb75ea2cddc690 -newDarkWizard 12/62 b43d8f3b24526cc5 -newDarkWizard 12/63 7aaaabe90740b10a -newDarkWizard 12/64 86e39525c0233d4d -newDarkWizard 12/65 cc960f30a80c2115 -newDarkWizard 12/7 ee4db2a40fe1d790 -newDarkWizard 12/70 701ad68f7523e5db -newDarkWizard 12/71 f2d1c5dd88bf6fb7 -newDarkWizard 12/72 a0036bf2b5c9f901 -newDarkWizard 12/8 78703323910e5520 -newDarkWizard 12/9 1a7fd8b654d50f7a -newDarkWizard 13/0 ec1c1559f1d18496 -newDarkWizard 13/1 e14621839844b08d -newDarkWizard 13/10 8e90f8c48bd42e07 -newDarkWizard 13/103 2e29a549431c3526 -newDarkWizard 13/104 9efa0dd03d7ed822 -newDarkWizard 13/105 46a39d1427bc7e0e -newDarkWizard 13/106 f95d077bb9ec3379 -newDarkWizard 13/107 4a2a64479b1228ef -newDarkWizard 13/109 c61e5b23b0eec304 -newDarkWizard 13/11 d13c6459bbb64a40 -newDarkWizard 13/110 39722cb662031540 -newDarkWizard 13/111 837fa79b85f32d64 -newDarkWizard 13/112 8775f5a1a66dbd4e -newDarkWizard 13/113 bbc36515dfe130e6 -newDarkWizard 13/114 f1fcf8fda34bbede -newDarkWizard 13/115 4b62bbdd097e1cba -newDarkWizard 13/116 f2e15b06ca0c8910 -newDarkWizard 13/117 67f8b90e8b358668 -newDarkWizard 13/118 0e8c88a0874a8f1a -newDarkWizard 13/119 68a6074b5f86dcf8 -newDarkWizard 13/12 c3139242fd6a9e08 -newDarkWizard 13/120 103cd2914f3ef79a -newDarkWizard 13/121 992df813fed0e7a0 -newDarkWizard 13/122 33bbbe55bc4f1e1c -newDarkWizard 13/123 79898c348456289a -newDarkWizard 13/124 9ac7f172011c19f6 -newDarkWizard 13/125 a2f10043f762d614 -newDarkWizard 13/126 d60487047dcdbbc6 -newDarkWizard 13/127 3e7ce14410201fe2 -newDarkWizard 13/128 4ab89476787d5096 -newDarkWizard 13/129 6293ea2678781194 -newDarkWizard 13/13 433711a78aeb7df0 -newDarkWizard 13/130 afa434877766766c -newDarkWizard 13/131 8b01ff51ed0964d2 -newDarkWizard 13/132 9b4d447a033c6ff8 -newDarkWizard 13/133 4c7b7cf5ecff27da -newDarkWizard 13/134 bf7cecc2cdff11e2 -newDarkWizard 13/135 eff3fb845f3233c0 -newDarkWizard 13/136 65186b97705adc6c -newDarkWizard 13/137 6d630b3e31aae100 -newDarkWizard 13/138 ab9e2ddbf72a88fe -newDarkWizard 13/139 59cd2a15e6baefb4 -newDarkWizard 13/14 b3f81ee5a9f4c648 -newDarkWizard 13/140 f9bc591f06433b54 -newDarkWizard 13/141 a0a2ddd265a5350c -newDarkWizard 13/142 0e8add9381725c70 -newDarkWizard 13/143 808b265bccc50fee -newDarkWizard 13/144 ea6ae6a3b9372580 -newDarkWizard 13/15 ffc1beb4bff6fc3d -newDarkWizard 13/16 0e793b2f56c36818 -newDarkWizard 13/17 5771722e4297e152 -newDarkWizard 13/18 ae372773a7f32aa0 -newDarkWizard 13/19 5b53d4ea6df240fa -newDarkWizard 13/2 73c1d9a8959927b6 -newDarkWizard 13/20 7664cc5a14b9f313 -newDarkWizard 13/21 37db226acf86b2fa -newDarkWizard 13/22 2454142b02cbda5f -newDarkWizard 13/23 7ec4dfcb8c0e6a18 -newDarkWizard 13/24 583ac536cb93b54b -newDarkWizard 13/25 ee32040d991ceff1 -newDarkWizard 13/26 742984a84dd37513 -newDarkWizard 13/27 391862fc8c35bc9f -newDarkWizard 13/28 d779d63c7c7fe1d9 -newDarkWizard 13/29 90fa6251d1bcb9ae -newDarkWizard 13/3 5f63177b5aa006ec -newDarkWizard 13/30 c159bbcde4af9dea -newDarkWizard 13/31 1da2b5ed08b97d76 -newDarkWizard 13/32 943ea9352304524b -newDarkWizard 13/33 2b1982b2b6e88a2d -newDarkWizard 13/34 4428ef56c0659e11 -newDarkWizard 13/35 8964d76b11562cdd -newDarkWizard 13/36 c96e488744f9009f -newDarkWizard 13/37 ba9f152db4134f61 -newDarkWizard 13/38 dafcbc1d82636805 -newDarkWizard 13/39 f3c397b2e6866112 -newDarkWizard 13/4 a93231a25048c6ed -newDarkWizard 13/40 c930abdd1f696fd0 -newDarkWizard 13/41 0eec4c53aeb6f1c4 -newDarkWizard 13/42 58317cfa8406cc3b -newDarkWizard 13/43 c8c0b7cf150746ce -newDarkWizard 13/44 6c6d131ef71d36e6 -newDarkWizard 13/45 c0faaf63b34b749c -newDarkWizard 13/46 9a0d6d50410b26e0 -newDarkWizard 13/47 85f907d4f58701dc -newDarkWizard 13/48 8ccf5abcb50f420c -newDarkWizard 13/49 21d2e28fce57b296 -newDarkWizard 13/5 6e204d87a0904853 -newDarkWizard 13/50 5999577e295ec696 -newDarkWizard 13/51 cea4322a520f4396 -newDarkWizard 13/52 b2fec3c09ed665c8 -newDarkWizard 13/53 ca39bb43cc2103f2 -newDarkWizard 13/54 203f1e4dcdae2364 -newDarkWizard 13/55 911d375e01e17082 -newDarkWizard 13/56 54f6c96237df3cd6 -newDarkWizard 13/57 a1d8a4e97e864de8 -newDarkWizard 13/58 9b67e33a3a80e2d6 -newDarkWizard 13/59 162212b838841cd2 -newDarkWizard 13/60 18eab2127715308c -newDarkWizard 13/61 6317b0d6356c5972 -newDarkWizard 13/62 0647de455bf41a6e -newDarkWizard 13/63 15084336bae2b9de -newDarkWizard 13/64 fb57dd0be8719484 -newDarkWizard 13/65 7771b56a5b615694 -newDarkWizard 13/66 23d61a9d08b64d9c -newDarkWizard 13/67 e84afc69e350468d -newDarkWizard 13/68 49b9394e289a46f8 -newDarkWizard 13/69 c7cc241c5e39ba18 -newDarkWizard 13/7 e4b865a49e5d7e18 -newDarkWizard 13/70 c56f2a9a482d7c14 -newDarkWizard 13/71 0cc8df0da73ae888 -newDarkWizard 13/72 d6a8e5253c646814 -newDarkWizard 13/73 2c3eaab8cd2ef8aa -newDarkWizard 13/74 6ed7fb85dab50aec -newDarkWizard 13/75 68d83f8d90db519e -newDarkWizard 13/76 9755753997a22452 -newDarkWizard 13/8 dbdf7510ce65f165 -newDarkWizard 13/80 77acc5c020d01218 -newDarkWizard 13/81 af5045acd1fdbb48 -newDarkWizard 13/82 b9a945ed967df6aa -newDarkWizard 13/83 5af11662c05881d4 -newDarkWizard 13/84 674b0fd5517921fa -newDarkWizard 13/85 538c949b979b3f30 -newDarkWizard 13/86 f1743c69961b640a -newDarkWizard 13/87 2a5b0386dd103ce8 -newDarkWizard 13/88 bbb6fcdecca098b2 -newDarkWizard 13/89 6988ca2f28aaad60 -newDarkWizard 13/9 43695ec69848ec84 -newDarkWizard 13/90 8c515c2f1d5fb8ba -newDarkWizard 13/91 a433ad9b34f0966e -newDarkWizard 13/92 d22a90cfa813d354 -newDarkWizard 13/93 a1ff3164a7488c18 -newDarkWizard 13/94 0f70104308088426 -newDarkWizard 13/95 9062522078f5ff2c -newDarkWizard 13/96 d2b46c9364c44268 -newDarkWizard 13/97 38ee94908f28c636 -newDarkWizard 13/98 94385a23a173e28a -newDarkWizard 13/99 2ca6b790b9ed0e88 -newDarkWizard 14/0 7687ed5c5a0bb3cc -newDarkWizard 14/1 43efe29f5a7b367c -newDarkWizard 14/10 ebc17bd6838c4c1a -newDarkWizard 14/100 c3c1c2018ed854d2 -newDarkWizard 14/101 4aeb9ad5b9824447 -newDarkWizard 14/102 c54820f6d2711b4f -newDarkWizard 14/103 a1fa9d72e4ba8b35 -newDarkWizard 14/104 53263af3c8182769 -newDarkWizard 14/105 3d864ea4c675ac43 -newDarkWizard 14/106 0fd113a915866565 -newDarkWizard 14/107 864dd94b38b96937 -newDarkWizard 14/108 ef8e330ec3c1a5af -newDarkWizard 14/109 72badc46b1be28d9 -newDarkWizard 14/11 af37be6d7fb64aea -newDarkWizard 14/110 a0919415cdc1655a -newDarkWizard 14/111 36eb21124772bd51 -newDarkWizard 14/112 a1a651b2cfb98548 -newDarkWizard 14/113 702670042271cb48 -newDarkWizard 14/114 2dd1e312768bc4a0 -newDarkWizard 14/115 985272396eb1f18e -newDarkWizard 14/116 772aaaf5a39b83b8 -newDarkWizard 14/117 5a85748f68a698c6 -newDarkWizard 14/118 2320c542dbac586a -newDarkWizard 14/119 526afc5288ce72de -newDarkWizard 14/12 4dad4b1d2301d0bf -newDarkWizard 14/120 248b1b1dd150131a -newDarkWizard 14/121 b77ff345b3189f7e -newDarkWizard 14/122 0a042784c14ca2b0 -newDarkWizard 14/123 385f18b517e7127c -newDarkWizard 14/124 9d26838c6249afd2 -newDarkWizard 14/125 0991a2018c39e978 -newDarkWizard 14/126 510c1f6fdbfd3042 -newDarkWizard 14/127 4b0f668f3a61af88 -newDarkWizard 14/128 8929e865c36d9bd8 -newDarkWizard 14/129 a6da5012265e0c72 -newDarkWizard 14/13 0838130c898a904a -newDarkWizard 14/130 a29c550bcfff37b8 -newDarkWizard 14/131 84cd4ebfa1e4a1be -newDarkWizard 14/132 71c52f5e2e4cf38e -newDarkWizard 14/133 21171bb1040b9486 -newDarkWizard 14/134 aa24c347d7e530c2 -newDarkWizard 14/135 5085d8581e5db5b2 -newDarkWizard 14/136 4371a56c60158526 -newDarkWizard 14/137 3fe5a1fb3f879b8e -newDarkWizard 14/138 5cc28da8b1c98ea2 -newDarkWizard 14/139 b0eb7780e103633a -newDarkWizard 14/14 84900ac408a7a05a -newDarkWizard 14/140 2d090c128ea6cf60 -newDarkWizard 14/141 1ba76cf5bdd445d2 -newDarkWizard 14/142 4f269794114dedac -newDarkWizard 14/143 fcab1a14123edcac -newDarkWizard 14/144 d600902b31f3833a -newDarkWizard 14/145 d3d93c927b7a8e84 -newDarkWizard 14/146 bf78d8be2dbb5178 -newDarkWizard 14/147 01629755528c480c -newDarkWizard 14/148 eb9bc684792188c4 -newDarkWizard 14/149 728ed6c42247a870 -newDarkWizard 14/15 7c12d60791a13e36 -newDarkWizard 14/150 0a5e090f2c8303a2 -newDarkWizard 14/151 accd2b0c434585d2 -newDarkWizard 14/152 87606823d10effe4 -newDarkWizard 14/153 426d307ef487c0d0 -newDarkWizard 14/154 b44f8a7e3bf6c7ec -newDarkWizard 14/155 cbb7cb6e0e86ea36 -newDarkWizard 14/156 bebf7cf6a99941be -newDarkWizard 14/157 10a943a530248f40 -newDarkWizard 14/158 76ae7ca1d81ac196 -newDarkWizard 14/159 3a329cf37ba03708 -newDarkWizard 14/16 922aef98fa16d5d0 -newDarkWizard 14/160 bb7a8542dc4d5dd6 -newDarkWizard 14/161 90755485950e6310 -newDarkWizard 14/162 66e291ba2aea6e0c -newDarkWizard 14/163 07dc56eba635feca -newDarkWizard 14/169 594beea6626ff9be -newDarkWizard 14/17 29aa3fff7727a0f4 -newDarkWizard 14/18 4080bb375ad7314a -newDarkWizard 14/19 c6acab5d038fbb4a -newDarkWizard 14/2 739d114d44fef314 -newDarkWizard 14/20 91c9456c261f6630 -newDarkWizard 14/21 60da8775fefa236b -newDarkWizard 14/22 86e4a42b7cecc804 -newDarkWizard 14/23 a649a7d8cb0e8a18 -newDarkWizard 14/24 b13f2bd6248f6a3d -newDarkWizard 14/25 d4e734c039a7a45b -newDarkWizard 14/26 2953b98d49f69e35 -newDarkWizard 14/28 098fa891a2274ebc -newDarkWizard 14/29 a300f5a1d7e34d08 -newDarkWizard 14/3 edffbafc46d4b488 -newDarkWizard 14/31 b99b62b26f94b4d0 -newDarkWizard 14/32 b5c4129a02ca6f76 -newDarkWizard 14/33 18b5d21922609b66 -newDarkWizard 14/34 8cc44a4740cf5835 -newDarkWizard 14/35 17b98d102bed7bc8 -newDarkWizard 14/36 4a6841647506be78 -newDarkWizard 14/37 68c2b70bbcabbd5c -newDarkWizard 14/38 6fba31e96ed3bfce -newDarkWizard 14/39 468af4c0a4dedcd6 -newDarkWizard 14/4 806e1d96a2770e1a -newDarkWizard 14/40 6a1bcc71bbbc0394 -newDarkWizard 14/41 5d37f80c1996f6a5 -newDarkWizard 14/42 2da58f1adce2b465 -newDarkWizard 14/43 e527d6ed9ab30357 -newDarkWizard 14/44 8fc47fcd5c13f5d7 -newDarkWizard 14/45 04092953f41e2c0d -newDarkWizard 14/46 3164ae11d06f2aa3 -newDarkWizard 14/47 8dd999f3b500bc01 -newDarkWizard 14/48 4cacbdf84f5c084f -newDarkWizard 14/49 e4497d6e86b06b91 -newDarkWizard 14/5 d4e23c84af5b61b6 -newDarkWizard 14/50 297dc274145243f9 -newDarkWizard 14/51 eaae49a22d67ed98 -newDarkWizard 14/52 82ea682b095553aa -newDarkWizard 14/53 3e36219f41dd49da -newDarkWizard 14/54 f7e14ec176498914 -newDarkWizard 14/55 6422dc67c13905ac -newDarkWizard 14/56 7457aa9af99f9b62 -newDarkWizard 14/57 ccb12e55b843cfe0 -newDarkWizard 14/58 2d1874c554adeab6 -newDarkWizard 14/59 e420fe067568960e -newDarkWizard 14/6 42cbbeef57197576 -newDarkWizard 14/60 2d85beaf78e48e8c -newDarkWizard 14/61 f1977d765ef163d8 -newDarkWizard 14/62 bf251654df5e2888 -newDarkWizard 14/63 fcab362470a76c50 -newDarkWizard 14/64 6f32b9156477fbca -newDarkWizard 14/65 ffb1be9817394cc0 -newDarkWizard 14/66 4656d34ed9a21292 -newDarkWizard 14/67 d20e8869c4fb436a -newDarkWizard 14/68 16bcb794330ab43a -newDarkWizard 14/7 f98ef4bf81ceca2e -newDarkWizard 14/70 fba79d623c23adc4 -newDarkWizard 14/71 feb13c5d5fba6f0a -newDarkWizard 14/72 c73fe2104cc5c98a -newDarkWizard 14/73 2040bb0b44f2ab8c -newDarkWizard 14/74 335af2dc3ca957ba -newDarkWizard 14/75 77ae291006880ad2 -newDarkWizard 14/76 11d4a9135aaf2d94 -newDarkWizard 14/77 0bc76098922a22c4 -newDarkWizard 14/78 5ce19675f29ffef2 -newDarkWizard 14/79 b103519805edca7e -newDarkWizard 14/8 396e7465dbd5103a -newDarkWizard 14/80 3945ca93e700a3d2 -newDarkWizard 14/81 2eac8a445168a550 -newDarkWizard 14/82 d689c7b05af56ece -newDarkWizard 14/83 1e96afbab5dfc08e -newDarkWizard 14/84 724f869df7b45a2c -newDarkWizard 14/85 1dced9af29daa258 -newDarkWizard 14/86 6b8f8ccb229327e4 -newDarkWizard 14/87 d2e73e24f6db65f0 -newDarkWizard 14/88 f4358467e18ca506 -newDarkWizard 14/89 44928c2926a3d930 -newDarkWizard 14/9 b2fffac7a48f72dc -newDarkWizard 14/90 53f0311b9f2fc5de -newDarkWizard 14/91 65022da49602d932 -newDarkWizard 14/92 751ece030d8f586e -newDarkWizard 14/93 dc23b041672dbf8c -newDarkWizard 14/94 fb77641969753e80 -newDarkWizard 14/95 bfdb112f180a54a4 -newDarkWizard 14/96 a54778a0852d5934 -newDarkWizard 14/97 cfe8357cdbe016fa -newDarkWizard 14/98 1376f8214eacff26 -newDarkWizard 14/99 b37ed90fcb22cd02 -newDarkWizard 15/0 380d400bb66e036e -newDarkWizard 15/1 dc8591dbd2137bce -newDarkWizard 15/10 21a0282cffb51562 -newDarkWizard 15/11 8d1ba23945c505bc -newDarkWizard 15/12 f8c6ddaa5efabdd2 -newDarkWizard 15/13 928003e1f6c8a8b8 -newDarkWizard 15/14 f7421525e28a327a -newDarkWizard 15/15 07ac8ae24d3ae7f4 -newDarkWizard 15/16 823b4257e6f1a298 -newDarkWizard 15/17 d78b10a82cefbb62 -newDarkWizard 15/18 6a805dc1681fd44a -newDarkWizard 15/19 22bd911fb789a218 -newDarkWizard 15/2 42ba84ba2404ffd6 -newDarkWizard 15/20 ccaa5bc38f4da3fc -newDarkWizard 15/21 9bef7cc3e5f697e0 -newDarkWizard 15/22 674a35c786edfe15 -newDarkWizard 15/23 283ff8c7b616db72 -newDarkWizard 15/24 71dbdfdf68865650 -newDarkWizard 15/26 8aaeecff0a988ec2 -newDarkWizard 15/27 42e85a21cd9d7353 -newDarkWizard 15/28 919220e10592c824 -newDarkWizard 15/29 a00bdfd3197d3d70 -newDarkWizard 15/3 f7299d255bab7cfc -newDarkWizard 15/30 4a17128a5a38b5ac -newDarkWizard 15/31 e1c4509fdea7f517 -newDarkWizard 15/32 4cf7800fac29969c -newDarkWizard 15/33 e282abfd8bae22c0 -newDarkWizard 15/34 8e54304ee49a4863 -newDarkWizard 15/35 6c1a0304e18f007a -newDarkWizard 15/36 6c8276b142c7f7a0 -newDarkWizard 15/4 75520a92a6ed64ae -newDarkWizard 15/5 ed3071554d69ebce -newDarkWizard 15/6 7e26bb700d71c8ea -newDarkWizard 15/7 ba439864b3f603b2 -newDarkWizard 15/8 6e01d92a894ce69e -newDarkWizard 15/9 c926c2ccbdf410fe -newDarkWizard 2/0 b2682c3f2e349fd9 -newDarkWizard 2/1 aaabd7d6aa131665 -newDarkWizard 2/10 1e37082745ff5528 -newDarkWizard 2/11 0d4dbb3c35f6a83a -newDarkWizard 2/12 f3910ca3c4eaad17 -newDarkWizard 2/13 d7263f6abbc2ba2c -newDarkWizard 2/14 86ae31220a4b56ba -newDarkWizard 2/15 be5bc0f8f6a5ae78 -newDarkWizard 2/16 d31f64d10aefb318 -newDarkWizard 2/17 c9eaee5cd2875fab -newDarkWizard 2/18 4031e32dfd22e4b1 -newDarkWizard 2/2 5e967c6cdb7748a8 -newDarkWizard 2/3 8adfee89e2886691 -newDarkWizard 2/4 bb750a672c1f6f0f -newDarkWizard 2/5 60f3c9f9f50c628a -newDarkWizard 2/6 ccbb347fe7f9a9cf -newDarkWizard 2/7 d9bab54319d8416b -newDarkWizard 2/8 d2636cbca66f6707 -newDarkWizard 2/9 73b36f9062b43ca2 -newDarkWizard 3/0 1671c9f837071993 -newDarkWizard 3/1 90dd83ac6df5289b -newDarkWizard 3/10 66c0630894b7c596 -newDarkWizard 3/11 67cce18d65f774b8 -newDarkWizard 3/2 659293241f6c3082 -newDarkWizard 3/3 efb78d70462f76d8 -newDarkWizard 3/4 da7b9c3c665ef174 -newDarkWizard 3/5 a8c2efcfbf84c642 -newDarkWizard 3/6 ba4a6e07c8f44ddf -newDarkWizard 3/7 ed655de83270a6a8 -newDarkWizard 3/8 75f0ca8fa18466d2 -newDarkWizard 3/9 a6d7313deb1fc387 -newDarkWizard 4/0 208c9d48bd065c81 -newDarkWizard 4/1 0a6524a1775a82c8 -newDarkWizard 4/10 ed6c74c9880e31ae -newDarkWizard 4/11 4fb2c87dde2a4b99 -newDarkWizard 4/12 936a259438e16961 -newDarkWizard 4/13 7c8ce1ce78faac17 -newDarkWizard 4/14 d3ea59afaf4d788c -newDarkWizard 4/15 77473bfd07e18407 -newDarkWizard 4/16 c7ed0d47e36464b6 -newDarkWizard 4/17 bbb33009f4f2c5ff -newDarkWizard 4/18 cfeb54496c542cbf -newDarkWizard 4/19 b33cb11cb9294650 -newDarkWizard 4/2 18e8d081ed1b6126 -newDarkWizard 4/20 5d7b211597258966 -newDarkWizard 4/21 482ba86f97a80deb -newDarkWizard 4/22 8697ed72db14d3cc -newDarkWizard 4/23 90dd6e9857f7096e -newDarkWizard 4/24 3bfe06d2eae05f72 -newDarkWizard 4/3 2b6dbe3e200374b6 -newDarkWizard 4/4 4eed496b19fbfb78 -newDarkWizard 4/5 e4f9c01ee0c0cec3 -newDarkWizard 4/6 83a30ddd31916397 -newDarkWizard 4/7 2fa1607b3b6d70d9 -newDarkWizard 4/8 0ba60931e625ccd7 -newDarkWizard 4/9 7394daa253f51b2d -newDarkWizard 5/0 1db27e6011ec8375 -newDarkWizard 5/1 bd5fc74cc632a556 -newDarkWizard 5/10 70d03e3800250890 -newDarkWizard 5/11 16a097dfb577677b -newDarkWizard 5/12 7941fd482295ac54 -newDarkWizard 5/13 b16b0175a12e780a -newDarkWizard 5/14 8e01e0b19bc8deef -newDarkWizard 5/15 941b60c5cf968aee -newDarkWizard 5/16 5b9884af7bfded30 -newDarkWizard 5/17 1c15ffdc455e3e56 -newDarkWizard 5/18 d37b2503aaa4ce8c -newDarkWizard 5/19 1b0a6a87963be377 -newDarkWizard 5/2 d65546a2e750d8fb -newDarkWizard 5/20 2a9ee4a8fec935a9 -newDarkWizard 5/21 6fadcf9da5e57577 -newDarkWizard 5/22 fd71956b79d2e865 -newDarkWizard 5/23 df17faa9e4af0b0d -newDarkWizard 5/3 6b223b41ba3ad129 -newDarkWizard 5/30 0df97d021ae48447 -newDarkWizard 5/31 708a96ade6944b7e -newDarkWizard 5/33 6a201ad8f0098eed -newDarkWizard 5/34 c8f14bb179a494c7 -newDarkWizard 5/36 d31e3d69ae84e405 -newDarkWizard 5/4 9e303935aa0f13cd -newDarkWizard 5/5 39f84a791d6f4b3e -newDarkWizard 5/6 ff01d2a4e4c59815 -newDarkWizard 5/7 b0e57c62b9f040b6 -newDarkWizard 5/8 a815f606edfdefd2 -newDarkWizard 5/9 4d77696b7d05b11f -newDarkWizard 6/0 e2e8bcbefb137f03 -newDarkWizard 6/1 447d109b564e33e7 -newDarkWizard 6/10 b6ac17109ebd4529 -newDarkWizard 6/11 1072ad629ef009ea -newDarkWizard 6/12 6438993dd3922d93 -newDarkWizard 6/13 8b1cd10abd5efdeb -newDarkWizard 6/14 e565c413af3a6aa8 -newDarkWizard 6/15 5460d41632ba7a50 -newDarkWizard 6/16 e65a1de11ae5f628 -newDarkWizard 6/17 9137983c2f995efd -newDarkWizard 6/18 1c838dc475399069 -newDarkWizard 6/19 fdc624be784b197c -newDarkWizard 6/2 1a785e601dd7122d -newDarkWizard 6/20 f92710c51a7137de -newDarkWizard 6/21 df462c4e56d38476 -newDarkWizard 6/3 bfb6e14d71297ef5 -newDarkWizard 6/4 4e86bf8021accf09 -newDarkWizard 6/5 184507f6d12f2d0a -newDarkWizard 6/6 24eca5a0ada310a1 -newDarkWizard 6/7 a28126a54a99f633 -newDarkWizard 6/8 f5b3978a2027de56 -newDarkWizard 6/9 f0a2722c71cb127b -newDarkWizard 7/0 bf2f5141452365e5 -newDarkWizard 7/1 0f13732cc26b40e4 -newDarkWizard 7/10 94fedf38916b2325 -newDarkWizard 7/11 4659edcf9e73987b -newDarkWizard 7/12 bf5712ff579e0e8a -newDarkWizard 7/13 5bc79eecf7e66ce9 -newDarkWizard 7/14 1da89b00662f29f0 -newDarkWizard 7/16 a2bc539382f1b6c4 -newDarkWizard 7/17 dd5b702bc690743a -newDarkWizard 7/18 6ef664d15bace080 -newDarkWizard 7/19 d94cd790e2057e69 -newDarkWizard 7/2 7681bf98a5a57057 -newDarkWizard 7/21 ed3106ce9b22f3a1 -newDarkWizard 7/22 6fa71374e6ef85c8 -newDarkWizard 7/24 2bd4029e05a5dfd3 -newDarkWizard 7/25 7ad7df1949cb35f1 -newDarkWizard 7/26 a5d840cf9f203f32 -newDarkWizard 7/27 93c87c05e1810b9a -newDarkWizard 7/28 302f6571848dc624 -newDarkWizard 7/29 f9a8f93b5c92f8a9 -newDarkWizard 7/3 ec7d2863aa0ada6f -newDarkWizard 7/30 ab0df3de7834a284 -newDarkWizard 7/31 2941ab0ed32803ae -newDarkWizard 7/33 629afce9c8f587cd -newDarkWizard 7/34 68db30916740fa2e -newDarkWizard 7/35 36887cb9845880b1 -newDarkWizard 7/36 54d300ed61b2a265 -newDarkWizard 7/38 f957ba84ff38800a -newDarkWizard 7/39 6a25d240a3de05fa -newDarkWizard 7/4 d3dc2d707f159414 -newDarkWizard 7/40 2e5996184a7e782e -newDarkWizard 7/41 e9156565c5c0a12f -newDarkWizard 7/42 93456080d2fa5891 -newDarkWizard 7/43 cdbb10662d49d2ff -newDarkWizard 7/44 e445ab0dec96f853 -newDarkWizard 7/45 49a03db4946ff42e -newDarkWizard 7/46 012c5ac45a4f46a0 -newDarkWizard 7/49 f9117dfea20c4405 -newDarkWizard 7/5 ed34bc61e5e02f65 -newDarkWizard 7/50 b0cef4e207b258d3 -newDarkWizard 7/51 7a39339dcc63985b -newDarkWizard 7/52 cab54c4d86b0051f -newDarkWizard 7/59 b546eb0c66b59511 -newDarkWizard 7/6 55996a48e7954459 -newDarkWizard 7/60 62403fcf1ab71284 -newDarkWizard 7/61 713671179cbb1760 -newDarkWizard 7/62 2ca7d7c6d4a4a759 -newDarkWizard 7/63 b98b042320fcdfde -newDarkWizard 7/64 c59c47265c156eb3 -newDarkWizard 7/65 9630c08ac4e087d3 -newDarkWizard 7/66 228f067d73e1e14d -newDarkWizard 7/67 67bfc1f98cdcaf72 -newDarkWizard 7/68 389055597c37b012 -newDarkWizard 7/69 9e7c2f9cb88db92a -newDarkWizard 7/7 52d2497e536db5bf -newDarkWizard 7/70 12bde33a6f8ccab9 -newDarkWizard 7/72 b1260d5f4edafe33 -newDarkWizard 7/73 b42063ac666e139b -newDarkWizard 7/8 ee3f9d91efa2fad5 -newDarkWizard 7/9 650526e22f2a9ab5 -newDarkWizard 8/0 1b7db854dd1f1777 -newDarkWizard 8/1 4d8fbb2e776dd6c4 -newDarkWizard 8/10 6a6f818306db8392 -newDarkWizard 8/11 a8b1214675649f48 -newDarkWizard 8/12 285a6c31f0d28860 -newDarkWizard 8/13 2fe8dd909169c77a -newDarkWizard 8/14 74cf53783cdb5830 -newDarkWizard 8/15 2299102116d5893d -newDarkWizard 8/16 769c9d6998fd6c4e -newDarkWizard 8/17 701078b5a31e50ad -newDarkWizard 8/18 b81f764494fcb501 -newDarkWizard 8/19 84f66f21945d0c48 -newDarkWizard 8/2 4712a312cc8178b3 -newDarkWizard 8/20 9fdc69eb74b4276a -newDarkWizard 8/21 c021aafedb13072a -newDarkWizard 8/22 4517286edb49cea4 -newDarkWizard 8/23 98334ed69d8fc39e -newDarkWizard 8/24 bef1c65ca1a31267 -newDarkWizard 8/25 16bbbfdc73dc3af5 -newDarkWizard 8/26 b369af56c8996379 -newDarkWizard 8/27 0f654a1b4c7ca128 -newDarkWizard 8/28 997bc3e3e6fa2844 -newDarkWizard 8/29 f6cc72479fa319ec -newDarkWizard 8/3 db9aa295a2c8949c -newDarkWizard 8/30 4558fbb80fc0da78 -newDarkWizard 8/31 3530cf1747131391 -newDarkWizard 8/32 3a012bad6b299a12 -newDarkWizard 8/33 e5e88ee9e1372ac0 -newDarkWizard 8/34 b16e5785ff8da479 -newDarkWizard 8/35 58b8b11f4ccf913c -newDarkWizard 8/36 2857feac73455933 -newDarkWizard 8/37 98fc3aa645dab126 -newDarkWizard 8/38 ce9cad21e9ece6b1 -newDarkWizard 8/39 12766944e038406b -newDarkWizard 8/4 9bcc2d1f156878cb -newDarkWizard 8/40 e8ddd8e4e78e7b9e -newDarkWizard 8/41 2ff457f578c17555 -newDarkWizard 8/42 45324b49d7bdbafe -newDarkWizard 8/43 93faa7e190600c0f -newDarkWizard 8/44 08cdeff0f580b696 -newDarkWizard 8/45 c44a2bd0f43cb404 -newDarkWizard 8/46 bf90e420319f5618 -newDarkWizard 8/47 f81a02a152f3372f -newDarkWizard 8/48 6ee3f8de7b818300 -newDarkWizard 8/49 43c9610f6d023dca -newDarkWizard 8/5 d13aedcfe867d912 -newDarkWizard 8/50 b5a13e339f4bc0d8 -newDarkWizard 8/51 01e853f27859aeb2 -newDarkWizard 8/52 287026cd8b0231a1 -newDarkWizard 8/59 10471f7c0f418d9d -newDarkWizard 8/6 0699c535dff6c233 -newDarkWizard 8/60 545ca48c15264a3d -newDarkWizard 8/61 249fcbfa3717e7ce -newDarkWizard 8/62 724e6f7d5b23d0a7 -newDarkWizard 8/63 17a8a44263ab5bbb -newDarkWizard 8/64 72958c044d2264a9 -newDarkWizard 8/65 3efc565807ca7927 -newDarkWizard 8/66 05b22aec4b57e1af -newDarkWizard 8/67 afdd15bb3160d5ef -newDarkWizard 8/68 7e18abe80919716a -newDarkWizard 8/69 783b36e22dc3d992 -newDarkWizard 8/7 aed2e770830b2541 -newDarkWizard 8/70 ec016fff322afd96 -newDarkWizard 8/71 72de54ccc74f83ba -newDarkWizard 8/72 a0d2fa6bd4cbafe1 -newDarkWizard 8/73 cc0599a5ab443b64 -newDarkWizard 8/8 fcf5e5177bc31a4c -newDarkWizard 8/9 c8ef878db6e39308 -newDarkWizard 9/0 79deb09d8ac8eabf -newDarkWizard 9/1 7914393ab49dafe3 -newDarkWizard 9/10 39409b30430736c4 -newDarkWizard 9/11 680d4f6fedc5e97a -newDarkWizard 9/12 556698ee2b2ee599 -newDarkWizard 9/13 9e8e1e573f0c37f7 -newDarkWizard 9/14 8c27202ad63f39b7 -newDarkWizard 9/15 373a3fa9e8ffe321 -newDarkWizard 9/16 7cfe85256d97f80d -newDarkWizard 9/17 1075b335f81a1eed -newDarkWizard 9/18 6e52332a325e6386 -newDarkWizard 9/19 b247e11630de434a -newDarkWizard 9/2 9ecd6ba804b47663 -newDarkWizard 9/20 33e4f729170ad0df -newDarkWizard 9/21 bc1237f926586875 -newDarkWizard 9/22 f1c4dc976b5b6094 -newDarkWizard 9/23 68a99f656df312e3 -newDarkWizard 9/24 92bf384103635a3f -newDarkWizard 9/25 1fde2117849c44e0 -newDarkWizard 9/26 88c8d22776d9d406 -newDarkWizard 9/27 858ffb84e73d9ea3 -newDarkWizard 9/28 8e37c75eb6740513 -newDarkWizard 9/29 9027b80786d407b4 -newDarkWizard 9/3 fde0e74279456d3d -newDarkWizard 9/30 04fc82bb9d371901 -newDarkWizard 9/31 b202387c2a7bb056 -newDarkWizard 9/32 366c67762af4fc9e -newDarkWizard 9/33 2070511c23ebfde1 -newDarkWizard 9/34 060a9115eae56fb1 -newDarkWizard 9/35 eda5374c78a7c493 -newDarkWizard 9/36 88a9e8df1a05ca38 -newDarkWizard 9/37 dc78a1f683716cf4 -newDarkWizard 9/38 5b748c7c71995d5f -newDarkWizard 9/39 05fe977fce22f9c3 -newDarkWizard 9/4 6334b631e750843f -newDarkWizard 9/40 bd7fc8804b871b20 -newDarkWizard 9/41 afc9727b734cde4d -newDarkWizard 9/42 9bcf1f953f3ab28c -newDarkWizard 9/43 3875f6eb5239a6c4 -newDarkWizard 9/44 377848cfb16d1e68 -newDarkWizard 9/45 4123ad04c077b506 -newDarkWizard 9/46 d6e19c7bce775c90 -newDarkWizard 9/47 3812ec7693376cc8 -newDarkWizard 9/48 6cba5fc26c1077dc -newDarkWizard 9/49 4af2446355e48d03 -newDarkWizard 9/5 ddca1aecfaaefed5 -newDarkWizard 9/50 22784335ad3ecc85 -newDarkWizard 9/51 af0d28b2ad75cc81 -newDarkWizard 9/52 dded3a3d8402501f -newDarkWizard 9/59 cf5dc7cf799f1cb3 -newDarkWizard 9/6 1f71af7ce1795066 -newDarkWizard 9/60 773fee6355648b88 -newDarkWizard 9/61 d9c1b7345a800aa4 -newDarkWizard 9/62 437ef8f6b8fc5410 -newDarkWizard 9/63 cce79bc37ba15b6e -newDarkWizard 9/64 13e3ef1a2cf3ec1e -newDarkWizard 9/65 f057d7fcc033debb -newDarkWizard 9/66 d4a377decb1f7e7d -newDarkWizard 9/67 2a4a5db8d0e7a6bb -newDarkWizard 9/68 707051ffe93e55ff -newDarkWizard 9/69 850fc583ee4f6b33 -newDarkWizard 9/7 484593387e9fc64d -newDarkWizard 9/70 3570092837c982d4 -newDarkWizard 9/71 d6238275cec60892 -newDarkWizard 9/72 fce87c0fe1cbd441 -newDarkWizard 9/73 a6f4a59ee86d7c07 -newDarkWizard 9/8 69567566d25b0e12 -newDarkWizard 9/9 9d62bbd3134284ea +bladeMaster 0/0 a687ac4307e66502 +bladeMaster 0/1 deca541407a6cb91 +bladeMaster 0/10 08365e96df9bb5c8 +bladeMaster 0/11 04060f59ee22936a +bladeMaster 0/12 27733e812167a484 +bladeMaster 0/13 9637d9d3cfd72aa3 +bladeMaster 0/14 43764e11efadccc1 +bladeMaster 0/15 cd8bf3ba471e2035 +bladeMaster 0/16 4beb7a0bd0913181 +bladeMaster 0/17 812aa9cacf054d8a +bladeMaster 0/18 4dec8eb09dd8b335 +bladeMaster 0/19 a3727ab62e048133 +bladeMaster 0/2 16fd7c1ba765a1bd +bladeMaster 0/20 276a9a27f7612dac +bladeMaster 0/21 203276ae977341ca +bladeMaster 0/22 4f1b357700c3e3d2 +bladeMaster 0/23 ec9604a152e027b8 +bladeMaster 0/24 ca58910ed10f2648 +bladeMaster 0/25 75f8a89b3c7c2c52 +bladeMaster 0/26 0388049d6d596d32 +bladeMaster 0/27 639e307a9be65ef6 +bladeMaster 0/28 94e020187a6e3755 +bladeMaster 0/3 4326a0eedec4ac8b +bladeMaster 0/31 151e9829b88dd064 +bladeMaster 0/32 24c7e9e6f641db27 +bladeMaster 0/33 a00323a1f07cd85a +bladeMaster 0/34 ce5481b3eb4dedaa +bladeMaster 0/35 d09b04fb0b744495 +bladeMaster 0/4 9df00c53bd44de5e +bladeMaster 0/5 5a86735a9b759158 +bladeMaster 0/6 243459cce1a8ee10 +bladeMaster 0/7 5cfaefb2aa4f6f74 +bladeMaster 0/8 8d3e96d958b2e25a +bladeMaster 0/9 233d806df2f4511c +bladeMaster 1/0 90e0e09c04f737f6 +bladeMaster 1/1 301c4f98a721cda0 +bladeMaster 1/2 e858cdbdc6b10866 +bladeMaster 1/3 546fe395761669a5 +bladeMaster 1/4 0e30e79a40df28fd +bladeMaster 1/5 d6566ca8ed63e24a +bladeMaster 1/6 bb8ee1aa3f94cd30 +bladeMaster 1/7 57c4daa17c913139 +bladeMaster 1/8 ff5ce4338f381ff4 +bladeMaster 10/0 f3013ae3f8977d77 +bladeMaster 10/1 667b791ceecb4e56 +bladeMaster 10/10 ce345ad27e18e980 +bladeMaster 10/11 791ad79294124893 +bladeMaster 10/12 c99437b142d00aa8 +bladeMaster 10/13 e53c353170321f7e +bladeMaster 10/14 a0b8ef49b41e5265 +bladeMaster 10/15 0f89563941de22d8 +bladeMaster 10/16 f7baeaee0c122016 +bladeMaster 10/17 2ae60ae7aba3d77c +bladeMaster 10/18 540bcedead52d663 +bladeMaster 10/19 2e22319c61c7ac1a +bladeMaster 10/2 2cb0f951ff2189fc +bladeMaster 10/20 019e62e2c77684db +bladeMaster 10/21 ab09d57a7c47b76c +bladeMaster 10/22 c79cf639b77e3715 +bladeMaster 10/23 8371fc06e697e222 +bladeMaster 10/24 ae119dea90489a56 +bladeMaster 10/25 4f5e0ca1e029bc1a +bladeMaster 10/26 04b6a949e6548b7d +bladeMaster 10/27 a181ea90131e4401 +bladeMaster 10/28 933d7014bbcb90f7 +bladeMaster 10/29 672d524ecaf52e20 +bladeMaster 10/3 d1abfd75efc327c2 +bladeMaster 10/30 f8ce6127a9e8c858 +bladeMaster 10/31 dcffaa3bc8aba268 +bladeMaster 10/32 5eeb877f0f3a4463 +bladeMaster 10/33 421510e64e26bf62 +bladeMaster 10/34 e17440781334ce8f +bladeMaster 10/35 3cf344434fa0b5ef +bladeMaster 10/36 fcc7dab97f495742 +bladeMaster 10/37 61ee7a41551330e0 +bladeMaster 10/38 8364fad3f994589d +bladeMaster 10/39 9f946abfeefeae55 +bladeMaster 10/4 d4444e5c5b71b671 +bladeMaster 10/40 30506d42cdda55a1 +bladeMaster 10/41 b27264bb63410d8d +bladeMaster 10/42 a0fa46f3f1d9f9fd +bladeMaster 10/43 3464089c5979b18d +bladeMaster 10/44 90dd74ab0e80aed1 +bladeMaster 10/45 fdd4719d77a9aaed +bladeMaster 10/46 532431362961bfe0 +bladeMaster 10/47 db3a3ae0a21b91cd +bladeMaster 10/48 c91c509834144b2c +bladeMaster 10/49 96906ed6e90d2976 +bladeMaster 10/5 d7b11a2c7a232a7c +bladeMaster 10/50 b20e65237cd0db0e +bladeMaster 10/51 4ca2e21757b2844b +bladeMaster 10/52 bd594fbb20d99522 +bladeMaster 10/6 e145ae43b5dc2fe1 +bladeMaster 10/62 8f61b85ab1a267cd +bladeMaster 10/63 b682edbdf15f7268 +bladeMaster 10/64 c3b12f840b8c7574 +bladeMaster 10/65 36654664f5030b30 +bladeMaster 10/66 22f5f266db4a0f87 +bladeMaster 10/67 d1f50f3018f8dfdc +bladeMaster 10/68 4a9ec6ca8b708019 +bladeMaster 10/69 cbd9c40e5fa50691 +bladeMaster 10/7 df705d244b9486df +bladeMaster 10/70 2702fc7d61bc6498 +bladeMaster 10/71 835d55106ca2eee0 +bladeMaster 10/8 129accd689ccd57d +bladeMaster 10/9 e1a1e37c54160d54 +bladeMaster 11/0 608147103bac9e05 +bladeMaster 11/1 8f98dfb4e8ee514c +bladeMaster 11/10 c078f81f4785cfc6 +bladeMaster 11/11 628882527e2ec0d0 +bladeMaster 11/12 c1623a6aac27a503 +bladeMaster 11/13 fe77c0186757a440 +bladeMaster 11/14 470ff2a447e165d6 +bladeMaster 11/15 7b7c9979d7d53584 +bladeMaster 11/16 775b9dada722b3bc +bladeMaster 11/17 36e9a26726bfd660 +bladeMaster 11/18 4004c487c74426ba +bladeMaster 11/19 26604ea7e5a32ba1 +bladeMaster 11/2 bd2763dbffad3d75 +bladeMaster 11/20 8be47f2f06b872ef +bladeMaster 11/21 b1971a694e84615a +bladeMaster 11/22 5646e62a49a79974 +bladeMaster 11/23 b3a5043e73f5c9ac +bladeMaster 11/24 ace13bbcc844854b +bladeMaster 11/25 bc1b2f4374c8e986 +bladeMaster 11/26 68b5af21c9a9601c +bladeMaster 11/27 97239730d981ffb7 +bladeMaster 11/28 296d9a12cf7fea4d +bladeMaster 11/29 de9efecb18b3f62d +bladeMaster 11/3 57edda20ec462d72 +bladeMaster 11/30 62b09a67dfdad310 +bladeMaster 11/31 000d337aadc7866b +bladeMaster 11/32 0f63957377806ee0 +bladeMaster 11/33 7816333a214c2ecc +bladeMaster 11/34 ed429703f37797fa +bladeMaster 11/35 52ab2484ab44fa0c +bladeMaster 11/36 8f066fa7e1fccaa5 +bladeMaster 11/37 d4c6710b26122dff +bladeMaster 11/38 3e3e9347c7ac38e5 +bladeMaster 11/39 e03cc12f4521d283 +bladeMaster 11/4 876567e3a456b5c9 +bladeMaster 11/40 47fcb296e92f4424 +bladeMaster 11/41 2c52d1803378d3fa +bladeMaster 11/42 207c16a6625d6938 +bladeMaster 11/43 4541d4ab6f77c5aa +bladeMaster 11/44 71531a5c1eac4162 +bladeMaster 11/45 6114ec8d3bda5e5e +bladeMaster 11/46 0ddea287ec352ee6 +bladeMaster 11/47 3b877bf5f4859d92 +bladeMaster 11/48 98ebf6e4bdfe094b +bladeMaster 11/49 bb3223b5fc5533ea +bladeMaster 11/5 3607bd96bf198a08 +bladeMaster 11/50 40f22a04247c0a21 +bladeMaster 11/51 319a5a73e7d4aec9 +bladeMaster 11/52 dc8b8157d5fce66d +bladeMaster 11/59 60f3df681be3a898 +bladeMaster 11/6 1f312e7a08294d87 +bladeMaster 11/60 5ad1303396ed70d6 +bladeMaster 11/61 d3071c07f15104db +bladeMaster 11/62 dfbb96a66fc1d6d2 +bladeMaster 11/63 c666b97f44e5e6f9 +bladeMaster 11/64 dcb5cc87bec6c490 +bladeMaster 11/65 b4cc91272750d9f4 +bladeMaster 11/66 fec4837fc27e0089 +bladeMaster 11/67 df8cff58f45ffe73 +bladeMaster 11/68 2d003dd5a6d34bb0 +bladeMaster 11/69 16c8f4e327703632 +bladeMaster 11/7 9b5656b543037283 +bladeMaster 11/70 31059bdb1dd3927e +bladeMaster 11/71 747a8ec1d4514532 +bladeMaster 11/72 c5dd22ae0fb81093 +bladeMaster 11/73 a87e19b94a908472 +bladeMaster 11/8 1555e0d730e19730 +bladeMaster 11/9 5bf7f57ebfecc9ca +bladeMaster 12/0 42de7ba110fb8621 +bladeMaster 12/1 078c924989eb73a5 +bladeMaster 12/10 98a80d043ea0ec7f +bladeMaster 12/100 275ab9765758fc19 +bladeMaster 12/101 fe7d99bed3c77f6d +bladeMaster 12/102 56ae2d48b5a0ef49 +bladeMaster 12/103 a618149f9df0bae7 +bladeMaster 12/104 e4cb92336459b4cb +bladeMaster 12/105 13b933945cc50391 +bladeMaster 12/106 9b77c8f5fc3808b1 +bladeMaster 12/107 864a8916d1a7e5ef +bladeMaster 12/108 b2f06e42ccb3ad0b +bladeMaster 12/109 9c8b62b1ae9e42e3 +bladeMaster 12/11 05315e8d237b193b +bladeMaster 12/110 8466580ae62bf97f +bladeMaster 12/111 0fa8b88292f3222d +bladeMaster 12/112 7bbf9e591d03fb6f +bladeMaster 12/113 19624fdcbcdeffb7 +bladeMaster 12/114 bac4258626c42673 +bladeMaster 12/115 64d6ccc6c740e089 +bladeMaster 12/116 100fd82d6aa5531d +bladeMaster 12/117 7b1d953f44795115 +bladeMaster 12/118 bee2c3442b665c53 +bladeMaster 12/119 590d27a0e043ef19 +bladeMaster 12/12 39bc3f6b04c94767 +bladeMaster 12/120 86073ed93511e3c9 +bladeMaster 12/121 543a2e63f96b31d1 +bladeMaster 12/122 0762d070ad38acfd +bladeMaster 12/123 0193c8772628c791 +bladeMaster 12/124 ae7cdde5079fc463 +bladeMaster 12/125 bff77fda3f4d8fdf +bladeMaster 12/126 34f256afe4ff5be7 +bladeMaster 12/127 3a76e34e4b5c1dab +bladeMaster 12/128 bc1d6bb1ca836d31 +bladeMaster 12/129 0a66275606de4775 +bladeMaster 12/13 b04a1c1d21e78c8f +bladeMaster 12/130 b949dcd9f1b9093d +bladeMaster 12/131 835a525bb5a153df +bladeMaster 12/132 fdfc4f1d9e42a713 +bladeMaster 12/133 a277e2d121fadacf +bladeMaster 12/134 68bd46261bccc5b3 +bladeMaster 12/135 194b3e01704e8089 +bladeMaster 12/136 d3700c9c69c24d83 +bladeMaster 12/137 f889d8c3c5ae9a63 +bladeMaster 12/138 32c8be98c2efde43 +bladeMaster 12/139 7a008263db90f54f +bladeMaster 12/14 43cb126ab9f74377 +bladeMaster 12/140 d9e7df472c7b036b +bladeMaster 12/141 82ef38ecc63f2ae3 +bladeMaster 12/142 514fcce998eaea7b +bladeMaster 12/143 b678d4e6713f2f1b +bladeMaster 12/15 881af6d245cd85d1 +bladeMaster 12/16 b36d12eb2e501e17 +bladeMaster 12/17 3eb2992f5cb07eb7 +bladeMaster 12/18 cead3c66c36cc6af +bladeMaster 12/19 a76a90705ac425bf +bladeMaster 12/2 f41bfc1018b95821 +bladeMaster 12/21 87c9328062e12b77 +bladeMaster 12/22 8375c01606bd6c37 +bladeMaster 12/23 bd0b461d082d0607 +bladeMaster 12/24 ae549788584741ff +bladeMaster 12/26 8e46436f467e492f +bladeMaster 12/3 cd8856e9bc648404 +bladeMaster 12/30 948ac956c6cc2bff +bladeMaster 12/31 0878942c1ef09697 +bladeMaster 12/32 f4c0c92c81e53e61 +bladeMaster 12/33 e3ec721d0e4b91d9 +bladeMaster 12/34 e504a9064f93cb5d +bladeMaster 12/35 49c9cf7788226fc9 +bladeMaster 12/36 1eb26e925802772d +bladeMaster 12/37 741fd9058607605f +bladeMaster 12/38 9e11a3ad289addfd +bladeMaster 12/39 e806efcaf70d65eb +bladeMaster 12/4 a875e823940c0c1c +bladeMaster 12/40 70f67aafedb92d01 +bladeMaster 12/41 1e116c4091472263 +bladeMaster 12/42 21814f0e5d3d9966 +bladeMaster 12/43 59bad32e42a965d7 +bladeMaster 12/44 0582df4cdfac5bff +bladeMaster 12/45 090c607763fa8ef7 +bladeMaster 12/46 99362d7e3f675757 +bladeMaster 12/47 3db3427e6921bbb7 +bladeMaster 12/48 6269e12b62a73a07 +bladeMaster 12/49 bce8a7311c5f4aae +bladeMaster 12/5 e3193c9e61b64d94 +bladeMaster 12/50 8af096e897cdc4bb +bladeMaster 12/6 e87acebdf85cb868 +bladeMaster 12/60 5305b88bf4aaa959 +bladeMaster 12/61 fbf77eab0ae51083 +bladeMaster 12/62 6f883c5b173acbaf +bladeMaster 12/63 17c1c6045eb4e10b +bladeMaster 12/64 1e1b0fccd07ceca9 +bladeMaster 12/65 5941b80a6e1df989 +bladeMaster 12/7 dab3d9e5f5ecc617 +bladeMaster 12/70 a8fbc988a7312a67 +bladeMaster 12/71 76f087ea8e66ad57 +bladeMaster 12/72 dbdfa055cdc0a20b +bladeMaster 12/8 a64965cbb3a72107 +bladeMaster 12/9 ff016f046078c727 +bladeMaster 13/0 74689a74643b8df1 +bladeMaster 13/1 8b15d94601528b2f +bladeMaster 13/10 529a263bbd8e1d57 +bladeMaster 13/103 a0c06587ab860a57 +bladeMaster 13/104 e25ec83ad8a71087 +bladeMaster 13/105 11c44a149124e637 +bladeMaster 13/106 a6531e75889c240f +bladeMaster 13/107 22f7dc22142daacd +bladeMaster 13/109 62dda29b1e8ac567 +bladeMaster 13/11 ca251cadf4efe0af +bladeMaster 13/110 d21fdcf7bd5da3ef +bladeMaster 13/111 7c6995664dc669f7 +bladeMaster 13/112 b6d1c4164fc45eb7 +bladeMaster 13/113 9bba473761a8fbd7 +bladeMaster 13/114 be80ff02dda7ff87 +bladeMaster 13/115 79a6f7868b041687 +bladeMaster 13/116 a65bd32348eed3c7 +bladeMaster 13/117 2f4a8fe8a8543ebf +bladeMaster 13/118 594a3416af0c2207 +bladeMaster 13/119 4556b07b3faf16af +bladeMaster 13/12 d8e48658f9607874 +bladeMaster 13/120 82292ce5233e4427 +bladeMaster 13/121 706a4efc0b80fa9f +bladeMaster 13/122 59d90271281a0463 +bladeMaster 13/123 dfe32dd01d675b47 +bladeMaster 13/124 0f8347c18ec36c17 +bladeMaster 13/125 866a46434a96a9ab +bladeMaster 13/126 cd02aab0ffd34d27 +bladeMaster 13/127 a0e4bf3c0b9b0cc7 +bladeMaster 13/128 6eb83947ae6255b3 +bladeMaster 13/129 f84dc961130cf64b +bladeMaster 13/13 6ddbd60f020c8503 +bladeMaster 13/130 8e4a02eaec7a2163 +bladeMaster 13/131 57d9f5b854210f03 +bladeMaster 13/132 31086e82282ebb8b +bladeMaster 13/133 d364626c60c36753 +bladeMaster 13/134 67ad94ef50b2e1a7 +bladeMaster 13/135 ac92570bf4df4bd1 +bladeMaster 13/136 3527092c0f8db6f9 +bladeMaster 13/137 f51d5582336e12e1 +bladeMaster 13/138 7cb539aa5f722b51 +bladeMaster 13/139 36020c77f301d5c1 +bladeMaster 13/14 22783d889c964739 +bladeMaster 13/140 a8234a1ec30cc531 +bladeMaster 13/141 33351655b6812699 +bladeMaster 13/142 17990a47be7698e1 +bladeMaster 13/143 73c343087474bff9 +bladeMaster 13/144 9760b94e063b84a1 +bladeMaster 13/15 34e632e4ef2021cd +bladeMaster 13/16 030350570d552f51 +bladeMaster 13/17 f0946f4c21761b51 +bladeMaster 13/18 cffecd839926dbaf +bladeMaster 13/19 d7b537649b8a6c2f +bladeMaster 13/2 f4d1777da000dff3 +bladeMaster 13/20 dd6bbd7965c66b6c +bladeMaster 13/21 e1e266087a1a0cb4 +bladeMaster 13/22 9c474b6e356653be +bladeMaster 13/23 8e1aa07de50c1a40 +bladeMaster 13/24 3ffdd4565a0950c6 +bladeMaster 13/25 44d8a207fa27bdf9 +bladeMaster 13/26 c7151e5c9c4a4310 +bladeMaster 13/27 b916833b8a94245e +bladeMaster 13/28 b0db10562eca56f0 +bladeMaster 13/29 96136e0b41bb1057 +bladeMaster 13/3 519bd6746eea3be9 +bladeMaster 13/30 f128116392053825 +bladeMaster 13/31 38092e722dfbb503 +bladeMaster 13/32 604569a5586adeb1 +bladeMaster 13/33 fb22d733400b2441 +bladeMaster 13/34 2e951a2b32305e09 +bladeMaster 13/35 1b6db1b0541416c3 +bladeMaster 13/36 8b7bc1f5c088e80c +bladeMaster 13/37 6ce60c7aa7864db3 +bladeMaster 13/38 eb3281052e4f510b +bladeMaster 13/39 69ae46fabd3eef5c +bladeMaster 13/4 9248b7654a0bc221 +bladeMaster 13/40 d40cdd8d9aab3713 +bladeMaster 13/41 8024c7668af0d701 +bladeMaster 13/42 7c2007c5c5121bae +bladeMaster 13/43 767ee61993c3cabf +bladeMaster 13/44 619da2b17735d3ef +bladeMaster 13/45 5a22f067fe2046d7 +bladeMaster 13/46 467d0c4a6785a99f +bladeMaster 13/47 274c4c72da37f20b +bladeMaster 13/48 3160a03383623ce7 +bladeMaster 13/49 935a3932c49e11ff +bladeMaster 13/5 0023ef722ff7f135 +bladeMaster 13/50 a9be140b7e205df7 +bladeMaster 13/51 52a7b589bd7ec6af +bladeMaster 13/52 07aab6b3e768c069 +bladeMaster 13/53 f60eef5ebabb6439 +bladeMaster 13/54 981bf5cee0219a99 +bladeMaster 13/55 ec31da2f2e6bb615 +bladeMaster 13/56 f65899c19a6dd4d9 +bladeMaster 13/57 b67e29983438b725 +bladeMaster 13/58 b26c9fc094765a75 +bladeMaster 13/59 30c16f909dfc8a8f +bladeMaster 13/60 501db23c8db8b75f +bladeMaster 13/61 2648fa6c3b24a55b +bladeMaster 13/62 38882f540d6b57c7 +bladeMaster 13/63 9a02ce95ffd5ce9f +bladeMaster 13/64 562420f43b1c5fb3 +bladeMaster 13/65 f7f30b77856d6b17 +bladeMaster 13/66 d5f6c9e8a038110f +bladeMaster 13/67 2f17202ef4d1737b +bladeMaster 13/68 c19aec3a7cfd6f73 +bladeMaster 13/69 f344f755c2696caf +bladeMaster 13/7 3330d0097ba26b7b +bladeMaster 13/70 6af124eaa3190dcf +bladeMaster 13/71 0df227b29824b397 +bladeMaster 13/72 8ce4f7de71ecb317 +bladeMaster 13/73 0715b3cfbbe11ac7 +bladeMaster 13/74 a7c6c1fd17465e8f +bladeMaster 13/75 25c98569e923395f +bladeMaster 13/76 0367fcec33468523 +bladeMaster 13/8 0cd7ce9d8aec7b62 +bladeMaster 13/80 789b64b468111ab3 +bladeMaster 13/81 0d4f194599173b1f +bladeMaster 13/82 aa498d64785d5177 +bladeMaster 13/83 477c82d2000b9501 +bladeMaster 13/84 65d8038378da4c73 +bladeMaster 13/85 6e460e4fd3357b59 +bladeMaster 13/86 fd811954964f473f +bladeMaster 13/87 6b56df3b7634b883 +bladeMaster 13/88 00b45840876f795f +bladeMaster 13/89 0d1d55db5dba9ba7 +bladeMaster 13/9 20cc487e1e8708b9 +bladeMaster 13/90 6f0a07b2f9efbb69 +bladeMaster 13/91 72596b59778cb3db +bladeMaster 13/92 1ae3a448940e92f7 +bladeMaster 13/93 9014222cac01631d +bladeMaster 13/94 a9b46b3a6597678f +bladeMaster 13/95 fe89957e5f92159b +bladeMaster 13/96 abed498aeedccec7 +bladeMaster 13/97 8d8d68e87900f9df +bladeMaster 13/98 767d807d241fa79f +bladeMaster 13/99 e1bbf2b744b22237 +bladeMaster 14/0 0e75992c5c685491 +bladeMaster 14/1 1cf3d14cf5fdae99 +bladeMaster 14/10 e914bb5934358487 +bladeMaster 14/100 e2938f447feea095 +bladeMaster 14/101 7e9db85331cc3865 +bladeMaster 14/102 b2bc5e7d4bf6b56f +bladeMaster 14/103 0a0faeb76de93bb3 +bladeMaster 14/104 d6d403900c55b50f +bladeMaster 14/105 e9abe6867c9564e3 +bladeMaster 14/106 9ad4df3b27fd870f +bladeMaster 14/107 9d6f17c568bfbc1b +bladeMaster 14/108 14f6fac0daa28afb +bladeMaster 14/109 c0d5b4084f8267cb +bladeMaster 14/11 526ac98541f0fc99 +bladeMaster 14/110 0d79a8c89a8f8d2f +bladeMaster 14/111 6fd718b0b3e9b887 +bladeMaster 14/112 680ebd8daa70f68f +bladeMaster 14/113 c3fcf7e9a42f4a57 +bladeMaster 14/114 5b1e86d36ee977a7 +bladeMaster 14/115 93bdcd4ff3bbfa9f +bladeMaster 14/116 c3c23f935631b2ef +bladeMaster 14/117 757f3c45d7635447 +bladeMaster 14/118 42a7081e35e242ff +bladeMaster 14/119 5ca986e84a8a2747 +bladeMaster 14/12 105995432f607ba3 +bladeMaster 14/120 9bf1be432721439f +bladeMaster 14/121 07fd78217089de87 +bladeMaster 14/122 5cad2c7bdc43bad7 +bladeMaster 14/123 059a2889b7c83b1f +bladeMaster 14/124 94495a8a9fb64f2f +bladeMaster 14/125 79419fb650d8b38f +bladeMaster 14/126 df16ce76226b63df +bladeMaster 14/127 05143cdd0f0e61af +bladeMaster 14/128 b6166b01b0c49797 +bladeMaster 14/129 b27a33569e28fd7f +bladeMaster 14/13 9fb07e3fd7608069 +bladeMaster 14/130 de053e93ebd1294f +bladeMaster 14/131 47501066ea51dc67 +bladeMaster 14/132 a5d467c35b64dfcf +bladeMaster 14/133 f0bfe8d8aab0bbdb +bladeMaster 14/134 ca1b186f8de66997 +bladeMaster 14/135 e177ef83bfc77def +bladeMaster 14/136 19878f834c4b3827 +bladeMaster 14/137 1a21981517631df7 +bladeMaster 14/138 5ca0ab39c5575ce7 +bladeMaster 14/139 359010652d835157 +bladeMaster 14/14 9f67faa39bbdfd31 +bladeMaster 14/140 22bc6afb2a5d71bf +bladeMaster 14/141 955b553b2b5186d9 +bladeMaster 14/142 4a8e85091a5650b1 +bladeMaster 14/143 a3a213dfb3dbe8e9 +bladeMaster 14/144 15faa000cf449cc1 +bladeMaster 14/145 4facca377b3ec7c7 +bladeMaster 14/146 fe265c655cb65e47 +bladeMaster 14/147 c494659308cbfdbf +bladeMaster 14/148 a840f0078ff4275f +bladeMaster 14/149 2561a9d80573184f +bladeMaster 14/15 b4dea4850ee63c57 +bladeMaster 14/150 23e73e511cf1bb5f +bladeMaster 14/151 f84f4fc6a90a278f +bladeMaster 14/152 f43cda3711c89f97 +bladeMaster 14/153 4a4155a11eef50c5 +bladeMaster 14/154 2fbf50213eac0f81 +bladeMaster 14/155 3e334494c05d1f01 +bladeMaster 14/156 b0386049c7944b21 +bladeMaster 14/157 2c9588743a7960f7 +bladeMaster 14/158 a88257b8a97ef6c7 +bladeMaster 14/159 cc60b9b519d39bd7 +bladeMaster 14/16 0d057527d0afc2d9 +bladeMaster 14/160 20aa3199779df619 +bladeMaster 14/161 4afd4b36491b4789 +bladeMaster 14/162 d09f2bcc4e7d7067 +bladeMaster 14/163 5403d0cf33edf147 +bladeMaster 14/169 6ee71683899da9e7 +bladeMaster 14/17 09fe57de2ed54971 +bladeMaster 14/18 20dafaff6694e799 +bladeMaster 14/19 bf31a92912519589 +bladeMaster 14/2 053b4f9be2ee31a5 +bladeMaster 14/20 4cf110106bcb3e67 +bladeMaster 14/21 1d3d5783a708f2ee +bladeMaster 14/22 b6dff055d2d99a01 +bladeMaster 14/23 c1feaa98fd073ced +bladeMaster 14/24 c27e06fffd01bb27 +bladeMaster 14/25 4cc7832e82a33c67 +bladeMaster 14/26 1f73adb562a8c75b +bladeMaster 14/28 ac38d0eaac333af1 +bladeMaster 14/29 4cd203b499bb7167 +bladeMaster 14/3 9ff5db753763245d +bladeMaster 14/31 55f01f932fd124d9 +bladeMaster 14/32 21ed13ce2f5b4b73 +bladeMaster 14/33 fe9ec82c867f6ca7 +bladeMaster 14/34 379c90ccb5a4d1e1 +bladeMaster 14/35 19a9b2260193c74d +bladeMaster 14/36 67007b3fda2ccb29 +bladeMaster 14/37 8b10d2d2048fee59 +bladeMaster 14/38 60118f49b16a5329 +bladeMaster 14/39 44940cebe5d91085 +bladeMaster 14/4 dbf48c5bc12b79f5 +bladeMaster 14/40 3cf353dd635aeafd +bladeMaster 14/41 95ab4597722fadf3 +bladeMaster 14/42 7bce9edcf753b2f7 +bladeMaster 14/43 913e9e93ac525caf +bladeMaster 14/44 be840bbfe3face53 +bladeMaster 14/45 58d412eff43d2c71 +bladeMaster 14/46 e0f2cfa532bc93b3 +bladeMaster 14/47 959c7e423cceea17 +bladeMaster 14/48 b10662acfc0ebcaf +bladeMaster 14/49 fbcf332ea88dc52f +bladeMaster 14/5 6c681e3318754a59 +bladeMaster 14/50 99b706c7db930e9b +bladeMaster 14/51 f6f9dbc1d09bce07 +bladeMaster 14/52 089a880b99d7b79f +bladeMaster 14/53 35117b4189364e91 +bladeMaster 14/54 ee33a4163082f177 +bladeMaster 14/55 509ed431a590c26f +bladeMaster 14/56 d08bb894440c935f +bladeMaster 14/57 1875d6215b819797 +bladeMaster 14/58 b2f8404f65d2f7cf +bladeMaster 14/59 2ef7930fb66421ef +bladeMaster 14/6 25113d2718302611 +bladeMaster 14/60 2fa3874a91416a37 +bladeMaster 14/61 4eda2f1a067ffff7 +bladeMaster 14/62 691e55ae485c96df +bladeMaster 14/63 fdcd22c1fff6bcdf +bladeMaster 14/64 e5c90893b58ac4bf +bladeMaster 14/65 8374968951df9089 +bladeMaster 14/66 565d90b130468ba1 +bladeMaster 14/67 c58e149598da9241 +bladeMaster 14/68 89617eaad46fc939 +bladeMaster 14/7 97fcee4b79b0f553 +bladeMaster 14/70 f55c9a6ae06df79b +bladeMaster 14/71 0e0bc45b342ef263 +bladeMaster 14/72 7819754bb65757f7 +bladeMaster 14/73 c09fccb4ca29813f +bladeMaster 14/74 f3f05c7546dee56f +bladeMaster 14/75 8c507a50656c4867 +bladeMaster 14/76 6626dcd7f87848cf +bladeMaster 14/77 a3597a99980ab3c7 +bladeMaster 14/78 28a56f5a5b6c3e8f +bladeMaster 14/79 169f7ff7ee533e3b +bladeMaster 14/8 275a607710508969 +bladeMaster 14/80 fb1f194d47b451db +bladeMaster 14/81 e6c99c9e63675157 +bladeMaster 14/82 eccd04582c540ecb +bladeMaster 14/83 3461a71e5bd9b51f +bladeMaster 14/84 78c9eb5ebc303ab7 +bladeMaster 14/85 ea25565a0d64f6b7 +bladeMaster 14/86 13c8c34c1ab2319f +bladeMaster 14/87 fca39fc5d1af9647 +bladeMaster 14/88 33637ff82acfc0af +bladeMaster 14/89 39ac9476241d380f +bladeMaster 14/9 c6729e0719002e0b +bladeMaster 14/90 eb7cf1b9618a0a2f +bladeMaster 14/91 5d708d37fed52fff +bladeMaster 14/92 2db3ac3526365187 +bladeMaster 14/93 7a934e419597c12f +bladeMaster 14/94 9b4ab23f0bb858f7 +bladeMaster 14/95 3b7393b527cbd4ff +bladeMaster 14/96 3274aa16bd96ae47 +bladeMaster 14/97 a68e6e83b1e4e67f +bladeMaster 14/98 c816e2375d98a40f +bladeMaster 14/99 3fd0fb4430867017 +bladeMaster 15/0 94ce54985cbe647f +bladeMaster 15/1 d72d78f5fd002a4f +bladeMaster 15/10 fea0b5d4ffdf390f +bladeMaster 15/11 2dc4a8d19564ac17 +bladeMaster 15/12 a3ff146fd1245347 +bladeMaster 15/13 67c1554386fbd6ef +bladeMaster 15/14 8ae03ec63b35145f +bladeMaster 15/15 6702f1170db5aa87 +bladeMaster 15/16 fbfa796123c120ef +bladeMaster 15/17 7e6b5f4c9092866f +bladeMaster 15/18 9326aad9eb901e87 +bladeMaster 15/19 207bc50ca82757df +bladeMaster 15/2 5a71f658ec075187 +bladeMaster 15/20 1cd089d9d672bfbf +bladeMaster 15/21 715e40eab56b0b27 +bladeMaster 15/22 6853a678e3c898a5 +bladeMaster 15/23 b2efb5dcc22e2547 +bladeMaster 15/24 62bf719e91833967 +bladeMaster 15/26 0833d76c162be30f +bladeMaster 15/27 14bd7bd8c9f6c709 +bladeMaster 15/28 6fa3c0bf809729fb +bladeMaster 15/29 afe79b67bbe4d127 +bladeMaster 15/3 7b629672dec32f8f +bladeMaster 15/30 bbb254dab20503a1 +bladeMaster 15/31 9c573f67218f42b5 +bladeMaster 15/32 8819c71a5038f399 +bladeMaster 15/33 69412f62301e7f23 +bladeMaster 15/34 5baec8c54f36afe9 +bladeMaster 15/35 f52e9bd17dfb5ec5 +bladeMaster 15/36 1678574c6b15a32f +bladeMaster 15/4 7de7b1f5b9b576ef +bladeMaster 15/5 e26606ae5049bf37 +bladeMaster 15/6 da847cbab1b73caf +bladeMaster 15/7 1104e29ab6c85d6f +bladeMaster 15/8 6d3b781a5eed5f7f +bladeMaster 15/9 8315e3f8a9e655d7 +bladeMaster 2/0 f90610c940a16b1a +bladeMaster 2/1 37363b5f18fea972 +bladeMaster 2/10 94760a9f63aa8ab4 +bladeMaster 2/11 5b2601e77b2c47c0 +bladeMaster 2/12 71d39505fc0a24e0 +bladeMaster 2/13 c2606c95fc105087 +bladeMaster 2/14 635051f5b5f2d122 +bladeMaster 2/15 05ac8c23f7425bf9 +bladeMaster 2/16 176614605a11e0bb +bladeMaster 2/17 91357ae8b612b123 +bladeMaster 2/18 0c786843bece40a5 +bladeMaster 2/2 435dfdf383d6fb4b +bladeMaster 2/3 62709d8c4d4238b7 +bladeMaster 2/4 a62563132a795fab +bladeMaster 2/5 be79fd3d8209eca9 +bladeMaster 2/6 919faa9f25b44631 +bladeMaster 2/7 5e9088d3c8aaaba9 +bladeMaster 2/8 5f4efff057d8c40e +bladeMaster 2/9 1f16ec47a5d0d4bf +bladeMaster 3/0 4385f3c7e3a94e0b +bladeMaster 3/1 bf5b70b9147dc40a +bladeMaster 3/10 1ebb3744eb6b40e6 +bladeMaster 3/11 302fcf2534bb1f1b +bladeMaster 3/2 e64cbf120ff0879c +bladeMaster 3/3 3c353ef26c5643a4 +bladeMaster 3/4 93d098b4fb2afacc +bladeMaster 3/5 5badd943aad4911a +bladeMaster 3/6 1b772c62ca0be480 +bladeMaster 3/7 d13ffceed45ff99f +bladeMaster 3/8 f880414d02b29910 +bladeMaster 3/9 18e36d1316847229 +bladeMaster 4/0 18db3534b5031524 +bladeMaster 4/1 8cb2820247d4dfb8 +bladeMaster 4/10 d6403a9848947116 +bladeMaster 4/11 695b757a29185505 +bladeMaster 4/12 ce8a9a328910f33a +bladeMaster 4/13 a47665d0dbdc227e +bladeMaster 4/14 95dd4d2ad854a200 +bladeMaster 4/15 3afe4c0bdd96d073 +bladeMaster 4/16 c1a3707c47aa8d07 +bladeMaster 4/17 d07081997802e4ea +bladeMaster 4/18 e5c8d14afcf77995 +bladeMaster 4/19 fe4639f57aa3212a +bladeMaster 4/2 b649a7e792bcfe91 +bladeMaster 4/20 d1f796a975581315 +bladeMaster 4/21 7d2e631c81b31b3f +bladeMaster 4/22 9996acffdc1f3ae2 +bladeMaster 4/23 a684bb366ce7d0bc +bladeMaster 4/24 82ac0492c93fef13 +bladeMaster 4/3 b074dec743b67db8 +bladeMaster 4/4 f2379acf034f1990 +bladeMaster 4/5 bb08177fb676865a +bladeMaster 4/6 eaf54812be5f1b02 +bladeMaster 4/7 08034f934cc9fa5d +bladeMaster 4/8 6b199ad5f7dbb66c +bladeMaster 4/9 fd1fabed884864d9 +bladeMaster 5/0 f1a04684ada98cf5 +bladeMaster 5/1 085ebb0f14bdd110 +bladeMaster 5/10 56dd7c8ed7e8f0fe +bladeMaster 5/11 12a8feade357dce8 +bladeMaster 5/12 6bd8851712291652 +bladeMaster 5/13 cf946a07bda2b8de +bladeMaster 5/14 cee9c40fb713e272 +bladeMaster 5/15 495a760875bf1e75 +bladeMaster 5/16 ab525402026d52bf +bladeMaster 5/17 f5be4dccd8d5ae32 +bladeMaster 5/18 6d50421ec136c231 +bladeMaster 5/19 55d81fb8e68abb5e +bladeMaster 5/2 d55d5157b43a0ede +bladeMaster 5/20 ce219833d827cf83 +bladeMaster 5/21 ac8b6c82147f61d6 +bladeMaster 5/22 856df621d0e77059 +bladeMaster 5/23 674f7a4c61dbfcb5 +bladeMaster 5/3 2be2c65e7b147b59 +bladeMaster 5/30 c0174856f9199b69 +bladeMaster 5/31 d601b657b3ac877a +bladeMaster 5/33 f089bbfc2bbc1c11 +bladeMaster 5/34 d0819725fb9429d3 +bladeMaster 5/36 38a0403a1b4f67e2 +bladeMaster 5/4 3671bf7db5462eca +bladeMaster 5/5 c17551a5a0f314f5 +bladeMaster 5/6 9b909866dde2205e +bladeMaster 5/7 94876fe3a2883a25 +bladeMaster 5/8 d0fb45b116e15cc7 +bladeMaster 5/9 d2acc25547d4f33e +bladeMaster 6/0 50f68fb15d358883 +bladeMaster 6/1 42e8aaa115dd6d01 +bladeMaster 6/10 30e3883321727b17 +bladeMaster 6/11 a71335aa7dba4d47 +bladeMaster 6/12 48ab2e50acac369e +bladeMaster 6/13 cfe54fc6bf9192eb +bladeMaster 6/14 c094715529541e03 +bladeMaster 6/15 f57c1c7574158666 +bladeMaster 6/16 0996d4c587d7d92d +bladeMaster 6/17 1889f1fc9639c704 +bladeMaster 6/18 ad7c5fac2c45b538 +bladeMaster 6/19 b6d88e98d2df9687 +bladeMaster 6/2 23b8a3af6a227840 +bladeMaster 6/20 aebe52e64a1cfb9e +bladeMaster 6/21 58719a83f98fd85c +bladeMaster 6/3 fe0a7f22aa665e0d +bladeMaster 6/4 7606cda289246a84 +bladeMaster 6/5 cd682b3166a7ca4f +bladeMaster 6/6 7823477a3fbcd6cf +bladeMaster 6/7 b3a6a7dedadaea8a +bladeMaster 6/8 2d925a1601ef368f +bladeMaster 6/9 3af5062ad26d9548 +bladeMaster 7/0 331d0b665e5414a0 +bladeMaster 7/1 5dbb6e43bc186837 +bladeMaster 7/10 d00c943a829bc971 +bladeMaster 7/11 3e38e9d93b77da30 +bladeMaster 7/12 625c025fadff990f +bladeMaster 7/13 48a39a96a3af08da +bladeMaster 7/14 4195ff8fc761466d +bladeMaster 7/16 73a0646f579c2169 +bladeMaster 7/17 f513275c83838cbb +bladeMaster 7/18 c62b594ca4f8b912 +bladeMaster 7/19 9de42c06277fde8c +bladeMaster 7/2 094882f698aa4e48 +bladeMaster 7/21 8b460637b4c73bc1 +bladeMaster 7/22 7f1f62ce49912d87 +bladeMaster 7/24 98126d56e6cfb5df +bladeMaster 7/25 03dcd2a80fe461e9 +bladeMaster 7/26 0d31ef66d6d65b7c +bladeMaster 7/27 553a32241f371d83 +bladeMaster 7/28 8218fb2a37965786 +bladeMaster 7/29 abb64004de037147 +bladeMaster 7/3 a03222564e6759d9 +bladeMaster 7/30 73c558a4921ddade +bladeMaster 7/31 cb5d61e6793fdc0c +bladeMaster 7/33 869c08c35e7ca8da +bladeMaster 7/34 f6c51dc8dd8b054f +bladeMaster 7/35 219b35701b8175ca +bladeMaster 7/36 52fa22834f2f35bc +bladeMaster 7/38 ff9cb83b61ba12ce +bladeMaster 7/39 2800c432686d3622 +bladeMaster 7/4 6f27d3c2cd410c62 +bladeMaster 7/40 d6664c25bc8c42e2 +bladeMaster 7/41 36bc0230b0fd71dc +bladeMaster 7/42 95beff3ddaa7b51a +bladeMaster 7/43 b99b89eb3e6ec892 +bladeMaster 7/44 6bba81eb761a1d95 +bladeMaster 7/45 a3781021b33bb155 +bladeMaster 7/46 092e097cf68bfdd2 +bladeMaster 7/49 e65673abf25d3be3 +bladeMaster 7/5 d3fc2c757231fe98 +bladeMaster 7/50 95e6c12822228221 +bladeMaster 7/51 09fe5f5bbf67645e +bladeMaster 7/52 bb708993713ae825 +bladeMaster 7/59 7c1c19111c5d0e49 +bladeMaster 7/6 6529e1b74bad3b7f +bladeMaster 7/60 ba3d6e513f13f0b5 +bladeMaster 7/61 f2576dba99cde5df +bladeMaster 7/62 c50fec1c1b466f77 +bladeMaster 7/63 2735a334a2660c33 +bladeMaster 7/64 487d0eb0f8e34f1a +bladeMaster 7/65 e3389abf5e0e7e48 +bladeMaster 7/66 6ee03a404b1267aa +bladeMaster 7/67 633c7db64ceeb71b +bladeMaster 7/68 c49de6026acf393b +bladeMaster 7/69 2bed163a6be04dc8 +bladeMaster 7/7 ad3656be56659753 +bladeMaster 7/70 3dd0865e43b676d3 +bladeMaster 7/72 547570a8ff055e38 +bladeMaster 7/73 fc11a8251a249586 +bladeMaster 7/8 7eb4a7150d4a0251 +bladeMaster 7/9 4b3304716e660aef +bladeMaster 8/0 dc34b390fb6550e8 +bladeMaster 8/1 0c956948383262aa +bladeMaster 8/10 e3b0bea8558e7a24 +bladeMaster 8/11 f319d970bbbf927c +bladeMaster 8/12 5f9ee2ecc2d36cea +bladeMaster 8/13 227c960d10ae32a2 +bladeMaster 8/14 471f1387b29f302d +bladeMaster 8/15 02c5b235f7f3bd51 +bladeMaster 8/16 56fd0c7b8a98459d +bladeMaster 8/17 ecd5da464540799c +bladeMaster 8/18 72ae3cf9ad0107c2 +bladeMaster 8/19 509ec9d02d32917b +bladeMaster 8/2 1c3ff2cf62db4326 +bladeMaster 8/20 41e59e9ed21537bb +bladeMaster 8/21 502693d53ab94664 +bladeMaster 8/22 e90b6b82b981b942 +bladeMaster 8/23 6183277e094c676f +bladeMaster 8/24 aadaf614069ef71b +bladeMaster 8/25 b49abcc9ab02d00a +bladeMaster 8/26 ee1b581127c45509 +bladeMaster 8/27 e173818be968aa2e +bladeMaster 8/28 7264ff8483fcbc17 +bladeMaster 8/29 44f2c9716d323195 +bladeMaster 8/3 aef58506e0533b6e +bladeMaster 8/30 622dbe9d00b3fb53 +bladeMaster 8/31 44722e2a4cb72a1d +bladeMaster 8/32 0159b786068410aa +bladeMaster 8/33 e77e7bb2db6ef833 +bladeMaster 8/34 ffb9d1e9d7c510fb +bladeMaster 8/35 2d1085374caaec0b +bladeMaster 8/36 c2664253ecbedb05 +bladeMaster 8/37 fa142ac859086c0b +bladeMaster 8/38 22395dc12943c26a +bladeMaster 8/39 f6e3824ac220d91d +bladeMaster 8/4 afdaa48c0d3fd7bb +bladeMaster 8/40 d30337be8513153e +bladeMaster 8/41 9a331b4707e7ef2a +bladeMaster 8/42 1f4e0726cb9436a6 +bladeMaster 8/43 64664bf41f199975 +bladeMaster 8/44 8374d6064be02898 +bladeMaster 8/45 a8682c24520e3a59 +bladeMaster 8/46 08732b5f9befeb37 +bladeMaster 8/47 be7160e8ed35175b +bladeMaster 8/48 6c037d87947e0a21 +bladeMaster 8/49 077c78a6c89adc93 +bladeMaster 8/5 da289063029b83ef +bladeMaster 8/50 574297811b93818f +bladeMaster 8/51 c2b46101663a945d +bladeMaster 8/52 4da4b6e42646003a +bladeMaster 8/59 e9bfe7bf631eece5 +bladeMaster 8/6 59b700f93429e461 +bladeMaster 8/60 6a0eb0bec25a2b54 +bladeMaster 8/61 d8f3a1f0014cfa2d +bladeMaster 8/62 bafdf46ccfece9fa +bladeMaster 8/63 871bdee997bde8f1 +bladeMaster 8/64 95df985ba44db595 +bladeMaster 8/65 7c504189139a0b61 +bladeMaster 8/66 dc5b7aa706f531ce +bladeMaster 8/67 ab017346de2ae988 +bladeMaster 8/68 f0459520e000556b +bladeMaster 8/69 d1af11b71b7b6c72 +bladeMaster 8/7 dde233a37a926c7d +bladeMaster 8/70 332f9a6607575167 +bladeMaster 8/71 32e60ced1af4a6e0 +bladeMaster 8/72 d672bad2e6544358 +bladeMaster 8/73 8cec5ed0385e423e +bladeMaster 8/8 d72124ffe04348d9 +bladeMaster 8/9 f5723cb0eba1c7e7 +bladeMaster 9/0 22d7a4aed1cc1c38 +bladeMaster 9/1 1ea4713d6dd4e416 +bladeMaster 9/10 7b4f38b796aac03c +bladeMaster 9/11 1126aebe7fba4cf3 +bladeMaster 9/12 74b318bf618d9fc3 +bladeMaster 9/13 49c822538b6ba4b2 +bladeMaster 9/14 287bdacf61e5aab8 +bladeMaster 9/15 2f921671a402a2e2 +bladeMaster 9/16 453f93d4c200f83b +bladeMaster 9/17 8f7f6f956f32c831 +bladeMaster 9/18 c8f63f300fbdc776 +bladeMaster 9/19 474363bad2cf3022 +bladeMaster 9/2 4c61e1e929485975 +bladeMaster 9/20 d15a0663139e79b2 +bladeMaster 9/21 c9fc5f56deb3d6b9 +bladeMaster 9/22 a85b8bc59c76be3a +bladeMaster 9/23 f1d52990281c94b3 +bladeMaster 9/24 066daa1b3e7763a5 +bladeMaster 9/25 45e4ed38ce7eaca1 +bladeMaster 9/26 dadaf8bf87437021 +bladeMaster 9/27 1de55229055f6e32 +bladeMaster 9/28 8b2e38a096315c5a +bladeMaster 9/29 16f857a17d1ad4bb +bladeMaster 9/3 c24c0d33ce37e050 +bladeMaster 9/30 46618893449f64da +bladeMaster 9/31 1a27bb281a33794e +bladeMaster 9/32 fcd3b9a78715bbc0 +bladeMaster 9/33 a0a395c73065a4ec +bladeMaster 9/34 9f3cc4b08d5617cc +bladeMaster 9/35 88b6469e8ed53386 +bladeMaster 9/36 67bbb940cd3814e7 +bladeMaster 9/37 5e58f4750f14d755 +bladeMaster 9/38 da85021a058487df +bladeMaster 9/39 d68872b2e0f8d834 +bladeMaster 9/4 fed2a6f398155390 +bladeMaster 9/40 5ec47355abfe9e25 +bladeMaster 9/41 731dc89f6af679d6 +bladeMaster 9/42 54dc991a6888b3bd +bladeMaster 9/43 320149ef4b4b47ee +bladeMaster 9/44 26c4266f6167f2a6 +bladeMaster 9/45 54d59f864385a56c +bladeMaster 9/46 ab0220bc5b76544b +bladeMaster 9/47 7c45064af8516b55 +bladeMaster 9/48 6721ef4ef2d74ea6 +bladeMaster 9/49 929b0a2526b37dbf +bladeMaster 9/5 8bc534d1e2953004 +bladeMaster 9/50 05309232ae37398e +bladeMaster 9/51 e38b0b970984f28f +bladeMaster 9/52 5fa6512cd3512434 +bladeMaster 9/59 d9f37c9bcca532b7 +bladeMaster 9/6 0e12bac0d43e3793 +bladeMaster 9/60 5b9131479ad541a6 +bladeMaster 9/61 d92c791cc201ad8d +bladeMaster 9/62 22dd1bf928fe96a5 +bladeMaster 9/63 5b32392dd9669c4e +bladeMaster 9/64 23cbb846796cc828 +bladeMaster 9/65 f9b3462b4bd8020b +bladeMaster 9/66 cb3fff08d0d64658 +bladeMaster 9/67 0eb381b00cab9ebb +bladeMaster 9/68 6dae08dc91271fd6 +bladeMaster 9/69 d22abb4c66a9e001 +bladeMaster 9/7 0b2912d887482cbb +bladeMaster 9/70 cc56c62763d40bbb +bladeMaster 9/71 f7cdb2be2879b784 +bladeMaster 9/72 e02440c67c23a65f +bladeMaster 9/73 311e24ffe10339bc +bladeMaster 9/8 56d3957a7a4ee9de +bladeMaster 9/9 c949fa2853ce0afc +newDarkWizard 0/0 cee52635859221ee +newDarkWizard 0/1 32f54e7c0f4bb76b +newDarkWizard 0/10 ce5af66b7694b7ae +newDarkWizard 0/11 043afaaf79dbcdde +newDarkWizard 0/12 b713c90b2da8299b +newDarkWizard 0/13 5bc4929f6681b248 +newDarkWizard 0/14 a3f2ee898482df18 +newDarkWizard 0/15 59723ef447937caf +newDarkWizard 0/16 6af75aa41822e58f +newDarkWizard 0/17 09ca5fe5d08fb9eb +newDarkWizard 0/18 8fcc136f1a1a426d +newDarkWizard 0/19 1f3b02f7c8928fd8 +newDarkWizard 0/2 4ab5b6092ef0c1a2 +newDarkWizard 0/20 db7d2eec22673d74 +newDarkWizard 0/21 1b4cbba97254d2d3 +newDarkWizard 0/22 15e58d97dd0906e0 +newDarkWizard 0/23 a25baec8b016d634 +newDarkWizard 0/24 5b59e36ad5f8c132 +newDarkWizard 0/25 d6e923c105c62e79 +newDarkWizard 0/26 e95912b9f2f97aa9 +newDarkWizard 0/27 e8fef209baedc3b5 +newDarkWizard 0/28 a56a44b89fcaf23d +newDarkWizard 0/3 479e7850c324db0d +newDarkWizard 0/31 3d3562fec5a023f1 +newDarkWizard 0/32 9b5e262b62a439e1 +newDarkWizard 0/33 59dbe1c5582d56fe +newDarkWizard 0/34 12141f264c34b87a +newDarkWizard 0/35 bd5a2b637ee6d9f3 +newDarkWizard 0/4 9fe3c62ccb1ab951 +newDarkWizard 0/5 2132d1be2406a4e7 +newDarkWizard 0/6 21cc0ea9fe9367bb +newDarkWizard 0/7 724ee28f04729eea +newDarkWizard 0/8 afc71197926d1858 +newDarkWizard 0/9 ae462c4dd72c8565 +newDarkWizard 1/0 779c576e63a1f2e9 +newDarkWizard 1/1 853cd94293678aee +newDarkWizard 1/2 6c89085e9d619430 +newDarkWizard 1/3 323f31c9875701d1 +newDarkWizard 1/4 9ca3351291e0c372 +newDarkWizard 1/5 1898dd684a8adf99 +newDarkWizard 1/6 8697ad3a003b5505 +newDarkWizard 1/7 13237754bc96a691 +newDarkWizard 1/8 4488670c22bdacff +newDarkWizard 10/0 a38331292e9a48fe +newDarkWizard 10/1 e7c531261132218b +newDarkWizard 10/10 70ec8beed1b94353 +newDarkWizard 10/11 25b334a4536d387f +newDarkWizard 10/12 18aebb7f1de9ac6a +newDarkWizard 10/13 a1ff3691338e0851 +newDarkWizard 10/14 10280c0b0d3fe9ec +newDarkWizard 10/15 a54caf3184e2fbea +newDarkWizard 10/16 c5eedecb7212cc43 +newDarkWizard 10/17 94a688892e6470a7 +newDarkWizard 10/18 afa3295d7376c761 +newDarkWizard 10/19 2aef67c0aff3f7ab +newDarkWizard 10/2 f4d414a284dadef8 +newDarkWizard 10/20 1ec12e93ee077706 +newDarkWizard 10/21 fe524397fc2a58d2 +newDarkWizard 10/22 973d62bac5b56d37 +newDarkWizard 10/23 ae98b2b71a22a8e4 +newDarkWizard 10/24 4bc0847a69354499 +newDarkWizard 10/25 7cb0386d77161235 +newDarkWizard 10/26 7c3370ab0b234e41 +newDarkWizard 10/27 56bf64b05c849195 +newDarkWizard 10/28 0efdb2ddd0676893 +newDarkWizard 10/29 2f7138e5cad8d24c +newDarkWizard 10/3 3206e95dca2877ad +newDarkWizard 10/30 da0a67eb44af50f4 +newDarkWizard 10/31 48709275e2f37296 +newDarkWizard 10/32 885af5864732f9d0 +newDarkWizard 10/33 19c8f654d9b3729a +newDarkWizard 10/34 b3bc0dbb230c8fee +newDarkWizard 10/35 06d2772144b3abda +newDarkWizard 10/36 b39f76b2e9b12a26 +newDarkWizard 10/37 a8fba0b98660aaf1 +newDarkWizard 10/38 2f2f71709232714e +newDarkWizard 10/39 8c8e316a37773646 +newDarkWizard 10/4 372a428ff50171f6 +newDarkWizard 10/40 23207daf986ce3b0 +newDarkWizard 10/41 5c1bf78715cf9005 +newDarkWizard 10/42 457e742d4b0f57af +newDarkWizard 10/43 afaac04198e2fd39 +newDarkWizard 10/44 0868ec813ccf7c9c +newDarkWizard 10/45 dabb450cd62b94ba +newDarkWizard 10/46 889ec46af4c297b8 +newDarkWizard 10/47 d441d5b7aaaf80d6 +newDarkWizard 10/48 f5c95d1b8138e880 +newDarkWizard 10/49 f32792af097479ff +newDarkWizard 10/5 34d2ab4cf106a38e +newDarkWizard 10/50 cae11ba50dcd1d8c +newDarkWizard 10/51 6fdaf3c64343c49d +newDarkWizard 10/52 6ff34d8708f170d8 +newDarkWizard 10/6 aeba4f6647675590 +newDarkWizard 10/62 1db254953d435d91 +newDarkWizard 10/63 b682edbdf15f7268 +newDarkWizard 10/64 09a978370f6e1dac +newDarkWizard 10/65 36654664f5030b30 +newDarkWizard 10/66 8197848d1a4c5927 +newDarkWizard 10/67 8bb1338816f594c6 +newDarkWizard 10/68 d8b34fd3b5b84cb1 +newDarkWizard 10/69 2fd323aed7044edd +newDarkWizard 10/7 ab1866accd125c1b +newDarkWizard 10/70 008e7d2f449c10b4 +newDarkWizard 10/71 9362f0b58bb43994 +newDarkWizard 10/8 7ff4665e2dcc6bba +newDarkWizard 10/9 4e83a6eb73ebebd6 +newDarkWizard 11/0 5263692b3cb8c6eb +newDarkWizard 11/1 bb8ddd7ef258622c +newDarkWizard 11/10 7d941e0263106104 +newDarkWizard 11/11 ca812b763c61599f +newDarkWizard 11/12 1dc66f41f3472d7a +newDarkWizard 11/13 026ebb559f299b27 +newDarkWizard 11/14 fdb1b59d7fb9007e +newDarkWizard 11/15 4bd6097284fdc003 +newDarkWizard 11/16 8ce0f71140461350 +newDarkWizard 11/17 2bfe2364cf8ddb78 +newDarkWizard 11/18 27b4030336406ad8 +newDarkWizard 11/19 5fcb839b65f8ec4c +newDarkWizard 11/2 4d451a01c769758e +newDarkWizard 11/20 baa6ec794df41503 +newDarkWizard 11/21 da4c0efb671d3e3b +newDarkWizard 11/22 99d6d9d096c1187e +newDarkWizard 11/23 185637c758e80e44 +newDarkWizard 11/24 2f36c9535d483b3e +newDarkWizard 11/25 d0c165319c1a82df +newDarkWizard 11/26 78ca5b3f41ddf4fd +newDarkWizard 11/27 6ad94ac51cc3261d +newDarkWizard 11/28 8c47daf4bdeb8edf +newDarkWizard 11/29 1f6cfe0514b210a6 +newDarkWizard 11/3 0658242274937394 +newDarkWizard 11/30 4c9669f85172f7bc +newDarkWizard 11/31 638507bf26c62b2b +newDarkWizard 11/32 7d534b27961bddf2 +newDarkWizard 11/33 4c06a4e5a061193f +newDarkWizard 11/34 949498f6b68c3de5 +newDarkWizard 11/35 460cabcd78ed3258 +newDarkWizard 11/36 2f806ad8a59b6410 +newDarkWizard 11/37 d61c61ed5150875e +newDarkWizard 11/38 426fa6ffadca0c7f +newDarkWizard 11/39 23a110679a9d8f0e +newDarkWizard 11/4 9a80f357d4e096fd +newDarkWizard 11/40 02a161bd9fc396d7 +newDarkWizard 11/41 7db7171de787fe8d +newDarkWizard 11/42 842f9f1b3f5e02df +newDarkWizard 11/43 ad5f96a9ff371878 +newDarkWizard 11/44 4773b61aad7084c3 +newDarkWizard 11/45 780cf53e83dc1015 +newDarkWizard 11/46 d25e789fafb21e35 +newDarkWizard 11/47 e77ac2108983e63d +newDarkWizard 11/48 b816f9b6a0b836bd +newDarkWizard 11/49 371d495c9fa16970 +newDarkWizard 11/5 bcb134b4470e87a5 +newDarkWizard 11/50 55b86f079705a1b6 +newDarkWizard 11/51 0f4c7f5e6f1078df +newDarkWizard 11/52 1d413ffc7aafac32 +newDarkWizard 11/59 bdbf7ae5bd3efd63 +newDarkWizard 11/6 f8a03dc2d7b29992 +newDarkWizard 11/60 a2ed748e277a01e1 +newDarkWizard 11/61 d08fbd36100ce4d5 +newDarkWizard 11/62 0c0627ccca6f2bee +newDarkWizard 11/63 c666b97f44e5e6f9 +newDarkWizard 11/64 f53b75235aa26dc4 +newDarkWizard 11/65 b4cc91272750d9f4 +newDarkWizard 11/66 5d2d65f7cf5ba565 +newDarkWizard 11/67 372f68d5a5b2d125 +newDarkWizard 11/68 7655f01008c25bf4 +newDarkWizard 11/69 92a62dce0e90daa0 +newDarkWizard 11/7 70f7575c0a1d46db +newDarkWizard 11/70 56fb39122a3943ca +newDarkWizard 11/71 664ca60d0604a1a6 +newDarkWizard 11/72 200eb2a591965a1b +newDarkWizard 11/73 4b8198ae457d464c +newDarkWizard 11/8 5697633574c5721b +newDarkWizard 11/9 e5db9de8daecab48 +newDarkWizard 12/0 722755a88ebbb40d +newDarkWizard 12/1 c7267a641bf5d041 +newDarkWizard 12/10 a905bfa19d8ccc8f +newDarkWizard 12/100 ace0cbe8324255ff +newDarkWizard 12/101 efe807f6b2616b6d +newDarkWizard 12/102 ae337c04909c73e5 +newDarkWizard 12/103 a618149f9df0bae7 +newDarkWizard 12/104 e4cb92336459b4cb +newDarkWizard 12/105 13b933945cc50391 +newDarkWizard 12/106 1e611ff7df8e8d95 +newDarkWizard 12/107 148958a4c0e0b82f +newDarkWizard 12/108 c8fd75d413be873b +newDarkWizard 12/109 9c8b62b1ae9e42e3 +newDarkWizard 12/11 37ec68e823ad3ba9 +newDarkWizard 12/110 8466580ae62bf97f +newDarkWizard 12/111 0fa8b88292f3222d +newDarkWizard 12/112 d568652384dbc381 +newDarkWizard 12/113 049cd597a1b31929 +newDarkWizard 12/114 2439f565157eb709 +newDarkWizard 12/115 64d6ccc6c740e089 +newDarkWizard 12/116 100fd82d6aa5531d +newDarkWizard 12/117 7b1d953f44795115 +newDarkWizard 12/118 e99e3c9b9dc8da4f +newDarkWizard 12/119 1aa21c30ae17c11f +newDarkWizard 12/12 d42d14fb95ea5f9f +newDarkWizard 12/120 7552475392a1150b +newDarkWizard 12/121 543a2e63f96b31d1 +newDarkWizard 12/122 0762d070ad38acfd +newDarkWizard 12/123 0193c8772628c791 +newDarkWizard 12/124 121b01d493121c05 +newDarkWizard 12/125 6f61bd066d03b3cd +newDarkWizard 12/126 f93c761b53a96b6d +newDarkWizard 12/127 3a76e34e4b5c1dab +newDarkWizard 12/128 bc1d6bb1ca836d31 +newDarkWizard 12/129 0a66275606de4775 +newDarkWizard 12/13 7d4a79cc1fa09907 +newDarkWizard 12/130 b949dcd9f1b9093d +newDarkWizard 12/131 835a525bb5a153df +newDarkWizard 12/132 fdfc4f1d9e42a713 +newDarkWizard 12/133 a1fb91ba920261f7 +newDarkWizard 12/134 39e96043ca155053 +newDarkWizard 12/135 194b3e01704e8089 +newDarkWizard 12/136 d3700c9c69c24d83 +newDarkWizard 12/137 f889d8c3c5ae9a63 +newDarkWizard 12/138 32c8be98c2efde43 +newDarkWizard 12/139 7a008263db90f54f +newDarkWizard 12/14 0f2e7b0ae8d0df07 +newDarkWizard 12/140 d9e7df472c7b036b +newDarkWizard 12/141 82ef38ecc63f2ae3 +newDarkWizard 12/142 514fcce998eaea7b +newDarkWizard 12/143 b678d4e6713f2f1b +newDarkWizard 12/15 881af6d245cd85d1 +newDarkWizard 12/16 41a1178e62b4b32f +newDarkWizard 12/17 9f4d6590ca853c27 +newDarkWizard 12/18 e24322be10718237 +newDarkWizard 12/19 1de44b5729891d9f +newDarkWizard 12/2 e2dfde0b710ffb2d +newDarkWizard 12/21 2269caaf8fba1fb7 +newDarkWizard 12/22 24331b4999eb6ca7 +newDarkWizard 12/23 154cd5548d89708f +newDarkWizard 12/24 824b525a5f8bb5cf +newDarkWizard 12/26 8e46436f467e492f +newDarkWizard 12/3 71fa367a69d46828 +newDarkWizard 12/30 948ac956c6cc2bff +newDarkWizard 12/31 0878942c1ef09697 +newDarkWizard 12/32 f4c0c92c81e53e61 +newDarkWizard 12/33 e3ec721d0e4b91d9 +newDarkWizard 12/34 e504a9064f93cb5d +newDarkWizard 12/35 a5a7a1710ac81991 +newDarkWizard 12/36 47c71b51a54270ed +newDarkWizard 12/37 d567a53097bbb9ef +newDarkWizard 12/38 cb5d77f26991c4b1 +newDarkWizard 12/39 fab8e1d39d305fe7 +newDarkWizard 12/4 d316819146727ec4 +newDarkWizard 12/40 0afa06ba113054dd +newDarkWizard 12/41 21a27c223b6b8473 +newDarkWizard 12/42 75c0b0cf93c02b2a +newDarkWizard 12/43 e11af59b19043eb7 +newDarkWizard 12/44 31f4c40967319937 +newDarkWizard 12/45 84478923d33fed0f +newDarkWizard 12/46 1deb71b878c4d787 +newDarkWizard 12/47 c297034624125f27 +newDarkWizard 12/48 4e02a3955c48d34f +newDarkWizard 12/49 9a0c11de4ff339e6 +newDarkWizard 12/5 7632ea85dd2a8e30 +newDarkWizard 12/50 2e5aa267e194f293 +newDarkWizard 12/6 68e750482d14e5f0 +newDarkWizard 12/60 5305b88bf4aaa959 +newDarkWizard 12/61 fbf77eab0ae51083 +newDarkWizard 12/62 6f883c5b173acbaf +newDarkWizard 12/63 17c1c6045eb4e10b +newDarkWizard 12/64 1e1b0fccd07ceca9 +newDarkWizard 12/65 5941b80a6e1df989 +newDarkWizard 12/7 86647f510e6bacf7 +newDarkWizard 12/70 a8fbc988a7312a67 +newDarkWizard 12/71 76f087ea8e66ad57 +newDarkWizard 12/72 dbdfa055cdc0a20b +newDarkWizard 12/8 d2dad957bda8aca7 +newDarkWizard 12/9 fe03ec574f46b677 +newDarkWizard 13/0 7392110397391a17 +newDarkWizard 13/1 f70a6636e9e361c9 +newDarkWizard 13/10 73b8daab6d07a605 +newDarkWizard 13/103 a0c06587ab860a57 +newDarkWizard 13/104 e25ec83ad8a71087 +newDarkWizard 13/105 11c44a149124e637 +newDarkWizard 13/106 56c938f4fc100809 +newDarkWizard 13/107 22f7dc22142daacd +newDarkWizard 13/109 62dda29b1e8ac567 +newDarkWizard 13/11 ca251cadf4efe0af +newDarkWizard 13/110 d21fdcf7bd5da3ef +newDarkWizard 13/111 7c6995664dc669f7 +newDarkWizard 13/112 b6d1c4164fc45eb7 +newDarkWizard 13/113 9bba473761a8fbd7 +newDarkWizard 13/114 be80ff02dda7ff87 +newDarkWizard 13/115 79a6f7868b041687 +newDarkWizard 13/116 a65bd32348eed3c7 +newDarkWizard 13/117 2f4a8fe8a8543ebf +newDarkWizard 13/118 594a3416af0c2207 +newDarkWizard 13/119 4556b07b3faf16af +newDarkWizard 13/12 2855d07d7d3abc89 +newDarkWizard 13/120 82292ce5233e4427 +newDarkWizard 13/121 706a4efc0b80fa9f +newDarkWizard 13/122 4cc1c33760414973 +newDarkWizard 13/123 f3dda8993e0e2633 +newDarkWizard 13/124 0f8347c18ec36c17 +newDarkWizard 13/125 866a46434a96a9ab +newDarkWizard 13/126 cd02aab0ffd34d27 +newDarkWizard 13/127 a0e4bf3c0b9b0cc7 +newDarkWizard 13/128 6eb83947ae6255b3 +newDarkWizard 13/129 f84dc961130cf64b +newDarkWizard 13/13 8004efbdc0583761 +newDarkWizard 13/130 8e4a02eaec7a2163 +newDarkWizard 13/131 57d9f5b854210f03 +newDarkWizard 13/132 31086e82282ebb8b +newDarkWizard 13/133 d364626c60c36753 +newDarkWizard 13/134 67ad94ef50b2e1a7 +newDarkWizard 13/135 ac92570bf4df4bd1 +newDarkWizard 13/136 3527092c0f8db6f9 +newDarkWizard 13/137 f51d5582336e12e1 +newDarkWizard 13/138 7cb539aa5f722b51 +newDarkWizard 13/139 36020c77f301d5c1 +newDarkWizard 13/14 22783d889c964739 +newDarkWizard 13/140 a8234a1ec30cc531 +newDarkWizard 13/141 33351655b6812699 +newDarkWizard 13/142 17990a47be7698e1 +newDarkWizard 13/143 73c343087474bff9 +newDarkWizard 13/144 9760b94e063b84a1 +newDarkWizard 13/15 34e632e4ef2021cd +newDarkWizard 13/16 030350570d552f51 +newDarkWizard 13/17 f0946f4c21761b51 +newDarkWizard 13/18 cffecd839926dbaf +newDarkWizard 13/19 d7b537649b8a6c2f +newDarkWizard 13/2 6a265006848e57af +newDarkWizard 13/20 dd6bbd7965c66b6c +newDarkWizard 13/21 0682a42a9be25289 +newDarkWizard 13/22 468bcd9cd321fd7d +newDarkWizard 13/23 2b43d1f1b6c58479 +newDarkWizard 13/24 fb358286c1d8fbb1 +newDarkWizard 13/25 8a9b01522c8285f1 +newDarkWizard 13/26 8b049915c5839e1b +newDarkWizard 13/27 f0ab881bf56b25d1 +newDarkWizard 13/28 70b2a54c0fbd5281 +newDarkWizard 13/29 0a90b62ec6535667 +newDarkWizard 13/3 ce13bbe3929d1677 +newDarkWizard 13/30 56d05f6e8564d1b9 +newDarkWizard 13/31 38092e722dfbb503 +newDarkWizard 13/32 604569a5586adeb1 +newDarkWizard 13/33 fb22d733400b2441 +newDarkWizard 13/34 2e951a2b32305e09 +newDarkWizard 13/35 1b6db1b0541416c3 +newDarkWizard 13/36 8b7bc1f5c088e80c +newDarkWizard 13/37 813f49170771a951 +newDarkWizard 13/38 c8e0238fd087cebf +newDarkWizard 13/39 f8300227ebbb3b3a +newDarkWizard 13/4 9248b7654a0bc221 +newDarkWizard 13/40 d622d9635c4c20bd +newDarkWizard 13/41 a60f65444044221b +newDarkWizard 13/42 7c2007c5c5121bae +newDarkWizard 13/43 767ee61993c3cabf +newDarkWizard 13/44 619da2b17735d3ef +newDarkWizard 13/45 5a22f067fe2046d7 +newDarkWizard 13/46 467d0c4a6785a99f +newDarkWizard 13/47 274c4c72da37f20b +newDarkWizard 13/48 3160a03383623ce7 +newDarkWizard 13/49 935a3932c49e11ff +newDarkWizard 13/5 0023ef722ff7f135 +newDarkWizard 13/50 a9be140b7e205df7 +newDarkWizard 13/51 52a7b589bd7ec6af +newDarkWizard 13/52 07aab6b3e768c069 +newDarkWizard 13/53 f60eef5ebabb6439 +newDarkWizard 13/54 981bf5cee0219a99 +newDarkWizard 13/55 ec31da2f2e6bb615 +newDarkWizard 13/56 f65899c19a6dd4d9 +newDarkWizard 13/57 b67e29983438b725 +newDarkWizard 13/58 b26c9fc094765a75 +newDarkWizard 13/59 30c16f909dfc8a8f +newDarkWizard 13/60 501db23c8db8b75f +newDarkWizard 13/61 2648fa6c3b24a55b +newDarkWizard 13/62 38882f540d6b57c7 +newDarkWizard 13/63 9a02ce95ffd5ce9f +newDarkWizard 13/64 6fe4e2b91af9eb47 +newDarkWizard 13/65 1c11ed11d28a2c1b +newDarkWizard 13/66 d5f6c9e8a038110f +newDarkWizard 13/67 d2e2051ae80371ed +newDarkWizard 13/68 fcd933a61755dc6b +newDarkWizard 13/69 f344f755c2696caf +newDarkWizard 13/7 3330d0097ba26b7b +newDarkWizard 13/70 6af124eaa3190dcf +newDarkWizard 13/71 0df227b29824b397 +newDarkWizard 13/72 8ce4f7de71ecb317 +newDarkWizard 13/73 0715b3cfbbe11ac7 +newDarkWizard 13/74 a7c6c1fd17465e8f +newDarkWizard 13/75 25c98569e923395f +newDarkWizard 13/76 2400633ed2a51bbf +newDarkWizard 13/8 f2081dbd0acd2334 +newDarkWizard 13/80 7c29e56dcf23d8ff +newDarkWizard 13/81 0d4f194599173b1f +newDarkWizard 13/82 aa498d64785d5177 +newDarkWizard 13/83 477c82d2000b9501 +newDarkWizard 13/84 65d8038378da4c73 +newDarkWizard 13/85 6e460e4fd3357b59 +newDarkWizard 13/86 fd811954964f473f +newDarkWizard 13/87 6b56df3b7634b883 +newDarkWizard 13/88 00b45840876f795f +newDarkWizard 13/89 0d1d55db5dba9ba7 +newDarkWizard 13/9 24c975df1071b975 +newDarkWizard 13/90 6f0a07b2f9efbb69 +newDarkWizard 13/91 72596b59778cb3db +newDarkWizard 13/92 1ae3a448940e92f7 +newDarkWizard 13/93 9014222cac01631d +newDarkWizard 13/94 a9b46b3a6597678f +newDarkWizard 13/95 fe89957e5f92159b +newDarkWizard 13/96 abed498aeedccec7 +newDarkWizard 13/97 8d8d68e87900f9df +newDarkWizard 13/98 767d807d241fa79f +newDarkWizard 13/99 e1bbf2b744b22237 +newDarkWizard 14/0 0e75992c5c685491 +newDarkWizard 14/1 1cf3d14cf5fdae99 +newDarkWizard 14/10 e914bb5934358487 +newDarkWizard 14/100 e2938f447feea095 +newDarkWizard 14/101 7e9db85331cc3865 +newDarkWizard 14/102 b2bc5e7d4bf6b56f +newDarkWizard 14/103 0a0faeb76de93bb3 +newDarkWizard 14/104 d6d403900c55b50f +newDarkWizard 14/105 e9abe6867c9564e3 +newDarkWizard 14/106 9ad4df3b27fd870f +newDarkWizard 14/107 9d6f17c568bfbc1b +newDarkWizard 14/108 14f6fac0daa28afb +newDarkWizard 14/109 c0d5b4084f8267cb +newDarkWizard 14/11 526ac98541f0fc99 +newDarkWizard 14/110 0d79a8c89a8f8d2f +newDarkWizard 14/111 6fd718b0b3e9b887 +newDarkWizard 14/112 680ebd8daa70f68f +newDarkWizard 14/113 c3fcf7e9a42f4a57 +newDarkWizard 14/114 5b1e86d36ee977a7 +newDarkWizard 14/115 93bdcd4ff3bbfa9f +newDarkWizard 14/116 c3c23f935631b2ef +newDarkWizard 14/117 757f3c45d7635447 +newDarkWizard 14/118 42a7081e35e242ff +newDarkWizard 14/119 5ca986e84a8a2747 +newDarkWizard 14/12 105995432f607ba3 +newDarkWizard 14/120 9bf1be432721439f +newDarkWizard 14/121 07fd78217089de87 +newDarkWizard 14/122 5cad2c7bdc43bad7 +newDarkWizard 14/123 059a2889b7c83b1f +newDarkWizard 14/124 94495a8a9fb64f2f +newDarkWizard 14/125 79419fb650d8b38f +newDarkWizard 14/126 df16ce76226b63df +newDarkWizard 14/127 05143cdd0f0e61af +newDarkWizard 14/128 b6166b01b0c49797 +newDarkWizard 14/129 b27a33569e28fd7f +newDarkWizard 14/13 9fb07e3fd7608069 +newDarkWizard 14/130 de053e93ebd1294f +newDarkWizard 14/131 47501066ea51dc67 +newDarkWizard 14/132 a5d467c35b64dfcf +newDarkWizard 14/133 f0bfe8d8aab0bbdb +newDarkWizard 14/134 ca1b186f8de66997 +newDarkWizard 14/135 e177ef83bfc77def +newDarkWizard 14/136 19878f834c4b3827 +newDarkWizard 14/137 1a21981517631df7 +newDarkWizard 14/138 5ca0ab39c5575ce7 +newDarkWizard 14/139 359010652d835157 +newDarkWizard 14/14 9f67faa39bbdfd31 +newDarkWizard 14/140 22bc6afb2a5d71bf +newDarkWizard 14/141 955b553b2b5186d9 +newDarkWizard 14/142 4a8e85091a5650b1 +newDarkWizard 14/143 a3a213dfb3dbe8e9 +newDarkWizard 14/144 15faa000cf449cc1 +newDarkWizard 14/145 4facca377b3ec7c7 +newDarkWizard 14/146 fe265c655cb65e47 +newDarkWizard 14/147 c494659308cbfdbf +newDarkWizard 14/148 a840f0078ff4275f +newDarkWizard 14/149 2561a9d80573184f +newDarkWizard 14/15 b4dea4850ee63c57 +newDarkWizard 14/150 23e73e511cf1bb5f +newDarkWizard 14/151 f84f4fc6a90a278f +newDarkWizard 14/152 f43cda3711c89f97 +newDarkWizard 14/153 4a4155a11eef50c5 +newDarkWizard 14/154 2fbf50213eac0f81 +newDarkWizard 14/155 3e334494c05d1f01 +newDarkWizard 14/156 b0386049c7944b21 +newDarkWizard 14/157 2c9588743a7960f7 +newDarkWizard 14/158 a88257b8a97ef6c7 +newDarkWizard 14/159 cc60b9b519d39bd7 +newDarkWizard 14/16 0d057527d0afc2d9 +newDarkWizard 14/160 20aa3199779df619 +newDarkWizard 14/161 4afd4b36491b4789 +newDarkWizard 14/162 d09f2bcc4e7d7067 +newDarkWizard 14/163 5403d0cf33edf147 +newDarkWizard 14/169 6ee71683899da9e7 +newDarkWizard 14/17 09fe57de2ed54971 +newDarkWizard 14/18 20dafaff6694e799 +newDarkWizard 14/19 bf31a92912519589 +newDarkWizard 14/2 053b4f9be2ee31a5 +newDarkWizard 14/20 4cf110106bcb3e67 +newDarkWizard 14/21 1d3d5783a708f2ee +newDarkWizard 14/22 b6dff055d2d99a01 +newDarkWizard 14/23 c1feaa98fd073ced +newDarkWizard 14/24 c27e06fffd01bb27 +newDarkWizard 14/25 4cc7832e82a33c67 +newDarkWizard 14/26 1f73adb562a8c75b +newDarkWizard 14/28 2a06bc1a19ee2dc1 +newDarkWizard 14/29 4cd203b499bb7167 +newDarkWizard 14/3 9ff5db753763245d +newDarkWizard 14/31 55f01f932fd124d9 +newDarkWizard 14/32 21ed13ce2f5b4b73 +newDarkWizard 14/33 fe9ec82c867f6ca7 +newDarkWizard 14/34 379c90ccb5a4d1e1 +newDarkWizard 14/35 19a9b2260193c74d +newDarkWizard 14/36 67007b3fda2ccb29 +newDarkWizard 14/37 8b10d2d2048fee59 +newDarkWizard 14/38 60118f49b16a5329 +newDarkWizard 14/39 44940cebe5d91085 +newDarkWizard 14/4 dbf48c5bc12b79f5 +newDarkWizard 14/40 3cf353dd635aeafd +newDarkWizard 14/41 95ab4597722fadf3 +newDarkWizard 14/42 7bce9edcf753b2f7 +newDarkWizard 14/43 913e9e93ac525caf +newDarkWizard 14/44 be840bbfe3face53 +newDarkWizard 14/45 58d412eff43d2c71 +newDarkWizard 14/46 e0f2cfa532bc93b3 +newDarkWizard 14/47 959c7e423cceea17 +newDarkWizard 14/48 b10662acfc0ebcaf +newDarkWizard 14/49 fbcf332ea88dc52f +newDarkWizard 14/5 6c681e3318754a59 +newDarkWizard 14/50 99b706c7db930e9b +newDarkWizard 14/51 f6f9dbc1d09bce07 +newDarkWizard 14/52 089a880b99d7b79f +newDarkWizard 14/53 35117b4189364e91 +newDarkWizard 14/54 ee33a4163082f177 +newDarkWizard 14/55 509ed431a590c26f +newDarkWizard 14/56 d08bb894440c935f +newDarkWizard 14/57 1875d6215b819797 +newDarkWizard 14/58 b2f8404f65d2f7cf +newDarkWizard 14/59 2ef7930fb66421ef +newDarkWizard 14/6 25113d2718302611 +newDarkWizard 14/60 2fa3874a91416a37 +newDarkWizard 14/61 4eda2f1a067ffff7 +newDarkWizard 14/62 691e55ae485c96df +newDarkWizard 14/63 fdcd22c1fff6bcdf +newDarkWizard 14/64 e5c90893b58ac4bf +newDarkWizard 14/65 8374968951df9089 +newDarkWizard 14/66 565d90b130468ba1 +newDarkWizard 14/67 c58e149598da9241 +newDarkWizard 14/68 89617eaad46fc939 +newDarkWizard 14/7 97fcee4b79b0f553 +newDarkWizard 14/70 f55c9a6ae06df79b +newDarkWizard 14/71 0e0bc45b342ef263 +newDarkWizard 14/72 7819754bb65757f7 +newDarkWizard 14/73 c09fccb4ca29813f +newDarkWizard 14/74 f3f05c7546dee56f +newDarkWizard 14/75 8c507a50656c4867 +newDarkWizard 14/76 6626dcd7f87848cf +newDarkWizard 14/77 a3597a99980ab3c7 +newDarkWizard 14/78 28a56f5a5b6c3e8f +newDarkWizard 14/79 169f7ff7ee533e3b +newDarkWizard 14/8 275a607710508969 +newDarkWizard 14/80 fb1f194d47b451db +newDarkWizard 14/81 e6c99c9e63675157 +newDarkWizard 14/82 eccd04582c540ecb +newDarkWizard 14/83 3461a71e5bd9b51f +newDarkWizard 14/84 78c9eb5ebc303ab7 +newDarkWizard 14/85 ea25565a0d64f6b7 +newDarkWizard 14/86 13c8c34c1ab2319f +newDarkWizard 14/87 fca39fc5d1af9647 +newDarkWizard 14/88 33637ff82acfc0af +newDarkWizard 14/89 39ac9476241d380f +newDarkWizard 14/9 c6729e0719002e0b +newDarkWizard 14/90 eb7cf1b9618a0a2f +newDarkWizard 14/91 5d708d37fed52fff +newDarkWizard 14/92 2db3ac3526365187 +newDarkWizard 14/93 7a934e419597c12f +newDarkWizard 14/94 9b4ab23f0bb858f7 +newDarkWizard 14/95 3b7393b527cbd4ff +newDarkWizard 14/96 3274aa16bd96ae47 +newDarkWizard 14/97 a68e6e83b1e4e67f +newDarkWizard 14/98 c816e2375d98a40f +newDarkWizard 14/99 3fd0fb4430867017 +newDarkWizard 15/0 8b28d28b6acdb577 +newDarkWizard 15/1 4e6e28833cee3627 +newDarkWizard 15/10 1ca66d83872fc2c7 +newDarkWizard 15/11 775732b3ebabc24f +newDarkWizard 15/12 572cc85b61a86ddf +newDarkWizard 15/13 5d91ad98689c3ea7 +newDarkWizard 15/14 5167eff387435b1f +newDarkWizard 15/15 25c4ab8d7e4e32df +newDarkWizard 15/16 b1e0ad11ca47ce07 +newDarkWizard 15/17 826ec6fb49da2297 +newDarkWizard 15/18 70f78f5a507bd36f +newDarkWizard 15/19 ad781b53ffa40d2f +newDarkWizard 15/2 58faede21a4f4cd7 +newDarkWizard 15/20 0d08a0935c1c760f +newDarkWizard 15/21 be3342cd5e702b0f +newDarkWizard 15/22 714c9ce6f8588c05 +newDarkWizard 15/23 b9b3b9d84e0d017f +newDarkWizard 15/24 0160161d47683edf +newDarkWizard 15/26 89c42c9611460bd7 +newDarkWizard 15/27 195e32459ab64a39 +newDarkWizard 15/28 bacfdd07c9d7576f +newDarkWizard 15/29 32714aba42509cd7 +newDarkWizard 15/3 42ee9f933db5d0ff +newDarkWizard 15/30 42cd1ddb3fea8467 +newDarkWizard 15/31 73aa30565c19d4f9 +newDarkWizard 15/32 947d71c0b8848467 +newDarkWizard 15/33 4d8e7ee91a138f25 +newDarkWizard 15/34 ec3bed2752079af9 +newDarkWizard 15/35 1934ccf93c501997 +newDarkWizard 15/36 f51cb074b02964df +newDarkWizard 15/4 f5546692667f14b7 +newDarkWizard 15/5 8f72fed73d2d97af +newDarkWizard 15/6 2912505a9954e72f +newDarkWizard 15/7 120b71b3aa69fbf7 +newDarkWizard 15/8 1d35287561fdd27f +newDarkWizard 15/9 5eb583b50ea94b8f +newDarkWizard 2/0 67e0012ce8f9ffa0 +newDarkWizard 2/1 d7d81057723d77e2 +newDarkWizard 2/10 d7ba05f8d505e6a5 +newDarkWizard 2/11 da2a4e33d891da78 +newDarkWizard 2/12 8a76c9cbe789d594 +newDarkWizard 2/13 be3ebe7a02e453cf +newDarkWizard 2/14 e8c28704d220edc6 +newDarkWizard 2/15 94d52ed261b5528b +newDarkWizard 2/16 a9b76cf6aabc3b8c +newDarkWizard 2/17 865f3a2dd95c6d0a +newDarkWizard 2/18 efe76bbd0aceda3b +newDarkWizard 2/2 d21438a55c83f066 +newDarkWizard 2/3 f25db78343f8efb5 +newDarkWizard 2/4 f665f611a1233e04 +newDarkWizard 2/5 a5d99225d5e47138 +newDarkWizard 2/6 f6eecab2b44eaa99 +newDarkWizard 2/7 a85d0dac437dbf25 +newDarkWizard 2/8 e2fb66916278296e +newDarkWizard 2/9 de13c87fdc8f68e7 +newDarkWizard 3/0 f886805629dc51db +newDarkWizard 3/1 c1b4a10e1a214d2c +newDarkWizard 3/10 f706e00c7653ee1b +newDarkWizard 3/11 22af243edfe0750e +newDarkWizard 3/2 80f7ca6f46d4c992 +newDarkWizard 3/3 558c3e7b3bf5024a +newDarkWizard 3/4 3ceb4cee62aebe61 +newDarkWizard 3/5 d76cfb95fb86aab5 +newDarkWizard 3/6 c7b5549c809be2a6 +newDarkWizard 3/7 f3f8ff1fb78c343d +newDarkWizard 3/8 161c475328aed831 +newDarkWizard 3/9 6b5935cef07ad26e +newDarkWizard 4/0 396d87c031560638 +newDarkWizard 4/1 4889fcd019734b75 +newDarkWizard 4/10 1d4f553277143bc6 +newDarkWizard 4/11 ba5e7c432fc7c1f9 +newDarkWizard 4/12 c097766f2932d88e +newDarkWizard 4/13 adcba8f299304c75 +newDarkWizard 4/14 bebc9bdc4d6f5b38 +newDarkWizard 4/15 3afe4c0bdd96d073 +newDarkWizard 4/16 90b501c714af2f9b +newDarkWizard 4/17 2334c5ca5ac2ecf6 +newDarkWizard 4/18 f7d5e81eb5610ecd +newDarkWizard 4/19 71939e95e9890dd5 +newDarkWizard 4/2 aa259209a29f4ff6 +newDarkWizard 4/20 8fb9cd6825ffa293 +newDarkWizard 4/21 ed97945fcaa2d12a +newDarkWizard 4/22 708beaf09a3e7e2c +newDarkWizard 4/23 d3fa5aa65c58f295 +newDarkWizard 4/24 793af3b355dfcecd +newDarkWizard 4/3 d63ef160b2230e4e +newDarkWizard 4/4 3d086acd52b3c8c5 +newDarkWizard 4/5 10cfc8ed120f36d1 +newDarkWizard 4/6 4d4b6b2d42c045f1 +newDarkWizard 4/7 08034f934cc9fa5d +newDarkWizard 4/8 8d7b26d5ebe51f1d +newDarkWizard 4/9 14b5fc7015126c81 +newDarkWizard 5/0 f787afb911a12f57 +newDarkWizard 5/1 b0b9e9811639500a +newDarkWizard 5/10 e90ec761c5e2bd61 +newDarkWizard 5/11 34f5d92ee7e5bdd1 +newDarkWizard 5/12 f201cba466035c94 +newDarkWizard 5/13 9164dc68508079c0 +newDarkWizard 5/14 1984bdbe7c3384e8 +newDarkWizard 5/15 550313a30a95ae92 +newDarkWizard 5/16 f3afce1b0c4d06aa +newDarkWizard 5/17 dcf9665096bdc668 +newDarkWizard 5/18 d1a9149b028e3d58 +newDarkWizard 5/19 97ac23481539d19a +newDarkWizard 5/2 a9f63c85afbca2e7 +newDarkWizard 5/20 d287bcb71143ce5d +newDarkWizard 5/21 c1443accdab95d5c +newDarkWizard 5/22 e97743b49a925449 +newDarkWizard 5/23 e86286039566cd4e +newDarkWizard 5/3 15ecf3fdae28aa30 +newDarkWizard 5/30 d6ca3687141ac5e0 +newDarkWizard 5/31 81322ec9cb290c8b +newDarkWizard 5/33 13e034faf248c4d6 +newDarkWizard 5/34 39609c9fe1c83302 +newDarkWizard 5/36 b6e4cf67cb9c808e +newDarkWizard 5/4 2e3b7b2b31eed1a8 +newDarkWizard 5/5 74ec08738afbb336 +newDarkWizard 5/6 fa6e8c7c341cf958 +newDarkWizard 5/7 583deed499da35e1 +newDarkWizard 5/8 65825e94cd70ced8 +newDarkWizard 5/9 dfcd28f0785955a1 +newDarkWizard 6/0 68c59e1a9a3e0112 +newDarkWizard 6/1 65f7216e46deeab0 +newDarkWizard 6/10 4c1c7ea9ccf68929 +newDarkWizard 6/11 aec7ae5f754c9b9c +newDarkWizard 6/12 5a4c6124f38d98e2 +newDarkWizard 6/13 c87c3cc5f276b9a4 +newDarkWizard 6/14 7a5fd05c31595b89 +newDarkWizard 6/15 5d3d6e8268def2f2 +newDarkWizard 6/16 8574d2d35b350133 +newDarkWizard 6/17 b3ffbb749def2a6e +newDarkWizard 6/18 1dad3e7e9360f174 +newDarkWizard 6/19 e40633d841e75d14 +newDarkWizard 6/2 f4b7db2d45025015 +newDarkWizard 6/20 a949c726e570bc6b +newDarkWizard 6/21 d799776a0921ef78 +newDarkWizard 6/3 7443df0a1e0e0759 +newDarkWizard 6/4 ee7da1ac0beb7dc2 +newDarkWizard 6/5 11c095ed7d6805cb +newDarkWizard 6/6 9349a45da3018db3 +newDarkWizard 6/7 67860768829553d0 +newDarkWizard 6/8 2710a59a28aaf532 +newDarkWizard 6/9 0141be80a2d0c8d2 +newDarkWizard 7/0 22ca1e5c71f94911 +newDarkWizard 7/1 0c8e60efa7dc5bca +newDarkWizard 7/10 8befbc4a31c15e55 +newDarkWizard 7/11 f537b775f4afae9e +newDarkWizard 7/12 99f5d270347fe8e3 +newDarkWizard 7/13 8b31a01b5b711ae1 +newDarkWizard 7/14 a0671cb61b8af123 +newDarkWizard 7/16 97b9cfaa02326631 +newDarkWizard 7/17 15e6355e080fa2d8 +newDarkWizard 7/18 48305438c1012ad2 +newDarkWizard 7/19 97c3098bf9411d1e +newDarkWizard 7/2 0c7bd16762a63d7c +newDarkWizard 7/21 8b0eed36e8888430 +newDarkWizard 7/22 3d3d29a43e89cd52 +newDarkWizard 7/24 fa74967d7c157b3c +newDarkWizard 7/25 dd386dbf53ef1fd2 +newDarkWizard 7/26 a191ef693c58aecf +newDarkWizard 7/27 73620347bb11d288 +newDarkWizard 7/28 52a5696e0d8a1ea9 +newDarkWizard 7/29 cf4e87425c2df33f +newDarkWizard 7/3 485e38a59c1257b1 +newDarkWizard 7/30 274d25e128d311a0 +newDarkWizard 7/31 d92f4978bb0d2eca +newDarkWizard 7/33 298d6e05800cba71 +newDarkWizard 7/34 ea75f21516261332 +newDarkWizard 7/35 dff5c7b1898cab27 +newDarkWizard 7/36 1bd5d9091c873671 +newDarkWizard 7/38 e7e222c629683cea +newDarkWizard 7/39 db25ed3813eb2ee2 +newDarkWizard 7/4 1114f65fff2f8ae2 +newDarkWizard 7/40 26966f2207cf61bf +newDarkWizard 7/41 b0486266d2d4589a +newDarkWizard 7/42 81ed002b5927a30e +newDarkWizard 7/43 37db8ecf80048d03 +newDarkWizard 7/44 2e31e2d6b307c50e +newDarkWizard 7/45 c2f1d281021d4569 +newDarkWizard 7/46 fa86593600d64dc1 +newDarkWizard 7/49 d8665a84e825aa27 +newDarkWizard 7/5 2d3d53264ca0ec4e +newDarkWizard 7/50 d54ded5a586c3d1a +newDarkWizard 7/51 ac4a560d4b26da00 +newDarkWizard 7/52 3def649034cbb1be +newDarkWizard 7/59 2c823da755efba95 +newDarkWizard 7/6 bede65933466c623 +newDarkWizard 7/60 641a4029b6ce2dcc +newDarkWizard 7/61 f9dfc5655778f0f4 +newDarkWizard 7/62 8a94d65e2b9d98cf +newDarkWizard 7/63 2735a334a2660c33 +newDarkWizard 7/64 195df277a922a6b6 +newDarkWizard 7/65 e3389abf5e0e7e48 +newDarkWizard 7/66 b67409a53ccee2a6 +newDarkWizard 7/67 ad3d28b9760c264f +newDarkWizard 7/68 3fb342c25cc5e057 +newDarkWizard 7/69 e7bf5c4fff9660aa +newDarkWizard 7/7 a3310d97b071251e +newDarkWizard 7/70 669b388ab3f204d7 +newDarkWizard 7/72 71eb24d4d51fc3cc +newDarkWizard 7/73 581db1ab500e886c +newDarkWizard 7/8 8e853fa4791665c2 +newDarkWizard 7/9 b13aa7f794c4a120 +newDarkWizard 8/0 96d6c1be63ba44a3 +newDarkWizard 8/1 0b9b164d7e9d260f +newDarkWizard 8/10 c7674002a7b058db +newDarkWizard 8/11 04e9d9af4f388728 +newDarkWizard 8/12 bad0e1ad0f4852ef +newDarkWizard 8/13 46c2a8fc149b1b39 +newDarkWizard 8/14 b5abee5bb8a0579c +newDarkWizard 8/15 5976acfed6f63627 +newDarkWizard 8/16 be61aa22689c68a7 +newDarkWizard 8/17 ae99696539eca153 +newDarkWizard 8/18 aa8c5db6f73a9500 +newDarkWizard 8/19 ed35f50514e2c02d +newDarkWizard 8/2 2cc7debeda05333a +newDarkWizard 8/20 f2a726e5f345b28a +newDarkWizard 8/21 03c0dc8938fc136e +newDarkWizard 8/22 124b1c604fd170fa +newDarkWizard 8/23 c8b1649a027aa03c +newDarkWizard 8/24 31449ac6ef351bcc +newDarkWizard 8/25 6dbbb6c6a05c0ad7 +newDarkWizard 8/26 13fb88158886117c +newDarkWizard 8/27 ccd0ba1ecfe76e3e +newDarkWizard 8/28 159b11d728f51c10 +newDarkWizard 8/29 74264655c1072037 +newDarkWizard 8/3 4bd6106f89e31a0b +newDarkWizard 8/30 3682249b20d2a572 +newDarkWizard 8/31 19ec050029e2424b +newDarkWizard 8/32 41dfd76f6454dec4 +newDarkWizard 8/33 326b7a8ef9c01e3d +newDarkWizard 8/34 bcb86fb07430ca8b +newDarkWizard 8/35 cacc942650286a28 +newDarkWizard 8/36 b727c697f4970f23 +newDarkWizard 8/37 8fa96b056018edaa +newDarkWizard 8/38 c074401e609f31fa +newDarkWizard 8/39 a381cc790228ea56 +newDarkWizard 8/4 7f09ed44b2d27a5f +newDarkWizard 8/40 f72ec80ea2ea9ff9 +newDarkWizard 8/41 bdba5afd0d89eb4b +newDarkWizard 8/42 3ee1f63c952e7cf8 +newDarkWizard 8/43 c7b743f2c4d02c2c +newDarkWizard 8/44 346de7fa1524b3ef +newDarkWizard 8/45 4a14a300b1bde00a +newDarkWizard 8/46 79f472a49483bd60 +newDarkWizard 8/47 ea97dac979cb4079 +newDarkWizard 8/48 ca897bf0af4d3ff5 +newDarkWizard 8/49 8139ca9582457495 +newDarkWizard 8/5 0093c674585e8815 +newDarkWizard 8/50 2ce4f346fe5cf1ed +newDarkWizard 8/51 f2b376a9b28bde88 +newDarkWizard 8/52 8be567f6fe5e9cae +newDarkWizard 8/59 a951f3866031fa43 +newDarkWizard 8/6 3507b69131b81d35 +newDarkWizard 8/60 014f6ce48b449a1c +newDarkWizard 8/61 d12c91820ca52b87 +newDarkWizard 8/62 cf84eded934e64b8 +newDarkWizard 8/63 871bdee997bde8f1 +newDarkWizard 8/64 72eb87e44a71f577 +newDarkWizard 8/65 7c504189139a0b61 +newDarkWizard 8/66 42cb650b234a92f2 +newDarkWizard 8/67 aa21c83c6cb9d63c +newDarkWizard 8/68 649cbd5baa8654bf +newDarkWizard 8/69 f5cf2c9b46667aa4 +newDarkWizard 8/7 f4133858c4959e8f +newDarkWizard 8/70 d61a02a85d024623 +newDarkWizard 8/71 6882af1fe15d33ec +newDarkWizard 8/72 fca4d40b0c6f2a04 +newDarkWizard 8/73 27b82d0a299bf2ea +newDarkWizard 8/8 35d66ed90c9b8062 +newDarkWizard 8/9 b327ef2f4e2a3638 +newDarkWizard 9/0 86a60bef3926df12 +newDarkWizard 9/1 86316444f09d7311 +newDarkWizard 9/10 72203be5f7d0ed99 +newDarkWizard 9/11 021fa8a6b728e897 +newDarkWizard 9/12 f3a7b61629e838f3 +newDarkWizard 9/13 9cd9f835629f447d +newDarkWizard 9/14 2e09b772de19054b +newDarkWizard 9/15 432ef607bbe3ffd2 +newDarkWizard 9/16 57c40abfac86a0d9 +newDarkWizard 9/17 9e5b099d11b0f9e3 +newDarkWizard 9/18 859b2e202a5cf2a6 +newDarkWizard 9/19 b659175554490739 +newDarkWizard 9/2 e3a19a1cfbf345c7 +newDarkWizard 9/20 9bd509868e4dc7ca +newDarkWizard 9/21 ae922c7296dcfab4 +newDarkWizard 9/22 1fd997cc7b2e0fab +newDarkWizard 9/23 3ad0095d3bbae1f3 +newDarkWizard 9/24 2f4d27f895a25343 +newDarkWizard 9/25 c443fd83d12f1a53 +newDarkWizard 9/26 c9047ce32d16440b +newDarkWizard 9/27 eb93dfcb618028d5 +newDarkWizard 9/28 3dc685c0a6d36fc4 +newDarkWizard 9/29 6c1a1f418620e122 +newDarkWizard 9/3 ca01b7b237f61204 +newDarkWizard 9/30 d96827c29030a21d +newDarkWizard 9/31 6a79d10cce66ff42 +newDarkWizard 9/32 54beead2ae8d9dbb +newDarkWizard 9/33 b61307da05de4eaf +newDarkWizard 9/34 56e5393d44f8fd1a +newDarkWizard 9/35 e83de520a5537c25 +newDarkWizard 9/36 2a68714b7472dee1 +newDarkWizard 9/37 a03f02a60d39b5dc +newDarkWizard 9/38 629318b53c2f6c72 +newDarkWizard 9/39 b0104e504c726fb0 +newDarkWizard 9/4 9aa566d0c5f56b1d +newDarkWizard 9/40 4aaaed8fa7871156 +newDarkWizard 9/41 a314486432e65926 +newDarkWizard 9/42 e8c9e9988a1fa238 +newDarkWizard 9/43 24de9eae44e3e7a7 +newDarkWizard 9/44 374d12ba5f804591 +newDarkWizard 9/45 8862f4302a37cd4b +newDarkWizard 9/46 cd0e3db370f1194e +newDarkWizard 9/47 0edb9fe59d725936 +newDarkWizard 9/48 0e7f7c0c96323ed7 +newDarkWizard 9/49 da60d51959bb9a25 +newDarkWizard 9/5 93910bcb04435190 +newDarkWizard 9/50 a9161171d931f6f7 +newDarkWizard 9/51 c6c6c7c37e7e2bdd +newDarkWizard 9/52 70896ec29e033c00 +newDarkWizard 9/59 eb5d902ea495bb99 +newDarkWizard 9/6 03ed69c2c98d7eff +newDarkWizard 9/60 fafb26d9e213d13e +newDarkWizard 9/61 be82f20f4e1a2e2c +newDarkWizard 9/62 cea57b86bf93603b +newDarkWizard 9/63 5b32392dd9669c4e +newDarkWizard 9/64 a58c36a2e4fccb1e +newDarkWizard 9/65 f9b3462b4bd8020b +newDarkWizard 9/66 60c02ae8dd5e0e90 +newDarkWizard 9/67 d2494034752d3e5b +newDarkWizard 9/68 486292bc78b9727a +newDarkWizard 9/69 8fa6bd278e1c870b +newDarkWizard 9/7 2cb745d264c4eb1c +newDarkWizard 9/70 4aa1dbea08f86ebb +newDarkWizard 9/71 c20ef2162bf78fc8 +newDarkWizard 9/72 36b7046a642e7967 +newDarkWizard 9/73 4749bcbd09155197 +newDarkWizard 9/8 e4e253d74adf3b40 +newDarkWizard 9/9 a3b8c2aca46c1cdd diff --git a/tests/data/test_item_database_files.cpp b/tests/data/test_item_database_files.cpp index 516001298a..850167a81c 100644 --- a/tests/data/test_item_database_files.cpp +++ b/tests/data/test_item_database_files.cpp @@ -2,6 +2,7 @@ #include "doctest.h" +#include "CharacterMachineScope.h" #include "ClientDataScope.h" #include "ItemModelDatabaseScope.h" #include "ItemOptionsScope.h" @@ -1599,33 +1600,18 @@ template void EditItem(int itemType, TChange&& change) class WornItemsScope { public: + // Every other place holds nothing (type -1; type 0 is the Kris). explicit WornItemsScope(std::initializer_list itemTypes) - : m_previous(CharacterMachine), m_machine(std::make_unique()) { - // Type 0 is the Kris: every other place holds nothing. - for (ITEM& equipped : m_machine->Equipment) - { - equipped.Type = -1; - } size_t index = 0; for (const int itemType : itemTypes) { - m_machine->Equipment[index++].Type = static_cast(itemType); + m_machine.Machine().Equipment[index++].Type = static_cast(itemType); } - CharacterMachine = m_machine.get(); - } - - ~WornItemsScope() - { - CharacterMachine = m_previous; } - WornItemsScope(const WornItemsScope&) = delete; - WornItemsScope& operator=(const WornItemsScope&) = delete; - private: - CHARACTER_MACHINE* m_previous; - std::unique_ptr m_machine; + CharacterMachineScope m_machine; }; // The game's characters for the scope, with the editor's hook that drops what diff --git a/tests/data/test_item_json.cpp b/tests/data/test_item_json.cpp index 989e3613a8..9747588e8f 100644 --- a/tests/data/test_item_json.cpp +++ b/tests/data/test_item_json.cpp @@ -819,6 +819,21 @@ TEST_CASE("Item validation checks the stat profiles against the stat file [data] CHECK(issues.size() == 2); } +// attackType picks the ancient bonus (1 to 4) until the item sets link one: a value above 4 picks none. +TEST_CASE("Item validation warns about an attackType that picks no ancient bonus [data][items]") +{ + ItemDefinition vitality = MakeKris(); + vitality.attackType = 4; + ItemDefinition unknown = MakeKris(); + unknown.attackType = 5; + std::vector issues; + ValidateItems(std::vector{vitality}, issues); + CHECK_FALSE(HasIssue(issues, ItemDataIssueSeverity::Warning, "attackType")); + ValidateItems(std::vector{unknown}, issues); + CHECK(HasIssue(issues, ItemDataIssueSeverity::Warning, "attackType")); + CHECK_FALSE(HasFatal(issues)); +} + TEST_CASE("Item validation warns about an excellent bonus the stat profile has no term for [data][items]") { // Without an excellent damage term the Chaos Dragon Axe's fixed bonus would not count. diff --git a/tests/data/test_item_option_links.cpp b/tests/data/test_item_option_links.cpp index 18c608374b..e28d8c16bc 100644 --- a/tests/data/test_item_option_links.cpp +++ b/tests/data/test_item_option_links.cpp @@ -315,3 +315,125 @@ TEST_CASE("A {divisor} text on an option without one divisor term loads with a w ValidateItemOptions(std::vector{luck}, texts, "OptionTexts.json", issues); CHECK(HasIssue(issues, ItemDataIssueSeverity::Warning, "definitions[0].options[0].text")); } + +namespace +{ +ItemOptionDefinition MakeAncientBonus(const std::string& name, const std::string& attribute) +{ + ItemOptionDefinition bonus; + bonus.name = name; + bonus.type = ItemOptionType::AncientBonus; + bonus.file = "Ancient.json"; + ItemOption option; + option.attribute = attribute; + option.value = {{5, 10}, true}; + option.texts = {"luckCriticalDamage"}; + bonus.options.push_back(option); + return bonus; +} +} // namespace + +// No item links the ancient bonus: until the item sets link one to each item of a set, the item's attackType picks it +// by its name. A link does nothing and warns; a missing name warns that the items of that attackType have no bonus. +TEST_CASE("The ancient bonus definitions are picked by attackType, not linked [data][items]") +{ + const ItemOptionDatabase all({MakeLuck("luck"), MakeAncientBonus("ancientBonusStrength", "totalStrength"), + MakeAncientBonus("ancientBonusAgility", "totalAgility"), + MakeAncientBonus("ancientBonusEnergy", "totalEnergy"), + MakeAncientBonus("ancientBonusVitality", "totalVitality")}, + MakeTexts()); + CHECK(all.FindAncientBonus(1) == 1); + CHECK(all.FindAncientBonus(4) == 4); + CHECK(all.FindAncientBonus(0) == ItemOptionDatabase::NoDefinition); + CHECK(all.FindAncientBonus(5) == ItemOptionDatabase::NoDefinition); + CHECK(all.GetEffect(1, 0).effect == AT_SET_OPTION_IMPROVE_STRENGTH); + CHECK(all.GetEffect(4, 0).effect == AT_SET_OPTION_IMPROVE_VITALITY); + + std::vector issues; + const std::vector items{MakeItem(0, 0, {"luck"}), MakeItem(0, 1, {"ancientBonusStrength"})}; + ValidateItemOptionLinks(items, all, issues); + ValidateOptionDefinitionUse(items, all, issues); + // Only the link warns: no "no item links" for the unlinked bonuses, no missing name. + REQUIRE(issues.size() == 1); + CHECK(issues[0].severity == ItemDataIssueSeverity::Warning); + CHECK(issues[0].number == 1); + CHECK(issues[0].field == "options"); + + // Another ancient bonus or an ancient set's options, which nothing picks yet, are unlinked definitions. + ItemOptionDefinition setOptions = MakeAncientBonus("warriorSet", "totalStrength"); + setOptions.type = ItemOptionType::AncientOption; + const ItemOptionDatabase extra({MakeLuck("luck"), MakeAncientBonus("ancientBonusStrength", "totalStrength"), + MakeAncientBonus("ancientBonusAgility", "totalAgility"), + MakeAncientBonus("ancientBonusEnergy", "totalEnergy"), + MakeAncientBonus("ancientBonusVitality", "totalVitality"), + MakeAncientBonus("ancientBonusCharisma", "totalLeadership"), setOptions}, + MakeTexts()); + issues.clear(); + ValidateOptionDefinitionUse(std::vector{MakeItem(0, 0, {"luck"})}, extra, issues); + REQUIRE(issues.size() == 2); + CHECK(HasIssue(issues, ItemDataIssueSeverity::Warning, "definitions[4].name")); + CHECK(HasIssue(issues, ItemDataIssueSeverity::Warning, "definitions[5].name")); + + // A name of another type, or none, leaves its attackType without a bonus. + ItemOptionDefinition notBonus = MakeLuck("ancientBonusEnergy"); + const ItemOptionDatabase missing({MakeLuck("luck"), MakeAncientBonus("ancientBonusStrength", "totalStrength"), + notBonus}, + MakeTexts()); + CHECK(missing.FindAncientBonus(3) == ItemOptionDatabase::NoDefinition); + issues.clear(); + ValidateAncientBonusNames(missing, issues); + const auto missingName = [&](const std::string& name) + { + return std::any_of(issues.begin(), issues.end(), + [&](const ItemDataIssue& issue) + { + return issue.severity == ItemDataIssueSeverity::Warning && + issue.field == "definitions" && + issue.message.find("\"" + name + "\"") != std::string::npos; + }); + }; + CHECK_FALSE(missingName("ancientBonusStrength")); + // The issue names the file of the definition of that name, else the file the four belong in. + const auto sourceOf = [&](const std::string& name) + { + const auto found = std::find_if(issues.begin(), issues.end(), [&](const ItemDataIssue& issue) + { return issue.message.find("\"" + name + "\"") != std::string::npos; }); + return found != issues.end() ? found->source : std::string(); + }; + CHECK(sourceOf("ancientBonusEnergy") == "Options/Luck.json"); + CHECK(sourceOf("ancientBonusAgility") == "Options/Ancient.json"); + CHECK(missingName("ancientBonusAgility")); + CHECK(missingName("ancientBonusEnergy")); + CHECK(missingName("ancientBonusVitality")); +} + +// The ancient bonus raises the four stats; another attribute has no effect, so the Data Check warns about it. +TEST_CASE("The ancient bonus's effects are the four stats [data][items]") +{ + CHECK(FindItemOptionEffect(ItemOptionType::AncientBonus, "totalAgility", ItemOptionAdd::Add)->effect == + AT_SET_OPTION_IMPROVE_DEXTERITY); + CHECK(FindItemOptionEffect(ItemOptionType::AncientBonus, "totalEnergy", ItemOptionAdd::Add)->effect == + AT_SET_OPTION_IMPROVE_ENERGY); + CHECK_FALSE(FindItemOptionEffect(ItemOptionType::AncientBonus, "totalStrength", ItemOptionAdd::Percent)); + CHECK_FALSE(FindItemOptionEffect(ItemOptionType::AncientBonus, "maximumHealth", ItemOptionAdd::Add)); +} + +// A saved option list keeps the names of no definition last, after the ancient types too. +TEST_CASE("Option links order the ancient types before names of no definition [data][items]") +{ + const ItemOptionDatabase options({MakeLuck("luck"), MakeAncientBonus("ancientBonusStrength", "totalStrength")}, + MakeTexts()); + std::vector names{"nothing", "ancientBonusStrength", "luck"}; + options.OrderLinks(names); + CHECK(names == std::vector{"luck", "ancientBonusStrength", "nothing"}); +} + +// An empty option database has no ancient bonus for any attackType. +TEST_CASE("An empty option database picks no ancient bonus [data][items]") +{ + const ItemOptionDatabase empty; + for (int attackType = 0; attackType <= 5; ++attackType) + { + CHECK(empty.FindAncientBonus(attackType) == ItemOptionDatabase::NoDefinition); + } +} diff --git a/tests/data/test_item_option_slots.cpp b/tests/data/test_item_option_slots.cpp index f0b2d61030..5b382fb711 100644 --- a/tests/data/test_item_option_slots.cpp +++ b/tests/data/test_item_option_slots.cpp @@ -2,6 +2,7 @@ #include "doctest.h" +#include "CharacterMachineScope.h" #include "ClientDataScope.h" #include "HeroScope.h" #include "ItemOptionsScope.h" @@ -12,6 +13,7 @@ #include "Data/GameData/ItemData/ItemDatabase.h" #include "Engine/Object/ZzzInfomation.h" #include "Engine/Object/ZzzInventory.h" +#include "GameLogic/Items/CSItemOption.h" #include "GameLogic/Items/ItemOptionSlots.h" #include "GameLogic/Items/ItemOptions.h" #include "GameLogic/Pets/GIPetManager.h" @@ -934,7 +936,8 @@ TEST_CASE("The excellent options' tooltip lines come from their texts [data][ite } // The stat code adds an option with terms on the hero's attributes as the hero is now, not as the hero was when the -// item was made: level / 20 grows with the hero. The other options add what the item was made with. +// item was made: level / 20 grows with the hero and counts the master level. The other options add what the item was +// made with. TEST_CASE("The stat code adds the excellent level / 20 as the hero is now [data][items]") { ClientDataScope client(ClientDirectory); @@ -952,6 +955,12 @@ TEST_CASE("The stat code adds the excellent level / 20 as the hero is now [data] hero.Hero().Level = 85; CHECK(GameLogic::Items::GetCurrentSlotValue(kris, 0) == 4); CHECK(kris.SpecialValue[0] == 0); + // Level plus master level, rounded down: (85 + 30) / 20 for a master hero. + hero.Hero().Class = CLASS_GRANDMASTER; + const MASTER_LEVEL_VALUE savedMasterLevel = Master_Level_Data; + Master_Level_Data.nMLevel = 30; + CHECK(GameLogic::Items::GetCurrentSlotValue(kris, 0) == 5); + Master_Level_Data = savedMasterLevel; // The others: what the item was made with (2 % and attack speed 7). CHECK(GameLogic::Items::GetCurrentSlotValue(kris, 1) == 2); CHECK(GameLogic::Items::GetCurrentSlotValue(kris, 2) == 7); @@ -1100,3 +1109,205 @@ TEST_CASE("An item is excellent when its excellent byte turns on an option it li CHECK(durability(ITEM_WINGS_OF_SPIRITS, 0x01) == durability(ITEM_WINGS_OF_SPIRITS, 0)); } +namespace +{ +// An item of an ancient set with its bonus at `bonusLevel`, as the server sends it (set 1). +ITEM MakeAncientItem(int type, BYTE bonusLevel) +{ + ItemCreationParams params{}; + params.Group = type / MAX_ITEM_INDEX; + params.Number = type % MAX_ITEM_INDEX; + params.IsAncient = true; + params.AncientDiscriminator = 1; + params.AncientBonusOption = bonusLevel; + params.Durability = 20; + ITEM item; + FillItemFromParameters(item, params); + return item; +} + +// The stats the stat code adds up (strength, agility, energy, vitality). +std::array AddedUpStats() +{ + std::array stats{}; + g_csItemOption.getAllAddStateOnlyAddValue(&stats[0], &stats[1], &stats[2], &stats[3], &stats[4]); + return {stats[0], stats[1], stats[2], stats[3]}; +} + +// What wearing `worn` adds to the stats the stat code adds up, as the difference to wearing nothing, so the set options +// a test before left in g_csItemOption don't count. +std::array AddedStats(const ITEM& worn) +{ + CharacterMachineScope scope; + const std::array without = AddedUpStats(); + scope.Machine().Equipment[EQUIPMENT_RING_RIGHT] = worn; + const std::array with = AddedUpStats(); + return {with[0] - without[0], with[1] - without[1], with[2] - without[2], with[3] - without[3]}; +} +} // namespace + +// The ancient bonus of an item of a set raises the stat of its attackType (1 strength, 2 agility, 3 energy, 4 +// vitality) by 5 at bonus level 1 and 10 at level 2 and above, for every item that has one; a broken item adds +// nothing. +TEST_CASE("Every ancient item's bonus raises the stat of its attackType [data][items]") +{ + ClientDataScope client(ClientDirectory); + I18N::SetLocale("en"); + std::string errorMessage; + REQUIRE(g_ItemDataHandler.Load(errorMessage)); + HeroScope hero; + + std::array itemsPerStat{}; + int someAncientItem = -1; + for (const Data::Items::ItemDefinition& definition : g_ItemDatabase.GetAllSlots()) + { + if (!definition.Exists()) + { + continue; + } + const int type = definition.group * MAX_ITEM_INDEX + definition.number; + const int attackType = ItemAttribute[type].AttType; + if (attackType < 1 || attackType > 4) + { + continue; + } + ++itemsPerStat[static_cast(attackType - 1)]; + someAncientItem = type; + for (int level = 1; level <= 3; ++level) + { + std::array expected{}; + expected[static_cast(attackType - 1)] = 5 * std::min(level, 2); + CAPTURE(type); + CAPTURE(level); + CHECK(AddedStats(MakeAncientItem(type, static_cast(level))) == expected); + } + } + // Each stat has items, so each case of the stat code ran. + CHECK(std::all_of(itemsPerStat.begin(), itemsPerStat.end(), [](int items) { return items >= 1; })); + + REQUIRE(someAncientItem >= 0); + ITEM broken = MakeAncientItem(someAncientItem, 2); + broken.Durability = 0; + CHECK(AddedStats(broken) == std::array{}); +} + +namespace +{ +// The first item whose attackType is `attackType`. +int FindItemOfAttackType(int attackType) +{ + for (int type = 0; type < MAX_ITEM; ++type) + { + if (ItemAttribute[type].AttType == attackType && g_ItemDatabase.Find(type) != nullptr) + { + return type; + } + } + return -1; +} +} // namespace + +// The ancient bonus comes from the definition of Options/Ancient.json the item's attackType picks: +5 at bonus level 1, +// +10 at level 2, the last entry above the list, nothing at level 0. Its line is the definition's text. +TEST_CASE("The ancient bonus comes from the definition the item's attackType picks [data][items]") +{ + ClientDataScope client(ClientDirectory); + I18N::SetLocale("en"); + std::string errorMessage; + REQUIRE(g_ItemDataHandler.Load(errorMessage)); + HeroScope hero; + + const int strengthItem = FindItemOfAttackType(1); + const int vitalityItem = FindItemOfAttackType(4); + REQUIRE(strengthItem >= 0); + REQUIRE(vitalityItem >= 0); + + CHECK_FALSE(GameLogic::Items::FindAncientBonus(MakeAncientItem(strengthItem, 0))); + const std::optional level1 = + GameLogic::Items::FindAncientBonus(MakeAncientItem(strengthItem, 1)); + REQUIRE(level1); + CHECK(level1->definition->name == "ancientBonusStrength"); + CHECK(level1->effect == AT_SET_OPTION_IMPROVE_STRENGTH); + CHECK(level1->value == 5); + CHECK(GameLogic::Items::FindAncientBonus(MakeAncientItem(strengthItem, 2))->value == 10); + CHECK(GameLogic::Items::FindAncientBonus(MakeAncientItem(strengthItem, 3))->value == 10); + const std::optional vitality = + GameLogic::Items::FindAncientBonus(MakeAncientItem(vitalityItem, 2)); + REQUIRE(vitality); + CHECK(vitality->definition->name == "ancientBonusVitality"); + CHECK(vitality->effect == AT_SET_OPTION_IMPROVE_VITALITY); + + ClearTooltipRows(); + const ITEM strength = MakeAncientItem(strengthItem, 2); + CHECK(g_csItemOption.RenderDefaultOptionText(&strength, 0) >= 1); + CHECK(std::wstring(TextList[0]) == L"Increase strength +10"); + CHECK(TextListColor[0] == TEXT_COLOR_BLUE); + const ITEM stamina = MakeAncientItem(vitalityItem, 1); + CHECK(g_csItemOption.RenderDefaultOptionText(&stamina, 0) >= 1); + CHECK(std::wstring(TextList[0]) == L"Increase stamina +5"); + ClearTooltipRows(); + const ITEM withoutBonus = MakeAncientItem(strengthItem, 0); + CHECK(g_csItemOption.RenderDefaultOptionText(&withoutBonus, 0) == 0); +} + +// The stat code adds the ancient bonus of the worn items with the definitions' values, to the stat the definition's +// attribute names: an edited value list is added as written, another attribute changes the stat, and one the client +// doesn't add adds nothing. +TEST_CASE("The stats add the ancient bonus with its definition's value and attribute [data][items]") +{ + ClientDataScope client(ClientDirectory); + I18N::SetLocale("en"); + std::string errorMessage; + REQUIRE(g_ItemDataHandler.Load(errorMessage)); + HeroScope hero; + const int strengthItem = FindItemOfAttackType(1); + REQUIRE(strengthItem >= 0); + + ItemOptionsScope restoreOptions; + const Data::Items::ItemOptionDatabase& shipped = restoreOptions.Saved(); + const int found = shipped.Find("ancientBonusStrength"); + REQUIRE(found != Data::Items::ItemOptionDatabase::NoDefinition); + const auto edit = [&](const char* attribute, std::vector values) + { + std::vector definitions(shipped.GetDefinitions().begin(), + shipped.GetDefinitions().end()); + Data::Items::ItemOption& option = definitions[static_cast(found)].options.front(); + option.attribute = attribute; + option.value = {std::move(values), true}; + g_ItemDatabase.SetOptions(Data::Items::ItemOptionDatabase(std::move(definitions), shipped.GetTexts())); + }; + edit("totalStrength", {7, 9}); + CHECK(AddedStats(MakeAncientItem(strengthItem, 2)) == std::array{9, 0, 0, 0}); + edit("totalEnergy", {7, 9}); + CHECK(AddedStats(MakeAncientItem(strengthItem, 1)) == std::array{0, 0, 7, 0}); + edit("maximumHealth", {7, 9}); + CHECK(AddedStats(MakeAncientItem(strengthItem, 1)) == std::array{0, 0, 0, 0}); +} + +// An elemental ring's or pendant's "Increase Attribute Damage" follows its bonus line: without the line (a text the +// option texts lack) it shows neither. +TEST_CASE("The elemental rings' second ancient bonus line follows the bonus line [data][items]") +{ + ClientDataScope client(ClientDirectory); + I18N::SetLocale("en"); + std::string errorMessage; + REQUIRE(g_ItemDataHandler.Load(errorMessage)); + HeroScope hero; + + ClearTooltipRows(); + const ITEM ring = MakeAncientItem(ITEM_RING_OF_ICE, 1); + CHECK(g_csItemOption.RenderDefaultOptionText(&ring, 0) == 2); + CHECK(std::wstring(TextList[0]) == L"Increase agility +5"); + CHECK(std::wstring(TextList[1]) == L"Increase attribute damage"); + + ItemOptionsScope restoreOptions; + const Data::Items::ItemOptionDatabase& shipped = restoreOptions.Saved(); + std::vector definitions(shipped.GetDefinitions().begin(), + shipped.GetDefinitions().end()); + const int found = shipped.Find("ancientBonusAgility"); + REQUIRE(found != Data::Items::ItemOptionDatabase::NoDefinition); + definitions[static_cast(found)].options.front().texts = {"noSuchText"}; + g_ItemDatabase.SetOptions(Data::Items::ItemOptionDatabase(std::move(definitions), shipped.GetTexts())); + ClearTooltipRows(); + CHECK(g_csItemOption.RenderDefaultOptionText(&ring, 0) == 0); +} diff --git a/tests/data/test_item_options_json.cpp b/tests/data/test_item_options_json.cpp index a254002371..066e36801e 100644 --- a/tests/data/test_item_options_json.cpp +++ b/tests/data/test_item_options_json.cpp @@ -438,3 +438,70 @@ TEST_CASE("Option definitions of type excellent read their numbered options and CHECK(HasIssue(term(R"([{"attribute": "level", "divisor": 20, "round": "up"}])"), ItemDataIssueSeverity::Warning, "definitions[0].options[0].add.per[0].round")); } + +TEST_CASE("Option definitions of type ancientBonus and ancientOption read and write back [data][items]") +{ + constexpr const char* AncientFile = R"({ + "formatVersion": 1, + "definitions": [ + { + "name": "ancientBonusStrength", + "type": "ancientBonus", + "displayName": { + "en": "Ancient bonus: strength" + }, + "openMu": {"id": "00000083-0030-09a3-0000-000000000000", "name": "Ancient Bonus of Total Strength"}, + "options": [ + {"attribute": "totalStrength", "add": {"values": [5, 10]}, "text": "increaseStrength"} + ] + }, + { + "name": "warriorSet", + "type": "ancientOption", + "displayName": { + "en": "Warrior set" + }, + "options": [ + {"number": 1, "attribute": "totalStrength", "add": {"values": 10}, "text": "increaseStrength"} + ] + } + ] +} +)"; + std::vector definitions; + std::vector issues; + ReadItemOptionsJson(AncientFile, "Options/Ancient.json", "Ancient.json", definitions, issues); + CHECK(issues.empty()); + REQUIRE(definitions.size() == 2); + CHECK(definitions[0].type == ItemOptionType::AncientBonus); + REQUIRE(definitions[0].options.size() == 1); + CHECK(definitions[0].options[0].number == 0); + CHECK(definitions[0].options[0].value.At(1) == 5); + CHECK(definitions[0].options[0].value.At(2) == 10); + CHECK(definitions[0].options[0].value.At(3) == 10); + CHECK(definitions[1].type == ItemOptionType::AncientOption); + CHECK(WriteItemOptionsJson(definitions) == AncientFile); + + const auto bonus = [](const std::string& options) + { + return R"({"name": "b", "type": "ancientBonus", "displayName": {"en": "B"}, "options": [)" + options + "]}"; + }; + // The ancient bonus has one option without a number. + const std::vector numbered = + ReadDefinition(bonus(R"({"number": 1, "attribute": "a", "add": {"values": [5]}, "text": "t"})")); + CHECK(HasIssue(numbered, ItemDataIssueSeverity::Fatal, "definitions[0].options[0].number")); + CHECK(std::any_of(numbered.begin(), numbered.end(), [](const ItemDataIssue& issue) + { return issue.message == "an ancientBonus option has no number; leave it out"; })); + CHECK(HasIssue(ReadDefinition(bonus(R"({"attribute": "a", "add": {"values": [5]}, "text": "t"}, + {"attribute": "b", "add": {"values": [5]}, "text": "t"})")), + ItemDataIssueSeverity::Fatal, "definitions[0].options")); + // An ancient set's options count from 1. + const auto setOption = [](const std::string& options) + { + return R"({"name": "s", "type": "ancientOption", "displayName": {"en": "S"}, "options": [)" + options + "]}"; + }; + CHECK(HasIssue(ReadDefinition(setOption(R"({"number": 0, "attribute": "a", "add": {"values": 1}, "text": "t"})")), + ItemDataIssueSeverity::Fatal, "definitions[0].options[0].number")); + CHECK_FALSE(HasFatal( + ReadDefinition(setOption(R"({"number": 12, "attribute": "a", "add": {"values": 1}, "text": "t"})")))); +} diff --git a/tests/data/test_item_tooltips.cpp b/tests/data/test_item_tooltips.cpp index 3655ceb69f..dfae9d6c6a 100644 --- a/tests/data/test_item_tooltips.cpp +++ b/tests/data/test_item_tooltips.cpp @@ -169,9 +169,9 @@ class TextMeasureScope }; } // namespace -// Every item's tooltip at every level 0 to 15, in the 25 variants of WriteItemTooltipSnapshot (plain, full, ancient, -// harmony, each option alone, the additional option at levels 2 to 7 and option types 1 to 3, each excellent option -// alone, worn, broken and expired), +// Every item's tooltip at every level 0 to 15, in the 28 variants of WriteItemTooltipSnapshot (plain, full, ancient, +// the ancient bonus at levels 1 to 3, harmony, each option alone, the additional option at levels 2 to 7 and option +// types 1 to 3, each excellent option alone, worn, broken and expired), // for the two heroes, against the hashes recorded in item_tooltip_snapshot.txt: a tooltip that changes shows here. // After a change that is meant, run the test with MU_TOOLTIP_SNAPSHOT_UPDATE=1 to record the new hashes; the control // socket's `tooltip-snapshot` writes the full lines in the game to compare with. @@ -225,7 +225,7 @@ TEST_CASE("Every item's tooltip is as recorded [data][items][tooltip]") changedTooltips.emplace_back(key, text); } }); - CHECK(tooltips == 911 * 25 * 16); + CHECK(tooltips == 911 * 28 * 16); } SetItemTooltipTextMeasure(nullptr);