From cc46c8779f1ba8c8782609f56b27414f3cdedaf5 Mon Sep 17 00:00:00 2001 From: Sebastian Hugentobler Date: Wed, 8 Nov 2017 11:07:22 +0100 Subject: [PATCH] replace waf with make --- .gitignore | 8 +- Makefile | 89 +++ bin/makebook | 632 ++++++++++++++++++ src/images/title.png | Bin 0 -> 9034 bytes src/kommersbuch.tex | 69 ++ {lib => src}/lyluatex.lua | 13 +- {lib => src}/lyluatex.sty | 2 +- src/song.tex | 22 + src/songs.lua | 30 + src/songs.sty | 19 + src/{scores => songs}/bierlein_rinn.ly | 11 - src/{lyrics => songs}/bierlein_rinn.tex | 0 src/{scores => songs}/ergo_bibamus.ly | 13 +- src/{lyrics => songs}/ergo_bibamus.tex | 0 src/{scores => songs}/gaudeamus_igitur.ly | 11 - src/{lyrics => songs}/gaudeamus_igitur.tex | 0 .../in_jedem_vollen_glase_wein.ly | 11 - .../in_jedem_vollen_glase_wein.tex | 0 src/{scores => songs}/lindenwirtin.ly | 11 - src/{lyrics => songs}/lindenwirtin.tex | 0 src/{scores => songs}/viel_volle_becher.ly | 11 - src/{lyrics => songs}/viel_volle_becher.tex | 0 src/templates/kommersbuch.aux | 1 + src/templates/kommersbuch.fdb_latexmk | 20 + src/templates/kommersbuch.fls | 22 + src/templates/{book.j2 => kommersbuch.j2} | 2 +- src/templates/kommersbuch.log | 182 +++++ waf | 170 ----- wscript | 178 ----- 29 files changed, 1100 insertions(+), 427 deletions(-) create mode 100644 Makefile create mode 100755 bin/makebook create mode 100644 src/images/title.png create mode 100644 src/kommersbuch.tex rename {lib => src}/lyluatex.lua (93%) rename {lib => src}/lyluatex.sty (99%) create mode 100644 src/song.tex create mode 100644 src/songs.lua create mode 100644 src/songs.sty rename src/{scores => songs}/bierlein_rinn.ly (90%) rename src/{lyrics => songs}/bierlein_rinn.tex (100%) rename src/{scores => songs}/ergo_bibamus.ly (88%) rename src/{lyrics => songs}/ergo_bibamus.tex (100%) rename src/{scores => songs}/gaudeamus_igitur.ly (86%) rename src/{lyrics => songs}/gaudeamus_igitur.tex (100%) rename src/{scores => songs}/in_jedem_vollen_glase_wein.ly (86%) rename src/{lyrics => songs}/in_jedem_vollen_glase_wein.tex (100%) rename src/{scores => songs}/lindenwirtin.ly (88%) rename src/{lyrics => songs}/lindenwirtin.tex (100%) rename src/{scores => songs}/viel_volle_becher.ly (88%) rename src/{lyrics => songs}/viel_volle_becher.tex (100%) create mode 100644 src/templates/kommersbuch.aux create mode 100644 src/templates/kommersbuch.fdb_latexmk create mode 100644 src/templates/kommersbuch.fls rename src/templates/{book.j2 => kommersbuch.j2} (97%) create mode 100644 src/templates/kommersbuch.log delete mode 100755 waf delete mode 100644 wscript diff --git a/.gitignore b/.gitignore index d69aabb..f4d8d16 100755 --- a/.gitignore +++ b/.gitignore @@ -2,9 +2,7 @@ .DS_Store *.swp *.lock* -*.waf* -out -pdf -midi -music +.vscode +tmp build +src/tmp_ly diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..111efb3 --- /dev/null +++ b/Makefile @@ -0,0 +1,89 @@ +WORKING_DIR:=$(shell pwd) +BOOKNAME=kommersbuch +SRC_DIR=src +BUILD_DIR=build +TMP_DIR=tmp +SONG_DIR=${SRC_DIR}/songs +BUILD_BOOK_DIR=${BUILD_DIR}/books +TMP_BOOK_DIR=${TMP_DIR}/books +BUILD_SONG_DIR=${BUILD_DIR}/songs +TMP_SONG_DIR=${TMP_DIR}/songs +BUILD_MIDI_DIR=${BUILD_DIR}/midi +TMP_MIDI_DIR=${TMP_DIR}/midi +BUILD_OPUS_DIR=${BUILD_DIR}/opus + +LY_FILES=$(wildcard ${SONG_DIR}/*.ly) +LY_PDFS=$(patsubst %.ly,${BUILD_SONG_DIR}/%.pdf,$(notdir ${LY_FILES})) +LY_TMP_PDFS=$(patsubst %.ly,${TMP_SONG_DIR}/%.pdf,$(notdir ${LY_FILES})) +LY_MIDIS=$(patsubst %.ly,${BUILD_MIDI_DIR}/%.midi,$(notdir ${LY_FILES})) +LY_TMP_MIDIS=$(patsubst %.ly,${TMP_MIDI_DIR}/%.midi,$(notdir ${LY_FILES})) +LY_OPUS=$(patsubst %.ly,${BUILD_OPUS_DIR}/%.opus,$(notdir ${LY_FILES})) + +.PHONY: book songs midi opus clean directories all +.DEFAULT_GOAL := all + +directories: ${BUILD_DIR} ${BUILD_BOOK_DIR} ${TMP_BOOK_DIR} ${BUILD_SONG_DIR} ${BUILD_MIDI_DIR} ${TMP_DIR} ${TMP_SONG_DIR} ${TMP_MIDI_DIR} ${BUILD_OPUS_DIR} + +${BUILD_DIR}: + mkdir -p ${BUILD_DIR} + +${BUILD_BOOK_DIR}: + mkdir -p ${BUILD_BOOK_DIR} + +${BUILD_SONG_DIR}: + mkdir -p ${BUILD_SONG_DIR} + +${BUILD_MIDI_DIR}: + mkdir -p ${BUILD_MIDI_DIR} + +${TMP_DIR}: + mkdir -p ${TMP_DIR} + +${TMP_BOOK_DIR}: + mkdir -p ${TMP_BOOK_DIR} + +${TMP_SONG_DIR}: + mkdir -p ${TMP_SONG_DIR} + +${TMP_MIDI_DIR}: + mkdir -p ${TMP_MIDI_DIR} + +${BUILD_OPUS_DIR}: + mkdir -p ${BUILD_OPUS_DIR} + +${TMP_SONG_DIR}/%.pdf: ${SONG_DIR}/%.ly ${SONG_DIR}/%.tex + cd ${SRC_DIR} && lualatex --jobname='$(notdir $(basename $@))' --output-directory=${WORKING_DIR}/${TMP_SONG_DIR} --shell-escape ${WORKING_DIR}/${SRC_DIR}/song.tex ${WORKING_DIR}/${SONG_DIR}/$(notdir $(basename $@)).ly ${WORKING_DIR}/${SONG_DIR}/$(notdir $(basename $@)).tex + +${BUILD_MIDI_DIR}/%.midi: ${TMP_MIDI_DIR}/%-1.midi + cp $< $@ + +${TMP_MIDI_DIR}/%-1.midi: ${SONG_DIR}/%.ly + lilypond --output=${TMP_MIDI_DIR} $< + +${BUILD_OPUS_DIR}/%.opus: ${BUILD_MIDI_DIR}/%.midi + timidity $< -Ow -o - | opusenc - $@ + +${TMP_BOOK_DIR}/%.pdf: ${SRC_DIR}/%.tex ${SRC_DIR}/images/title.png + latexmk -cd -lualatex -e '$$lualatex=q/lualatex %O -shell-escape %S/' -output-directory=${WORKING_DIR}/${TMP_BOOK_DIR} $< + +#short edge binding +${TMP_BOOK_DIR}/%-octavo.pdf: ${TMP_BOOK_DIR}/%.pdf + cd ${TMP_BOOK_DIR} && \ + ../../bin/makebook -v -t octavo -i $(notdir $<) -o $(notdir $@) + +${TMP_BOOK_DIR}/%-folio.pdf: ${TMP_BOOK_DIR}/%.pdf + cd ${TMP_BOOK_DIR} && \ + ../../bin/makebook -v -t folio -i $(notdir $<) -o $(notdir $@) + +${BUILD_DIR}/%.pdf: ${TMP_DIR}/%.pdf + cp $< $@ + +book: directories ${BUILD_BOOK_DIR}/${BOOKNAME}.pdf ${BUILD_BOOK_DIR}/${BOOKNAME}-folio.pdf ${BUILD_BOOK_DIR}/${BOOKNAME}-octavo.pdf +songs: directories ${LY_PDFS} +midi: directories ${LY_MIDIS} +opus: directories ${LY_OPUS} +all: book songs midi opus + +clean: + rm -rf ${BUILD_DIR} + rm -rf ${TMP_DIR} diff --git a/bin/makebook b/bin/makebook new file mode 100755 index 0000000..262f500 --- /dev/null +++ b/bin/makebook @@ -0,0 +1,632 @@ +#!/bin/sh +# +AMDG This document was begun just before Christmas, +# 2010, and it is humbly dedicated to St. Wulfric, patron of +# bookbinders, and to the Immaculate Heart of Mary for their +# prayers, and to the Sacred Heart of Jesus for His mercy. +# +#**********************************************************# +# makebook # +# written by Donald P. Goodman III # +# Copyright (C) 2011 # +# # +# Impose pdf pages for binding # +#**********************************************************# +# +# This program is free software: you can redistribute it +# and/or modify it under the terms of the GNU General Public +# License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any +# later version. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more +# details. +# +# For a full copy of the GNU General Public License, see +# . +# +#**********************************************************# +# begin the code # +#**********************************************************# +umask 033 +# define our revision number variable for rcs +REVISION="2.0" +# define error codes +E_WRONG_ARGS=64 # too many or few args +E_BAD_SIG_TYPE=65 # invalid type of signature +E_BAD_UNIT=66 # unrecognized dimension unit used +E_BAD_FILENAME=67 # filename contains insecure chars, + # or doesn't exist +E_BAD_OPT=68 # bad command-line flag requested +E_NO_PROG=69 # missing a required program +# define usage variables +VERBOSE=0 # 0 if not verbose, 1 if -v +SIG_TYPE="folio" # type of section desired +PAGES_PER_SIG=4 # number of pages per signature +SECT_TYPE=1 # number of signatures per section +NUP="2x1" # default format of signatures +FRONT_FAVOR=0 # favor front for blanks; off by default +# define various variables to be zero by default +TGT_PAGE_WIDTH=0 +TGT_PAGE_HEIGHT=0 +HORIZ_DELTA=0 +VERT_DELTA=0 +HORIZ_OFFSET=0 +VERT_OFFSET=0 +SCALE=1 +# make sure user has the right programs installed, and die +# horribly if not +command -v od >/dev/null 2>&1 || + { echo >&2 "makebook: error: requires od, but it's not installed"; + exit $E_NO_PROG; + } +command -v pdflatex >/dev/null 2>&1 || + { echo >&2 "makebook: error: requires pdflatex, but it's not installed"; + exit $E_NO_PROG; + } +command -v pdfinfo >/dev/null 2>&1 || + { echo >&2 "makebook: error: requires pdfinfo, but it's not installed"; + exit $E_NO_PROG; + } +command -v pdftk >/dev/null 2>&1 || + { echo >&2 "makebook: error: requires pdftk, but it's not installed"; + exit $E_NO_PROG; + } + +# print the version information and exit successfully +versionfunc () +{ + echo "makebook v${REVISION}. Copyright (C) 2011, Donald P." + echo "Goodman III." + echo "This program comes with ABSOLUTELY NO WARRANTY." + echo "This is free software, and you are welcome to " + echo "redistribute it under certain conditions; see " + echo "the GNU GPL v3 for details." + exit 0 +} + +# print the online help and exit successfully +helpfunc () +{ +cat <&2 + exit $E_BAD_UNIT + fi + if [ `expr match "$1" '.*\(in\)'` ] + then + OPTARG=`echo "scale=0; ${1%in} * 72" | bc` + OPTARG=${OPTARG%.*} + elif [ `expr match "$1" '.*\(cm\)'` ] + then + OPTARG=`echo "scale=0; ${1%cm} * 28.3464567" | bc` + OPTARG=${OPTARG%.*} + elif [ `expr match "$1" '.*\(pt\)'` ] + then + OPTARG=`echo "scale=0; ${1%pt} / 1.00375" | bc` + OPTARG=${OPTARG%.*} + elif [ `expr match "$1" '.*\(pc\)'` ] + then + OPTARG=`echo "scale=0; (${1%pc} / 1.00375) * 12" | bc` + OPTARG=${OPTARG%.*} + elif [ `expr match "$1" '.*\(bp\)'` ] + then + OPTARG=${1%bp} + else + OPTARG=${1%.*} + fi +} +# define a for dealing with section types; convert () +# to words; e.g., "4to" to "quarto" +typearg () +{ + if [ "$1" = "4to" ] || [ "$1" = "quarto" ] + then + PAGES_PER_SIG=8 + NUP="2x2" + OPTARG="quarto" + elif [ "$1" = "2o" ] || [ "$1" = "folio" ] + then + PAGES_PER_SIG=4 + NUP="2x1" + OPTARG="folio" + elif [ "$1" = "8vo" ] || [ "$1" = "octavo" ] + then + PAGES_PER_SIG=16 + NUP="4x2" + OPTARG="octavo" + elif [ "$1" = "6to" ] || [ "$1" = "sexto" ] + then + PAGES_PER_SIG=12 + NUP="2x3" + OPTARG="sexto" + elif [ "$1" = "12mo" ] || [ "$1" = "duodecimo" ] + then + PAGES_PER_SIG=24 + NUP="4x3" + OPTARG="duodecimo" + else + echo "ERROR: signature type \"$1\" not recognized." >&2 + exit $E_BAD_SIG_TYPE + fi +} + +# clean up filename argument +filefunc () +{ + err_message="ERROR: bad characters in file name." + if [ `echo "$1" | grep '\?'` ] + then + echo "$err_message" >&2 + exit $E_BAD_FILENAME + elif [ `echo "$1" | grep '\*'` ] + then + echo "$err_message" >&2 + exit $E_BAD_FILENAME + elif [ `echo "$1" | grep '"'` ] + then + echo "$err_message" >&2 + exit $E_BAD_FILENAME + elif [ `echo "$1" | grep ';'` ] + then + echo "$err_message" >&2 + exit $E_BAD_FILENAME + elif [ `echo "$1" | grep '[\\]'` ] + then + echo "$err_message" >&2 + exit $E_BAD_FILENAME + elif [ `echo "$1" | grep ' '` ] + then + echo "$err_message" >&2 + exit $E_BAD_FILENAME + fi + OPTARG=`basename $1` +} + +# now identify and parse the options +while getopts "Vhvfn:t:H:w:d:D:m:M:s:i:o:" Option +do + case $Option in + V ) versionfunc;; + h ) helpfunc;; + v ) VERBOSE=1;; + f ) FRONT_FAVOR=1;; + n ) SECT_TYPE=$OPTARG;; + t ) typearg "$OPTARG"; SIG_TYPE=$OPTARG;; + H ) unitarg "$OPTARG"; TGT_PAGE_HEIGHT=$OPTARG;; + w ) unitarg "$OPTARG"; TGT_PAGE_WIDTH=$OPTARG;; + d ) unitarg "$OPTARG"; HORIZ_DELTA=$OPTARG;; + D ) unitarg "$OPTARG"; VERT_DELTA=$OPTARG;; + m ) unitarg "$OPTARG"; HORIZ_OFFSET=$OPTARG;; + M ) unitarg "$OPTARG"; VERT_OFFSET=$OPTARG;; + s ) SCALE=$OPTARG;; + i ) filefunc "$OPTARG"; FILE_NAME=$OPTARG;; + o ) filefunc "$OPTARG"; OUTFILE_NAME=$OPTARG;; + * ) echo "ERROR: unknown flag \ + \"$Option\"." >&2; exit $E_BAD_OPT;; + esac +done + +# make random file name to use for input +NEW_FILE_NAME="tmp_`od -An -N4 -t uL /dev/urandom | tr -d '\ '`.pdf" +# if input file specified, use file; if not, read stdin +if [ "$FILE_NAME" ] +then + cp "$FILE_NAME" "$NEW_FILE_NAME" +else + FILE_NAME="book.pdf" + cat /dev/stdin > "$NEW_FILE_NAME" +fi +# declare holder variable for pdftk +tmp_name="tmp_`od -An -N4 -t uL /dev/urandom | tr -d '\ '`.pdf" +# if output file specified, use that; if not, name it; if +# "-", use stdout +[ "$OUTFILE_NAME" ] || OUTFILE_NAME="sigs_$FILE_NAME" +if [ "$OUTFILE_NAME" = "stdout" ] +then + VERBOSE=0 +fi +# print our introduction message +if [ $VERBOSE -eq 1 ] +then + echo "makebook. Copyright (C) 2011, Donald P. Goodman III." + echo "This program comes with ABSOLUTELY NO WARRANTY." + echo "This is free software, and you are welcome to " + echo "redistribute it under certain conditions; see " + echo "the GNU GPL v3 for details." + echo "IMPOSING pdf pages onto \"$OUTFILE_NAME\"..." +fi + +# get some information about our source document +NUM_PAGES=`pdfinfo "$NEW_FILE_NAME" | awk '/Pages:/ {print $2}'`; +SRC_PAGE_WIDTH=`pdfinfo "$NEW_FILE_NAME" | awk '/Page\ size:/ {print $3}'`; +SRC_PAGE_HEIGHT=`pdfinfo "$NEW_FILE_NAME" | awk '/Page\ size:/ {print $5}'`; +# find the number of pages we'll have per signature +PAGES_PER_SIG=$(($PAGES_PER_SIG * $SECT_TYPE)) +# determine if extra pages will be necessary +NUM_BLANKS=`expr $NUM_PAGES % $PAGES_PER_SIG` +if [ $NUM_BLANKS -ne 0 ] +then + NUM_BLANKS=`expr $PAGES_PER_SIG - $NUM_BLANKS` +fi +tmp=`expr $NUM_PAGES + $NUM_BLANKS` +NUM_SIGS=`expr $tmp / $PAGES_PER_SIG` + +# if extra pages are needed, generate blank page +if [ $NUM_BLANKS -gt 0 ] && [ ! -e "./blank.pdf" ] +then + echo "\documentclass{article}" > blank.tex + echo '\\thispagestyle{empty}' >> blank.tex + echo "\usepackage[paperwidth=${SRC_PAGE_WIDTH}bp,paperheight="${SRC_PAGE_HEIGHT}bp"]{geometry}" >> blank.tex +echo '\\begin{document}' >> blank.tex +echo "\quad \end{document}" >> blank.tex + if [ $VERBOSE -eq 1 ] + then + echo "CREATING blank page to fill sections..."; + fi + pdflatex blank.tex > /dev/null 2&>1 + rm blank.aux blank.log blank.tex +fi +# now insert blank pages as needed, preferring the back for +# odd numbers by default, front if stated +if [ $NUM_BLANKS -eq 1 ] +then + if [ $VERBOSE -eq 1 ] + then + echo "INSERTING one blank page..." + fi + if [ $FRONT_FAVOR -eq 0 ] + then + pdftk A="$NEW_FILE_NAME" B=blank.pdf cat A1-end \ + B1 output "$tmp_name" + else + pdftk A="$NEW_FILE_NAME" B=blank.pdf cat B1 \ + A1-end output "$tmp_name" + fi + mv "$tmp_name" "$NEW_FILE_NAME" +else +# tmp=`expr $NUM_BLANKS / 2` +# START_BLANKS=${tmp/.*} + START_BLANKS=`expr $NUM_BLANKS / 2` + END_BLANKS=`expr $NUM_BLANKS - $START_BLANKS` + if [ `expr $START_BLANKS % 2` -ne 0 ]; then : else + START_BLANKS=`expr $START_BLANKS - 1` + END_BLANKS=`expr $END_BLANKS + 1 ` + fi + if [ $FRONT_FAVOR -eq 1 ] + then + tmp=$START_BLANKS + START_BLANKS=$END_BLANKS + END_BLANKS=$tmp + if [ `expr $START_BLANKS % 2` -ne 0 ]; then : else + START_BLANKS=`expr $START_BLANKS - 1` + END_BLANKS=`expr $END_BLANKS + 1 ` + fi + fi + if [ $VERBOSE -eq 1 ] + then + echo "INSERTING $START_BLANKS blank pages at start..." + echo "INSERTING $END_BLANKS blank pages at end..."; + fi + i=0 + while [ $i -lt $START_BLANKS ] + do + pdftk A="$NEW_FILE_NAME" B=blank.pdf cat B1 A1-end output "$tmp_name" + mv "$tmp_name" "$NEW_FILE_NAME" + i=`expr $i + 1` + done + i=0 + while [ $i -lt $END_BLANKS ] + do + pdftk A="$NEW_FILE_NAME" B=blank.pdf cat A1-end B1 output "$tmp_name" + mv "$tmp_name" "$NEW_FILE_NAME" + i=`expr $i + 1` + done +fi +# begin the imposing, announcing if appropriate +tmp=`expr $NUM_PAGES + $NUM_BLANKS` +if [ $VERBOSE -eq 1 ] +then + echo "IMPOSING $NUM_PAGES pages ($tmp with blanks) on + $(($NUM_SIGS * $SECT_TYPE)) signature(s) gathered in + sections of $SECT_TYPE signature(s) each..."; +fi +# arrange the pages for impression on signatures +i=1 +j=1 +if [ $VERBOSE -eq 1 ] +then + echo "REARRANGING pages..."; +fi +while [ $j -le $NUM_SIGS ] +do + if [ "$SIG_TYPE" = "quarto" ] + then + # determine size of target page + if [ $(echo "$TGT_PAGE_HEIGHT == 0" | bc) -eq 1 ] + then + TGT_PAGE_HEIGHT=$(echo "$SRC_PAGE_HEIGHT * 2" | bc) + fi + if [ $(echo "$TGT_PAGE_WIDTH == 0" | bc) -eq 1 ] + then + TGT_PAGE_WIDTH=$(echo "$SRC_PAGE_WIDTH * 2" | bc) + fi + # do the rearranging + k=$i; n=1; total=$(($SECT_TYPE * 8)); m=$total + while [ $n -le $SECT_TYPE ] + do + pdftk "$NEW_FILE_NAME" cat `expr $k + $m - 1` $k \ + `expr $k + $m - 4`south `expr $k + 3`south \ + `expr $k + 1` `expr $k + $m - 2` `expr $k + 2`south \ + `expr $k + $m - 3`south output ${tmp_name%.pdf}_$n; + k=`expr $k + 4`; n=`expr $n + 1`; m=`expr $m - 8` + done + n=1 + while [ `expr $n + 0` -le $SECT_TYPE ] + do + if [ ! -e "$tmp_name" ] + then + pdftk A=${tmp_name%.pdf}_$n cat A1-end \ + output "$tmp_name" + else + pdftk A=$tmp_name B=${tmp_name%.pdf}_`expr $n` \ + cat A1-end B1-end output ${tmp_name}_tmp + mv ${tmp_name}_tmp "$tmp_name" + fi + n=`expr $n + 1` + done + if [ $VERBOSE -eq 1 ] + then + echo "REARRANGING section number $j..." + fi + j=`expr $j + 1`; + i=`expr $i + $total`; + elif [ "$SIG_TYPE" = "folio" ] + then + # determine size of target page + if [ $(echo "$TGT_PAGE_HEIGHT == 0" | bc) -eq 1 ] + then + TGT_PAGE_HEIGHT=$(echo "$SRC_PAGE_HEIGHT * 1" | bc) + fi + if [ $(echo "$TGT_PAGE_WIDTH == 0" | bc) -eq 1 ] + then + TGT_PAGE_WIDTH=$(echo "$SRC_PAGE_WIDTH * 2" | bc) + fi + # do the rearranging + k=$i; n=1; total=$(($SECT_TYPE * 4)); m=$total + while [ $n -le $SECT_TYPE ] + do + pdftk "$NEW_FILE_NAME" cat `expr $k + $m - 1` \ + `expr $k` `expr $k + 1` `expr $k + $m - 2` \ + output ${tmp_name%.pdf}_$n; + k=`expr $k + 2`; n=`expr $n + 1`; m=`expr $m - 4` + done + n=1 + while [ `expr $n + 0` -le $SECT_TYPE ] + do + if [ ! -e "$tmp_name" ] + then + pdftk A=${tmp_name%.pdf}_$n cat A1-end \ + output "$tmp_name" + else + pdftk A="$tmp_name" B=${tmp_name%.pdf}_`expr $n` \ + cat A1-end B1-end output ${tmp_name}_tmp + mv ${tmp_name}_tmp "$tmp_name" + fi + n=`expr $n + 1` + done + if [ $VERBOSE -eq 1 ] + then + echo "REARRANGING section number $j..." + fi + j=`expr $j + 1`; + i=`expr $i + $total`; + elif [ "$SIG_TYPE" = "octavo" ] + then + # determine target page dimensions + if [ $(echo "$TGT_PAGE_HEIGHT == 0" | bc) -eq 1 ] + then + TGT_PAGE_HEIGHT=$(echo "$SRC_PAGE_HEIGHT * 2" | bc) + fi + if [ $(echo "$TGT_PAGE_WIDTH == 0" | bc) -eq 1 ] + then + TGT_PAGE_WIDTH=$(echo "$SRC_PAGE_WIDTH * 4" | bc) + fi + # do the rearranging + k=$i; n=1; total=$(($SECT_TYPE * 16)); m=$total + while [ $n -le $SECT_TYPE ] + do + pdftk "$NEW_FILE_NAME" cat `expr $k + 3` \ + `expr $k + $m - 4` `expr $k + $m - 1` $k \ + `expr $k + 4`south `expr $k + $m - 5`south \ + `expr $k + $m - 8`south `expr $k + 7`south \ + `expr $k + 1` `expr $k + $m - 2` `expr $k + $m - 3` \ + `expr $k + 2` `expr $k + 6`south `expr $k + $m - 7`south \ + `expr $k + $m - 6`south `expr $k + 5`south \ + output ${tmp_name%.pdf}_$n; + k=`expr $k + 8`; n=`expr $n + 1`; m=`expr $m - 16` + done + n=1 + while [ `expr $n + 0` -le $SECT_TYPE ] + do + if [ ! -e "$tmp_name" ] + then + pdftk A=${tmp_name%.pdf}_$n cat A1-end \ + output "$tmp_name" + else + pdftk A="$tmp_name" B=${tmp_name%.pdf}_`expr $n` \ + cat A1-end B1-end output ${tmp_name}_tmp + mv ${tmp_name}_tmp "$tmp_name" + fi + n=`expr $n + 1` + done + if [ $VERBOSE -eq 1 ] + then + echo "REARRANGING section number $j..." + fi + j=`expr $j + 1`; + i=`expr $i + $total`; + elif [ "$SIG_TYPE" = "sexto" ] + then + # determine target page dimensions + if [ $(echo "$TGT_PAGE_HEIGHT == 0" | bc) -eq 1 ] + then + TGT_PAGE_HEIGHT=$(echo "$SRC_PAGE_HEIGHT * 3" | bc) + fi + if [ $(echo "$TGT_PAGE_WIDTH == 0" | bc) -eq 1 ] + then + TGT_PAGE_WIDTH=$(echo "$SRC_PAGE_WIDTH * 2" | bc) + fi + # do the rearranging + k=$i; n=1; total=$(($SECT_TYPE * 12)); m=$total + while [ $n -le $SECT_TYPE ] + do + pdftk "$NEW_FILE_NAME" cat `expr $k + 5` \ + `expr $k + 6` `expr $k + $m - 1` $k \ + `expr $k + $m - 1 - 3`south `expr $k + 3`south \ + `expr $k + 7` `expr $k + 4` \ + `expr $k + 1` `expr $k + $m - 1 - 1` \ + `expr $k + 2`south `expr $k + $m - 1 - 2`south \ + output ${tmp_name%.pdf}_$n; + k=`expr $k + 6`; n=`expr $n + 1`; m=`expr $m - 12` + done + n=1 + while [ `expr $n + 0` -le $SECT_TYPE ] + do + if [ ! -e "$tmp_name" ] + then + pdftk A=${tmp_name%.pdf}_$n cat A1-end \ + output "$tmp_name" + else + pdftk A=$tmp_name B=${tmp_name%.pdf}_`expr $n` \ + cat A1-end B1-end output ${tmp_name}_tmp + mv ${tmp_name}_tmp "$tmp_name" + fi + n=`expr $n + 1` + done + if [ $VERBOSE -eq 1 ] + then + echo "REARRANGING section number $j..." + fi + j=`expr $j + 1`; + i=`expr $i + $total`; + elif [ "$SIG_TYPE" = "duodecimo" ] + then + # determine target page dimensions + if [ $(echo "$TGT_PAGE_HEIGHT == 0" | bc) -eq 1 ] + then + TGT_PAGE_HEIGHT=$(($SRC_PAGE_HEIGHT * 3)) + fi + if [ $(echo "$TGT_PAGE_WIDTH == 0" | bc) -eq 1 ] + then + TGT_PAGE_WIDTH=$(($SRC_PAGE_WIDTH * 4)) + fi + # do the rearranging + k=$i; n=1; total=$(($SECT_TYPE * 24)); m=$total + while [ $n -le $SECT_TYPE ] + do + pdftk "$NEW_FILE_NAME" cat `expr $k + 8` \ + `expr $k + $m - 1 - 8` `expr $k + 12` \ + `expr $k + 11` `expr $k + 4` \ + `expr $k + $m - 1 - 3` `expr $k + $m - 1` \ + $k `expr $k + 4`south `expr $k + $m - 1 - 4`south \ + `expr $k + $m - 1 - 7`south `expr $k + 7`south \ + `expr $k + 10` `expr $k + 13` `expr $k + 14` \ + `expr $k + 9` `expr $k + 1` `expr $k + $m - 1 - 1` \ + `expr $k + $m - 1 - 2` `expr $k + 2` \ + `expr $k + 6`south `expr $k + $m - 1 - 6`south \ + `expr $k + $m - 1 - 5`south `expr $k + 5`south \ + output ${tmp_name%.pdf}_$n; + k=`expr $k + 12`; n=`expr $n + 1`; m=`expr $m - 24` + done + n=1 + while [ `expr $n + 0` -le $SECT_TYPE ] + do + if [ ! -e "$tmp_name" ] + then + pdftk A=${tmp_name%.pdf}_$n cat A1-end \ + output $tmp_name + else + pdftk A="$tmp_name" B=${tmp_name%.pdf}_`expr $n` \ + cat A1-end B1-end output ${tmp_name}_tmp + mv ${tmp_name}_tmp "$tmp_name" + fi + n=`expr $n + 1` + done + if [ $VERBOSE -eq 1 ] + then + echo "REARRANGING section number $j..." + fi + j=`expr $j + 1`; + i=`expr $i + $total`; + fi +done +mv "$tmp_name" "$NEW_FILE_NAME" +rm ${tmp_name%.pdf}* +echo "\documentclass{article} + \usepackage{pdfpages} + \usepackage[paperwidth=${TGT_PAGE_WIDTH}bp,paperheight=${TGT_PAGE_HEIGHT}bp]{geometry} + \pagestyle{empty}" > ${OUTFILE_NAME%.pdf}.tex +echo '\\begin{document}' >> ${OUTFILE_NAME%.pdf}.tex +echo "\includepdf[nup=$NUP,pages=-,turn=false,columnstrict, + noautoscale,delta=${HORIZ_DELTA}bp ${VERT_DELTA}bp, + offset=${HORIZ_OFFSET}bp ${VERT_OFFSET}bp,scale=${SCALE}] + {./"$NEW_FILE_NAME"}\end{document}" >> ${OUTFILE_NAME%.pdf}.tex +if [ $VERBOSE -eq 1 ] +then + echo "IMPOSING sections..." +fi +pdflatex ${OUTFILE_NAME%.pdf}.tex #> /dev/null 2>&1 +if [ $VERBOSE -eq 1 ] +then + echo "CLEANING up..." +fi +rm ${OUTFILE_NAME%.pdf}.tex ${OUTFILE_NAME%.pdf}.aux \ + ${OUTFILE_NAME%.pdf}.log "$NEW_FILE_NAME" +if [ $VERBOSE -eq 1 ] +then + echo "`expr $NUM_PAGES + $NUM_BLANKS` pages imposed in + $(($NUM_SIGS * $SECT_TYPE)) $SIG_TYPE signatures gathered + in sections of $SECT_TYPE signature(s) each and output to + ${OUTFILE_NAME%.pdf}.pdf." +fi +if [ "$OUTFILE_NAME" = "stdout" ] +then + cat ${OUTFILE_NAME}.pdf + rm ${OUTFILE_NAME}.pdf +fi +exit 0 diff --git a/src/images/title.png b/src/images/title.png new file mode 100644 index 0000000000000000000000000000000000000000..c91680b300e8dfbe71aee3ac77eaad57fb8b2c78 GIT binary patch literal 9034 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 literal 0 HcmV?d00001 diff --git a/src/kommersbuch.tex b/src/kommersbuch.tex new file mode 100644 index 0000000..7691872 --- /dev/null +++ b/src/kommersbuch.tex @@ -0,0 +1,69 @@ +% !Mode:: "TeX:UTF-8" + +\documentclass[9pt, a4paper, openany]{scrbook} + +\usepackage{fontspec} +\usepackage{fancyhdr} +\usepackage{geometry} +\usepackage{tgschola} +\usepackage{tocloft} +\usepackage[unicode]{hyperref} +\usepackage{songs} +\usepackage{lyluatex} + +\makeatletter +\newcommand{\unchapter}[1]{% + \begingroup + \let\@makechapterhead\@gobble % make \@makechapterhead do nothing + \chapter{#1} + \endgroup +} + +\makeatother + +\setlength{\headheight}{15pt} + +\pagestyle{fancy} +\renewcommand{\chaptermark}[1]{ \markboth{#1}{} } +\renewcommand{\sectionmark}[1]{ \markright{#1}{} } + +\fancyhf{} +\fancyhead[LE,RO]{\thepage} +\fancyhead[RE]{\textit{ \nouppercase{\leftmark}} } +\fancyhead[LO]{\textit{ \nouppercase{\rightmark}} } + +\fancypagestyle{plain}{ + \fancyhf{} + \fancyhead[LE,RO]{\thepage} + \fancyhead[RE]{\textit{ \nouppercase{Alcolica}} } + \fancyhead[LO]{\textit{ \nouppercase{Alcolica}} } +} + +\geometry{a5paper,left=20mm,right=20mm, top=3cm, bottom=3cm} + +\renewcommand\addchaptertocentry[2]{\addtocentrydefault{chapter}{}{#2}} +\renewcommand{\contentsname}{Inhalt} +\renewcommand{\cfttoctitlefont}{\huge\textbf\rmfamily} +\renewcommand{\cftchapfont}{\large\rmfamily} + +\begin{document} + \begin{titlepage} + \begin{center} + \includegraphics[width=0.50 \textwidth]{images/title.png}\\ + \rule{\linewidth}{0.5mm} \\[0.4cm] + { \huge \bfseries Alcolica} + + \rule{\linewidth}{0.5mm} \\[1.5cm] + \end{center} + + \end{titlepage} + + \pagenumbering{Roman} + + \tableofcontents + + \newpage + + \songs + +\end{document} diff --git a/lib/lyluatex.lua b/src/lyluatex.lua similarity index 93% rename from lib/lyluatex.lua rename to src/lyluatex.lua index 1cea106..255b25f 100644 --- a/lib/lyluatex.lua +++ b/src/lyluatex.lua @@ -2,17 +2,18 @@ local err, warn, info, log = luatexbase.provides_module({ name = "lyluatex", version = '0', greinternalversion = internalversion, - date = "2016/09/08", + date = "2017/09/30", description = "Module lyluatex.", author = "The Gregorio Project (see CONTRIBUTORS.md)", - copyright = "2008-2016 - The Gregorio Project", + copyright = "2008-2017 - The Gregorio Project", license = "MIT", }) local md5 = require 'md5' + LILYPOND = 'lilypond' -TMP = (os.getenv('TMP_LY') and os.getenv('TMP_LY') or 'tmp_ly') +TMP = 'tmp_ly' N = 0 @@ -42,7 +43,8 @@ end function direct_ly(ly, largeur, facteur) N = N + 1 facteur = calcul_facteur(facteur) - ly = ly:gsub('\\par ', '\n') + ly = ly:gsub('\\par ', '\n'):gsub('\\([^%s]*) %-([^%s])', '\\%1-%2') + print(ly) local sortie = TMP..'/'..string.gsub(md5.sumhexa(contenuIntegral(ly))..'-'..facteur..'-'..largeur, '%.', '-') if not lfs.isfile(sortie..'-systems.tex') then compiler_ly(entete_lilypond(facteur, largeur - 10)..'\n'..ly, sortie) @@ -75,7 +77,7 @@ function compiler_ly(ly, sortie, include) "-dbackend=eps ".. "-djob-count=2 ".. "-ddelete-intermediate-files " - if include then commande = commande.."-I "..lfs.currentdir()..'/'..include.." " end + if include then commande = commande.."-I '"..lfs.currentdir().."/"..include.."' " end commande = commande.."-o "..sortie.." -" local p = io.popen(commande, 'w') p:write(ly) @@ -181,4 +183,5 @@ function fontinfo(id) return font.fonts[id] end + mkdirs(TMP) diff --git a/lib/lyluatex.sty b/src/lyluatex.sty similarity index 99% rename from lib/lyluatex.sty rename to src/lyluatex.sty index 47b715b..2588452 100644 --- a/lib/lyluatex.sty +++ b/src/lyluatex.sty @@ -61,7 +61,7 @@ \newkeyenvironment{ly}[staffsize=\staffsize][autres]{% \def\localstaffsize{\commandkey{staffsize}}% \compilerly% -}{ +}{% \endcompilerly% } diff --git a/src/song.tex b/src/song.tex new file mode 100644 index 0000000..6750759 --- /dev/null +++ b/src/song.tex @@ -0,0 +1,22 @@ +% !Mode:: "TeX:UTF-8" + +\documentclass[fontsize=9pt, a4paper, openany]{article} +\usepackage{fontspec} +\usepackage{lmodern} +\usepackage{tgschola} +\usepackage[unicode]{hyperref} +\usepackage{lyluatex} + +\begin{document} + + \pagenumbering{gobble} + + \directlua{ + tex.sprint("\string\\includely[staffsize=14]{" .. arg[5] .. "}") + } + ~\\ + \directlua{ + tex.sprint("\string\\input{" .. arg[6] .. "}") + } + +\end{document} diff --git a/src/songs.lua b/src/songs.lua new file mode 100644 index 0000000..6fec3b0 --- /dev/null +++ b/src/songs.lua @@ -0,0 +1,30 @@ +require "lfs" + +local open = io.open + +local function read_file(path) + local file = open(path, "rb") -- r read mode and b binary mode + if not file then return nil end + local content = file:read "*a" -- *a or *all reads the whole file + file:close() + return content +end + +function string.ends(String,End) + return End=='' or string.sub(String,-string.len(End))==End +end + +function find_songs(dir) + for file in lfs.dir(dir) do + if string.ends(file, ".ly") then + local ly_content = read_file(dir .. '/' .. file) + local ly_title = string.match(ly_content, 'title = "(.-)"') + + tex.sprint('\\unchapter{' .. ly_title .. '}') + tex.sprint('\\includely[staffsize=14]{' .. dir .. '/' .. file .. '}') + tex.sprint('~\\\\') + tex.sprint('~\\\\') + tex.sprint('\\input{' .. dir .. '/' .. file:gsub("%.ly", ".tex") .. '}') + end + end +end diff --git a/src/songs.sty b/src/songs.sty new file mode 100644 index 0000000..3845019 --- /dev/null +++ b/src/songs.sty @@ -0,0 +1,19 @@ +\ProvidesPackage{songs} + +\RequirePackage{luatexbase} +\RequirePackage{luaotfload} +\RequirePackage{kvoptions} +\RequirePackage{keycommand} +\RequirePackage{currfile} +\directlua{dofile(kpse.find_file("songs.lua"))} + +\def\songpath{"./songs"} + +% Commandes principales +% Inclusion d'un fichier ly +\newkeycommand*\songs[songpath=\songpath]{% +\directlua{% + find_songs(\songpath)% +}% +} + diff --git a/src/scores/bierlein_rinn.ly b/src/songs/bierlein_rinn.ly similarity index 90% rename from src/scores/bierlein_rinn.ly rename to src/songs/bierlein_rinn.ly index 444e143..3b03cc6 100644 --- a/src/scores/bierlein_rinn.ly +++ b/src/songs/bierlein_rinn.ly @@ -67,17 +67,6 @@ verseOne = \lyricmode { } \book { - \bookOutputName "bierlein_rinn_score" - \score { - << - \new Voice = "one" { - \musicOne - } - >> - \layout { - } - } - \score { \unfoldRepeats \articulate << diff --git a/src/lyrics/bierlein_rinn.tex b/src/songs/bierlein_rinn.tex similarity index 100% rename from src/lyrics/bierlein_rinn.tex rename to src/songs/bierlein_rinn.tex diff --git a/src/scores/ergo_bibamus.ly b/src/songs/ergo_bibamus.ly similarity index 88% rename from src/scores/ergo_bibamus.ly rename to src/songs/ergo_bibamus.ly index 153fe28..2e0e8b9 100644 --- a/src/scores/ergo_bibamus.ly +++ b/src/songs/ergo_bibamus.ly @@ -33,7 +33,7 @@ musicOne = \relative f' { verseOne = \lyricmode { Hier sind wir ver -- sam -- melt zu | - löb -- li -- chem Run, drum, | + löb -- li -- chem Tun, drum, | Brü -- der -- chen, er -- go bi -- | ba -- mus! (Das) | heisst noch ein altes, ein | @@ -75,17 +75,6 @@ verseOneRepeat = \lyricmode { } \book { - \bookOutputName "ergo_bibamus_score" - \score { - << - \new Voice = "one" { - \musicOne - } - >> - \layout { - } - } - \score { \unfoldRepeats \articulate << diff --git a/src/lyrics/ergo_bibamus.tex b/src/songs/ergo_bibamus.tex similarity index 100% rename from src/lyrics/ergo_bibamus.tex rename to src/songs/ergo_bibamus.tex diff --git a/src/scores/gaudeamus_igitur.ly b/src/songs/gaudeamus_igitur.ly similarity index 86% rename from src/scores/gaudeamus_igitur.ly rename to src/songs/gaudeamus_igitur.ly index 47bc606..d2f2b7c 100644 --- a/src/scores/gaudeamus_igitur.ly +++ b/src/songs/gaudeamus_igitur.ly @@ -57,17 +57,6 @@ verseOne = \lyricmode { } \book { - \bookOutputName "gaudeamus_igitur_score" - \score { - << - \new Voice = "one" { - \musicOne - } - >> - \layout { - } - } - \score { \unfoldRepeats \articulate << diff --git a/src/lyrics/gaudeamus_igitur.tex b/src/songs/gaudeamus_igitur.tex similarity index 100% rename from src/lyrics/gaudeamus_igitur.tex rename to src/songs/gaudeamus_igitur.tex diff --git a/src/scores/in_jedem_vollen_glase_wein.ly b/src/songs/in_jedem_vollen_glase_wein.ly similarity index 86% rename from src/scores/in_jedem_vollen_glase_wein.ly rename to src/songs/in_jedem_vollen_glase_wein.ly index c82f1eb..26b1f27 100644 --- a/src/scores/in_jedem_vollen_glase_wein.ly +++ b/src/songs/in_jedem_vollen_glase_wein.ly @@ -57,17 +57,6 @@ verseOne = \lyricmode { } \book { - \bookOutputName "in_jedem_vollen_glase_wein_score" - \score { - << - \new Voice = "one" { - \musicOne - } - >> - \layout { - } - } - \score { \unfoldRepeats \articulate << diff --git a/src/lyrics/in_jedem_vollen_glase_wein.tex b/src/songs/in_jedem_vollen_glase_wein.tex similarity index 100% rename from src/lyrics/in_jedem_vollen_glase_wein.tex rename to src/songs/in_jedem_vollen_glase_wein.tex diff --git a/src/scores/lindenwirtin.ly b/src/songs/lindenwirtin.ly similarity index 88% rename from src/scores/lindenwirtin.ly rename to src/songs/lindenwirtin.ly index 77deba2..eeedb41 100644 --- a/src/scores/lindenwirtin.ly +++ b/src/songs/lindenwirtin.ly @@ -63,17 +63,6 @@ verseOne = \lyricmode { } \book { - \bookOutputName "lindenwirtin_score" - \score { - << - \new Voice = "one" { - \musicOne - } - >> - \layout { - } - } - \score { \unfoldRepeats \articulate << diff --git a/src/lyrics/lindenwirtin.tex b/src/songs/lindenwirtin.tex similarity index 100% rename from src/lyrics/lindenwirtin.tex rename to src/songs/lindenwirtin.tex diff --git a/src/scores/viel_volle_becher.ly b/src/songs/viel_volle_becher.ly similarity index 88% rename from src/scores/viel_volle_becher.ly rename to src/songs/viel_volle_becher.ly index a927bc9..b45f4bb 100644 --- a/src/scores/viel_volle_becher.ly +++ b/src/songs/viel_volle_becher.ly @@ -66,17 +66,6 @@ verseOne = \lyricmode { } \book { - \bookOutputName "viel_volle_becher_score" - \score { - << - \new Voice = "one" { - \musicOne - } - >> - \layout { - } - } - \score { \unfoldRepeats \articulate << diff --git a/src/lyrics/viel_volle_becher.tex b/src/songs/viel_volle_becher.tex similarity index 100% rename from src/lyrics/viel_volle_becher.tex rename to src/songs/viel_volle_becher.tex diff --git a/src/templates/kommersbuch.aux b/src/templates/kommersbuch.aux new file mode 100644 index 0000000..f23e546 --- /dev/null +++ b/src/templates/kommersbuch.aux @@ -0,0 +1 @@ +\relax diff --git a/src/templates/kommersbuch.fdb_latexmk b/src/templates/kommersbuch.fdb_latexmk new file mode 100644 index 0000000..280cdb1 --- /dev/null +++ b/src/templates/kommersbuch.fdb_latexmk @@ -0,0 +1,20 @@ +# Fdb version 3 +["pdflatex"] 1509718845 "/Users/sebastianhugentobler/Documents/workspace/kommersbuch/src/templates/kommersbuch.j2" "kommersbuch.pdf" "kommersbuch" 1509718845 + "/Users/sebastianhugentobler/Documents/workspace/kommersbuch/src/templates/kommersbuch.j2" 1509716660 1691 f5909bb2d078cf0c32c064bc3562d216 "" + "/opt/local/etc/texmf/texmf.cnf" 1498210216 30504 ca4c9cc71f3515cad4981dfa185b811b "" + "/opt/local/share/texmf-texlive/tex/generic/unicode-data/CaseFolding.txt" 1493155083 78161 e3fbf2f626f10070000fe66f3a2ff5ef "" + "/opt/local/share/texmf-texlive/tex/generic/unicode-data/SpecialCasing.txt" 1493155083 16830 fea30f45a2f81ffa474fd984d297e2ea "" + "/opt/local/share/texmf-texlive/tex/generic/unicode-data/UnicodeData.txt" 1493155083 1686443 dde25b1cf9bbb4ba1140ac12e4128b0b "" + "/opt/local/share/texmf-texlive/tex/latex/base/article.cls" 1467165121 19821 310da678527a7dfe2a02c88af38079b7 "" + "/opt/local/share/texmf-texlive/tex/latex/base/size10.clo" 1467165122 8292 e897c12e1e886ce77fe26afc5d470886 "" + "/opt/local/share/texmf-texlive/tex/latex/fontspec/fontspec.sty" 1493155085 1704 f155bd31324526584df93d8880629e82 "" + "/opt/local/share/texmf-texlive/tex/latex/l3kernel/expl3-code.tex" 1496799555 689208 a4a1f960caacd72906628f3f1a2e3b4c "" + "/opt/local/share/texmf-texlive/tex/latex/l3kernel/expl3.sty" 1496799555 9344 31607e39934aa760394a75d15a0594e0 "" + "/opt/local/share/texmf-texlive/tex/latex/l3kernel/l3pdfmode.def" 1496799555 10255 ae20359c06d3acc750024781d0520fe6 "" + "/opt/local/share/texmf-texlive/tex/latex/l3packages/xparse/xparse.sty" 1496799555 76757 9db3143638eba1ea8405900fbbcff235 "" + "/opt/local/var/db/texmf/web2c/pdftex/pdflatex.fmt" 1498210795 3768257 ca4ae9b50676c7797795cbaf354884e6 "" + "kommersbuch.aux" 1509718845 8 a94a2480d3289e625eea47cd1b285758 "" + "kommersbuch.j2" 1509716660 1691 f5909bb2d078cf0c32c064bc3562d216 "" + (generated) + "kommersbuch.log" + "kommersbuch.pdf" diff --git a/src/templates/kommersbuch.fls b/src/templates/kommersbuch.fls new file mode 100644 index 0000000..926dadb --- /dev/null +++ b/src/templates/kommersbuch.fls @@ -0,0 +1,22 @@ +PWD /Users/sebastianhugentobler/Documents/workspace/kommersbuch/src/templates +INPUT /opt/local/etc/texmf/texmf.cnf +INPUT /opt/local/var/db/texmf/web2c/pdftex/pdflatex.fmt +INPUT /Users/sebastianhugentobler/Documents/workspace/kommersbuch/src/templates/kommersbuch.j2 +OUTPUT kommersbuch.log +INPUT /opt/local/share/texmf-texlive/tex/latex/base/article.cls +INPUT /opt/local/share/texmf-texlive/tex/latex/base/article.cls +INPUT /opt/local/share/texmf-texlive/tex/latex/base/size10.clo +INPUT /opt/local/share/texmf-texlive/tex/latex/base/size10.clo +INPUT /opt/local/share/texmf-texlive/tex/latex/fontspec/fontspec.sty +INPUT /opt/local/share/texmf-texlive/tex/latex/fontspec/fontspec.sty +INPUT /opt/local/share/texmf-texlive/tex/latex/l3kernel/expl3.sty +INPUT /opt/local/share/texmf-texlive/tex/latex/l3kernel/expl3.sty +INPUT /opt/local/share/texmf-texlive/tex/latex/l3kernel/expl3-code.tex +INPUT /opt/local/share/texmf-texlive/tex/latex/l3kernel/expl3-code.tex +INPUT /opt/local/share/texmf-texlive/tex/generic/unicode-data/UnicodeData.txt +INPUT /opt/local/share/texmf-texlive/tex/generic/unicode-data/CaseFolding.txt +INPUT /opt/local/share/texmf-texlive/tex/generic/unicode-data/SpecialCasing.txt +INPUT /opt/local/share/texmf-texlive/tex/latex/l3kernel/l3pdfmode.def +INPUT /opt/local/share/texmf-texlive/tex/latex/l3kernel/l3pdfmode.def +INPUT /opt/local/share/texmf-texlive/tex/latex/l3packages/xparse/xparse.sty +INPUT /opt/local/share/texmf-texlive/tex/latex/l3packages/xparse/xparse.sty diff --git a/src/templates/book.j2 b/src/templates/kommersbuch.j2 similarity index 97% rename from src/templates/book.j2 rename to src/templates/kommersbuch.j2 index 874657c..acbc5cb 100644 --- a/src/templates/book.j2 +++ b/src/templates/kommersbuch.j2 @@ -1,6 +1,6 @@ % !Mode:: "TeX:UTF-8" -\documentclass[9pt, a5paper, openany]{scrbook} +\documentclass[9pt, a4paper, openany]{article} \usepackage{fontspec} \usepackage{lmodern} diff --git a/src/templates/kommersbuch.log b/src/templates/kommersbuch.log new file mode 100644 index 0000000..4fd2b59 --- /dev/null +++ b/src/templates/kommersbuch.log @@ -0,0 +1,182 @@ +This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/MacPorts 2017_2) (preloaded format=pdflatex 2017.6.23) 3 NOV 2017 15:20 +entering extended mode + restricted \write18 enabled. + file:line:error style messages enabled. + %&-line parsing enabled. +**/Users/sebastianhugentobler/Documents/workspace/kommersbuch/src/templates/kom +mersbuch.j2 + +(/Users/sebastianhugentobler/Documents/workspace/kommersbuch/src/templates/komm +ersbuch.j2 +LaTeX2e <2017-04-15> +Babel <3.10> and hyphenation patterns for 55 language(s) loaded. +(/opt/local/share/texmf-texlive/tex/latex/base/article.cls +Document Class: article 2014/09/29 v1.4h Standard LaTeX document class +(/opt/local/share/texmf-texlive/tex/latex/base/size10.clo +File: size10.clo 2014/09/29 v1.4h Standard LaTeX file (size option) +) +\c@part=\count79 +\c@section=\count80 +\c@subsection=\count81 +\c@subsubsection=\count82 +\c@paragraph=\count83 +\c@subparagraph=\count84 +\c@figure=\count85 +\c@table=\count86 +\abovecaptionskip=\skip41 +\belowcaptionskip=\skip42 +\bibindent=\dimen102 +) +(/opt/local/share/texmf-texlive/tex/latex/fontspec/fontspec.sty +(/opt/local/share/texmf-texlive/tex/latex/l3kernel/expl3.sty +Package: expl3 2017/05/13 L3 programming layer (loader) + +(/opt/local/share/texmf-texlive/tex/latex/l3kernel/expl3-code.tex +Package: expl3 2017/05/13 L3 programming layer (code) +\c_max_int=\count87 +\l_tmpa_int=\count88 +\l_tmpb_int=\count89 +\g_tmpa_int=\count90 +\g_tmpb_int=\count91 +\g__prg_map_int=\count92 +\c_log_iow=\count93 +\l_iow_line_count_int=\count94 +\l__iow_line_target_int=\count95 +\l__iow_one_indent_int=\count96 +\l__iow_indent_int=\count97 +\c_zero_dim=\dimen103 +\c_max_dim=\dimen104 +\l_tmpa_dim=\dimen105 +\l_tmpb_dim=\dimen106 +\g_tmpa_dim=\dimen107 +\g_tmpb_dim=\dimen108 +\c_zero_skip=\skip43 +\c_max_skip=\skip44 +\l_tmpa_skip=\skip45 +\l_tmpb_skip=\skip46 +\g_tmpa_skip=\skip47 +\g_tmpb_skip=\skip48 +\c_zero_muskip=\muskip10 +\c_max_muskip=\muskip11 +\l_tmpa_muskip=\muskip12 +\l_tmpb_muskip=\muskip13 +\g_tmpa_muskip=\muskip14 +\g_tmpb_muskip=\muskip15 +\l_keys_choice_int=\count98 +\c__fp_leading_shift_int=\count99 +\c__fp_middle_shift_int=\count100 +\c__fp_trailing_shift_int=\count101 +\c__fp_big_leading_shift_int=\count102 +\c__fp_big_middle_shift_int=\count103 +\c__fp_big_trailing_shift_int=\count104 +\c__fp_Bigg_leading_shift_int=\count105 +\c__fp_Bigg_middle_shift_int=\count106 +\c__fp_Bigg_trailing_shift_int=\count107 +\c__fp_rand_size_int=\count108 +\c__fp_rand_four_int=\count109 +\c__fp_rand_eight_int=\count110 +\l__sort_length_int=\count111 +\l__sort_min_int=\count112 +\l__sort_top_int=\count113 +\l__sort_max_int=\count114 +\l__sort_true_max_int=\count115 +\l__sort_block_int=\count116 +\l__sort_begin_int=\count117 +\l__sort_end_int=\count118 +\l__sort_A_int=\count119 +\l__sort_B_int=\count120 +\l__sort_C_int=\count121 +\c_empty_box=\box26 +\l_tmpa_box=\box27 +\l_tmpb_box=\box28 +\g_tmpa_box=\box29 +\g_tmpb_box=\box30 +\l__box_top_dim=\dimen109 +\l__box_bottom_dim=\dimen110 +\l__box_left_dim=\dimen111 +\l__box_right_dim=\dimen112 +\l__box_top_new_dim=\dimen113 +\l__box_bottom_new_dim=\dimen114 +\l__box_left_new_dim=\dimen115 +\l__box_right_new_dim=\dimen116 +\l__box_internal_box=\box31 +\l__coffin_internal_box=\box32 +\l__coffin_internal_dim=\dimen117 +\l__coffin_offset_x_dim=\dimen118 +\l__coffin_offset_y_dim=\dimen119 +\l__coffin_x_dim=\dimen120 +\l__coffin_y_dim=\dimen121 +\l__coffin_x_prime_dim=\dimen122 +\l__coffin_y_prime_dim=\dimen123 +\c_empty_coffin=\box33 +\l__coffin_aligned_coffin=\box34 +\l__coffin_aligned_internal_coffin=\box35 +\l_tmpa_coffin=\box36 +\l_tmpb_coffin=\box37 +\l__coffin_display_coffin=\box38 +\l__coffin_display_coord_coffin=\box39 +\l__coffin_display_pole_coffin=\box40 +\l__coffin_display_offset_dim=\dimen124 +\l__coffin_display_x_dim=\dimen125 +\l__coffin_display_y_dim=\dimen126 +\l__coffin_bounding_shift_dim=\dimen127 +\l__coffin_left_corner_dim=\dimen128 +\l__coffin_right_corner_dim=\dimen129 +\l__coffin_bottom_corner_dim=\dimen130 +\l__coffin_top_corner_dim=\dimen131 +\l__coffin_scaled_total_height_dim=\dimen132 +\l__coffin_scaled_width_dim=\dimen133 +) +(/opt/local/share/texmf-texlive/tex/latex/l3kernel/l3pdfmode.def +File: l3pdfmode.def 2017/03/18 v L3 Experimental driver: PDF mode +\l__driver_color_stack_int=\count122 +\l__driver_tmp_box=\box41 +)) +(/opt/local/share/texmf-texlive/tex/latex/l3packages/xparse/xparse.sty +Package: xparse 2017/05/13 L3 Experimental document command parser +\l__xparse_current_arg_int=\count123 +\g__xparse_grabber_int=\count124 +\l__xparse_m_args_int=\count125 +\l__xparse_mandatory_args_int=\count126 +\l__xparse_v_nesting_int=\count127 +) +Package: fontspec 2017/03/31 v2.6a Font selection for XeLaTeX and LuaLaTeX + + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +! +/opt/local/share/texmf-texlive/tex/latex/fontspec/fontspec.sty:28: Fatal fontsp +ec error: "cannot-use-pdftex" +! +! The fontspec package requires either XeTeX or LuaTeX. +! +! You must change your typesetting engine to, e.g., "xelatex" or +! "lualatex"instead of plain "latex" or "pdflatex". +! +! See the fontspec documentation for further information. +! +! For immediate help type H . +!............................................... + +l.28 \msg_fatal:nn {fontspec} {cannot-use-pdftex} + +|''''''''''''''''''''''''''''''''''''''''''''''' +| This is a fatal error: LaTeX will abort. +|............................................... + + ) ) +Here is how much of TeX's memory you used: + 7521 strings out of 493588 + 152856 string characters out of 6147356 + 171207 words of memory out of 5000000 + 10980 multiletter control sequences out of 15000+600000 + 3640 words of font info for 14 fonts, out of 8000000 for 9000 + 846 hyphenation exceptions out of 8191 + 33i,1n,32p,10444b,275s stack positions out of 5000i,500n,10000p,200000b,80000s + +No pages of output. +PDF statistics: + 0 PDF objects out of 1000 (max. 8388607) + 0 named destinations out of 1000 (max. 500000) + 1 words of extra memory for PDF output out of 10000 (max. 10000000) + diff --git a/waf b/waf deleted file mode 100755 index 90efc5c..0000000 --- a/waf +++ /dev/null @@ -1,170 +0,0 @@ -#!/usr/bin/env python -# encoding: ISO8859-1 -# Thomas Nagy, 2005-2016 -# -""" -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, -INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING -IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. -""" - -import os, sys, inspect - -VERSION="1.9.7" -REVISION="d27222240ebc8bcbca7fcd8f4ae914fb" -GIT="4095f1403a11e4138d720e650b435411e757ed70" -INSTALL='' -C1='#-' -C2='#+' -C3='#(' -cwd = os.getcwd() -join = os.path.join - - -WAF='waf' -def b(x): - return x -if sys.hexversion>0x300000f: - WAF='waf3' - def b(x): - return x.encode() - -def err(m): - print(('\033[91mError: %s\033[0m' % m)) - sys.exit(1) - -def unpack_wafdir(dir, src): - f = open(src,'rb') - c = 'corrupt archive (%d)' - while 1: - line = f.readline() - if not line: err('run waf-light from a folder containing waflib') - if line == b('#==>\n'): - txt = f.readline() - if not txt: err(c % 1) - if f.readline() != b('#<==\n'): err(c % 2) - break - if not txt: err(c % 3) - txt = txt[1:-1].replace(b(C1), b('\n')).replace(b(C2), b('\r')).replace(b(C3), b('\x00')) - - import shutil, tarfile - try: shutil.rmtree(dir) - except OSError: pass - try: - for x in ('Tools', 'extras'): - os.makedirs(join(dir, 'waflib', x)) - except OSError: - err("Cannot unpack waf lib into %s\nMove waf in a writable directory" % dir) - - os.chdir(dir) - tmp = 't.bz2' - t = open(tmp,'wb') - try: t.write(txt) - finally: t.close() - - try: - t = tarfile.open(tmp) - except: - try: - os.system('bunzip2 t.bz2') - t = tarfile.open('t') - tmp = 't' - except: - os.chdir(cwd) - try: shutil.rmtree(dir) - except OSError: pass - err("Waf cannot be unpacked, check that bzip2 support is present") - - try: - for x in t: t.extract(x) - finally: - t.close() - - for x in ('Tools', 'extras'): - os.chmod(join('waflib',x), 493) - - if sys.hexversion<0x300000f: - sys.path = [join(dir, 'waflib')] + sys.path - import fixpy2 - fixpy2.fixdir(dir) - - os.remove(tmp) - os.chdir(cwd) - - try: dir = unicode(dir, 'mbcs') - except: pass - try: - from ctypes import windll - windll.kernel32.SetFileAttributesW(dir, 2) - except: - pass - -def test(dir): - try: - os.stat(join(dir, 'waflib')) - return os.path.abspath(dir) - except OSError: - pass - -def find_lib(): - src = os.path.abspath(inspect.getfile(inspect.getmodule(err))) - base, name = os.path.split(src) - - #devs use $WAFDIR - w=test(os.environ.get('WAFDIR', '')) - if w: return w - - #waf-light - if name.endswith('waf-light'): - w = test(base) - if w: return w - err('waf-light requires waflib -> export WAFDIR=/folder') - - dirname = '%s-%s-%s' % (WAF, VERSION, REVISION) - for i in (INSTALL,'/usr','/usr/local','/opt'): - w = test(i + '/lib/' + dirname) - if w: return w - - #waf-local - dir = join(base, (sys.platform != 'win32' and '.' or '') + dirname) - w = test(dir) - if w: return w - - #unpack - unpack_wafdir(dir, src) - return dir - -wafdir = find_lib() -sys.path.insert(0, wafdir) - -if __name__ == '__main__': - - from waflib import Scripting - Scripting.waf_entry_point(cwd, VERSION, wafdir) - -#==> -#BZh91AY&SYL24@4#+#(E(a<7۹#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(u}w$2ћi^@#MFkcT/+2e5ǵNwoǾ>{vv{Vg[n3ٽ^ƻվWeӟ{=}1A{}`ǵ6=zz#(#(#( #(làimfemT4h=4#(z@#-uf٠U4"kYI#(#($Ppr>]ݹb==듽\қ:芎Q)ѵLs{>hogS۾W{|ےkmףKkݍ> #-vnuۯmwv;s=zvyݸͳmnܻӃ#-VM#-qnc[@ƞ{u}ћ:_Mc#(8v{Os_swl7;vvw񻳏U{:*bʮݶ˝a^{mvյ+g;N;wRoM;N7o`%{uo>󰢞{ݾJR]r.>͖[cݢ{n׮ynwpwo#({w[Q{:4%#-An !}ުvnܦjAfnٝ5Kݳ}M_mlYx#(oq#(޶dZ<\޻tcG:im#6F.HtΈw"/7spJݞwK7yzew>}q;nln{Pܭ7nٗǦcC݄N﭂fl;GŎwfgqV{^F#+g7;z[m{{#+-k޾Gm#(#-lhP#+ݏsC݊pw:c/`7={k{w#(#(˰2#([PW=/v.@#;X5a\twuu.uH-ji1uww'N5$;=ow!ϴlς!D7s;شuu}ތy{ڇ`iy<Ѿ5i#(F&42aL$m*d`AAL Ɉ :W.IG9(??D !M Z-b_uyq[ՈJ0y@l1Mֿ X>#+Da2xzwѣYC_O|E,Ds^umtr<꼗y˖=.4\5b.Q=߷5׻{v+C|ݷony<Ŋœ_;o,5AhFx#(LT)%4φl~LDb+mfy!0 Z%.1XZ7wWN^[#+0( 8!7E2%[JwՊFy2VBb*0<نZe0XqʊC#-dѓ-%XK/7)U;hYK8plU϶C2U5#-#+00Y""V0Xѝowb$RՁ-x`E#(D*#-1'夬APRP{PѾчjh GŠSJ?^~>\tp(4o=\cr#wUeI7-Hg#+72&(pz=r>H?O~?jB-9g;#efd .?]1.cJe,lbO4:?W.0LwMZ#-!y{ R D70;dn2nTyrH|:η]S:q=i|b#-zf0NS)$UܨTj3 r֬1VFc"sVBqJT-(d4AM֦P#G/.ό'GQ#+0r!H2&3kǍF?4 ې_fA)\)@*tSDo/kcb.χ$YxߘۦW#Bq27G8yT!kYvB}ϙjۚ#-hxgU26S g*ڃjlٜO섒H+>n'GCca oٜFH0 v$%:%I7΅#L{Lzuzxts6$aif=̉?8OӋ]"Q1HE 3Gt-bu׾ncE"VM31EE‰ m쪤<luN+ksN YrCoNa[9F 49`UkWӋ5+G0`GF-9aΧž%op4o^(HK&ws3} +w3շ Xp\=6ƨd#+~@x(͎ӑ(C<&uP:HNBEtx˳cUUCd3c-I)2~r-gG9GLy1?96Dxْ4#+̴#-dfI9Gkij!Y ˋ=@lmx|Y#+!l=,YsݬNܖ%#(I'Fj0sxv ֬tJ{U0كҎdXLؕUWE`JG!9:j^ jD[3SZ-N1|D~oi/T}4M#rGK9}vpyqr^!4¤C)_ftA5~KK@sr4)Wޣ9.~vTblΆ3{)RmX3#Y1㬒#+c"Jzu#-皟 Qn>ʗ. AfbJ(SLx▰˰1}aRw~PLWEM=)Q 6@,|'g^۲5h(;&Rom !nzu$/=q\zG4b8Q2¾槽30YUD%`xF8_>+>r'8%ak,e6&YÌ?2c^k01n^E{1(oW}q9ѧ=#6\Vz~,iD8n.#تX*&0^Tj#+DGWgYb#g #+,۶軭щ<|Wꔬ<ۛr)qw']eݱk[ÙIovx߿JfgCOaRLY_~XGۼO9]=FgVBpa#(L#(i}Z5GйBZu3`jfJ<+ue97 <u ՟47x(8/JҨc*S&Mh7}3Ȧ"PzcwILjw>*i& nC$6w.g]mP-?dw_syE&Ĉְ_CH}^#53x-MJhY#2MϊѸYdᝯy鹛S\ ߓpo;j^s)Koj4|u;+۹QvBzTxxg;QlQsUv fuziΒftT P˻ocvo\"t{g;'&wN|&^~]zQdV%HZڨ2sJ5#+]k_@8߷$}h#+kp- 0C_4iu|LhB NFNNޯ ZCE8_C)دc RRkrTg"->} o7wywD:\q&ڦ-hc.jIpUFCIΉn98]qVYqo:#k. Gߌ#+cQP)q)be+7Y=ٟ#($ '>E\veDu:uc:&qXa_]4gbkKgp/eV!HM #cmL-Uݙv$ pF`wWәcjζ )k%#(>DOz^2SQS`| Hڭ. >+9t80Ru!s11̣=j/Y>Tխ#-H#-Q啀zcA#-(K36DOݿ]8r`JqILn:.v=('||K3t2p5iR2NJPts]7Pd#-W83r u:a‘>^_zxWa{>wKd](Z@[hn0[G$7YkֽG5gұI0>"csAךA'C]V2{.K6A Vh%5rC HV(mGdZJG5wk] @e9mu&lУ3O3`D{zuBZكAks[ ;Su,f#+}R|e}HԀqIx !FѻP 2^e ފ_EOq U 7P>ͻxAZyh& -MzPjUUBG#?.]vx|f́=˱rТܧ&iUW/̀:|}ެ̋©Q!D#+҆<L zl9[kD#+xc?xŅ7i>}COMQ&_12 I[[i6,##+=nH[=8@c#-Œmo"(m9N.4s9MQq|#Q#-ĝ`*BE 4Rz/XO/6-mp}<Ӊ*C!h$#+3;LtL \Ӻ'oߥyo+yO#(cbC20y!qߺ='ut9(Q~OT8fJ\)H&iˍlNo~#- Ua߻+qIISSZjWpâZL#+bUӏM} Л>}~N[_CkM-9g$CJ 09V÷ڱwQwi;!Y0d!$MA{o]3zD"h)92rf-Ա|*Ef#f\T%1N$7_g9.0J`;.sbZdɓ<Gn70yڝоu0gQa#(N4q 9Jg![#2˃;>Gmnwؓ9x#v:YU؁Svwm[_mb ]k0ܬ{ݖ#B`oz1ӃP\M>ʾݪlZ̷Ifl+L6LYRMvuz@sBtGo/gT5eF|ۮ&$WàQ銲VQrs,5Wma#(#+I$$D;%V!K>ygOKMT#(cң- Fa:,PH `w ${!Yd*+zw.9B)LYQnpy!BIL,#-ELUaL`40 [xR R(;*V- 7>3uy"d6#-}*28RrItXv/j`ܪ#efhMXd+c`X[!:߹)Ofʆ#-HH3xɐ#âLo&׏}s;jup5XyxvgUZ\Y:$ھD.M"8aॗfp+l^յs fLקo՜O+[l'ssDGء:`r#+ |Kl]2YfH e8 v*)rafh …JA0QA\@#(ЪU (^r!DC\rq=w7ȡIJĞ+LZn@[ȣ*j*&ۚ2X6.a%H$F#lj6y VVErֳ˭`3I=,>['pϻg9#U'Rʡ/gBrDg~%di!zX+UI<;#+sޯ>{;^CK#;E{v#+M)IZt,!A'-ך]CZl#-l [&c§UhҒnH9.5L67<LKMQ)wJorƅ@کI֨:gP~U1c>cܶ?%-"AOFy&D&u:vUMhY@VZ [?1?NwSQٿ jC#-$yXU5#b]5Kn~^s70欈WEM)`6Jd :!8bJE#6mDtk慠&XrF tu+F{팴<hQ#-s/T0>{{jqotgRŃC؎2V qbI'LSqK2c&#+< a γC{a)ݻ=a_ ]jIBtS[QR%!Rocmӑ'LiceJHZ1/GԻ ?հS\Yb"`hgrʴ66R#!U\ÈC#+N'=1tᓱ,Jaȟ>8M` !E6gl:w܏H튬bkRw7BcSCUNkM텁+p-!>c$wK#(PF[k-Fi"#+ha"L1Il.h=h& "Pgfmj!7=/g@b5^8#(rPt+k#+|yUTJkza.N9Ӗ(4|#+C7[zgڠVPE⇪vmK_~=>|=o!/C?^V%ZU#Zr-]N¨}.?3?ӯEMǮIԕy);[z_d?#s]b%.}nW_OR-Xq6̑xu\iUuF 1dE}X&+ _}4 #-AeΊ+:)ΏkmQ6\1x<7/T׏/SU@sbŸ )Q() l(*LtJ#( #-WqU )-C%0 d/@8 )#(Wݕe)ץXM k3.-ZߎvKy)_/$:M-_6ʪ~}m^lueAW]ӥ,14Mls]^a_7B+%J'moo#k->M}\%W=t:6eɱx+N"t|+f3f5 ͗.~W2-(-yq[AǍxrSH/<Cp)Oa17axহ 9loN6:#ږ2Ѿ~5w. oeLy>-sAu<+-b9#-*.w+WQt~l9dk@a\guK>$*rx|aE^#+4W0?Vt`qd+ehSߞNrՅ膙ˍ}nA,j?_uWYq$EtN;6[orzoȝݞF4j/0엑z{8^  ^?#+i̅Vxo˱譞=[Z.}-ߗf}U#(1v>4dwdWSy9{GhJAE܄M!b?5pp5gr@0!^Ɓ P|Ef @:iqͰ^ug,{|| yFfpOEPv''OɕAј/zu9ya^y9o|>qx9`B߬r#(R#(>O|x+3#+|eٌc/R?#ȶDz?a~~#-%}9Jӣ{^%g`9OC&C[H!#- O맠&DH"k#+Ӏ=p{ ۃgW=L/Nx=񾸊=KW&.#+!s,@|rOFiY#((iP$#-*Gk.CzDАM80@(xsTh@2 V3V#+#J`if͞[pJ#Jn%1⣍[Wk"/DI,AClakwe<pkw(@f:ܨT텕(`e>Wd4hptdӉY׾8m3ݓ+jѼ9WUqN^?=czu1Vd߼^֗<#.l5.T2 i^I|fؒ(j{xRCi΃EEV(3G kg_W[^G;.5D#-TD{"at8hPYu:1E4Uuhju7r>#So]3tO&bdKk6:>˨K<F\B=AS/rq^v#].162IR`0"VbU[ЛR=Kc07`#-5#+WrÌKi?b_8GouT IO7_'k0vdClY|l_|9@-V܄g*XHlǶFlXGG5(D #D68dXH*J7].`Vj5fYС ɎX 洛#+2M 447Bi eq8Nh}dAaC"o43)6"ОV6hww^-g(PP|ehkQj/^*u!alaaci2B4K ?I~~3C܁JFf IAb¥*i5CYnL#-K#**(ZL0Ot[w#-t緜K컢:M7㾖E\,k,d-+~oR۟6oϫɈ`*~`?;4 o3RnUsXXf `+( %H7w]mXo'}Z;%A7op8P VϧseGÌSϚNη#{sXZv]^?).u#v9>W;>_G7񳗯]d"t]_?/4ŒY1J >apvBVa#-7vM'!~_(?V2biRmZ$VҘ9[lTkD42TVbƕiI6 I)+|kѯ[B֩SӑDAcab" ¼c0vThqGիэ)j!lZ7A؈Aty ‘v%r(*`2 ilA4m^uWM1!K2&qVt-!ittYKk$-pA@DP +F,὚Q$I8 }+tL?-ib+&E\Q(3DaWjeF8Y)6O 38+Ì*5%l)4AzxdCE#+/.DH:G#"DjT:faD1m@zuloo4yR`# EZ # u:`nsjUZ*9m?NͶhjSz8 J3ZA"C#(`~o ^~t'͜K,zj{O:`C@9/`>l4d9ԫ Fޓ"ܘttpQ4c, R#-2di/.L"R#+SM*lVJȤ$cDtJ(f#+T3+ ;mӭio]FL[#;v#+ gs!Y<5SyQ"14B\I bF܍Rin1V6DZJt;T$K+[ٯ۾^,]v8fæg3#+yAb>|^ڡۆ!6?mf)@lU8pH>֎*˅ftgcq[ka0$p,D8][éll+""VkӗvI<:س糂M'ǜX0ڏ)3G4s:dQɠ`d<[wŔ/l}#9Wh 5Ժ6m&0;AjUpҨ#+r4\sxܲߒ#`shmQo[&嵮ʈl7B{;븣m:"o1,>[;#++`*d1!3+Xq~눬 n#s\<,FU ƹݙYX-9yȨÄf9&D!.15]µ `˜l`y&e6^f/r}1Y6F\:q!b 'JU'?|S9C¨r[{-twiyUuћH8Ü3l $h] W1gbninN%׸O T K1#-Ē8 lޱMW%#-4 ۭF#(ZL%T[v$&#+Ȥa@7A}`K G1+Ʈ513^hAp`ɼש8/v>UN/x\"C#w#-8F[Sت\K90gNr5N0u޻e(oMQׁ 1TLno9lRU%eBm0JF) :8D"F`<mQA>},y},nb%xmYP&w$[]cjگ!S XhO6žj'pౚ ?MT]}E2_wT;QhzkGv0kкrO$|8:Dn{(B$@w&I57eqIt}ӼJIAfńtCC:f2cYMs'%Գy݋KN\Ϫc6BWY',A:SNZ~4}xc#+M~ھa#+ТL [QƱkduz(}&]#+cB8N673&Cu\dlڂ3]&ՁjKE?=Mh<G9u飢(ʙaoayfZdyP=οrr"./Cw]ATy Zk -(~O89>>!DUN!Bڈ>}=9v1'Ꮌnths2xܲ#?#l+`z$ 3`(wW&do?#ո''/vw.aUN&ϥ~onT#+ LLެe"49``wo=#Hȫs_u@ m5zCǯ]kMݺÓA DV49!4ga2]Ro#-+~H}6nEa$qRPG?Jp|=E8h'JxxZ$a#-%Zv{W?Db ʴhU#+N3mNQqc̘YadeuJA*IfDYp6j#wa4ҋ%q1\K=WiṔ[Λ; Vi%Ԏ0Z7:^RifZ!3Uf}5*ܖNxD'ҚC['*]TymHGNvY#-އ]3vdFG!j5Knb4 6?NHuс8S5?Ϙ9M"i\NF<"W{o^u4D1ߝ@`y^b1'|y"[ l3uxjlJ˃8A"AIuwѩ#;B9*]wU@#磣UU  j!6J^N—uFR^lw38*u#+JL6.Emo3ueز~X^ٸ&ز,! JT⭬R\?f|]^\ӉTPvj}BGau|,v#-^]’^Q.ߟcF}[809s:q}Ay5Tư;yż#+π~8zs^1]29_0\FuY վSa{!-XaҎD<خ#-%I P4mo-^yRʊ+NtY% Ćfdd34*t msĸaKiY'lsȈm,3{3ÃиmU]N#+*gOx©ԊUeEpY8}i=ŕD1Qk#6&I@u>O<0gs>#-' AbQӱh~p$I'],9>oEOOsX0v69m){̨]&+{G5%_5qw߄})8(8;f@ Et@%] =^7G|VO5)uzmwaWe>:K{Ȗk]WǛ3-s2q1Sx:sMs9pL9+/:zd.0xQ `QͰ.]Bm]nCsޖ8ja &\bm03n]|y(xՄȽm pL\R52ɰq2>'4ll \Y7#(8޾sVH:m6IB0R׺4t+/pm6q\0ӎ&cʇ&{~cIUs7sy5m&a\8Ռ\$ B_%j^kśٞMbf3T%1%ՆWmtE`"N3$6܎&ʍ)QtE/mgZZܟQ0;MHM!իѻp^RB"UCfbnG[\bFRK-FW(Eg}Is-X5 rO$Btq˱m<ܷ6U#-=#֩_Mu(Ŀ@,ұ,M˄񕥄"A`f{۬r:=6f1Sy~mTepX4(,5+ps,2Ƥ`35&HհTNxghqZJہՔtmCk׃uva`ϯd!(% ,^Nq,fj\8+i{ ֎0U˲ƈOS8/>{'A?^|1q@$fӺ " l9f Z~#-9{UU)R]B<7tU<> *â?>v.#h4wui!IϦ5VՏ~kOv7YKVںTk'EtCd#Hnn_8jkE}ZV^G4.ok౬)fuF'K3)c<#{ 5ESbo6Oc8}Қ%cwϖÚ}gpMcq;JBGĮy*!3D,*,Cq<7qN &Ł}x"Rxw]X{)t?ϡSo$X3ێ`r<JLa`tU'⭝8TܑubLppКh2/9=p1S')Azonm {߳TPҖfucH壁MU<-eυ'U$m[&R_ `1^#Hb0;گ=PQ.d3Hx.ӃY]]1D_.#/ς ՞L#Ꚙ#-pŮA*a!QrQp5.unl<Zh V<ܼB+ &9Tms#(%{`8·#-4 |°zz+d9n+({6Ͱ D'2^9U.I SeYFAT~6 ^P;ٝow.&&K o=0AkhVcl%UŬ[ r@V5a};v<:h`t@^dj^Z~K,lOwU=;˔|kjy/ȍDʫU.ȪA]~Vs=sHFȯib]Pe%#-#-yv?AV:#(JGr%#-sռ;8h*W$[#(Y,pt(D( xK*`Y@t®gh(#(VT$WYs:GXKTg+.=q+G2P4BSϦ4Lk<`R=Zxt4Ip̗DeUߍS'ɬM_FEi7z:u *ܭ%UUTz2&˓"}nN{.}U1M\9.pP ,pĐj! /HS(軉r&i<8:<^x4M׍kr攂dLE8]0Nǀ+ *{x;N;}Cd6,7S9"a5~]Ȉ:-m 84qKɍɢFwWSqb#-E>@Rfy~ϣNo5))o :pt:8}nc}-wntP%"_m<[T'ɫ+t$|t#+Ws}x2!mݦfi$"ꑔXXc͡ubYБp8sLOei_koR]5, hg+Hv#-iHGj5Jyܓw,`rLMZƫǝCPNO#++R!jɱ-[̚i=W½r`кpx] cWpƊNOK׳(Pz jgp#8t-Kb/Q29)wJw5cyoi|$pVsG59ⴠjO38{);bff=| u43Ԑqϼu9q%d(MO:N_k~ٳx&1~CSiaGlcPX܋q19\mnr n+u_wo;}<],@>BG~otg›8)BWˆLy~q&Y 0Q?oO`y6]2_v@J`I%:ҿEDZl $4Z  pde[ұLyc!}Ӝd$P!76u(n}yإLk4WųիGO6dza`;Ʉ@T>d |}^{BBb {Y_j[oSαCi/#+I kT)kqO6Z(oܣ\_=-zkVkEhG}6ty\zYVE)}pJl|r3k? >OvB<˸g5z#(jIu5.>88#-׽aA\U o|߃L2@W6{xɁđ?T#-bKppȣ<"r>=;tﭕ#-f[4mo̿NWJ V2h싏 8/tl#-.k\AG2Ta?O;uҖ!tg32(E5E2ӺQ{=*!GH#PP3Sӭ!VNL||t:f7; \"L"#-|hN|Dڍ1싯"5\w1m#-O6Q>lߺpԆrG5|;*KvJZ! 83=uk3֤1%OB,*EH_E#-@jIz!I3(ڨ(6d|k2N!VXv,;tqoƔ<pn-1?pB #($  5v>tx缐N(Ň#-g@(Ko38;e mKռv6>(-6/2̢J=byLs1t,;@Z` :\vE>pqVfN'g~>5iS&ֵ2Gl-Sl|AKhi% 21Kjo ю=?;e^w&+@_^BP7T_[5il̊CWrߍ(eWƅgˎ>,qy8*r^#nZ81k9FwJ !Uv0f"I#-N]ohl[[4<#+^>L %e2Fu{v_3}#+> ۬#(Q`j1)E.tvo5j$\EGN!t5BZ2\4rD"MgVSc甩8p/23s"\B׳s.L1b0$ɠ<%7͸+UC ,8`lpfo.:=jCTKoLx93ï;I듮*+M?g pe#+u.32M ٟ"lCF%q,{W9*dB-;SgoiM>Cf01aCw05)ϲ;l4f <%#oN4k-lwHs_#8[yv>y2ޜg`d{ml" a#+# ŀ*,y9a#( BE~=$%폇]5^'rU.XImks=dΰ&vH(@9.ggl+}nv&O9ƸiɭmsQ DP "rxAT"cЃ0p(HnHbЌ fr_Xac-s3sm9e@!*+qpP#q$ګ5[1`Sv_,eWw,/m{N5ǎ/m\ Ogc"bSKndmUpK`[d#!C;ӧL@.!ċqAT%5ڥV5*\CmYھ&c%u}ݜ9f{7N:pz'zg GstQĊb殐Q`JيZ$?_8}d#-@ߊkh ^##+c2ג캜;vt /lJk#b<&E^pp|*IzK 8ݓ<#+6޺O} ApUR5Ow 5&/"6xiSSBP˼M(k!BX5=死c<^9LɚjS"S>zW"-M.u |Ro L^^糹VM{%xafB$NT)IQ$5sxWIs<%EJ̎xF,MwKl[w ayMvD.$3#(Cz.@o`azk2G^S®C0P;|ʱvq=$.áJ-$ZlaM>~Ӝ7=vgg/Ijcw;#+lfF}곁IOp 24Y,Ħ1Jq$Fu-w^o^Ζ?H,b{zkD2ܮkGY!SkP..1F#-U`WO#(iI2˶/>#+!DJ#-xPH#(O_:{=?rOZב**? AH Ϗ#(-?<՞~9HBr_2k[޼op9i)興>ib }d`C/;drc7!b|"'_/T%CaÎK/ÍdEJSD;=ʊ`7٪ Ϩ;6i~seJG #+Ǫcߒs iFl=0d_fW~tM&=rPt= 1| 9'0 >EE A>_aӕCWQ2t".W3*_s?gz(#*%39hJ@wuJ&0i&#+XR=(EYF,P,9 `c!/b(!n`E6FG f#(ce,~rn&c"#-HK7(,e#+ u*sa~N#+)@@=;B (T"ȴ2=ZAA B=~GT;;?LCϏ=P;E1=>2W@vU#+} kRK\hF6&n5g5,i!f<;TqŃ>G>41O=<_lYi\xg m҃_ '$]">d0ez)2\ۭuO&"o4ɪAI0vjw5r-%?xBb ƭ6JqQĹQXܢNL8I4MYѥsGUF(z_<,peJ*d $6&,֓3J>ϪwpF8mBDSӏ Aa^=6lneb$& cT"#-)9QR$60ʗ7_IOեcuS)Djn6s@9\7*ZT7PeD_1rzfX&w Y6bobAp@v"Q#+pԣ`G_cl2¯'`M!\FN2R' $z.{bE,iGc#-cԤL#K5)G{8wC*(*Ĩȉ[IVƭF5ՂEy7UBT2"RREv9 svl# sD!#+9N@ P] 6lxltHjy&>}QҾwC޴tĵ>73NNi`DH " Z9kd|\2~:Mzv\a &A6%,$dйtâv74)oVu쯾I#61`Cl914DEj;y,Z WQݫv;9ˍOeggP2w-!TVu"1adڧFKw#+ebʙ㞺6ᅣbEB"l M>tNwB|}+yCWN]VXBds G5{]6ӣ1$x#+#+(^Ѷ[œՊue,8#-dR#+;Ҭ5d#(ygq secY}~xa70xh~5 Onl23:VPeSuW<}( 8eN#(E@dm%#+4WwJ%1"or#(9r(ݹ#+`oG@fQzݣsaqݞ:ӭBOXP3hOSD0CY"aY  Bsy3Cb5TJ'W~Ks=dp17t=M/ h5dIT) `#(#(>ߎhe.DMe:5ٹ~ߡb΢o1b^N#D#( /@D~>{灃,I?pL!I(\_kZ:T&DW9\X1dO`WbBSdt}!}}\j9Cyz;5I;sh#(DD?#-]ąW)ʹh,_bTEESRtVBԃ=IZ9?$S~m/)CNF2gL3z^̶Fsc{1)% AT ڀKӒSMnI#-+/-=9՗BOA^>H6K%-Q+ί^IƝ9>@ogU 2z - .!j}y-'Pw]6./p&y PA9S7 }k +I*AyQ.cgqW No>*׸C-AubSgT6]" N">nᷣ~2M.z59Ҹ#+Ju#_o{ko&#PQ*5xA 4T#!#nRwǏz(U)n1IOL#-dXȔ9 <7?fhơ"?IPZ( |~uf@ѧu9yʢɇoPqD}.m&f"N$Xd "Bhc'#`\[%(zb}UU2[gkL7cСM.JT HPQC(m?Ux.E|]H8f)ҜfRJ-y$;!'wLޜT#(a0Ln%Y2m\ub)ΎP9#(28W7=NJxb^SW/Fй\E¢^V"L; /g/{Av|/#(>ksƭcSo6}۵Z#(AG|=j#(@G?Hs[u,٥DՏA9+}(4ٖ4#(/EnPaߥ#(2G q$MdB}#+;U!ܥs+~CÏOz$uITO[3/yw#c#zIB]~6OKB9Ns_Ʌg"Цf|Ns:Lb=2XJ3% l)#8^(}v˫ 2ńƥӳ0EwK?!c#+_؎6&*8B/Bwu*U%J.Nz^tX|D<;YjTFUpxwd]pNs1SYFWt\TIy^U'~mQp>вk(t@}>7"=<+M*4]꾘uy0 [ThRo?ݱ0Zt=Fm}IJ2?;@/7B ?L Z}&qn3QJI\;*zyɼyѓ V{?W]>~N6S|]A^=7tӟ,|+ΕTQ=6#*O'5\D,gu:~91?SÆOla9Lo<_ʻ[6KĻB;||@z{j&7\ժeerVSD){f6K^\63l_ZN xvz̄';Rkʉ|FӲ?aIsӊ;5Nqo=Bݜov"O)_}9[:GfqPnc$?&e|QOeHmi\omvt\Ep'Pe) ɋúwKXn 8gy~m>h+PM[uEwJ/6la}pq5=t ꭮0 =xW|Pjv)jub6=b3'$--m%ꞦSZ0+e_x*RY. M2&?u.GO#(XŽ܌Eu7lAbdc|w#+#-P!}5EH%06z|9M|{V96ū*x@]>ە&n q6PjmϬ.qXAvctt08wr,*^#-J$(P@$3A ı>#+,sF11PԘ 6;/JO jarz'ͷTEBĸƊp8WmN1X%# 7mRԧ܄'#+"6L yr@\EOCesBoNNy8_wx1}ڪH*uIP mUXk6`62I=:qg4yT9)ёҖ;\҅5TdzX,HN-Eߖv}um`DiO#(m#+L#(`+RUoQEΫr#(e@]K sNȅC#+OV5r["Cx+髃*•~SAgCC#(ts}C㾭*RV1дQow.Ia^'05BLM|'{Ѓiv?Xs *]p$"q!{+@Тx2T]$j[52#-VCT!/'έ :UQ VI;7W.ˊ$azKHR?7?xzC''k}2#}wSwG#+jܼwrvKG)AJfb1 )DJPi k<>=u@#(#(-PP)E01xm9'k<,2_q^*&je?-:&C2*k !m\o18mjȼ#+bs2!1 o_ESN>spCoZƥyD*cYUff#-꒕eŀ -#({*QzFTQ++*%rroxnDnPiro{T;7L,&1fe7qb`֩Wi[;s;2`?T#+#-r'"ۭpD: :l:sG;zksf߂ !Jnڐ6:_Ky;#+`?"P3ELו+SnnE޾9oW^cSse *LBe,3ǢeQsRH4uo3fjO&i z,^0D,MG|V'W h۹!9g##! \Rà@n}5ĠQxηq( w3\^Rɬ*["H<ͷ]4--+T_t7ql[Jt?Yr6ܒ]F~|mNbc&CVf5E[;C-,ue&Db4yQtwAǧ\x.c[iy/7ע3iʁtF_yiG\mpy?$u {V3FusO7d#-%~No8J{'rI&IY~g4$Q)[e9BJjYemUG!V,85%%|n1=*Kӡ?zam2.yP sxxY%%K:xu#+Sl #-v_Łm,GzvYd̃9y;Jn+X&`30AUȽeeG9H̍ߖQʪb"͌(]P#+);5oL&D(}#i!aXGLSNOT㧹8.c@LZoRtiwg(GXbI#+_=\k?1#+WClW#+ǢaL!(Mj3=~Z]?#o0P#h0Ad%`k^E =7&Ҟ[6a!<,}.i(s#3L񗞵`*)L'諩<^M7iVT|BjtIHU#(6C7gk\#+ɽC}ߏ7l.GmL*I<0#uVF ʬ ڪp4qҟX no4hZyG Q&2LQ9zZ#(Gx챁ցpM1LT.8]z7E#+#-|5 )bU<ؽ3Tlh@i>n6i{AC k#+:o_鹾t;: agÏ֧[rnlc5#+zYRF}vY#(:A8K`)SjUH8Oh &+DžwL,w~W0lvl)65-'2\nwLks,$T ȩg̾#+,nL9>pzccTSSb1BRAq)=@WLڶ-7 5ϐko7~Aq{E"O1䂪*ZD#-A,@Gһ>qL qKU[c#(?SSQu%Gjd#-ub ԱZgC9\!"2,}KI*#~W(!k#+Z#({^gʱg[8#-bӖrT&%g-#+b܂Hl{{`֘mQ | [#(}3ZmCԋȎ֍jQy14=Q GdDtuW9,.O'8ظ `C”yuK~ (߿׉T[@| X#+ 7>{<8,5hGޙ#-nSǣһk*:惃 [6dDgsrxf#(wzʃW/?>|DUw{Q*Tռw (ws0X*$HUĔc %{8co#+og @ST R'01W쯿@|0;#(5$?(:,D2Ers =wvbQenRcqAlc?fǷ۝ohT#-?ra}M¦ m;Αv!^fo6H%#-|;1Q#-< TلжN0kXu{A\~4Au#-X;]'Pͅ\+6#(:?c@}f!:N_W$pܷOa~ u=\ LRTwDѸv(`/I,2_;8jE4#+pI#~ W6$"Dqؚs#-Q.y!QHi4%d SUf<˒puNq˭b@eglTo?ez˹7R\081AB#-D8> o{ R,=^ 0s9/#fDu*ƱԶDŁ%Upl-?"OAn#(a}\5w?god2K̤{0`b@Ր Y1d/p2z@#(3&6#5y.մ%'ヰ;{m l|40 C$z4S?:Z+ϝqoFG#+13;em3"H>V yRR}#(*@zD} ]J/|}>2_)-ߵ#+s#-Xc".PlNV=? &?ljٟzY8\QDDb;CѴJ0Rռd8||NH *P1ƝA%S.=ꝁ4E88#+.\yŏLajv}L^ԣF$@Ż$#-B]ۺJI!2V)ytn\xi)ǃπٯpl#+^R2 o8bc#+3q{,wbY%aTZZ"H#(#(,.#(w@!#-L"!eч̭__$5C"*Ԧr}w N(uve%Bp P1M;)zY.sI;RB[U^2[%܍YHSR̒@RG#-hLddh M$gi Xb7YBs*CY:kdI#(c1d􅮔]L2#"k}__~^(0?_-;#oƺzMђ&$~]2,5~*;iHtM![YZ2'8D.d妐N$L#+LTk.d`R^nV`df2nu`Xj>8MF#6m #.>ʂH! #(} @&8P#Q0ޏ^S>|w췸\9?^Λlr3DPVؕZ#.%%"ûܟr>4Δ h~9w، f+6I۷+.22BPAiNdNWz5B)6 'OqmgwB#AT:Jk;tL|̼J'.L.j l(PaPQ$S_E1\y=؉A,Кóϔ9AV#-WNJnh湠Ƞ$/vu>k'o'_]z }=`_#*O ?cT\bBS~S٤b/;>x#8  BQCF{dB b#+#-s L4M|#(@]`) ?-x`Ċ#(!|{Y o>+=*(W[[: (۴ȱ,by̾R|s+ųa/a Hs}-Npӈ~9EՌ쟈]{7pAެ{;I8##+χbL&KF y>80FǑ3#+YS*Zc=ڄCT$I=X9z="Xw*Ĥ_F9!ܝߡAjXO:RFF$Jm j#-G,L< #(pOGP'<Nre_SCA#(+x97Bc_ЮbCqі*#(zG7~*b#`h=~?/HY֊uPυcp S>cQnS_B ngFBN#-}ꘘ+}KY t~Vgv|ʯctlچjæӐyl'X9ː8CGI(a]^-)%YV"R>QCeLH`νy8D)Q8kPLJO_!#TJ^|ݶZ0fŹfEzLyԛoE2e + |zB -z;MBĤJ(~΃veKRDWw%|zR'A3':s#+ NXwdo@d5U(wcяo۔1R5:~ .0rOE?e#-qcJ0#+cWN6kH/WoiIG#(vOQ'|?!Qئ#-t bTK|Ң[$#+L4C.Gk*{c<mr67tDMw\(mg])$3]^Sοm߷\w!exyg~aO…)BaBѫ Om[.,frw>_B?{ƀO[?<={}2ITT8MX*0La 0^b*$0l7Zԅ#-Z51 fTpL^r 2JzH7|e,6f(_bmzR;H۵BN&3b7?oɕ#-ސ̏cŁTgXz2C:dH>e*mC5W%,cI߰aD+ܠFKV0\###T|Q̷ Lk8z1* B |}p=_xw=Rϒ"Y..#-c3t"@9y#(ˆBѻx;#(v'R Y.L-uqSb=*sadH (d6cvOj#+|pgjQ6q=fA0U B!́s6ϣsj&rtbQx'gZN'!Uʛ*#-%|~[^ERD҂v1"m0#-1݉9D|s5f ӻUX!2O&?*˵up/G0Z1p>FZSF>941{="tɳ.$@>֗SP#-ǧ|]Q:`#(QoPI@w[#( oܹۅHE%C:^{q`BdmRAW CPNh\@"Ъzt X 0#!VlA'(Ls9 NΰoʦwmjcNjz(#+אݲ#(5#(˲(6#(Cpsćg0.'I(6ȪJ-#+p\ЅB)C`Ul?/چF?lFG.$XdG=6Bz;S ,Bb%Pitɠm6՘=#O@^X=-FVp'!`3~@zKxQZ=zK jŰ)p ݃gV~!EXp,#|P60~O>H ["]R yPb_,L== Sfu/JnΎ] 6)$+:z0nV?poI> DA7\D$5IDŮwN +KZn~[WڛapT ?8#+j:U,dPPÆ tn3)oꩵ}|v68PvSfOL=z'yS8PGʎy5l*Weh.h:#+87#(P{Kv|@?"~$-"k@ǐ|6raSYy yafpw>{N 2l?&*ٚi5IQz*Nҡb0IĴ;ó|G_m@FƠD,"J@Sz#&W .3>kYvR-$`9-$aGJ,~/5_(A?ңy˗5pTn? ӟ'sZ!#+v b#@yκf['ݰJdʰxɑ#(Dt&cNHB:xjai*f)d YS?jC5!#-? caj1ٴ,b!V.$)1vNVq Vn#+يhF {j#+Dq+Դi*pob@o231.i?љ`$fWVk^;>DWj:X( //痂&@2I'*,]6~A@ n"H@* hZKHN-Nlw(~8,w ov[QyDWҀ%s]>}zO5pvG9i':zQ XX* !LjH A_sAJ8axTj#(,!2$R#-Oǃ`}^DXyT2U4;k.`4e̔\D<|j] v`#-uchsmbI.]&Rp7!R88h~u6\G8jj23uK8Sj|j1Oy׃Fad5ػ ΧmA`#-#(әA_XD)ֱm.RwAȥ#(u/7K湽gw)3Y wV{ p`:s]EkaA~Ώz"#-@<0O9bWyL%pn: #UD@JO[l&TQ~1 TzȆ#+ýo9z]ک$#(`o/ Hi_ZrVqP(T*7Eێb5\zNW(s#OZmɑ#5D@o*m=T-"`ZAP> ;g XSUHʔTR`j#(t#-ȟ?NnYZ;LE^Kn}U<^~~A69#+"7MMAχG|d\s4{Y39dx4ܞ`Ǝ9 ʸc0&LH)Q9Q fr~{E:ncnoxGٜ3_/ m @ӦɌNr\%(I#(B^HGG&h$u@b3PIPDpHH{#+Q-9}\ fk0Kϝʖ>}J%eF*j#-7 B@ }|?Sjo>_>ҽ6#4)#-ޖ?6xL?,=G#+33'A#(}l*WSqdDɔ< T_sp_|F<`旃+ʪ`` Áf߄ 1~z &'㑼m?(s{Ģ4R$`F6vzkI(}N(a0l0YXK^QX2md&弳au$F;Zm*.;_^x~Pwb4G$0zQ8aF$48-&y^V0zU+R6#O1pFg!aX#-; _#|džeoo*i\ s`>b9pԪZ#(&ks\lO-|~wuyj_^t#(eXD$UP2hS"f!bA+Q Oe&~)%jo\dy_C})YK]fiTK#gT+STѯoۡNY/`oB؃@ 'cHONr;j& f,B8{zwvNGf;TےxKZ(mAèq3Ӱb Qȴi!ǥGƁfwF 4ⷐBdb#- }']0P:Wp,bC#-8ME棿ʹ_|&(ۀsCXF:%ML޵F7Lok:H%6%6x9li86Fhh6ǖ\ aLltՎDJ($4ihcocx.Pjs҈0m#+^fPg?>mBat@9ܘ!A!LVSIL`tGg׃G2Yne @|Dp­6'ÿ7 tV..8j 28ӆA]#Qw>G94u]F(lp *K~vVCLJ8^;":f蘦b`t#+qH7"TCh$s1dT\e~aɸj)XV9g>#-Kd\dV#]og7&6nR\00Sfs6DLN='wƩPZqߓ "(1#4&0A N{Nd`3b't6tfQH=oiX303(lh"q7؇\ DR7k9e#-Sm#+{S{|awnJ8ˑ4QT1Is١]\CXCjKį쬓.fb44!;{Dc_ 6n,$#(ݷA'F`FO#(Xω^IFSfaS!jmfiɃ]}ZfI#b50nzEf%Ң8Ⱥ[qAE! Ɖn17uf3+`w'#Bi=9Ʒ78aofz04I=/"r*X,SQ@BQ ;eQCPR 4Ô#+[)OG}L?U$M"oN )DUFIH#(>p3]h6IFv:~x$b5v)@b܊ChF#({`}I Cq)@21K+1(e]\ǤPG9i/DQ < `.{r*&ERY߱|-oUWjŪֳA!?FLz0#(TT8D>qҏem^)-֠0k#+aM#A`8#(lidqy*s5EEwoܯSoSraIywrs\~6sttwW74cO%!׾A]JTf|HBD!V*DEae>'dH7H#+X"x#-ǰ=mE+l*+;CJbp8l?OwŴł#(.fnSLYE7bc$xMDTirX@Ć=P5u.þ=T#C}9Ҟ~&e0xdy#k^#(YX#+IkIt }=C]jEh,6= H RU^@9~U5m`A1,;l[h6沢#-_=RN{޲bygKn( Q"0)&rqD:DXa#-U\)R(>gۥZ:#+X0#+ݟuѲʩQQL(MԔ#+E?޽VcfՋ[ZIR-Ŧҵf4&lU&#+*4)A#-O#I|ӍyRtCo2"$$y{l u'#+d59ڬw\!VC,ULB#r!A0NUT0rbvbew 0Jp!H膲,&3$i-)"pmD 3&, 1JU{꣼A۴^Ns!QUC&ݨ$[jYQ&"P N+#͆hY(U)M($e;T(22 ! 5Fۛ%rffQL[EnTEMd`v1` Jh!m8>]#kk>vM4m_+˖;RAO#+|$=ww7]byFHY_/`J`1U`tFweB0c4B!E0*!_3ۅ9豊4hd]`?!5} ,p@錁~;޹j]c/괧:>ir#(A#+*t{M=hzc1N),8%(je#+Ou *~ `ZpĘxt&!0Mo79udG]G+l/<v _)f3NG{w'xC}nۜU */K8:OA$0~`JF'|{:xLk8f[vn\&2prռ9Cﹴa#(?.}A#(2Cq YΨZFS#+3R>3 ωz;ZҔ$̭0H<J8U8giblS4@ [ְ\d   >Ғ@z(#(N#-S [|| ޒ]cSaQiS;,{@#+du5MWDT2*+ђO.\z!#-5$<AV1_KK@PhU fa4P @#l)4f]E~&RfAbM&m?iRx"J7e{?˔/?^BvK/ѻi7ns#Q3q6gVYhSk5QƬW$A@aԓ](>-& Zqێ㎱\}g /w٤m*a\>!]N%^怼ZB2vWl7< z M[sy65p#-l`[ű|bDDbRRnHJ #-A @@cw71{xl.|CSG͇^϶Bd7OI%5@o}5fT:pA2:!ܣsm!S_p%Ԣ3B.hMjERP:z|f$k@,O/W_\Mzʷ#-GLhl(=r5Dndfm6>5 Em:( B,0C`GjMd_m3aul|sb9ȉ`= ˳#-Eվ].T.h={n#+n^ 9rIvɹNU(,b1d;;vХ&`;,u7#(J."0A)HA`xb!2&ٰ]M[bMrʏm56[;xu%2^E1xU_!hKLvVY y ${u%tsu/ePmTLFBgk 1T48S'W6O#-bl72nhUA幐V)ݒD}_cA[6y̪I4r]vq$6b($P",##- kfM]r#8jÊ|Ϩ\Pj;2;Զ!m={lXLOmG#+YXTנcX0,__j>p^y]x_FN]MRw,~ޞsElh9RI$*jA$Y#(E:UN+Slwhb,raqN9mbT F^Ȩ"d3%N1G29sDJa;\#A@CS,`"~)R1FYFqT#+B$#(lR []zzx0ISW<X2TH;;7.g_@Cx-PP*jb=rLKBcrVhLx#(DO v8CLKF``fa#+mcHKH#(&TQ2k0#cjjdgd`S7 !=io>M6p'~M1Topm.@r؝CD+gLz\VQI=jg] wS8`ioR]k 9c3`bOوǣPns8>rN2n@D*"$dB0Xi~FNOGkԳQ6(،wa|c ) p.pE94Y$%}aPVNz[>εL/d3v=U< ^BRZ9mr@fiJW}H&^8'(띰qK;# S<#b(mQ'_*(:%J[ilքRo|A.jmef0C]G̈۾6M˄" dJiCTp$90; 92o[A9C#&7CgA)#(XMX4!>;Ѳ{`ps @r%DC hdBKT2$*1HuD7]#f J9YM "c6FJA9|k2&N(gf/0Ks!T#-HCKä`82sa9Lpq 2#-\oʃ `"4"(^("qxB`[a̸jg>]½Z#d4!{n:z/Di.ca_I;Q}}R&l"HOP2zAWHM4M$HF$I M2IDF\lbŰ`=PBn q1QLD7ln8E%$ifV#-Gy9cc/P61$= y7L'U)Tlʃ B/}qmcQ?M*jeg_ A`>V@~V~Z%*Z6\mĖ-Tk^*6ܵըo[ƶ+mA!C@|93BO@jYBH}l{_j#0BH%2e,ڙfILblZL?LZC-4C%6%#-Mi۔2kI$S6B123 B*bR?ull"dFS15),&&a JPP*how|>?Wnp">`1 Lf"z-ṡ)hJJJf^SY9c!Ē߻vBLXX PEao<@͢HTgAq7nf.nq_C΍ڽw5ВL ZSC/Z313'!}/l@aV1$f믵bcPڍ$6VJŒRm2FK/`z(RpaD1iY25VX|z#-I_Lrjd[86;\6^HwrCq:J8 GH҇t&d"!UEOez[ k*Tx^>i"mG:P;1I㷟svwrW$P!ѻNh'=@BWf1}5Xnލ!d!viso2@|C,=%@!E3+aK%Rφ F@ցM,<[mEI_62p$%Lgq߃<|Pt0t/n];?X@`#+PXNº+p'2h3YtIRS3#+*p"O:21GjFC${3ٚPXy$cziսWY]f9/:E\2lmY!ѣQEMKÊְƩTl[rL›Zh4]ՅXq uˤA97HP#~#(ÏL!Afc5G|B)őuS-3ѳ`6m5KgR7e;Il=SlS0ӎ.w^ \lh5{F$fq0PFpBmemqu+͛v9 2 LTQC3Ljdy@ntMUe9#VJ`1<#(D\4iWjb`W.av:W~\l;c|a\:%֣xr cg)0ìMLo^7d!H;K;DzuJ_*Xeu)SEd6QX9CszPwڈxtqe9^ȥ^uQSaH $n#-m=Uٽz8 [A;-1#=n$%%iȝQoX8$׉˱TU#-5av$lg0i3qD}K5Jvz3ƙՌ#dDž+F(i?C3B61lnvZ+#$ݱi#-ftʘc],҉F $K64P`QiZ4ݏMBGNcugYK\Ec`1iP 1f5W3o P[2.ThqKҷMD&`F:U y)nmellq%p!îDqOӒrS^zUֈE3>ЈȒ\7$h'u#+P^nВDǥ[{l֢f}^XlZ,)ٞ/"nLJ&H$,6$;lΏN-Ԉ8ʗ1Sd"SbML`ihm]NpTeLZ.}KAf鍞֟4N" d,X.skre~7#-M+bCy,]PaSC#+Qh#(`Kтim7]!/CIlei:a[@͕D6_ )֍^' p@D;qQ7HC`A7h6#+ 'eBTPLb4H!#+'>$ ԃn0#-x<:4ɖ`[j a#+Ƙ&H[%!Rr#-XZUfi"00%;\;taEtr,P6O"g%旽M #+zT7@&-9\&fR{\ӳ8652'8~Y+_Mf:0iz8D PS(3323k 8 &P/Ob;q eʱ4B0}`Di10)b;z$4g.uɖ#(⅌1Xlm##C(C8Kb(#-38aÌP48+&Bp5o Ľ,]+yTD88B fbX]MAr]#\.Ӄ,}اsvH -7`@8xj+F#0qͤҁv7ͥhF[v+-#-r#+yřn!B`G7c48Լ\H S:еޭۧ;\5ȓZ6 B#-!H!C`^qB@0X |=])#+(9-#-LА4M(~_H1C~0=0:~p#-Yмl.vb]ٗ7].,FK G8yQ9Pfവ=cڐAb800LqL.V.e`LJ$ vC`~,r#(S`}e7\\&*?#-a_;"@6wY#-2L>j#+d-GJ qPVքYb{G/Mj]+|V/Kze*]e)d#+0#-#-ᙢ aR&+7?#-ݻ)ީDVHmOzYᙏiC^[|Q Aӫ^gjʈ Jk#+hi7itatKڻXE` %ΰ;4T*v}P![N 39̴V%I*,Vnj)n#->欴XLa8b?W[3㝌Ap0"g#+/2SlD@Z9Yr&Osvz;%a4q=5:mu;V]`1#+[:AK#(ݺ2"d rCp90&`1!b AK &s3SN72lhb+@A#-#- qpYrg2K~ޯm{JdQb{(=Gt }pAR~{p;'ݠ#-=2 !VzSBQydw-⿜Z6UXִ_RѤM`$P@"87bb#+̱+*PK,j']SuZ7̦0XȡogM8k;fLR@B  I#-vf50Ÿ@,fJ0jN9*mks6-ML(od#(cx2JDH#-щ#++ 1fe°Đ:;õ1;ӹ8l0Z?~f{o'24`T5dvf$T\-je2+!$Cf_uՇi݇-hp~F3y`}%T2r V.8ž#+"(4{8Lu.#(w?cd6B]{P.+! fG*+GCq^ yJ~zxXۉKLr8#(H @/!\is67GZ#(pC34QlCy}xcj"/wQmfR{v$oMmsAY&+yri%-يD,i,ց1nͫ)٨di-m[Tz([ewt ]۷b2զI4IjhM-U9 $X5I"m^-3TR<3I-6(̩#+-m[c<[iuurJmS+՚ uFLKm xMqQ#$O#+DY-я#+e?aY(#(tn\-:vo&X7Bua#+uEld>ϟZ͑$UsrQ5oeZ#-{LԴ4ԥ5R.'_j{+e*Ͷ4,S 4!QvU `]**,km:U:l҅")Œ-̖Һ0jRZVe2M4TC F$Y%RQ)M"jLe2aFV)cdȖF%Y*+EJl(Id1d5fJ%&, IJ)fmj*ȑ2L"֥ɍ&iPV AE2@Jm!kUfji-Eݫ͚bT^ʫZDE I%!-i &zPn6X}q#(;68&~F"'svг٥AzHvCM~tO z!4K#ƺuv-6PLǬp{:+ YEBCy#+ @S28,0)Mz*x,Z<-ʂ_#a#+sj`}9@Jآ)oPTgVe>0 V'}$lȰ`{!!fxaC|&xX^[}PsX4;0?wͪݖ<)`Q}QZJPJ8m@3RiP:;$$WUBܦ#+6*L6QSB/ FЛbIJ)T#(#(+ljm*C+a#-CHPkurM\b|_C}| #(lxאXl#+!514Jlν+@37J~\#(8Mt8uym`uE@#(1s[UĜ#-PPR)bG0R4:*v2&Y(IF5d`#0ŒPT`%Uc7 #-ȈPiV ՎB$Ür0mi!͉D6&b2i5Z-pRA6nxaUՉaqPRoRj`@c΂ IGH6! c3Ӑ #(ǽ#+2-VR4j ?Kwbyo)F^'`ɛ'M;z&N LieJ0+#(&Ē#(7|yI- [',sD =&:pL0/aHc)4& *>t+W\]EorB0+mGu[Bb!bk}nt*ź`WdT%eL+}{13z*BzVf%Zʼ&S?vıO &QqNކ\lFBhl7H[L\S>/w6ɭ)8bvI'bB +@6#+5G ݣۨhnQ,r#-2=8#+[Nw==K>"ui`4#-Pe]z#fefVӃ&z5騌z49*HXQ8~TU e?GVr aMQIjAxSmgLB`0B"l[BSID2&1ړF{w#Jx#Dx,yJM#(Jhl&#֋#-V&if}Q8ˏkNcz=2+!$֛CFԏӡ#.f:j\Nf`E*#+2Tuf#-S%넅y׃k\δ' c0`9͵pnb$QNR'e-b#+e)?4V&/G]:$Ȋخ˘e{mݏt8s]7檓L͹*/ TJ›Un8m%T =؜w=" ӽB:Ay(,#(d')ů2`h@U&**¨2q,<{nX`KjM/;#(AH#-Uuԛ}k&e^u"n:vbW'yONd1K(ĸ\E[eP P&:+R mb׷q*hibNweJ؇/WS))W螗$HU#4mE ZSZthՑp2XԙyaQ[٦+EjFmi4]t\guJlmmȋZ+^F.EѨ /-Z$  DF W4I~Se>ia2뵙ĆP-  1##(|1,X1O R9P6q>(f"|DΜ *B!UGUj{ `NaP\#+ksT"Ui+bӶ_=|g.M O&H1֦k(`^QPCC0%PMIPѠ V"s,XS'CeW\]{i5 #(h`pT#(*( G"h#+mW]mäMdlA! ]H$.h dLM$5&ˉ-'ٖ[oDrkAD8%5so~o6HR!CCĂ"I 2AITD( ** ! ލ0/"0YQizquke>Ԁ܂b u*@1DJ3<C sNgc~Ѫ*D%!$ry( МMYĬNܪ#-@;l-0ڒ"aHW.<ԙҨt!`&=~A9h?-tmaZvG#=uw=C,a"vb#-sTVaqd(E"Wa/٭L1ҤXP3n)#-@L#-JXK0) #+(_âZlBS#- )NWX;Q,:X%mz0-"Q)0LێBD)[ pBa elIl`[Ueѐe}Xgo6ܵHATऊ)DWQ$TC"f3ˆahJdF&0#-zoQ #+1B2k5BbbjLAiԣtʹ#-Ja9aZ,M꡽dXeiϟүfHo'9ErQwl\5sc^{ pQRlb*J^*cypէX*Ѽ"J]Av6#+2FĸdsP) ޟq1 lU,+l5CkKCK킊IL-&tcAAi#(ɇRPr# c5襶yT fs c!Ϯn36i"Mf5㵵vC41%щ_:Pd<+qz!㓒'DyM'5XD,B)"?iTny[&dYUldD7r[hQrJŬcm[$ 1hR"hn@E})AXu#-XXvcXt"D<%;>o~6cs3\P0T) ER`F)n\D0AtɄey^u>w^f |s"c/UPI!'UBaJ7Dd"$ͷ5ͷ_J;QMZd6X؈64&QdMĈmyL)&&Ilo WJRr4SD?[X(RɜUY`#*\>0I6$!2Yc*Tk,`3P aff~-LBB%6c8teڰ) XOjϸwөx>^Y_,UCdƝwCo^ԈBhBѻ=p 6(r1#+ʹ)PP ,"op#(%PçpvBð)iR)(JTƶPmMv5YOi]FF&hm^~ϫw㷳}5X@7(PHϛK`yӲqBaz3q1.lZH=J% h5H?xn^c9WCk|D^D(-CDT`ƖR'#->#(F8[#-$xl#޻ :$I&br(Z[3N/d8%ˈs gx CvHS279+6&Px`Σg4~#-(jct3$%kBHLF#R,نrbFmb!K0#+9$„b JL4R' ^:3zsC3q]He>(q:5Q`eL'a$Ի\؇TKm3:6e(U'#+]@ [M3^UÁ`e%pDX-"A))6i565#,DʋK?mjeSf6F3LVmLKRmbXX-S)e4ITjIZ#+3?+G?N;#+e!4CUNܔB#((TmFڹ[x6#-fMko6MP:ǤᘇFT"ԣ.-7mo_B/A q*2Q m -`Lpg{e:`u.)x߀s#(#+E_dW34':XG~B 0@Q*#+D\%KtExоb<egݷe (2FZq[jC|p$CX4h5~%D0E<dN"5/3hpvU6 fR AՂjܓǙ,kN l49gO0#+ $3h(Łbxv|bt,{?#NŹBid~8y_5W: X=+w2tĖ2 Mt^GF+F@ׇ^mo j1K#!&%cf`^oBNO X#(j.@, gP)#+`m4§`H24τn1f8jCT)"Jь4#-@Z#(0`"BaKSrb$MF p·u44[x6s`#+G.m(4b8cBO P2vlDX0#(֔QGd(G9~NzK֒ĹLj{g\Ck*FsB׺!:ZJ#Tݛ8bTHT 7蹶 AOE5;wD 9(XQ#-J4#+K!) N-#-z=OO/E6*9dcW0}.A"Q#+#-KgW[Ob~)=zB#+v%&aYj'@}&:4#BׂC!&IaX" ,)c)\,Dɶ+E~T7klFmC.x72JE*v%"#QTG&M@PdPĈR*vPm7.2fi hZN'w&9e$BS!4}696v(rr*g3-^0?#-ܓT}qT&˕r"-޴50;_ܐ~;+ti\J~Y~ b*Zb%hh2@jnHcj?TD,bipman#+0,RrMSmqaZ~bћ#$)&@Y7Oם;(F}^ךNoxcnDZx~܉g7M1̑ l|9n_K9J VF%U< )m6zuKo/XhEy#(Vxv)SElEM]w_ֈAۺ41j1anO#-EÌI#(YEģ;r{ht9YnH^ jhLtz4C-N&;C&"_odDtUYM%-nk7^yEmvujt`i#-FUe d:Mۺ$\D9A˨EU0#>˻ lb&+DlZIcU#ZM&{ _)wV1 L^&j@ qbE#Ǝ؛ƅM'7kY&jgjΩ82;b]%#+0 J|qL1)(%2IԪ]j꽅Uji6QJٖj)#ZLmŹmTFH!Ӱ4w ~vcrQsw60=0tnE]VBSQdžێ<\|#^(hD%݂mzSGy^mjp-{Rx-om0l*7P^?o>0aW&9-)z8<3ˋY3љ2Da"e~LIlMr!1ILQs`L;*A#(4߹@1mDҚy%|cVN}#+d<㹷7;Q緂Z'Hykhd&qmc8$nS-KRY{9üCO1UہFpvwd^1"=}?h6c44+R_U \6mta3|o.r;k!>m#+:41mB$r LkdN&pPeQ@8F.lECŁ辖 cш!ԍu#,v;RAV_CG`235Mq*EڣG͢#(iHB;r[[M+iۭ]IK3VVWU\^.Ijj .O9~qxdRk2#d?PfyOC@8=`c9U&-0K2\45Z=7] GcHlK܃,71#ņfr F gg_McᱲdPR 湕g:CeN~( @DLΣ2z#( k/W-t,[TZm4FjM!iQ@$T ; heק v"AдaU{##(8'Nۅ`@Ag`;* C*$6+<p`Fvl/@󗷀]5tZ/|sX-Xp!SGꑢ\&M{kczU ZKoxasweYU-RU"QLKyx"FtBTz˭f6fuj)eYƮ,N%M+']u9흞η#/!TF^mlޔW\mL#O{Cldwo8ZX iC);U6dIU͹Y~iݷ3!7稺(4QX0[0o#-19s<0?_Vvuꛍ"|3PXyOBf[l$ wGvD#+Xi#ˣlzHl趯2KGI<"yS6\|>`iB@Jƿkj6.j[YFȑҪtF^#+xB)Hhv׎7[%WxثM][r̆\mE:KHHʛsNj*dnmמxŢI6> X|ve^zeL9&-Z@4e"E X% O9"0Ը(Aw Ġ(aSΒim&hޮ#-.LX#-jH2{6ڔ'𺨦+b ScQh*-Ze`)&ƙI3TF̖Q #(Q!ƤR7"͑|{1N$fկ^i-&a$'~[.w7NC#+1{6j[4S+E/%6lU_k~kpկ]/nj)n5N-wi)#cmd+wWiJ֕٬Wm6o/ܱS#(>#+!CD#(c4 ]"6HfS(ڔ7|JAƒi]S#(Pȸuuxl[BgH{vt|לi!LC*p1@mhch?#+GRH>üGwuQZƍ cL.~RH1ew2M5 i"f ͩL3$ɷe8#+XGyǯ9NehU퓦 TcS5J.x4`xM#-c*+ G;䶤 q< g9m؂(z=P4q :5q]s4X* ;hV" :0gf;w+!;#+וdTڦgxǣ@ci0SVJ89C`z0S@Rbړm5kHii AlLbAXP#-BHXQ|ם/xQq&$@!3iÌ0* Šf"H@EKD|Jj#+#-#+n#(Z mZ#->牆1#-[qA!&1EZm;؞˼mvl/.[ץV0.ID"N2q0Z8nR@)e0*bTܕqY ќ$0X PDE#-,q#(E6>ZKUK`@zq* #Q,g8J7(hyS,ϻ "-p5}o\qϵ&fq ɓ*Pgrx<@$;DH yPL$P{> NLj'=3C(\Y]t`HGSk9UUDXsƜFL;-]g>A#+85ݺsYw ed6{:>&;w7'[2#(Ј JMS{`g?[T+5}VC֨ji-8 .(y[$EZ HEl,Q/0r+gD䜒AfOql!gdνW^a"Nq$SO`1#(1җ:HU(T*A1#(]J=Ɏ}gqmʐTIB*D!B/.Xxb]zx2W#-QwlJre)&4MV))60x#+6g]َt.Wwn\[ǒ4nܻ̱Ͷ[\ҫhKN)4%gwItٝ+)Stlm9j] Qw6K=p $^;l0=n@lGr#(S D B @v#-}"qNT}tOp*vA,U_'M5ZL0>1yw#-O#-{fӨdQ#(ɬ^we34kywmUhZP,#-` }^Vֽ5jƪХD"='7RPKM:뻩eb&UqF!Vorq""HFmQ o2dA^hR@K`f8A`(B,[U^Hkvgʞnջ%#k*F4#+߽s >*Y׌*ߢ *(M]`6tDUxD@")1[ViJeQ~F7:)1bAYi5F6%_{ߛ t }AAb*9ehTmˆ@?S;+T=1Sr3WwjI&z^qD$b@ T}1%{PeG8@Ȑ3lu76b:^(<ިyZJ#M>]@R`5$Kd!DJ#-TEd" p ؼs]$zx5Tv-B,yͲ(#+XXKEZ@#-Z "JLBKAT'UI$EL"AGZOqŎ쪰jxbS(HK#(ՒCZQP4i-i$MPa iFQFoVE+LfXt#(#-M۷&p8G}ڀRySXcߙ#(z*#-DiDTZƞTa?O F0#(NʡXHhB~(M)k_3QWdXf#+Q!c1E&h_{ o ؝."I!)(Bgji'n_MWsc> hR"<]wzABHUѬx2hnI4`#-$|"# L/7Y~ddj)%Pi}}Uu!;`Ƅ }Z-e4J((E76Ԏ3jLnF>L3NQI&C↍lP~\h(Ӊǝ#(̺A\#+PU aF$KOܝ~~ϴmp{5&fb<5\pcO/s0U>&͎%슇y!#ei߭H٣]M(WÂx#-cU Cz4 " ]W:r$:RI0\40e3ܝ;5r ._{Ù_tQm:.VfG3_eT)$#+@"4ZoFZM%\ZܾYz5JX׵=‹KZҾED_yZvxd/yTL:8O:uj5o'jz8׸sё#(%>6ca*3< x%@$NAQĆhۙGܴ\d@>$4t>>:w6 t}\9t'dP7lH;X/ YLv6iA2c}Uz9:x'^g 3KR{B#0/vR+#+2] "jv$> X7{H "E!Ciz.? z>OIv*/=ࠩ4ijnCYb3/4VKG-%Cַ̳"V ,$ o4#-,\#+@H6ҝn9ѫj*p. k;#+!Z$i.qgX $|_mmCA4{ 2?GgN~ XcrG2%%1ܞtޱTVl-san`'Eł7[ .ȿ\7H˜P7$"&T! #+bl;`Θ~a^.cj;xO4*S!diӎkRQbilٱbmjQ>#+Eh0܇%bcݟ:ZJ)֛h6*רyB&dfS KDZJ4J16&!&͓e շj(!#Cl%˛\YdнL$aKXs#-F-RWJ/2qP8#VBM&jpԚo@Ȉ4Z`c%+u8Ҏ`C(m4#+eۍ#5]EW,乺F7vRQ4J+52TJVٖA6ь0F4Xl0H#+@30i(c{dW($D$RD-WkLp*e5|]ٕ D:&$Tt61fUk—K51ZU]W#oI2.PQ̜LA13"^x TA0T"m#+,-zSӢJ&{g&AkAfʛ7a]3:M6 4hCC-("݂܌5NO9Da%!K#-"%TF l5U!=m5Kj>\(nfdc<n#(FD#(#+6&š" (@Ch*%EQR`F#+/i,!!Gښ$@'uH)LRPJg&+p$޺zGvn[z֒mE DXbAT]!K)Axb q0tx~;g0 EF:bwc#(WS`aX#-:A(#-9T*bI=vB*?Ҿ툣cmҭH+UB0C%#-6#.XJe,~, z滲0b0ى8:qٟi1~XDhXl͵dRanP:[zqd쐋:)0|vW3b)"E24xp$_n)۞1|nE : R@$Ia0^#-jHx!Zyo =/N0UulMy>=[:.ί̏uaڈ7}W䓻gx!<޾ҭ}й4$wq?c(C$I+]$,q{M!)zD6XtXꊅEsuirc@߄uȶZ,qe]%_3F*/2LӶQeTޔp}/_*f5nZU@bad8z1WYUh\L:xw)pjC$iRnME=B8?Iܴ(mS?˦NbqOMToΆQH~L1Ӻo#-ڒ?m잫#:\6Ò= KqeG|~Z%s9]sg8\x=Bv 0dՐk/a^lWyfijc3ItG}Z035ޭlSqf UK7JX:8ߝ pSmc2R>JU 3XgI#H{d ۗ|#+wl6D d"x/m58 LZ#+PRn#-B_s#+25`znr)eHxڊ#+dS|TɧEZ=ޟYbW(⚭].bqq0ZKR> ?=d{n)aļ3MMA^#-8b^_\ $9wi>=lvuhq#-CznCM 虘k[Ӱ4bm䳬jqLفfUIg#(kro:,OE@oXcrmL1:c-m,lƱN6!qd#-NYխ$+N8"6oYc;j}eg^)C6Øot>ؗ޺v/$fx6’bƱ!qHrɛkI$j;y#-xyqRƌ~trhD޷-v[Egsk|z>CL)pU- +rAPlYyQٚǬ.ڏGJ6҈nԫlJ]l[NW6C'JFo3G0{+<]Czc_lz==Hf("/c<_nQeB6ۖZr#+Y„cMUl6.u(0d#-oQe7sO =rGhdsCڟ0Y)O5fg'ȑOAM@(.T/ #+˴ӉxC=]AAg]ȸ$t[ę*ivhCZ$)ap; N;ݩ@͸5V,T9$aJ7{6\ jH×)[u8+x:&O4$344 xʭ%r:Qwm0F C<@(#-^#-r#-$n!@#ѩ#n׷r@P,(B³90tskLM fqD!#(.z%5P%dLe`V5#+(FA6A `심>͏a+'GfÖ?M'BܵN6:1T'2F >#-vBmqScʝK'j1=Q nQt#- DvJe-ʖ]視-E代uk]cb#+7p'0 A6t[ZWrʾy!*bH>mz~8T\##n*jStl>Աx Q$fKxeQ8x|#-wX pf#1na'L\Ve+\W`|Hsdnٷ 1\oo&]qt]Qfɬbޡ/jNv#+sn;{s̾\u+̺[T#-1fLʁު}17G8OPK6dsVժO*0W,)`ijĴ(}M'ƱUϷ2\,T]& /Bk@_2/YwG<=Gl oNd|8a#-7֜m䉰6'g=Jj ,$)Ŝ#+ņ. {6wɜvp BH]BEao$fmr%,)LЈX *ANqc &l8؇@@nP]0Ĺ3 8iѥlva#-wSh>VE.)[H# gcQȹ#+> ǘƗU<D@\Y}=>gh 8`/al2=h>e`c}BmNN]~'ƶU"Fŝ؍_7+Znz7н#KF@J׋Mrp껶w[uyxzUAl[%nmE0D,#(%E_PTZQmͪ6!B010`2*"#-JjArn}6PGggcTvϗݫ&3|"_q^6\Ki~UVsI@5OPvwJx>fˬxRcT&P|Kp vҏP.fiҫne4 3+m@,1K #-A #L Gz j숌N<)LZLM3&IU"UcD0 -k#-0K%V.PRɀILӃ.)+unF;;G^974BCQVkXdreoV h۱M*pU˔u MI_Vt!,/ Z%i=4Stn9ɑfL"2#(#(`2D6YTޮe|3Jɒ$nj8LU:@v{Kz}͊DnK8axm6&ijlNChc]x]g-[&rtC%c!nJB2#+n%48LLayգo[o&K,޼YOZ65#-G:C[5F#-cw rJ2efNJV[#-#+>#NH+gH;L:’&)+BQwE mc KGLgjSTGgm%g ReU[DA EG#-NHSIUc;jHb1ݟPa"28*(_k#-i\nYt[I:½3UP#+v@!S7#2w&7zH1+rqfo.1Z=/𱴔6Z\\gÌ o N#tݛ7w33<؋guN>:1pa8I7j~lMN^%C#('| _R#+Vݛi$U0"BTDD(XhAy꘧2#ڱp ETTkk#- !dLƲj+V4m6c6TXMiPM$TE SPj%"j4LѲl4hZF#+DLj#[k;Z)t`{'Q EDw)΍7+Ov]#+Bo@Mt{m^w$˫h'(,Sm4~#xyPR@Ķ1)!`p~qxcH$"6p7ֆȨ>!I!uF/#_w*e(r? ݽ's} wJ2_K ߀@'8)XDjm}+Va&F+bFr)#-H)T,s #-JP )#-Q*mVK=` Ei7?F]aơҢ SRLDPx9 ؘ[@VbZ@lx9V{_jIיF2MTܿTYљ%`vwJAD( X"1/Eö>L\2,H} H-ld#JE_gaER)")LF1D)!J#1R1mͥ:lG:x*E!Q&I s((C#kՐm#-h ŠRbo@0$G#(L׿04#JU#-I䰐UOca<߻ Hu{?d{t3%D6g=HFB~?^$A;sX23@j2rql+ KB\P _o߰VtZWoO65>F-}sEllw$#l燰~c Ge~*hXGAwm[jGm#+-I=񟞬IRSBt`IK$d`R] [Bz-:-Qi<ꆵBtZOHȵ\1^BD"NtvIIuQ3eKB'|(#-IRf<;!9:KnPRfO5*q!E(Z_L7vImQzcNq $DDRB(&%?Vq$= #-fg_os8*%=#3ud*h1f|[sjqɻ5t؆EYX!̑c#-f6BJfZזSҌ6F~NH5\]>,D<'QUon?g;g١S *`R$ 5^U1͠!J=(lAZ<3i%@3MDA$+.@v9a0#V&#(V3LۥsԱYƩC]!ۧ=#+DtAIDOr`l`RJ"*QMO3d0 P0)mlZEyH#+h͉* o!eGVQb% #,Nwq)dDHn9cZ]j#-3C&NX@l鵙F¡&fA` ^jgnۥA3VEL8#+1 ƙZY BqRv$m8\}10t>2ÂK[vRc>J߸qL5`?.I!!2QCz4e]J$x2kfX|u*b:"\0|;rN1XVaѥ#(xr3V2ethU 5qNT4e# ߝ=RY|F̙>Dk65>Q.-خPqJrF'VTmȥȽ0$(vCmE Z-嬺ԥbF Iƥ{ bׯ)GYh[퉦Q u$=:äK#-LIlXKDAVa xW54D!#+fm+Gt۹X~Ѩ,Yhjg\3@DsםHC2TJkݰ!YHʏ7qp*IɠXE2FčfqNۘR.Tl8}m/RtCo7$" ݿKo0[]Qm#(6$.M'Jh`Cf:){(\aKa@Q.: H~Wes." -yXh>>ͻӋ!Qt0V:61mPF],'qN憐aRaimy"aud֠lŚwwŹ4뇔`VMh~rLDh 6vf(<2M9BH۠]ӀLd{nUAxH);)؍^q##+t1|l(#&B BZ'#:2h%K|#-)頲ˁ=1#+m* w:.$R!&_Zb y$r̋@_-W u^;A/"d=yU$1XM!49}>b+-yUA 29KOe!?]]:bTdZxDc8~LHAL8r2"dV>, ;;d<eEpKf#(饉?3ZWR0!+G9@-CR3r^K\lk 7PޭНp$//$x#Lk辚DZtUK >Ȧ)Ǒ({ ̾)ݬ}yRvtҡ`T%1/V^]^i!(גhr5Tay`! d !D4MJC@3VNg'9wk)#K#+r#(L@H.lmPcbܢo ~(-nYmZQdjLEA/q -*)#+텕j$HtB$vcEP$.#(R[|#+"rXA22#"HB"i{{#(TUzg 2#( Hnq}z,|Fsh/O$0Qg"FD)#+ha48%d(6!b&FM0H#+ (`1ThU'BF.8@Ш2w#(XZP%Fv('acy$¾{&N.M,hjs !'wŒQS0Aϰu#+H*\ b#(K9p2bO6lG,Q>m[]/70EUm<&#("ȅG̓2L`?5*Q=,#-2IU(b, ]Fy;8(j]ʐm$~\2 mYN/tʞ  "s,0 hԪ 2lKBeԟQvrF-A/iYLRJj&1emla*FiEZ߼q$y&j_ہvwr{ny  t\<S^85$ .zrS.AױMB!)ާ]A4 "#(8HfE:m qUI#+ &}e}=U$8(F2ZI #%DMqx1r$kE|$`$-ﮮ3=glm&6 дԶ Ć&,vd&ctVng}j7$R@ZXell\~}($z{ӉHwj)D{[a=MJ27U8%6o> p0:`Y,"޳Rv?`!:N7j·0lV.gN:8._qЭ%& {>(4YB1E8[@%Y-)߭'#(w \@#+O𡣥5-QB4MAdP)Gz]bXEBdd󮢢K]aW˼*^^yz+8jSd-^FɍFV#rI3mnɷ2R0"U#+ݷE|Ǡٞ$4羐 )TdVDbd%ߞ5j-iRdLK,lٵ~?׊VFceFTm)M-޽5TD섥љBSĈSrtgh/Qn"M61f٘i4[RjjDQ:@D"*?x==>G0vbI=#- `phIS_"!d[, -u)*e$){$ߙBF$6ؼg$3Gy!Bl#+:4X*+!j65#-r`?vp#+a,6?88H6mY>ѧf%W-n%le0݁MLc?ϵ&R16H5E%DmU#-m+~%*mEIL,*[~/m#J#-D~0QO:d݄c P&CP|δe#(E.݀ov-u B@^kEBЛSe4~_wo4ǖ$wTD tM}fc@#J̤3It cKvch+eq֬m%I#CCFpl(IP(eOJm4Rf\vwexכT,ޕrT[fnʮks-^]kRP4Bh XH0U(,PIbX"SKdԙe\uo.󵷍E̫-۫u3V]5nju{_7#8D*TBaa6h~lPI8hr&Չ:h+I8 #(I.U]~TAU 53d'T(8ix!%_8#(0Od$lOV ("݌IfN, m}z7r-M#+R57p53F0faS>Eq\^/#&T#+iu,>I/љo/c쒴'ֆ#-*[#-Z(i8&M `VVгJQj }ov#+p`L[ߺfm! D[#'$f\Cl0نLfj(%#({M6hˠ!}ɓ,ϛ'pdLTvC`l(WVi\?|N @8,6p{ k_#+aE8 Nۚ D\sr7@JԒpeRIсf,?*r Wʭmڃp8QC'(YjrK׉F];SG~\ a9QS>Ҩroa!"0CT /m6'$9 F\Lxfj#-㚂22xaܓmBGߠSodC{ag#{s1 or&ǮOl̴4]1#(R}@-#(?_ V⃜#-Epb Ջ'?!)H S+}m}+M/|˂1P*O_oo_?z/vo~ju_o~>?{o|?~j.{#+#(@}C8+WA"!6|P*l XTT!9W;Hfg-U%>9 y]m'$*5a,cLsP\%Cuup#-#< H!نc1cgP+#(O)3OY3/7uԭLiԣRc1* #+`0ZhCՁ5Ww)%HZcc+#;3<]ojTԑ#+L{6Ʒ- :1?`ѨBeh8R4`G N'CKXS)`Xfi憛E Ìަڠ8և`."]?Y]$l!zdzV7FO:$;n(^{: zf2 ;B hY#\d@A8MQO"-èflّk6+UNF/\U 慚o5Sܒ9i1$D3]’r,#-•{>p`T@=8v%^_S o}#(GO)(&86k@V薈qъyDe_O>;I` ${{TGT}}' - book_template_rule = templater_path + ' ' + \ - book_template_path + ' "{0}" > ${{TGT}}' - lyrics_combined_rule = 'cd ' + built_lyrics_path + \ - ' && ${LUALATEX} --shell-escape ' - - scoredata = [] - scores = ctx.path.ant_glob(src_scores + '/*.ly') - for score in scores: - filename = os.path.basename(score.abspath()) - - lyricsfile = os.path.join(src_lyrics, filename.replace('.ly', '.tex')) - lilyfile = filename.replace('.ly', '.pdf') - lily_score_file = '{0}_score.pdf'.format( - lilyfile.replace('.pdf', '')) - lily_midi_file = lilyfile.replace('.pdf', '_score.midi') - target_files = '{0} {1} {2}'.format( - os.path.join(src_scores, lilyfile), - os.path.join(src_scores, lily_score_file), - os.path.join(src_scores, lily_midi_file)) - - score_content = '' - with open(score.abspath(), 'r') as f: - score_content = f.read() - - matches = re.findall('title = "(.*)"', score_content) - score_title = matches[0] - - scoredata.append( - {'title': score_title, - 'score': score.abspath(), - 'lyrics': os.path.abspath(lyricsfile)}) - - ctx.set_group('lilypond') - - # score without lyrics & midi - - ctx( - rule=lilypond_rule, - source=score, - target=target_files, - shell=True - ) - - # score with lyrics - - template_data = { - 'score_file': score.abspath(), - 'lyrics_file': os.path.abspath(lyricsfile) - } - - lyrics_rule = lyrics_template_rule.format(str(template_data)) - built_lyricsfile = os.path.join( - src_lyrics, - filename.replace('.ly', '_built.tex')) - - ctx( - rule=lyrics_rule, - source=lyricsfile, - target=built_lyricsfile, - shell=True - ) - - final_lyrics_path = os.path.join( - built_scores_path, filename.replace('.ly', '_lyrics.pdf')) - - lyrics_combined_rule_final = lyrics_combined_rule + \ - filename.replace('.ly', '_built.tex') + \ - ' && cp ' + filename.replace('.ly', '_built.pdf') + \ - ' ' + final_lyrics_path - - ctx( - rule=lyrics_combined_rule_final, - source=score.relpath() + ' ' + built_lyricsfile, - target=os.path.join( - src_scores, filename.replace('.ly', '_lyrics.pdf')), - shell=True - ) - - # opus - - ctx.set_group('opus') - ctx(source=os.path.join(src_scores, lily_midi_file)) - - # booklet - - template_data = { - 'scores': scoredata, - } - - book_rule = book_template_rule.format(str(template_data)) - built_bookfile = os.path.join(src_lyrics, 'book.tex') - - ctx.set_group('book') - ctx( - rule=book_rule, - source=os.path.relpath(book_template_path), - target=built_bookfile, - shell=True - ) - - final_book_path = os.path.join(built_scores_path, 'book.pdf') - book_combined_rule_final = lyrics_combined_rule + \ - 'book.tex' + \ - ' && cp book.pdf' + \ - ' ' + final_book_path - - book_sources = os.path.relpath(book_template_path) - for score in scoredata: - book_sources = '{0} {1} {2}'.format( - book_sources, - os.path.relpath(score['score']), - os.path.relpath(score['lyrics'])) - - ctx( - rule='{0} && {0}'.format(book_combined_rule_final), - source=book_sources, - target=os.path.join(src_scores, 'book.pdf'), - shell=True - )