From 07419d86853f443372f79dce7e74f2e8353d31e8 Mon Sep 17 00:00:00 2001 From: LeRatierBretonnien Date: Fri, 1 Sep 2023 13:30:43 +0200 Subject: [PATCH] New fixes for v7.0.0 --- addon-register.js | 2 +- babele-register.js | 168 +++++--- compendium/wfrp4e-archives2.items.json | 501 ++++++++++++++++++++++ compendium/wfrp4e-core.items.json | 4 - compendium/wfrp4e-middenheim.items.json | 116 +++++ compendium/wfrp4e-middenheim.tables.json | 68 +++ compendium/wfrp4e-ua2.items.json | 25 ++ compendium/world.journalentrycorevf_2.zip | Bin 148979 -> 0 bytes fr.json | 41 +- module.json | 4 +- modules/config-patch.js | 33 +- modules/import-stat-2.js | 12 +- 12 files changed, 890 insertions(+), 84 deletions(-) create mode 100644 compendium/wfrp4e-archives2.items.json create mode 100644 compendium/wfrp4e-middenheim.items.json create mode 100644 compendium/wfrp4e-middenheim.tables.json create mode 100644 compendium/wfrp4e-ua2.items.json delete mode 100644 compendium/world.journalentrycorevf_2.zip diff --git a/addon-register.js b/addon-register.js index a81a3e7..0710178 100644 --- a/addon-register.js +++ b/addon-register.js @@ -318,7 +318,7 @@ const __add_actors_translation = () => { if (lang == "fr") { let pack_array = []; for (let metadata of game.packs) { - if (!game.babele.isTranslated(metadata) && metadata.collection != "wfrp4e-core.bestiary" && metadata.documentName === 'Actor') { + if (!game.babele.isTranslated(metadata) && metadata.collection != "wfrp4e-core.actors" && metadata.collection != "wfrp4e-core.bestiary" && metadata.documentName === 'Actor') { //console.log("REPLACE PACK : ", metadata); let translations = { "label": metadata.name, diff --git a/babele-register.js b/babele-register.js index 9866145..a106085 100644 --- a/babele-register.js +++ b/babele-register.js @@ -149,30 +149,34 @@ Hooks.once('init', () => { Babele.get().registerConverters({ "career_skills": (skills_list) => { + let compendiumName = 'wfrp4e-core.skills' // Per default + if (game.system.version.match("7.")) { + compendiumName = 'wfrp4e-core.items' + } //console.log( "Thru here ...", compendium, skills_list); if (skills_list) { - var i; - var len = skills_list.length; - var re = /(.*)\((.*)\)/i; + let i; + let len = skills_list.length; + let re = /(.*)\((.*)\)/i; for (i = 0; i < len; i++) { skills_list[i] = skills_list[i].trim(); - var transl = game.babele.translate('wfrp4e-core.skills', { name: skills_list[i] }, true).name; + let transl = game.babele.translate(compendiumName, { name: skills_list[i] }, true).name; if (!transl) transl = skills_list[i] //console.log("List ...", skills_list[i]); if (transl == skills_list[i]) { - var res = re.exec(skills_list[i]); + let res = re.exec(skills_list[i]); if (res) { //console.log("Matched/split:", res[1], res[2]); - var subword = game.i18n.localize(res[2].trim()); - var s1 = res[1].trim() + " ()"; - var translw = game.babele.translate('wfrp4e-core.skills', { name: s1 }, true).name; + let subword = game.i18n.localize(res[2].trim()); + let s1 = res[1].trim() + " ()"; + let translw = game.babele.translate(compendiumName, { name: s1 }, true).name; if (translw != s1) { - var res2 = re.exec(translw); + let res2 = re.exec(translw); transl = res2[1] + "(" + subword + ")"; } else { s1 = res[1].trim() + " ( )"; - translw = game.babele.translate('wfrp4e-core.skills', { name: s1 }, true).name; - var res2 = re.exec(translw); + translw = game.babele.translate(compendiumName, { name: s1 }, true).name; + let res2 = re.exec(translw); transl = res2[1] + "(" + subword + ")"; } } @@ -195,9 +199,13 @@ Hooks.once('init', () => { } // Auto patch if (results[0].text.includes("wfrp4e-core.career-descriptions") ) { - results[0].text = "wfrp4e-core.journal-entries" + if (game.system.version.match("7.")) { + results[0].text = "wfrp4e-core.journals" + } else { + results[0].text = "wfrp4e-core.journal-entries" + } } - if (results[0].text.includes("wfrp4e-core.journal-entries")) { + if (results[0].text.includes("wfrp4e-core.journal")) { for (let data of results) { let career = data.text.match(/{(.*)}/) //console.log(">>>>>", career) @@ -216,38 +224,45 @@ Hooks.once('init', () => { "npc_details": (details) => { //console.log("DETAILS: ", details); let newDetails = duplicate(details); - if (details.species && details.species.value) + if (details.species?.value) newDetails.species.value = game.i18n.localize(details.species.value); - if (details.gender && details.gender.value) + if (details.gender?.value) newDetails.gender.value = game.i18n.localize(details.gender.value); - if (details.class && details.class.value) + if (details.class?.value) newDetails.class.value = game.i18n.localize(details.class.value); return newDetails; }, "career_talents": (talents_list) => { - var compendium = game.packs.find(p => p.collection === 'wfrp4e-core.talents'); - var i; + let compendiumName = 'wfrp4e-core.talents' // Per default + if (game.system.version.match("7.")) { + compendiumName = 'wfrp4e-core.items' + } + let i; if (talents_list) { - var len = talents_list.length; - var re = /(.*)\((.*)\)/i; + let len = talents_list.length; + let re = /(.*)\((.*)\)/i; for (i = 0; i < len; i++) { - var transl = game.babele.translate('wfrp4e-core.talents', { name: talents_list[i] }, true).name; + let transl = game.babele.translate(compendiumName, { name: talents_list[i] }, true).name; if (!transl) transl = talents_list[i] if (transl == talents_list[i]) { - var res = re.exec(talents_list[i]); + let res = re.exec(talents_list[i]); if (res) { //console.log("Matched/split:", res[1], res[2]); - var subword = game.i18n.localize(res[2].trim()); - var s1 = res[1].trim(); // No () in talents table - var translw = game.babele.translate('wfrp4e-core.talents', { name: s1 }, true).name; + let subword = game.i18n.localize(res[2].trim()); + let s1 = res[1].trim(); // No () in talents table + let translw = game.babele.translate(compendiumName, { name: s1 }, true).name; if (translw != s1) { transl = translw + " (" + subword + ")"; } else { s1 = res[1].trim() + " ( )"; - translw = game.babele.translate('wfrp4e-core.talents', { name: s1 }, true).name; - var res2 = re.exec(translw); - transl = res2[1] + " (" + subword + ")"; + translw = game.babele.translate(compendiumName, { name: s1 }, true).name; + let res2 = re.exec(translw); + if (res2) { + transl = res2[1] + " (" + subword + ")"; + } else { + transl = translw + } } } } @@ -257,10 +272,10 @@ Hooks.once('init', () => { return talents_list; }, "npc_characteristics": (chars) => { // Auto-convert char names in the sheet - for (var key in chars) { - var char = chars[key]; + for (let key in chars) { + let char = chars[key]; //console.log("Was here !", key, char ); - var abrev = char["abrev"]; + let abrev = char["abrev"]; let toTransl = "CHAR." + abrev; if (game.i18n.localize(toTransl) != toTransl) { // Manages unknown language char["label"] = game.i18n.localize("CHAR." + abrev); @@ -275,9 +290,9 @@ Hooks.once('init', () => { return beast_traits } for (let trait_en of beast_traits) { - var special = ""; - var nbt = ""; - var name_en = trait_en.name.trim(); // strip \r in some traits name + let special = ""; + let nbt = ""; + let name_en = trait_en.name.trim(); // strip \r in some traits name if (!trait_en.name || trait_en.name.length == 0) { console.log("Wrong item name found!!!!") continue @@ -286,41 +301,49 @@ Hooks.once('init', () => { if (trait_en.type == "trait") { //console.log("Trait translation", compmod, trait_en) if (name_en.includes("Tentacles")) { // Process specific Tentacles case - var re = /(.d*)x Tentacles/i; - var res = re.exec(name_en); + let re = /(.d*)x Tentacles/i; + let res = re.exec(name_en); if (res && res[1]) nbt = res[1] + "x "; name_en = "Tentacles"; } else if (name_en.includes("(") && name_en.includes(")")) { // Then process specific traits name with (xxxx) inside - var re = /(.*) \((.*)\)/i; - var res = re.exec(name_en); + let re = /(.*) \((.*)\)/i; + let res = re.exec(name_en); name_en = res[1]; // Get the root traits name special = " (" + game.i18n.localize(res[2].trim()) + ")"; // And the special keyword } - var trait_fr = game.babele.translate('wfrp4e-core.traits', { name: name_en }, true); + let compendiumName = 'wfrp4e-core.traits' // Per default + if (game.system.version.match("7.")) { + compendiumName = 'wfrp4e-core.items' + } + let trait_fr = game.babele.translate(compendiumName, { name: name_en }, true); //console.log(">>>>> Trait ?", name_en, nbt, trait_fr, trait_fr.name, special); trait_fr.name = trait_fr.name || trait_en.name trait_en.name = nbt + trait_fr.name + special; - if (trait_fr.system && trait_fr.system.description && trait_fr.system.description.value) { + if (trait_fr.system?.description?.value) { trait_en.system.description.value = trait_fr.system.description.value; } else if (game.modules.get('wfrp4e-eis')) { // No description in the FR compendium -> test other compendium if presenr - trait_fr = game.babele.translate('wfrp4e-eis.eisitems', { name: name_en }, true); + trait_fr = game.babele.translate('wfrp4e-eis.items', { name: name_en }, true); trait_en.name = nbt + trait_fr.name + special; - if (trait_fr.system && trait_fr.system.description && trait_fr.system.description.value) + if (trait_fr.system?.description?.value) trait_en.system.description.value = trait_fr.system.description.value; } - if (trait_en.system && trait_en.system.specification && isNaN(trait_en.system.specification.value)) { // This is a string, so translate it + if (trait_en.system?.specification && isNaN(trait_en.system.specification.value)) { // This is a string, so translate it //console.log("Translating : ", trait_en.system.specification.value); trait_en.system.specification.value = game.i18n.localize(trait_en.system.specification.value.trim()); } } else if (trait_en.type == "skill") { if (name_en.includes("(") && name_en.includes(")")) { // Then process specific skills name with (xxxx) inside - var re = /(.*) +\((.*)\)/i; - var res = re.exec(name_en); + let re = /(.*) +\((.*)\)/i; + let res = re.exec(name_en); name_en = res[1].trim(); // Get the root skill name special = " (" + game.i18n.localize(res[2].trim()) + ")"; // And the special keyword } - var trait_fr = game.babele.translate('wfrp4e-core.skills', { name: name_en }, true); + let compendiumSkills = 'wfrp4e-core.skills' // Per default + if (game.system.version.match("7.")) { + compendiumSkills = 'wfrp4e-core.items' + } + let trait_fr = game.babele.translate(compendiumSkills, { name: name_en }, true); //console.log(">>>>> Skill ?", name_en, special, trait_fr.name, trait_fr); trait_fr.name = trait_fr.name || name_en if (trait_fr.name != name_en) { // Translation OK @@ -331,15 +354,23 @@ Hooks.once('init', () => { } } else if (trait_en.type == "prayer") { - var trait_fr = game.babele.translate('wfrp4e-core.prayers', { name: name_en }, true); + let compendiumPrayers = 'wfrp4e-core.prayers' // Per default + if (game.system.version.match("7.")) { + compendiumPrayers = 'wfrp4e-core.items' + } + let trait_fr = game.babele.translate(compendiumPrayers, { name: name_en }, true); //console.log(">>>>> Prayer ?", name_en, special, trait_fr.name ); trait_fr.name = trait_fr.name || name_en trait_en.name = trait_fr.name + special; - if (trait_fr.system && trait_fr.system.description && trait_fr.system.description.value) + if (trait_fr.system?.description?.value) trait_en.system.description.value = trait_fr.system.description.value; } else if (trait_en.type == "spell") { - var trait_fr = game.babele.translate('wfrp4e-core.spells', { name: name_en }, true) + let compendiumSpells = 'wfrp4e-core.spells' // Per default + if (game.system.version.match("7.")) { + compendiumSpells = 'wfrp4e-core.items' + } + let trait_fr = game.babele.translate(compendiumSpells, { name: name_en }, true) if (trait_fr.name == name_en) { // If no translation, test eisspells trait_fr = game.babele.translate('wfrp4e-eis.eisspells', { name: name_en }, true); } @@ -349,16 +380,21 @@ Hooks.once('init', () => { trait_fr.name = trait_fr.name || name_en //console.log(">>>>> Spell ?", name_en, special, trait_fr.name ); trait_en.name = trait_fr.name + special; - if (trait_fr.system && trait_fr.system.description && trait_fr.system.description.value) + if (trait_fr.system?.description?.value) trait_en.system.description.value = trait_fr.system.description.value; - } else if (trait_en.type == "talent") { + + } else if (trait_en.type == "talent") { if (name_en.includes("(") && name_en.includes(")")) { // Then process specific skills name with (xxxx) inside - var re = /(.*) +\((.*)\)/i; - var res = re.exec(name_en); + let re = /(.*) +\((.*)\)/i; + let res = re.exec(name_en); name_en = res[1].trim(); // Get the root talent name, no parenthesis this time... special = " (" + game.i18n.localize(res[2].trim()) + ")"; // And the special keyword } - var trait_fr = game.babele.translate('wfrp4e-core.talents', { name: name_en }, true) + let compendiumTalents = 'wfrp4e-core.talents' // Per default + if (game.system.version.match("7.")) { + compendiumTalents = 'wfrp4e-core.items' + } + let trait_fr = game.babele.translate(compendiumTalents, { name: name_en }, true) trait_fr.name = trait_fr.name || name_en // Security since babele v10 //console.log(">>>>> Talent ?", trait_fr, name_en, special, trait_fr.name); if (trait_fr.name != "Sprinter" && trait_fr.name == name_en) { // If no translation, test ugtalents @@ -372,13 +408,21 @@ Hooks.once('init', () => { } } } else if (trait_en.type == "career") { - var career_fr = game.babele.translate('wfrp4e-core.careers', trait_en, true); + let compendiumCareers = 'wfrp4e-core.careers' // Per default + if (game.system.version.match("7.")) { + compendiumCareers = 'wfrp4e-core.items' + } + let career_fr = game.babele.translate(compendiumCareers, trait_en, true); career_fr.name = career_fr.name || trait_en.name //console.log(">>>>> Career ?", career_fr.name ); trait_en.system = duplicate(career_fr.system); } else if (trait_en.type == "trapping" || trait_en.type == "weapon" || trait_en.type == "armour" || trait_en.type == "container" || trait_en.type == "money") { - var trapping_fr = game.babele.translate('wfrp4e-core.trappings', trait_en, true); + let compendiumTrappings = 'wfrp4e-core.trappings' // Per default + if (game.system.version.match("7.")) { + compendiumTrappings = 'wfrp4e-core.items' + } + let trapping_fr = game.babele.translate(compendiumTrappings, trait_en, true); //console.log(">>>>> Trapping ?", name_en, trapping_fr.name); trapping_fr.name = trapping_fr.name || trait_en.name if (trapping_fr.system) { @@ -434,9 +478,13 @@ Hooks.once('init', () => { } //console.log("Carre groupe : ", value ) // Per default - var compendium = game.packs.find(p => p.collection === 'wfrp4e-core.careers'); + let compendiumCareers = 'wfrp4e-core.careers' // Per default + if (game.system.version.match("7.")) { + compendiumCareers = 'wfrp4e-core.items' + } + let compendium = game.packs.find(p => p.collection === compendiumCareers); if (compendium) { - let newName = game.babele.translate('wfrp4e-core.careers', { name: value }).name + let newName = game.babele.translate(compendiumCareers, { name: value }).name if (!newName) newName = value return newName } else { @@ -493,8 +541,8 @@ Hooks.once('init', () => { let label = effect.label; let gravity = ""; if (label.includes("(") && label.includes(")")) { // Then process specific skills name with (xxxx) inside - var re = /(.*) +\((.*)\)/i; - var res = re.exec(label); + let re = /(.*) +\((.*)\)/i; + let res = re.exec(label); label = res[1].trim(); // Get the gravity gravity = " (" + game.i18n.localize(res[2].trim()) + ")"; // And the special keyword } diff --git a/compendium/wfrp4e-archives2.items.json b/compendium/wfrp4e-archives2.items.json new file mode 100644 index 0000000..3d36be3 --- /dev/null +++ b/compendium/wfrp4e-archives2.items.json @@ -0,0 +1,501 @@ +{ + "label": "Items (Archives Vol. II)", + "folders": { + "Careers": "Carrières", + "Criticals": "Critiques", + "Diseases": "Maladies", + "Injuries": "Blessures", + "Prayers": "Prières", + "Blessings": "Bénédictions", + "Skills": "Compétences", + "Star Signs": "Signes des Etoiles", + "Spells": "Sorts", + "Trappings": "Possessions", + "Ammunition": "Munitions", + "Armour": "Armures", + "Weapons": "Armes" + }, + "mapping": { + "skills": { + "path": "system.skills", + "converter": "career_skills" + }, + "talents": { + "path": "system.talents", + "converter": "career_talents" + }, + "class": { + "path": "system.class.value", + "converter": "generic_localization" + }, + "career_careergroup": "system.careergroup.value", + "trappings": "system.trappings", + "sduration": { + "path": "system.duration.value", + "converter": "spells_duration_range_target_damage" + }, + "srange": { + "path": "system.range.value", + "converter": "spells_duration_range_target_damage" + }, + "starget": { + "path": "system.target.value", + "converter": "spells_duration_range_target_damage" + }, + "sdamage": { + "path": "system.damage.value", + "converter": "spells_duration_range_target_damage" + }, + "penalty": "system.penalty.value", + "location": { + "path": "system.location.value", + "converter": "generic_localization" + }, + "durationValue": "system.duration.value", + "durationUnit": "system.duration.unit", + "contraction": "system.contraction.value", + "incubationValue": "system.incubation.value", + "incubationUnit": "system.incubation.unit", + "symptoms": "system.symptoms.value", + "permanent": "system.permanent.value", + "special": "system.special.value", + "qualities": { + "path": "system.qualities.value", + "converter": "trapping_qualities_flaws" + }, + "flaws": { + "path": "system.flaws.value", + "converter": "trapping_qualities_flaws" + } + }, + "entries": { + "All-Seeing Mirror": { + "name": "All-Seeing Mirror", + "description": "

These mirrors are made in pairs. Instead of seeing their reflection in the mirror, a Character sees whatever is presented to the sister mirror. The effect is broken if the mirrors are parted by a distance of more than 500 miles.If the Characters find an All-Seeing Mirror, there is a 70% chance the sister mirror is in someone else’s possession.

" + }, + "Amulet of Righteous Silver": { + "name": "Amulet of Righteous Silver", + "description": "

The wearer of this amulet does not suffer from the effects of Fear, and gains a +2SL bonus on Tests to resist Terror.

" + }, + "Amulet of Thrice-Blessed Copper": { + "name": "Amulet of Thrice-Blessed Copper", + "description": "

This amulet reduces the Damage of all attacks made against the wearer by -1. The wearer of such an amulet also receives a +30 bonus to Endurance Tests made to remove @Condition[Poisoned] Conditions. The amulet also turns green in the presence of poisons.

" + }, + "Arrow of Potency": { + "name": "Arrow of Potency", + "description": "

If a hit from an Arrow of Potency deals Damage, it inflicts an additional [[/r 1d10]] Damage which ignores Armour and Toughness.

" + }, + "Arrow of True Flight": { + "name": "Arrow of True Flight", + "description": "

These arrows grant +30 Ballistic Skill when fired.

" + }, + "Ballista": { + "name": "Ballista", + "description": "

Crew: 4

Similar to a crossbow, but much larger, a Ballista can fire large bolts across great distances. It’s far too heavy to be carried, so it’s usually attached to a fixed surface or uses wheels to move around the battlefield.

*Cannot be used at Point Blank.

" + }, + "Battering Ram": { + "name": "Battering Ram", + "description": "

Crew: 6

Used for tearing down doors and gates, a Battering Ram consists of a heavy tree trunk suspended by chains or ropes on a wooden frame with wheels. Some have a spiked metal end, while others have it forged to resemble a ram’s head.

*Battering Rams only deal damage to doors and gates. They are otherwise considered an Improvised Weapon.

" + }, + "Bellicose Cup": { + "name": "Bellicose Cup", + "description": "

Several grim drinking vessals hail from Norsca, with a handful making their way to the Empire. They take many forms — some are simply carved from wood, others are human skulls sealed with pitch and clay. They were typically used at the start or end of ritual combat, and many who lost their lives in such bouts subsequently donated their skulls towards the creation of another cup.

One person may drink from the cup once each day. Drinking water from the cup lets the user ignore the first @Condition[Bleeding] Condition they acquire that day. Drinking strong alcohol from the cup lets the user ignore the first Critical Wound they suffer that day. Drinking the fresh blood of a fallen enemy from the cup grants the user @Exp[100, Drank the blood of a fallen enemy]{100 XP} and a single Corruption point.

" + }, + "Big Ogre Club": { + "name": "Big Ogre Club", + "description": "

Ogres love their clubs. They are the simplest sort of weapon, which appeals to the Ogre mindset greatly. Ogres scour battlefields, forests, and boneyards to find a good solid club and materials to customise it to their liking. If you wish you may customise an Ogre Club or Big Club to add one of the following options.

@UUID[Compendium.wfrp4e-archives2.items.n1fVud1csGlzM9fI]{Metal Plates}: The weapon gains the @UUID[JournalEntry.sLomXnc8R8518cWN.JournalEntryPage.wdXywmb7FBVipOw8#pummel]{Pummel} Quality.

@UUID[Compendium.wfrp4e-archives2.items.6jnKkzFvQKrI7iCo]{Rusty Spikes}: The weapon gains the @UUID[JournalEntry.sLomXnc8R8518cWN.JournalEntryPage.wdXywmb7FBVipOw8#penetrating]{Penetrating} Quality.

@UUID[Compendium.wfrp4e-archives2.items.gnDvFsTIenXj9TBP]{Scavenged Blades}: The weapon gains the @UUID[JournalEntry.sLomXnc8R8518cWN.JournalEntryPage.wdXywmb7FBVipOw8#hack]{Hack} Quality.

* Availability is given for the Empire, where some weapons are rarer than they would be in the Mountains of Mourne.

" + }, + "Big Ogre Club (Metal Plates)": { + "name": "Big Ogre Club (Metal Plates)", + "description": "

Ogres love their clubs. They are the simplest sort of weapon, which appeals to the Ogre mindset greatly. Ogres scour battlefields, forests, and boneyards to find a good solid club and materials to customise it to their liking. If you wish you may customise an Ogre Club or Big Club to add one of the following options.

Metal Plates: The weapon gains the @UUID[JournalEntry.sLomXnc8R8518cWN.JournalEntryPage.wdXywmb7FBVipOw8#pummel]{Pummel} Quality.

* Availability is given for the Empire, where some weapons are rarer than they would be in the Mountains of Mourne.

" + }, + "Big Ogre Club (Rusty Spikes)": { + "name": "Big Ogre Club (Rusty Spikes)", + "description": "

Ogres love their clubs. They are the simplest sort of weapon, which appeals to the Ogre mindset greatly. Ogres scour battlefields, forests, and boneyards to find a good solid club and materials to customise it to their liking. If you wish you may customise an Ogre Club or Big Club to add one of the following options.

Rusty Spikes: The weapon gains the @UUID[JournalEntry.sLomXnc8R8518cWN.JournalEntryPage.wdXywmb7FBVipOw8#penetrating]{Penetrating} Quality.

* Availability is given for the Empire, where some weapons are rarer than they would be in the Mountains of Mourne.

" + }, + "Big Ogre Club (Scavenged Blades)": { + "name": "Big Ogre Club (Scavenged Blades)", + "description": "

Ogres love their clubs. They are the simplest sort of weapon, which appeals to the Ogre mindset greatly. Ogres scour battlefields, forests, and boneyards to find a good solid club and materials to customise it to their liking. If you wish you may customise an Ogre Club or Big Club to add one of the following options.

Scavenged Blades: The weapon gains the @UUID[JournalEntry.sLomXnc8R8518cWN.JournalEntryPage.wdXywmb7FBVipOw8#hack]{Hack} Quality.

* Availability is given for the Empire, where some weapons are rarer than they would be in the Mountains of Mourne.

" + }, + "Bonecrusher": { + "name": "Bonecrusher", + "description": "

You crunch loudly on a mouthful of bones while snarling a curse at a nearby foe. Bonecrusher is a magic missile with a Damage of +4 which ignores your target’s Armour Points but not their Toughness Bonus. Additionally, if your attack inflicts a Critical Wound, add +20 to the roll on the appropriate Critical Wound table to determine its severity.

\n\n Lore: Whenever an Ogre Butcher successfully casts a spell from the Lore of The Great Maw, the offering they consume may restore their own health. Roll [[/r 1d10]]. If the result is a 10, or if it is equal to or higher than the CN of the spell being cast, the Butcher recovers Wounds equal to the CN of the spell.

\n\n Domaine: Whenever an Ogre Butcher successfully casts a spell from the Lore of The Great Maw, the offering they consume may restore their own health. Roll [[/r 1d10]]. If the result is a 10, or if it is equal to or higher than the CN of the spell being cast, the Butcher recovers Wounds equal to the CN of the spell.

" + }, + "Braingobbler": { + "name": "Braingobbler", + "description": "

You devour an entire head, brains and all. Your prodigious gut distils the essence of nightmares from within the unfortunate skull and projects them in a wave of nauseating horror about you. You gain the @UUID[Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn]{Fear 2} Creature Trait. If the late owner of the devoured head had a close relationship to someone who is affected by your Fear Trait, they make any Cool Tests to resist the Fear at a – 20 penalty.

\n\n Lore: Whenever an Ogre Butcher successfully casts a spell from the Lore of The Great Maw, the offering they consume may restore their own health. Roll [[/r 1d10]]. If the result is a 10, or if it is equal to or higher than the CN of the spell being cast, the Butcher recovers Wounds equal to the CN of the spell.

\n\n Domaine: Whenever an Ogre Butcher successfully casts a spell from the Lore of The Great Maw, the offering they consume may restore their own health. Roll [[/r 1d10]]. If the result is a 10, or if it is equal to or higher than the CN of the spell being cast, the Butcher recovers Wounds equal to the CN of the spell.

" + }, + "Bullgorger": { + "name": "Bullgorger", + "description": "

You devour the heart of a mighty beast, projecting its strength and power onto a nearby creature. For the spell’s duration, your target adds +2 to their Strength Bonus for the purposes of Damage they inflict or for other appropriate feats of Strength. However, when the spell ends, they find themselves consumed by an immense hunger and must immediately gorge themselves on a substantial meal or gain a @Condition[Fatigued] Condition.

If the target wishes to reject your gift, they may attempt a Difficult (+20) Cool Test to ignore its effects.

\n\n Lore: Whenever an Ogre Butcher successfully casts a spell from the Lore of The Great Maw, the offering they consume may restore their own health. Roll [[/r 1d10]]. If the result is a 10, or if it is equal to or higher than the CN of the spell being cast, the Butcher recovers Wounds equal to the CN of the spell.

\n\n Domaine: Whenever an Ogre Butcher successfully casts a spell from the Lore of The Great Maw, the offering they consume may restore their own health. Roll [[/r 1d10]]. If the result is a 10, or if it is equal to or higher than the CN of the spell being cast, the Butcher recovers Wounds equal to the CN of the spell.

" + }, + "Butcher": { + "name": "Butcher", + "description": "

@UUID[Compendium.wfrp4e-archives2.journals.S7vMviNshIrqOuRq.JournalEntryPage.oHnxmjA1CtIhumiz]{Ogre Butcher}

" + }, + "Cacklefax the Cockerel": { + "name": "Cacklefax the Cockerel", + "description": "

Sign of Money and Merchants

Classical Name: Kakeros

Ascendant: Winter

Calendar Dates: Ulriczeit 1st – Ulriczeit 16th

Associated God: Kakarol (Horses (Ostland))

Appearance: Two coins

Bonus: Gain one level of the @UUID[Compendium.wfrp4e-core.items.epPBu7x6BRWp2PHG]{Dealmaker} Talent

Penalty: −3 Fellowship

Those born under Cackelfax the Cockerel have lofty goals and their eyes towards the future. You’ll rarely find a spendthrift Cockerel. They go about achieving their goals in the most direct way possible, and that means acquisition — of connections, favors, property, skill, and most of all, money: scads of money. As they rise, they take care of those who took care of them. Many established and aspiring political figures in the Old World were born under the sign of the Cockerel, or claim they were. Other signs may find the Cockerel greedy or ruthless, but they know their truth: in this world, success isn’t earned by the most meritorious. It is bought — with money or with blood.

" + }, + "Cannon": { + "name": "Cannon", + "description": "

Crew: 4

Using the same principles as Blackpowder weapons, cannons are loaded with powder and a large cannonball in the front, and ignited from the back. The force with which a cannonball strikes is enough to knock down most walls and tear apart troops on the field.

*Cannot be used at Point Blank.

" + }, + "Chain Trap": { + "name": "Chain Trap", + "description": "

A set of spring-loaded metal jaws on a length of stout chain, the Chain Trap is a tool used by Ogre Hunters. Originally designed to be chained to a rock or tree and left set in the hopes of catching prey, most Ogres lack the patience for this sort of approach and found it more expedient simply to fling the trap at a target and reel in the meat.

* Availability is given for the Empire, where some weapons are rarer than they would be in the Mountains of Mourne.

" + }, + "Crown of Command": { + "name": "Crown of Command", + "description": "

These golden circlets were made by Wizards to assist military commanders when inspiring their soldiers. The wearer of the Crown of Command benefits from a +20 bonus to Leadership Tests.

" + }, + "Dawnstone": { + "name": "Dawnstone", + "description": "

A Dawnstone is often attached to a piece of armour, imbuing it with a degree of extra protection. If the piece of armour is damaged, the Dawnstone breaks, ignoring the damage.

" + }, + "Dazh’s Flint": { + "name": "Dazh’s Flint", + "description": "

These small pieces of flint are said to be blessed by a Kislevite god of fire. When this item is pressed to a flammable source, it automatically catches on fire.

" + }, + "Dragomas the Drake": { + "name": "Dragomas the Drake", + "description": "

Sign of Courage

Classical Name: Drakonos

Ascendant: Spring

Calendar Dates: Jarhdrung 17th – Pflugzeit 7th

Associated God: Khaine

Appearance: A rearing dragon

Bonus: +2 Willpower, +2 Fellowship

Penalty: −3 Dexterity

Bold, assertive, and strong, people born under Dragomas the Drake are instinctive leaders. They project confidence and assurance into the world, and people simply want to follow them. This charisma can quickly cross the line into an inflexible arrogance, and what begins with gentle leadership and guidance may end in tyranny. Being a leader comes with responsibility to one’s followers, and those born under the Drake are wise to remember this.

" + }, + "Dwarf Flame Cannon": { + "name": "Dwarf Flame Cannon", + "description": "

Crew: 4

Armed with alchemical concoction within the cannon’s barrel, this weapon uses pressure to release a spray of flesh-searing oil that spreads throughout the enemy ranks. Dwarf Flame Cannons give every affected target 2 + SL Ablaze Conditions.

*Cannot be used at Point Blank.

" + }, + "Earthing Rod": { + "name": "Earthing Rod", + "description": "

The wand helps control the dispersion of magical energies. When using the wand, a spellcaster may ignore one Minor Miscast when making a Casting or Channelling Test. The rampant magic is trapped in the wand, and slowly discharged into the earth over the following 24 hours. During this time, the wand cannot be used to ignore another Minor Miscast.

" + }, + "Elven Cloak": { + "name": "Elven Cloak", + "description": "

These cloaks are created by Wood Elf mages and provide the wearer with excellent camouflage in rural environments. Any sight-based Perception or Ballistic Skill Tests made against the wearer suffer from a –20 penalty.

" + }, + "Feast of the Fallen": { + "name": "Feast of the Fallen", + "description": "

You bathe your favourite blade in the blood of a freshly fallen foe, drawing power to you and awakening a thirst for blood in your allies. Any creatures of your choosing in the area of effect gain the @UUID[Compendium.wfrp4e-core.items.3MDwUi7BVxwWVI2V]{Vampiric} Creature Trait for the duration of this spell. The target does not need to bite their opponents to enjoy the benefits of this Trait, merely wound them in melee combat. Additionally, they may continue to benefit from healing from other sources. If a creature wishes to resist this spell, they may attempt a Difficult (+20) Endurance Test to ignore its effects.

For the duration of this spell, the blood of foes gushes towards those affected, seeping across their blades, up their arms, and into their mouths. Ogres are not bothered by this effect, and in fact most revel in it, but other creatures typically find being made subject to this spell extremely unsettling. When the spell ends, non-Ogres who wounded at least one opponent in melee while under its effects must make a Challenging (+0) Cool Test or gain a @Condition[Stunned] Condition. Additionally, if they wounded an opponent who had the @UUID[Compendium.wfrp4e-core.items.V0c3qBU1CMm8bmsW]{Infected} or @UUID[Compendium.wfrp4e-core.items.PaW8i6JOxWyzAZCz]{Diseased} Creature Traits, any Test made to avoid the negative effects of those Traits suffers a –30 penalty.

\n\n Lore: Whenever an Ogre Butcher successfully casts a spell from the Lore of The Great Maw, the offering they consume may restore their own health. Roll [[/r 1d10]]. If the result is a 10, or if it is equal to or higher than the CN of the spell being cast, the Butcher recovers Wounds equal to the CN of the spell.

\n\n Domaine: Whenever an Ogre Butcher successfully casts a spell from the Lore of The Great Maw, the offering they consume may restore their own health. Roll [[/r 1d10]]. If the result is a 10, or if it is equal to or higher than the CN of the spell being cast, the Butcher recovers Wounds equal to the CN of the spell.

" + }, + "Forbidden Rod": { + "name": "Forbidden Rod", + "description": "

This dangerous magical artefact assists channelling the Winds of Magic by leeching the vitality of the wielder. If a spellcaster is attempting to cast a spell but fails, they may choose to lose up to three Wounds, adding +1 SL to the Casting Test for each Wound. After using this ability, the Forbidden Rod cannot be used for 24 hours.

" + }, + "Fresh Meat": { + "name": "Fresh Meat", + "description": "

@UUID[Compendium.wfrp4e-archives2.journals.S7vMviNshIrqOuRq.JournalEntryPage.kxcmiebXRV7PPs8Y]{Maneater}

" + }, + "Gnuthus the Ox": { + "name": "Gnuthus the Ox", + "description": "

Sign of Dutiful Service

Classical Name: Nuthlos

Ascendant: Early Spring

Calendar Dates: Nachhexen 29th – Jahrdrung 16th

Associated God: Guvaur (Bulls (Ostland))

Appearance: An ox

Bonus: +2 Toughness, +2 Willpower

Penalty: − 3 Intelligence

Those born under the sign of the Ox are devoted allies and fast friends. When they pledge themselves to a person, an ideal, or a cause, they cannot be moved. If they make a promise, they honor it. If they owe someone a debt, they find a way to pay it, no matter the cost to themselves. Their honesty is just as often naiveté, and they must be on guard lest others take advantage. In addition, they pledge themselves to the wrong causes and losing sides just as often as they find themselves on the side of righteousness.

" + }, + "Great Throwing Spear": { + "name": "Great Throwing Spear", + "description": "

Used by Ogre Hunters in their pursuit of the great beasts of the Mountains of Mourne, these are large, crude, and terribly effective javelins.

* Availability is given for the Empire, where some weapons are rarer than they would be in the Mountains of Mourne.

" + }, + "Grungni's Baldric": { + "name": "Grungni's Baldric", + "description": "

Sign of Martial Pursuits

Classical Name: Gileon

Ascendant: Late Spring/Early Summer

Calendar Dates: Pflugzeit 32nd – Sigmarzeit 22nd

Associated God: Grungni (Dwarfs, the Forge (Stirland)), Margileo (Honour (Averland))

Appearance: A dwarf with a baldric

Bonus: +2 Weapon Skill, +2 Willpower

Penalty: −3 Fellowship

Grungni’s Baldric is sacred to soldiers and Dwarfs, and as such, those born under its light are honorable, disciplined, and naturally disposed to the soldiering life. Even those who are not soldiers tend to approach their personal lives with a martial rigor. It is difficult for people born under the Baldric to relax and enjoy the finer things in life. People born under more tranquil signs may find them single-minded and humorless.

" + }, + "Hail of Doom Arrow": { + "name": "Hail of Doom Arrow", + "description": "

After firing a Hail of Doom Arrow, it splits into [[/r 1d10]] arrows in flight. Roll to hit and damage with each arrow. These arrows can all hit the same target, or may hit secondary targets provided they are within 5 feet of the primary target and that the shooter has a clear line of sight to them.

" + }, + "Harpoon": { + "name": "Harpoon", + "description": "" + }, + "Harpoon Launcher": { + "name": "Harpoon Launcher", + "description": "

Used to hunt prey, a Harpoon Launcher fires a massive bolt the size of a spear, attached to a long length of rope. There is no mechanism to pull the rope back in automatically — the Ogre simply grabs the rope and reels in their prey by hand. Harpoon Launchers can be used with either the Ranged (Crossbow) or Ranged (Entangling) Skills at no penalty. If the rope is removed from the bolt, the range increases to 60 and no longer has the Entangle Quality.

Remember to unselect \"Consumes Ammo\" in the Item Details if the rope is removed, reflecting that the user cannot reel in the harpoon anymore.

* Availability is given for the Empire, where some weapons are rarer than they would be in the Mountains of Mourne.

" + }, + "Hellblaster Volley Cannon": { + "name": "Hellblaster Volley Cannon", + "description": "

Crew: 4

A Helblaster Volley Cannon has nine barrels divided into groups of three, built around a shaft. The cannon can fire each group separately, or all three of them in quick succession, rapidly laying waste to most enemy troops.

*Cannot be used at Point Blank

" + }, + "Helstorm Rocket Battery": { + "name": "Helstorm Rocket Battery", + "description": "

Crew: 4

Based on fireworks, the @UUID[Compendium.wfrp4e-altdorf.journals.85UN6bKPTfGEBtBb.JournalEntryPage.HYkHeQZtD2AML3oG]{Imperial School of Engineers} created these extremely dangerous and inaccurate missiles. Known for the piercing sound they make as they fly wildly through the air, and the devastating result of their explosions.

*Cannot be used at Point Blank.

" + }, + "Illusory Weapon": { + "name": "Illusory Weapon", + "description": "

Sometimes created for rogues or thespians, these weapons look like the real deal but inflict no damage. Illusory weapons are usually daggers, but larger illusory weapons are known and there have even been illusory quivers of arrows.

" + }, + "Ironfist": { + "name": "Ironfist", + "description": "

A tribute to the sacred art of pit fighting, an Ironfist is a massive gauntlet Ogres use to bash aside blows and crack heads. Ironfists are secured tight to the Ogre’s fist — an Ogre can never be disarmed of an Ironfist. They may use the hand wearing the Ironfist to hold a weapon or perform simple actions.

* Availability is given for the Empire, where some weapons are rarer than they would be in the Mountains of Mourne.

" + }, + "Large": { + "name": "Large", + "description": "

You are much bigger than most folk in the Old World. The full rules for different Sizes are found in @UUID[Compendium.wfrp4e-core.items.8slW8CJ2oVTxeQ6q]{Size}.

" + }, + "Leadbelcher Ball": { + "name": "Leadbelcher Ball", + "description": "

Essentially a cannon ball, the price given for a Leadbelcher Ball includes 2/– for enough powder to fire a single shot. The ball can often be recovered, and may be fired again for just the price of the powder.

" + }, + "Leadbelcher Gun": { + "name": "Leadbelcher Gun", + "description": "

Essentially a cannon, the Leadbelcher Gun is the height of Ogre engineering. Breech loaded, extremely hard wearing (it would have to be) and fired by lighting a simple fuse, the Leadbelcher Gun is usually loaded with whatever the Ogre has to hand — lengths of chain, bricks, lead shot, stones, rusted nails, and the like. Occasionally they may be loaded with actual cannonballs, which Ogres typically reclaim from the battlefield after use. Lucky cannonballs are often named and carried about as a valued comrade.

* Availability is given for the Empire, where some weapons are rarer than they would be in the Mountains of Mourne.

" + }, + "Leadbelcher Shot": { + "name": "Leadbelcher Shot", + "description": "" + }, + "Magical Arrow": { + "name": "Magical Arrow", + "description": "

The arrow is capable of damaging creatures that are immune to non-magical attacks and inflicts +1 Damage, but has no particular ability.

" + }, + "Mammit the Wise": { + "name": "Mammit the Wise", + "description": "

Sign of Wisdom

Classical Name: Mammius

Ascendant: Early Summer

Calendar Dates: Sigmarzeit 23rd – Sommerzeit 11th

Associated God: Verena

Appearance: An owl

Bonus: +2 Initiative, +2 Intelligence

Penalty: −3 Fellowship

To the person born under Mammit the Wise, everything is an opportunity for learning. This introspective bent makes them clever, fair, and kind — but it can lead them to view the misfortunes of others as simply another subject for study. This allows them to act with detachment when they must, but taken too far, their detachment can become indifference and cruelty.

" + }, + "Maneater": { + "name": "Maneater", + "description": "

@UUID[Compendium.wfrp4e-archives2.journals.S7vMviNshIrqOuRq.JournalEntryPage.kxcmiebXRV7PPs8Y]{Maneater}

" + }, + "Maneater Captain": { + "name": "Maneater Captain", + "description": "

@UUID[Compendium.wfrp4e-archives2.journals.S7vMviNshIrqOuRq.JournalEntryPage.kxcmiebXRV7PPs8Y]{Maneater}

" + }, + "Maneater Crusher": { + "name": "Maneater Crusher", + "description": "

@UUID[Compendium.wfrp4e-archives2.journals.S7vMviNshIrqOuRq.JournalEntryPage.kxcmiebXRV7PPs8Y]{Maneater}

" + }, + "Mangonel Catapult": { + "name": "Mangonel Catapult", + "description": "

Crew: 6

A Mangonel Catapult holds large projectiles like rock or debris in a large bucket. It flings them by bending the arm holding the bucket backwards and then releasing it.

*Cannot be used at Point Blank.

" + }, + "Mawsage": { + "name": "Mawsage", + "description": "

@UUID[Compendium.wfrp4e-archives2.journals.S7vMviNshIrqOuRq.JournalEntryPage.oHnxmjA1CtIhumiz]{Ogre Butcher}

" + }, + "Mortar": { + "name": "Mortar", + "description": "

Crew: 6

Specifically designed with indirect fire in mind, Mortars are used for arcing shots that go over castle walls to hit the troops inside with an exploding shell of shrapnel.

*Cannot be used if the distance to the target is less than Short Range.

*Cannot be used at Point Blank.

" + }, + "Mummit the Fool": { + "name": "Mummit the Fool", + "description": "

Sign of the Indistinct

Classical Name: The Fool

Ascendant: Summer

Calendar Dates: Sommerzeit 12th – Sommerzeit 29th

Associated God: Ranald

Appearance: A smiling face

Bonus: Gain one level of the @UUID[Compendium.wfrp4e-core.items.u0CFf3xwiyidD9T5]{Luck} Talent

Penalty: −4 Willpower

Mummit the Fool smiles down at the world from the night sky and heralds a time of new beginnings. People born under Mummit the Fool are sensible, intuitive, and above all, improbably lucky. Things simply work out for them, or seem to. As such, they are known to struggle with impulsivity and wanderlust — a desire to leave it all behind and avoid responsibility for as long as they can.

" + }, + "Obsidian Lodestone": { + "name": "Obsidian Lodestone", + "description": "

These amulets are enchanted to disrupt hostile magics targeting the wearer. The wearer may make an attempt to dispel any spell that targets them (count the bearer as possessing a Language (Magick) of 30 for the purpose of dispelling spells).

" + }, + "Ogre Club": { + "name": "Ogre Club", + "description": "

Ogres love their clubs. They are the simplest sort of weapon, which appeals to the Ogre mindset greatly. Ogres scour battlefields, forests, and boneyards to find a good solid club and materials to customise it to their liking. If you wish you may customise an Ogre Club or Big Club to add one of the following options.

@UUID[Compendium.wfrp4e-archives2.items.IhyZAbMf1XdQoEqN]{Metal Plates}: The weapon gains the @UUID[JournalEntry.sLomXnc8R8518cWN.JournalEntryPage.wdXywmb7FBVipOw8#pummel]{Pummel} Quality.

@UUID[Compendium.wfrp4e-archives2.items.nAOj5eE2ZiNVjnZu]{Rusty Spikes}: The weapon gains the @UUID[JournalEntry.sLomXnc8R8518cWN.JournalEntryPage.wdXywmb7FBVipOw8#penetrating]{Penetrating} Quality.

@UUID[Compendium.wfrp4e-archives2.items.IpzDjA8XwnMq09yw]{Scavenged Blades}: The weapon gains the @UUID[JournalEntry.sLomXnc8R8518cWN.JournalEntryPage.wdXywmb7FBVipOw8#hack]{Hack} Quality.

* Availability is given for the Empire, where some weapons are rarer than they would be in the Mountains of Mourne.

" + }, + "Ogre Club (Metal Plates)": { + "name": "Ogre Club (Metal Plates)", + "description": "

Ogres love their clubs. They are the simplest sort of weapon, which appeals to the Ogre mindset greatly. Ogres scour battlefields, forests, and boneyards to find a good solid club and materials to customise it to their liking. If you wish you may customise an Ogre Club or Big Club to add one of the following options.

Metal Plates: The weapon gains the @UUID[JournalEntry.sLomXnc8R8518cWN.JournalEntryPage.wdXywmb7FBVipOw8#pummel]{Pummel} Quality.

* Availability is given for the Empire, where some weapons are rarer than they would be in the Mountains of Mourne.

" + }, + "Ogre Club (Rusty Spikes)": { + "name": "Ogre Club (Rusty Spikes)", + "description": "

Ogres love their clubs. They are the simplest sort of weapon, which appeals to the Ogre mindset greatly. Ogres scour battlefields, forests, and boneyards to find a good solid club and materials to customise it to their liking. If you wish you may customise an Ogre Club or Big Club to add one of the following options.

Rusty Spikes: The weapon gains the @UUID[JournalEntry.sLomXnc8R8518cWN.JournalEntryPage.wdXywmb7FBVipOw8#penetrating]{Penetrating} Quality.

* Availability is given for the Empire, where some weapons are rarer than they would be in the Mountains of Mourne.

" + }, + "Ogre Club (Scavenged Blades)": { + "name": "Ogre Club (Scavenged Blades)", + "description": "

Ogres love their clubs. They are the simplest sort of weapon, which appeals to the Ogre mindset greatly. Ogres scour battlefields, forests, and boneyards to find a good solid club and materials to customise it to their liking. If you wish you may customise an @UUID[Compendium.wfrp4e-archives2.items.2MpNIjAFXnRnZZdL]{Ogre Club} or Big Club to add one of the following options.

Scavenged Blades: The weapon gains the @UUID[JournalEntry.sLomXnc8R8518cWN.JournalEntryPage.wdXywmb7FBVipOw8#hack]{Hack} Quality.

* Availability is given for the Empire, where some weapons are rarer than they would be in the Mountains of Mourne.

" + }, + "Ogre Gutplate": { + "name": "Ogre Gutplate", + "description": "

A massive slab of metal, hardwood, bone or leather, an Ogre's gutplate is prized above even the most well-worn club. The plate protects the Ogre's belly, where most of their vital organs reside, and acts as both a source of protection and a canvas for military or religious markings. Many gutplates carry the symbol of the Great Maw, a ring of jagged teeth that represent both the Ogre's hungry god and their own ravenous appetite.

* Ogre Gutplates are uniquely suited to Ogre anatomy, and indeed even if scaled down would provide incomplete protection to members of species who do not keep most of their vital organs in their gut.

" + }, + "Ogre Pistol": { + "name": "Ogre Pistol", + "description": "

An Ogre Pistol is a reinforced Empire weapon and can use all the same shot and powder as a typical blackpowder weapon. However, they are strong enough to also serve as a Hand Weapon, only breaking on a Fumbled attack.

* Availability is given for the Empire, where some weapons are rarer than they would be in the Mountains of Mourne.

" + }, + "Onager Catapult": { + "name": "Onager Catapult", + "description": "

Crew: 6

Similar to the @UUID[Compendium.wfrp4e-archives2.items.YBNeaZ0Wt30jTWrD]{Mangonel Catapult}, this siege weapon uses a sling to increase its effective range.

*Cannot be used at Point Blank.

" + }, + "Opal Amulet": { + "name": "Opal Amulet", + "description": "

The Opal Amulet contains a powerful healing enchantment. Remove [[/r 1d10]] Wounds from the first attack the wearer suffers. The amulet can only be used once every 24-hour period.

The Opal Amulet will automatically roll and reduce incoming Damage from Opposed Tests, then automatically disable itself. It must then be re-enabled manually.

" + }, + "Protection Ring": { + "name": "Protection Ring", + "description": "

These rings are enchanted to protect the wearer from a particular sort of Creature. In order to determine what sort of Creature this is, roll on the @Table[random-creature]{Random Creature Table}. The wearer halves any Wounds taken from a Creature of this type.

" + }, + "Quietened Mail Chausses": { + "name": "Quietened Mail Chausses", + "description": "

First commissioned by a late Duke of Carroburg for the same skillful assassin who would ultimately kill him, these full suits of mail (Chausses, @UUID[Compendium.wfrp4e-archives2.items.BDbQ70J9MM8mdxxo]{Coat} and a @UUID[Compendium.wfrp4e-archives2.items.3dQNE54s7ojwwqWG]{Coif}) have been enchanted to remove the rattle of metal rings that mail armour normally makes. The usual -10 Penalty to Stealth associated with items of Mail armour does not apply. However, the spells used to create this armour were never perfected, and those wearing the Coif can speak no louder than a whisper.

" + }, + "Quietened Mail Coat": { + "name": "Quietened Mail Coat", + "description": "

First commissioned by a late Duke of Carroburg for the same skillful assassin who would ultimately kill him, these full suits of mail (@UUID[Compendium.wfrp4e-archives2.items.Cya63L5XXQQgphhR]{Chausses}, Coat and a @UUID[Compendium.wfrp4e-archives2.items.3dQNE54s7ojwwqWG]{Coif}) have been enchanted to remove the rattle of metal rings that mail armour normally makes. The usual -10 Penalty to Stealth associated with items of Mail armour does not apply. However, the spells used to create this armour were never perfected, and those wearing the Coif can speak no louder than a whisper.

" + }, + "Quietened Mail Coif": { + "name": "Quietened Mail Coif", + "description": "

First commissioned by a late Duke of Carroburg for the same skillful assassin who would ultimately kill him, these full suits of mail (@UUID[Compendium.wfrp4e-archives2.items.Cya63L5XXQQgphhR]{Chausses}, @UUID[Compendium.wfrp4e-archives2.items.BDbQ70J9MM8mdxxo]{Coat} and a Coif) have been enchanted to remove the rattle of metal rings that mail armour normally makes. The usual -10 Penalty to Stealth associated with items of Mail armour does not apply. However, the spells used to create this armour were never perfected, and those wearing the Coif can speak no louder than a whisper.

" + }, + "Rhinox Breaker": { + "name": "Rhinox Breaker", + "description": "

@UUID[Compendium.wfrp4e-archives2.journals.S7vMviNshIrqOuRq.JournalEntryPage.VG6hzml2D3Oe7PYX]{Rhinox Herder}

" + }, + "Rhinox Herder": { + "name": "Rhinox Herder", + "description": "

@UUID[Compendium.wfrp4e-archives2.journals.S7vMviNshIrqOuRq.JournalEntryPage.VG6hzml2D3Oe7PYX]

" + }, + "Rhinox Master": { + "name": "Rhinox Master", + "description": "

@UUID[Compendium.wfrp4e-archives2.journals.S7vMviNshIrqOuRq.JournalEntryPage.VG6hzml2D3Oe7PYX]{Rhinox Herder}

" + }, + "Rhinox Rustler": { + "name": "Rhinox Rustler", + "description": "

@UUID[Compendium.wfrp4e-archives2.journals.S7vMviNshIrqOuRq.JournalEntryPage.VG6hzml2D3Oe7PYX]{Rhinox Herder}

" + }, + "Rhya's Cauldron": { + "name": "Rhya's Cauldron", + "description": "

Sign of Mercy, Death, and Creation

Classical Name: Rionyes

Ascendant: Early Winter

Calendar Dates: Kaldezeit 18th – Kaldezeit 33rd

Associated God: Rhya

Appearance: A cauldron

Bonus: Gain one level of the @UUID[Compendium.wfrp4e-core.items.mgeiaDZXei7JBEgo]{Iron Will} Talent

Penalty: −3 Agility

Rhya’s Cauldron is revered by Astromancers, Wizards of the Jade and Amethyst orders, and astrologers alike. It is associated with the budding of new things in nature, and also their inevitable death. People born under its light are known to be righteous in their ideals and merciful towards the innocent. No matter what their station in life, they are relentless in their pursuit of justice. This relentlessness, if unchecked, can make them careless and even callous towards the lives and well-being of others.

" + }, + "Ruby Ring of Ruin": { + "name": "Ruby Ring of Ruin", + "description": "

The Ruby Ring of Ruin is a type of Spell Ring which can be used to cast the @UUID[Compendium.wfrp4e-core.items.HpFkVJ2lYPAWumUL]{Great Fires of U’Zhul} spell from the Lore of Fire. Unlike normal Spell Rings, a Ruby Ring of Ruin can be used three times during any 24-hour period.

" + }, + "Sand of Flinging": { + "name": "Sand of Flinging", + "description": "

This fine but abrasive substance is said to have been made in Ind. It comes in small pouches containing enough sand for four uses. The sand may be thrown in exactly the same way as a dart. The sand does not inflict any damage, but if the target is hit in the head, they suffer one @Condition[Blinded] Condition.

" + }, + "Screaming Stone": { + "name": "Screaming Stone", + "description": "

An unusual item, even by the standards of such magical oddities, the Screaming Stone is a small skull hewn of polished white granite. Whenever a living creature of size Small or larger is in view of the Stone, it begins screaming loudly. This screaming ends once the skull can no longer see a living creature, for example if it moves out of sight or the skull's eyes are covered. If someone attempts to sneak past the skull, treat it as though it has a Perception of 75.

" + }, + "Seed of Rebirth": { + "name": "Seed of Rebirth", + "description": "

These amulets look like simple wooden carvings but are powerful artefacts. The wearer of a Seed of Rebirth counts as having the @UUID[Compendium.wfrp4e-core.items.SfUUdOGjdYpr3KSR]{Regenerate} Creature Trait.

" + }, + "Self-Cleaning Commode": { + "name": "Self-Cleaning Commode", + "description": "

These light ceramic pieces of pottery are associated with the city of Marienburg, where the Elven community present them as gifts to their Human neighbours. A Character who makes regular use of such a device gains a +10 bonus to Endurance Tests made to resist contracting a disease.

" + }, + "Self-Tuning Lute": { + "name": "Self-Tuning Lute", + "description": "

Musical purists may quibble, but a minstrel in possession of one of these lutes is able to concentrate on their performances without worrying about their instruments being off-key. A musician equipped with a Self-Tuning Lute benefits from a +10 bonus to Play (Lute) Tests.

" + }, + "Shinsmasher's Club": { + "name": "Shinsmasher's Club", + "description": "

The providence of this brutal looking club is unknown. It turned up in @UUID[Compendium.wfrp4e-core.journals.ozE2DMCMK64eE5pD.JournalEntryPage.V6tkgQ9A2skppjyl]{Altdorf} in the hands of a @UUID[Compendium.wfrp4e-altdorf.journals.rSRadYoaNXkEq8gs.JournalEntryPage.jisr4ys6obOel7r1#the-hooks]{Hook} enforcer, but has since changed hands a dozen times. Any Critical Wound inflicted by this hammer on an opponent’s legs enjoys a bonus of +20 to the severity roll. The club otherwise functions as a normal @UUID[Compendium.wfrp4e-core.items.1zaqojk0Oq1m8vYv]{Hand Weapon}.

" + }, + "Slaughtermaster": { + "name": "Slaughtermaster", + "description": "

@UUID[Compendium.wfrp4e-archives2.journals.S7vMviNshIrqOuRq.JournalEntryPage.oHnxmjA1CtIhumiz]{Ogre Butcher}

" + }, + "Slopscooper": { + "name": "Slopscooper", + "description": "

@UUID[Compendium.wfrp4e-archives2.journals.S7vMviNshIrqOuRq.JournalEntryPage.oHnxmjA1CtIhumiz]{Ogre Butcher}

" + }, + "Spell Ring": { + "name": "Spell Ring", + "description": "

A Spell Ring works in a similar way as a scroll, allowing the wearer to cast a single spell. Unlike a scroll, the ring is not destroyed after casting the spell and the wearer does not need to make a Language Test. Determine the spell within a Spell Ring using the same method for a scroll. When the wearer casts the spell, the ring may not be used for a period of 24 hours. Spell Rings are rare in the Empire, and to the frustration of Wizards who know better, all are inevitably called ‘The’ Ring of Volans, as the techniques required for Human Wizards to manufacture these artefacts were first taught under his supervision.

" + }, + "Striking Ring": { + "name": "Striking Ring", + "description": "

The wearer of this ring may use each of its powers one at a time for one turn in each 24-hour period. The power duplicates the effects of one of the following Talents: @UUID[Compendium.wfrp4e-core.items.4MJJCiOKPkBByYwW]{Strike Mighty Blow}, @UUID[Compendium.wfrp4e-core.items.RWJrupj9seau0w31]{Strike to Injure}, @UUID[Compendium.wfrp4e-core.items.jt0DmVK9IiF6Sd2h]{Strike to Stun}

" + }, + "Taste Death": { + "name": "Taste Death", + "description": "

By consuming part of a corpse you learn about when and how the creature died. You learn if the victim was stabbed, poisoned, killed by magic, died of natural causes, and so on. The information you gain is general. For example, you may learn that the victim was stabbed to death with a sword, but not what kind of sword. You also do not learn anything about who may have been responsible, save the method they used. If the target suffered a ‘clean’ death — that is, did not die of poison or disease — it is considered proper to consume the remainder of the corpse.

\n\n Lore: Whenever an Ogre Butcher successfully casts a spell from the Lore of The Great Maw, the offering they consume may restore their own health. Roll [[/r 1d10]]. If the result is a 10, or if it is equal to or higher than the CN of the spell being cast, the Butcher recovers Wounds equal to the CN of the spell.

\n\n Domaine: Whenever an Ogre Butcher successfully casts a spell from the Lore of The Great Maw, the offering they consume may restore their own health. Roll [[/r 1d10]]. If the result is a 10, or if it is equal to or higher than the CN of the spell being cast, the Butcher recovers Wounds equal to the CN of the spell.

" + }, + "The Big Cross": { + "name": "The Big Cross", + "description": "

Sign of Clarity

Classical Name: Azurios

Ascendant: Midwinter

Calendar Dates: Vorxehen 28th – Nachhexen 8th

Associated God: Ulric

Appearance: An X

Bonus: +2 Strength, +2 Willpower

Penalty: −3 Initiative

There is no uncertainty in the hearts of those born under the Big Cross. The path they must take through the world seems obvious to them, and they make sensible choices to keep on it. But this rationality can lead to a predictable passivity and detachment from the world around them.

If their path is already made, why deviate from it? It is vital that they find something to fight for, rather than simply allowing the tides of fate to sweep them away.

" + }, + "The Bonesaw": { + "name": "The Bonesaw", + "description": "

Sign of Skill and Learning

Classical Name: Alyoi

Ascendant: Winter

Calendar Dates: Ulriczeit 17th – Ulriczeit 31st

Associated God: Shallya

Appearance: A knife

Bonus: +2 Intelligence, +2 Fellowship

Penalty: −3 Weapon Skill

The Bonesaw is the sign of the philosopher — above all else, they crave knowledge. They live to explore and experiment. Unlike other inquisitive signs, however, they do not want to hoard what they know for its own sake, and they do not withdraw into themselves. One born under the Bonesaw wants to disseminate what they know as widely as possible. This can, however, make them seem like overbearing know-it-alls, rather than passionate scholars of the world.

" + }, + "The Broken Cart": { + "name": "The Broken Cart", + "description": "

Sign of Pride

Classical Name: Kharnos

Ascendant: Autumn

Calendar Dates: Brauzeit 7th – Brauzeit 27th

Associated God: Nurgle

Appearance: A cart with a broken wheel

Bonus: Gain one level of the @UUID[Compendium.wfrp4e-core.items.vMYEkrWj0ip6ZOdv]{Resistance (Disease)} Talent

Penalty: −3 Willpower

At times, people born under the Broken Cart can be prideful and over-concerned with appearances. They might spend their last coin in pursuit of the finer things in life, or dash themselves on the rocks looking for the approval of their betters. When this tendency is curbed — when they come to peace with the fundamental insecurities that cause them to spend their lives searching for things to fulfill them — their pride becomes confidence, and their conceit mellows into likeability.

The Broken Cart’s association with Nurgle is rarely acknowledged, as worship of any Ruinous Power is grounds for a short trip to a tall pyre in most parts of the world. All know that there is something dark and primal about the sign, however, and its associations with disease are common across many cultures. Many folk know that the Father of Plagues is a force in the world, and when disease scours the land, the desperate often recall old tales and forbidden rites, and make offerings just the same.

" + }, + "The Dancer": { + "name": "The Dancer", + "description": "

Sign of Love and Attraction

Classical Name: Adamnos

Ascendant: Late Summer

Calendar Dates: Vorgeheim 14th – Nachgeheim 2nd

Associated God: Millavog (Dancing (Wissenland)) Appearance: A whirling dancer

Bonus: Gain one level of the @UUID[Compendium.wfrp4e-core.items.oGbDwnLOn3isPJpO]{Impassioned Zeal} Talent. (You do not need to choose the focus of your zeal during Character creation, but may instead discover it during gameplay.)

Penalty: −3 Initiative

The Dancer is the sign of passion — and of obsession. What those born under the sign choose to pursue they chase with a single-minded devotion. Whether their focus is a lover or a mystery to solve, the world falls away in the face of their determination. When they are scorned, they take it poorly, and may react violently.

" + }, + "The Drummer": { + "name": "The Drummer", + "description": "

Sign of Excess and Hedonism

Classical Name: Lupios

Ascendant: Late Summer/Early Autumn

Calendar Dates: Nachgeheim 3rd – Nachgeheim 24th

Associated God: Lupos (Predators (Hochland))

Appearance: A drum

Bonus: Gain one level of the @UUID[Compendium.wfrp4e-core.items.hTgrGkWnmIR4xhVe]{Carouser} Talent

Penalty: −3 Willpower

A person born under the Drummer is distinguishable by their expansive, generous spirit. They do nothing in moderation, and when they give, they give everything. A Drummer never fails to give alms to the poor or take care of ailing family members. They also never turn down an invitation to a tavern or a party. They are a joy to be around, but this joy can swiftly turn to ruinous excess and hedonism if left unchecked.

" + }, + "The Gloaming": { + "name": "The Gloaming", + "description": "

Sign of Illusion and Mystery

Classical Name: Tartotes

Ascendant: Spring

Calendar Dates: Pflugzeit 8th – Pflugzeit 31st

Associated God: Morr

Appearance: A collection of red and blue stars that appears only at twilight

Bonus: +2 Intelligence, +2 Initiative

Penalty: −3 Willpower

The stars that make up the Gloaming appear only under specific conditions, at twilight. People born under the Gloaming are doubters and skeptics. This skepticism can morph into paranoia and unreasonable suspicion of anything they cannot see or touch. The metaphysical, the theoretical—none of it is trustworthy. Only the hard, physical reality of the world is reliable. At their best, natives of the Gloaming are brilliant investigators and scholars. They are often inclined toward sorcery despite their distrust of the mystical.

" + }, + "The Greased Goat": { + "name": "The Greased Goat", + "description": "

Sign of Denied Passion

Classical Name: Talios

Ascendant: Late Autumn

Calendar Dates: Brauzeit 28th – Kaldezeit 17th

Associated God: Taal

Appearance: A goat

Bonus: Gain one level of the @UUID[Compendium.wfrp4e-core.items.9fq6p9Q6H02LjaSi]{Animal Affinity} Talent

Penalty: −3 Toughness

A person born under the Greased Goat refuses to let anyone get too near. They can seem aloof and apathetic, but this is an attempt to make sure they are not hurt by the disappointments that are assuredly coming their way. When they are knocked down, they wallow in their pain. On the rare occasions they allow themselves to feel joy, their joy is infectious.

Children born under the Greased Goat who have an aptitude for magic often find themselves drawn towards the Amber wind of Ghur. Those born under the Greased Goat would be wise to remember that the world is not there to victimize them. Everyone has a run of bad luck sometimes, but it does not define them.

" + }, + "The Limner's Line": { + "name": "The Limner's Line", + "description": "

Sign of Precision

Classical Name: Verros

Ascendant: Late Winter/Early Spring

Calendar Dates: Nachhexen 9th – Nachhexen 28th

Associated God: Vallich (Smithing and Ship Building (Nordland))

Appearance: An archer with a drawn bow

Bonus: +2 Ballistic Skill, +2 Agility

Penalty: −3 Weapon Skill

Natives of the Limner’s Line were born to be poets, painters, sculptors — artists of all kinds. They create beauty wherever they go, and even those who by circumstance do not find themselves in an artistic field still find a way to make their life’s work into a kind of art. If they are doktors, they are surgeons. If they are soldiers, they become master tacticians. People born under the Limner’s Line must take care not to become too critical of themselves or their work.

" + }, + "The Maw": { + "name": "The Maw", + "description": "

You devour the better part of a large beast, drawing out the Great Maw itself, causing a sliver of it to manifest. The ground splits apart, a thousand gnashing teeth waiting hungrily in the chasm. The pit is bottomless, its hunger endless, its teeth shards of razor, and the sound of its roiling jaws like the grinding of glass on stone.

Anyone in the affected area must make an immediate Challenging (+0) Dodge Test to scramble clear. If they succeed, targets take a Damage +8 hit as they pull themselves out of the Maw, with the Damage reduced by 1 for each SL achieved on the Dodge Test.

Anyone who fails the Test plunges into the Maw, which begins the methodical work of swallowing them alive. They immediately suffer a Damage +10 hit to a randomly chosen location, and gain 3 @Condition[Entangled] Conditions. Attempts to remove these Conditions are resisted by the Maw’s Strength of 60. The victim may not escape the Maw until all 3 @Condition[Entangled] conditions are removed. At the end of each of their turns, creatures inside the Maw suffer another Damage +10 hit to a randomly chosen location.

The Maw’s teeth are sharp, and it does not give up prey easily. As soon as the spell ends, the Maw vanishes, but attempts to keep any limbs that remain inside it as it goes. If a creature is inside the Maw when it vanishes, they immediately suffer a Critical Wound to a randomly chosen hit location.

\n\n Lore: Whenever an Ogre Butcher successfully casts a spell from the Lore of The Great Maw, the offering they consume may restore their own health. Roll [[/r 1d10]]. If the result is a 10, or if it is equal to or higher than the CN of the spell being cast, the Butcher recovers Wounds equal to the CN of the spell.

\n\n Domaine: Whenever an Ogre Butcher successfully casts a spell from the Lore of The Great Maw, the offering they consume may restore their own health. Roll [[/r 1d10]]. If the result is a 10, or if it is equal to or higher than the CN of the spell being cast, the Butcher recovers Wounds equal to the CN of the spell.

" + }, + "The Piper": { + "name": "The Piper", + "description": "

Sign of the Trickster

Classical Name: Sangist

Ascendant: Autumn

Calendar Dates: Nachgheim 25th – Erntezeit 16th

Associated God: Ranald, Katya (Disarming Beauty (Reikland))

Appearance: A capering piper

Bonus: +2 Fellowship, +2 Dexterity

Penalty: −3 Weapon Skill

The best diplomats are born under the Piper’s rule, and so are the best thieves. They are cunning, slick, and very tactful when they need to be. In a negotiation, there is none better to have one’s back. However, they do not hesitate to play both sides to their advantage — or take advantage of allies, if they think they’ll come out the better for it. Theologians disagree as to the correct deity to associate with the Piper. In Marienburg it is considered a particularly fortuitous sign, and some families attempt to conceive nine months before it rises ascendant.

" + }, + "The Two Bullocks": { + "name": "The Two Bullocks", + "description": "

Sign of Fertility and Craftsmanship

Classical Name: Hashoor

Ascendant: Midsummer

Calendar Dates: Sommerzeit 30th – Vorgeheim 13th

Associated God: Ahalt (Hunting, Fertility, and Sacrifice (Wissenland))

Appearance: Two oxen

Bonus: Gain one level of the @UUID[Compendium.wfrp4e-core.items.GRRN3XAKIpEVCY7z]{Craftsman} Talent. (You need not choose the associated Trade at this time, but should do so after determining your starting Career.)

Penalty: −3 Intelligence

People born under the Two Bullocks are innovators; they are diligent, creative, and can create nearly anything they put their minds to. Fortunately for the world, what they most want to do is help others, whether that means making improvements to a printing press or designing a better plow for their family’s fields. Unfortunately, the projects they throw themselves into can be fanciful and impractical, and malefactors might bend their idealism to dangerous or unrighteous causes.

" + }, + "The Witchling Star": { + "name": "The Witchling Star", + "description": "

Sign of Magic

Classical Name: Solkios

Ascendant: Winter

Calendar Dates: Urliczeit 32nd – Vorhexen 11th

Associated God: Soll

Appearance: A single bright star

Bonus: Gain the @UUID[Compendium.wfrp4e-core.items.mdPGZsn2396dEpOf]{Petty Magic} Talent

Penalty: −3 Strength

Magical and mysterious, the Witchling Star is considered an ominous sign by most astrologers. Those under its rule have great courage. They possess a sort of mercuriality that stops just short of dishonesty or inconstancy, but which occasionally causes problems for those around them. Whatever scrapes they get themselves into, they can generally get out of. Their charm can seem nearly mystical at times, almost as though they were blessed by the winds of magic themselves.

" + }, + "Throatseeker's Blade": { + "name": "Throatseeker's Blade", + "description": "

These magical Rapiers are created with an innate blood lust all of their own, guiding the tip past even the best defence. A Throatseeker’s Blade ignores any AP provided by armour that has the @UUID[JournalEntry.sLomXnc8R8518cWN.JournalEntryPage.yYXaAw24i93B4vzk#weakpoints]{Weakpoints} Flaw. This weapon otherwise functions as a normal Rapier.

" + }, + "Trackless Boots": { + "name": "Trackless Boots", + "description": "

These boots leave no prints behind them, making tracking a Character who wears them very challenging. All Track Tests made against the Character suffer a –20 penalty.

" + }, + "Trebuchet": { + "name": "Trebuchet", + "description": "

Crew: 8

An improvement from the @UUID[Compendium.wfrp4e-archives2.items.y7ki6uSBiFKkooV9]{Onager Catapult}, the Bretonnian Trebuchet uses a counterweight instead of torsion to release its sling, giving it a much larger range.

*Cannot be used if the distance to the target is less than Short Range.

*Cannot be used at Point Blank.

" + }, + "Trollguts": { + "name": "Trollguts", + "description": "

You swallow a tiny amount of Troll Bile or similar, imbibing and distilling that creature’s immense regenerative powers and gifting them to another. Your target gains the @UUID[Compendium.wfrp4e-core.items.SfUUdOGjdYpr3KSR]{Regenerate} Creature Trait. Ogres suffer no additional effects from this spell, but other Species may be less lucky. Anyone other than an Ogre who recovers Wounds from the effects of this spell must make an Average (+20) Endurance Test. If they fail, new flesh growing over their wounds takes on a mottled green or blue appearance, not at all unlike the skin of a Troll. This effect is particularly prominent if the spell happens to be responsible for a limb growing back. Though this effect is not a mutation, it is likely to be mistaken for one by anyone who sees it, with all the potential unpleasant consequences that may ensue.

\n\n Lore: Whenever an Ogre Butcher successfully casts a spell from the Lore of The Great Maw, the offering they consume may restore their own health. Roll [[/r 1d10]]. If the result is a 10, or if it is equal to or higher than the CN of the spell being cast, the Butcher recovers Wounds equal to the CN of the spell.

\n\n Domaine: Whenever an Ogre Butcher successfully casts a spell from the Lore of The Great Maw, the offering they consume may restore their own health. Roll [[/r 1d10]]. If the result is a 10, or if it is equal to or higher than the CN of the spell being cast, the Butcher recovers Wounds equal to the CN of the spell.

" + }, + "Vice": { + "name": "Vice", + "description": "

You are plagued by a need to indulge in your Vice constantly, with your thoughts always straying towards them. Indulging in your Vice must be to an unhealthy extent — indulging in food doesn’t mean having a meal, but being a glutton and eating everything you can until you are bloated and made sick. Whenever you are confronted by the Target of your Vice, you must attempt a @UUID[JournalEntry.NS3YGlJQxwTggjRX.JournalEntryPage.5w5YLPNd6AaU4f85#psychology-test]{Psychology Test}. If you fail, you must immediately indulge in your Vice, forsaking all other actions and duties. You indulge until you are insensible, gaining one @Condition[Fatigued] Condition. At the end of every subsequent Round, you may attempt another Psychology Test to bring this state to an end. You suffer –20 to all Fellowship Tests towards any Characters who have witnessed your gluttony, as they are repulsed by your behaviour. For each full day you spend having not indulged in your Vice, you gain a cumulative –20 to all Psychology Tests until you do so.

" + }, + "Vice (Target)": { + "name": "Vice (Target)", + "description": "

You are consumed with a need to indulge in a particular vice, suffering from the @UUID[Compendium.wfrp4e-archives2.items.anIlqJXFOIEzIOo1]{Vice} Psychology. Each time you take this Talent you develop a new vice. Examples you could take include: Alcohol, Food, Narcotics, Pleasure.

" + }, + "Vobist the Faint": { + "name": "Vobist the Faint", + "description": "

Sign of Darkness and Uncertainty

Classical Name: Vobist

Ascendant: Autumn

Calendar Dates: Erntezeit 17 th – Brauzeit 6th

Associated God: Ranald

Appearance: No stars

Bonus: Gain one level of the @UUID[Compendium.wfrp4e-core.items.mNoCuaVbFBflfO6X]{Sixth Sense} Talent

Penalty: −3 Initiative

A void of stars. An empty spot in the heavens. Someone born under Vobist the Faint seems erratic and uncertain at times; after all, they were born under pure darkness. They can be overcautious at times, but they can also be bold and courageous when others least expect it, leaping into the fray before even their bravest friends. What seems to be a fundamental uncertainty is also a keen sense of which battles to fight, and how. For Morrslieb, the Chaos Moon, to rise full while Vobist the Faint is ascendent is a particularly bad omen.

" + }, + "Wand of Jade": { + "name": "Wand of Jade", + "description": "

This wand increases the range of spells. Double the range of any spells cast while holding a Wand of Jade.

" + }, + "Wand of Jet": { + "name": "Wand of Jet", + "description": "

This wand is used by spellcasters to increase the duration of their spells. A spell cast with the aid of a Wand of Jet has its duration doubled.

" + }, + "Wand of the Winds": { + "name": "Wand of the Winds", + "description": "

The wand is constructed in such a way that compensates for those times when the Winds of Magic blow weakly. If a spellcaster is in a situation where they receive negative modifiers as a result of the @Table[wintds]{Swirling Winds}, they may ignore these modifiers for [[/r 1d10]] Rounds. After this period the wand is depleted. It takes the wand 24 hours to replenish its own store of magical energy.

" + }, + "Wanderer’s Charm": { + "name": "Wanderer’s Charm", + "description": "

These amulets are often crafted by Hedge Wizards, and are beloved by wanderers, pedlars, soldiers and vagabonds. Those who carry them may ignore the first @Condition[Fatigued] Condition they receive each day.

" + }, + "Writ of the Fifth Lore": { + "name": "Writ of the Fifth Lore", + "description": "

When this small scroll is presented to someone with an explanation of what it is, be that a license, a charter, or a letter of introduction, the perceiver must make a Very Difficult (–30) Perception Test. If they fail, the scroll seems to be exactly what the bearer claimed it was.

" + }, + "Wymund the Anchorite": { + "name": "Wymund the Anchorite", + "description": "

Sign of Enduring

Classical Name: Wymenos

Ascendant: Midwinter

Calendar Dates: Vorhexen 12th – Vorhexen 27th

Associated God: Manaan

Appearance: A stern face

Bonus: +2 Fellowship, +2 Initiative

Penalty: −3 Intelligence

People born under the light of Wymund the Anchorite are patient and methodical. They prefer to scrutinize every detail of a situation before deciding how to proceed.

Their slowness to pass judgment and tolerance of the foibles of others makes them kind, loyal friends — sometimes to a fault. Often, they forgive others the unforgivable, to their detriment. But when they decide that a person is no longer worthy of their grace, they are harsh, implacable foes.

" + } + } +} \ No newline at end of file diff --git a/compendium/wfrp4e-core.items.json b/compendium/wfrp4e-core.items.json index 305117a..6ba4f61 100644 --- a/compendium/wfrp4e-core.items.json +++ b/compendium/wfrp4e-core.items.json @@ -79,10 +79,6 @@ "path": "system.mutationType.value", "converter": "generic_localization" }, - "effects": { - "path": "effects", - "converter": "effects" - }, "tests": "system.tests.value", "sduration": { "path": "system.duration.value", diff --git a/compendium/wfrp4e-middenheim.items.json b/compendium/wfrp4e-middenheim.items.json new file mode 100644 index 0000000..38a196b --- /dev/null +++ b/compendium/wfrp4e-middenheim.items.json @@ -0,0 +1,116 @@ +{ + "label": "Items (Middenheim)", + "folders": { + "Careers": "Carrières", + "Criticals": "Critiques", + "Diseases": "Maladies", + "Injuries": "Blessures", + "Prayers": "Prières", + "Blessings": "Bénédictions", + "Skills": "Compétences", + "Star Signs": "Signes des Etoiles", + "Spells": "Sorts", + "Trappings": "Possessions", + "Ammunition": "Munitions", + "Armour": "Armures", + "Weapons": "Armes" + }, + "mapping": { + "skills": { + "path": "system.skills", + "converter": "career_skills" + }, + "talents": { + "path": "system.talents", + "converter": "career_talents" + }, + "class": { + "path": "system.class.value", + "converter": "generic_localization" + }, + "career_careergroup": "system.careergroup.value", + "trappings": "system.trappings" + }, + "entries": [ + { + "id": "Ring of Tongues", + "name": "Anneau de Langues", + "description": "

Le porteur de cet anneau peut l'activer en prononçant les mots ‘Parle et révèle-toi à moi’. Pendant l'heure qui suit, il comprend les langues suivantes comme s'il les parlait depuis sa naissance : classique, bretonnien, tiléen, eltharin, gospodarinyi et khazalid.

" + }, + { + "id": "Boots of Gucci", + "name": "Bottes de Gucci", + "description": "

En activant les bottes à l'aide de la phrase ‘La grâce va au-delà du style’, le porteur bénéficie du Talent @Compendium[wfrp4e-core.talents.sYbgpSnRqSZWgwFP]{Savoir-vivre (Noble, Guilde, Serviteur)} tant qu'il garde les bottes aux pieds. S'il le souhaite, il peut prononcer à nouveau la phrase pour changer la version du Talent dont il bénéficie.

" + }, + { + "id": "Magical Dagger", + "name": "Dague magique", + "description": "

La dague inflige des dégâts aux créatures normalement immunisées aux attaques non magiques et bénéficie des Atouts d'objet Raffiné et Solide.

" + }, + { + "id": "Child of Ulric", + "name": "Enfant d'Ulric", + "description": "

Traits

\n

@Compendium[wfrp4e-core.traits.VUJUZVN3VYhOaPjj]{Armure}

\n

@Compendium[wfrp4e-core.traits.pLW9SVX0TVTYPiPv]{Morsure}

\n

@Compendium[wfrp4e-core.traits.pTorrE0l3VybAbtn]{Peur}

\n

@Compendium[wfrp4e-core.traits.FmHDbCOy3pH8yKhm]{Vision nocturne}

\n

@Compendium[wfrp4e-core.traits.ClOlztW6hH8rslbp]{Pisteur}

\n

@Compendium[wfrp4e-core.traits.AtpAudHA4ybXVlWM]{Arme}

\n

Optional

\n

@Compendium[wfrp4e-core.traits.GbDyBCu8ZjDp6dkj]{Belliqueux}

\n

@Compendium[wfrp4e-core.traits.AGcJl5rHjkyIQBPP]{Bestial}

\n

@Compendium[wfrp4e-core.traits.a8MC97PLzl10WocT]{Grand}

\n

@Compendium[wfrp4e-core.traits.5muSFXd6oc760uVj]{Béni (Ulric)}

\n

@Compendium[wfrp4e-core.traits.4mF5Sp3t09kZhBYc]{Champion}

\n

@Compendium[wfrp4e-core.traits.UsJ2uIOOtHA7JqD5]{Increvable}

\n

@Compendium[wfrp4e-core.traits.9MjH4xyVrd3Inzak]{Rapide}

\n

@Compendium[wfrp4e-core.traits.yRhhOlt18COq4e1q]{Frénésie}

\n

@Compendium[wfrp4e-core.traits.IAWyzDfC286a9MPz]{Immunité psycologique}

\n

@Compendium[wfrp4e-core.traits.SfUUdOGjdYpr3KSR]{Régénération}

\n

@Compendium[wfrp4e-core.traits.8slW8CJ2oVTxeQ6q]{Taille (Grande)}

" + }, + { + "id": "Sword of Fear", + "name": "Épée de la peur", + "description": "

Le porteur de l'épée peut invoquer son pouvoir en prononçant les mots ‘Rend-toi ou meurs!’, et obtien le Trait @Compendium[wfrp4e-core.traits.pTorrE0l3VybAbtn]{Peur (2)} (WFJDR, p. 190) pendant [[/r 2d10]] Rounds. L'épée inflige également des dégâts aux créatures normalement immunisées aux attaques non magique et bénéficie des Qualités d'objet Raffiné et Solide (WFJDR, p. 292).

" + }, + { + "id": "Gromril Helm", + "name": "Heaume de Gromril", + "description": "

Ce heaume convient parfaitement à un nain. À tous les égards, il s'agit d'un heaume de plates normal, mais il accorde 3 PA et bénéficie des Atouts d'objet Raffiné et Incassable. À moins que le client soit un nain, Lukas trouverait peu honorable de vendre le heaume.

" + }, + { + "id": "Bless With Filth", + "name": "Infecte bénédiction", + "description": "

Vous maudissez les lames, griffes et dents de ceux qui vous entourent pour entraîner des blessures infectées. Pour le durée du sort, chaque Personnage dans la zone d'effet compte comme possédant le Trait de créature @Compendium[wfrp4e-core.traits.V0c3qBU1CMm8bmsW]{Infecté}.

" + }, + { + "id": "Survivor", + "name": "Survivant", + "description": "

@Compendium[wfrp4e-middenheim.middenheim-journals.GkT1arSV9rYhYvrG]{Frère loup}

", + "career_careergroup": "Frère loup", + "trappings": [ + "arme simple", + "haillons" + ] + }, + { + "id": "Spotted Green Brain Pox", + "name": "Vérole cérébrale à taches vertes", + "description": "

Cette terrible maladie transforme ceux qui en souffrent en fous délirants, cherchant à mordre, griffer et démembrer quiconque croise leur chemin. La maladie elle-même se diffuse en infligeant une blessure, ce qui fait qu'à mesure que la violence se déchaîne en conséquence de la maladie, un nombre croissant de personnes y succombent.

" + }, + { + "id": "Wolf Brother", + "name": "Grand Loup", + "description": "

@Compendium[wfrp4e-middenheim.middenheim-journals.GkT1arSV9rYhYvrG]{Frère loup}

", + "career_careergroup": "Frère loup", + "trappings": [ + "arme simple", + "haillons", + "respect des autres Frères Loups" + ] + }, + { + "id": "Wolf Club", + "name": "Compagnon Loup", + "description": "

@Compendium[wfrp4e-middenheim.middenheim-journals.GkT1arSV9rYhYvrG]{Frère loup}

", + "career_careergroup": "Frère loup", + "trappings": [ + "arme simple", + "haillons" + ] + }, + { + "id": "Wolf Kin", + "name": "Frère Loup", + "description": "

@Compendium[wfrp4e-middenheim.middenheim-journals.GkT1arSV9rYhYvrG]{Frère loup}

", + "career_careergroup": "Frère loup", + "trappings": [ + "arme simple", + "haillons" + ] + } + ]} \ No newline at end of file diff --git a/compendium/wfrp4e-middenheim.tables.json b/compendium/wfrp4e-middenheim.tables.json new file mode 100644 index 0000000..ac554a1 --- /dev/null +++ b/compendium/wfrp4e-middenheim.tables.json @@ -0,0 +1,68 @@ +{ + "label": "Tables (Middenheim)", + "entries": [ + { + "id": "Athletics - Middenball", + "name": "Athlètisme - Middenball", + "results": { + "55-65": "L'équipe qui reçoit domine légèrement la rencontre. Ajoutez 5 à leur score au prochain tour.", + "66-80": "Un joueur de l'équipe qui reçoit est positionné à l'arrière du terrain. S'ils passent ce tour, ils peuvent tirer.", + "81-90": "Un joueur de l'équipe qui reçoit est positionné au milieu du terrain de l'équipe qui reçoit. S'ils passent ce tour, ils peuvent tirer.", + "91-98": "Un joueur de l'équipe qui reçoit est positionné au milieu du terrain de l'équipe qui reçoit. S'ils passent ce tour, ils peuvent tirer.", + "99-100": "Un joueur de l'équipe qui reçoit est positionné à l'avant du terrain. S'ils passent ce tour, ils peuvent tirer.", + "1-2": "Un joueur de l'équipe invitée est positionné à l'arrière du terrain. S'ils passent ce tour, ils peuvent tirer.", + "3-10": "Un joueur de l'équipe invitée est positionné à au milieu de l'arrière du terrain. S'ils passent ce tour, ils peuvent tirer.", + "11-20": "Un joueur de l'équipe invitée est positionné à au milieu du terrain de l'équipe qui reçoit. S'ils passent ce tour, ils peuvent tirer.", + "21-35": "Un joueur de l'équipe invitée est positionné à l'avant du terrain. S'ils passent ce tour, ils peuvent tirer.", + "36-46": "L'équipe invitée domine légèrement la rencontre. Ajoutez 5 à leur score au prochain tour.", + "47-54": "Aucun effet ce tour." + } + }, + { + "id": "Brutality - Middenball", + "name": "Brutalité - Middenball", + "results": { + "91-98": "Un membre de l'équipe adverse est gravement blessé. Réduisez le score des équipes A et B de 1 point.", + "99-100": "An Away Team player suffers a critical injury and is removed from play. Subtract that player’s A and B score from the team total. If there are no sub-stitutes available, one of the Home Team players becomes a Free Player.", + "1-2": "A Home Team player suffers a critical injury and is removed from play. Subtract that player’s A and B score from the team total. If there are no sub-stitutes available, one of the Away Team players becomes a Free Player.", + "3-10": "A Home Team player is badly hurt. Reduce the Team’s A and B scores by 1 each.", + "11-20": "A Home Team player is rattled. Reduce the Team’s A and B scores by 1 each for 1 turn.", + "21-35": "An Away Team player interposes themselves between the player in possession and the goal. This either counts as Guarding, or could be used to cancel out the effects of an existing Guard (whatever most benefits the Away Team).", + "36-46": "The Away Team show more aggression. Add 5 to their B score next turn.", + "47-54": "There is no effect this turn.", + "55-65": "The Home Team show more aggression. Add 5 to their B score next turn.", + "66-80": "A Home Team player interposes themselves between the player in possession and the goal. This either counts as Guarding, or could be used to cancel out the effects of an existing Guard (whatever most benefits the Home Team).", + "81-90": "An Away Team player is rattled. Reduce the Team’s A and B scores by 1 each for 1 turn." + } + }, + { + "id": "Career - Human (Middenheimer)", + "name": "Carrière - Humain (Middenheimer)" + }, + { + "id": "Career - Human (Middenlander)", + "name": "Carrière - Humain (Middenlander)" + }, + { + "id": "Career - Human (Nordlander)", + "name": "Carrière - Humain (Nordlander)" + }, + { + "id": "Middenball Random Events", + "name": "Middenball : Evènements Aléatoires", + "results": { + "80-83": "Un joueur choisi au hasard parmi tous les joueurs présents sur le terrain (sauf un des PJs ou le joueur en possession de la balle) glisse dans la boue, se tord la cheville et est contraint d'abandonné.", + "84-86": "Un joueur choisi au hasard parmi tous les joueurs présents sur le terrain (sauf un des PJs ou le joueur en possession de la balle) a bu dans une gourde, désignez le joueur et faites lui un test de Résistance à l'alcool difficile (-20)<\/b>. ", + "87-89": "Un joueur choisi au hasard parmi tous les joueurs présents sur le terrain (sauf un des PJs ou le joueur en possession de la balle) a pris un stimulant qui améliore ses performances. Il ressent immédiatement les effets bénifiques pour ensuite souffrir de @Compendium[wfrp4e-core.trappings.jTFOrokjEHbi12rT]{Délice de Ranald}.", + "90-95": "Les supporters de l'équipe locale commencent à chanter, leur équipe bénéficie de +5 B au prochain tour.", + "96-100": "Les supporters de l'équipe en déplacement donnent de la voie. Leur équipe bénéficie +5 B au prochain tour.", + "1-33": "Rien de particulier ne se passe pour ce tour.", + "34-34": "La balle se déchire laissant sortir toutes ses plumes à proximité. S'il s'agit d'un morveux, ce dernier se libère de ses liens et peut soit attaquer un de ses bourreaux, soit tenter de fuir. La partie est stoppée le temps de trouver un remplaçant.", + "35-40": "Un fan frappe un joueur à proximité. Une rixe à mains nues de 3 tours démarre entre un joueur tiré au hasard et un @Compendium[wfrp4e-core.bestiary.7ihBjcHcewZ2Obul]{Humain} standard.", + "41-60": "Le temps devient maussade, les conditions froides et\/ou humides entraînent une pénalité de -10 à tous les tests d'athlétisme et de capacité de tir au prochain tour.", + "61-75": "Si les équipes ne sont pas bien réparties, le gardien de l'équipe avec le moins de joueurs quitte le but.", + "76-79": "Un fan lance un objet sur un joueur sélectionné au hasard. Les joueur doit réussir un test de Résistance facile (+40)<\/b> ou subir @Condition[Stunned]{Assommé}" + } + } + ] +} \ No newline at end of file diff --git a/compendium/wfrp4e-ua2.items.json b/compendium/wfrp4e-ua2.items.json new file mode 100644 index 0000000..04d0acf --- /dev/null +++ b/compendium/wfrp4e-ua2.items.json @@ -0,0 +1,25 @@ +{ + "label": "Items (Ubersreik Adventures II)", + "entries": { + "Sporoific Lull": { + "name": "Sporoific Lull", + "description": "

The target of this spell is filled with weariness and desire to sleep. The target receives d10 – WP Bonus @Condition[Fatigued]  Conditions. If the number of Fatigued Conditions the Target receives as a result of the spell is greater than their WP Bonus they fall asleep as if affected by the @Compendium[wfrp4e-core.items.4ePe5oNQakA8nJlk]{Sleep} spell.

" + }, + "The Jackal Urn": { + "name": "The Jackal Urn", + "description": "

The Nehekharan urn preserves organs, after a fashion, imbuing them with dark energy. It can act as a powerful focus for spells drawing from the various Dark Magic lists. Additionally, if @UUID[Compendium.wfrp4e-ua2.actors.HWnfxg0fYjkzU55F]{Leidtragende} recovers the urn, he can pull the heart from within and crush it as he casts a Necromancy spell — allowing him to instantly make a successful cast with +4 SL.

" + }, + "The Nameless Blade": { + "name": "The Nameless Blade", + "description": "" + }, + "Uncontrollable Corporal Expulsion": { + "name": "Uncontrollable Corporal Expulsion", + "description": "

The target of this spell suffers a sudden bodily venting. The target receives d10 – WP Bonus Disease Symptoms taken from the following list: @Symptom[Convulsions], @Symptom[Coughs and Sneezes], @Symptom[Fever], @Symptom[Flux], and @Symptom[Nausea]. The GM can choose which symptoms to apply and the degree to which their effects cumulate. In the case of the Coughs and Sneezes symptom no contagion is spread, the effect is mess and noise. Once the duration is up the target recovers from any conditions resulting from symptoms, but may need to clean up.

" + }, + "Vanhel's Invitation to the Dance Macabre": { + "name": "Vanhel's Invitation to the Dance Macabre", + "description": "

Found only in the pages of the terrible Liber Mortis, this spell is among the greatest and most terrible achievements of the necromancer Vanhel. You channel a writhing miasma of dhar, storing up a great mass of the foul magic before releasing it across the lands. The magic infests all nearby fresh corpses that have not been properly prepared and sanctified for burial. All corpses in a radius up to your Willpower Bonus x 100 yards are raised as Skeletons or Zombies, as you prefer. You may choose to have the spell affect a smaller area if you wish. For each 100 yards of radius, rounded up, gain one point of Corruption. 

\n

The summoned Undead are entirely under your control and may perform simple orders as you command. If you are killed or gain the @Condition[Unconscious] Condition, the spell comes to an end and the summoned Undead collapse. 

" + } + } +} \ No newline at end of file diff --git a/compendium/world.journalentrycorevf_2.zip b/compendium/world.journalentrycorevf_2.zip deleted file mode 100644 index 3cd539c450d5f19ab72a58ade946e66a7260d28c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 148979 zcmdSC`;uJ8mF{=K_CIs{42~!H+~!=w19`ei#3~Z{^C&T~*z*>C2O&pV!O9U;pbr zeKa3GpUywJGy3Qc@tcSG&Cz{+boArbA6?@YdTKUZ^P4~Z*MIsap82PL`e=5nNA4ZJ z94|KG)2V*Pr;G8~^w8(W)AeLEJKxNf3w{0T^Sh6(jLV~=)%1Mz@pL@dZl+(YdDnFG za=BSeNBP-&ycivi7wge{I+`rco{u-zM$^q`y55XV$ES<@+2}vEVZyXS2oh&1k&k9cR3bC)T6!@yqFIJ)W(m>!Z=bId9VN)5U6fI$Lk* z^qAE6bTxiC{c1G7GM*hzNBsZK)6J6EU1tJUX7kbd%9v-?{_1@8@icxvnKG;C=xn)I zjAzqp`g<~7ZKiAg8AEh``upYC`DVIZtv&7fo=Ug%d9HFYV{5&Z$#U`WWHLRT&A);S z*Y)IjyBcj5)6vOvJJZ56>H45warEoY&hP$d@#`12?|$z+THhJn%iVc2JDY9t_rLy( z-|)-xyZ5K7&3MMLzx~6gZQn^QcO}AZ7f|r!Y{i;mc3QMIaCAOrdQ2A5E+@0q0(m9J|C~l2;=kBY@*e4yS)})@RIp>G*R&gNnUTnSd`0wvXU6)Gnaxj)UoK~&)GjIb~2lcH?tFd#ZuRd^+wNcX7kya@#h{&lZ1zY6He#+YiT+!ri{O4hi0O-{+b2< zu9w>v;~6Y#8ci3xb~2rh@05+&&b0~iSuaInO>8lHIb|7V<5#n@?OBze)A1aBAN_W@ zfa>2YW}6vPerZ;KPXDo;j?UqJvF7O%W?27@IT_tNzImfxLH+x)pxOD|j~CC^=U*kqe}4D-=Nr=(>LriB<)4cJmCV0J z1uPe*ck>5#M!){7eDu&-XvOx;#B-wM$#S-ai>1aOw^S6F>|am+M?9JR`bT zqtyrU%a>yq|BZS5#rW)8e4Q+LNDE1e!R%Ehuqt$pRo;BLTF3BGtJ5`-6Y7)K*SA5% zqtTDc*<_}<&-oA1^lEx`4u@WYqgc~y4u>MMqxo`%O1|>()S~M_U%eP_*T@0CMF!a! z^g^gm$<+8X-_xdkEX6u|zC}tTA4Q8MiA9>^4S%m!p=LJ{>vi2$ST#52>2}4!*3)it z?rk>Ok$AyWT8LGY-;KuX1PXZc>CL+FM>*E$H}{u|W8`GH_+$C~Pj$;X0mS? z!Z14$62@5)^7y+yNVl>r$WwdSsN12@qcJ?VWh2+D)v6j+(avHZw^jR~&`|SpOv!ix z-Z_Q`KD|}em!}y zoG(wsdy?1H5(&>q9gXgRKW5je(Zm3}8U3<;6Uc64RCg-(7WJW>O*$RHu{P=63^u%MB%}tBpUf85MlnPM51oPZ z{tSk*;m}mJVDW_?PhhlQ1lB$L`FK0&$Sb5Ho5SV;zD7@$+r_chonx?n;Q}yGe=A$V zF6L@hvn2*H|20}{&+_k8C_%GTA=OQIXSUcJjUIh0BfI=6Nfa6=pRAZB&4F0LATfUt zJSevzKfxD5)5v;hK|%>fscX;geuTgEH#uDccMN+s`SWaXy6cYZe9qSIxnp4()}wod zV{*3EiPEv(MyJv&$5(Kr!l**rri6}0k7YfkCnwX%MkZI|m7g|gkKPq^LQd1R)5~l1+JXLl2@Qyq2OZmW5WlXrhyVT44sSdA)RsVy3<9@ZaSAiWv`l3X&_HQbmmFiU7+JwjN< z{AS-C({U~k+M@*Ff@Zq* zDiTd2CUn~4@TQ;l@m#a~V|>^)K7q2?LIFUu7{W!sQL5OU&{o0>QxSF&?f`Fv7OG52 zTn2>&QJAx09a2zO&u(-A9R;aE)H>hwb`C(}xm&koioi!w`8@oRsE1=`w{JOim*b{m zZ3dMo?rmiJk_f>{QY8nn3C$zsGpX+#Z-nF8^rwbkp6h0RwueLX*P z@xgpL_AjMjS~(_Ustn6UYyk#Si>(4`*Q8sCJZS$K?m~TRIxpQ2xW;T?gnUZ`IKs%* z&n#_(iy#-_zagIq&Jz7XBNjc(kA;9R*(DNE*-G$fXVWxSQyg~bW4|YMkHmq4P4J#> z!8aLXU>&jWC7AjYP$wOOvLaqwG+~LYK4*$(pFe#>5X8TnuKx6qbSg0(lPW{Z;|wYn zss3!ZzeLe;du}7-NunZ!3gfQZr>7qi*dq|UX?|~$_8*|eFsx=bpl;c&`WO(x?!bA~ z`x|0f=GmR6*)AC%#T>;A*b%_@IxMSvycwZgv|~8AHoOYCvPlJy_i7E$JS*hpt&i|{+sJ)!twUiVLHI8SMG@v``G1C zRk5LeznBG&y=qg7x-W&bP#S`}4eF_EkZP@1|OwP~e z62uQ;YY02gZ)l_ogrljcAI6VPKfLp zcE_$4{{oN+F4?Tcufu3Yc;)!Y!^N@uMW<%=(MDNV&O}UrIWp!ax`Pyz9EnWLE>Y|T z1J2BUEF-tL?H*n@T>KzK7p_qtu>`Hx+vh}ok#2qFbvG(V@s-upL?8?NW;C&6-c-us z4Cl=mkP3MmK$X$$Udd~XRpMC9yYo2CFyaPQ%H4w#GLF|Q z>7Em!U|^**QpsT8?1uIf#6{Gcbkb~IjL&D9-RGk_`%|+M^$bfXNuQCmkxh9{8q`1; zlk14=q30B7NL-r%8{Q%}8m2>2NO!8*U?W&8u|52^u=c%9*4tHeoJ3La7QeuQH*_A><{WJK<`>YvO z2Ezh$3I40cQ}_>0Qh=EhNAM?T8%Xq&or1lmo5|590o!ty*`>ksDtl5?lK7%96R|if zN>Wb@fVHudWWqq+rras58==mq*aCqo!O0Tg9lX+5>R@ykHis%Zq2I97RDEM`(AA8jCicKhM zTcMhk5k=$&v-7z#8p@Z9M^rQM22wzckr>wo8an2O&7|u+`Dx5y_qVvNqO$VO*Q5!9 zEX`CuC;v72MKy`Ip>RhjH7P%K^-sWZctnZ}4azRRRK}eNs7xyIQDP`u4!k#UV>gl} zLE-~p&e@X7fH?fWy&k3p2AOYxJBs9c&{4Sj5X4Etuy4lzm*v$RpB_v{x}k`mKWR!rH%vXZ9mrD7MSh>FsC(z-HqCkRs~Y*c}` zGzy|YCMSSdO=OvXt2`H3F~L8JD!VQ#{R~{EkUGSp%`U4R5biDiEAp z^Y&Hx92oO-a=#6vrhLsaIhnl??eO)s?ZY$aw-bajvp1=GCjR8aOJqLk54oU!KU$@6|dG_FQ!oEMR^p=AJ%qJ0b|E z3)vVM2$ycbXC?d76Km=K?7avF8&;#JP>=ffTLq7Vp$gpIo7DHtJRe_C#TSr;fK=s3 zaMa#3R4b|a9!U|B>x#=O)J}*)wYPkDL98QQ5k+NIW1(i6l-1xlJRM-KucWk2!qbsE zQ;AzD6FTvFlFxQNJz5NEgto1VBW_g04Mq++i`nY#vk~wF5~0F7v8VVp2j7g(`ByE; zyGB(B*!4yIB^3alY*R%nvs^C)F5}&TyW=cKYB5Wa zfo9n{VL+KO)~a+MFdcQ5;OA1YSNz+oYa*N^NP~r1tyJU}4ooESSqShL$=rzJFz0EO3vg;@ELQg zYcGROUQbkt84}&X8ZuB}6uP~;ko)AlqE#fKT1tkq_T>I+Rp;&R zM^-yP;AE(*3}mg5@o!p*8dX*d26HY#@2eq+i+0qK(QRYh-JJzMJXu$!m@3gx7RQZ9 zwqO&QwUann;1sTx6yqx$BWi~>{>k)Qi6o0Nu?b1#t>z~EQf&3xDe}4Kn3U+nX0}kF zWlnM=Js5+SqbW^1tN~JPLgXPzDPdpECHb){pM~sqT5L}#*U2=sB@PaqCbk0;xS*Wv z*i*{Z?WLMGaX-4v69?_}U+=N307fcfzd-O}ln|0=7tZD{g$;1L>wwJJ zks={t2~*`C<8=OO4#h3-+SU$UQG=>??+z%KeJ0KEmXUo`N$% z-jaZ|UT8S4;mZW)3AA?Q9an}w7-nuOP;BX0MQ+x!6;2BffCQ?JxQ26fFeb zg`45BR09>>MES@l~jWl^&Z(gpZ_pIQ$bny zJRJ*-ZvRp;RUuIHhGwCQU&}a;(3>tV%^TfF0E>Rcz~m@$KZY9ix=ZHuKdyHoB8N9)NWFB zGS1YXd@QI6ZS2O2sA4swH0yCraKu(KaYKYh9bW26?%y7e-M6on2kRTTK^+I!MX8vg z5HgC?9y~!?mpOE%^uu4TGYEFcu0-8ywJe?eZd3dJ;pG`X-%%Ey?i~=>p-X|}%Cfzk zI*$xt7fR|&5Sn>(-2=9RluJm`Zh>XPeiI5A@G)hU0;HD;Cn+YhbP+_NvP3QH;FP!o zyREc(`L)i@0L|^lm=B5vW+OSe8bR=?xWfQ_A}C+#K+4an@*X}OHTyzq1)39!8n-It zW*O@9sX;hH24NaHluebjH(t#XOcEl-R(!82KtpEAAr&Qa-bST_!NJd0qt9wQA}cDM z?^IMs-|!!Ya7v{D)KV-a69UH_O?T@Dyme!YWkfsi-;s3up4aP|zN3sN)KW~R%LWMu z@#+GsSiyto3r?qKfcticKR}&56diJu(8*H1B$q2L-#l&2n`*Uc~7zNax5h$6z9yr)jLG5Z`BLE}$^B2_&^?G~?9X{Ys-*AaJxK?(q>FGDj-ramVKzO84kYBBoB%)Ws_ z4l~V>7#FPIa9ib$8s4HV@zoJR*%`Pv()JADP{vFFjFnno&Y3a?^iczqsf6Uj1=)n#%>jNlwa@`fY z@`$r#adyDGt{xt^e&~lJdgZJNndEyIEL&GZYE>I8`!PLxt_VZURg19m+_QH5(kzXv z7grd+qb)LjRO`lIzh@V!u0iD%Y7pMDlC6(Ct_p}FWI1+IDMZ4|!Qm%?QEEg|2?$5a z_VuM^gR-*si)Vn1)lNC}lyB(tM~0=A&yk{+<2Vg}4yGh%Go4ddE2b<5ZweI=0~a0F zKzlc>2+Q_mEG}V52Q~e%qWykDY-slkX!(l$Eq~=RrI?@jl=msqsKpkRU^>twB2BEh zxQ<;Y&}#{?mk}I13hP)QR@A`{&Q;6>7qoh{@M^4+0(Y#pR2Cpjn6N9mwK`8jJ*ZY^ z=N!Us{vZ(=&mY1LumAXLtn);p|C7%~&-nbOzdppa#u1+%UE8nF&fh9M-ZI=hEQ(Jk z{q$G;$$H=YSr;@=w2hdO)c$&VrqZaN{@UssJ_a;=)m7WC-+5Y3#*5SGae<%=X(-zG zP)0$KmUkYn4Df(DYU%vV>!1Ew|E_G#-o@|UdDv%vSziD5>6lW;(bu!n7qHXmfyqkK zskrjpm;b{;g)A4Z|68SEN8fGVodATgDJ9t(@mpjd*Z=N=-ODZ`Fik;=2S~Ofi5LF! zlG+CFU2fRHGKc-|vCKOa4?=p~EZ+5xhoL?KogGv#D3Gm)>Jy_O z)ZcwRiIHeR5r(|f>36RRt&wEM=t-7Qp+H;I5S1}DfriY?L&;C!3Sw%49cZo4fxIY( zs9U&{FXGd=wzn*pq_Y5@XG!EIlJo(8hx056wm>{!BS3|gXS<*x2IB?%30tLnv3)G& zOyaaV(ML^QoO}=Xl`u*!Gb1q{pyP#YttbQM}UbTlw*RfcThu-qtSO)mRq%~ zcmrgM(zudF9%mYP4-=^KOm{GljifR=BtNGfiApg>)3^f`eewBdG6yVCeh4{qB=P(O zRrgtvxS77%T&E}m%XepV{pi*&XSj%G>*aOM$neShHfwr0o!=bIPnI{oQoNi3#^pI^ zUOyNe`S+p)?Mmj?IazbMxTB2gbWUQCk?3DAy*iuU0hOJyrib5M|KTa)MCfS$3%rTV__}u+5XJ*U zb*FkSJ42fmIM%?)fB`s-^#!rv?_7;0Ee)Tr6Ez%?(@GHekDE~VKFVAum3-A~3;W-^ z&6zEkrB6ygW;laHga3$mKd%nsjcM}Dq;dg}vrxnBwAIkgmworN<6lIr5q)%0yd zWuOML?xXjyMv1masJP}{hE%qZ;7&X35})-);AF-CxH z2fqcj>&Up&VX5SoVt!YFOk{)YRf(h{Fi!E(U`erNBeC=m3eM%c#9M|R==n$FFW{L@ z&+k;&9Lt4uz6HJiVLJYO)k9dcETO@~J2x^~e!LCT8>x%xK%^3^bs9nGR>5`k+wqFD z!h7lC51VshW1F&6ZE1z4i<9>S#E-_K`?ll?LBUSNhf-prR=E)k46^VcCmjZw-$0%2 zg-TkIq>L7F|Jj5(0s(^d*FOXwz3)!`K%5pNr0jumQT(S_*6~J%?xKg(ba+hkaSOpm zA=gT2xhSVdD0??zOp&dDuc>CF(i&gWxwpP+4M%e4N-Zjk-Et}_m+EHo?b15?E#i*Y z1`jEmz{12z$E5P>03Z6c_d(!qE2K!ZiT73%8E4V`D zPE|q1_lhQvaV`H!$yN4=!|W(Ywft` z0|y|z`IWb*@IWBUL*{hX0;G)N`6|Qs7Lt@5S39%SvSqw#BA@)o>McXOF9V1A%xMl) zQ9$+Lr<=;8xc~b)=|5z8Ufdv$Al4pAS|Ee095~a+2ufIF5(1{+9NJ(rHAJluu$mSL zZbrU3b$J%DGP*jMCwP`Dp;MnLL-n6nJt`U$8i(W74t1$1(bem>{~iDY?@!~HXer~= z<~cDuNEs_(DQvTtQb}I3&}w_j0My7hwFsF@81sD~%6_DYgbmqkt!JoanO52gH#9sT~%>DV5G>26Vxu*D? z9!EVyHAHJi@(55~WBm8W7}Tx;n3+U~dQ?c8bj`?n>GUJ+o&?ZZ9CIWWEPOR0`mF`{y2Y8^*s%KX|^c~ff7-9t~or+ZZA(uWh+33+R@2#UsNeO*qB z@GFgQlP=f%Pd>aKI(N{#^3^B(Fhr2qcWu*=isqF+p3wX}&^E3hK&qSsPI|NFr65*9wYa@q+_x(97O^U4n_Yh3qWsbmg&woFN{?A6m87$4rBoJK;Qcm~-h|yb zw@7n&m0RQ>#wfvfml9?$vhxuR%WAXW*^=~&UF+Jl)>Xg`CpwdZK*gyg>b2B2mD$Ew zkG6D#jp6}PRmokBP?Uy3u!w7)x?aO>*?i&d?UA~;ofTOP3Qn4Cj%tUTf|WkREwf-5 zk83r`dU&Ru?4AF=b41zVO{QI!^7H@!rZ|q!fY%k z8Bzu*v>_jgc~JKp(~FO(w=U-c2|t}FPBPn`{qZj+tMkvNr0wuYD4UyY)<<8i=l}lY z{Xg7V{`l@80I#fc; zk*azH1{jP^=W=u+Rp9N71hjTorXA@nO8IE?r1&C)Z89j}+QtkxGS(@OfZ>cBt2^pK zTepxAlVwh}Plf4P09ci1Wp>of0#MC$ykgL>UKCHtsYogbA7^`U>OSx9cjWzs6 z$APMLC@!8nFkhDtnSVEdz^N!MwSbv#f6)x$AXpFziq<^@Bj{W(;E3r)Cj`~S`cr~w zRLHWy5o9q8dapApDp*s$ky5gN7l0R|w3XU>=q3?_7+N?2T7xiDV>N*3yo=^fLHBXg zW~et?bnY=$)VzD+E&aTvJWeDV9%U4GE_a3SQrtHHV+-0@|F!6hFbzZaNGQLKw3D@i z!ceH4I^PL>=|pp)Kd1%@xy7ddBvVvEysqHr{{4XidFw_M9{S=v3cW`8n*={LFSp5) zvqI3}D^N!xKmxDP5T;?#J`XL5Twj;?s zz`Ec%TkGKle(0`Ie<8@2i{3|@m7-XkL2&S}Q`FcQRd$$Nz3I6T1LhQuBp4Yik9L6R z|9~tgL zqn=V12Qh*>jwmO@4<`nDpy#=vfJQ7?!u{9pzOp$cL$?I3lFuZ%Hr3FyzZH?-Mq{oh zuMUe?1R&QX`#eZU6=y}=I3$&bxdGy*L!{!z7*z@pRhYjHOdHEDBAPi!X{E*!p)VlRP_dj%PW{jIFPp6Tt%^%+7 zm5(tY;zV=+&J(UpHpSV#vVtl7&~$k5l_SK}XSXh-xQSC=(sR`{52T&#mc<>~RdiR= z?`v*va4sK6b)PfqzAyx@yta0zpk;U*Q=2DN;Op=QeU(%x7MDfn4$Mp_3IMpL0_F4= zG(`gsvEfvQ4{~Rj4dNcfZY6Oz#>jNWaOcJK+NvFc_-+RTfjcg0<^-uj6M{H#WUB{0 zc7X`AmFut?Mle+!KB=Vtx#EsN2?Izbj}{MfaPg7HoIkE4!0Ud*JiSQp{9ydn2>zlx*-@T0dhzevK{&x%m>Qlgh~&m`lDwT)atHQTdRt_BHf)Y zV5yzz-236&evMp?X)$G^1QDWVm`^fJ5rR|7A&Da@5tjtA)64I5N(6w3F!>XgoKtz3 zKU3==eDD|Jk105%o3W3&=q>1Il`UHSEW_5tk?&V$uN*)ukx1#W+9zczRg~0|t(w4K zVa-zoPMyry&rk;%mrF6+(k91y>4QP+9mY@t2g01ZAbiuZ7?Hg27q^i%8fx(QVVZTc&ey+aX?raFtO~Z zQ6|-1+nB0PU{dF4RpF*FSmQVygBUFr=}B{=B&%;dM6nGypbu3YEP~!6ylsI_;Q~pL z5^kbX1*|RAh0dbcQ&R^FBMXfwfX9}q%?{cO+Z`sW@fhb7yPM#uq*xu~2^UPQk__(9 zsxT2tqF_y#O^YPihY-^%H1YOTOA3T18Nl*ZKy19b!)kA`YnYD4*acXQDit z?{p-(aM5Gc%tsi(lEB}5Ir^qtgUOG}9966yzpF(2{KM9rWR4lYJ!J}ws-=PFzl9Ks zqsvalEjjZmbh~r+QLJZ&rAi+)Asbd)du&!+7sqQ8BL{0jtPB*%2#>~s`*?Sqd{ih3 zt4_*9uy}(L{|stfU`~nCb~cJ!aA3$LEse6O9;?n9WTd1tkxO++3oQX`?_Sq3Qu~fJ zS8%>K5ye+PNint`+33*UT1~r3zB%zaQau+Rs9A}qPy!o+m5u&&^u2pUGX`ou1Rj#W zf)Z;U@3dVku@Ncr-~Worwo=XpgDhh)nJWzqiF%$(E;^6C0EM70b=aJkPPr;Kns`Xb z$U`VaDd3ZG6m8OpkAQVjTkm?t)WJS2tfMo{R8Lnu+t6E5w1#BLK>0bk)ko{FYS9sf z;RB&putGS+0wy=<=dlqNx|Cy+P|}i}(~oXbbrQg4MPMo+168>>A(w=>!Y(?OEjYNX zs6(_8B_u%m?fR5eps>2$7#qig?CGlc8AtNWZ6W~iA8jcsaJ7Ib3oi>Pb<|UU4$vsF zYwzy~FNDo^TL=~@u3K-e`^~Tu)OS!Mdcehov5D&DYlXWTu@!;)dT}X91oUxoWyOGT z*)bbKpyRpFu+U%Qb3P4-ERVlh0xLbU${6jAa>nif+S6;xLFeC3HD_K)2)*|#C$v1_HY2paNbCU;Q z)6kAMmycKnc9NkXbWT4 zoNIm5ix680q7o~u8=t75uwIpu-C0H)@iX7l6`LUjXQT(p=Yx!K)B?Z-UtQZPNF2~2E=yn|Sbc<%nG?Q{U4&-~F5k_=I zw_ONds+Jl3J;WlSWexzXM9@ab@?O<+a9WN2(GpIlCny$dk==cgi`50N_Q`h+SJU=VfeY|}PUp^37iJZaV%r{8mI&~llGNrp^L8?lX9e?q9?Orct z6r5j`$>yjqmBVCv3nfZ2@Xy!WZc<(nPgIHW-MFY_FYq6-dyj>7`YU$3-LlPbPnO=5 zjh5uk-R4vK_TWi`pGmdFti1zsJ#C%UQj-Xs$F-x8&eZ;nSJHKZ!26YgOr%scSB zV&wq5R&c@Y&(K7A9UaxGC>a^dav5bp&p_zU&YlK+A6{Vo6&#! ztT_???Z}#?Y{sbjM(Is_GO2GXhdyRFxF7L1jh10~>0i+_-nYclKnVNI1U^jr--l`) zyJ#WoHC=qJrROj;s8^dMZ@U`YpMt~G$;nO2)%q58sE$nyrCDh;;})G$z>MrwXY=I{ zH!p-Q7*z*o<%%T}T1dP7kv8m%fci{BlJ3rMn;Pv;BW1E>rV0;)SMVai%}k*pKq88x zAb1vK9xmvgD$>NlrLKuYgrqUhw?qWx&M^}h=iBjg9tEGH)tGcj6}@1w1syOp(-S?f zenh$WX8*h(*{czYxvYHmsa~g0y^7rwvJ|q*@yM|twjvi(;*^2@fC;9rx{^JNKqNSr zNIs{#_X-a*Rpqc4F9;+9w4$;5WixvyLVMZk52Hx9M3bQ9e|;X$>p-+oylV-snax22eJ| zs!w5G_w5qZd~r|CK9kjlcrC#4ff(OzQvsF766rhS1Z2|c9Y!gw3DTYqbWG7pLp8Ik z3{yFApmcg??6xcwBVRDg)mysPk7tb)(THV?IBIRnyfeb8Ct%ziEGVpCDiJo2|{z`Q^r*sc0zPIQ- zcDpj3Iw_)F6fsuknSfeu_ZSV_-lB#(tG%a`YHY-IA=TcFT>vUvrc8f}WCkQ7-rL#3 zIyT%oUA&x8Z5Q#KOYF)6?ggvMNxk*n$Ey#j7di^BhPq|^^DcxLXp=+gGJPU5d#ZlK z^+ctF$%j3T*zuQ0zAF1bIKc0|Mi7Q1G?j&lCn@Z8POxTi>X0*mcJK_BD@7C?n7b1N zazL|%Xj_1ofRW=HMIjaR{*Qn-Iqf3kw>yQ?VH_1hgzK0j85XL;5QlUTwf#3f?bOhF zsWYmAKE0i4=$-V~)4}lo!bliWg|L11=he?Y{p2kwty^%x(wBicG+OY>u0AVB0Gjk# zsBp;TlDDhQcEr2lzkcAV-UEknKI{h8qDlpQ-%1jA`V9;0(hvlrfqjr z&s&ChC)Kv6ehiN>f61J7m5$Lo<$B?7iPd3XBtqDV?)c9?_$c-zkm|+l5A&l^^Sv{y zD}YSAyj+}bGw7PGZOaSqgS)%soB*DD#Mz6UAv)GM3wyCLdB3$h!^joeRb`qh&A<*OR#%Qs@3SXhXa;HZuIp-+z95+jUixWyd%MTBJ(C%C%=AtV%-e3mn zERSiz9*!;Cx*PR+l52Tu0Ih~3r~qa;PMZlYR_rW2jHhMgj1Tcf4h)C5tLxM)(fqFf zlAx&akE*@$g8&g)I-i_K+(~)Z?J4rc} zrYxT=7yz9W|4jB^i4l7Vd!+5a9hwSCT)f{YD>Tzky;;l5?)PZg@E>Z+YsNMQ+Cp?ppEZlUQo%;+{r@zDAD^@J3bDw7tGZs!tTFt8>^ z?3?om$RP5H5ARGwNSV-iN%MvZCH>#ylxPrm`Nllc;XPd2=ez)6(Xl8cMf~aur4f>I z!IZ8as+5X#928Jpm#6rp!w<~)%}7^I`0fc5MxO9Q&y<9eDmk?+7K#eYBb>}D*E_|Z zW}#g!br@f_GCLwwtF#J>`c35iB#czm+{D)=9JhJCJbvvzR{rnfnrw4d!_tg!!lq1D zsya^hd~^IxKTi>OI6qN32Y|9T!?ZeR4_&wq!m*?ao4P0;M! zD3_$L`0tIic^l!czcbYwWW8~dI`Fdd?@Df-`6bW1L*+Q z!sC)K`kRvKRU@J4Q=_1>2O}t|J)RH72rNNb+gitkE!M8ZxrzdnG;v*?BUyQnt!P&h zB+jw@w|Sq}1UG7NdiI)7{OIWmVv~Qtrr6{&1EGbexN=OkOdfw<9So1H&I%d6Ed{8U z_(FvdJ+v3cg!4^~gOBF=+rwq~JWIKhp8fSsuA)0c|43n6?2v4BpEc>2HyUuB-~9np zQjKseYT^KD)Zxi`DX?F!q&e2Lij3QBZd{|qXKP)TL6k>lE`%7!lx00M$ckjuxYoE~ z4RJ6$vM*{R+aaV1u5#QKE4#q}PmklS2lTlSoQV&#c}dJ0@;jDZ0|dbrTsJ&5ZzN## zR^Z1*g>=}(iV_5(ibV`WYWEW!-G4gi{}!w}fRj<3oY*ZO2TXrI(%URCY;vPNSkfiQ zabgnO2;9oYE6RcVz9(0CpZw;m^ApA%dZMi`$}U(!LFTomf#@ppf4I%ZXl$u&u{W27=S6?wvS%JDm+ zRRNT}DwTbc{_vd%tUNXYk0Z14>bA^#hz-RS3eGbi(IhHma-u6!t#vFIyA{&W(Z?@T zq;>vPAz*jth~>xawTE$fFIV-#*beP0m2;}*u$IXz^j60kpT!dJ6`E3MQO;4nR9)8& zhd|JUN{v@}7F(@f^6XhVsw-jaVDxjgKcqz(LEH~*mtvi$zi^(;9u2e)_jO2UPSI_z zA5Say2$1`@Mu1x}LfsQyA&`n>UF6mXLd*9tvS*=HMA5IUlJQVA^xKE#LXTPlt zv@&RYdGC2TI4+P%lhNtVEMWe&K3>6K>P>{89O*J0ShSFGUw#zHZ*8iQx$N+4)Cd=_)gHcuTKXQAy;#wvVsw&p~!iRwfTIqOMXbS?G>i5#kvZw#CU2<8Y4rS8WV2$!-i!ylQ4nwq5JE zh&D^50I&6d!GVry#6j;Ot+1T!B4&UF(f`z^$eS63O9}SAX*cIaT+CcV3z0W2RCFv@AN%)37@!@6c$gS)d z+mY1N`&=CF@{uSxZgN+%_AKjV9w=6B*dmH|Wv$Lh4K8(xU;r90WDd_Q7NS`;8|{t@ z6V;EGOP_09%HDlek4lc3tt@x+tZT&!Q4Fe&TS|gF$j5U|jx4{5!&pp-#uhMIIi}$- zgm|Jm8ONq&`sD6Y3f$eXh<-wGcu~rm<(tT-3dPi)XZqt%9^$tc%~t5AYhSeo?Iapk zSQla`*ksAto}Qw$5C^F;cqca+HrG%1y$@OvWJ5uDt6JEoX5U|ki4;jIxX?4sYbni7 z!)>tS$r#j#Uty*=kR>h>kJJ<=bO1I<9hj2Z_T>3aTlM;EPfy)LQEQk^zYq{qHLGl= z=c1zfoxqdM2bY6Dh$IhJL+fK@;0P7Q;^b1zN0FzBlq9;WY)7@JCg4QPexl98j#N17 z2TvADpq*zXKmjFo^8)7y_2;luNOy2PyW8uzs`==CP<4AzAMgU4#jhEa^dsu2OP+=< zEqc6teysip5^b1)4PmKpL_KQ@0MaoP)$21Wmvp3#4&D(_hhz{_NjG^Mfn*wIDh;Xw z8~j}gly?f$(IjzDRQ>tvI{O`vPiKs zeU9;rb0!SvtIROG^_~varJLP?`-%?STjh@8goku#bmpIeCylkC>I-fqTd*dLm{?g| zH7Z}JEWjbS3C@j>3>G@Poaty!nLehk-$^ku0@^5aUPQh;IVPNzo@0aw;oUMQHU%Eh zwWHEO91`)tds{4YzSGOSB;dZ(u1!M&paT+B?>+>H#?4EpTeMl8`s75KLbFsHhSXPQ z3UPm)Q?7GIOoAm0NU-~?Eop&%Y1DH^sG`(@bC1X4=bY;#_fd7}N{wjxN!I)sH*~=B zHq|vTM}a;aOI(ZqO$(5LKbNcwoqPfx0;#7H0bka_f*_;F9C&O`Q}r)?GW{9VCIAa{ zh(Pj3r3kzOy@O?N)w)HB2pTppy&aen^< zT494Xyf4-jfcAjf@h;W=k2n-t4s8^fX6{ZAR1t@Z$SmOpvt5*SN7~7%M&7sUF5-II zu(QS`Aa|^WF4*qdwi&G|0fLQyV+D|;H*~uh3=@YIf%)dgxyf)DsO-|N~2+wl* zE<0uMSsV*VKq0TZl3l7knWF1;Bz^9RZ(bl2Zku(DVeMg&Bot?h(ms}lgXKl|&cVmx zAyM~<&v&i3`j^>-a*4i@s&7O|4zEOpIq(CSnm`zx8RQanOo-wm2Mg()>+5jheU<|n z>yl!<0x3sxQ4VqSR;$PJ?9c1z95IKOs6Tvm<>48{{8aaxsr!^Hzy8Dgq=kp?G%Hb? zMuJQ}GqgvaiIpM4boOW5WzbqFDcqH>IF*pH)QN;6erD&vG)rqfaryEkFv6wLO5FMq zT*Ntt!bU^S>UU|RF{qS9P;>Z0$w61HBC%GKafL^Qa#eR>c*sEMb}wE%m{HP0;n_>? z!i3up>~jW^{n{VM`iCFYV@(Dcp|O@TT_SD%I0ot05JK{Vg8R*z>05%K*SK0)af6LCv>pE&8Sy!E0D zx}kP{S8BI#p!r~j@%&73+Q$(2csBn^CgdwwgmP+Pg+j9F5OA5y7TDwjf`CpTs-0a7 zM@5HdAe@a?NI_5Rh@<$CgA%}@Qzsfc3D9C3u`Y;}rVp!_H;s*bC{!Jesmxl7 z`}hk<6VIQk7QbD-tBpqGv<45d1L8Ado>guOTx+1EZ|qpCuPa*1UIg39DH2?QLll(A zE$Vb13!b(PP8q??l zvdZtE6}4yv^q*B6MBnE#K#*h&^`?KDHKHn_PyOjDc^8gNhV~ySN|8Kiz;BCP1De@mu=J9-KU@V3R zff;)B2O$63&kR2zVyujzav5y%ciZ{A0;_V`{hf~a-kWcTww(mG?m$--J{g~bPSH@f znudJ}jXjx7f0j+whVyPpfNbfDOD%pmTVA_{EyrZ%9L1|inQDBRICI8EKX-aVuWcNA z-Ioi;5*4c9Skm#4*4v_cKwBHOI$579kG|vG{0{b#F(UcaKE>$w%lY~*v(xKOCoedk zM(Gw_zgjV%5}^S^;QxtUEX{5U3`;;onU-}`l#@AMR8FhpHKpP_9}bG6|8ySl*;xM3 zcyUGGXAM$p0}7Q^7!vqCiE1i<^(y3$r)89drs*txuM@FCs@>evdyYd=>nLT8?jzf3 zYnpq;qNH+O(%8o4wNGovdvO#e4hJQ$YE-}`>bT7ZK!4vT3h-)oGVkO63xC5Jcbou@ zkHcbtl3&m-LhOs~rBAkM%@ov)U^Swvf2!rbjD&C#|I7w*(Qj?uKomijzSyg3CdX)7 z6BmUXn~PjZ&=0kV(yRLm9LmA;68mCQNF0dF^>oG>v5ZFZGb+(4hidlssnYWSU5@f< z_hmujJ$;$l^;|3k$78}A26NWT<0`gj@VT1sD(G;)qSqH4a3!9}3pcET^28jOL6wz0 zz(B?lm;rH%mdXXAHyF>L4 zp4fJ9@h>FH$*bI$D$OiZcI?F%NB&1{a__k|4s{QGP+YFeS}_0N%3E=R_!5gK6j3l*z2}5A zP_ZI5mHn5)(#_>iVT1i-_p@X8P*Dn*BX2LKU!jD?^A}LZApm(iMHl3q)jPyR<1i^r zPg+Cyer*~PEl07(Sz@*1I_IDM+Dfn1^oK$?fAO~@_W_hriXr>JYLgHO_XwfvZ#@$;{w27oB3)S(&O_+bE?1;U2%G|+rp zs=|iYU4Sh353iw<#6KeaRU>7GaSafOPZ9iXYL*_ab#$i^BS1p4^CmGSimB=W&7oog>iJQI2Gb$=sQ-wKG!>p1}Q; zm7-q1?mDuC@?zN7&SvN^@K%3uF==tP$;rAnQ3!1GVm9Zld*v2L`NX?D0nncMu)uq= zHE{%NcXWR%ew3bYBKy3x&9oZgaYZVvL^$A1yt3{=9H_Xfj7@Iy!&gM6qz~)<@Z}x! zBvlYnKvJ6Mr%phMIkW;>V>HLQ)f5UtKC788xJrok+oE6-3Ra8NT))kMMY=btBH`9!iaFn=v2nV2t$XEj2k&)MPljI0!8${b{?5B^t%aQBsh$gSwI$ zrOdPsG7CENje01#ZbcT6X`7{zDbe*#P#$j&)mtbL_Ne^BOLv49g+K3&VnTQ}H_l`b zIKj}T8M~y3I6Fd=&XFuJoLVu{Jy@IAcI|y!>r~2B=gau}zQD@eEJJir-4KSkey_$b zr>WF%jOB9?DXHI+1;mSrd^lV`>*hJA=JZ2W~2g4|7ca!2I~SKtP{lfV4Z10f9v zDNB#A&h?ZzAwqSaXdp<;K;na^JQMMOtwV?rQKLms=jvF(9Tah#sT!2ikE5qAS`9;u zT<}Mw3AXgn5;)088zrf%Q(|1T`0FBQEpVy#i>s1k_SUvE-N_G1gbiNq`3I<{td7@S z6o8g0V%4FPXx@|Uwhmo98cL?5`kT45R~pMZ~XoAiZ%{0Mr0cnKsS5d4nCRiqdrymucA? zs0wPczQYJPy`H(L^oAY0d;62?fA}Eh*ZE09l+>0?C>E@w62f?SD0iFMs7~~)sj8|$ zRs@30^h)6D&L2QbpuZdz)tP-E$YSZX0fLJ;7d?rgnl>qEvV>$e7(zE(z=!}LW3*ne=>`*Cn zIJ65oW-H6F{l$h4(HxH>*^`Y(H zK%L|~#M<7$a?T17eC|X4RPM+Kx55`~o)7APCn^t1H!^_XeAkycVt7^L(QN z4!kD+4UU@>g`GzjNIDc_S8l3-)DUltOx%{x2VjaVKyqFRX!0Knr0gp5qfcX0 zM>cEd@q!hNoQhJYa}2Z1;{!8e*3^i_$~0Ug5(p{JX#1wOTBuzVC;sWvoa-?N@ub-w zFHpNaY>mZ>S%&+$gU%?T)xV>ty_WCC6&}(SN*JUl$(h|P6?%}g#yl6IK+k>sSBi#y z?4mi9B;`>y&epakLwfjCKx9wM7sYokjiPwgQTpH+G~=E6g#5`aU{v6JRTDTY1Ua}V zP~D0noC-<^HPv$THlk(^YQR*cizVp3bt22s^p*H+w;Cw|Bd0hoBGGPCLH64In8){m zI-c~3h?_cY61rb z9o){%lnTke+4Nctd`~HRrhA;ijOj2Jj?G;-Fq2?4M$aD6e-{9$~6#ZqZ6)x4Z zU5;RneYXXV1$c=6?(O({@^R6*6@P|G%w>m|AupCPB)gi3&cKFef{b>>>{Wy@o2%t> zqn@LpM1&lk-1^Cm*#(8 zj(I13-A+y4!wJPWYEQ@;@%zk9K@)6;%gE(h3p}^JE^>t6fFx9qEs~dE7uz>PkEE!G z=hSRFEPxa?q2xp-=irFS!794__^Tp=-4qJt$zBPWh`z#U1@7vf3iTpo&OfSHh1`FM zrSbBxE?6378$mdRBzAvP1YcaZYWj4q+1yH&<;EL*fI!KAT_=` zxKXn0>;6#&pE@xLU^*2_^S2p@N&1QfNKN#2L2+dfGG)X=eu@s-i8vC^fO~La`sFDq zOGwRTL6@MLg`F_6@9WQ{S@?F*H05X-m+HTqfw1WFvB(qaH#QdOY z$6%&k=Y;B2`8}3W;9%zYktW$P~#q>*WOKiJW z*VC_hk|!WL0(76*F%Ytq!5~_MG?$(BAXYfU2RL!8B024(FBB`rdB0|$v~${BV3n}~ zYXWKsv*hWygoMc|wrGu2LfIAGO1Kd0MS3F~$U+~jL`hZlzl-7sBkBW+3Q0dEeTf+3 zZ*bIcN+SgAt*D7$hhXWlq;gg&fLo%~3b#aP_M@vmR6byGZRaGFkUY6%oW5I&F z6FVw$C+EM7q()^d#1ikF2wjZzudkPauk%yTusY@Vdp+m~$Wh1E7UcS+Au7I%Ef~fW zJ6P~!TJlwZlCoPNWN*c`t9X(_V?w&N)3NUb*rO}!?2LM>V{L2jDiHVm%gs2K;ZTHB zAey#ao*Y23%r8s}AOKFo3JFx^p}A^*FaW`Gir5LI78fD{o;3i5ZzxNrj{6isqlDGu zgTn~?>ldGxvl=hQvWA4zeNNIs8RGG#%Jo-|rolGArSiD#CrW|qU8!8fW>R736sN-mTpPz|Igo0^ahTja8m(TI^@$OPw+0$XXJD|Tb%*g3H4tP%NEv? zIO~a47ansu!;^U#ara_)oEJ>{CZ4Kv@5s{hgzAh-Pno*Q>>ahu@>)cp<#Qk$)tG_r z%$Zd@-sIMt-!&NHfg=5vtR-%1-wma776`uH4JS)DRZXq}f$O+(O7zw$sn*W4TjFl; z{|*L~nRBtqh28NZjWiOFC~{u8SBpwKpb$^aQVGZi&$b{Tl33~ zc(RA$?mk#jU(%Dw)?aW#xdLWlqM1j+gD;gou#%Qi4N??h#&!2BUJ3+N?pmVCg%#!i zW^qxI(>j~;AZK1QiWJTGAT#u8;644(`jVbJUZ#%2XkjuC0!eMcinwIDool*x%E7q_ zLHVFi?8{U3gTEDr5+4|3Kj-_%sKO0uC$qy`qNV%|p|Ms{V|8YCN(m4KgI#_Ucr&_C z)UlnRKIpbSP}^@n1jUXdeH#oA>|vJB)}0!;Z9tXJJ2#4^X~0UBmYgN-K}VK`>&tgpjq}~wSbI)RVh~;=Wo3D4ja%VKaR)1$dW48 z8A1*%{>`q^!8?)TQ5V(i(HqzOs*0{d-X))lA^mHQl6-*qC1NKYBf41|n?4~eh3fx~`^U%{QVKOK)Id8~eXkk|rL1ttQHtpgHAX(O(v zlL4V65}Y~6U&d=xj$s z1vm(MSF+GCn4)A$Jg~nsts_bGcq}(vSj0;bW{)e!-=xEwKQ8GT4V+y{$xX%1XxkdW z_jx&2@(0qiF86BGDkB1G1Y$jX^v`=AU!t?cQ3mkvo>`>IN+5_a34($%=49j~h_||5G zh0$L^ijD=T7M2GeJo)tIur#5gLe5rG@HV28r6ux(mD~0&Y30%V=yXvg!-8bh$wo!x zZmHcJ9oEGvop3R@w3@wGxzk-1z#eIx2cfW!iM#8D^%PQ$^ps)|WiGXTOb%qNRzFKE zZr&K(%NmQQB`3^~&+4QNsy9n@Mh)m8mcJN1 z<=7{EDY~k9`RmGaboHyT@Dc)%9BL!>H{09#D>k!nx{8WapVyZGP;FQX2BVrU*Jsr` zaQmL*S6K!nH4p_Fp@FHwS6pzVLz4&OeDsS#gg<>mL_~GgU3BJ(-)`Pi2$-C`Q}*7> zix=pO2HlNShZwBcPNr4InD44sr{Ylci{o#VQDO;o>u*-N=?K*RiIhirA$-WL7gnro z1_U7k0`LksP5D8E+$ddPr0TO`dR0A3l!q8kol(cS;ixz!W9K)#RjXmB1#E4Bi;iiF zBOGofTp)=@_*|m`gzcws4;*7&-YO!8rabHcCKM zM>Wbdc_JNg2*9D7OC7c?OkG@m8X;yZT)9I`*-n1Dn)kX@9X}Z=rs47%g2p94sLmqh zEd#}AwO6Iw7n>-0p&ERe5J&P#RDOn=8wz-T>4y--qQp3CV&@^Lc57_0!t&TfmS*TP zhDEQ!XL3rqyh!s@n#w{$aKaH6#W9vv4hP9m&9$wLEM7|ShIpKs7&zobr@L3ShrEgW zpThW#jfj0ki29H{EY^=ri1-s$iV!qDLT4pRA6zlFeNmlC(3+X(vNFF1W>AKquRc1o zuIa0M&t%Zy{;ta0D`u%8W2I%dT(#`pE@4oK9bkD`s(LmV!PgP+isfe1oVq56w5T+e z>9Vl6=sagtaFaHWt<22W81dpGb#{xeY>AVavr+pf&A3xpVi>>zzeY#Zs*AakY3Mx8 zx**EPrgF+I;>J*L$moNdZRb8##KoN#tu;s;yQ+A}W?uUSPC)6o6l!?U0hwN zTIJ&Vs=E*im=R&u)he5f2d0~++B@}x&I5--HLOw_B zTqoKaN-;ATdj$cCDDXdXm1~DB477mI61i6}hTdCB9Lw>Cvr{+A)vfQ<;f7(r5lipz zlv!U60!NN;NC%I!<%b0vsxebl1!2Lto_;%kefcSej}%rZEQTro(R>Rst|yDB0>ad0NSEfxRL zi@mKc=9{;1Ua*>(mdOeuAjLm`po*~PiudGe=m&I}^m~2&2r5Rf*2nP?2ImCOy>+L_ z7^qU42`hKN6f?yt3&7@94i52)y%!pLNqP)uGC~a?7rf}lDHl}gd9rbAp+3^leOHZr z`-dZu#JsvlzXKnkOLK&1A)jc_0WZRLIvrK^^<9B?5^l#_^qh0B6W8yU`swJ|k^`)( zKTkJ12O184i{N7&`@;-Bz)nL;09F82=}2m&sN@cWz>;0yw3t2Ltru)LFEk%EL3$6_ zwxSVEF15<&Pe+qe&~=u%=K_FCoRXKORYpPd#g7E98U;<}f;8GPMN8p<7j&3YR8A0U z@gG(eExRnhi765IamT9?WYwh5tcs*$73id*XF~}VTAEjkzG=W|#o3H&6a>3NN87bW zjDn7cND~DSyff>2c(ovuo4Qby1zqAK1UJ7ZE)brj*33hZSYAk(`Lsh#;)y^pf18mRuu-HxPDWeaxr z0hY4QEc&me09O2K&^R)RS&$(U>Wdbm2Jj`0<2^6qWf8h2hMYRP+R!Pi*wp9+^r^_Q zYOm7gvwN|YLT#YPFQ(AhMWMZu6KZtJ(cKccvJ$?C|EKUQe8!wa7o&u_XY%X-^hs8s zTSXfgN>x|pZ!f=u?f^wJJ{8^?wk>RHkI+6cZz+>r<5Zk|o}uPdmJ?|6ebk)Y!D~^; zo>q)Cr))3#Q@+m;y8GFiI-(>Xnm7X<<$xMnvLNhh8{?ciA|}69%^{u zM|*-f-YAo1lHu{W`Z8VZ2o5l#PC(%~L49iv)qNBAu1h+ZRqt25??dqaWJQgN<3zxY6`D7_`td&OnyA z4%aDrrIj*w?RgO{loT(CK!SOkq!R)(FcMt=p5liCdsJX2Lnk1DOAx5ZpKb9aR|gs5 zD{-ET1$G8P?YtB*eP+X(P(Tc>rZRqyV)m^J21Zf7o zN7r3a0J-q>PIehHN%^uW!^kV^B<#w}t(p97bd7z^`7vdMHK4!t_IhX4E`B#Ne%tF; z;}c4>PJjCAy;$0K^S4o=&Y`Jq$(9Q)&?0)2#HyxGqoKqL zu_I&&KI2r+Y)-bomKY*PF-J2IL7~E-PEq2v+Ecq$ALH~^xMmU=r4*jd0DHstmLYj- z^31O9A*)D-D7Jyu@!#jP_lY71umS%T>^{nLRI+bv{BTH1wkA)>9Kc}#!s-#Re<3z+ zlhs37!m!3#Vz^YF0ZjCXJ_rwY8*g&w$YOncyp*F!;RMNZ#zB&(j!!v42m=Q1tJ|f> z39nk~utfv4BNM4sJJ7a^1I4Sc3S8|PYoMc+zu%VbVdubNH`kZeGd z-?>eog#tu~dQLSWKFkHyatjf@6grB92=rN>CJUhKbRp)z?;;adeqKSqik4UM6_Cte zGzzM&NG}K5yW38&sD)A6uX#wn{No=#TluQZpMFZ~Bsaed$^Wo6{VuRba98}dBn=vc zPWyQaPB_8oc_k))4vl+=I z)WvTQ89AA_;D4xQ5?l)#Dad~!PsmWwXixE7W`r27XJdP8fCGn@g+~gWmc_5e&~1|9 zwfNiS*DAhnd>35hHCaQ=pNf%+z5dN7pe#564x=eTaS}@_2NM%ZQE7xLByMGwOJmu( zKNjOVwGOZKHD#YVN;WCV5}@vv$WrLx-2Q?YflO*^0hPV6ZkkeDhOrhhINjM`?NtXj zhecKQ57?bU?l%z(79S1vvyT?1{T_zIwmEx3C;?Y7LwCN>W9o-qgd1praO}Hzs4YK? zdzZh>0=6h6>pKmwVc&IWI-k=#kVvjp>}?Z`JrwGOH^aPS6pMK^s8d<$)6clJ^MCCf z-nNsE2L3>#5!`t!*M-^xB1R>CcmV>z+(?F<)ipPcQ%M|}o z5lQxBu6DatMVUiR0y(3#Ge0$q1m_T3kSBjCty6D2%3t&DbegS|G`r%bq$WCQspY7} z>8xhQ@ePu?g#eJq-O64CUu!a{f11hf-IP8vqZiz#L|+Xhs3Jk;1uhsxZm@s zYw`!z9-y9c2)#1@7O)@?EFmcu#I@-TLY@`7A|iUF18IzuA-t+m2sxfdssi1*8~@t{ z=@%f&kPS4y7RXjY3!5?J-yM-*Ht-IV5B!Pqp|-Vfmwr(p2*g!>j$g9-onXnXs^lqj zpd?7<&oMH^hVf2a@uXnP_-yMkTvE5Qv)#=^HA~V<{GC0kM}8Od2412hwA%vg(_usN zz*Bsu3qQN{SvIVUOESE(9c&sQ94s3oVWIj}_FvXpj7PavMPVK<#xWzO4PSzfnokbN z^HvNpXk?Rg%-AochC%7Zfy*w(kI`pmzG^;>T(=Or;L~y7TaVRvM_uL2>eJ+L?`C&4 zTh}O4s@rkin2R~)0f`f94%`jUUJJ}<$+?4K;u?ZcL1y!IL?#->!!MAFJCUsB4R!+5 zLYhIXRKD1A$1f&z4o4^%g4ov=k`zIM6&E1!t=JJ`Y1Tmp$#94p*?t|=h680(=%Ga_ zQ8t*mCX|;tx$q~!&*d44qt-4zV!krKx~$!%fFI@D21G$U@9}I{jie5QnsRm>Jq_D@ zDt(QA!F0NU3;7Aib+-B)*cQBRuDKz|t{Y-N(fXN%L~W00!)kY)6hoiV*4VHrKT}v< z-ip*m>Rrv_Noj6xp+#pwUB$HoBCGhyr`*)wGh0yYeS};)B`CNJ#lp_A+$Y>vpgtf$ z&r&4`YW`7EY9N_^%0fqB6zg=v!EQxEJ+q}q&yNH|(IPXd{XOe0m(laa;4;}T3>BU;?l}Bnq45KU^;bX?qjf(Wv3Pt1T zU6o8c_&I0PYf|NDt@^WuA{zwn;)DnDVwpw(e=&3r=D%dl)iY#2dBzDT~;{}Cy*^v|; z^x)h;p-41xeTB}m<2XO*g_PRl%4B;BkVL`oEEUyVTEp#4GuFY9LrsN=RfuPB=#+nV zCN)7%i{79cL{maQJGw#D4N?cG0;CRd|GYE$(#ug>YD^x=0e;@1NnC9f;CffswWamJ z@d`+3v{k&%VXUXba2b^+XvidRC|(Jx-_*>xBQ!gJ_e&J0gsXZ}!|k-LD6!IO&T4vE zHpC!Oc%y2uaPyN7*p_NvxWrOt;CT%t5$W@Pe)qTP4xtwS9N^Rj7@wBZ5Y&#fm9qy@ z6_(rK`ZM-q_SKLM)dln4KUARRPzK~mjnXKcv)?c$tB;CpyRs&VGISNM%Nd!y?qr61 z4`%z>>!Gqq_a~yvTy(l9wAc&5UQ$O!??HDi6(a&9sY3adl3yl64GHEMDAs(S(@3dm zd(oX0GmsM5rePe z*fvKH=Xpb5jjB7aT0;A7G8RqE1oF|_Wpf43>RgX;i3B_}51npRkY zUR7}AJvjBST{M%VU93Xwpp;luZ<~%X;nt*nn6oMjy`L%Ejph|Mf;`d+e-CzY2Q}GF zpS_G*w#?VoiWc4;p=)$` zAJ3(`vMG|votfwRyw>~&uY#f%j^e#Gx%?LUZ!xDR7*ah{|Jrcya&YPu)kWjzD zFjkv#yS7_bQ;h4xDo+=8&`c+rujrTctav9qFZx=9`qW=$$D0>-MxTFidlnsdfeX{iN#Voi9I>T$j-Ka&lcl z=gY{|(YcW8vuYtevt_w^u-y9hQ!LZsbf?UE_$g>%P+qMX%u;CZyBhkY5PyjiQ40{V z0P~(g4nPjOn1-h0))nfqUCslDB-{IuR9?tc^qA-_1gw0t?)r_=nk;x!wi#@VyP-zi zIu7MJT=0f1bU$pQ2zBI|KTg(ceuc_RAI&13zVW61hkzy7|HMq(u1A&haL za7zG*x>?gBQAI7qvBOW`4}VBW3!Q>^Q75ol$Mgdj)m4O0+#$fByQ&DjO5lxD zeWPsW?QqjN z8y_u7V|5n{&p7P+qpIKf{c?1I_qTR8hxRUqt{AL21Q8?T*!ZYi&~xRX8v1DJ1$%>h z6x!Gcjt*vA{SOCDbYK)0w~%pfwmF%4#P{!?{&((ieB4d_B3Hf0-UZcCapCN;gN35j<+u@=vQuvCYS zhH~W!9L71P6f#hFWpcR8VL@+5)EuUO;e;rv-a3~%z`-an8x7Z(5wAUJUXZ;?mQv|( zQSx;CXG$*CN5B6+{;%PSK3 z#40*Q&#Eys9coF&Y6lEO{DeX5OC}A^?|w7)ZJ|1_XeCxBK4>`^xy+Ei+{#)KIMgzc z5!_cL1bL-#P+4}lF3?-nXwqETswo9O{$P8qMl%HI@SCD+NIsxfqB_sg=v2#I%(j{E7==L!=PAbIDXp z^LI+f*r1pTlcYhr%9!;SeW96ZMN=0#r9qAb>l83VtB_zmugSaHMUi5nYMxXMYGKfkKEIt%y07->IgTu4l6-PIq|`~ za={qp+I6hP_WLY1ibZ4Bx5wDAE6FIrCUAEPS15#0;0bDyZYjmowg*5gF9@2_1+B)% z1Y}Apoh<8gHRpC-61zXR$R^Y`Q)1h2I_tJufen<38a|)~+8#fz zIM2tnTGkJVanR{}u5wRtC!x8XJc^a3dhR5MBn0uH6-O^ytK%`KhRs0DNg_2?vs`Ok zs{!Ol%~abMDTKJsfx%RBArl4b*k3i-+p4XYLc#;~^kI++Q8?w?(~*rIT?M8ASSYga z3ANn4(VdZr$Dp7#tD!op%e2UF6!?87hr`>nb`R+PB0I=6QEyQGEoZ0@JG{|k$%h|z ztT3`7^H^3cHeIn7xvT2{rDA?)z?gKVRyH3X5 z^R#+P>NK50{U`03iWW~W;Y7W%6KH6)neza=M=DyzUiyzZAuf=DlUZp57YEv==tGeq zXA98PR>f{iJzqngdg*(TN(GM#)LkN=kuf zqb?{F`|k1Q4}bsq^^2RYzkl?6{rHEU{%YpY9p7p|c0o5j!D)$1MCa`54U|pM<+ogV+To3SSz&TPPrmuo#aiMZToU=h#kN7pz}$=8~T%sbZ?C*{|4A zox#xDWcR5WbRs_FuH`h)E2NQ;iWCqSURp|Y#PDhu_JjXqKn_;Zom~@xH9=CkjWF%!ye1IaIc^TE_S4=H$@hEw2!vjNbGd;2FkympyD^X9sxHv$Os$=cS5zgg zeN;Yd753FC)4N1^y_96?m(QL$RQz3rHddJ+`9CnKIx3vZOd`p2Kbb=%>i0_^B z1Rz7%w7Mr>baQI_diCaw>$k7p9R17ai%$;eJZrdScPW0DT7P!ch1e{WlR*D4VETuQ z&w(8{-e*nKwqfFGSVgp%>&9bNxVtYYeuZ(w9Biv9#2UHl(o_$W(hM=Z5VFc+#0Wv* zE&e2GvQ#~hQ&SNEzB{H&=B+grJ;KG}!MYvXW|u4NmAW{A_*(H1Q)bI%3<;!VNG}fR z7fK^j?u$^QvdPwh2}TVJtJ-ys;0?_UDQ=N2H(+g=mUz-`SZhy=hH{R-zEJvJ!LD|X z?r^ppp}tXX|1||gT2HMn#hRTivRRc z)4#P_ohm;dihqrnqBu4<>Q?unPvYykpdR8^*M3(tGMui^UDtCI<8ZE|JY3tcph`O5 zjD8-wg%CeEAU(t7o}if@6}amdO~+^Z4>uVps$mc^Q|NQz({49%7rT&6qj$oYLjjuK zrLfjrYgK@zZ6)4t4-*wA-5(}}xfZF8TC-B9-dzO<-BeXW7o{jb^7xi(b;ErGBRJC^ zzJo1ZTSI-HRFUDtN!5yM38C{6=h64~)p5FRFh)|EFpkj5EEjDN2%PBXepJ(R=ZVw- zisyK?QT)Z0A3WD&(+VE<|NdY5wla0tyO!QFTgwFU}PAudiRlo(E6x6419VppZgeJP&`>|WZ(%X{o# zZ}OU&N4xV&xmrOr7A3G2C!X?$NPo#pP}F+!SD$}!fR%SK_)c&!G32``)QT7k1lY}{)NoO+V*7Z9R}vwLn#dnhaD7HW^*on$w91B zw31FI!GFxVMj~X^xnF1%ZR?*SA##yi3Z!ehWGm`##g%G)lx@fB7h#F5{e&~l=*vvm zURoB)%N0kjrGtsF-Ja22!yaZRJ_QR) zUrf6bz!om9j6(#|@MGn%z*7F2!CkB6CNMb}mrZr8R%2w@bupIfH_PD`HVjQC{Sk%B zyczRDN+adw{O&`wFVn1iNlXVHqpxkYLSc^w5}7L2bnz5XtE+5K=J-k6W@mm?ECt6w zKf$?V7FA6_E6AwmSSe-hkOR~N_6lB|OY4fwhi5|%+>%ajg#7ITMxBw*NjC|#T6mdJD3jQL$t>iG`cRaqKWb0?Q5D^Y8ArG@De#+6wV zlOK(~-#_e__-(qrZfSt53Z1(&yL{k(>+v5Db7!%2rmw$Mo@`?aw!=f!Jp0mkG@5di zp#kacNFX9HayUKJ$i(eaw4>~rBzgMUrK)cmEztf1LZ!r#E80+VmugncK>)<&d$B6B$eMR?s#zO3gty65e;P6p$WgP=Q}BC#4(aiM7WKhiXI#ctT(WXXPyE_UMv)cw z-PAYIr|^VOpOuYtkDz6xPZ1Eg`TYT=fMDc^(n%C7-SlGEUsb zS=&vMXGKn8BP89LSO17@xR8te7@hc$BFAq|O4pG}$a7GOGKTyH4(#0O_2xxnb?Nz) zNQiwlf+)3$Bx&ED+*BzN>SfFxHL$BFEuPL|m2~=l>62VbHSzhQ9YtKN(_1 zj+EOeaxTCjfZa0vvWzPj@r!IYN4E;RCJy7fP2~@$<87s0Iam-5SQh|I5LcQzG$3Qc ze@s(H_vo@sYZ1tRcc!U=J+o8l0QgMLsCO1M3t}t}v7p9S){TbdihJ9aNc!nw5BZ&a ze`+b)WM(tv8{TKPc2Az8M~n%`M(3(m>$Sw(;k|DF37B_*^YJbx7lD z^#b0jCcF3-tQIlr8+SgC#{T!O|M1{RQPmMwNB~ozA+*6Wh;>EGSHT!;{A%hmcZdmj zRUNG3QiVKENyvojwZu@I$ER9fPehUR~@lc^v(cDpatP>I~m4Bk`5!}&gM^vgZp+YqS?1a3FX*|WyPujDaW*>(! z8Uy0b;py@~RV_OcijAonvhIET{S6rgkJ=cxa@Kgu{jQ4xE2>Pizi0K~1abSAtfiG{ z$0^NG3R5J4v2sE7J#H!!Org6lTvie%&65!$$&YhciotUPIfy-@W&{=Jl~fL0vg8>$>w{ z$52E@FXt{#Slv6Y0{j6g9>2CjgB%l8C^s25BO`8;PM5E$)MC4qSd(jm8YnQPVDttX z&3B>)xn6e48?dun{m6o0dno*E^DP0xiJNhinbLURz~cQfHZ@}19M2Lq6p6?gX3-j@ zanEe0c*wQpE`7RRw$PAB5zFwTEPhc&YoVf^>)Tkds0$u}PXBLrXS*ENaprgLRwY&0 ze9hNX&8jLQ6^RtzB-zrgY!U!v+9U;$6m74~4?|!8LIg1I0H8^#d=t5X+*s}&U=r!Vd`eN1FT!?VM*p&KH5}qraMICX06FKrgU_f zWLm#$yRd6GL^j9(NWQ^?9FfKeZU`7Fnmy*3YlTHRBVYkKFC@BfG_+;iGpALBkM>dd zYgo?AE-ooCUpZ2-6iI%2ylYG4j|_ft02U6iNH%yKxu~1(WAfd88w!j8?1^$ZIg+c3 zq~wnsU;g>={_lRi_M2<-$B$mlzWe;oPkwylL9>G!I~B>w_hGXuMiv#LZ+iQk&EGz_ z_s!zf=f9huoIbp&VO>%qr!W6%FZJ{=q-BA%Lw^-kc0}N`Zr+JWn()QTIu@Qn1YI;j zv|4Q)b|uU&g={1LVlW<4yo1-B5>X@9YyD@&2Mlx)MNCP-?(Y?M;iGupP#S^c+Y}=? zc*NfWd}6DRBnh{Wqtku7X2|*s?Ts2)y(zt=*S#Sx%O2m76t8uJsNfbj1ibiMTn7ew zFO}!Q0F|zJk`og6qqIoRS1i?JM}Uir`YZM+`k<5wu~YrJRuzEw#>2w|jiZ+O*x}sV zYM(N#Vd$0?cp}sRNq8%$210(N6qY|RRrvBSf)GW%*ST&bsH3MMy8!i+Yxd*-OI#yG z`KxrG9dTIBhJbwVoL8UP4Hc6r7y$6ZPhht*Ee5JVcPHzNSmO`4d6nI8<|E72!(HKq zm>C-U6OeRlFCuFnm%OP5~q>sLO1V;B0;E3SUw-;5f`a{+&w z??11-H(lcj-%8OddNWtP{pyv^&Tjp#uh-QRw6XPW*KrG>y!~3&-n>>|;Eik5zSs8! z+AD8=s&gRt4sSUJHuWv<{nV>k?BAVkR`uzg@s@K=UE74;`>Eeyzvtk(?zd~Ce)m(? zuIl%G>g#_O3jh4=-*OJFuT~Vi_hY{Un$AIXMbl40_SFi#_kQfp-X2fq9Q$e&ML+4> z*XnED`?)KG-@M`T&RyyA&96C!%&%4Ad++D|;_rj+y5XO8?#eFj{oHk>H*fene7^(P zoP+P{m2BSoxqtEZ!S_3W@4RzY@V)nQzl%gV2jNX3y_s&#IrxpSU|X6r;_J9u_*NG* zwU(JMemf(c@BD)dU8z<+(mn*|oQNpd*+JN$1(wc;FO0&E5&cWwr$(yE2PMQn`J|^q zDz23=A)Ka~WtibL((%`vb~gaVt81V{A=_F6(8Ae1o?@%*OVzKrh0*cn2mn;)PSLQl z-AA(81xOk-(KZyPW-us6$tS4Nat*mcDbk-{ru6 zR3b5sjNxk>D2i#>MJerLo#SpH`=2FE%-ixz=lH*h89H`ENI1JwGlP&DsS`H3IH+i% z=3?m=Wv+yR%8GHuIUDE`FCAgl91wvy;#-d2pF^feADneqPI!|*@78ld3{QR>P%M$U zjD3s}YzY2BLjM7^}`{*&Sh%XVAEg|cI z{UJYO3Z+6O(rLaZRa1=FKU3$+{MNw@E)-$Z?J8Pd-{6F|X;_V!eO6uE5P`{kIz1Pv zR(3FXK9*eRxkOjc=7o(CA03mGD5k<& z84N036SBU^M}zeMx?5)lPbf8FHh`SesCZTH?ZS9RjxY+a(Z|H@>E)Q4a*5 zI$hHN_DKpSV+;y(H5H?u}q=v3vS^4%}6fB3!6|wz(wNF;re0JzZA07ttIY=#?hR*L^M(F zH`-%71y~8inaWnRMn8o)rLRr8Jt)>=jUd$ds#1^JdUXY3EA@Ejmaq%2 zngUkgLYQ=W`~D{{F!xuqhCQU^yab;^w7dfY>% zA``@~$x6YXMB@{j@V8nuT@Sf3jdgVV3K_CLr-A$U^1O>WMYH-d!>ZHsoYI5(`6`Z}e3IcxJtJ8qW5cXJh=iIoTmr8o*G%f>m0D&mWm^r0 zR`II(5Kl$A;G4ouw^i44C)gsz2EPRVEgyO&$U5kFm)=3ly&6b|3}x4YPxnczuPU;t zl#JGn3~&{h$#$?v3Iv4ls2S!KCS}6r$%JBbI%ZwqOnuTs_cQkoct*JGcwoCEt((eh zW`?q)E;f`}BJE@bEf_a;YQc;+Y{*>!oZOtnFq7|2(Iyut4bx2E1F=oj0*%*Tuh5!r zFlaxja~~)srFdWV$bgiZFvw}kOJdCVAmwFcpK5Nza%0C~^*|t$qK}!gu7p!Usxw~K zWU;T3P^xm4&XlMbLTV(@`=l=b$3Q4;z&4?3*n|D`n&XIzXho$U3PNYYk%{5$bTOblGbWv9bR`+8{fNO_MC%vaYd^!^aj1 zqx@YVl5<=hWv1I+7fD?->faQ*c*sUqk>OIC_WTXm>0&`wO2RppxN2Ggh%UB!lwDFr)ONa^ zVO(Y;lPU%)!O#%A*jf|(vMs=ZnodxgY zaPKLF*h6Vwp<#3-B}>N0R8G=oB`v1DKB^5M~2u<>}(DqNJ5wJ>QQ|4u*^X*N!Fsu)YG12JwP~82>kE( z68x=aRZ0Xw4PRo<(_AF&$%=lIB5y_&sN6_DTVcqH4D)=|0LGQ9_ z84zw#GEG&?ITaC8yPSPdQn>(~Sipfs3+5X;ALuPB0=Xntl#(mS=b{siE8@1ARVCrl zJrkvl_fY=qs&1({cn)-UdwHqv$O+qcSwo(ORj531QMkZRhYsKa_6KW1+4s`QmVtgm zSA}arZ)|GOLj_&ds9a5vUY-)pdh7a!@oVrJ&jYY%K)Y#)?^102vwwH+~-u)IN6r(9B z=MG}J(z>FdYLA9eO?q0x@9R3<_4K2?MI{&h-kMaZbxQ<_`bqWn zT$$X0+OQasd~+tw%J>(wcm~__V@H~uVT*uEm^Htu-kog~Mkl4(lO;P(xX6&$*yA@8 z(;lgN_xSRi+b8ooKmTI)-)YPiZRox#in!Q?F zUtD?keE+jA)}P<}&66MRN!w0Ob2w44UOV-9o8e4)`NR3%PDNW&pzhKMP0~#%Xj+-F zW8dm0uT+Lc8I1)fE>G?k(>W?}*b0oPmYUKgiJ9FZoOemF+3U8u5FtqHHQY#V zSVkdx4(-ctZC@bc{byC)c;E1Ljg9AXwy6QFbS5JBq)hNzvi}&hPrEmlFU$F7mL^h? ze?3J=qVzqrFYB+d3aiDvby_8jx|CRSMNgMpZDelp`{07ryGv2O)e1+ij>}XdX|L_s zD8Ywb7NQ%|(=yw-A{w&kxHxCl9oP8irNsYR3H@(af2dTC`EIpz?{5=P%Nsm>C(3ojmwz7 zU&*)Aq4bMXlQBm!mH=QQ_ct4(^}K0}3SgZ@=z4~lVR{Q)ZHu@v&`MPen+N*A_C~u_ zd zxkl*x6hp(ng{SA>poK+50&Hgoe<;I&h=m-ON04zQZvuMHH?0_(xzwRL`8{^mTXk26 zVfS%UH46f@PLR@eaMCT(my|bqt0SoV_27t#PIlD^BQNRcf}u?%I7kepUTLU=V$B!} ze!772^~#|qiL0Zpi&%X?o9s5Gd3v#NP08=qPz6A6eDv(qOIje&TF~BMkf1Ld%HIvBAx_?r0v<}Cq9r0|U`ylC zS1ugY=_hA|Nj5WSIv#Vr^u=n}n(OSjFoNzz>3&WX6BOgx zSw%}QEO}7Qa33fUSSlBhoJH*`tWbus!54C&S;mt$h}3Ih0M7^XJR}_>PDV~F8vfiN zU22dIuijSG%h+#VJdk#+%Q5&>bt<@y*7Y&!SjEeC7L<)!6%AuU33}$sSiuW&PD4ZE z2$C`uE#t?XAmOgBt`4HE97Ezb*(3L5PAVoeMpbe3=wMEokKU^aH7O890&--G;-HE* zuyfgU1Z@QV&KOy9l2rgoT)KJrbYk)=z9x3!`cgoWyV3I}$TKD96@t{XGn<1AlWqjp ze8=%+3$jFGqyc|pq7%4ve58b|x=XTayPXV8f=|A_SokUAqX>Zr(#5-h0DG$WB1!|H;rz^#jJlPZg zg-XF|Y?6zN2{V!Z0P#>9pEUYn+Juatlj&kx+S!=xWpWFBD(1MrgC@` zqs`3|v=8(7QGgg|qPG##W$m zURJAhzPomB?fbR0fs z-0;P0r_CheXQJ0+{%Vy*j=~zf*yeT2;2}9Q>gXnGj>oVy&ap}0^%=H! z$u1cK2@&Ku3c+_;OBBe=&^v6n=1}z4xk8fNQZX zNF+!6WNUgDmI}+Gic^3Pl}3=u6Rl|@3uVnWMUd1epsf={WOfhtcJw0GCM{0-ThyIw zL*jR`(3C|a?80>W2Q=Kdbk_Ah1kRE|HKV3p=*7KW#Tc3TdV_crqb(0gn$@Ea0=b-a zQFX7;FC1cscxJ2Kbnk~aYED3*G-Xr;zB z;h#jx4BdkDt&A`Fv#C4mHFT*6%Zdu}DI*h%YL5C}5p_SAlq{px%y&b8^|3lqSuE7zk+!5Eb_fEg4##@f z5-=J(Tu0q4pqs+%brIq*tn?-vR*D><=G84#rSj8&Zd4p(K($0E%>cdSZ=IaWFXh13 z?cpx%C?fn+7T=JFFSWCOt5A=w(Gz7#2k~D! zmT}LIEBK|v99`-N)tv1IHK!eBmPrG?Nv}xU=e$5}}Zt zvCol8)|txg1z>QH29ax0;lxwK9vIS;O2Ms=Wo)Pe2nRI{=@Mexn?yUsWbx2(L~Dm) z8pN|l3!GRy+rYPFb-xc2$`` zRh(Q4-UC7b9e63*7}^E%Ph-TXVxY1}wsiHM{5W<1`D_uzh%ZV8gKuDC9Xk)Ehz(75 zLZN^HJt%^qo}uEZ`mm*2;Vpvyiu|j0mp}B^jXhvTTm52NRQ7O>Qul3>sl<$I1y}vG zn-IdolMtZ!2lMm7&Ha<@`C=!;WW6w<~wDYAMZWc5YCSRq%gWb}Cu}xPQNJ#csyH1|#U$GT%l(#-;4*4~K z-4Fmy`ifspQ1=V#9M~X>)VWvPOX-he4;Uz?cN|91RC{L6u&%?P3 z!N>-IMfAlhRNG6v#%C0F$vVDR&f@yX>rs!-$JZ;3bh9CYp&A%Lr0inotElZ=F7sP`gv&7MIGoeEiL?9@_%mbx4k%9 z;eS`ao+G-HwsN9e3JpX9P&9txENVm8Gl2D|)driunxlh#^xZw~40Q62(Q+T*Q}h-$+Q zibZPVL_%z{O&>kat`9f(Xugf03@&gg8iuWlksGR!9}fvoI*Z$+Rly8yFo97Pq9RTk z;Ua53(^BGK79JZZIHrpDpukGfD#&89A4rOD6JI1H0D^=Tb3D|Ft9cgUh?Km0-?9-vO&p80k(#gn(+y;YgmYIhu$qtqyJ5{vEVmsvrYd zEPJa9<=ZSZwe1yh)?LpCT>%PPGPi}zq{M|kT`?`GO2Rsjfu%_z z>qU;j+BYd2@35&We)QEXYLOL3)$M1pgk;D$GhJ<_>0!K;_mSCwh}eZOI_%Jv5Y7oB zFt4^-A!5g}ZjwwpCl154nzp!-kCk=dEij=t8oMg#!sn=Ot1n9UVvqTD$0iu6^TaDK zk!mDNLw`>xE|zeSK}Ik!K`e{NHVjkFn`)^`=+ILZAa>Ba>rD_m-=E2LtFCZbprh8y zC2USM7xN#~>kdStbGM}8&f0tA*NSl|M94-Ue0Yffy`84x3rRf{LgkcYPQHzd;k14h zN23nu>?|^?r&I`gC0{-y(0zJ5is%kLT;{~PD)`>2tu+m}IB4U3HyP(?m2DFotT`B9 zAuVfXgWt(WfVMHZ1sR>kSx3b(q?Iao!nE0+V!eg9K4ULb3ro`K_aLh}GmwIdtdVv07KtYc*xB_E95 z;aiDtLV33Lb+-;-{uT`UGD$)$1Heip2bX+$>0T%`vKCw_pP;JJH^bF}|J6phpQ)~A zn`E@;8779(ju0l^LbdU85EEdiCV26FQgGSgVo#&v`82t`{aH;Oa17~@ zsBA1aa-i1UZN97k)-QqB54W4E-pRXQLP8JaGfCo&lEXLZ-hHteA_<`n63do4RGf9R z+H66Y_FX9Jk=p1+I}-hrX^VP9`a)% zo{;!WSo0gPO?dM|aMVjHq?^6jFV`t=}Rje*ecC>w_HE66KoDultA z;;>54nl8~<^*R~hCN3=CT(M5CMieh_RRxShqz&^rvj*XrL?7(DfT&09&&Ro;-hrGPvNrINxrx3td zlo;R(F}y^9lbh%WUc@2R9AQq$_eQFSA9j?nIXgY7Ca?&T7D?=S&_eWUuz$X50-4%? zMc(WsWXm_f$ENfm8tSSvQz0yGERQT%9)^sdVI*84CYQZr(&&RV2)79t%1yb`fWsR( zO2HytPzQyL1R3NukcEq4Yk81V2V+;(xWy)jI_;tI_sNjj5!CjRBKtkryYnqt#JnE= z7%dW!{@#rETi*mDw8#^xd2w7Mxr@&mQV^nHR@fnzX-hU0THHtaMCk&-Y%ry2EMHI; zx#%zua$sp8T~81w`IJyE>>hPjD%lGGN_xFDEj#huUh$5UOQr4M>sd#+ICRpbMnQtU zm>ZIxuX-YBFd7rCNT?@V|63CL$O(-|h5^aN4AUjyOZd-rl4W11U0xz>?Imhf+Rp&! zY5@|!AZ$l&1QpngrL`#t@0BtKn*A|SNXhRzFwH(Ic4S+zQ_2C!sUcY<9!d#9`6^>I zl6oM5EQEMSQIWmb&^W+CTF+e&_Kq5W$M&GC*gGRCJ}u%*7^y-#eweQ@Zo)lj?GSX} z^>Z+ZTuin~1zRz{kt;w?FbBw6CkXQr`5=7MvjCM7dPqq(IJUUB}|-ZbT*>I0INOP zmvzE*gX7E2$I!c9n@W}zU|&A+?DZu~#TNIvJv)^))}}VA(b(I~Yun;97}xyH1j2xo|li{rqe1y=pf z*dI9x8DCHWf+-do9!K_A>=s3wh^QFJf?OVoOS{9(uQgoXxq!#o*~v<9U+!|0QeU-R z2}DLsqjG98TiAW+a8r4uCfeW%l_XIl=en|c<(qP&5skaR5%HIbk-#3X+iGyLVYX3Y zXL9#%YwiV`4}<8@B3is!+0S|+s0o|oNU&LEpk6F@;248!syiO5H%n}0+7 znKL2)g51x|nzf1ewZd z$dMVr&4Nm^nPamQ&{+!JU!>^Ru!{heKnWEckW;8kl?#A;;Gj~6Gw(@%=R-xfzZi{K zmpo$(=@n$c%YtC(F+*E%2;-->|7|u^OJoej@iBe%Xmj}$)?^(?_d<|G2#tRS@}3qS zO4e-+VvcH~qfuX(9f>P0LsTaLRFq_88aQLgF~$dkn{uYk&8O9~%5MC`KAX}|H(sgG z)+nEhCE;}JIkAvpwY!Q@hL(wNLETz%gy#oKBh{$AE)J}>DkcVPH}4(BR9(@kJ4{aLvEv`Bgc05C$lwJG9U&6i-!#Fe zs1BJ#n~Fv0_63g{Zh8{eljxEnuLU(8d#bwI*$em03_2x1giBj=^p*-9>`@_8j@q?i z;a6`@kE+Str?h|`=_2^E`ZMskJ8Z+rGTI4l*s6s1@FiqoR>?(J8t(;sGY`-QHyKJp zAyPcq54~*1Uo}*rSL%-`L#$lBpq;&?Mw|GMrsK*}B1TH^@OcD!w)f^+{F_h_grKz- z^QZD^EwA~>(dpCuJ=##Sq6#uV&zQosxw-`%jiD-`Hlifd6OrYXyug|!^x61tqYHjf zzba8|wTCP+rZl@vv;3`tPF_(c1Q5zjrZH9kYQ#c}NKsET5@AD9lY__m%g>`GHywS# zl1KByNE-2261eh=V{YI(U0GYLsOAsc_!>&Y+oYfm0&J8$4jdP4HkO?YhP_M*gQRBW}V)OE~2q$V5H~#@Ub5 z!dOU?WQZDRv8r$vtHcXZR9Sn63R8e}P&S0AWYL{F7&N0rWDo(=ooo#Yi15~#vc;SS zU|QoBE^tO1x_G(;~Gp3GGtt_MRQK-*Zj>|-*k zHHJmH}#pc=bBT_V5KT$Vz;Xp;d_y; z=M*UDtvUAf$sCP+7!NhoC4Vb|znHU!T>xz|CH(&CfG|50xRRC%Qdoku5X((F6*Ht- znMM2vsg8zEuGiF$G$CZTg_)4&db&T~dQQURWL9bbk7;zkAb+(#``15xpy=5p|KrP| zvcLM%2VZ9|!A7*ibx}x_1pV5En^e5WSal9zbog?oWJN@}Y%vQW3kXOPtHg!KQ`H_v z=$4-nmV>D&^|ImO^ojnZNy1DkLzy9iaLRlMw=oM5s{Uwtz^`UBLRrI|&>2McXi`tG zKa^cm7IhKud)iONkqzd37rh2yHvd!^l_{fT5u%ze*7@)txEHMKJ$82n{bE^>xQQJW zx(w`nLc)q7P1i>4RQZMe{x#1lt-^j~u$Jf*Mg~HJs7)!E*O6gA4Z<}5kvzcL7OsJf z#SR(TrgSh5dcv;+9QSE<)<%RvqHKn&Bn0`RJ~rXU&m_3x$#tm9^-ChAtS|j^NNOmj z#`wbR%_B@I*ZB-JSCNgF3F=^A)a(qjt7W}~Rxt#{d$I|NjVC6L+cKsR%QQOG$sN|A z&F^1MHuq?@vPoxQA_aiC9U)vzprYq5_ggG5w_em*d{d=OiY0AP$U;^{SVl-C z?wXSX24m&G+ZW~w^j$p>!2!H*@W{tBqp0+NG=%66Rl72@i(!OB{?M^jyRIQfI#{fPdc zQB~a;UxSWOrR(>AuG~q8gce$;Mo1#eff26`rw4!D123RV)FBjA8G*~L5BX9t7qKUY zajHI~H45CNaeI^3d%Lfvw2Mf$>bqQ~uE%G>60?b1P>$G9^@XxTYV-xb^O&N#%_CcUBwNs$^41mq6H8EV znvY`XD1*C9I7{;1yMwa0BNccMaS-=x&s@KYD2rhd$9r|zBb#q!c7*27gpie0r0vP5 ziQjNkL3g(J<)1znM7Az7PShRHu^qrhxeZC$7XZ!s&)#3%#OHvEvI0mMEW{KnoS0$4 zc_JEc6~3x6{jm%VcB7JCi~f>KuvaoHRz->_TXqp?fRE>_UiCzZX+H?-=yevR5_~l_ z7^yZcL4~S(gj`%#e3+m8yF?uX#hPg$Dh_}6;T(|fe&rTN@z!3gZ^4Y}&y(+{5n{Mc zwub`*nfwz=22hj$L2uOB{Sx8zCLJ;hHw(@P$x5-qR0TE#)Y5j@I`crSGYsA;wSDV` zL=_EWBisZUJZFVm9J&I=AZ=NjFeXAl=ck3mQ`Cl`P|;x?6A`UZ1A!BlSBJHzQXJ~y zI!%jbrRmmYiOKH#DeycLK;L$l`VirdvpX; zJ{FUZ9)jV~2>LNK?9zWxnkJY@ag~+LjX!`|&CS8|K^_##qzNwl*c1)jtK!H)W_OO- zvuLuOm1xuUg$M}+V`KKG4=zu>b*aBb@03y6RyUaeGlHxB0Mx}Qv%KYq5kqKFTlK9W zUy6Ks>4Xw{vaW)#GDf^*^CC}E$q@fgvCnu1f7Z22hc-x!Hy66Rq$9CgZ?vIXBW(1| z=;uAz7Ty}DOS}v07A|vG{PVzM$0JJfsw{7cs?z{- zk+HZA(ND9elI89_P*LAq4S=vORF6#c1VT4Kw)&!H!vT-WG+9sIsT^_02I!p=sh#&-nBFbe&N=+1AZ_VYDeA6)}anfB$ zSuVmm!sX|Vxf_i0+|=6&(n%C4c@$oA6?h2o<5Q%Uw3;C(;C9wvlhQIzDvbOL5)EJ~ zMAA!hr!}Mx)$%M_!F|Dt^g|*9tzs))tA8Q6U7Z+4gMyafE zDqbftj_?1PW^)%sF5h3F)L122iLBIzQn6sUy;G&@g|QkCd& zRhRq|AdsqwZ5@O;Tu2TDwxkyX9Pb;!3Oij-VJ zW>o8yAXbR*^ie|uv(NmIhV0OX@z@YRa!I$vr47E9GarlOr{W6%D`G9Xd)z9(;~_aw z(u#6n=cBluy*e%v^O%xAaLu-+Q7Ej-KGICl?*0^0MZCEMAQGELt$Gk^N`_u?-ea@BoqC*s5%S=v9G2ES7z+VF@dlYO?an3^Jolk>P^QN@6FMrj>pI= zATdv=3H}S53(XA*DrH@ABL(zcGpF&U$wNrb4z7R)&?O_V{B&SpTk)7(&8bq{)VPjz zgs0P8g=oxE`+eDqLcWg`5iID-zvxyM&73pOEsTz_odftBq^hX z@Z)50&K$ZMs!>b2xF?ZxBB43X03`)M<2!rm-x0A2#k*`1t}q6oVHC zqJBeJC>V__2i}VPCXMh&%1KEmS5W3YhD;%PP}F!67a$*M=6;vFz%6+Q%7fcnsPiYh+*P z+Iz!h;E!v{fxsPLvEzKq?cT-9)80Auv5KQ|zPF3fVPHW;!q8dv1kHXP@RGt(Nelow za`9L`7VEo2M8AC@jn6mUzFT$CM}Zr%U^GOL5P5QJ54Z;#OR;WO^R8rH(Ndk@eCF%f6E|) ze@1@FBWP+!zMl~d=SH$B$X8T_y4W*7^c7KQ7tLklKz3j>p*Iv{Bk{L=X->P+4VElz zffJuO;1mA^NSzgHU0&(g;;ft%d`$O!uU!$A#G#88sx@U9#ngGpfg@kqKrYHg4}=Jb$*bm;-?}#&JWA<0f@`AOs+lIq(SEB&R&Q;< zC^A68T5yaB>T|TjMNGKb1_gQ6)p=+;_yRT?;Fnkv1@6veb?h~;N79Vb8HMCpw9A;Am{2+9LeUj55kSQ6hJ*@$I6sk-H2+Q6rh-INeDY zZDxY1UfEsJ9pLKXJ&fJ0=N~abEi$K=F@z*S^-TBq5#kL8=a?ynh7%#vO}Sh{Qi?z( zyrZHJ*NoKo5Id7=RJkyQJJx*wol3tN%>q|5;uu}ttk2oeKYQesB<47{S@y3?r^zS%Vv6LS!4|M+N2VYJ; z_?M%vH(;p+;V;`F`xiD2be&u{C`c8Jb4A8rxN8=%q!<xwUh+u1Y1N%MMq_mH%Lksi+q1m1L_Ap)^*v`l(fb-OdrA`Sgk=DmFIsydSEW_?X)U z^{1`?bU*xGhth=GjIzp_bb#t5d*e~sAWD)9Pz4v_WvRSlJbdHn{%JxSaIp9RV_uI$ z)&amn$Y|LT6XGGKCtkPs;V!dD^6?UjchDnH)VK>)ky%<)D>y{#gwHEgCi9*3u{*>V za$h1$fr-eeIA-OS_KHFUT@^htST3;N?F+Vq#a4EL+3gRUP|Z?kNk8aL_M5)FQ2Af@ zC#kL(ws5dC8W2`a(Pj2k6o$Adptecp6AbCdMTwRjO6@bhzVN~5Eir{EsN8idMoUaZ zL@da5W2-~DLL?SlY28Ys)b;H0F!F)`6sjmyDRsFU;i{#J@2dJz#DuHoQr_1%S=z3J5 zK%ipfq{2b(?6XrP1!X6yOa{+7t}Y_#NT?;wE09^ZGg;4BFq;@c|48 z;$6t9#C$S^qvPOqR7FL^atEcEPdoGxhxfIarcb%Z4j#GppiaUW<2cgqUA3HW9BF+Z zK7S={P;i<+fU3fuaFb1$k{4}Hg zst>cHY2u1GK7doGFg1`EhO;d9sM1?7uR?UO{UK$S++}345DOz_ik?77YcvSIuPA3e zj1B9Y{cPa5AW%=Su`#S6MN9yWKAbajIU(65ZFd8Q^2=nU!Kep;IB}Y7ozag6rz)XQbLM8^A6eHl zRiC9PR^~JKikyG<5SIZ!9|^dUjw@vVB01b}jqnJEPohRqmLj(yHgScHWM`rJK9z~; zOqX(TBLFq5+a^Pu>ike|Rj1wUV_{NjgoJ8uT_z(FLW0l8ZIg0~+MlcwP-w~*E5((~ zWzVHD=7zPMCuR)g14;i9dnloZYsfRrzLFe*)A*myTUZX)Dfk5E2&{oj<+^YRvkFT9 z^0P8~!mY%HArZ<=OZYTh(p&IiO*XtD9 zI194h#vvM)`4f~zHWc|1k}Rnw<(TNN(@n5#hWs_WL`H9#!@iXRD+(Y+j!KrNxWr3X zo=I5(^2Joamyvm28?fKzASqmwsIaLRAFh>SnJneA(ee0Y+b9(Xg% zbDc6#jT2=Pey=Y=W712Y+tY6CPj?W^4v+kV6(1G~D#d@@a+`Q+hkLs$wPrI&D&rnk zrYJVv9Oi-0>0PJQRb9g6{@6e2Kjc6JQtYmWPgIN1Pq;_^5>j{f@Jr7a-P?JkYV^nW zDoQe1dfuH4hNd~(npQ6HIiBHB41e`pQWwdz9}P=EX!EZ~c3IBqpVVxpfh~#cV(Qdx z=vQ6Dq|P&yO&k)qpUe*q_j(CNCTTgVT&A>#*ch}zS{%qn?du%kx+UbR4UCz>Y&K=2 z)5B5MP7ysaiR6{}3LZW}5Mb(xF)G{G%u24S34Y$ZSP&DFf|2x)a3@&6)+M!`P3HiI z&#LUkHN>u?_rjwg!aGI8rIivr&sLv%huHZ_bBiNi7)i3*FhFR9M~M=EED$CNre&A* zHn;w0ARd-W;K993YLEk}{I}FPp*NIl8&7B}yA1LGYV@*s!$DNxmIO%2MNb!TeW7&_ zjeNYXsT)M6N``>Dzb=86(CpPWwv~2a`c!3XJ$yi`N(^;k@S1E;-fmnH2W$iMc&cs` z9EcQ3;qX@VLu`3S6q*)P%BXze(4&H-$(+lWrZUkHQ4ezvIrs;tO}TXXH+}>U?VrBT zh&fY+pQxrniCfIgzrt$R<%R87Kiqc&}tybCNK&yEO-S$9HlX3 zc#Z~t1v!he#{)SBx4I{gO1dGX8OwG%m*fL%>e12qfiM6sSOUnZgKMAze};b*DHLMjF~e4M4KR7WI2UXuu|(7DKNa2KdDZFX^DPv3F983=jkU-Bcq z4HP6zN_tTTa~L9}10__br^kXU!3R_o)*kamjPqGSWwa;I+G;#1Gn5iUlwv<(mDYipXed%fx#5k#j8 z9jXy#OV6SlLk60gInhgPfrk|_WeDA#>Ubd`P6d(`D2sL&mDEDLr6_DtSv?GNL>4gi zDB&pR<(SHO1+nW71;uLoC8U(wQ#sj@{i8V1|c;_phUuC2`TF1 z3pfOt^dm^KXxomOsFFlYB=&+h;A04#y|7>bjtwyJv(CyCQYfYzs;t7h$rNh<#Y1ph z3VXdFIjM?h?yrJi3(r@=5lP8HQKM#9felO8DHs4~lwcHqe+Do z?8-Wo5mivGP&c=#C{nbPGX1EUrIv@Z{4{}Hg1E6#PKk$VU^$JG1%<(jr6(E-#$oRy z(k_t4lkj=DG$4R5WNXg~qP3MvU{Mu87NUF6FtzA=HYAX5W6O42s+h49XwT&h0IVu? zm;`{nn0=+IhRHz6VO~t`qTr6^``eae$4GI9L-^ee@nSN_kFY78;=IJ#YYj+8=*<$<41KZ&vZ5VUX8F^E4`Ika@2GU^%U|Adk|YQu9|v4nQfp&rZIaT>b3& z(aWzUf7#nUdG_Vx^D9^R7ekH0XJ$0PRYE`d@zeSCEB}Rpqwy=g@NfJr9^$HR^Zi#p z`^DwY>eF2@lA2zjwnOH}EQswzS39|)!(IB?d5$f7db0giOWgRvOAx4RaV(|6XA6a~ zhBZ)HwnF=-EqndiyDi%|?We7KQ|f7SAV>Ay!GTAcX=+1_2SJHDg|S{BeVAbdjw9Jga41f{_1;z{clI={Qbi| zGds6#KKSPSNtT}vXy_+$z&oqk-w{XQq}17_eA!@&XwaF8WQhAzN7@dz473|AKsg7c;np|>Md=U z_oYV(o^YkQqNyR@ClqYoOQ#bzd8JQh?`1%pG%??*as58B+qp!c` zt~eUL?1`?YJyTN!5h1LhU{!;-)dDxSwD)!)P+~Y^$G%H75WvGgB`;NLhVXq`Ycv0- z-fTqBcS$oayfpVj%I`#1*b+jDs3HN_E@hE*RM#iZ4?cZ1E=%4}2d9IQ3VjlBmUHbC zL{urb(L76Jjde66LQ|9T z`Sw<_OiZ%Q&lTBmBAJpSp`IwOvV6obm4Mq|-Xo&*7AsxQbpC0sbXs!F7@pP*>?9CStr$?BDY6L^s-(PU}Y(- z{LRw4D`AuIWiFN!0TFeffCQfU(j;0=>JV5Jj)qDD-D-hanhhD;*j`&o8mn}QmPx}@ zTrO=sBk@(lWvK}h0f`dM+&1(V><>s>jM8f9;{Y$_%e8m`pVFkz2}6}Y2oKS|4r--C zBJJXKyjuM=xPGlnz8bs~m~l0n!uiDbAp-MGEw6~Ay#_l;XY}_j)^fpPHN!Lnc4Mub zB|wcYCV%|nr@IHtP~5(H<;jy~4m6O!+OW@X7QqPd7EK7ppMN~LSnfW6Af;1}UmZME zqjtsM&jBc0YTj5=5u&dPwR|R}uj`DMV?>F9<%-10v@+C`0VH5HW=@iRQNEC2XBba0 ziUinIt{xtht+@s53<3xom+JOH2(F)SjZv{?QZv+(*!TfVoUW2%+NP!SA;pQxIHM0T z>DsWK$YhO~*IT^yi|Ud%HAj69owZUzvBxN_Ipa*!x}EOUM0|xyO-&Uo z*$6+%1HDEja&)vuDtelp7GL03{^uW+V4dwh`SGz!DgPQWKl8AlXjli1Y(*vnd4; zliNxjGOJ}=VSeTlD5|WpEiJgEh?-g)jB-vw(aKp8L#97M2wE=C;V%f|(B4H-s9zT8 z1u5$KooJ8i2bM^!Ck<3%+@=zA;0Y&?XxLlrYoql1UzU6ACFLV!FKepZ?J~S`y&Obd zgV5}xvQAPoY|jMQBbXPCqY!JQrEeOG5wwn6r!@D7nM|33^xzl-VM znDyZ+zU|daeWUvb02o)Wo$gfHlDI&K)dN24=gL|B+GWRG*6hUXz0-p~{$*!zbYpgj z^8VRn<}RcAk1v1!;4gR9PwpJ99l!i`{>`87F^>%ACu}@ZBZf@bFJ!8f@Ct{-#SB9a_#qrdVIT#J{vLY$}g9BwX5e4p@Fi)$?tAI*bG{7 z*9xMGQXnt|Vnxvnhw8zzc?3s8JR2L;bN?ruaUA;H6L z+cgdf1Igi3#YGv}>j6^jm5`5mDDe9{btA?7s)Z*PZ^e+Qk6@Jk&WNIHC07SZBj;(vAIQi%Q(gX>7hNiqfi3y;alfe#lHVyekO7Xz16_ z{nnf{Whs#X%m5qGIzsh{D`g{iG%NF9F4Zq*Dj0pbtujBIAV%E=7GeZj-A6YFcFTc+ z_$?N#OmJ<)Gg$$8=?@W8<<0_sIfQR{)#UwhAE>xrs2hw5Du?3?rTfldsqp z)Ky?Un#Px`eOsRG5J{Nx0ztWtN3sea-Manp`hzz4rehYQX3^zH%h*pgF3l#fb8ofMXnHWRkMGVYtz{%|5cZB# zX2PrR$OQDEhTyU=?vE#%H(m2;e1n4$Ng(=JRBmBx+?ySVZtNhi<6pB?ZZMPIn3bzc zN9H+MDn;SM!Q18U4^<*tog^yDK3enTO<`2Iq3&-W?k3EaC<}dZ?IYlbc&QKz+;J3H z*o9S~wGHu+xvqbhP%#IV(6NK*hhT#x4inw42vi$a#ry>0QC{2C0jC5ZShNjR&XXV@ zr`Q2l!rY={(Oo=gsg--ddv{mHK=_dEt~%T^q-#m(_c4#`w##4Uw-yaKhyvFU%z_s-GBejNB{G88~^w-{qMi})BZny vnJ@OYFDtahoq$+Pi&yewUhG`{0Rgf3+yC$%_3%INf4}9=|G_JM_Ot&Dq8Rj0 diff --git a/fr.json b/fr.json index df11c0e..79673f2 100644 --- a/fr.json +++ b/fr.json @@ -199,7 +199,11 @@ "SETTINGS.ChannellingIngredientsHint":"Les ingrédients appliquent leurs bonus aux tests de Focalisation ainsi qu'aux tests d'Incantation", "SETTINGS.useWoMInfluences":"Utiliser les Influence Maléfiques de Winds of Magic", "SETTINGS.useWoMInfluencesHint":"Utilier les règles d'Influences Maléfiques fournies par Winds of Magfic, page 22", - + "SETTINGS.AutomaticFailure":"Echec automatique", + "SETTINGS.AutomaticFailureHint":"Tout les jets supérieurs ou égaux à cette valeur seront considérés comme des echecs", + "SETTINGS.AutomaticSuccess":"Réussite automatique", + "SETTINGS.AutomaticSuccessHint":"Tout les jets inférieurs ou égaux à cette valeur seront considérés comme des réussites", + "ROLL.CatastrophicMis":"Incantations Imparfaites Catastrophiques", "SHEET.Close" : "Fermer", @@ -829,7 +833,9 @@ "CHARGEN.Trappings.MissingTrappings":"Dotations manquantes", "CHARGEN.Trappings.MissingTrappingsDescription":"

Ces dotations n'ont pas été trouvées, vous pouvez choisir de les conserver comme des dotations vides ou les supprimer. Note: Il est recommandé de supprimer les dotations qui existent mais qui n'ont pas été trouvées, et de les ajouter manuellement (via l'ajout de dotation ci-dessous)

par exemple Supprimer l'arbalète et 12 carreaux et ajoutez séparément une arbalète et 12 carreaux

", "CHARGEN.Trappings.Remove":"Supprimer", - + "CHARGEN.Career.LoadingCareers":"Chargement des carrières...", + "CHARGEN.Message.RerolledDuplicateTalent":"

Relance du Talent dupliqué: {rolled}!

", + "CAREER.DifferentClass": "Entrée dans une nouvelle Classe", "CAREER.LeaveIncomplete": "Départ d'une carrière incomplète", "CAREER.LeaveComplete": "Départ d'une carrière complétée", @@ -1049,6 +1055,7 @@ "CHAT.TestModifiers.IgnoreDefenderMountLarger":"Ignorer la pénalité pour attaquer un personnage monté grâce à la portée de l'arme (Up in Arms).", "CHAT.VortexMove":"Mouvement de vortex aléatoire", "CHAT.NoMoreLeft":"Plus d'instances de crédits disponibles.", + "CHAT.ApplyCondition":"Appliquer {condition}", "Error.SpeciesSkills" : "Impossible d'ajouter des compétences pour les races", "Error.SpeciesTalents" : "Impossible d'ajouter des talents pour les races", @@ -2090,7 +2097,8 @@ "EFFECT.ItemChoice":"Choix de l'item", "EFFECT.ItemFilters":"Filtres d'item", "EFFECT.PromptItem":"Prompt", - + "EFFECT.CanBeAsync":"Le script ne peut utiliser await/async", + "GRIEVANCE.Warning1":"Attention", "GRIEVANCE.Warning2":": Cette information est envoyé sur l'espace Github, qui est un espace publique, donc le Tag Discord est préférable. Sinon, contactez moi (MooMan) directement. Si vous avez l'impression que le bug concerne le module FR, contactez LeRatierBretonnier (Discord Foundry FR)", "GRIEVANCE.Warning3":"Avant de soumettre un rapport de bug", @@ -2268,7 +2276,32 @@ "NAME.Ogre":"Ogre", "QualitiesOr":"ou", "SHEET.Or":"OU", - + + "TYPES.Actor.character":"Personnage joueur", + "TYPES.Actor.creature":"Créature", + "TYPES.Actor.npc":"Personnage Non-Joueur", + "TYPES.Actor.vehicle":"Vehicule", + "TYPES.Item.ammunition":"Munition", + "TYPES.Item.armour":"Armure", + "TYPES.Item.career":"Carrière", + "TYPES.Item.cargo":"Cargaison", + "TYPES.Item.container":"Contenant", + "TYPES.Item.critical":"Critique", + "TYPES.Item.disease":"Maladie", + "TYPES.Item.extendedTest":"Test Etendu", + "TYPES.Item.injury":"Blessure", + "TYPES.Item.money":"Argent", + "TYPES.Item.mutation":"Mutation", + "TYPES.Item.prayer":"Prière", + "TYPES.Item.psychology":"Psychologie", + "TYPES.Item.skill":"Compétence", + "TYPES.Item.spell":"Sort", + "TYPES.Item.talent":"Talent", + "TYPES.Item.trait":"Trait", + "TYPES.Item.trapping":"Possession", + "TYPES.Item.vehicleMod":"Modification de Véhicule", + "TYPES.Item.weapon":"Arme", + "Badger": "Blaireau", "Badgers": "Blaireaux" } diff --git a/module.json b/module.json index 76ae8f8..e9b0b57 100644 --- a/module.json +++ b/module.json @@ -8,7 +8,7 @@ } ], "url": "https://www.uberwald.me/gitea/public/foundryvtt-wh4-lang-fr-fr", - "version": "7.0.0", + "version": "7.0.1", "esmodules": [ "babele-register.js", "addon-register.js", @@ -127,7 +127,7 @@ } ], "manifest": "https://www.uberwald.me/gitea/public/foundryvtt-wh4-lang-fr-fr/raw/v10/module.json", - "download": "https://www.uberwald.me/gitea/public/foundryvtt-wh4-lang-fr-fr/archive/foundryvtt-wh4-lang-fr-7.0.0.zip", + "download": "https://www.uberwald.me/gitea/public/foundryvtt-wh4-lang-fr-fr/archive/foundryvtt-wh4-lang-fr-7.0.1.zip", "id": "wh4-fr-translation", "compatibility": { "minimum": "10", diff --git a/modules/config-patch.js b/modules/config-patch.js index 19cc6ed..4ca52da 100644 --- a/modules/config-patch.js +++ b/modules/config-patch.js @@ -3,17 +3,23 @@ export class WH4FRPatchConfig { /************************************************************************************/ static translateSkillList( skillList) { + + let compendiumName = 'wfrp4e-core.skills' // Per default + if (game.system.version.match("7.")) { + compendiumName = 'wfrp4e-core.items' + } + let newList = []; for( let compName of skillList) { let special = ""; let newName = compName; if ( compName.includes("(") && compName.includes(")") ) { // Then process specific skills name with (xxxx) inside - var re = /(.*) +\((.*)\)/i; - var res = re.exec( compName ); + let re = /(.*) +\((.*)\)/i; + let res = re.exec( compName ); compName = res[1].trim(); // Get the root skill name special = " (" + game.i18n.localize( res[2].trim() ) + ")"; // And the special keyword } - var compNameFR = game.babele.translate( 'wfrp4e-core.skills', { name: compName }, true ); + let compNameFR = game.babele.translate( compendiumName, { name: compName }, true ); //console.log(">>>>> Skill ?", compName, special, compNameFR); if (compNameFR.name != compName) { // Translation OK newName = compNameFR.name + special; @@ -25,6 +31,12 @@ export class WH4FRPatchConfig { /************************************************************************************/ static translateTalentList( talentList) { + + let compendiumName = 'wfrp4e-core.talents' // Per default + if (game.system.version.match("7.")) { + compendiumName = 'wfrp4e-core.items' + } + let newList = []; for( let talentLine of talentList) { let special = ""; @@ -36,12 +48,12 @@ export class WH4FRPatchConfig { talentName = talentName.trim(); let newName2 = talentName; if ( talentName.includes("(") && talentName.includes(")") ) { // Then process specific skills name with (xxxx) inside - var re = /(.*) +\((.*)\)/i; - var res = re.exec( talentName ); + let re = /(.*) +\((.*)\)/i; + let res = re.exec( talentName ); talentName = res[1].trim(); // Get the root skill name special = " (" + game.i18n.localize( res[2].trim() ) + ")"; // And the special keyword } - var talentNameFR = game.babele.translate( 'wfrp4e-core.talents', { name: talentName }, true ); + let talentNameFR = game.babele.translate( compendiumName, { name: talentName }, true ); //console.log(">>>>> Talent ?", talentName, special, talentNameFR); if (talentNameFR.name != talentName) { // Translation OK newName2 = talentNameFR.name + special; @@ -90,6 +102,11 @@ export class WH4FRPatchConfig { /************************************************************************************/ static patch_career() { + let compendiumName = 'wfrp4e-core.careers' // Per default + if (game.system.version.match("7.")) { + compendiumName = 'wfrp4e-core.items' + } + if ( game.wfrp4e.tables.career) { for( let row of game.wfrp4e.tables.career.rows) { for ( let key in row) { @@ -100,7 +117,7 @@ export class WH4FRPatchConfig { row[key].name = "Duelliste"; //console.log(">>>>> Career ?", key, row[key].name, career_fr.name ); } else { - var career_fr = game.babele.translate( 'wfrp4e-core.careers', {name: row[key].name}, true ); + let career_fr = game.babele.translate( compendiumName, {name: row[key].name}, true ); row[key].name = career_fr.name; } } @@ -121,7 +138,7 @@ export class WH4FRPatchConfig { } // Detect and patch as necessary - if (game.wfrp4e.config && game.wfrp4e.config.talentBonuses && game.wfrp4e.config.talentBonuses["vivacité"] == undefined) { + if (game.wfrp4e.config?.talentBonuses && game.wfrp4e.config.talentBonuses["vivacité"] == undefined) { console.log("Patching WFRP4E now ...."); game.wfrp4e.config.qualityDescriptions["distract"] = game.i18n.localize("WFRP4E.Properties.Distract"); // Patch missing quality diff --git a/modules/import-stat-2.js b/modules/import-stat-2.js index 9f51378..0b7530a 100644 --- a/modules/import-stat-2.js +++ b/modules/import-stat-2.js @@ -78,7 +78,7 @@ async function __findItem(itemName, itemType, location = null) { // Search imported items first for (let i of items) { - if (i.name == itemName && i.type == itemType) + if (i.name.toLowerCase() == itemName.toLowerCase() && i.type == itemType) return i; } let itemList @@ -91,7 +91,7 @@ async function __findItem(itemName, itemType, location = null) { }) if (pack) { await pack.getIndex().then(index => itemList = index); - let searchResult = itemList.find(t => (t.translated && t.originalName.toLowerCase() == toSearch) || (t.name.toLowerCase() == toSearch) ); + let searchResult = itemList.find(t => (t.translated && t.type == itemType && t.originalName.toLowerCase() == toSearch) || (t.type == itemType && t.name.toLowerCase() == toSearch) ); if (searchResult) return await pack.getDocument(searchResult._id) } @@ -100,7 +100,7 @@ async function __findItem(itemName, itemType, location = null) { // If all else fails, search each pack for (let p of game.wfrp4e.tags.getPacksWithTag(itemType)) { await p.getIndex().then(index => itemList = index); - let searchResult = itemList.find(t => (t.translated && t.originalName.toLowerCase() == toSearch) || (t.name.toLowerCase() == toSearch) ); + let searchResult = itemList.find(t => (t.translated && t.type == itemType && t.originalName.toLowerCase() == toSearch) || (t.type == itemType && t.name.toLowerCase() == toSearch) ); if (searchResult) return await p.getDocument(searchResult._id) } @@ -134,7 +134,8 @@ async function __findSkill(skillName, value = undefined) { let spec = XRegExp.replace(skillSplit.specialized, "(", ""); spec = XRegExp.replace(spec, ")", ""); let skillSplit2 = XRegExp.exec(dbSkill.name, XRegExp(parseStr, 'gi')); - dbSkill.update( { name: skillSplit2.name + '(' + game.i18n.localize( spec.trim() ) + ')' } ); + dbSkill.name = skillSplit2.name + '(' + game.i18n.localize( spec.trim() ) + ')' + //dbSkill.update( { name: } ); } //game.babele.translate('wfrp4e-core.skills', dbSkill); return dbSkill; @@ -195,7 +196,7 @@ export default async function statParserFR(statString, type = "npc") { let sectionData = sectionDataUS // Detect French stat block if (statString.includes('CC') && statString.includes('CT') && statString.includes('FM')) { - ui.notifications.warn("Le parsing de stablock en Français n'est pas encore prêt") + //ui.notifications.warn("Le parsing de stablock en Français n'est pas encore prêt") statNameReg = fr_carac sectionData = sectionDataFR } @@ -285,6 +286,7 @@ export default async function statParserFR(statString, type = "npc") { if (itemFound && value && value.length > 0) { if (name.toLowerCase() == 'weapon' || name.toLowerCase() == "bite" || name.toLowerCase() == "tail" || name.toLowerCase() == 'arme' || name.toLowerCase() == "morsure" || name.toLowerCase() == "queue") { + console.log(itemFound) itemFound.system.specification.value = Number(value) - Math.floor( Number(model.characteristics.s.initial) / 10) } else { itemFound.system.specification.value = game.i18n.localize(value)