From aa639fb531e2b3b249424ba4ec5afd34ca027f48 Mon Sep 17 00:00:00 2001 From: Joachim Stolberg Date: Fri, 21 Jun 2019 17:45:15 +0200 Subject: [PATCH] ind. furnace menu improved basalt glass reworked --- basis/lib.lua | 6 ++ furnace/cooking.lua | 55 ++++++++-- furnace/furnace_top.lua | 27 ++++- furnace/recipes.lua | 66 ++++++++++++ iron_age/hammer.lua | 2 +- nodes/basalt.lua | 113 +++++++++++++++----- textures/techage_appl_electric_gen_side.png | Bin 279 -> 215 bytes textures/techage_basalt_glass.png | Bin 491 -> 403 bytes textures/techage_basalt_glass2.png | Bin 0 -> 427 bytes textures/techage_basalt_glass3.png | Bin 0 -> 403 bytes textures/techage_constr_plan.png | Bin 2144 -> 809 bytes textures/techage_constr_plan_inv.png | Bin 2063 -> 387 bytes textures/techage_form_gear_fg.png | Bin 3002 -> 0 bytes textures/techage_industriallamp_inv3.png | Bin 9466 -> 789 bytes 14 files changed, 232 insertions(+), 37 deletions(-) create mode 100644 textures/techage_basalt_glass2.png create mode 100644 textures/techage_basalt_glass3.png delete mode 100644 textures/techage_form_gear_fg.png diff --git a/basis/lib.lua b/basis/lib.lua index a988728..2a2bc89 100644 --- a/basis/lib.lua +++ b/basis/lib.lua @@ -74,6 +74,12 @@ function techage.index(list, x) return nil end +function techage.add_to_set(set, x) + if not techage.index(set, x) then + table.insert(set, x) + end +end + function techage.get_node_lvm(pos) local node = minetest.get_node_or_nil(pos) if node then diff --git a/furnace/cooking.lua b/furnace/cooking.lua index ee82e0c..88cc205 100644 --- a/furnace/cooking.lua +++ b/furnace/cooking.lua @@ -21,12 +21,42 @@ local M = minetest.get_meta local MP = minetest.get_modpath("techage") local I,_ = dofile(MP.."/intllib.lua") +local range = techage.range + local Recipes = {} -- registered recipes +local Ingredients = {} local KeyList = {} -- index to Recipes key translation -local NumRecipes = 0 techage.furnace = {} +-- Return a list with all outputs of the given list of ingredients +local function get_recipes(ingr) + if #ingr > 0 then + local tbl = {} + for _,item in ipairs(ingr) do + if Ingredients[item] then + for _,output in ipairs(Ingredients[item]) do + tbl[#tbl+1] = output + end + end + end + return tbl + else + return KeyList + end +end + +function techage.furnace.get_ingredients(pos) + local inv = M(pos):get_inventory() + local tbl = {} + for _,stack in ipairs(inv:get_list('src')) do + if stack:get_name() ~= "" then + tbl[#tbl+1] = stack:get_name() + end + end + return tbl +end + -- move recipe src items to output inventory local function process(inv, recipe) local res @@ -75,13 +105,18 @@ function techage.furnace.smelting(pos, mem, elapsed) return techage.STANDBY end -function techage.furnace.get_output(idx) - local key = KeyList[idx] or KeyList[1] - return Recipes[key].output +function techage.furnace.get_output(ingr, idx) + local tbl = get_recipes(ingr) + idx = range(idx, 1, #tbl) + local key = tbl[idx] or tbl[1] + if Recipes[key] then + return Recipes[key].output + end + return Recipes[KeyList[1]].output end -function techage.furnace.get_num_recipes() - return NumRecipes +function techage.furnace.get_num_recipes(ingr) + return #get_recipes(ingr) end function techage.furnace.reset_cooking(mem) @@ -108,7 +143,13 @@ function techage.furnace.register_recipe(recipe) number = number, time = math.max((recipe.time or 3) * number, 2), } - NumRecipes = NumRecipes + 1 + for _,item in ipairs(recipe.recipe) do + if Ingredients[item] then + techage.add_to_set(Ingredients[item], output) + else + Ingredients[item] = {output} + end + end if minetest.global_exists("unified_inventory") then recipe.items = recipe.recipe diff --git a/furnace/furnace_top.lua b/furnace/furnace_top.lua index a00b439..5f62a25 100644 --- a/furnace/furnace_top.lua +++ b/furnace/furnace_top.lua @@ -32,10 +32,15 @@ local smelting = techage.furnace.smelting local get_output = techage.furnace.get_output local num_recipes = techage.furnace.get_num_recipes local reset_cooking = techage.furnace.reset_cooking +local get_ingredients = techage.furnace.get_ingredients +local range = techage.range local function formspec(self, pos, mem) - local idx = mem.recipe_idx or 1 - local num, output = num_recipes(), get_output(idx) + local ingr = get_ingredients(pos) + local num = num_recipes(ingr) + mem.recipe_idx = range(mem.recipe_idx or 1, 1, num) + local idx = mem.recipe_idx + local output = get_output(ingr, idx) return "size[8,7.2]".. default.gui_bg.. default.gui_bg_img.. @@ -56,7 +61,7 @@ local function formspec(self, pos, mem) "listring[current_player;main]".. "listring[context;dst]" .. "listring[current_player;main]".. - default.get_hotbar_bg(0, 4) + default.get_hotbar_bg(0, 3.5) end local function on_rightclick(pos, node, clicker) @@ -102,6 +107,7 @@ local function allow_metadata_inventory_put(pos, listname, index, stack, player) return 0 end if listname == "src" then + local mem = tubelib2.get_mem(pos) CRD(pos).State:start_if_standby(pos) return stack:get_count() elseif listname == "dst" then @@ -123,6 +129,12 @@ local function allow_metadata_inventory_take(pos, listname, index, stack, player return stack:get_count() end +local function on_metadata_inventory(pos) + local mem = tubelib2.get_mem(pos) + local crd = CRD(pos) + M(pos):set_string("formspec", formspec(crd.State, pos, mem)) +end + local function on_receive_fields(pos, formname, fields, player) if minetest.is_protected(pos, player:get_player_name()) then return @@ -130,11 +142,13 @@ local function on_receive_fields(pos, formname, fields, player) local mem = tubelib2.get_mem(pos) mem.recipe_idx = mem.recipe_idx or 1 if fields.next == ">>" then - mem.recipe_idx = math.min(mem.recipe_idx + 1, num_recipes()) + local ingr = get_ingredients(pos) + mem.recipe_idx = math.min(mem.recipe_idx + 1, num_recipes(ingr)) M(pos):set_string("formspec", formspec(CRD(pos).State, pos, mem)) reset_cooking(mem) elseif fields.priv == "<<" then - mem.recipe_idx = math.max(mem.recipe_idx - 1, 1) + local ingr = get_ingredients(pos) + mem.recipe_idx = range(mem.recipe_idx - 1, 1, num_recipes(ingr)) M(pos):set_string("formspec", formspec(CRD(pos).State, pos, mem)) reset_cooking(mem) end @@ -228,6 +242,9 @@ local _, node_name_ta3, _ = allow_metadata_inventory_put = allow_metadata_inventory_put, allow_metadata_inventory_move = allow_metadata_inventory_move, allow_metadata_inventory_take = allow_metadata_inventory_take, + on_metadata_inventory_put = on_metadata_inventory, + on_metadata_inventory_take = on_metadata_inventory, + on_metadata_inventory_move = on_metadata_inventory, groups = {choppy=2, cracky=2, crumbly=2}, sounds = default.node_sound_wood_defaults(), num_items = {0,1,1,1}, diff --git a/furnace/recipes.lua b/furnace/recipes.lua index a568153..709d244 100644 --- a/furnace/recipes.lua +++ b/furnace/recipes.lua @@ -54,3 +54,69 @@ minetest.after(1, function() end end end) + +techage.furnace.register_recipe({ + output = "techage:basalt_glass2", + recipe = { + "techage:basalt_gravel", + "techage:basalt_gravel", + "techage:basalt_gravel", + "techage:basalt_gravel", + }, + time = 4, +}) + +techage.furnace.register_recipe({ + output = "techage:basalt_glass", + recipe = { + "techage:sieved_basalt_gravel", + "techage:sieved_basalt_gravel", + "techage:sieved_basalt_gravel", + "techage:sieved_basalt_gravel", + }, + time = 4, +}) + +techage.furnace.register_recipe({ + output = "techage:basalt_glass_thin2 4", + recipe = { + "techage:basalt_gravel", + "techage:basalt_gravel", + "techage:basalt_gravel", + "techage:basalt_gravel", + }, + time = 4, +}) + +techage.furnace.register_recipe({ + output = "techage:basalt_glass_thin 4", + recipe = { + "techage:sieved_basalt_gravel", + "techage:sieved_basalt_gravel", + "techage:sieved_basalt_gravel", + "techage:sieved_basalt_gravel", + }, + time = 4, +}) + +techage.furnace.register_recipe({ + output = "techage:basalt_glass_thin_xl2 2", + recipe = { + "techage:basalt_gravel", + "techage:basalt_gravel", + "techage:basalt_gravel", + "techage:basalt_gravel", + }, + time = 4, +}) + +techage.furnace.register_recipe({ + output = "techage:basalt_glass_thin_xl 2", + recipe = { + "techage:sieved_basalt_gravel", + "techage:sieved_basalt_gravel", + "techage:sieved_basalt_gravel", + "techage:sieved_basalt_gravel", + }, + time = 4, +}) diff --git a/iron_age/hammer.lua b/iron_age/hammer.lua index ab2168d..f8b57fd 100644 --- a/iron_age/hammer.lua +++ b/iron_age/hammer.lua @@ -40,7 +40,7 @@ local function handler(player_name, node, itemstack, digparams) end end end - if node.name == "techage:basalt_stone" then + if node.name == "techage:basalt_stone" or node.name == "techage:basalt_cobble" then node.name = "techage:basalt_gravel" else node.name = "default:gravel" diff --git a/nodes/basalt.lua b/nodes/basalt.lua index 3d62524..bd87762 100644 --- a/nodes/basalt.lua +++ b/nodes/basalt.lua @@ -84,6 +84,95 @@ minetest.register_node("techage:basalt_glass", { sounds = default.node_sound_glass_defaults(), }) +minetest.register_node("techage:basalt_glass2", { + description = "Basalt Glass 2", + drawtype = "glasslike_framed_optional", + tiles = {"techage_basalt_glass2.png"}, + use_texture_alpha = true, + paramtype = "light", + paramtype2 = "glasslikeliquidlevel", + sunlight_propagates = true, + is_ground_content = false, + groups = {cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_node("techage:basalt_glass_thin", { + description = "Basalt Glass Thin", + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-8/16, -8/16, -1/16, 8/16, 8/16, 1/16}, + }, + }, + tiles = {"techage_basalt_glass.png"}, + use_texture_alpha = true, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + is_ground_content = false, + groups = {cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_node("techage:basalt_glass_thin2", { + description = "Basalt Glass Thin 2", + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-8/16, -8/16, -1/16, 8/16, 8/16, 1/16}, + }, + }, + tiles = {"techage_basalt_glass2.png"}, + use_texture_alpha = true, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + is_ground_content = false, + groups = {cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_node("techage:basalt_glass_thin_xl", { + description = "Basalt Glass Thin XL", + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-8/16, -8/16, -1/16, 16/16, 16/16, 1/16}, + }, + }, + tiles = {"techage_basalt_glass.png"}, + use_texture_alpha = true, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + is_ground_content = false, + groups = {cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_node("techage:basalt_glass_thin_xl2", { + description = "Basalt Glass Thin XL 2", + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-8/16, -8/16, -1/16, 16/16, 16/16, 1/16}, + }, + }, + tiles = {"techage_basalt_glass2.png"}, + use_texture_alpha = true, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + is_ground_content = false, + groups = {cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_glass_defaults(), +}) + stairs.register_stair_and_slab( "basalt_stone", "techage:basalt_stone", @@ -128,23 +217,6 @@ stairs.register_stair_and_slab( false ) -stairs.register_stair_and_slab( - "basalt_glass", - "techage:basalt_glass", - {cracky = 3, oddly_breakable_by_hand = 3}, - {"techage_basalt_glass.png"}, - "Basalt Glass Stair", - "Basalt Glass Slab", - default.node_sound_glass_defaults(), - false -) - -minetest.register_craft({ - type = "cooking", - output = "techage:basalt_stone", - recipe = "techage:basalt_cobble", -}) - minetest.register_craft({ output = "techage:basalt_stone_brick 4", recipe = { @@ -153,13 +225,6 @@ minetest.register_craft({ } }) -minetest.register_craft({ - type = "cooking", - output = "techage:basalt_glass", - recipe = "techage:sieved_basalt_gravel", - cooktime = 4, -}) - minetest.register_craft({ output = "techage:basalt_stone_block 9", recipe = { diff --git a/textures/techage_appl_electric_gen_side.png b/textures/techage_appl_electric_gen_side.png index b021d626e06b0c7578786bbab71ec107561ce4b5..c770b055ec03f07e72a9fba9aed3aee10b23ad21 100644 GIT binary patch delta 199 zcmbQvbe(a6L_G^L0|P^2NcwRg#ggvm>&U>cv7h@-A}f&3SRCZ;#IWw1%u67Lv%n*= zn1O*?7=#%aX3dcR3JL}Igt+=-76O@z7cc(*|Nq^)chl0+bn6fN1L-db@(X5gcy=QV z$Z_;^aSYKopPaCOOTdN6f@RK>1rDrQ4huLYi#KsgG%-$U*r>?yD7Z1NZIaR~hYW>X qx=kU%1q-_w?nLz{s7SmLVP;7DDaFB*XCwwRjlt8^&t;ucLK6Unu{?7C delta 243 zcmV9krM8UlPR5^e}m3~*Pw*Rhtf>iDScJF_O z4v<9J_#@K1OfWE^=i}e`qq`Bk3=cmxKJ+upN+~XjjqwH;K!28GPOv0k6-xkJ-N0hA zgJsnMhh6ACLbEDMfEzSRe8E!c34K&jRmmC-D(j@$ng|@^0PmYlO;Lv&(A1%OSMgE_ z;0drfnn3p^jC;Jsqz8b84j>(U2ebpyvv;}!j8{&W1%RW*2I>lE1qHo3Kv%RmqVqT< z#&^(s1tRk$fIlcYh$RIu)r^U%ZygSfc?CLS@FERMLvnLOxftga6jA>;#Xlh6nrEb(Xk2iREJY~P6kBP0JliEJ8f}f=NJmnfDS7N zL85?~z>9*;lXEc!kzL@!mnv!?#2Cdz_mm8H4WSYh?V75!5wt}TT`b_JFVUTb)J-oWvns%8O|x|u z;HhC&S1k=0N*4+`E#jOAt>v68Sx6gEDM!@6cBWINsEN^7GTn=;K-RUhHZs%No}pEV z{q5ReEN8FJHIDufAATJu;cVpl-(x>)kmp{1)70l_?ih1_{sE8JO9NS%G}U;vjb? zhIQv;UIICs1s;*b3=G`DAk4@xYmNj^P$Ix5#P$FG|Ns8|1CkI%X=!OzR@TdxFPr?` zp8(Zxlmz(&=adGLZHDMo-U3d8s~i{I(8j4;Bi$=+q7L_XG3wL&|HNF zMz^ONe7EiJgc95CNw2?q_gVjCWS{qcdW%o?xoo}L(>|xUFU())FSbyYYm!w|&?{E1 zvLz+UvWq%5Om19PJ8PlJI=KV?m5iOvFqBtvy2yPw-RQ$0!?Qql;;KhHIS=?27`oXq z7FJx~O<HU`P%L* z*`=;ZuU71{K6BY&!=EKpC6P<~>~=9f2xB}EA^V+KqI&jY)(wUq|7PeOY<|ytI;+}7 z{y=%x+s6y_ig$luZ%$q(c5G`itKX!``}_a(@J!j>lppIIw|$a#B~x^nhe^5A%qUNS%G}U;vjb? zhIQv;UIICs1s;*b3=G`DAk4@xYmNj^P&B|N#P!dgKmY&#|M%}-K|uk8QD0wQ$ar-s zPyu^MkYBK+k=qf?@Hr-Vf+0YmFP<)rAsXjnCk6H$HsEkMxR)WsvcYv~UHIB<|JT(t zg}h@ddtcwqH^JrB59LdHd<+a0K7V}w=i=RhdwKZn&FsDypYhVv>+b!?CgCtG#czX3 zf~Yq`?A-%No10UwGPTFPuyfk1<=r4{;$3qv=oM#eNKoiWDL$>&OK#2Lka@!Jezu=) zV7ttPD+{Z`KL&9=;M`z2%i+6PPxYQ-OV}IQ_!MMo*|#uX+FZVixhLFj25ZCOV{EUu zGFVynT04Yqv0U`oLiJerg&J0+&#Da?RvoIW23LDJSLMs{^;NQ3C4W%j^>!{QcG)TM nTvR0RU!G(7jqoa&x^{iP&sNdF*$J&c|1)^H`njxgN@xNA7g3tE literal 0 HcmV?d00001 diff --git a/textures/techage_constr_plan.png b/textures/techage_constr_plan.png index e9b142956c5c1adb8c8ca8aaa82cfd377147bd44..6f5a626f36b79c41a07cddcc81762b1967790abd 100644 GIT binary patch delta 769 zcmV+c1OEKr5UB=`8Gi!+002a!ipBr{0UA(DR7C(W06H)kp>Q##b2F-UHm!k4vVlOa zf=jN1O|gVdvV~2whE1@CQnQIrwuw%)iBYwQQn-mvwu(@qio5eYs#Z($fIz|q-V*cY|f-;%B5?{rEblpYR;!=&!=n7sBF%uZq2E2&#G+9 zs&>z+anGx6&ws3N&#ZILtaZ<=be#UG z;k&PW_@Dp)00DGTPE!Ct=GbNc0004EOGiWihy@);00009a7bBm000XU000XU0RWnu z7ytkO2XskIMF-;s6%QyEVNw0j0000TX;fHrLvL+uWsztee*s@fL_t(I%YBoFQo}F| zhGn3%v=B&3*?aH3SJ|uV4YuC@HIQW|b~w(uOQP7ntxxeEXx_Pac>ekNsNKE3++V+a ze%Ifhj?W(Jm$x_jTVuUV5JNCxD1`+j$b|(t$cGv7P(ehAeB+0WB(Ff3av_9yRWz>L zEG1>A>O|;Vf2GTny(p?s&~pM^A+HjN3Q#mVD8zpV5Q`AeoD?)7bTAI#s-#8)SC%0S zfsO!W6;3ssaJ8i;W`-4HfmtLo6p|U%vLy_O(?u|2_>7+S@{3>(EV><(&4ky{04#Hx znI8Nd`eD-!E1!YC19Nu4r2MnS4~3o3owS+OW#XipcMgb63CZUnY!@nJAy4Z5gyZ)n zwU|8VvkNaXCLm9u{ZJVO`&3Atlo85WQy!vgYTSP(&D7_#9PxL4gsucv&500000NkvXXu0mjflrC_} delta 2077 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 Ef;o7&kpKVy diff --git a/textures/techage_form_gear_fg.png b/textures/techage_form_gear_fg.png deleted file mode 100644 index b7a762acf42c5ced4cf3873b757d689456d61a5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3002 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 diff --git a/textures/techage_industriallamp_inv3.png b/textures/techage_industriallamp_inv3.png index d38793568a748851a43a18a780679d540e403ca7..f3af87349e9d89d457e1f0ae1f919624717b969b 100644 GIT binary patch literal 789 zcmV+w1M2*VP)Px#Gf+%aMTdrdG6@M%4-e}oDgOWh{~sY~6BPe1F9rq! zgoAt1C@8KWA#`qM!BS6*85^B(YcMk~kg@vZ00009a7bBm000XU000XU0RWnu7ytkQ zYe_^wR9M69*UPr6APfLdkn#vB`u|^h5)kCs;^`UO!Oftnb;&LQ2ErJFE8;gc9oNk_ zKtC891p)O}xG%*vIl#aQyC27F7aHIYFAA~mu_Nsx!5iRe|B_k@#m^0fZMy($S|&g* z#uzL1?$bbT5Ez`i0W@B*Et1Cn{taw1h5$)O0Z`DuLjKp#JQ5fJvQRk?kkpmla`_B| z+1a*-Kp{wNxluI54*&`&b3p6YYaao416R%pQ2;@i04%lg!55C7tFA-51)AWCa;p^$ zAZLM~5EGREXxReHd7EY>`x<| z&;y!;cylV1H;3_!!9Yff_9&j*!^r0VxY$3H{umPAVfHy^K;4H3q=X z!W$r54}g?k0+^ou0pLohzXqxe^64OUfNchNwLsjNz5w76fR{ZWz6S0+{V`zv1Ahk0 zPNNQ~M238F0T@uWj{xP0D~I)SVgd#WX_VIg4iI>GbxtXm2WU6IUB&ND_Xd@nj&H!I zY%5y)-Zs=vC0eDKmX4uZAb#V9KPHEjk68)XE>7ayw zD1kgD3U@c8&N?kR>wvDwraX$%Xyd6&d7ueL0Iv9B1QhF_1pFfZ1>oPK^fo#=_&frt z*VzNOI9VUaP7@>GJdcCQy1L3t`9Nm*paOi|lC>%TIID!>3IN*z)MZ=!5N8*lLNunn ze(jYJdjXv17VA%F>uTs$K6|QMu{eS<>y=MDC~MiV(?}h4PrE&sD)i~LJ`myuY->^} Ti7@Xp00000NkvXXu0mjfP+CUR literal 9466 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

a^`!06tH6z8#}s04cl)#cJ_QvC;j^0n z#Ihg{S5I6mo+y9sveY`sqrw?rm`cSGm3t7hl8bx>yn}w$l9+lnRQ?ND46cy z)6@=Jku0uB$_)W!rlyXsbEILXXA@NthDmA}ccc&Zy4X0-Y9yhnX+;mA;8$9gvWYl1 zVtvrEXw5ETRles5efwfdO2qjMlHTpojY)1RLzXM(Hr2JpXBx`3;hOd0ALn@V`(6J5 z@zjqXtM}V#+P5sT;9;NT*SY9wI-!(2;-ZXpboQr%u{$}C#LiYj9TDlh~ z=*Rb+&8{%=k5$XNPpeX#KbV7Ebc#zY$YXy__#Bt?pV7R&K9)aWz^q_sdNbU(Tp?+R zfpKR1d|i(m_F+`);m+CcXwEn*BRg%Rn;P&Qdg?0xRcbNV$?-+p5r0)zN5`94pdZ&% z&Md)+!GE}@u%Y&GC$I9)a|Tjd+fIK!eY7`9u8?iY#iM4^sr<`M?5_*baKeP-I$jya z!*dIhNS_5+M{>4y>!JnOuQ+N$HaJ}uu*XeRe3B*!MnEcno_8wl>{%4t-IW~<_ zN?C{Cw)UoZs&Bm{^KLg*ga3Ymi)-Uk;EU7qc2z?|!}I=O)58tr?h@HV0<8F9B<7ay zcuN49sTriXTfy-jTT|2qO2z*;f@6^fmXp(WbDJ1DUAkF0$jVHgZV|Mi?z`O(%b6S+ zpyffoc2^DM`+IWYD%kRhVpqs})!OOlaeE}hf(zyq{S};E#LYv?Ff)&TFdN5}R?=Mk zhn&2cwlB4O1=#V#9=LI)NzZ0*%iwcSzwE$?8S3h23SABKm@2%liv*x>!XRcb<@+o5 z73}x$W4pDz4I8R28(Cgyd|Sm$Tv^d%YzXsm3pO;>#^B^^c(@wP+4ttSYih}vk{zx= zQN?io+2AXZ?agr;bltG{8gr1=Kt<)`0KINHX#TaEA_I%Fmw+P=KlaqraZaZ1_Pp}W zy)ylXY|pYNTTP0clan1D4MUd+q4ES4x`P3wCUfDwNppR7XsVHv(&E;k-KSLR)QvE& z3@fXpJtaJLE@T~!#U);TemGYU^(WDh61%DK&HBm^H|Qzmxf{krMO;nnrB1f(C6Yl2 zDrj3*Vv~!rEZ45&M-F=0vU5b$Dt;`qz-`IubIEE~Cg+>YyJ*xsweTL^TRq2toimu%Cqx!WY9CectvIg`#Pb14Q{z!cbh@+eP78N?{rW*U#wa2u)c&fx-@ii zy2NKXMXh*W8p>VA8}txiym#2*vzbsvh}Cv5{*6aLDz+ zUvx3G3=RdSf)2qmb?urRB8pWR>Pjt{?;@6Upzl)jpZ`L1u; zEAPg?X5;baV>;P7=I2-bWIWk~e)^qpa;b)?J^|OQq3z1iuWY$umcSM}jGf*DQxYeN zQMMR|FKNsMEKCNTMz}@*O(N_m7;5~HE)zoNMZl<&*x#L;oj~Idrpi0V{nGj7Ge|zv zqq9C3GT3!N#*WOv2+e2kHphwKBUL9DctKO%9gE(~wy1%>X#&X0s7O~znS}lq$`%B5