Concilio dei topini

Il TeXbook

Topino 106

Ho finito di leggere il TeXbook!

Bugia: ho saltato Appendix G: Generating Boxes from formulas, che spiega l’esatto algoritmo che posiziona ricorsivamente in 2D gli elementi delle formule. È che ero quasi alla fine, dopo due mesi che lo leggo ogni volta che ho tempo, quindi il mio stato mentale era “asha come sono bravo ho letto tutto il manuale di $\TeX$ adesso sono un deep wizard”, e poi arriva questa piccola appendicina nelle ultime pagine supertecnica inutile da sapere. No.

Il TeXbook è un po’ come te lo puoi aspettare leggendo i messaggi di errore di TeX, che anziché lo stile burocratico da compilatore tipo “linea 28:15: errore: comando di tipo 7 non supportato nel contesto corrente”, prova a fare l’amicone «Deh amico, questa macro non è definita, ne vuoi provà n’altra? Oh se vuoi ci metto io questa roba qui se no il TeX si incasina di brutto». Solo che poi fa la fine dell’amicone cioè quando queste diagnostiche super-amichevoli sbucano da sotto 50 strati di LaTeX non si capisce niente e sembrano una presa per il culo, e infatti anche mentre leggevo il TeXbook a volte mi mancava un manuale di riferimento moderno standard, che dice le cose in modo rigoroso, perché spiegazioni del tipo “Eh sì e quindi TeX espande una cosa e poi espande quest’altra finché serve”, cavolo vuol dire finché serve? Perché quel token non è stato mangiato? Perché quell’altro sì, dove cavolo è sparito? Se la condizione dell’\if è vera e nell’espansione sbuca un \fi, questo conta come fine dell’\if che l’ha prodotto? O conta il \fi pre-espansione? (La prima, in base al criterio che è più illeggibile, ma non mi sento ancora pronto a mettere la mano sul fuoco per nessun aspetto di TeX.)

La lettura del TeXbook soddisfa anche tutte le aspettative di cripticità e mistero che si possono ottenere da un macroprocessore così sofisticato. Il primo sito che scrissi (non questo blog) era generato dal macroprocessore di UNIX, m4, e anche se ero stato molto ordinato nello scrivere il codice iniziale, le volte che dovevo fare una modifica non ci capivo niente e mi chiedevo come facessi da giovane a scrivere certa roba, anche se alla fine m4 è molto di base e non fa niente di complicato. Ma questa cosa l’ho fatta perché a sedicianni ero scemo e ci sono infiniti metodi migliori per generare un sito statico, invece TeX è un ciappo del ’78 che non puoi ancora oggi sostituire con niente se vuoi scrivere un libro con più di due formule. Cioè, ci sono vari programmi alternativi, ma nessuno funziona davvero così bene, nessuno fa davvero tutto.

LaTeX da un po’ di anni ha un suo “linguaggio” di basso livello, expl3, che somiglia di più a un sistema di programmazione moderno, con i tipi, poche regole rigide che una persona può sperare di ricordare e un manuale di riferimento completo. I tipi non sono “intero”, “stringa” etc. ma “espandi una volta”, “espandi tipo X”, “espandi tipo E”, “non espandere”, “token sequenza di controllo”, insomma è pur sempre un macroprocessore, ok? Perché comunque tutta questa cosa è ancora implementata in TeX. Credo che il loro (LORO, le figure misteriose che controllano LaTeX) piano sia implementare tutto con questo insieme di macro e poi sfilarci TeX da sotto per liberarsene una volta per tutte e poter avere finalmente messaggi di errore comprensibili. Quindi anche LORO trovano TeX eccessivamente criptico. Tempo previsto all’obiettivo: vent’anni da ogni particolare momento in poi.

Breve intermezzo di cose utili: se vuoi fare qualcosa che suona implementativo in LaTeX, puoi accedere al mitico linguaggio sensato nascosto dentro LaTeX scrivendo \ExplSyntaxOn codice… \ExplSyntaxOff, e il manuale si tira fuori con “texdoc source3” da terminale. Ci sono persino le espressioni aritmetiche! Con i numeri reali!!!

Tornando allo stile del TeXbook, perché il TeXbook c’ha stile, è un libro all’americana, cioè ti prende per mano e ti accompagna come un insegnante materno, cercando di far sembrare semplici e divertenti le cose, con la periodica battuta che non fa ridere nemmeno mio nonno che ne fa una questione d’orgoglio di raccontare solo un’accurata selezione di barzellete che non hanno mai fatto ridere nessuno e però io ho riso quindi devo stare zitto. Anzi, c’è proprio scritto nell’introduzione, “questo libro contiene JOKES”, tutto maiuscolo, “però non si capiscono granché”. (Il fatto che l’Indice sia l’appendice I e “Joining the TeX community” sia la J dovrebbe farmi ridere? Eh? Perché ho riso cristo??) Inoltre gli esercizi sono sparsi in mezzo al testo ogni volta che sarebbe il momento di fare un esercizio per ricordarsi le cose prima di andare avanti a leggere, con tutte le soluzioni in appendice, e questo mi aiuta molto a studiare efficientemente.

Ho imparato davvero qualcosa di utile slurpandomi tutto un manuale senza scrivere manco un prova con il codice? Beh intanto mi piace leggere i manuali dei linguaggi di programmazione, mi è sempre piaciuto fin dalla più tenera pubertà quindi sticazzi. Dunque vediamo. Ho sicuramente imparato un sacco di cose su come usare TeX che adesso non saprei elencare ma che sicuramente mi torneranno utili la prossima volta che mi serve. Di più specifico ho imparato \looseness, se in un paragrafo metti \looseness=1, TeX cerca di farlo venire da una riga in più rispetto al solito. Qualsiasi deltarighe (anche negativo) può essere specificato, però TeX si limita a fare del suo meglio, non è un ordine. Poi c’era \emergencystretch che ha a sempre a che fare con l’incastrare paragrafi quando proprio ti servirebbe che occupassero qualcosa in più o in meno, permette di violare le regole sulle spaziature però non ricordo come si usa. Questi due comandi mi sono rimasti in mente perché suonano sgami ma scommetto che in realtà non li userò mai.

Sì poi le regole sui gruppi. Io proprio non avevo idea che in TeX ci fossero le variabili locali, infatti mi chiedevo come cavolo fanno a tener dietro al codice di LaTeX con tutte le macro che vanno in conflitto, invece ogni volta che apri un nuovo livello di graffe, di default qualsiasi cosa fai all’interno delle graffe rimane locale, sia definizioni di macro che assegnamenti di variabili. Però questa cosa non è implementata con uno stack; o meglio, non c’è uno stack di namespaces, che cresce aprendo le graffe, ma un save stack per ogni livello di graffe, nel quale vengono scritti gli assegnamenti da fare per ripristinare il valore precedente delle variabili preesistenti dopo la chiusura del gruppo. Inoltre, essendo un’unico stack per tutte le variabili, se alterno assegnamenti globali a locali sulla stessa variabile, lo stack continua a crescere. AAARGH, però immagino sia più efficiente così.

E le tecniche per fare i loop e in generale le macro che non capisci come fanno a succhiarsi le cose nel modo giusto e sembrano magiche, a non conoscere bene TeX pensavo “per fare queste cose bisogna scrivere un parser apposta, come si fa a programmarle con TeX?”. La triste realtà è che a volte bisogna scrivere il parser per davvero, senza trucchi furbi, in TeX, e non è bello da vedere. Però è raro (credo?). In generale si usa un po’ di macroprocessing standard con aggiunte tre primitive che suonano molto bare, cioè uno spera di scoprire il modo truccoso di usare le macro per fare il parsing, e invece ci sono questi comandi palesemente aggiunti apposta come delle toppe per riuscire a incastrare le cose nel linguaggio. Ok, non sono così brutti, mantegono tutta la parsimonia che è possibile mantenere quando aggiungi cose a TeX.

Vediamoli: il più decente e \futurelet. Il \let normale, \let\a\b, rende la definizione di \a uguale alla definizione di \b; funziona anche \let\a<carattere>. \futurelet fa la stessa cosa, però si mangia tre token: \futurelet\a\b\c è come fare \let\a\c seguito da \b. Quindi se lo metto in fondo a una macro omettendo il terzo argomento, \c, posso succhiarmi il token successivo salvandomelo dentro \a, e poi far espandere la macro \b che si maneggia il token con comodo. In questo modo posso leggere i token ricorsivamente se serve. Un comando un po’ meno elegante è \afterassignment\x, che rifà comparire \x dopo il prossimo assegnamento di variabile. E infine il più a cazzo duro è \aftergroup\x, che teletrasporta \x a dopo la chiusura del livello corrente di graffe, e puoi invocarlo quante volte vuoi (sempre un token alla volta). In un esempio c’era letteralmente tutto il codice dentro a un gruppo con ogni token preceduto da \aftergroup per fare una ricorsione espandibile, cioè definire una macro che usa un loop in modo che il loop venga eseguito durante la definizione e non ogni volta che richiami la macro. E se il loop gira più di 150 volte finisci lo stack di \aftergroup.

Quindi il punto è sempre cambiare l’ordine temporale dell’espansione, visto che TeX per non usare memoria espande ed esegue il più greedy possibile e appena può spara fuori la roba a cui sta lavorando e se la scorda. Il comando che non considero baro è \expandafter\a\b, che espande prima \b e poi \a, perché ci sta dai con le macro, puoi anche fare \expandafter\expandafter, suona sufficientemente generico e macroso.

Infine la cosa più utile di tutte sono le variabili di debug, con \tracing<qualcosa>=1 si può far loggare a TeX tutto quello che fa in estremo dettaglio.

Vi racconto come mi è andato il primo utilizzo della cosa più utile di tutte. Avevo preparato un file di LaTeX usando un certo pacchetto che riordina pezzi del testo, e non compilava con i soliti messaggi di errore profondi e imperscrutabili. Facendo cose a caso, incluso andare a pocciare il codice del pacchetto, constatare che non funziona lo stesso, ctrl-zetare i pocci, e constatare che mo’ funziona e boh, alla fine l’ho spuntata. Poi ho avuto la pessima idea di voler compilare lo stesso file su un’altro computer con la stessa versione di LaTeX, e sono risbucati gli errori. Ma a quel punto, forte delle mie letture, ho comandato \tracingall=1 e mi son fatto scrivere tutto nel log! E infatti prova8.log continuava a crescere all’infinito intasando il disco! Ok, ok, \tracingall è troppo, a me è sufficiente \tracingmacros che fa solo vedere ogni macro che espande che argomenti ci stanno arrivando dentro. Risultato: “prova8.log occupa 76 MB, se sicuro di volerlo aprire?” Ok, va bene, sono stupido: basta che metto \tracingmacros=1 all’interno di un gruppo che circonda la parte con l’errore, così viene solo il log di quella parte. 26 MB di prova8.log. A questo punto mi sono arreso, la prossima settimana riattacco quella compilazione provando a fare cose a caso, giustamente le tecniche Monte Carlo scalano bene.

Visto che in realtà nessuno usa TeX circa da quando esiste perché tutti usano LaTeX che è stato creato subito dopo, e ogni volta che leggi gli esempi di LaTeX c’è scritto di non usare le cavolo di macro di TeX perché è il lato oscuro, sono più potenti delle macro inutili di LaTeX ma ti consumano l’anima, la strada per la virtù è tortuosa e priva di scorciatoie, allora in pratica tutte le cose che ho imparato sono più o meno inutili per programmare in LaTeX, che è quello che a me interessa. TUTTAVIA no niente sono scemo e non dovevo passare l’estate a leggere il TeXbook, pazienza.

Quindi i prossimi manuali da leggere sono: eTeX (la versione moderna di TeX che sta sotto LaTeX), LaTeX, la guida per i programmatori di classi e pacchetti di LaTeX, e la reference di expl3. Ebbene sì mi piace anche leggere le reference! Sono come Las Vegas: pulite, ordinate, ben organizzate, e ti risucchiano in un’attività ripetitiva e priva di scopo.

Per concludere, non posso che raccomandare il TeXbook, che grazie alla sua completezza definitiva, unita a un’eccellente attenzione estetica, aggiungerà sicuramente un solido tocco di classe alla vostra collezione di pdf piratati.

Post scriptum 13 settembre: Un’applicazione utile di TeX è generare cuoricini, basta pochissimo codice:

\vbox{}
\leaders\hbox to\hsize{\leaders\hbox{\strut\raise.5pt\hbox{$<\!$}3 }\hfill}\vfill
\eject\end

In questo modo si possono mandare rapidamente molti cuoricini alla femmina. In effetti, potete dare in input direttamente il codice per fare prima. (Le femmine supportano TeX, giusto?)

Commenti

  1. <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    1
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3
    <3

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

© 2024 Concilio dei topini Torna sù