From d5aabda108c5e9bbea9341e34766b5a422295ca2 Mon Sep 17 00:00:00 2001 From: KasparoVy Date: Sun, 29 May 2016 10:09:56 -0400 Subject: [PATCH] Ports Models for Cybernetic Limb Manufacturers + More Monitor-head Wallpapers (#1775) * Ports Models for Cybernetic Limb Manufacturers + More Monitor-head Wallpapers As requested! * Modified as requested. * Different Names --- .../preference_setup/general/03_body.dm | 3 +- code/modules/clothing/masks/monitor.dm | 34 ++--- code/modules/organs/robolimbs.dm | 128 +++++++++++++++--- .../cyberlimbs/bishop/bishop_alt1.dmi | Bin 0 -> 784 bytes .../{bishop.dmi => bishop/bishop_main.dmi} | Bin .../cyberlimbs/bishop/bishop_monitor.dmi | Bin 0 -> 627 bytes .../hesphiastos/hesphiastos_alt1.dmi | Bin 0 -> 599 bytes .../hesphiastos_main.dmi} | Bin .../hesphiastos/hesphiastos_monitor.dmi | Bin 0 -> 577 bytes .../cyberlimbs/morpheus/morpheus_alt1.dmi | Bin 0 -> 657 bytes .../{ipc.dmi => morpheus/morpheus_main.dmi} | Bin .../{veymed.dmi => veymed/veymed_main.dmi} | Bin .../wardtakahashi/wardtakahashi_alt1.dmi | Bin 0 -> 621 bytes .../wardtakahashi_main.dmi} | Bin .../wardtakahashi/wardtakahashi_monitor.dmi | Bin 0 -> 633 bytes .../human_races/cyberlimbs/xion/xion_alt1.dmi | Bin 0 -> 593 bytes .../{xion.dmi => xion/xion_main.dmi} | Bin .../cyberlimbs/xion/xion_monitor.dmi | Bin 0 -> 598 bytes .../{zenghu.dmi => zenghu/zenghu_main.dmi} | Bin icons/mob/monitor_icons.dmi | Bin 4656 -> 4806 bytes 20 files changed, 122 insertions(+), 43 deletions(-) create mode 100644 icons/mob/human_races/cyberlimbs/bishop/bishop_alt1.dmi rename icons/mob/human_races/cyberlimbs/{bishop.dmi => bishop/bishop_main.dmi} (100%) create mode 100644 icons/mob/human_races/cyberlimbs/bishop/bishop_monitor.dmi create mode 100644 icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_alt1.dmi rename icons/mob/human_races/cyberlimbs/{hesphaistos.dmi => hesphiastos/hesphiastos_main.dmi} (100%) create mode 100644 icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_monitor.dmi create mode 100644 icons/mob/human_races/cyberlimbs/morpheus/morpheus_alt1.dmi rename icons/mob/human_races/cyberlimbs/{ipc.dmi => morpheus/morpheus_main.dmi} (100%) rename icons/mob/human_races/cyberlimbs/{veymed.dmi => veymed/veymed_main.dmi} (100%) create mode 100644 icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_alt1.dmi rename icons/mob/human_races/cyberlimbs/{wardtakahashi.dmi => wardtakahashi/wardtakahashi_main.dmi} (100%) create mode 100644 icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_monitor.dmi create mode 100644 icons/mob/human_races/cyberlimbs/xion/xion_alt1.dmi rename icons/mob/human_races/cyberlimbs/{xion.dmi => xion/xion_main.dmi} (100%) create mode 100644 icons/mob/human_races/cyberlimbs/xion/xion_monitor.dmi rename icons/mob/human_races/cyberlimbs/{zenghu.dmi => zenghu/zenghu_main.dmi} (100%) diff --git a/code/modules/client/preference_setup/general/03_body.dm b/code/modules/client/preference_setup/general/03_body.dm index 27e5d22e83..a092b859b3 100644 --- a/code/modules/client/preference_setup/general/03_body.dm +++ b/code/modules/client/preference_setup/general/03_body.dm @@ -425,7 +425,6 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O switch(new_state) if("Normal") - if(limb == BP_TORSO) for(var/other_limb in BP_ALL - BP_TORSO) pref.organ_data[other_limb] = null @@ -450,6 +449,8 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O var/list/usable_manufacturers = list() for(var/company in chargen_robolimbs) var/datum/robolimb/M = chargen_robolimbs[company] + if(!(limb in M.parts)) + continue if(tmp_species in M.species_cannot_use) continue usable_manufacturers[company] = M diff --git a/code/modules/clothing/masks/monitor.dm b/code/modules/clothing/masks/monitor.dm index e8f6340172..9d0651d5ba 100644 --- a/code/modules/clothing/masks/monitor.dm +++ b/code/modules/clothing/masks/monitor.dm @@ -9,28 +9,10 @@ icon = 'icons/mob/monitor_icons.dmi' icon_override = 'icons/mob/monitor_icons.dmi' - icon_state = "ipc_blank" - item_state = null + icon_state = "monitor" var/monitor_state_index = "blank" - var/global/list/monitor_states = list( - "blank" = "ipc_blank", - "pink" = "ipc_pink", - "red" = "ipc_red", - "green" = "ipc_green", - "blue" = "ipc_blue", - "breakout" = "ipc_breakout", - "eight" = "ipc_eight", - "goggles" = "ipc_goggles", - "heart" = "ipc_heart", - "monoeye" = "ipc_monoeye", - "nature" = "ipc_nature", - "orange" = "ipc_orange", - "purple" = "ipc_purple", - "shower" = "ipc_shower", - "static" = "ipc_static", - "yellow" = "ipc_yellow" - ) + var/global/list/monitor_states = list() /obj/item/clothing/mask/monitor/set_dir() dir = SOUTH @@ -40,8 +22,13 @@ ..() var/mob/living/carbon/human/H = loc if(istype(H) && H.wear_mask == src) + var/obj/item/organ/external/E = H.organs_by_name[BP_HEAD] + var/datum/robolimb/robohead = all_robolimbs[E.model] canremove = 0 - H << "\The [src] connects to your display output." + if(robohead.monitor_styles) + monitor_states = params2list(robohead.monitor_styles) + icon_state = monitor_states[monitor_state_index] + H << "\The [src] connects to your display output." /obj/item/clothing/mask/monitor/dropped() canremove = 1 @@ -52,9 +39,10 @@ return 0 if(istype(user)) var/obj/item/organ/external/E = user.organs_by_name[BP_HEAD] - if(istype(E) && (E.robotic >= ORGAN_ROBOT)) + var/datum/robolimb/robohead = all_robolimbs[E.model] + if(istype(E) && (E.robotic >= ORGAN_ROBOT) && robohead.monitor_styles) return 1 - user << "You must have a robotic head to install this upgrade." + user << "You must have a compatible robotic head to install this upgrade." return 0 /obj/item/clothing/mask/monitor/verb/set_monitor_state() diff --git a/code/modules/organs/robolimbs.dm b/code/modules/organs/robolimbs.dm index e54598d23e..77c023c0db 100644 --- a/code/modules/organs/robolimbs.dm +++ b/code/modules/organs/robolimbs.dm @@ -1,6 +1,27 @@ var/list/all_robolimbs = list() +var/list/robolimb_data = list() var/list/chargen_robolimbs = list() var/datum/robolimb/basic_robolimb +var/const/standard_monitor_styles = "blank=ipc_blank;\ + pink=ipc_pink;\ + green=ipc_green,\ + red=ipc_red;\ + blue=ipc_blue;\ + shower=ipc_shower;\ + orange=ipc_orange;\ + nature=ipc_nature;\ + eight=ipc_eight;\ + goggles=ipc_goggles;\ + heart=ipc_heart;\ + monoeye=ipc_monoeye;\ + breakout=ipc_breakout;\ + yellow=ipc_yellow;\ + static=ipc_static;\ + purple=ipc_purple;\ + scroll=ipc_scroll;\ + console=ipc_console;\ + glider=ipc_gol_glider;\ + rainbow=ipc_rainbow" /proc/populate_robolimb_list() basic_robolimb = new() @@ -8,7 +29,7 @@ var/datum/robolimb/basic_robolimb var/datum/robolimb/R = new limb_type() all_robolimbs[R.company] = R if(!R.unavailable_at_chargen) - chargen_robolimbs[R.company] = R + chargen_robolimbs[R.company] = R //List only main brands and solo parts. /datum/robolimb var/company = "Unbranded" // Shown when selecting the limb. @@ -16,38 +37,107 @@ var/datum/robolimb/basic_robolimb var/icon = 'icons/mob/human_races/robotic.dmi' // Icon base to draw from. var/unavailable_at_chargen // If set, not available at chargen. var/list/species_cannot_use = list("Teshari") + var/list/monitor_styles //If empty, the model of limbs offers a head compatible with monitors. + var/parts = BP_ALL //Defines what parts said brand can replace on a body. /datum/robolimb/bishop company = "Bishop" desc = "This limb has a white polymer casing with blue holo-displays." - icon = 'icons/mob/human_races/cyberlimbs/bishop.dmi' + icon = 'icons/mob/human_races/cyberlimbs/bishop/bishop_main.dmi' -/datum/robolimb/hesphaistos +/datum/robolimb/bishop_alt1 + company = "Bishop - Glyph" + desc = "This limb has a white polymer casing with blue holo-displays." + icon = 'icons/mob/human_races/cyberlimbs/bishop/bishop_alt1.dmi' + parts = list(BP_HEAD) + +/datum/robolimb/bishop_monitor + company = "Bishop Monitor" + desc = "Bishop Cybernetics' unique spin on a popular prosthetic head model. The themes conflict in an intriguing way." + icon = 'icons/mob/human_races/cyberlimbs/bishop/bishop_monitor.dmi' + parts = list(BP_HEAD) + monitor_styles = standard_monitor_styles + +/datum/robolimb/hesphiastos company = "Hesphiastos" desc = "This limb has a militaristic black and green casing with gold stripes." - icon = 'icons/mob/human_races/cyberlimbs/hesphaistos.dmi' + icon = 'icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_main.dmi' -/datum/robolimb/zenghu - company = "Zeng-Hu" - desc = "This limb has a rubbery fleshtone covering with visible seams." - icon = 'icons/mob/human_races/cyberlimbs/zenghu.dmi' +/datum/robolimb/hesphiastos_alt1 + company = "Hesphiastos - Frontier" + desc = "A rugged prosthetic head featuring the standard Hesphiastos theme, a visor and an external display." + icon = 'icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_alt1.dmi' + parts = list(BP_HEAD) + monitor_styles = "blank=hesphiastos_alt_off;\ + pink=hesphiastos_alt_pink;\ + orange=hesphiastos_alt_orange;\ + goggles=hesphiastos_alt_goggles;\ + scroll=hesphiastos_alt_scroll;\ + rgb=hesphiastos_alt_rgb;\ + rainbow=hesphiastos_alt_rainbow" -/datum/robolimb/xion - company = "Xion" - desc = "This limb has a minimalist black and red casing." - icon = 'icons/mob/human_races/cyberlimbs/xion.dmi' +/datum/robolimb/hesphiastos_monitor + company = "Hesphiastos Monitor" + desc = "Hesphiastos' unique spin on a popular prosthetic head model. It looks rugged and sturdy." + icon = 'icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_monitor.dmi' + parts = list(BP_HEAD) + monitor_styles = standard_monitor_styles -/datum/robolimb/ipc +/datum/robolimb/morpheus company = "Morpheus" desc = "This limb is simple and functional; no effort has been made to make it look human." - icon = 'icons/mob/human_races/cyberlimbs/ipc.dmi' + icon = 'icons/mob/human_races/cyberlimbs/morpheus/morpheus_main.dmi' + monitor_styles = standard_monitor_styles -/datum/robolimb/wardtakahashi - company = "Ward-Takahashi" - desc = "This limb features sleek black and white polymers." - icon = 'icons/mob/human_races/cyberlimbs/wardtakahashi.dmi' +/datum/robolimb/morpheus_alt1 + company = "Morpheus - Zenith" + desc = "This limb is simple and functional; no effort has been made to make it look human." + icon = 'icons/mob/human_races/cyberlimbs/morpheus/morpheus_alt1.dmi' + parts = list(BP_HEAD) + unavailable_at_chargen = null /datum/robolimb/veymed company = "Vey-Med" desc = "This high quality limb is nearly indistinguishable from an organic one." - icon = 'icons/mob/human_races/cyberlimbs/veymed.dmi' \ No newline at end of file + icon = 'icons/mob/human_races/cyberlimbs/veymed/veymed_main.dmi' + +/datum/robolimb/wardtakahashi + company = "Ward-Takahashi" + desc = "This limb features sleek black and white polymers." + icon = 'icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_main.dmi' + +/datum/robolimb/wardtakahashi_alt1 + company = "Ward-Takahashi - Shroud" + desc = "This limb features sleek black and white polymers. This one looks more like a helmet of some sort." + icon = 'icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_alt1.dmi' + parts = list(BP_HEAD) + +/datum/robolimb/wardtakahashi_monitor + company = "Ward-Takahashi Monitor" + desc = "Ward-Takahashi's unique spin on a popular prosthetic head model. It looks sleek and modern." + icon = 'icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_monitor.dmi' + parts = list(BP_HEAD) + monitor_styles = standard_monitor_styles + +/datum/robolimb/xion + company = "Xion" + desc = "This limb has a minimalist black and red casing." + icon = 'icons/mob/human_races/cyberlimbs/xion/xion_main.dmi' + +/datum/robolimb/xion_alt1 + company = "Xion Mfg. - Breach" + desc = "This limb has a minimalist black and red casing. Looks a bit menacing." + icon = 'icons/mob/human_races/cyberlimbs/xion/xion_alt1.dmi' + parts = list(BP_HEAD) + +/datum/robolimb/xion_monitor + company = "Xion Mfg. Monitor" + desc = "Xion Mfg.'s unique spin on a popular prosthetic head model. It looks and minimalist and utilitarian." + icon = 'icons/mob/human_races/cyberlimbs/xion/xion_monitor.dmi' + parts = list(BP_HEAD) + monitor_styles = standard_monitor_styles + +/datum/robolimb/zenghu + company = "Zeng-Hu" + desc = "This limb has a rubbery fleshtone covering with visible seams." + icon = 'icons/mob/human_races/cyberlimbs/zenghu/zenghu_main.dmi' diff --git a/icons/mob/human_races/cyberlimbs/bishop/bishop_alt1.dmi b/icons/mob/human_races/cyberlimbs/bishop/bishop_alt1.dmi new file mode 100644 index 0000000000000000000000000000000000000000..e403436daf428d61b816e942d7ab0fad0c99c927 GIT binary patch literal 784 zcmV+r1MmEaP)Iv9Zt3&$zg_wY9aw!^5GWp{uK_udlD5prEX* zte2OUn3$Nv#Ke)2k;ur%ySuyC*w|E5RGyxmz`(#tN=m}Q!lTq3y3Nha z_xJaclarmDoxi`o)z#I#y}iZ7#sB~Rwzjt6;o-r-!OqUkmX?-#dwagVzN4d~)YR0n zva;6J)}NoBjEsz_sj0xgzGC)ttc@!6~s0~Q=Gk>_)w%Ec+%^z2-WyGe-ZXk(@ef<=PGs2-cY9&aOF%vGjNXkw|NdYw z7^Wj|gP)0foQuo{^p8}ku`1F}K%YdaRMSe#=FkZiB3HRsKquf|a;cVb1?dyLD#KdK zT0xJ%7e!ux{zhLH<6;f!JkDgGOQAQQgI}o%dO;5hqg%cq=Sj2;cKZW7aa2d!Z^n;H ztIqf-ljqA79`Kdz0gS=7)!z(^Zg*saAP9mW2;vpMF8Gf5f$^x*ZiVm$$NXTfW$Dmd z@%zvQ$Na$NGf_>=6+fE%uDj+3rfR9{uv}?ifopzX8!bv5$SejO-0}lE?03O7N;o{> zm>;f}v&>HReBhQJ`27Y)#0Sp#fglKiAPC|$K>L4m0P)BAe=I*>{#gHy^`tvBK8>Pfw$h0KmY&1M%4>00001bW%=J06^y0W&i*HZ+cW%bVOxyV{&P5bZKvH z004NLQ&w|kt-;I z37^Q{H}c;JZD7~ZLn0y~DJdzyz`*79 zb>{#800DGTPE!Ct=GbNc003`#R9JLGWpiV4X>fFDZ*Bkpc$`yKaB_9`^iy#0_2eo` zEh^5;&r`5fFwryM;w;ZhDainGjE%TBGg33tGfE(w;*!LYR3K9+BQ-H4K39p0GbOXA z7^I7fGp#5wHxaf02unywnTTR|Q#3OmRUrdox?<>Kw2j zm#U%_9wFCiX0<|H)$BMF7L@irX$9%UCI#x<$M@3O4Gwq!8{Fp?(EDP5U(x$FP#~kV zkJg4j{Q=aa=YE|M6!cScsGJ??e!1Zdke*KY0u^)_It0F-`WSf(tV{N1RCvWXK^FZv zc}|du2mB1b-9HF|AP9nh`}^Jea7=TH1Hg8EsCpdcAp(@_=7)51bKAY91Ao4oACepU z<|kMT*vk*;df6>LvfsP;A$`016X@Id;j;GAfTM!#{7_}~U;N0s`5}yb5ClOG1b+pd z4@dxD{n`GXexR`ZKg$msvj1oKfkXEHG(T|G`+uGv lo&;yC?bbmM1VIqIicc0k4SStbl_3BC002ovPDHLkV1nnF2@U`N literal 0 HcmV?d00001 diff --git a/icons/mob/human_races/cyberlimbs/hesphaistos.dmi b/icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_main.dmi similarity index 100% rename from icons/mob/human_races/cyberlimbs/hesphaistos.dmi rename to icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_main.dmi diff --git a/icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_monitor.dmi b/icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_monitor.dmi new file mode 100644 index 0000000000000000000000000000000000000000..5f3d72f3fc4dff00edbf675aaf10609a9e935d54 GIT binary patch literal 577 zcmV-H0>1r;P)V=-0C=2JR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r;NmRL zOex6#a*U0*I5Sc+(=$pSoZ^zil2jm5DI+y8B|cY)i!&v&s2HS+i!-e#F*g;&HbhgF zhD({Uf~%hk*m?kBXeDGp!K2Xt00B)&L_t(oh3%KUN&`_4g~y+T-OfoOn52kVfR&(ZI-^<1Ed^gdu=C~A%DHD?FN=i<%-5a0b1qxmk0DxCYFyhY z%WKT3%p1M&#i=~M?hmeHp5DFEO-FNlX{+&q^bj$Cmp3vF)K<$3e9 zv+ot|U6ISe!RNd8&(q#s*DFlMm$HzgT<^+40tL$RJd@cu_ee0{WtwDue(~oizVS2N zK_P*2f^$7kmEEd^^*UbN=nMh%R4(etE#FxIXOv5Nii`oX=`hno0}UN8VU#q7#SJq>+5@XcjJaWn(XeIgchC znG~WBtf_2jsA?D9*=?-4d4%^q>hqJ4Ke}ders9VSK4Z0-X ztz6Pxbb|ld`%{X-w$XV-jOPNT{E4`)KWo~5|2h-9q|*Kj+Y1-hzp?0hY;kUOLljeT zw6ozdN8SxT+eJP<^;sSmo&Smd&JBHUsZ|%GXa8k3ul*V7$Yt=W{Zw!5y}au>Vg|q1 zrGD~m3sd=>@QpvFVfOFkMHkonOI*KTcgW&;1);aM%RA26Ke%`AoxIHPLYd>0!Vb;( z@1(B$wEw~{Q2USnFEh)T{}bz9Xe>DQe<3>MF!z7*{|li`Gr^SOy#M7t+ShTda^3j6 f9AwyY^?eLqyhYv~@OIk?jCKZ3S3j3^P6o$;P3D6i;IhdgoJ5nX|}euaBy&}tgOJm zz=@3iAOHXW0d!JMQvg8b*k%9#0B?F!Sad{Xb7OL8aCB*JZU6vyoKseCa&`CgQ*iP1 zGC)ttc@!6~s0~Q~Ptc_1E64*pTT#a#Q+ShzJu*HIOAQBZ11Y3_Eyz)IhQi z$XH-Yb{544$UY$BddXRGF0kBjL0#bqw60YRm&FGN6l^XKA0ZV8wD<(Ig09e??_W5e z*4oVc8bDB6DPC^q0Ok|?V`zZ&E7bOb8|Yod@5pbcenV7F`r41PwRR$b-BsAXPq0D% zly>JlPy916uMYZij_Z2sHfUk+1qVS81VIq|3g++WHP^UjQg(^FzAL`?0_931{VU zp@Kg|yew*RO3fes-1 zf0iF8Z2!;l1BdMYS$=rHc>hoH!vluP)t-sz`(#% zR8&`2SD66+LPA2UtgO@1(;OTe@9*#b0RPm~)Fvh->+9>xX8+6p|2sQ70002Cwzid( zm5Ymuz`($1X=!k9aHEp|z`(#_XQsaZ0004WQchCV=-0C=2JR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r;NmRLOex6#a*U0*I5Sc+(=$pS zoZ^zil2jm5DI+y8B|cY)i!&v&s2HS+i!-e#F*g;&HbhgFhD({Uf~%hk*m?kBXeDGp z!K2Xt00Ci1L_t(&f$f;Vj>8}fL|Gsq*pMcn&Hn$NE=sjWGgP#P)%r<2jq6F2%Z!at zUg7JBs9R@k{mBdLg%|fva|mIcBnP`hS|~1(gY}$JUK2|Lw>fOv7G@T7PwP(mO41X0 z;NhwV24^Yd zlno3gawUoehM&m)2m0?sYhY@rRWEJ5z9m=ybOU5O02h3i@4xTRHu(GtDvF{g%D=!r z^S!8#_6J+jcTS1DFf!U7OyC;sYk!amz-WJ{1~uI0#COSHus>9Tk{v~s28R1X;8+|b zQGY{!0O@|bKj3&j+8PEJEZ zLnk0d!JMQvg8b*k%9#0B?F!Sad{Xb7OL8aCB*JZU6vy zoKseCa&`CgQ*iP1GC)ttc@!6~s0~Q?C*i5es!zLsra9?i#!H)CBGs(2;+vi|=2j^F-fh^yHMXb2C zHn*l$oX+##pB3jS{gTCei6ytfrR8E4D5<~2RLomoE>hUOq#mBdK7J%fFDZ*Bkpc$`yKaB_9`^iy#0_2eo` zEh^5;&r`5fFwryM;w;ZhDainGjE%TBGg33tGfE(w;*!LYR3K9+BQ-H4K39p0GbOXA z7^I7fGp#5wHxwQ21KUJrPf;5>agwy?|kg0 zPQpqPtAI*9&$AZm4T!J8*bkjh_=)I3&=~~f>XRyeF{XEe13^z`Jtls0VL;CtcUtar(20&H^ zpr5G0hxz{d4!*(X511rLk|h5EB9IS)`C*mzn(u{-l4yQdsvJ6=v+Txn7R?W8pu@cy zSQXLypayz_mtK*fhx5a2P?|a4#`6Q3?&J9ZkN461fX4fHen4b?2){)pgd|ClB>4@% z{vYKB*dFZvQGS4+{XfbN*Z}PRQGS?k@b~{HKTP27|51LJ!A}VA@4$?M9}rM}m~jZn kNtmhWJ|jSqBuVl$}D)vPT5+x!_0JWj01QkRD35o_;B$PE_NyLa^U4WN@ zB0{L3wjy8!Lf#zl) zHx+=lZ|5VT3>*c9&)KW(01XXC;b?n%I1?`V3AhTtID43~3|NB$C=_J1!}NQ2w;|vN zSHN%`q7dQ0hmpetI9U4N{{8!~&`H?>czJmh0)?gz5O@?vN5>~mp6uVh-`(AvPNxGI za2k*n0Ym`jI&5rga5$W)si~QnS&O+jABQtl*xD1e&BHVX?r!UhK$85ub{J7X{y4-bzmTeetQS`vvwV`JlVu?MV3U(_y}${vqN1)L;Oh-Oh5~pLE`QxovgP z`sfV?_TlAYr*pe$M_|n#UHAHqCqH>OC8VCl|FvhS^Tk~zBbiBfYJ|^+&RAlTVG!j;{ICu0M-N5nibq@F-aZ32^b?xG_4V6BL?3Emk1BO(4q4m=6mt|o= z!k|A!?_4LJxL7!UGa=)ek*2TRlHLmj1{*^@L>HbfrL8J0&;9SV5`y)`hXdymSj(-! zWdC~(^{7{HS{~8p>zexT6v}RGK}tZvB5JxG@xUr!)6CeptSywQ-+z7Lh>K>b`L&=^ z*HUh#NOjgoJ6h?{TK8IAZzMb){;I&3I$dtDlw{W}W!`x91ydQY>FD8jip^ZPoGo;1nae1~e|oO$#)>#w+@}IXdGT zaYEp!$wjukah*pjx9>R^&;RC-)taPK(rL^f!;dzw) z$Jnj4J6~C@I2qKEk!w`EQOR*#e35@Lu(Hu7swWaruc4E&+idzFsFDWjP1zyBx2d*^++nOyDtm0?N9^ zQaM;*93Q5P-G+~`F1{Kby>6;~vz!qXDeP+}6`_y>&B;FDn#1>MJj5w0DVeE)pu6Si z_if~mOhCB7h9P7@wW&^!^qZ3hV<6$Kp7*dBAx=rwnU)Q12*A&^g*A~Fj67m{fkJuX z78`U*(bKU43F z)ai1#cplBjt3{C{*jN^KhBahDfVINRNMI_)k^q8)+ky0kr1KC&$U=S^vDhjolnRdM z@l6p!@hgzn{&HM$kG7Cq!K$9tKtmWosg1a!GyMj+NkGm<6#TWG0M8-B(#bIeH7X)v z=f@Iw0&Fbeq^Gd6N9i-eBC+2TVcNqTjY(7CLo(=ux&>$VN!L5))D zOP&C*zF-y_ZY~~8Pd}WVJ}ooe(3U2~T!kjuNsar+*q9$v3OB<(@1ihR zFG?jV763SJC@<-ukjr!zi8Cx3L8mo+T-tcoGmMUXsaOzV}BzJQe21oE(LilSQ1prX zgbYPcya5!M_Y7jls(6P2grWoED1(k*=>Zp&icMB}eDZwg+^_qXDfb%3s-Q4XuyH}} zRPQ7lQyJD19?EjXnEyhbr-CJ`I{HO_gsKdMOtC^3%%F{fP1E8|{{MG(@-#xUBr9sE zPVH4B_3h*n6_eSGA9<-p*CRyk*o#e&s|_cE2Dz%EKhh5(&{c&y*|gPmuRF z3b^K-p;}tel_5<~>&urvb>QbfnIw?I!+KYSOr2Ce6Y&kCaO$H2VpRScQNKuQ5bYhq zki|D)s$iAET`0oDN*$W;bC*7PAim)X@2jV7Y$0?-jR|qCUSJdH1;kzQDG~InnXb%v z3FXs$R<3;a5n9o*OVu3^G~m_P4u1A47i5L7ux?d6{n-57ENW9}C3{*CEUi|dghBHa z6b_yy_y{ZVv!<%5!`or%=iqqJypR)-v>XZ-mm%4#j>WiSg3UXHpuWgfi8~GkeNq!U zJN77)F|NdWUQgkksKK!A?oVRK<~#O^8cj_Vd=52ZnFEfGLLNJ z%4WI;?hf4DTP414N)DLT=IbVXb=Q9~x=~_s<^|LygEI{==r@<=t@|P(g@hl{iy} zv#B9YZvn?1zcAILL=zv{ax3;T`oIoMS_Y<{&Y&k2(UpoUj9r)RU_`!PvM`GrQ5iZ8 z_9ou&&?HdE@P)gsu$C@so_mcWXSG zbSHmdMCF6s5t2((cQ)Ib&Y-auDgpM#kYZP4rGY1cXZ8^-_&7)N2U3wuS%p+Kp6?mdo@qdG-r z^=%N-Al}V+JMD)}wyUFe*u>3;f9h~Nhog{I1u>6+$EcfzS0X>8+i82U5QVzPphEGF zou3lnG#DWx!dBo(GXk?j9*Vqpw{IeSNNHg83cVc`LY(bv@ny{6ChlP?=8-&}wFGk> zRn+HG-Gh$&L(ZK;+dX{aQ_6LCK=6r>GhGo6ETZz`6DKAWcgz2uz)rc8>%#ii=|PcfvAG>|WRi_|Tz;c)TKJK`azF2Th^Wpmq} zp^~&3>wB>RrQ6UP6Lj_+UT>=?rcH#1u#pQ{N_O@6&zdoEJqn|WGUs1i{gZZ0(pXO= zx2h_RiNnD>rB>KF+I!V(Gl`;7HaR5>#}nRBFEKMf-M8RnrQS1DmdwLsuw&{}X;|np zUR1;~+QE0ud5&Q|k>mFkS*9LOeoTiQ#xw~|Zz?y&hT-I>TGI>D^-1?sBsM6o_6sY5 zl}Ewiz@*yLA-^|PJC&vlA#;RsrEMa?XylS#SeUh3Wx4(2hPOnOl<-)QAI+%T)7})r zEmxJ3*H2kqFH;>F9UUP1F|-zV$N`_$f|nc3iMlqWcG(YIUalS_L|rvW(I{_SL@KZ} zG54OdBSd%3|L~YK96vc-J32Z#_y+3eT6RaP>qGA)vNtC*Zo?G!<>1t*N#oRCPFjYg zpaP?RNatqX%(4!4@rf%{K*N1Tt;b&`*=+US8C$7urSMCJ2VPuZUC|@(8)0*|?n8&7 zBgeIgNz1OUt4hAXH2f@yM04y$(dp3%1s9q0!ydi}zw7}0^}cq|4ArR>Dsjd>HDyF( z-pcZyTJih*n7|T!bC_2`yX+b_>ldYOgIl130DzTUO+}0{dAu+#B5c;ggW-7+l2m7s z$Kyo#nYw<=>G_Ezr-sPPRoz2Pmo66^@3xKSL&Q$w-dLKlb&TZQubz|E?Ri31wwe?Z zK(Tn#W9^?HGOGeCpXu9W(hVdOX#1W{7wrlC&O6c$K*BjlZ;V{-~^)x*^8gOqH02$?mORx9^HN zOeHRlwc6h%In57%mi<`;FAN@zOj7-rk^YpZC*KB~N?(ZNIhLRC*7V{!TCYRwoZrc3 z6Fz7EdkN<*~wa(%r)g-LP-hApT}KU2^*CBB@w zZC7aJ*%Z_j;hl|)*|l5Re5O2K)d)D%d-OLmuH2gIj(Y0EdO>`HpDLa_8_XI{B(0~u z^%M5K(NNZ-41S}>hX+4$$k20=pbWly%C$mUZjx!O+KKPV;bVLfmCIUcOm5}ZV3#ih z|IzceGV4Rtq!V!CYO1!vJGLgSU07aSt^s6MTX zEW-$^JQTZgbmfH;+veQS&5rv0z5dde>K+r#xK;hV;94(Man8k$r%%sudomYWLI+vJ hbu;*X5Ijm$={i&i|N5ow;bXPz=RGdF3mtvV{|_ayOi=&; literal 4656 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