From 355256073e823c390157f2137b9cb613f79c8579 Mon Sep 17 00:00:00 2001 From: Evert Date: Wed, 4 Apr 2018 13:31:27 +0300 Subject: [PATCH] Beginnings of tinkering --- metal_melter/melter.lua | 2 +- tinkering/init.lua | 25 ++ tinkering/materials.lua | 261 ++++++++++++++++++ tinkering/mod.conf | 4 + tinkering/nodesitems.lua | 0 tinkering/pattern.lua | 0 tinkering/register.lua | 42 +++ tinkering/textures/tinkering_axe_head.png | Bin 0 -> 289 bytes tinkering/textures/tinkering_binding.png | Bin 0 -> 402 bytes .../textures/tinkering_overlay_handle_axe.png | Bin 0 -> 245 bytes .../tinkering_overlay_handle_pickaxe.png | Bin 0 -> 271 bytes .../tinkering_overlay_handle_shovel.png | Bin 0 -> 238 bytes .../tinkering_overlay_handle_sword.png | Bin 0 -> 214 bytes tinkering/textures/tinkering_pickaxe_head.png | Bin 0 -> 293 bytes tinkering/textures/tinkering_shovel_head.png | Bin 0 -> 340 bytes tinkering/textures/tinkering_sword_blade.png | Bin 0 -> 287 bytes tinkering/textures/tinkering_tool_rod.png | Bin 0 -> 230 bytes tinkering/util.lua | 4 + 18 files changed, 337 insertions(+), 1 deletion(-) create mode 100644 tinkering/init.lua create mode 100644 tinkering/materials.lua create mode 100644 tinkering/mod.conf create mode 100644 tinkering/nodesitems.lua create mode 100644 tinkering/pattern.lua create mode 100644 tinkering/register.lua create mode 100644 tinkering/textures/tinkering_axe_head.png create mode 100644 tinkering/textures/tinkering_binding.png create mode 100644 tinkering/textures/tinkering_overlay_handle_axe.png create mode 100644 tinkering/textures/tinkering_overlay_handle_pickaxe.png create mode 100644 tinkering/textures/tinkering_overlay_handle_shovel.png create mode 100644 tinkering/textures/tinkering_overlay_handle_sword.png create mode 100644 tinkering/textures/tinkering_pickaxe_head.png create mode 100644 tinkering/textures/tinkering_shovel_head.png create mode 100644 tinkering/textures/tinkering_sword_blade.png create mode 100644 tinkering/textures/tinkering_tool_rod.png create mode 100644 tinkering/util.lua diff --git a/metal_melter/melter.lua b/metal_melter/melter.lua index 8894936..8f67c8c 100644 --- a/metal_melter/melter.lua +++ b/metal_melter/melter.lua @@ -7,7 +7,7 @@ metal_melter.max_metal = 16000 metal_melter.spec = { ingot = 144, crystal = 144, - block = 1000, + block = 1296, lump = 288, ore = 288 } diff --git a/tinkering/init.lua b/tinkering/init.lua new file mode 100644 index 0000000..fd5eaff --- /dev/null +++ b/tinkering/init.lua @@ -0,0 +1,25 @@ +-- Tinkering for Minetest 0.5.0+ +-- Copyright (c) 2018 Evert "Diamond" Prants + +-- This mod is currently stuck behind https://github.com/minetest/minetest/issues/5686 +-- Once this gets implemented, the full abilities of this mod will be available. + +tinkering = rawget(_G, "tinkering") or {} + +local modpath = minetest.get_modpath(minetest.get_current_modname()) +tinkering.modpath = modpath + +-- Utilities +dofile(modpath.."/util.lua") + +-- Pattern Library +dofile(modpath.."/pattern.lua") + +-- Material Database +dofile(modpath.."/materials.lua") + +-- Registration +dofile(modpath.."/register.lua") + +-- Nodes and items +dofile(modpath.."/nodesitems.lua") diff --git a/tinkering/materials.lua b/tinkering/materials.lua new file mode 100644 index 0000000..23ae899 --- /dev/null +++ b/tinkering/materials.lua @@ -0,0 +1,261 @@ + +local modifiers = { + wood = { + cracky = {times={[3]=1.60}, uses=10, maxlevel=1}, + crumbly = {times={[1]=3.00, [2]=1.60, [3]=0.60}, uses=10, maxlevel=1}, + snappy = {times={[2]=1.6, [3]=0.40}, uses=10, maxlevel=1}, + choppy = {times={[2]=3.00, [3]=1.60}, uses=10, maxlevel=1}, + damagegroups = {fleshy = 2}, + explody = nil, + + binding = {increase = 0.00, uses = 0}, + rod = {increase = 0.00, uses = 0}, + tags = { + {name = "cheap", description = "Cheap"}, + {name = "wooden", description = "Wooden"} + } + }, + stone = { + cracky = {times={[2]=2.0, [3]=1.00}, uses=20, maxlevel=1}, + crumbly = {times={[1]=1.80, [2]=1.20, [3]=0.50}, uses=20, maxlevel=1}, + snappy = {times={[2]=1.4, [3]=0.40}, uses=20, maxlevel=1}, + choppy = {times={[1]=3.00, [2]=2.00, [3]=1.30}, uses=20, maxlevel=1}, + damagegroups = {fleshy = 4}, + explody = nil, + + binding = {increase = 0.05, uses = -1}, + rod = {increase = 0.05, uses = -1}, + tags = { + {name = "economic", description = "Economic"}, + {name = "stonebound", description = "Stonebound"} + } + }, + iron = { + cracky = {times={[1]=4.00, [2]=1.60, [3]=0.80}, uses=20, maxlevel=2}, + crumbly = {times={[1]=1.50, [2]=0.90, [3]=0.40}, uses=30, maxlevel=2}, + snappy = {times={[1]=2.5, [2]=1.20, [3]=0.35}, uses=30, maxlevel=2}, + choppy = {times={[1]=2.50, [2]=1.40, [3]=1.00}, uses=20, maxlevel=2}, + damagegroups = {fleshy = 6}, + explody = nil, + + binding = {increase = 0.05, uses = 3}, + rod = {increase = 0.10, uses = 5}, + tags = { + {name = "economic", description = "Economic"}, + {name = "metal", description = "Metallic"} + } + }, + copper = { + cracky = {times={[1]=4.00, [2]=1.60, [3]=0.80}, uses=30, maxlevel=2}, + crumbly = {times={[1]=1.50, [2]=0.90, [3]=0.40}, uses=40, maxlevel=2}, + snappy = {times={[1]=2.50, [2]=1.20, [3]=0.35}, uses=40, maxlevel=2}, + choppy = {times={[1]=2.50, [2]=1.40, [3]=1.00}, uses=30, maxlevel=2}, + damagegroups = {fleshy = 6}, + explody = nil, + + binding = {increase = 0.08, uses = 3}, + rod = {increase = 0.08, uses = 5}, + tags = { + {name = "cold", description = "Cold"} + } + }, + tin = { + cracky = {times={[1]=3.80, [2]=1.50, [3]=0.70}, uses=20, maxlevel=2}, + crumbly = {times={[1]=1.30, [2]=0.80, [3]=0.30}, uses=30, maxlevel=2}, + snappy = {times={[1]=2.30, [2]=1.10, [3]=0.20}, uses=30, maxlevel=2}, + choppy = {times={[1]=2.30, [2]=1.30, [3]=0.90}, uses=20, maxlevel=2}, + damagegroups = {fleshy = 6}, + explody = nil, + + binding = {increase = 0.07, uses = -2}, + rod = {increase = 0.07, uses = -3}, + tags = { + {name = "cheap", description = "Cheap"} + } + }, + mese = { + cracky = {times={[1]=2.4, [2]=1.2, [3]=0.60}, uses=20, maxlevel=3}, + crumbly = {times={[1]=1.20, [2]=0.60, [3]=0.30}, uses=20, maxlevel=3}, + snappy = {times={[1]=2.0, [2]=1.00, [3]=0.35}, uses=30, maxlevel=3}, + choppy = {times={[1]=2.20, [2]=1.00, [3]=0.60}, uses=20, maxlevel=3}, + damagegroups = {fleshy = 7}, + explody = nil, + + binding = {increase = 0.10, uses = 10}, + rod = {increase = 0.15, uses = 10}, + tags = { + {name = "gem", description = "Precious"}, + {name = "expensive", description = "Expensive"} + } + }, + gold = { + cracky = {times={[1]=3.80, [2]=1.50, [3]=0.70}, uses=10, maxlevel=2}, + crumbly = {times={[1]=1.30, [2]=0.80, [3]=0.30}, uses=20, maxlevel=2}, + snappy = {times={[1]=2.30, [2]=1.10, [3]=0.20}, uses=20, maxlevel=2}, + choppy = {times={[1]=2.30, [2]=1.30, [3]=0.90}, uses=10, maxlevel=2}, + damagegroups = {fleshy = 6}, + explody = nil, + + binding = {increase = -0.07, uses = -10}, + rod = {increase = -0.01, uses = -5}, + tags = { + {name = "shiny", description = "Shiny"}, + {name = "soft", description = "Soft"} + } + }, + obsidian = { + cracky = {times={[1]=2.3, [2]=1.0, [3]=0.40}, uses=30, maxlevel=3}, + crumbly = {times={[1]=1.10, [2]=0.50, [3]=0.20}, uses=30, maxlevel=3}, + snappy = {times={[1]=1.85, [2]=0.85, [3]=0.25}, uses=40, maxlevel=3}, + choppy = {times={[1]=2.00, [2]=0.85, [3]=0.40}, uses=30, maxlevel=3}, + damagegroups = {fleshy = 6}, + explody = nil, + + binding = {increase = 0.10, uses = 15}, + rod = {increase = 0.05, uses = 5}, + tags = { + {name = "reinforced", description = "Reinforced"} + } + }, + lead = { + -- TODO: tweak + cracky = {times={[1]=3.70, [2]=1.30, [3]=0.60}, uses=20, maxlevel=2}, + crumbly = {times={[1]=1.20, [2]=0.60, [3]=0.20}, uses=30, maxlevel=2}, + snappy = {times={[1]=2.20, [2]=1.00, [3]=0.10}, uses=30, maxlevel=2}, + choppy = {times={[1]=2.20, [2]=1.20, [3]=0.60}, uses=20, maxlevel=2}, + damagegroups = {fleshy = 7}, + explody = nil, + + binding = {increase = 0.15, uses = 1}, + rod = {increase = 0.05, uses = -5}, + tags = { + {name = "toxic", description = "Toxic"} + } + }, + chromium = { + -- TODO: tweak + cracky = {times={[1]=3.70, [2]=1.30, [3]=0.60}, uses=20, maxlevel=2}, + crumbly = {times={[1]=1.20, [2]=0.60, [3]=0.20}, uses=30, maxlevel=2}, + snappy = {times={[1]=2.20, [2]=1.00, [3]=0.10}, uses=30, maxlevel=2}, + choppy = {times={[1]=2.20, [2]=1.20, [3]=0.60}, uses=20, maxlevel=2}, + damagegroups = {fleshy = 5}, + explody = nil, + + binding = {increase = 0.15, uses = 1}, + rod = {increase = -0.05, uses = 2}, + tags = { + {name = "shiny", description = "Shiny"} + } + }, + zinc = { + -- TODO: tweak + cracky = {times={[1]=3.70, [2]=1.30, [3]=0.60}, uses=20, maxlevel=2}, + crumbly = {times={[1]=1.20, [2]=0.60, [3]=0.20}, uses=30, maxlevel=2}, + snappy = {times={[1]=2.20, [2]=1.00, [3]=0.10}, uses=30, maxlevel=2}, + choppy = {times={[1]=2.20, [2]=1.20, [3]=0.60}, uses=20, maxlevel=2}, + damagegroups = {fleshy = 5}, + explody = nil, + + binding = {increase = -0.05, uses = 1}, + rod = {increase = -0.05, uses = 2}, + tags = { + {name = "metal", description = "Metallic"} + } + }, + silver = { + cracky = {times = {[1] = 2.60, [2] = 1.00, [3] = 0.60}, uses = 100, maxlevel= 1}, + crumbly = {times = {[1] = 1.10, [2] = 0.40, [3] = 0.25}, uses = 100, maxlevel= 1}, + snappy = {times = {[2] = 0.70, [3] = 0.30}, uses = 100, maxlevel= 1}, + choppy = {times = {[1] = 2.50, [2] = 0.80, [3] = 0.50}, uses = 100, maxlevel= 1}, + damagegroups = {fleshy = 6}, + explody = nil, + + binding = {increase = -0.05, uses = 10}, + rod = {increase = -0.05, uses = 10}, + tags = { + {name = "durable", description = "Durable"}, + {name = "shiny", description = "Shiny"} + } + }, + mithril = { + cracky = {times = {[1] = 2.25, [2] = 0.55, [3] = 0.35}, uses = 200, maxlevel= 2}, + crumbly = {times = {[1] = 0.70, [2] = 0.35, [3] = 0.20}, uses = 200, maxlevel= 2}, + snappy = {times = {[2] = 0.70, [3] = 0.25}, uses = 200, maxlevel= 2}, + choppy = {times = {[1] = 1.75, [2] = 0.45, [3] = 0.45}, uses = 200, maxlevel= 2}, + damagegroups = {fleshy = 9}, + explody = nil, + + binding = {increase = 0.05, uses = 15}, + rod = {increase = -0.10, uses = 15, damage = {fleshy = 8}}, + tags = { + {name = "durable", description = "Durable"}, + {name = "lethal", description = "Lethal"} + } + }, + -- Modifier items + diamond = { + uses = 20, + increase = 0.25, + count = 1, + tags = { + {name = "diamond", description = "Diamond"} + } + }, + -- Templates + default_item = { + cracky = {}, -- Pickaxe + crumbly = {}, -- Shovel + snappy = {}, -- Sword + choppy = {}, -- Axe + damagegroups = {fleshy = 0}, -- Sword damage + explody = nil, -- Explody group + + -- Binding specifications + binding = { + increase = 0.00, -- Increase in `times`. Divided by group number. + uses = 0, -- Base uses increase + damage = {fleshy = 8} -- Sets the damagegroups to this value. + }, + + -- Rod specifications, same format as binding + rod = {}, + + -- Tags added to this tool + tags = {} + }, + default_modifier = { + uses = 0, -- Base uses increase + increase = 0.00, -- Times increase. Divided by group number. + count = 1, -- How many times this modifier can be applied + + -- Tags added to this tool + tags = {} + } +} + +tinkering.materials = { + -- Materials + wood = {name = "Wood", default = "group:wood", color = "#634623", base = "group", modifier = modifiers.wood}, + stone = {name = "Stone", default = "group:stone", color = "#8D8988", base = "group", modifier = modifiers.stone}, + obsidian = {name = "Obsidian", default = "default:obsidian", color = "#2C384E", base = "node", cast = true, modifier = modifiers.obsidian}, + + -- Metals + iron = {name = "Iron", default = "default:steel_ingot", color = "#FFF", base = "ingot", cast = true, modifier = modifiers.iron}, + copper = {name = "Copper", default = "default:copper_ingot", color = "#FF9F72", base = "ingot", cast = true, modifier = modifiers.copper}, + tin = {name = "Tin", default = "default:tin_ingot", color = "#C1C1C1", base = "ingot", cast = true, modifier = modifiers.tin}, + gold = {name = "Gold", default = "default:gold_ingot", color = "#FFFF54", base = "ingot", cast = true, modifier = modifiers.gold}, + mese = {name = "Mese", default = "default:mese_crystal", color = "#FFFF02", base = "gem", modifier = modifiers.mese}, + + -- From technic + lead = {name = "Lead", default = "technic:lead_ingot", color = "#C6C6C6", base = "ingot", cast = true, modifier = modifiers.lead}, + chromium = {name = "Chromium", default = "technic:chromium_ingot", color = "#DFE8E8", base = "ingot", cast = true, modifier = modifiers.chromium}, + zinc = {name = "Zinc", default = "technic:zinc_ingot", color = "#CEE8EF", base = "ingot", cast = true, modifier = modifiers.zinc}, + + -- From moreores + silver = {name = "Silver", default = "moreores:silver_ingot", color = "#D7E2E8", base = "ingot", cast = true, modifier = modifiers.silver}, + mithril = {name = "Mithril", default = "moreores:mithril_ingot", color = "#6868D7", base = "ingot", cast = true, modifier = modifiers.mithril} +} + +tinkering.modifiers = { + diamond = {name = "Diamond", default = "default:diamond", modifier = modifiers.diamond} +} diff --git a/tinkering/mod.conf b/tinkering/mod.conf new file mode 100644 index 0000000..c02c317 --- /dev/null +++ b/tinkering/mod.conf @@ -0,0 +1,4 @@ +name = tinkering +description = Combine materials to create tools +depends = metal_melter +optional_depends = unified_inventory,technic,moreores diff --git a/tinkering/nodesitems.lua b/tinkering/nodesitems.lua new file mode 100644 index 0000000..e69de29 diff --git a/tinkering/pattern.lua b/tinkering/pattern.lua new file mode 100644 index 0000000..e69de29 diff --git a/tinkering/register.lua b/tinkering/register.lua new file mode 100644 index 0000000..41b1831 --- /dev/null +++ b/tinkering/register.lua @@ -0,0 +1,42 @@ +local textures = { + pick = {"tinkering_pickaxe_head.png", "tinkering_overlay_handle_pickaxe.png"}, + axe = {"tinkering_axe_head.png", "tinkering_overlay_handle_axe.png"}, + sword = {"tinkering_sword_blade.png", "tinkering_overlay_handle_sword.png"}, + shover = {"tinkering_shovel_head.png", "tinkering_overlay_handle_shovel.png"}, + + rod = "tinkering_tool_rod.png", + binding = "tinkering_binding.png" +} + +local components = { + pickaxe_head = {description = "%s Pickaxe Head", materials = 1, image = textures.pick[1]}, + axe_head = {description = "%s Axe Head", materials = 1, image = textures.axe[1]}, + sword_blade = {description = "%s Sword Blade", materials = 1, image = textures.sword[1]}, + shover_head = {description = "%s Shovel Head", materials = 1, image = textures.shover[1]}, + tool_rod = {description = "%s Tool Rod", materials = 1, image = textures.rod}, + tool_binding = {description = "%s Binding", materials = 1, image = textures.binding} +} + +function tinkering.register_component(data) + local desc = data.description + local name = data.name + local mod = data.mod_name or "tinkering" + + minetest.register_craftitem(mod..":"..name, { + description = desc, + groups = {tinker_component = 1}, + inventory_image = data.image + }) +end + +for i, v in pairs(components) do + if v.materials == 1 then + for m, s in pairs(tinkering.materials) do + tinkering.register_component({ + name = m.."_"..i, + description = v.description:format(s.name), + image = tinkering.color_filter(v.image, s.color) + }) + end + end +end diff --git a/tinkering/textures/tinkering_axe_head.png b/tinkering/textures/tinkering_axe_head.png new file mode 100644 index 0000000000000000000000000000000000000000..ade8fd53ba970afc35e9183d56f7f17db592c67e GIT binary patch literal 289 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE(}LN@O|akK%fX`fk$L9 z0|U1(2s1Lwnj--eWH0gbb!C6V!oneM_R#Y+BTz^-GbEzKIX^cyHLnE7WngeFN=++?MZUj+D$TC`}c!f>gnp|vd$@?2>`i#U%UVS literal 0 HcmV?d00001 diff --git a/tinkering/textures/tinkering_binding.png b/tinkering/textures/tinkering_binding.png new file mode 100644 index 0000000000000000000000000000000000000000..2c38927d7e35f046ba2e60cab2f1059c68713cab GIT binary patch literal 402 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE(}LN@O|akK%fX`fk$L9 z0|U1(2s1Lwnj--eWH0gbb!C6V!onrRelF!S$QaqokcblJ{M_8syb>Unfx)>bHL)Z$ zMWH;iBtya7(>EYRFO?lA{>{_HF~s8Z-QbN~Ede||(a|@5sxE5%uiG?LheIn$L+O<8 zJUebd(SuI&&X|^SpWbyZwmfE)foIyJMuETU3uM^Czp8k~z1qHBrAz6>F28xt=T5p( z+PiC==K0Uxm3jF}S!qwn&N%|596TwPsG^ z{H~B`PnkFCc>kQb@b|vv;=Wa@^seul+Zg0k66@~7@#^=y7J(mz2e;)$Ol!4xo+8n< zXq8sxtTN9}9oupR+Z4MNRbRa?SU5 zcNr{x-`t%3zwo57;H5K%4<9c0`6=~N?!BGG&;L(cR(ZIMS0yv8(QsYt?qdglKtMp? dfXDR`CWek}e!t`2)LjMH?&<31vd$@?2>=vjQ`!Ik literal 0 HcmV?d00001 diff --git a/tinkering/textures/tinkering_overlay_handle_pickaxe.png b/tinkering/textures/tinkering_overlay_handle_pickaxe.png new file mode 100644 index 0000000000000000000000000000000000000000..04d2938149bed476ffe163d1a571263cfd9f74ec GIT binary patch literal 271 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE(}LN@O|akK%fX`fk$L9 z0|U1(2s1Lwnj--eWH0gbb!C6V!os0ypxZpb7bql~84^+AoS&PUnpXnkGB7w7r6!i7 zrYMwWmSiZnd-?{X=%um)#fv>%978NlzrDPX_kaQq%YpI}ay+dwgbW#kqysMPY;H0v z(BitJq7gLf$l6l<`oss;!pS0O)7%x8if}6WDBhN}m~d^@l%UIf>k7O)85UgQO6Jj> zd*;lgDB<^itG+j$pIcwkIJfw81$)CB*?y}vd$@?2>>T}N)`YB literal 0 HcmV?d00001 diff --git a/tinkering/textures/tinkering_overlay_handle_sword.png b/tinkering/textures/tinkering_overlay_handle_sword.png new file mode 100644 index 0000000000000000000000000000000000000000..b442d3fbeba71c41d52a3f1e5d5b59aca520334e GIT binary patch literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE(}LN@O|akK%fX`fk$L9 z0|U1(2s1Lwnj--eWH0gbb!C6V!os1>zMLcc08mIaGbEzKIX^cyHLnE7WngeFN=+CajtdwzvU+y($CNPtA15LE#>TV x{rEHiAt9xcsy!$C#D#>C3`|W^WhDMj=4QyXlGx1ovSCwvbe7EnPK7*NOk%AeQ z@k$=epqwocMpr}RKYwo6{dxwkpe94b`@(tZL0%k+GSeIVPegG)mx;=jNRDax!24?N z>JAO#*O%&CmYmtse?;QDpwcb(thKkQuRooC{;-}uBg0Y=(TV0C{)nEiJS?$U{Qk@+ dhKdL8U$ag;RrtK>mI*J&wVtkiF6*2UngI7IWQYI& literal 0 HcmV?d00001 diff --git a/tinkering/textures/tinkering_shovel_head.png b/tinkering/textures/tinkering_shovel_head.png new file mode 100644 index 0000000000000000000000000000000000000000..de7a0bb5feed3c00c99b82d810e9e0ffe5f62f0a GIT binary patch literal 340 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE(}LN@O|akK%fX`fk$L9 z0|U1(2s1Lwnj--eWH0gbb!C6V!os0oeOzsC15ijdGbEzKIX^cyHLnE7WngeFN=+)#!lcn8riZ{OA^6Cjn92^5me42dXl&d<$F%_{+N85o?4QWHy3 zQxwWGOEMJPJ$(aG^itV@;?15ejv*GO?@rvv>!Qfx%&UB114j~{8*k4+o{mYZFEk#l zp5PZ=`{V9Tug@~-Y;mXNFl`NcXL&5+ji!uKLor`64?}}(YxVmN_vRlD3*C0j;`x$} z5AqMAw98$?XPbYq`WE$?@1N<;rtK~*tA3q0QfHs9y)?y3Q{m^Hb+=DUQz<%k{dpb3 Xp5n7or}mtb1G&@F)z4*}Q$iB}l?Y^` literal 0 HcmV?d00001 diff --git a/tinkering/textures/tinkering_tool_rod.png b/tinkering/textures/tinkering_tool_rod.png new file mode 100644 index 0000000000000000000000000000000000000000..6521f8821197e8785040a0d6b526f230c90ba5b0 GIT binary patch literal 230 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE(}LN@O|akK%fX`fk$L9 z0|U1(2s1Lwnj--eWH0gbb!C6V!or~`7Hl202Ph<)84^+AoS&PUnpXnkGB7w7r6!i7 zrYMwWmSiZnd-?{X=%um)#l1XT978NlCnrcmKDf3v`oI5tyT9_0J)I(FZES3K-rw7+ zeEwPb`FVfu?<{`)Kk%%x)8{r`X^%^1n37|5m-RLRfue#!Lt(~KeujtsDePVH`zC;_ N^K|udS?83{1OO