From 285f31f0c458c50bd5db33c55f69924f2733f174 Mon Sep 17 00:00:00 2001 From: "giacomand@gmail.com" Date: Fri, 20 Jul 2012 00:12:50 +0000 Subject: [PATCH] -You can now store donuts in the donut box. The next donut you pull out will be the last one you put in. -Changed the class type of donuts. donut/normal is now the regular donut. All other donuts have been made this way. (I.E: donut/chaos) -Hopefully the merged records proc will now not spit out runtimes. -You cannot enter a name without any character now. This way you can also click on the link. -Added some coloured caps to their respected coloured wardrobes. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4123 316c924e-a436-60f5-8080-3fe189b3f50e --- code/datums/recipe.dm | 18 +++--- code/defines/obj/vending.dm | 2 +- code/defines/procs/helpers.dm | 29 +++++---- code/game/machinery/computer/medical.dm | 7 ++- code/game/machinery/computer/security.dm | 55 +++++++++--------- code/game/objects/closets/janitor.dm | 3 +- code/game/objects/closets/wardrobe.dm | 22 +++++++ code/game/objects/devices/PDA/cart.dm | 17 +++--- code/game/objects/items/food.dm | 50 +++++++++------- code/game/objects/storage/belt.dm | 4 +- code/modules/food/food.dm | 12 +++- code/modules/food/recipes_microwave.dm | 6 +- .../mob/living/silicon/pai/software.dm | 17 +++--- icons/obj/food.dmi | Bin 84887 -> 84890 bytes 14 files changed, 147 insertions(+), 95 deletions(-) diff --git a/code/datums/recipe.dm b/code/datums/recipe.dm index 093fc8f5fd3..d2c747dd5b8 100644 --- a/code/datums/recipe.dm +++ b/code/datums/recipe.dm @@ -8,35 +8,35 @@ * * reagents are reagents. Acid, milc, booze, etc. * * items are objects. Fruits, tools, circuit boards. * * result is type to create as new object - * * time is optional parameter, you shall use in in your machine, + * * time is optional parameter, you shall use in in your machine, default /datum/recipe/ procs does not rely on this parameter. * * Functions you need: * /datum/recipe/proc/make(var/obj/container as obj) * Creates result inside container, - * deletes prerequisite reagents, + * deletes prerequisite reagents, * transfers reagents from prerequisite objects, * deletes all prerequisite objects (even not needed for recipe at the moment). - * + * * /proc/select_recipe(list/datum/recipe/avaiable_recipes, obj/obj as obj, exact = 1) * Wonderful function that select suitable recipe for you. * obj is a machine (or magik hat) with prerequisites, * exact = 0 forces algorithm to ignore superfluous stuff. - * - * + * + * * Functions you do not need to call directly but could: * /datum/recipe/proc/check_reagents(var/datum/reagents/avail_reagents) * //1=precisely, 0=insufficiently, -1=superfluous - * + * * /datum/recipe/proc/check_items(var/obj/container as obj) * //1=precisely, 0=insufficiently, -1=superfluous - * + * * */ /datum/recipe var/list/reagents // example: = list("berryjuice" = 5) // do not list same reagent twice var/list/items // example: =list(/obj/item/weapon/crowbar, /obj/item/weapon/welder) // place /foo/bar before /foo - var/result //example: = /obj/item/weapon/reagent_containers/food/snacks/donut + var/result //example: = /obj/item/weapon/reagent_containers/food/snacks/donut/normal var/time = 100 // 1/10 part of second @@ -52,7 +52,7 @@ if ((reagents?(reagents.len):(0)) < avail_reagents.reagent_list.len) return -1 return . - + /datum/recipe/proc/check_items(var/obj/container as obj) //1=precisely, 0=insufficiently, -1=superfluous if (!items) if (locate(/obj/) in container) diff --git a/code/defines/obj/vending.dm b/code/defines/obj/vending.dm index 4b1e01c2f63..95643336645 100644 --- a/code/defines/obj/vending.dm +++ b/code/defines/obj/vending.dm @@ -176,7 +176,7 @@ icon_state = "sec" icon_deny = "sec-deny" req_access_txt = "1" - product_paths = "/obj/item/weapon/handcuffs;/obj/item/weapon/grenade/flashbang;/obj/item/device/flash;/obj/item/weapon/reagent_containers/food/snacks/donut;/obj/item/weapon/storage/box/evidence" + product_paths = "/obj/item/weapon/handcuffs;/obj/item/weapon/grenade/flashbang;/obj/item/device/flash;/obj/item/weapon/reagent_containers/food/snacks/donut/normal;/obj/item/weapon/storage/box/evidence" product_amounts = "8;4;5;12;6" product_hidden = "/obj/item/clothing/glasses/sunglasses;/obj/item/kitchen/donut_box" product_hideamt = "2;2" diff --git a/code/defines/procs/helpers.dm b/code/defines/procs/helpers.dm index 84a2d016ca4..762bd38cc8f 100644 --- a/code/defines/procs/helpers.dm +++ b/code/defines/procs/helpers.dm @@ -272,7 +272,9 @@ return (result + R.Copy(Ri, 0)) /proc/sortRecord(var/list/datum/data/record/L, var/field = "name", var/order = 1) - if(isnull(L) || L.len < 2) + if(isnull(L)) + return list() + if(L.len < 2) return L var/middle = L.len / 2 + 1 return mergeRecordLists(sortRecord(L.Copy(0, middle), field, order), sortRecord(L.Copy(middle), field, order), field, order) @@ -282,16 +284,23 @@ var/Li=1 var/Ri=1 var/list/result = new() - while(Li <= L.len && Ri <= R.len) - var/datum/data/record/rL = L[Li] - var/datum/data/record/rR = R[Ri] - if(sorttext(rL.fields[field], rR.fields[field]) == order) - result += L[Li++] - else - result += R[Ri++] + if(!isnull(L) && !isnull(R)) + while(Li <= L.len && Ri <= R.len) + var/datum/data/record/rL = L[Li] + if(isnull(rL)) + L -= rL + continue + var/datum/data/record/rR = R[Ri] + if(isnull(rR)) + R -= rR + continue + if(sorttext(rL.fields[field], rR.fields[field]) == order) + result += L[Li++] + else + result += R[Ri++] - if(Li <= L.len) - return (result + L.Copy(Li, 0)) + if(Li <= L.len) + return (result + L.Copy(Li, 0)) return (result + R.Copy(Ri, 0)) /proc/sortList(var/list/L) diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index 828a55d1f1f..9a291815580 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -45,9 +45,10 @@ "} if(2.0) dat += "Record List:
" - for(var/datum/data/record/R in sortRecord(data_core.general)) - dat += text("[]: []
", src, R, R.fields["id"], R.fields["name"]) - //Foreach goto(132) + if(!isnull(data_core.general)) + for(var/datum/data/record/R in sortRecord(data_core.general)) + dat += text("
[]: []
", src, R, R.fields["id"], R.fields["name"]) + //Foreach goto(132) dat += text("
Back", src) if(3.0) dat += text("Records Maintenance
\nBackup To Disk
\nUpload From disk
\nDelete All Records
\n
\nBack", src, src, src, src) diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index a77d9ed4779..fd73f4ac12c 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -69,32 +69,33 @@ Fingerprints Criminal Status "} - for(var/datum/data/record/R in sortRecord(data_core.general, sortBy, order)) - var/crimstat = "" - for(var/datum/data/record/E in data_core.security) - if ((E.fields["name"] == R.fields["name"] && E.fields["id"] == R.fields["id"])) - crimstat = E.fields["criminal"] - var/background - switch(crimstat) - if("*Arrest*") - background = "'background-color:#DC143C;'" - if("Incarcerated") - background = "'background-color:#CD853F;'" - if("Parolled") - background = "'background-color:#CD853F;'" - if("Released") - background = "'background-color:#3BB9FF;'" - if("None") - background = "'background-color:#00FF7F;'" - if("") - background = "'background-color:#FFFFFF;'" - crimstat = "No Record." - dat += text("[]", background, src, R, R.fields["name"]) - dat += text("[]", R.fields["id"]) - dat += text("[]", R.fields["rank"]) - dat += text("[]", R.fields["fingerprint"]) - dat += text("[]", crimstat) - dat += "
" + if(!isnull(data_core.general)) + for(var/datum/data/record/R in sortRecord(data_core.general, sortBy, order)) + var/crimstat = "" + for(var/datum/data/record/E in data_core.security) + if ((E.fields["name"] == R.fields["name"] && E.fields["id"] == R.fields["id"])) + crimstat = E.fields["criminal"] + var/background + switch(crimstat) + if("*Arrest*") + background = "'background-color:#DC143C;'" + if("Incarcerated") + background = "'background-color:#CD853F;'" + if("Parolled") + background = "'background-color:#CD853F;'" + if("Released") + background = "'background-color:#3BB9FF;'" + if("None") + background = "'background-color:#00FF7F;'" + if("") + background = "'background-color:#FFFFFF;'" + crimstat = "No Record." + dat += text("[]", background, src, R, R.fields["name"]) + dat += text("[]", R.fields["id"]) + dat += text("[]", R.fields["rank"]) + dat += text("[]", R.fields["fingerprint"]) + dat += text("[]", crimstat) + dat += "
" dat += text("Record Maintenance

", src) dat += text("{Log Out}",src) if(2.0) @@ -400,7 +401,7 @@ What a mess.*/ if("name") if (istype(active1, /datum/data/record)) var/t1 = input("Please input name:", "Secure. records", active1.fields["name"], null) as text - if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon)))) || active1 != a1) + if ((!( t1 ) || !length(trim(t1)) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon)))) || active1 != a1) return active1.fields["name"] = t1 if("id") diff --git a/code/game/objects/closets/janitor.dm b/code/game/objects/closets/janitor.dm index 7f4fddc71f2..fcc9c93999c 100644 --- a/code/game/objects/closets/janitor.dm +++ b/code/game/objects/closets/janitor.dm @@ -12,4 +12,5 @@ new /obj/item/weapon/caution(src) new /obj/item/weapon/caution(src) new /obj/item/weapon/trashbag(src) - new /obj/item/device/lightreplacer(src) \ No newline at end of file + new /obj/item/device/lightreplacer(src) + new /obj/item/clothing/head/soft/purple(src) \ No newline at end of file diff --git a/code/game/objects/closets/wardrobe.dm b/code/game/objects/closets/wardrobe.dm index 9640a359ae0..5ebfe08ed10 100644 --- a/code/game/objects/closets/wardrobe.dm +++ b/code/game/objects/closets/wardrobe.dm @@ -66,6 +66,9 @@ new /obj/item/clothing/shoes/black(src) new /obj/item/clothing/shoes/black(src) new /obj/item/clothing/shoes/black(src) + new /obj/item/clothing/head/soft/green(src) + new /obj/item/clothing/head/soft/green(src) + new /obj/item/clothing/head/soft/green(src) return /obj/structure/closet/wardrobe/orange/New() @@ -75,6 +78,9 @@ new /obj/item/clothing/shoes/orange(src) new /obj/item/clothing/shoes/orange(src) new /obj/item/clothing/shoes/orange(src) + new /obj/item/clothing/head/soft/orange(src) + new /obj/item/clothing/head/soft/orange(src) + new /obj/item/clothing/head/soft/orange(src) return /obj/structure/closet/wardrobe/yellow/New() @@ -84,6 +90,9 @@ new /obj/item/clothing/shoes/orange(src) new /obj/item/clothing/shoes/orange(src) new /obj/item/clothing/shoes/orange(src) + new /obj/item/clothing/head/soft/yellow(src) + new /obj/item/clothing/head/soft/yellow(src) + new /obj/item/clothing/head/soft/yellow(src) return /obj/structure/closet/wardrobe/atmospherics_yellow/New() @@ -93,6 +102,9 @@ new /obj/item/clothing/shoes/black(src) new /obj/item/clothing/shoes/black(src) new /obj/item/clothing/shoes/black(src) + new /obj/item/clothing/head/soft/yellow(src) + new /obj/item/clothing/head/soft/yellow(src) + new /obj/item/clothing/head/soft/yellow(src) return /obj/structure/closet/wardrobe/engineering_yellow/New() @@ -102,6 +114,9 @@ new /obj/item/clothing/shoes/orange(src) new /obj/item/clothing/shoes/orange(src) new /obj/item/clothing/shoes/orange(src) + new /obj/item/clothing/head/soft/yellow(src) + new /obj/item/clothing/head/soft/yellow(src) + new /obj/item/clothing/head/soft/yellow(src) return /obj/structure/closet/wardrobe/white/New() @@ -185,6 +200,13 @@ new /obj/item/clothing/shoes/black(src) new /obj/item/clothing/shoes/brown(src) new /obj/item/clothing/shoes/white(src) + new /obj/item/clothing/head/soft/mime(src) + new /obj/item/clothing/head/soft/blue(src) + new /obj/item/clothing/head/soft/yellow(src) + new /obj/item/clothing/head/soft/green(src) + new /obj/item/clothing/head/soft/orange(src) + new /obj/item/clothing/head/soft/purple(src) + if(prob(10)) new /obj/item/clothing/head/soft/rainbow(src) return /obj/structure/closet/lawcloset/New() diff --git a/code/game/objects/devices/PDA/cart.dm b/code/game/objects/devices/PDA/cart.dm index f2253bda569..cb91a4ee2c1 100644 --- a/code/game/objects/devices/PDA/cart.dm +++ b/code/game/objects/devices/PDA/cart.dm @@ -260,9 +260,9 @@ Code: menu = "

Crew Manifest

" menu += "Entries cannot be modified from this terminal.

" - - for (var/datum/data/record/t in sortRecord(data_core.general)) - menu += "[t.fields["name"]] - [t.fields["rank"]]
" + if(!isnull(data_core.general)) + for (var/datum/data/record/t in sortRecord(data_core.general)) + menu += "[t.fields["name"]] - [t.fields["rank"]]
" menu += "
" @@ -335,8 +335,9 @@ Code: if (44) //medical records //This thing only displays a single screen so it's hard to really get the sub-menu stuff working. menu = "

Medical Record List

" - for (var/datum/data/record/R in sortRecord(data_core.general)) - menu += "[R.fields["id"]]: [R.fields["name"]]
" + if(!isnull(data_core.general)) + for (var/datum/data/record/R in sortRecord(data_core.general)) + menu += "
[R.fields["id"]]: [R.fields["name"]]
" menu += "
" if(441) menu = "

Medical Record

" @@ -377,9 +378,9 @@ Code: menu += "
" if (45) //security records menu = "

Security Record List

" - - for (var/datum/data/record/R in sortRecord(data_core.general)) - menu += "
[R.fields["id"]]: [R.fields["name"]]
" + if(!isnull(data_core.general)) + for (var/datum/data/record/R in sortRecord(data_core.general)) + menu += "
[R.fields["id"]]: [R.fields["name"]]
" menu += "
" if(451) diff --git a/code/game/objects/items/food.dm b/code/game/objects/items/food.dm index 21f9750f2d3..d213f44e95c 100644 --- a/code/game/objects/items/food.dm +++ b/code/game/objects/items/food.dm @@ -10,62 +10,70 @@ MONKEY CUBE BOX /mob/living/carbon/var/last_eating = 0 /obj/item/kitchen/donut_box - var/amount = 6 + var/const/max_amount = 6 + var/list/obj/item/weapon/reagent_containers/food/snacks/donut/donuts = list() icon = 'food.dmi' - icon_state = "donutbox" + icon_state = "donutbox6" name = "donut box" + /obj/item/kitchen/egg_box var/amount = 12 icon = 'food.dmi' icon_state = "eggbox" name = "egg box" +/obj/item/kitchen/donut_box/New() + for(var/i = 0; i < max_amount; i++) + donuts += new /obj/item/weapon/reagent_containers/food/snacks/donut/normal(src) + update() + ..() + /obj/item/kitchen/donut_box/proc/update() - src.icon_state = text("donutbox[]", src.amount) + src.icon_state = text("donutbox[]", src.donuts.len) return -/* -/obj/item/kitchen/donut_box/attackby(obj/item/weapon/W as obj, mob/user as mob) - if (istype(W, /obj/item/weapon/reagent_containers/food/snacks/donut) && (amount < 6)) +/obj/item/kitchen/donut_box/attackby(obj/item/weapon/W as obj, mob/living/user as mob) + if (istype(W, /obj/item/weapon/reagent_containers/food/snacks/donut) && (donuts.len < max_amount)) user.drop_item() W.loc = src + donuts += W usr << "You place a donut back into the box." - src.update() + src.update() return -*/ -/obj/item/kitchen/donut_box/MouseDrop(mob/user as mob) +/obj/item/kitchen/donut_box/MouseDrop(mob/living/user as mob) if ((user == usr && (!( usr.restrained() ) && (!( usr.stat ) && (usr.contents.Find(src) || in_range(src, usr)))))) if(!istype(user, /mob/living/carbon/metroid)) if( !usr.get_active_hand() ) src.attack_hand(usr, usr.hand, 1) return -/obj/item/kitchen/donut_box/attack_paw(mob/user as mob) +/obj/item/kitchen/donut_box/attack_paw(mob/living/user as mob) return src.attack_hand(user) -/obj/item/kitchen/donut_box/attack_hand(mob/user as mob, unused, flag) +/obj/item/kitchen/donut_box/attack_hand(mob/living/user as mob, unused, flag) if (flag) return ..() src.add_fingerprint(user) - var/obj/item/weapon/reagent_containers/food/snacks/donut/P = locate() in src - if(!P && (amount >= 1)) - P = new /obj/item/weapon/reagent_containers/food/snacks/donut( src ) + var/last = donuts.len + if(last <= 0) + user << "Oh no! No donuts left!" + return + //world.log << last + var/obj/item/weapon/reagent_containers/food/snacks/donut/P = donuts[last] // Get the last donut. if(P) - usr.put_in_hands(P) - usr << "You take a donut out of the box." - src.amount-- + P.loc = user.loc + user.put_in_hands(P) + donuts -= P + user << "You take a donut out of the box." src.update() return /obj/item/kitchen/donut_box/examine() set src in oview(1) - src.amount = round(src.amount) - var/n = src.amount - for(var/obj/item/weapon/reagent_containers/food/snacks/donut/P in src) - n++ + var/n = src.donuts.len if (n <= 0) n = 0 usr << "There are no donuts left in the box." diff --git a/code/game/objects/storage/belt.dm b/code/game/objects/storage/belt.dm index 9265e3b07d2..cc5cb63cb63 100644 --- a/code/game/objects/storage/belt.dm +++ b/code/game/objects/storage/belt.dm @@ -110,8 +110,8 @@ "/obj/item/clothing/glasses", "/obj/item/ammo_casing/shotgun", "/obj/item/ammo_magazine", - "/obj/item/weapon/reagent_containers/food/snacks/donut", - "/obj/item/weapon/reagent_containers/food/snacks/jellydonut" + "/obj/item/weapon/reagent_containers/food/snacks/donut/normal", + "/obj/item/weapon/reagent_containers/food/snacks/donut/jelly" ) /obj/item/weapon/storage/belt/soulstone diff --git a/code/modules/food/food.dm b/code/modules/food/food.dm index 44f504201a3..c40eb1a4920 100644 --- a/code/modules/food/food.dm +++ b/code/modules/food/food.dm @@ -104,6 +104,11 @@ name = "donut" desc = "Goes great with Robust Coffee." icon_state = "donut1" + +/obj/item/weapon/reagent_containers/food/snacks/donut/normal + name = "donut" + desc = "Goes great with Robust Coffee." + icon_state = "donut1" New() ..() reagents.add_reagent("nutriment", 3) @@ -114,12 +119,12 @@ src.name = "frosted donut" reagents.add_reagent("sprinkles", 2) -/obj/item/weapon/reagent_containers/food/snacks/chaosdonut +/obj/item/weapon/reagent_containers/food/snacks/donut/chaos name = "Chaos Donut" desc = "Like life, it never quite tastes the same." icon_state = "donut1" New() - ..() + reagents.add_reagent("nutriment", 2) reagents.add_reagent("sprinkles", 1) bitesize = 10 @@ -150,7 +155,8 @@ src.name = "Frosted Chaos Donut" reagents.add_reagent("sprinkles", 2) -/obj/item/weapon/reagent_containers/food/snacks/jellydonut + +/obj/item/weapon/reagent_containers/food/snacks/donut/jelly name = "Jelly Donut" desc = "You jelly?" icon_state = "jdonut1" diff --git a/code/modules/food/recipes_microwave.dm b/code/modules/food/recipes_microwave.dm index f8c4a34a8af..c3e97e99ab2 100644 --- a/code/modules/food/recipes_microwave.dm +++ b/code/modules/food/recipes_microwave.dm @@ -45,14 +45,14 @@ /obj/item/weapon/reagent_containers/food/snacks/flour, /obj/item/weapon/reagent_containers/food/snacks/egg ) - result = /obj/item/weapon/reagent_containers/food/snacks/jellydonut + result = /obj/item/weapon/reagent_containers/food/snacks/donut/jelly /datum/recipe/donut items = list( /obj/item/weapon/reagent_containers/food/snacks/flour, /obj/item/weapon/reagent_containers/food/snacks/egg ) - result = /obj/item/weapon/reagent_containers/food/snacks/donut + result = /obj/item/weapon/reagent_containers/food/snacks/donut/normal /datum/recipe/human //invalid recipe @@ -414,7 +414,7 @@ /obj/item/weapon/reagent_containers/food/snacks/flour, /obj/item/weapon/reagent_containers/food/snacks/egg ) - result = /obj/item/weapon/reagent_containers/food/snacks/chaosdonut + result = /obj/item/weapon/reagent_containers/food/snacks/donut/chaos /datum/recipe/human/kabob items = list( diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm index 0793154c607..4845d77efa3 100644 --- a/code/modules/mob/living/silicon/pai/software.dm +++ b/code/modules/mob/living/silicon/pai/software.dm @@ -413,9 +413,10 @@ var/dat = "" dat += "

Crew Manifest



" var/list/L = list() - for (var/datum/data/record/t in sortRecord(data_core.general)) - var/R = t.fields["name"] + " - " + t.fields["rank"] - L += R + if(!isnull(data_core.general)) + for (var/datum/data/record/t in sortRecord(data_core.general)) + var/R = t.fields["name"] + " - " + t.fields["rank"] + L += R for(var/R in sortList(L)) dat += "[R]
" dat += "" @@ -426,8 +427,9 @@ var/dat = "" if(src.subscreen == 0) dat += "

Medical Records


" - for(var/datum/data/record/R in sortRecord(data_core.general)) - dat += text("
[]: []
", src, R, R.fields["id"], R.fields["name"]) + if(!isnull(data_core.general)) + for(var/datum/data/record/R in sortRecord(data_core.general)) + dat += text("
[]: []
", src, R, R.fields["id"], R.fields["name"]) //dat += text("
Back", src) if(src.subscreen == 1) dat += "
Medical Record

" @@ -448,8 +450,9 @@ var/dat = "" if(src.subscreen == 0) dat += "

Security Records


" - for(var/datum/data/record/R in sortRecord(data_core.general)) - dat += text("[]: []
", src, R, R.fields["id"], R.fields["name"]) + if(!isnull(data_core.general)) + for(var/datum/data/record/R in sortRecord(data_core.general)) + dat += text("
[]: []
", src, R, R.fields["id"], R.fields["name"]) if(src.subscreen == 1) dat += "

Security Record

" if ((istype(src.securityActive1, /datum/data/record) && data_core.general.Find(src.securityActive1))) diff --git a/icons/obj/food.dmi b/icons/obj/food.dmi index ae2b2091c256d2a2ce708dd8b72a5dbe6bd73a98..bb38afed7f1fc8d1733ceab6fb4e119f911ef3d4 100644 GIT binary patch delta 1152 zcmV-`1b_RNmj#-a1&|~GMv*1$e+GT{4JL29I&clArY-E4+HnN`&8`+=sMgl33imgtw zm&CchWs^Lxzu-W*)aV<{u3xG+pVrjJf*NM;$mYUaG

6at~lJwMxJde=(1v^pESN zD>mOo(ORG*;9ucVxF(758CF{&fWMl?_@?a}*JD3i@3I~$Ns|l+qC$=jwn#n-5V$pa zIXF53QcI)Uvr2znE-*LYL(qKW3d)Lu)7sAn7j@|fvzw?|z8f_UlpR$-UPxjv(OqC} z?C98!a#Zr{2RgDZYGm5?e}l;iuzs32vRNNQjFm`|p$R#vRSiNPI4e4vtJy<~0_^*X z#~^=QGjKp+vY|5d>!|5CW8@YQj2BQ8Bs+w_z&~1(I1i|v@k|h}az*(PxKgktrz$gv9e-fLHGl&)~P%+0+ zkf*6c%2ueRzDcb%XFfPpldUD7)XTmfqi9P2BEoDld}#54)+XrLvun8m!T~AW@LJ1O_H1 z8z{!6z%3!OS!4)Zqy-4PtSLkfNMMiB z0%eaiQU|FPJgty|ehPy+08^HDm>Xrkhzo#9pl0l!!6!0>Hg?rZMK~nuzll&ebW^y zpz}oi>PBg(f7*oZ=QvT7=IY!6;QT_yHF4AoZjZTeeMZ%Fl)bR0QX+5wl@b{`sY;1h zKjK27w`O%3$#?)_?$l{tr-gaqO%0+qr$mO`$*2_0UiuyF4U{}aNpZ2w4oQ>*8jrfH`{y z%@eq{bWRaS)v84Hk0YE`V81Mi$$;$zedQRnpHV}Fn}l07Aup$m=0-r{=-d;^6Vg{s zYcsAZ6yUK6d&JQsz)R5-v>DnhnNvARh8naN6xD%`YXx>w1IIK-bF%=AudR9`(RG0q z%4u$)X)go@W`m6W{q^g=pFX~L@uI&RR7zx{+Mib7Iy8#Fz9DW>G4!6IcnmFaIuZ1E zxsiv&t@YoKF1QxpA7wVW|AM=b{dd`o?7#J1d^PHC$PNDKv-GR|$1flDA3lHD{Ra)a S-i=~m81{p31-Ebo0VhVKC@sTNu5~5kkoDlOke@g$fZn|Rg zZ4|8qIs*O`E`@877@uLaB?9=XX^d~$zHvSF!}Tufp^`MofF3I3_+X3VqX2zBpI5JqgvG<^ntUYv$>i*v?##7zjzGt z*EItNBqkdwQ@@Uyjx$DX5y9wzGG)TpBMmxWL0HEsz@9$`YzfTZw&#WY)Q_v_*q5lI zv@lAHfS689eWOMoe>j6^(E=57ECqR* zN~COsYU-QRYIEj;Q$>!yfook|q)}&+zAFRy%1#PaH<}^!vB>E}iRu)%iqUgO0-|b)j z^25*793{$P^o?Wue~GgD?P}@$?bXEX?xyl0+5fPc%33Ph38}#vy$ccrxl3SRVzPl^ zYzo{GGMhz)&_!B+z{{FK^gvGgrKiL>l>?$l9+wkh2c`<08m(}Q=W2@F(VpOaA7mQD zP!Y@71&QRTA%0xxej-+;bXEkIcKLn)SbsDhg`4LnQ!r!>f9L+;HUdbeX@&&$C@oO- zSRZweYQfVADd?v#r~@!%iHEsS_KUaxs03=p{uz8CQ)pvX9mmM-jo{9 zA*Wi^FwK%AVv{P=jLtzoWEFl8G+n&{LZua&*sOmHY~Y|08Q5mqsR7$JUf4HXu>v|z z)UR%ohN?~Ie}0Y=RcWryEdb6hWLy(R&EWQ!3)g2CKw6Pyc3tR{v zc`$)m;npJcE8J!2u(r-q8tjlnNucqlOK!#lbOg0hf1beJ8Yjh?R-32b#I8P|k=Q(e zdrRjOfmE$ZWdAtAX$AJnqL>WW9?(~gQTrJ+RJcjFWfSsn+GuVBG>*S_HxgYJXrY|u z7WzV9e_%Gq=-*$z{`=|Uix)5Y%R!|?Hmdz;1+GJ*2<#i;CKW^PDT>F?BBv8UkCz*H zNZeZg4e5ew0sc>Bqx&zo8`*!C-N^o1@5NW6{)XJ(pFT^!+JF4=VgKRtr`>-Rh~8J+ oCm$>T03ZNKL_t(|oa~)>d=ypMwy#QO-#5|;gNy~Yj0FJ>Ml``fX#fBK