nix-archive-1(type directoryentry(nameetcnode(type directoryentry(name common-lispnode(type directoryentry(nameasdf-output-translations.conf.dnode(type directoryentry(name50-alexandria.confnode(typesymlinktarget/gnu/store/zl1sy0q1xr32qcjl9yjxx1k0fj4dz4gy-sbcl-cl-ansi-text-2.0.1-1.8b129d8/etc/common-lisp/asdf-output-translations.conf.d/50-alexandria.conf))entry(name50-cl-ansi-text.confnode(typesymlinktarget/gnu/store/zl1sy0q1xr32qcjl9yjxx1k0fj4dz4gy-sbcl-cl-ansi-text-2.0.1-1.8b129d8/etc/common-lisp/asdf-output-translations.conf.d/50-cl-ansi-text.conf))entry(name50-cl-colors2.confnode(typesymlinktarget/gnu/store/zl1sy0q1xr32qcjl9yjxx1k0fj4dz4gy-sbcl-cl-ansi-text-2.0.1-1.8b129d8/etc/common-lisp/asdf-output-translations.conf.d/50-cl-colors2.conf))entry(name50-cl-ppcre.confnode(typesymlinktarget/gnu/store/zl1sy0q1xr32qcjl9yjxx1k0fj4dz4gy-sbcl-cl-ansi-text-2.0.1-1.8b129d8/etc/common-lisp/asdf-output-translations.conf.d/50-cl-ppcre.conf))entry(name50-clunit2.confnode(typesymlinktarget/gnu/store/zl1sy0q1xr32qcjl9yjxx1k0fj4dz4gy-sbcl-cl-ansi-text-2.0.1-1.8b129d8/etc/common-lisp/asdf-output-translations.conf.d/50-clunit2.conf))entry(name50-fiveam.confnode(typesymlinktarget/gnu/store/zl1sy0q1xr32qcjl9yjxx1k0fj4dz4gy-sbcl-cl-ansi-text-2.0.1-1.8b129d8/etc/common-lisp/asdf-output-translations.conf.d/50-fiveam.conf))entry(name50-flexi-streams.confnode(typesymlinktarget/gnu/store/zl1sy0q1xr32qcjl9yjxx1k0fj4dz4gy-sbcl-cl-ansi-text-2.0.1-1.8b129d8/etc/common-lisp/asdf-output-translations.conf.d/50-flexi-streams.conf))entry(name50-format-colors.confnode(typeregularcontents(("/gnu/store/00f7jrlq1zz2zadvmn7nr47idl679930-sbcl-format-colors-0.1-0.fecb1d8/share/common-lisp/sbcl/format-colors" :**/ :*.*.*) ("/gnu/store/00f7jrlq1zz2zadvmn7nr47idl679930-sbcl-format-colors-0.1-0.fecb1d8/lib/common-lisp/sbcl/format-colors" :**/ :*.*.*)) ))entry(name 50-lift.confnode(typesymlinktarget/gnu/store/zl1sy0q1xr32qcjl9yjxx1k0fj4dz4gy-sbcl-cl-ansi-text-2.0.1-1.8b129d8/etc/common-lisp/asdf-output-translations.conf.d/50-lift.conf))entry(name 50-net.didierverna.asdf-flv.confnode(typesymlinktarget/gnu/store/zl1sy0q1xr32qcjl9yjxx1k0fj4dz4gy-sbcl-cl-ansi-text-2.0.1-1.8b129d8/etc/common-lisp/asdf-output-translations.conf.d/50-net.didierverna.asdf-flv.conf))entry(name50-parse-number.confnode(typesymlinktarget/gnu/store/zl1sy0q1xr32qcjl9yjxx1k0fj4dz4gy-sbcl-cl-ansi-text-2.0.1-1.8b129d8/etc/common-lisp/asdf-output-translations.conf.d/50-parse-number.conf))entry(name 50-rt.confnode(typesymlinktarget/gnu/store/zl1sy0q1xr32qcjl9yjxx1k0fj4dz4gy-sbcl-cl-ansi-text-2.0.1-1.8b129d8/etc/common-lisp/asdf-output-translations.conf.d/50-rt.conf))entry(name50-trivial-backtrace.confnode(typesymlinktarget/gnu/store/zl1sy0q1xr32qcjl9yjxx1k0fj4dz4gy-sbcl-cl-ansi-text-2.0.1-1.8b129d8/etc/common-lisp/asdf-output-translations.conf.d/50-trivial-backtrace.conf))entry(name50-trivial-gray-streams.confnode(typesymlinktarget/gnu/store/zl1sy0q1xr32qcjl9yjxx1k0fj4dz4gy-sbcl-cl-ansi-text-2.0.1-1.8b129d8/etc/common-lisp/asdf-output-translations.conf.d/50-trivial-gray-streams.conf))))entry(namesource-registry.conf.dnode(type directoryentry(name50-alexandria.confnode(typesymlinktarget/gnu/store/zl1sy0q1xr32qcjl9yjxx1k0fj4dz4gy-sbcl-cl-ansi-text-2.0.1-1.8b129d8/etc/common-lisp/source-registry.conf.d/50-alexandria.conf))entry(name50-cl-ansi-text.confnode(typesymlinktarget/gnu/store/zl1sy0q1xr32qcjl9yjxx1k0fj4dz4gy-sbcl-cl-ansi-text-2.0.1-1.8b129d8/etc/common-lisp/source-registry.conf.d/50-cl-ansi-text.conf))entry(name50-cl-colors2.confnode(typesymlinktarget/gnu/store/zl1sy0q1xr32qcjl9yjxx1k0fj4dz4gy-sbcl-cl-ansi-text-2.0.1-1.8b129d8/etc/common-lisp/source-registry.conf.d/50-cl-colors2.conf))entry(name50-cl-ppcre.confnode(typesymlinktarget/gnu/store/zl1sy0q1xr32qcjl9yjxx1k0fj4dz4gy-sbcl-cl-ansi-text-2.0.1-1.8b129d8/etc/common-lisp/source-registry.conf.d/50-cl-ppcre.conf))entry(name50-clunit2.confnode(typesymlinktarget/gnu/store/zl1sy0q1xr32qcjl9yjxx1k0fj4dz4gy-sbcl-cl-ansi-text-2.0.1-1.8b129d8/etc/common-lisp/source-registry.conf.d/50-clunit2.conf))entry(name50-fiveam.confnode(typesymlinktarget/gnu/store/zl1sy0q1xr32qcjl9yjxx1k0fj4dz4gy-sbcl-cl-ansi-text-2.0.1-1.8b129d8/etc/common-lisp/source-registry.conf.d/50-fiveam.conf))entry(name50-flexi-streams.confnode(typesymlinktarget/gnu/store/zl1sy0q1xr32qcjl9yjxx1k0fj4dz4gy-sbcl-cl-ansi-text-2.0.1-1.8b129d8/etc/common-lisp/source-registry.conf.d/50-flexi-streams.conf))entry(name50-format-colors.confnode(typeregularcontents}(:tree "/gnu/store/00f7jrlq1zz2zadvmn7nr47idl679930-sbcl-format-colors-0.1-0.fecb1d8/share/common-lisp/sbcl/format-colors") ))entry(name 50-lift.confnode(typesymlinktarget/gnu/store/zl1sy0q1xr32qcjl9yjxx1k0fj4dz4gy-sbcl-cl-ansi-text-2.0.1-1.8b129d8/etc/common-lisp/source-registry.conf.d/50-lift.conf))entry(name 50-net.didierverna.asdf-flv.confnode(typesymlinktarget/gnu/store/zl1sy0q1xr32qcjl9yjxx1k0fj4dz4gy-sbcl-cl-ansi-text-2.0.1-1.8b129d8/etc/common-lisp/source-registry.conf.d/50-net.didierverna.asdf-flv.conf))entry(name50-parse-number.confnode(typesymlinktarget/gnu/store/zl1sy0q1xr32qcjl9yjxx1k0fj4dz4gy-sbcl-cl-ansi-text-2.0.1-1.8b129d8/etc/common-lisp/source-registry.conf.d/50-parse-number.conf))entry(name 50-rt.confnode(typesymlinktarget/gnu/store/zl1sy0q1xr32qcjl9yjxx1k0fj4dz4gy-sbcl-cl-ansi-text-2.0.1-1.8b129d8/etc/common-lisp/source-registry.conf.d/50-rt.conf))entry(name50-trivial-backtrace.confnode(typesymlinktarget/gnu/store/zl1sy0q1xr32qcjl9yjxx1k0fj4dz4gy-sbcl-cl-ansi-text-2.0.1-1.8b129d8/etc/common-lisp/source-registry.conf.d/50-trivial-backtrace.conf))entry(name50-trivial-gray-streams.confnode(typesymlinktarget/gnu/store/zl1sy0q1xr32qcjl9yjxx1k0fj4dz4gy-sbcl-cl-ansi-text-2.0.1-1.8b129d8/etc/common-lisp/source-registry.conf.d/50-trivial-gray-streams.conf))))))))entry(namelibnode(type directoryentry(name common-lispnode(type directoryentry(namesbclnode(type directoryentry(name format-colorsnode(type directoryentry(nameformat-colors.faslnode(typeregularcontents1#!/gnu/store/bwigrpmr80rvy8lnnn8a2p4xpzp71ki6-sbcl-2.4.10/bin/sbcl --script # FASL compiled from "/gnu/store/00f7jrlq1zz2zadvmn7nr47idl679930-sbcl-format-colors-0.1-0.fecb1d8/share/common-lisp/sbcl/format-colors/format-colors.lisp" using SBCL version 2.4.10 ARMN2.4.10(GENCGC SB-UNICODE)d/gnu/store/00f7jrlq1zz2zadvmn7nr47idl679930-sbcl-format-colors-0.1-0.fecb1d8/share/common-lisp/sbcl/format-colors/format-colors.lisp$~|SSB-IMPLT%DEFPACKAGEd FORMAT-COLORSdCLdBLUEdREDdYELLOWdGREENdCYANdBLACKdMAGENTAdWHITE"k0dtop level formSCOMMON-LISP-USER+ OG(ElF$\SSB-INTTSFUNCTIONM NULL%m0 %: Opp'SN@=D=d4@=D  000 00$0(,000 04B0O@@$SN=t  =(B$8T=FIND-UNDELETED-PACKAGE-OR-LOSEM*PACKAGE*S FORMAT-COLORS"+ OG(E,F$%0 %: Opp'SN@=D=$= 0BO@@$SN=t  =(B$&'8SSB-EXTT!(MAKE-WEAK-VECTORd CL-ANSI-TEXT"+ O (,$M CONS%0 % : Opp'SN@=D=$= 0BO@@$SN=t0 3/pP3 @0坤tW7/ =(B@-S0/@ 017S SB-KERNELT3SEQUENCEPT)3%MAP-TO-LIST-ARITY-1M INTERNS SB-FORMATT17PRINC-MULTIPLE-TO-STRINGTFIND-SYMBOL2N MACROT-"DEFINE-FORMAT-CONTROLSMDEFMACROS CL-ANSI-TEXTT?+TERM-COLORS+M PROGNdPrint the argument in e . Use with ~/d/.T"ARGN EFFECTT "EFFECTN STYLET "STYLEM FORMATM STREAMe~aMLETGM CONDT"AT-SIGN-PN BRIGHTT"COLON-PN ITALICN UNSETIOT "PARAMSNBACKGROUNDNFOREGROUNDM PRINTZM DEFUNLESPM &RESTcMDECLAREMIGNORABLESPcB2MMACRO-FUNCTION;"+O$g0B , O EXPR'g4< T , D0$'$ O COLOR'$ 0 \ L (M LAMBDAT "COLORNINl-+# a<&0v*z1$@MSYMBOL-NAMEMFIND-SYMBOL6MMAP\s-%0p| r| l|%6 : Opp'SN\;`=d`V^=`=d 0 0呆 B>O``&SN=t!NQ =`=d 0 BVO``&SN=t  P* ]=`=d 0 BlO``&SN=t %3/pP3 @ 坤tW7/ =(BK: Opp'SN`=d P `V`P&V _ =`=d0 BO``&SN=t=`=d)- 0 01000 BO``&SN=t a=`=d0 BO``&SN=t 53/pP{3 @ 坤tW7/ 90= A3/p Pm3 @0  ``坤tW7/ E0I M3/p PU3 @0  ``坤tW7/ Q0U Y3/p0P=3 0@0`` `` ``坤tW7/ =(B1 @-S0/@@-S0/@ @-S0/@ @-S0/@0@-S0/@D ~~~bT ?BLACKV[FH]TQBd fmt$5NETC0"+(/`440pi ks~\YQ*uMIK_OSp_`eY0;iuTVML1QE*jviC7,. 4H8{G3iD\)С[P| {~v5 &Rs&LB"nŧJDeDA{ nNb&Gf$?uLJN "=T "BLACKLT7FORMAT-ARG1eT 7ARGSesfd/Print the argument in BLACK. Use with ~/BLACK/.MORM STRING+ )-Bp bSSB-CT%REST-TRUE\%0%: Opp'SN\:$`=d  00=`=d& B,O``&SN=t 0  =(B:< Opp'SN\u:$p\=p=t W' 0L= @ `Y  3/pQ[3 A `Y坤tW7/0  P> P9  P3 =`=d 0 BO``&SN=t =`=d 0 0 0 BO``&SN=t -q6 !% ) 11@-S1/@@  bT?REDV[FH]TQB"T"REDfd+Print the argument in RED. Use with ~/RED/.b\%0%: Opp'SN\:$`=d  00=`=d& B,O``&SN=t 0  =(B:< Opp'SN\u:$p\=p=t W' 0L= @ `Y  3/pQ[3 A `Y坤tW7/0  P> P9  P3 =`=d 0 BO``&SN=t =`=d 0 0 0 BO``&SN=t -q6 !% ) 11@-S1/@@  bT ?GREENV[FH]TQB"T "GREENfd/Print the argument in GREEN. Use with ~/GREEN/.b\%0%: Opp'SN\:$`=d  00=`=d& B,O``&SN=t 0  =(B:< Opp'SN\u:$p\=p=t W' 0L= @ `Y  3/pQ[3 A `Y坤tW7/0  P> P9  P3 =`=d 0 BO``&SN=t =`=d 0 0 0 BO``&SN=t -q6 !% ) 11@-S1/@@  bT ?YELLOWV[FH]TQB"T "YELLOWfd1Print the argument in YELLOW. Use with ~/YELLOW/.b\%0%: Opp'SN\:$`=d  00=`=d& B,O``&SN=t 0  =(B:< Opp'SN\u:$p\=p=t W' 0L= @ `Y  3/pQ[3 A `Y坤tW7/0  P> P9  P3 =`=d 0 BO``&SN=t =`=d 0 0 0 BO``&SN=t -q6 !% ) 11@-S1/@@  bT ?BLUEV[FH]TQB"+(/`450piVʧs~\YQ*uMIǥ/)p_ddoS)0VTJRi5 +V2DŽ+i%*ۧݰ2|4Hρ8G4iD`:tk3V(Bի~{=ps5ZcIQ3r(iWm6"TE2^s Lv`T=w{ Xc nNb&Gf?Q})A'T "BLUEfd-Print the argument in BLUE. Use with ~/BLUE/.b\%0%: Opp'SN\:$`=d  00=`=d& B,O``&SN=t 0  =(B:< Opp'SN\u:$p\=p=t W' 0L= @ `Y  3/pQ[3 A `Y坤tW7/0  P> P9  P3 =`=d 0 BO``&SN=t =`=d 0 0 0 BO``&SN=t -q6 !% ) 11@-S1/@@  bT?MAGENTAV[FH]TQB"T"MAGENTAfd3Print the argument in MAGENTA. Use with ~/MAGENTA/.b\%0%: Opp'SN\:$`=d  00=`=d& B,O``&SN=t 0  =(B:< Opp'SN\u:$p\=p=t W' 0L= @ `Y  3/pQ[3 A `Y坤tW7/0  P> P9  P3 =`=d 0 BO``&SN=t =`=d 0 0 0 BO``&SN=t -q6 !% ) 11@-S1/@@  bT ?CYANV[FH]TQB"T "CYANfd-Print the argument in CYAN. Use with ~/CYAN/.b\%0%: Opp'SN\:$`=d  00=`=d& B,O``&SN=t 0  =(B:< Opp'SN\u:$p\=p=t W' 0L= @ `Y  3/pQ[3 A `Y坤tW7/0  P> P9  P3 =`=d 0 BO``&SN=t =`=d 0 0 0 BO``&SN=t -q6 !% ) 11@-S1/@@  bT ?WHITEV[FH]TQB"T "WHITEfd/Print the argument in WHITE. Use with ~/WHITE/.b\%0%: Opp'SN\:$`=d  00=`=d& B,O``&SN=t 0  =(B:< Opp'SN\u:$p\=p=t W' 0L= @ `Y  3/pQ[3 A `Y坤tW7/0  P> P9  P3 =`=d 0 BO``&SN=t =`=d 0 0 0 BO``&SN=t -q6 !% ) 11@-S1/@@  T%DEFMACROT %DEFUN;"0"+(B(/ B G9G(E4FEDF $*a%0 %2: Opp'SN@=D9=d @=D 0 B2O@@$SN=t==d@=D 0BFO@@$SN=tA=d@=D 0BZO@@$SN=tE=d@=D! 0BnO@@$SN=tI=d@=D% 0BO@@$SN=tM=d@=D) 0BO@@$SN=tQ=d@=D- 0BO@@$SN=tU=d@=D1 0BO@@$SN=tY=d@=D5 0BO@@$SN=t  =(B$8+n0}/%@))))))))))entry(namesharenode(type directoryentry(name common-lispnode(type directoryentry(namesbclnode(type directoryentry(name format-colorsnode(type directoryentry(name README.mdnode(typeregularcontents Simple `format` directives to print in colors: On [Ultralisp](https://ultralisp.org/). ~~~lisp (format t "Hello ~/cyan/, are you a ~/green/ or ~/red/?" "you" "lisper" "not") ~~~ => ![](formatcolor.png) Instead of (with `cl-ansi-text`): ~~~lisp (use-package :cl-ansi-text) (format t "Hello ~a, are you a ~a or ~a?" (cyan "you") (green "lisper") (red "not")) ;; or ;; (format t "Hello ~a, are you a ~a or ~a?" (cl-ansi-text:cyan "you") (cl-ansi-text:green "lisper") (cl-ansi-text:red "not")) ~~~ **Bold and italic modifiers** Like all format directives, these can accept the `:` and `@` modifiers. `:` will be for `:`talic and `@` for b`@`ld. "~:/blue/" "~@/blue/" There are also numerical parameters that we don't use. It is possible to call the color functions directly, their signature is `stream arg colon-p at-sign-p &rest params`: ~~~lisp (blue t "hello" nil nil) ~~~ ## Install ~~~lisp (use-package :format-colors) ;; or import from :format-colors the symbols :red :blue :yellow :green :cyan :black :white :magenta. ~~~ That's all. Let's see how it goes. LLGPL --- ps: to enable colors in Slime, one solution is [M-x slime-repl-ansi-on](https://github.com/deadtrickster/slime-repl-ansi-color/) (in MELPA). ``` lisp (with-eval-after-load 'slime-repl (require 'slime-repl-ansi-color)) (add-hook 'slime-repl-mode-hook 'slime-repl-ansi-color-mode) ``` ))entry(nameformat-colors.asdnode(typeregularcontentsg(asdf:defsystem "format-colors" :version "0.1" :author "vindarel" :license "LLGPL" :depends-on (:cl-ansi-text) :components ((:file "format-colors")) :description "Custom format functions for colorful output: use as (format t \"~/blue/\" arg)" ;; :long-description ;; #.(read-file-string ;; (subpathname *load-pathname* "README.md")) ) ))entry(nameformat-colors.lispnode(typeregularcontentsr(defpackage format-colors (:use :cl) (:export :blue :red :yellow :green :cyan :black :magenta :white)) (in-package :format-colors) ;; Here's how a custom format function looks like: ;; (defun red (stream arg colon-p at-sign-p &rest params) ;; (declare (ignorable colon-p at-sign-p params)) ;; (let ((effect (if at-sign-p :bright :unset))) ;; (format stream "~a" (cl-ansi-text:red ;; arg ;; :effect effect)))) (defmacro define-format-controls () `(progn ,@(map 'list (lambda (color) `(defun ,(intern (symbol-name color)) (stream arg colon-p at-sign-p &rest params) ,(format nil "Print the argument in ~a. Use with ~~/~a/." color color) (declare (ignorable colon-p at-sign-p params)) (let ((effect (cond (at-sign-p :bright) (colon-p :italic) (t :unset))) (style (cond (params :background) (t :foreground)))) (print params) (format stream "~a" (,(find-symbol (symbol-name color) 'cl-ansi-text) arg :effect effect :style style))))) cl-ansi-text::+term-colors+))) ;; define them. (define-format-controls) ;; We can probably add features (style) by using colon-p and at-sign-p. ))entry(nameformatcolor.pngnode(typeregularcontents#PNG  IHDROwsBITOtEXtSoftwareShutterc IDATxg|UslOlz$C 5tP"U<P,⣀( :h%BHdӷ}?$I6l|̝s9sgv@zz:~2};KFB!dwjB!Ԩ B!@!V!BXy B撢¢R P`H)Vr1˪--JFgmk oޒ x+/xubr  ]S)Cyc۩Q^G{$s<P6{ױA޷c8 c^'ƻ_Z,3n ɛٙ8xx{e˩Lyq/̞=%o.~ְS^^= '{+֑inWxE lO׿+rs ܊^)u8H\?;UdRLBJ o6oO r;( M+;V\r :YZwфOOzvhKsFV㧕~ӎYߪc;?1]RbYq*մ4Vk-W.[i\fc:d pRW6wt)Wu=~~nwDN;wbW7ѳϟL/o|o/x7jP=+-;W,ݽs˛Ͷo<-Njj'`I?wif$\ŎL ^7wJ_? ]tw0&¨<>mZ?|+-\d<[9en5tʔaM_Sp[+X/򒓿mO2}Qފ]p՞Kb#i.)qjJ,&"C_Y\JS<5q ն] Z[Cې7ۏe',]w<(}Gw5nv_;mq+o;opj;qO219OU]׸QqƎiԂ ;c޼g#}_b2Ŭޗ9}'VJi"yǁSyO_ޓ'ܯJGjoÊ)W!r3DP5Zɛ}ϓmTg}i=+:մYwjge  gh1LŬk֍%+r~UlGڬwFֳʣD"*8vl mzFV\m.ۛ*8绪^ٳ'!wtўs@J; t7^G=("R)lƔ+xZl<]PDHMıe~-/bG *^vzO9z88qQMvKq/o^-Zu讴F*}i*/IJ*fqM8[oO$OsD|< Ɵ u3JKJ2PPVΫܽ]g(knYw1omD+ws GTkwS$5/>z+q O8R٘6se;a|Y'W/zj^Owx>|F}S-Ee]s ZϋP  {AågCRұOJe7O_9o5oGjQUMdQ*e6E0oz$ ~@Mߕ&&I/Yvqd nI`zdSq^UO](-ZTx lc^GT_{T-yER@Ao@WIwCC0aDQn_g3 Ry}%3?yݎ {:11f;,@KZ|0Qhnr]q+uOm+RGYTtvK^߾^#E"hSeCxTgC_h?Q ݂/W)9cJ{k,h^=l-G;>\`(88@g^->۠qync ʺz7CUV/;*~2޷4v~66&`\[9ᇏ'rh0@١OWXZ6֫) uZհ]չS{LJԴO "-+)GQAD,4QߺU G|89fSchPIɐ/7)7H>h#Em]75?6Yj~S1ofe\5l.-ԚG7E֧gVܞ0ftewy|AqkHD2r%֢)rcsl`dY?^F9;R@vCcY99k\mR뻓v]BUq't56QQ6ŭ|Gu%Cǻ؞; !?/*AA̐kWo&7R4ǷǺiJJro; /'I[l rPtr!V7Nvg`5-ZT6':}{߈~V&΢6Ӆao_?g Kr YqTm)iCxĜqimaЌvt0]+ 6~:=_-u~y) o|7xync|‚N&vA_> ne [ Ǩa28|1_,l ]+Sm"Buͳc+_-k;CQܪwgWFn{6vmykqDHN<[GVtKЈg¤8퉸(z,hknbysqȊNŁOY [Hg$ -m>TN*N\Ole]X㖹I<50j@ ydCyz&ZXnM9]>ӟy6Rga^>yk쯾!a̍*eu'=i$m>cuT6ϼz?1s*g!%SO_-ȅNqG~ݕ'W ߬خ_3\%#/)ٿi#\0"4dG/Y> &moxccxcZ̥_~횎~28˗gdQ%e}8xKV==y߇ ?mݣ&|z*οh`s޾wf_dlF8dr(`Q@p;Oz!#B_]3fm]HclWx-jsh+fVC[_u - ޞjD8djq-s$^9L piO^*0ҵcN(O6Xy BoB!@!V!B WښUj4vNY[Pb=mb[A8m2 ^"#9z3Ш/V<:R:~_Z*1"?-G)ϰ"Ɨ9m˃t-cs?nQ6PL&@pe`0KAEa]Z'wْBG=d}{=!(*4a݃gvj׮Ħ&剬ƩGd?A1& | 0(F)SHTZiR mXM LkK) )|n˵2*spֳak1$owk%;3=kS|hCb&Y G^#,D)⁔*'R(H8 =*Z˦a1מ\sNokA2Xﲶژ|iя~v14˰w> U/3Rt k?Ms-M4 >e\mj^XP/ !-f]}yqe܍ݵ,뼇㏟k3KJRx(qnl Eb-o 8(&H;Dα@" fapl(^k@"[9s!M|dWi&;woZI@SCT"HٙuQJҀ4X荫JOs;7AV.\w7@{~uOr:A@D9'3N &ih/f'IJ4aDI@׉*'8wxoLB6y0nMht|k ($` mť;pZ [Tb¸+v6{ĝ 5 ܸ@`g@$㩸LKD#ܽlw-̼:ܒׅ3Xʫ'q/pY9cګ'`&&3D 1X.Q &S?!!սϪ%bB.@󝟏3{O-1]Z|띷fgc!BjB!_OG!V!!B+t݌BaB!<B!@!#cÍ hDM߂fMBIG)*T~l:sPt,}HYq=ǴYwjge)nh?e-e@,U?Cf.fXn,\Rf;fe3 ؕ!CTy( D(i.~#$jLq5y0yHzYJOŶK3~rE&UN)yV*jjQ] 78!z*YGr񴓹0M(*V"uC30e~ED%\{8