From 4214e9a2908a28344f1e90f98a645ebc2efa0fae Mon Sep 17 00:00:00 2001 From: Mark Slee Date: Sun, 13 Oct 2013 15:30:06 -0700 Subject: [PATCH] MidiMusic pattern in progress and some framework changes --- MarkSlee.pde | 108 +++++++++++++++++++++++++++++++++++++++++++++-- SugarCubes.pde | 1 + _Internals.pde | 10 ++--- _MIDI.pde | 2 +- _UIFramework.pde | 2 +- code/HeronLX.jar | Bin 64511 -> 65367 bytes 6 files changed, 112 insertions(+), 11 deletions(-) diff --git a/MarkSlee.pde b/MarkSlee.pde index 71e8660..d501786 100644 --- a/MarkSlee.pde +++ b/MarkSlee.pde @@ -1,3 +1,101 @@ +class MidiMusic extends SCPattern { + + private final Map lightMap = new HashMap(); + private final List allLights = new ArrayList(); + + private final Stack newLayers = new Stack(); + + MidiMusic(GLucose glucose) { + super(glucose); + } + + class LightUp extends LXLayer { + + private LinearEnvelope brt = new LinearEnvelope(0, 0, 0); + private Accelerator yPos = new Accelerator(0, 0, 0); + private float xPos; + + LightUp() { + addModulator(brt); + addModulator(yPos); + } + + boolean isAvailable() { + return brt.getValuef() <= 0; + } + + void noteOn(Note note) { + xPos = lerp(0, model.xMax, constrain(0.5 + (note.getPitch() - 64) / 12., 0, 1)); + yPos.setValue(lerp(20, model.yMax, note.getVelocity() / 127.)); + brt.setRangeFromHereTo(lerp(40, 100, note.getVelocity() / 127.), 20).start(); + } + + void noteOff(Note note) { + yPos.setVelocity(0).setAcceleration(-380).start(); + brt.setRangeFromHereTo(0, 1000).start(); + } + + public void run(double deltaMs, color[] colors) { + float bVal = brt.getValuef(); + if (bVal <= 0) { + return; + } + float yVal = yPos.getValuef(); + for (Point p : model.points) { + float b = max(0, bVal - 3*dist(p.x, p.y, xPos, yVal)); + if (b > 0) { + colors[p.index] = blendColor(colors[p.index], color( + (lx.getBaseHuef() + abs(p.x - model.cx) + abs(p.y - model.cy)) % 360, + 100, + b + ), ADD); + } + } + } + } + + public synchronized boolean noteOnReceived(Note note) { + if (note.getChannel() == 0) { + for (LightUp light : allLights) { + if (light.isAvailable()) { + light.noteOn(note); + lightMap.put(note.getPitch(), light); + return true; + } + } + LightUp newLight = new LightUp(); + newLight.noteOn(note); + lightMap.put(note.getPitch(), newLight); + synchronized(newLayers) { + newLayers.push(newLight); + } + } else if (note.getChannel() == 1) { + } + return true; + } + + public synchronized boolean noteOffReceived(Note note) { + if (note.getChannel() == 0) { + LightUp light = lightMap.get(note.getPitch()); + if (light != null) { + light.noteOff(note); + } + } + return true; + } + + public synchronized void run(double deltaMs) { + setColors(#000000); + if (!newLayers.isEmpty()) { + synchronized(newLayers) { + while (!newLayers.isEmpty()) { + addLayer(newLayers.pop()); + } + } + } + } +} + class Pulley extends SCPattern { final int NUM_DIVISIONS = 16; @@ -1085,6 +1183,7 @@ class ColorFuckerEffect extends SCEffect { BasicParameter hueShift = new BasicParameter("HSHFT", 0); BasicParameter sat = new BasicParameter("SAT", 1); BasicParameter bright = new BasicParameter("BRT", 1); + float[] hsb = new float[3]; ColorFuckerEffect(GLucose glucose) { super(glucose); @@ -1102,10 +1201,11 @@ class ColorFuckerEffect extends SCEffect { float hMod = hueShift.getValuef(); if (bMod < 1 || sMod < 1 || hMod > 0) { for (int i = 0; i < colors.length; ++i) { - colors[i] = color( - (hue(colors[i]) + hueShift.getValuef()*360.) % 360, - saturation(colors[i]) * sat.getValuef(), - brightness(colors[i]) * bright.getValuef() + lx.RGBtoHSB(colors[i], hsb); + colors[i] = lx.hsb( + (360. * hsb[0] + hueShift.getValuef()*360.) % 360, + 100. * hsb[1] * sat.getValuef(), + 100. * hsb[2] * bright.getValuef() ); } } diff --git a/SugarCubes.pde b/SugarCubes.pde index a551ca1..d37e12f 100644 --- a/SugarCubes.pde +++ b/SugarCubes.pde @@ -28,6 +28,7 @@ LXPattern[] patterns(GLucose glucose) { // Slee + // new MidiMusic(glucose), new Pulley(glucose), new Swarm(glucose), new ViolinWave(glucose), diff --git a/_Internals.pde b/_Internals.pde index 16a7cf8..45a9363 100644 --- a/_Internals.pde +++ b/_Internals.pde @@ -122,10 +122,6 @@ void setup() { lx.enableKeyboardTempo(); logTime("Built GLucose engine"); - // MIDI devices - midiEngine = new MidiEngine(); - logTime("Setup MIDI devices"); - // Set the patterns Engine engine = lx.engine; engine.setPatterns(patterns = _leftPatterns(glucose)); @@ -135,7 +131,11 @@ void setup() { logTime("Built transitions"); glucose.lx.addEffects(effects(glucose)); logTime("Built effects"); - + + // MIDI devices + midiEngine = new MidiEngine(); + logTime("Setup MIDI devices"); + // Build output driver PandaMapping[] pandaMappings = buildPandaList(); pandaBoards = new PandaDriver[pandaMappings.length]; diff --git a/_MIDI.pde b/_MIDI.pde index 68cc832..e26050f 100644 --- a/_MIDI.pde +++ b/_MIDI.pde @@ -50,7 +50,7 @@ class MidiEngine { } else if (device.getName().contains("SLIDER/KNOB KORG")) { midiControllers.add(new KorgNanoKontrolMidiInput(device).setEnabled(true)); } else { - boolean enabled = device.getName().contains("KEYBOARD KORG"); + boolean enabled = device.getName().contains("KEYBOARD KORG") || device.getName().contains("Bus 1 Apple"); midiControllers.add(new SCMidiInput(device).setEnabled(enabled)); } } diff --git a/_UIFramework.pde b/_UIFramework.pde index 0e0be79..ec590fe 100644 --- a/_UIFramework.pde +++ b/_UIFramework.pde @@ -703,7 +703,7 @@ public class UIScrollList extends UIObject { itemColor = #707070; } float factor = even ? .92 : 1.08; - itemColor = color(hue(itemColor), saturation(itemColor), min(100, factor*brightness(itemColor))); + itemColor = lx.scaleBrightness(itemColor, factor); pg.noStroke(); pg.fill(itemColor); diff --git a/code/HeronLX.jar b/code/HeronLX.jar index a3f624137cafd5fdb44e9bd18cd1bcdade1dc611..430832ebeb54a17433bc8ee92b5795586813bfb4 100755 GIT binary patch delta 14715 zcmaL81yo$i(guo4g1cMr;Dd$W?oMzB?he5j+#j4V)#W81Oyr6bk&nfC6~1LH=8a^^sV}&!7}+ zN+byLFT`IUrQAvEpt1gxVrtx3bi{;$s-b~`B7y?tY~ul0Ol*x@T&mt6d#L~Tv16LT z1Moy1iWh#zK`l%R>V%@Aw+yz$l7T{|!hBdX+NL2)8zr__rhcz0SM_71u`&G7t~M&= z-SiB+GDnwj?Pq2!-Ngl+uU0mnKUaOO`l+w{=yIf6HwN`|{m|up)V7mznB#ravJJ!ci@PiQu(S9HVi{;E8HOPK0EQ*lH=u=Xc=lGAjr&CM9pmRbdi%)@F@F*;% zpAx$mky+0=_WZ4U@bNLJ|qSIb);yr9o3<`@yEijXRE+|vL1KxgZIXQZ9zZmzb z&cA}c8MS76nTyPF;K{hrz2)>LL89YV#CL0=_@ON^Y|8v|VGpeZ&U1jcNmy<)B9`us~{t9%H@Mkfa7?dUb`)np4MzxN-o zj-0BG;DE4BTz>vts91jAU@6IhPb9Z*}2I=4&%8p*rAC#*y(ud$qDSfVf8#2xxpn{9{B1jbhqJmB+%K0 zs5KRYMV53D9~_1WC2|x!kZfwhlqAc*04F8I^j)c{p~zQFX(#j&X}Ov-KVO**FY+4E zyTO!mx#LBCo<>YbgR~KL=aNNzYl$dXNYD=-`$~{44 zuCAXnIQ1u!isJzh?QDrCsMqqJplXa4le>Vyk;)v}{pS7ESaNb0>WAXUJvQh=s7W@gc*cJ*DS|)1|vI}Ig3^tx$iz|(lV?O0ubIg7Iym(MQ zEcoJOo#m0Kb5V^FvP~CSjxD}#LGmkE#=;^{zt@Ad_5$rUt*purv1)6M5gjsDyKFij zOkx$eY9a&W*WQ(QX4=Cl>tL}{DxH>@Xtse|0N&fT#ElfA(jj8(MKnW`cyt_7Yb!JJ zlb>SNr~BIM0xR>RUWT}T2*b)0TQrFbMwhu^(>|n=rCoBhiYl%?v@$vxx9e4yjNIh> z+EE|yl^U<<)f|E#$NH2PDMCXboum{+mHOf;R4+3Iz0fEkL2SEtJYMuETSH?41(5(5O8RMpljqw#oSrzZF!Sc`!CoqI+K zI%;%eYghs{@)8rV#k3z6;0b>hNn50O$c$}%d>^Cx-Ibpz(b%FShYgh!n+(C7zvg3oH;ct0TVuU_=LbmKUAs5!t{p8M=|s(!4hh2>KarKYbU;0b68g!zZ3Zq zYY*&69tz?b#-UvbM?{~wDM0|MO5SE^yy*>xk3^`{Y6XYa8W-}wAmTKz{<`&YPs_I6 zptHHE9R(ehhUNIeODeSI1fx69r2@u2@3p0X{=x8Nn^bXhw z>6^mnmA>PIlH%n$<~>UwQ#WFlo$Z2bZnV_pQ;A+)1w#mobHIdKiAmAU7wqfYTKjM=DI zX0(tQfChmD!Tw?}Ev_zD2z0umMQ;L)M>RT;tinJbI&^gtkEI60recznrhW{h;zg8F zvTUv}35xFM-7)paVX$#gwpWxK(qNZ}PpxyRS59%_)_r(g8Gka%(eB@oa4Heo7j{a+ zhrB_yoD^#_DN^LCsU@>3V?CQ;%F(bWHDFCoq(UXAaH%jX)NVOkf=b_RR9C!$|Is~= z``ae5d%`UW7{3gl)>W`kH^d0tWLY=4 zCDEX4!NUD|*u=>iZDAWnv@Da{+q`$K`@@wkb;m10BK6&1Mw0y+ z)$x3fr}|)E!fDM-U33lm4RP4d6$aN+@*5@OCz_3pQz4G_@w4UkC$vFLCph{{^Qz?f zDjQCpjPB4>N=An>s8cC6o%AyY`rOB~%Nc@c9xIh%H0H@EFz>17s2J<~+SNdI>n}3Y$A66&az#{1>8VI;J7&8{;OgKf(cj5X zuB`S?7dq-$x`!M7#n6r);-wa&xz6r9%!EMwD7J0u05no;W;yIPgU7Ra$g zSu(!I;*WF+5NkTm_=HEQN;@Mhfj3kBQ10A8I!1@PGpa~cwMs;}1Ik4Cb-eSHQqwC- zd2~uuy81L~IIzqiUoRP;se+&+&}KM(YL+_{F3y@g#^+EMq79t?_A68IbXtiwGoi%~ zeW;`a*wY;U1yGk>)AiChtGOO86)Av;k`ub#(?2IlZ|H?_`M__)vNX21+(fH3oLH$e z#pzNV?%WBqj#H4ZwJ>R;Get{n++C)4$MA|%v1NAlM=$ENg9YvfXc4W4S(L>qIEhc7 zrii!OOTzRFC=OgE2D`?t^pz35Q{P$Kv}77XfxYt=O&nzkFKI3eu{=)Kr8wJyTt6^Q zD3^8X%^^0yb~4e2DRub?H-jWSzvH=x$UYcX%Sd>qPO6$QF2G94U6xrMvoCm~@-YgP zT{>qon5wQZ>XhqC$Zb{ReGF8IE-S=gPPQm0%1~%fFL?1r9X2vWR&rAHhrAu2d5!pl z7pQ%&Ks1(@@?>kkPt7Ntde;;)w9|$B!8#W$TEt+LV9pDc7vW095spZzi?EakorEF`z!V+fJ+~v)ivUuVwntl1G@M*|@-t$vwLh zgd0NyB4T7tcCEqplSUgr{w#k`zv@Vr+?F_t{T-6u2AwK+Llm~>tXSyOOY>9 zcew`)ukbUHdIblp08nfZ5$%XNLvTYe@ihs!IW>1v)Dw`UZ#DUbNeh2=Es$<39P`ZF zC|QClgPbVRP%R=57-ewRKDplXMm_pe(UtY4C!(3@ywp%Q&tA`9h7ePhHifA*JOdo1MhLO^P*bu zE%I6t+EMfp1AcsQ>${f(c*vss(xYzWgtb8<#OVmduTyJC!|4dXuUBixz+v4gumpf6 zdrowN3g+@0F(hK%_>$kVjJN_57=S1S+{LVvO{bj4-+$8?v6w|(8GM)}aEG9bVo)Pfr!*LKoSH&CCKCKj+#7ZHH)E`zuw{mDb*u`rXm5l{J4W%HGs-jE6 z=F#YPUar^{DcL$DcemtJQ;#x$r$8Wa_Y6j;i;A6z`}CfQ<(Jb zCjl*!iY-UUr>iXft?sXL)AYp7yNwmmmK@8mHT-ON4`A~ z?<$kOEXq;uhtkMnN|6;XsICI2?Zx;ZU(ozsYq)?Vsdz-y>lg7biODxjTC+SMSXec) z*rf#}W92Rphz5kQscC)&z8gj7is?Er36pt`3gi^Qn3AM#>0C9o+DB|Q za<7UQ1%PuE>-P%;TCSMxm}vI;dSm~V5=#@4;Y*Iru^+qX$jSt6KjvILxiy{MF?n7^ z_HoNAM==CJUZCI5uc#qJ?=^@ysUOhP+Ca+BK?CUk&Da@G&aqp@(N0km* zw`P4`(Tcu13RU}lhaqJ6KED0;#qT$_0To*QBc8UKxtLluo9UQFlhXdz)5#-c9k{=;R@BO9Om0JD-Xsqzr+qz9P4wdyBLj%$-~ppC@Of zR=jRiZA;81`cedTYDE|64+t^0_rL7ydI`y{70>!M#fJM9xZc%b&Xs;$ZTy-a#EiAA z`~$i>%60%gbeT`=nCc_NlF86rGmXRX4O+6O6KGMO=bM;S-uyy=X#|*WD_}wY8!acd_fC$5v2MtxCrS{X;bgc(&qEl>FpoR4c|w$-RPj2$MC0BwtYbvR%jhrGR3QT zi|o(GJF_beLQp6sGU8BTF!oW7?+1erP|ml|3?*Beqf{`j+4_s_4ETkUST|tEBH_|j zE#lz#w=-p+mBeo_u}{=H0nlnF>#>O{jT&NOriA>mJ(J%cS9r#HnJlUy_=rmyze2ESAj5@yG~+dj{lL@vN+y4kM7y=wP;x2n8wJI0034Ab4V$V@q`>NP$wvB@J-+K&e=8(10NnDS#- zNiFf%Uairr!(d_A7f5w8ZPN>3ZJ)|^+c2@YYO=%!6Yr*ciz5rImPL~VB2kWFFa~WH zloQo}4*RK=*&4Dc?B!RMC%H5LmOf+3(@8~xOA9Gq6d79*$punq3?B9i=oM@(;);@O z-)-sZjjnP2tlci&wiU4&EKMgMayhqhdBxaahLp4~%aOr|!JTcD*h*;)W281TUhWer1tn7_-Ql=i7)pW{(VTpFUA{cj!Z2@|9hq z@7u$-ws(q1)N0;S3uc06ii!U1-!Qdy-;z{FIr@cE(7(f#xVAW9?flB@-jU2pdT|}n zp2z5e(iO0ELWjM*gQ^gwUpy)g&>%4<)qT9c(j~XwniGugmw3_$1h$;phLsA2hEYxe zQ4-dm6sSE26)DC-5zy9jA8(F%@~wyStQFL=Bi4)eNO^)BvkO%G?-376PPAaGthis4 z)r$V2w$Ssm@aqObG5Ej$cQGzUxJ8Fe-uBHKa+s$IY(uM}QzZg60B*g;G^uOwRR!8h zI{fb5kFd|<3kZeuJiv_S#>FGS1FIPPC;Hz3CU4|v=KMUk-d;M)3L+pNyh0#jK`=*9 z{D8pn0l{7pfje`wbrkEZB!W5W7@H&l-p+lJIz>q-Cpvw}8rESMVSi6&cjxdRMPhJTNGSmcZ;8sz|mgaQxhuQ{UrmbnQA;_q!>lY)gr9szE!sDGx9Fwxq&J#edZ zK&O^CAd+2NP#MoT#7CUVI}LFtr^PwsegeC_$1p%f&e$M*XhcxFC_;VSn?Z;#x!y+9 z=h?fwFUIm*3$bK1Bmx?h-g>T9M)4WKq!9WX`K-wQT>r=0GTe{g>FWmcsKN!*b(wyL z@u+y96yLV>nYwU3c(xyZP;$75VMA zRKX8v`Dk_)H_#6<*;YoHjX?q%@*fGaKR#S73V2@~kUc!ChWZ zBEvPgv4ycXX_4*0e^IBR7p?aQ+>r9~Q^o8{t!(RE7*QFmjgMM?F>zkWP35vOajBOr zlJme^+8k-agr~)s_LVo_7kxSX8Unf;V~P`~!@jIgOGWveqpom8y4{|G=TwuP)ceLc zHi6lMoR#sp#q?s`#k!(nuk?bgw5gG|aq^3H>DmF|7rxp*ad_X_s=AS`09_78apxP$ zN2Wju(>wwk1U2azztd1Nk5V?K2P8&n@8w{oZ$CxZFyXwO-z*pQSguNk0l7_2z`snX zq8*|Xuu?t=COY{1Qc|Dpc+l-@1>FYnEPLe#d=+c^>K}Cs{!R}D0iQvy4{E4&&CD&O zDHXoH`SzIJTE0e_^}`VnHvpIpyXpTS>vgKj`Ru%xLeHB~>*gqLoP>nj3CseM6q%x; zMV?`z#LAAibE4&qHRyKLlh2_J6kMhR+EN-K3PBO5@NTH6T0~^ss-McbB-Mg?!lP0; zTk@gCVo>Y%EusVJClKR1hg5ovi)vzbLya7-IJGO1Z}%{@zF${m4U++xGx?EZR!a?h z=*fqonX|pj`>vTva(?Q%Qsln8-CcP7&H&fo?1@4BjkDWRR*Odc z&tg|qGJZgP)=PC$Z(DL8uA6F5J=V<2A$VxFlj`s`zK@9)#Nu|tcJ{2pxLhS)jD$*r8K`|cHuOGL*wJR{hD9c36$bvOWa=wM z*>^(%-Kah+q(kHTqvLSbyd@*fFL=4q!aqYKcTEv%1-&fM1^E3Hfu#G!PW?G>O}_}5 z^c{X|;FRQP%L$lS)X>Gx-B%3^N1Kw886&sGp?g(oMe+IEeH)1i2Q&K7^AN1PNaeJh}Hzn*F_{FZ)5kPm?56~d--I_ zf^YzVYGQvNGWBvX+czs(052e-OvCWvCms1kKDzJT#|j&bbu(t5KkFkrFbsXB4N*Fx zo1=avt8K!)-S^Gifs5bMUFr&yUT>;VZ$e5ua!-&AWp6y{bUY{?-B^(A`rQ2<=u0jM zb$qf9Q-c?%g);hpd~I^!g&~n5C&EeI`k z3A0MRzZ}`RcP>+=r5N&WN@5sk?zBa981%>vdpnnuH!>GUX_A78%}kivnfQLhkzl?* zHd?9n^#+R|$Wf_(=SFn(djL@Hhoo55n;}p8nAVDySp>cG@4QBGVgfr)DF>Rz;n8}X zTS#8lsn)PwM$&&GAYSlF_SIqZBS`G@sPvGUS4sS0%n70yn2I*H7P2(_v11aH*`(#U z&~o}zqCB7iTg`aO&68Wj$HTxvZqSfR$ z!V)6nQsb%eszDq)_)TdltEE}>F6DQ_idH_GVL1K?N1K_G*YrKX)=S9+dP7{zaaXgt z*R0K|fqBGk3H`H{A0~W(oX`OF!^I$JYQK;Yq6qP;RsAQ-cJ6zdX!!DvsyJN&!N>wr zp-W;?1>vsWKKky~Pq==X6g+5QVI7`(bxnD7a(Fbb#6>#b*lX*&~(*L z!tA6b%iQ?z-47`yo=R|7L-k{2R?wc`^f}=(CPd8BBeX*Dr;1fMB*JQE7@4jOXa$ujo{{GrY)$b=IZTglvWDSgp4V*y*rGVPJ$!iw!D)b6MyMD^Xpsw2_; z@DDv%vU=4Cq<36)zT2{)H?029o+PML-s84}R2T;r$}piqUMo-v)8;I?ESB7fm(g5~ zcN37YtW1@}RPf<$wJC+=wnhhtr9`rZDyXREbGNGb+jl+w8dJ^j99`#HWdq-?Zd8cu z`V#%$aRJ_O*E{Mj!9jM#O2)|ukjRdu7BpnUARn5}r-K(#V}w5=rvANk^Yd<<*q;4) zXRYK2_Z)fW-0{qWz&-JKM_uIs{hU?nCH5S-_UU?#d5z)l4ukO&esC@&8Qk4azSd1RbA)2fl`tJGL2)A8op6qN~mq7_O=$0fi8H3RwoE z2Ko@3PgOcvB8Xz~`;9Ql3lJWCk3?l0|ERVT}n#9&LqHY|Xl-w8`^tR7I+NFr8vpbR{lP@z*J}hP9d}nq}&TA<{%#~APgIO z@5rzgMR0T{ z*2o4uzgk-<*T$gmHmG40IaZmGOJKBOo3zi+SdV3Snb!oMS$xGi?|1z(I8kY=il}a- zO%V+X+KAyjOp5Jk)!=^F;A4DB1V$!IF^zG;Rnj*ylu}JDAKi!eBw2?R(Z+$7Gp_uE zeBm5f=ek2lJ%6PipMz&=Dhm09MRYmE>bYN*qK=JM)Jpl!S@$CwCdd=p?G>6+FObH; zq=YOi5=SwI;Y2ma+c{i`x5^?Usdo*MS{HsR(oey9JC%>(_L`ei`;|1bIxtbS>d>=V zP7LvgLO$J$7VC=+n=aO^;p?xwB@Ami+9!Y z#WgvDkWL(z%bEqL_QPALhljB|(}hZk8?nR=^+prZsu_o};$=lRfW~~433n68Y`>Rg z=3cG&cB>r1C!yQ$eSSAeq7H28XF8-evo_F+axZ6KHrk{X1OQRe)Rp^M)YBx_tV*wB zqIfg=S$YoKb4mudkET91%PyHs&!sdnOH>iub1Vyu+(6Aa#!g79d<>L9qmT*HdE_b8T&vWyxUu=%b z1R!;XM#|Bj)}?rmSc~Xw<`ef4%P;=)RX;-qhoAB4#7&4!V<{oRn1_xg6F{czTf*Cs zU5U8psAh`1FGysEF^s?gbz(Nkk8#t^7}+pK?Y_D%w0L_ID&By%apfZE)eUNijhq5g zitlOJ0F~!;c^o>$eLcT4LPK4XqisHl$pDIrRg;FLN9D^C+H~!3Kc5G_QUC4^YtCoI zL+4iDt_+yM<5K?Jus|ZGy-z_o%GqU8&?pIb7F1?@9#f==Vd>yk- zQbgOsN0hu+>YI{|t3oE)1cR)?^^y{L3S-4p)_u%2xby+`;)?wYAXwQ~1&y_x>EB<^ zuR|}TF6Trx5=qmmG%{=D7i*~UFeqKXb7t=r46>WkJp~=?303ybwP@~y%AWozs*00T z*ONDFVDkmFm2Lx13)Hxj@D8cs^4g|x7VdPs-A|dO43rWtJ)mI73K#hjzgnV))CeQJ z1UZK2gB;JPLi=Pqx)netp_wdVw*qX)D{wb-?_o1Y(O(WND|{tEt1}`cHfT`6<=;jt zkN6Ov9m?9{i)YplVL=&Tg7I^saX_KLYqfky^q4+JYrqkhl?CWhTSK|GSapg6m0fed z+*KD8wwmQRg3v$fiS9YjF9PAu8Akx6Nao7g+7gIp!#n#2+J!C%T!f<*@Gr+dau4pf zq~VV)lUg@k@XJOPd3Kw{-}5+WQB0jLal3e}@s3txeV5H5P!gomtsR55rQq5rWRxEl zuprqXWSRq71l41fuSLpQW*Y|tb2smHJ2mbA8fIje)h?n7Lb16bq3m8tIZz&ie5IAU zFyeQ9IZ0a$jNL_Rc{;{j=*=2dfAM4bpv4UOtU_}z@rCIR51j1SFxis9 zWj2jQ`|cq-{4W+mRjjGE1K&1EJ3_z09~iiyM!`iJLzC`;t`YHgqCT$= zqohPD03S$;eHn~WaZQ5W95@q?)N*LCb6;u(0J(ZIk)-F`VcmFC%*lzw6NH?(OCEkp zF)EM0H#>?z8!bmO`#}YSBXuhyO?Z6sqpL+7hAdb25-umJ*jY)FG()#&^YsYhtgFV; zQmwH|*$Mey>#Z0W7qRvTH28f;6xcrwtoppXljoHVRG|O7Zk-oyKD)9Os;*%n3vtxD zYYlR6nQUm#`&8ok+gjo0A_Dcw&nt3#VF=o<0(w|f+FyU+^v@A>)tD~ z2&3P8PTo6)^A{Q~*>^*j0@I=+uL;eomoxHn!bF(3>q>>_u@ZKAstjG_grb%EIX>zD z#!RJu((ifaj|N|Fo8c7((HG|YP_wsVq)}+_S!wcR`u57%%RNS(DlA-q(M2|kUIkVS zK{cz`HuCI6{$BGBAmEcpsS+{~K1}KY(OT<9PX796wy4Vzwt9zl$v4(?c9KeC1Rhod z#BW9zAF{C1j(>jn`6Ms@6qr!=$++Tsp1OAdkL&v9b1^1HCO~-=BQ*4wRt>uAhl`y7 zr{C^P^fSu8Lujr*%j7`lzm3d95SMBT8tTuhbk8|(4R?znokrk*Z_XYg^)(eqYnbr9j1vNx>sY+vdAJ8uubMXeDbyRc6kFF|>~u|OZj zaDk@vWeU2dnqA!S{t*bJ3jP$qP4SmjQPFS7z zEwmFkdZO9Uca~iyns)qlzV0mFUry8jp_*ZNLamYtr1MGo25y2aaN%ELR`z4`6WyV2 z-d}s3uu3kM*pf*mh$IJbg;tIHW+sPv^900Al1uJ;vF(81)8W{)xfDl!9t*Nf*#q@`7p%=tyMVuU6@Is`Bl+4K!C2fB z=k`o|viwS@oPf7u^hGkWxuI$Ci#r?O9T};{5A2xn$hnG$0op@yS{trCf`-Gh4=saK zrKsNS4l4k>HwEkZoa#&BiqLNm+TS_7Y@*R4U#+A+wEF0nlOj92W`|3@o)byhpuyku zmeG9Pm93^zy*5e$7ta>=CI4cN9j?+^DgCFnBipZ-?FrbxVh3&gRV7Y^l#f)MD)Ah@g)8+s0k&Vs#E`gATdXvJ3hxZVr|7l3Tdx{vXzT=ATFPTvVacr(AZRM z){tr{Q>Fpw4yPMAnt?yD zWuniEO$Qa{!l3KEiN%VYCe*6u0wldaze14^P-u~zU;_?-7&4af>y~fUq_C(XD)!JMtQr{DWPUvo#W3sSu3t(r z`0iS;CdLTQgi<9$$Q7Pok!~YbAeXbte=N6f*iAQSo$qsdN)x4QKY5%bnrAOJ3nfC1 zK&q7!nNWIs`S<*S@!MQ*5Il>pf~Nx3=S!%1-^s`4dBktp_<7dY_)+q_JjKjoK2!1+ z-#3vd#K)_UjE|P}e#>ogb3<+Ov zK#G9uHUuE)strL%c(fr32?3kWxDT6RkaX+jGwyy<1CmzXl7WPITMCfyWJ??p@@z{% z!hmf#$eQ}^#|WT>Z9d?i6XpNCi+WHf=o1l%@r@R6VGFZLaBU@#%5b&m!DJSXug%>)C^!2ds{_}`~6z)=wleC~3Q zeXs(Qz)32Q|2`H(35Q@(nKFcxx&q!m_1?X>n?45DYXEaf=Z=Kj2r@!zK~ zAkz$ldB_A&hwvdW48RtoVoe0XuzCTa-+u0$crZEE4os&0A5&QcXIVIbFi!|Uct_7| zXz+f*830cUe_jCjyA7Ex5TNZ5KBNt+MJY`_;5LjQ|6k)NaDxE-oH0RTNB=RLBVrg+ zF9=!K9S0>tJ7kfq#Yx;J=LrhlK$T zz7XKT@v~H@#Pc6Kz}y1ClCk^+6!QlI`5}r@J|Tud41!1#dII^-3RDIr6@)=ZD<=dH z)Ge4a8V(_`oj#M~PKjZHBO#>sVd$Xv)92RZg2~%a5b}@HXEkDeo8jjL3p@n=GyElo zQ4A;{4`0us66hk*V)UHxB~f=@cItmAIkOv7do2#(DB1|Hg2p0SAt{&}$a1^|G zw(VDZwu>cTRTqOt+~3pHO+Oe&56ZrI*6WnP-B1UZBP^KX-@v^QNMrJTqks@^ai074 zH!;lF*gs^Y-_Mo(drE+UV*E>V@o)bDlR?UNfy;Y*hmcTa(Enjec1sKsGxHC5{+a~R z*h1SwI76^lg5WM^{)_F|+<(Bh|EeF%BWnplW?n}7hc(|FG0dmsf5^Z)5{MuboY@iX^>7q5u{6`yFt3873Dh~p8xZF zzFgP2W_R|tvoo`E@7_CmGxr?T?r8h00)N(2S{ZB_q$oLiN z|2Om>bUp&lpVr111d}JQ0v~D^Jgo2utppWTu*PG599`ZX9kaED= ze;#^Wz3QwbCg{j~|FOYJN#XbH(b`wP*Q-XaSKECq+^^$p)!;uH+{dG2`#WQU`IK7c zQLv0Q!#_@pnK6f2W2AlL54{^GBE-<)*6Vv4E)gX0ER;Hw4{a%+4vu59>m{0$SUC^M zD-!os{?18`Z+CW0I^D4W<8h-R9?@Zk0qguI>5AT&*lF20K)U6b+-@4N zJd#OpHi^-Y8BeGx(Z@ce%6*GXuoKm_8OKe{cL_!(>l85#r=DZH>z`(#e16U-?}bT^ zzHd0SXH~EDm<4rFhrXg)9=V_6o*!U|ATb(n`$^iK+C_wnLed`JwM1$(_QHJg(B}z? z4~Y$q`CD$1YjXm*9oyQ=pjg7D=cJGCrQF?->JC?>PnD>JcL58uJDlr9W|z)AspCQEy;lXJnUO z=Dz32N|&2g!{AMQnwQtC*dlsQHY|pntpKRlJzv>7#S&tuz_9f$czirx+1?y97tKyE ztNGH-t1N?-Va}V?B97XOiYu!oW0=Mm1A0_e25v#N~jy6um9puXcGwQmVm5xLV7lnTg^EbuA{#q{NlSoojJgxSX94)wqh70xBY%mrynVd13E?+v-`#~h+D|uddacE49)An&zbBqRC zcf`vI^@k1$&wLP;mR^#K68g~0hWT@cFkhbrxyxvsgz^s-#agqzh%)*gF6>-$s=}pe zDw3?9VgI_;Gh*bm4T6xOgaAE z$%#`5oL6r%lZ>rdO$qB75ERdDLlgh?#bKaDIrX%eqQV~6NNCeALL^C>!eS|@;%cD9 zN;OGD7Hx-h<6R1P2ZKwWmps3>UMn|a<6ZWsb)@msQFM2xhT0T;_h|BDzmG@25!Nn} z;8*eqX0LO*dGg5(Pt_QOx#DPR+fun9roczb zJ|WiIg@nd=S|5{#jKoG*KZrde;g4=4i2kO{ihd-{FL!7HMiZAXa8pLjjv4rkG16AH z&r~w4;i%la%_f>J@;z4hhZ`fYx#7AbmiJ+}b?{xOpwFfuyRyhY+t=jG*-^Ik1dY55 zC(FGm4TCqBY-I7344Ou&a!kmDizjb{7=*~n{jHjen%J>(IC}LV1SNWL<@h!^`V)

wCoD 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