Tutti gli articoli di Federico

Spleeter: Isolare la parte vocale in un brano

Isolare la parte vocale in un brano musicale è sempre stato un processo lungo, difficile e, spesso, dai risultati incerti.

Negli ultimi anni, grazie soprattutto a nuove tecnologie e all’aumento della potenza di calcolo dei computer, numerose aziende hanno commercializzato software e plugin che garantiscono risultati sempre migliori. Purtroppo siamo ancora lontani dall’avere uno strumento semplice da usare, veloce e in grado di garantire risultati di qualità.

La ricerca o la creazione di stems, ovvero le tracce separate partendo da un mix stereo, è un’occupazione che, ancora oggi, porta via a DJ e produttori molte ore di lavoro.

Da oggi le cose potrebbero cambiare grazie a Spleeter: uno strumento rilasciato gratuitamente da Deezer nei giorni scorsi che sfrutta l’intelligenza artificiale per separare automaticamente le varie componenti di un brano.

Spleeter è un software che permette di isolare la traccia vocale da un brano musicale completo.

I risultati che si ottengono non sono ancora perfetti ma il fatto che Spleeter lavori in completa autonomia e produca degli output in pochissimi minuti è sicuramente un importante passo avanti.

Al momento è possibile separare i brani in 2, 4 oppure 5 stems:

  • 2 stems: voce e accompagnamento musicale
  • 4 stems: voce, batteria, basso e altre parti
  • 5 stems: voce, batteria, basso, piano e altre parti

Per poter utilizzare Spleeter è necessario installare qualche pacchetto sul proprio computer e utilizzare la linea di comando per farlo funzionare. Sono sicuro che nel giro di qualche settimana verrà reso disponibile da qualcuno un programma che integri le funzioni di Spleeter con un’interfaccia grafica semplice da utilizzare.

Per chi fosse curioso di provare Spleeter di seguito troverete le istruzioni passo passo per installare tutto il necessario.

Installazione su Mac

Per prima cosa è necessario installare Miniconda sul nostro computer. Si tratta di un pacchetto che contiene tutto il necessario per creare un ambiente di sviluppo per far funzionare Spleeter correttamente.

Quando l’installazione è conclusa dobbiamo aprire il Terminale che si trova nella cartella Applicazioni > Utility.

Verificate che sul vostro computer sia installato Git scrivendo il seguente comando:

git --version

Se ricevete un errore, dovete procedere con l’installazione di Git: potete scaricare il pacchetto andando qui. Se, invece, ricevete un output con su scritto qualcosa simile a git version 2.23.0 allora potete procedere con l’installazione di Spleeter.

Per prima cosa andate nella cartella documenti con il comando

cd ~/Documents

E poi lanciate il seguente comando:

git clone https://github.com/deezer/spleeter

Attendete la fine del download. Una volta completato dovreste vedere una cartella nominata spleeter all’interno della cartella Documenti.

Ora creiamo l’ambiente di sviluppo con il seguente comando:

conda env create -f spleeter/conda/spleeter-cpu.yaml

E, infine, procediamo con l’attivazione

conda activate spleeter-cpu

Una volta completate tutte le operazioni, ricordatevi di disattivare l’ambiente con il comando

conda deactivate

Utilizzare Spleeter per separare la parte vocale da un brano

All’interno della cartella di Spleeter c’è un file mp3 chiamato audio_example.mp3. Lanciando il seguente comando il file verrà analizzato e verranno create 2 stems: una per la parte vocale e una per quella musicale.

spleeter separate -i spleeter/audio_example.mp3 -p spleeter:2stems -o output

Dentro la cartella Documenti ora troverete una cartella nominata output con, al suo interno, una sottocartella audio_example con i file separati.

Per utilizzare il software su altri brani sarà sufficiente copiare il file .mp3 oppure .wav nella cartella spleeter e lanciare il comando qui sopra assicurandosi di scrivere correttamente il nome del file; vi consiglio di rinominare i brani evitando spazi, lettere accentate, ecc…).

Se volete estrarre 4 o 5 stems utilizzate questo comando:

spleeter separate -i spleeter/audio_example.mp3 -p spleeter:4stems -o output
spleeter separate -i spleeter/audio_example.mp3 -p spleeter:5stems -o output

Esempi audio e limitazioni

Ecco un paio di esempi di divisione in due stems

Tones and I – Dance Monkey

Parte vocale
Accompagnamento musicale

Billie Jean – Michael Jackson

Parte vocale
Accompagnamento musicale

Come indicato sul sito degli sviluppatori: se intendete utilizzare questo strumento su materiale protetto da copyright, assicuratevi di avere tutte le autorizzazioni del caso.

Il problema dei grafici a linee curve

Dopo aver realizzato il nostro grafico a linee, potremmo pensare di utilizzare delle linee curve. Ma, come vedremo in questo articolo, ci troveremo ad affrontare una serie di problemi.

Dalle linee dritte a linee curve

Ripartendo dal codice nell’articolo precedente e cambiato le seguenti righe:

vertex(x1, height - 50 + tempMin[i] * - 20);
vertex(x1, height - 50 + tempMax[i] * - 20);

utilizzando curveVertex() al posto di vertex() otteniamo questo risultato:

grafico linee curve utilizzando curveVertex

Notiamo subito che mancano dei collegamenti con il primo e l’ultimo punto della serie di dati. Come indicato nel reference, questa funzione utilizza il primo e l’ultimo punto vengono usati per guidare la curvatura della linea.

A questo punto dobbiamo arbitrariamente aggiungere due punti e, in questo caso, conviene farlo prima e dopo il ciclo for. Qui sorge il secondo problema: che coordinate diamo a questi due punti che non derivano dal nostro dataset?

La soluzione più ovvia è utilizzare le coordinate del primo e dell’ultimo punto:

// Temperature minime
  int x1 = 68;
  beginShape();
  curveVertex(x1, height - 50 + tempMin[0] * - 20); 
  for (int i = 0; i < tempMin.length; i++) {
    fill(100, 190, 255);
    curveVertex(x1, height - 50 + tempMin[i] * - 20);
    noStroke();
    ellipse(x1, height - 50 + tempMin[i] * - 20, 10, 10);
    x1 += 40;
    stroke(100, 190, 255);
    noFill();
  }
  curveVertex(x1, height - 50 + tempMin[tempMin.length - 1] * - 20); 
  endShape();

  // Temperature massime
  x1 = 68;
  beginShape();
  curveVertex(x1, height - 50 + tempMax[0] * - 20); 
  for (int i = 0; i < tempMax.length; i++) {
    fill(255, 100, 100);
    curveVertex(x1, height - 50 + tempMax[i] * - 20);
    noStroke();
    ellipse(x1, height - 50 + tempMax[i] * - 20, 10, 10);
    x1 += 40;
    stroke(255, 100, 100);
    noFill();
  }
  curveVertex(x1, height - 50 + tempMax[tempMax.length - 1] * - 20); 
  endShape();

Se lanciamo il programma, il nostro grafico a linee curve diventa così:

Grafico a linee curve in Processing

Il risultato potrebbe sembrare soddisfacente ma un occhio esperto si potrebbe accorgere di un altro problema: la curvatura delle linee intorno ai punti dei dati può confonderci e portarci in errore quando leggiamo il grafico.

L’errore di precisione

Questo set di dati ha dei data point molto vicini tra loro e, quindi, il fenomeno non si vede chiaramente.

Ho realizzato quest’altra immagine per mostrarlo meglio: questa volta i punti sono inseriti in un array in modo casuale ma il principio è lo stesso di quello utilizzato nello sketch che stiamo realizzando.

Grafico a linee curve con errore

È evidente l’errore che esiste tra i primi due punti e gli ultimi due: la linea curva va oltre i valori in modo anomalo e portando a un’interpretazione errata del grafico.

Come trovare la soluzione definita al nostro problema? Abbiamo due possibilità:

  1. Rinunciare alle linee curve una volta per tutte
  2. Non usare la funzione curveVertex() ma usare le curve di Bézier e, quindi, la funzione bezierVertex().

La difficoltà dell’usare queste curve è di dover passare alla funzione tre coordinate x e y: due per i punti di controllo e una per il punto di ancoraggio. Se volete capire come funzionano, consiglio di provare a giocare al The Bézier Game (io ho rinunciato dopo poco).

Alcuni lavori dei miei studenti del corso CMTI dell’università di Udine #2

Il primo articolo con la spiegazione e un po’ di background in merito al corso e ai lavori di data visualization dei miei studenti lo trovate qui.

In questo post pubblico, con il loro permesso, le infografiche realizzate dagli studenti che hanno sostenuto l’esame al secondo appello.

Passione film con i dati di IMDB

Il primo lavoro è di Omar Frasson, appassionato di cinema, che grazie ai dati raccolti su IMDB ha sviluppato una visualizzazione piuttosto articolata.

Omar Frasson, data visualization IMDB

La prima schermata, che funge da splash screen, è già, di per sé, una visualizzazione: i nomi dei registi dei film appaiono, infatti, a grandezza differente in base al numero di lungometraggi visti. La posizione sullo schermo, invece, è casuale.

Data visualization IMDB film

Nella prima schermata, tutti i film vengono ordinati sull’asse delle x per anno di uscita. Sull’asse delle y, invece, la durata del film e, attraverso il colore, è possibile vedere il voto assegnato.

Passando con il mouse sopra a ciascun rettangolo compaiono alcuni dati sul film.

Visualizzazione di dati IMDB infografica

La visualizzazione per generi con animazione controllata dallo slider in alto con riferimento sempre l’anno di uscita del film. Sulla destra, invece, alcuni eventi rilevanti della storia del cinema.

Omar Frasson, data visualization registi

Terza schermata: visualizzazione per registi con comparazione tra la votazione assegnata dallo studente e quella media generale di tutti gli utenti di IMDB.

Omar Frasson data visualization IMDB

Schermata che rappresenta dei dati relativamente alla durata dei film e alle valutazioni assegnate.

E, infine, una comparazione tra tutti i film visti da Omar nel 2017 e nel 2018.

Tutto sugli Avengers

Rimaniamo in ambito cinematografico con il lavoro di Giulia Nardò che ha deciso di creare una data visualization sulla serie degli Avengers. I dati sono stati raccolti da varie fonti (Wikipedia, IMDB, ecc…) e assemblati in un file excel.

Giulia Nardo data visualization Avengers

Una prima schermata mostra l’universo degli Avengers con tutti i personaggi (cerchio esterno) e film (cerchi interni). Muovendosi con il mouse è possibile vedere quali personaggi erano presenti nei film. La legenda sulla sinistra aiuta molto a capire le varie relazioni e la scelta dei colori.

Giulia Nardo Avengers Iron Man
Dettaglio sul personaggio Iron Man
Ronan the accuser data visualization avengers
Dettaglio sul personaggio Ronan the accuser

Cliccando sui personaggi o sul film è possibile avere ulteriori dettagli

Giulia Nardo Avenger Endgame data visualization
Dettaglio su: Avengers: Endgame.

Visualizzare i dati raccolti con l’App Salute su iOS

Il progetto di Erika Corallo, invece, si è concentrato sulla visualizzazione dei dati raccolti con l’App Salute su iOS: battito cardiaco, distanze percorse e passi.

L’approccio è stato piuttosto semplice nel disegnare i grafici ma la parte, a mio modo di vedere, più interessante, sono le schermate iniziali che sono animate e già rappresentano i dati in modo molto creativo.

Erika Corallo, visualizzazione dati salute iOS
Erika Corallo, data visualization salute
Erika Corallo my steps visualizzazione infografica

Per ciascun dato esiste, poi una vista dettagliata suddivisa per mese oppure generale per anno.

Clash of Clans

Williams Piazza ha utilizzato i dati presi dall’API del gioco Clash of Clans per valutare il rendimento di ciascun giocatore del suo clan per capire come migliorare le prestazioni di gioco.

Alcuni lavori dei miei studenti del corso CMTI dell’Università di Udine

Due anni fa ho iniziato a lavorare come docente a contratto per il corso di Laurea Magistrale in Comunicazione Multimediale e Tecnologie dell’Informazione (CMTI) dell’Università degli Studi di Udine.

La materia che insegno si chiama Linguaggi Visuali per Sistemi Complessi e, all’interno del percorso, offre un punto di contatto tra l’anima informatica (Virtual Reality, Machine Learning, Cybersecurity ecc…) e tra il mondo del design (Design dello Spazio, Interaction Design, ecc…).

In questo post ho deciso di condividere – con il loro permesso – alcuni dei lavori presentati al primo appello d’esame da alcuni studenti e studentesse del corso.

La scelta del tema era libera e ciascuno/a ha sviluppato in completa autonomia sia il lavoro di ricerca che di visualizzazione.

Premessa: il background e i contenuti del corso

Il background di chi frequenta il corso è molto vario ma, in generale, chi ha competenze in ambito informatico non ha mai lavorato prima con la grafica e viceversa.

Nel percorso didattico che ho sviluppato e che sto perfezionando di anno in anno, cerco di portare tutti ad acquisire delle competenze in entrambi questi ambiti attraverso lo studio della programmazione in Processing e con analisi ed esercitazioni in classe di data visualisation.

L’occupazione dei neo-laureati

Partendo dai dati di Almalaurea, Michelangelo ha deciso di fare una visualizzazione interattiva e animata sulle percentuali di neo-laureati che trovano lavoro dopo un anno dal conseguimento del titolo.

Un grafico che mostra le statistiche occupazionali dei neo laureati dopo un anno dal conseguimento del titolo. Corso CMTI Università di Udine
Data Visualisation di Michelangelo Campanella, fonte dati: Almalaurea

I colori di un film

Kristian si è concentrato sull’analisi dei colori dei suoi film preferiti (Apocalypse Now, Blade Runner, Mad Max, ecc…). Nel realizzare questo progetto ha incontrato due difficoltà:

  • estrarre i dati analizzando i film frame per frame
  • creare una visualizzazione unica che permettesse l’interpretazione dei dati raccolti.
Corso CMTI Università di Udine. Visualizzazione di Kristian Simonato.
Un’analisi approfondita sull’utilizzo del colore nel cinema di Kristian Simonato

Anche in questo caso, trattandosi di una visualizzazione interattiva, lo screenshot che ho condiviso non rende giustizia al lavoro svolto. Partendo da questo studio sull’utilizzo dei colori nel cinema, il primo grafico (in alto) mostra quanto ciascun frame tende a uno dei sette colori principali analizzati nello studio.

Nella parte centrale è possibile vedere il colore predominante in ciascun frame, vedere il frame di riferimento nel film un’analisi più approfondita con le percentuali di ciascun colore.

Il grafico 3D sulla sinistra, che si può ruotate, presenta un’analisi completa e numerica delle componenti colore dell’intero film.

Mappare le nascite del Friuli Venezia Giulia

Data Visualization delle nascite nel Friuli Venezia Giulia suddivise per comune. Corso CMTI Università di Udine
Una mappa interattiva per mappare le nascite nel Friuli Venezia Giulia di Michele Dal Zotto, fonte dati: ISTAT

Prendendo i dati dell’ISTAT, Michele ha visualizzato su una mappa interattiva le nascite dal 2013 al 2017 nella sua regione, il Friuli Venezia Giulia.

È possibile interagire con la mappa cliccando sui comuni per vedere il dettaglio oppure selezionando il dato generale o quello di maschi/femmine.

Featuring tra rapper e artisti italiani

Sfruttando i dati presi dall’API di Spotify, Niccolò è andato ad analizzare alcuni dei suoi musicisti/cantanti preferiti e le loro collaborazioni.

Ne nasce un grafico interattivo dove ciascun artista è rappresentato da un cerchio, il cui colore varia in base al genere musicale di riferimento (scelto in modo arbitrario). I featuring tra gli artisti sono rappresentati dalle linee di collegamento: più è spessa la linea, maggiori sono le collaborazioni tra i due artisti.

Data Visualization Niccolò Bellucco - Corso CMTI Università di Udine
Data Visualization Niccolò Bellucco - Corso CMTI Università di Udine

Cliccando su un artista (immagine sopra) si può entrare nel dettaglio mentre, cliccando sui nodi (immagine sotto) che rappresentano le collaborazioni è possibile visualizzare dei dati aggiuntivi sui brani.

Nella versione animata, le barre verdi si muovono come fossero animate dall’audio del brano.

Data Visualization Niccolò Bellucco - Corso CMTI Università di Udine con API di Spotify

La diffusione delle microplastiche nell’acqua

Il lavoro di Tania e Silvia si può vedere on-line. Hanno deciso di concentrare la loro attenzione su un tema molto attuale: la diffusione delle microplastiche nelle acque.

Microplastic: il lavoro di Tania Scorpio e Silvia Gioia Florio. In questa immagine un mock-up di una locandina per un’esibizione.

Cliccando sul menu a destra è possibile visualizzare informazioni diverse sulla mappa. La cosa interessante è che i dati raccolti provengono dal database di Adventure Scientists, un gruppo volontari che raccolgono dati in giro per il mondo per aiutare gli scienziati.

Fonte dati: Adventure Scientists

L’area dell’Oceano Atlantico che salta subito all’occhio non è più inquinata delle altre, semplicemente in quella fascia sono stati raccolti moltissimi campioni durante una competizione nautica.

Interessante anche il grafico forecast che vuole azzardare una previsione di quanto saranno inquinati gli oceani da qui al 2050 se non dovessimo cambiare immediatamente il nostro modo di produrre microplastiche.

Analisi di una relazione su Telegram

Sicuramente ispirato dal progetto che ho mostrato in classe Call me Adele, Francesco ha deciso di analizzare i dati generati dalla chat di Telegram con la sua fidanzata (più di 80 mila messaggi).

I risultati sono molto interessanti e credo che le immagini parlino da sole; anche in questo caso l’applicazione originale è interattiva e permette di navigare facilmente tra le varie schermate e di scendere nel dettaglio quando necessario.

Live Performance con jitter

In occasione dell’incontro di giugno dell’Ableton User Group Verona ho realizzato dei visual generativi con jitter per accompagnare la musica create da due miei studenti: Davide De Faveri e Lorenzo Ghelli.

Inizialmente l’idea era quella di usare Processing ma ho incontrato una serie di problemi che avrebbero richiesto un po’ più di tempo rispetto a quello che avevo a disposizione per essere risolti:

  • possibilità di andare in sync con la musica oppure no utilizzando Ableton Link invece che il MIDI Clock
  • possibilità di controllare i visual con un controller MIDI (Ableton Push 2)
  • gestione fluida di quattro visual differenti per altrettanti brani
  • performance elevate costanti (più di 30fps)

Abbandonata l’idea di usare Processing mi sono lanciato su Jitter: un pacchetto di oggetti per gestire video e grafiche all’interno di Max/MSP.

Partendo dagli esempi contenuti nei tutorial, ho assemblato tutto all’interno di un MIDI Effect Rack in Max4Live e ho mappato i controlli attraverso delle Macro sui knob del Push.

Il video della performance

La patch di jitter

----------begin_max5_patcher----------
3223.3oc6cs0jaaaE94c+UvQienMQYKA.u1mVm19TcR531NSR83QCkHjVZSQ
pPBsdcyj+6EWHo.0xKPjfRZmti8pK.f3x24fCN3CGR8a2dyrkoOgymY7mM9f
wM27a2dyM7jXIbSw2uY11fmVEGjyK1rUoa2hSHylKxifehvS+6e2a+K+8xT2
kgyoEJfDklrHCuhHZAaGvclyMfV2YO2.3A4eAcmowGKtt0oIjjfsXdM91kwX
RZhw+LHI236SiCMdOdy93frpVIfr5gnjMmRKjrea5dBsh4iFyhTiB4sX5xO8
cNVyj5L4Q+WdmAXcmYCiMdVGp4njxJFvR62u8V1KyGIx9u92u+GM9g+lwO8i
8.uPe9v0jM1gPwX2QmnaeMP+fKrQv0Y5AWR5lMwXk.PKGtxiISjKdqZ.1Jlz
w0TGTJGPhjHecGVTMyhnR9pqY0C3UeFGtJMNMSjOWs17NWSeOSjODX634.cY
IA7cLc8rP.jKz1xeNqnUUjD1aCOHYynZADb1BbR.UMPVXcYE.ESes7YnosM6
yrW6B+66RtZfevEE9CHjr8Q8o+63x0eQlBymfdLPmEED2k4hdqtlENrFYcvp
Z.yyDXyZBjs7az9Bpx9BCF3kdS7Bg387B7mD9UtXFP.iNVSO9AUE+3f2hsog
X40qV7knPxCrB3c3ZpCgEIFmt5ySptrsMjq0IrOOZc49qNcKKPVpJKB1SREZ
y4ytJri3Z4vQIMg88Wc5F6gdph8gYAeo1zfIC4iidDeWnDR8XPVEDVk4GPer
Ggiku2AOVrMYe1QFKC1sCSWgJQfan1EK8UQ0EJvxpeEg1WYc0wu75yElyMls
NNMfzr0MytVBFbRBvhDyCnikELsgnk6I3CeJuPRVHJYRq383z0kIWltbeYKs
AX4+c.yREsZ4GmlroRh+elMuoZHfqB0REj+PZFo6ZnDLa5x2mDQxIesviEQ9
bk3x2lFMZXuZzHeMoQ2SEc0oQi7tt0nqow9Ky5Uk7WdYnR1i9HxyTO5i8UQW
e5iNufzG+490G+4qZ8w2mVfg8nNBAZRcrmJ55ScD8BRc7HoYiqqaovx5cUOW
gqtC5a0cfkmDAOiP8suJ55S8E9RR88guRdXaWJubqG8p81Z0TBafyft69s3j
8poWVxtkoYA23cxVY+WTcsvR04HBdawwzLCjDxzalydAjb3ijpOBkJALQ5iG
JhkTQrRj93gh3IUDuDoOdnH.G49hSh7mOTJjb+AI0gPx8HG4tjiTeB.osd6y
ghD0A+uF20G5hR7ZmlAeKc5Wvp9WBG5.0yR38UQWc1.g9ufrAJDm8sHtRaNu
6p5bZKLA+Epf3YmJIswxRMtWnZX.55X.r4q3hD7W64ziIuVOhlkAIaZTGwqZ
cxZxan9Fr6LRRy1FDyHBbPLX5H1HmfHSWAQ9vSGBZ1.WyDEC6l.dduDmcrJ+
5nX7i3r75Sj3VXjRt9rgsAeRXTvqRcj1fhjNnomgeLp75spRMHihUDJPsOS.
kOUc.7rpIMDmkrOpx3KWVVzk3RMlHHeWAIubgaY1GPeSgkJlsNKgbvSR8ipR
rgcZD3P496rzc3jnjiMrTkcHdcv9Xxhlg754eDGz0yrQcnalsIKJLMg0IpIF
XIW1bTSv7i6DXKOX3kHIXWCWLUYghIsjYNcPtOeYPFSJUXdEVlIIMMtdVUWW
LdMoH6cQIIGghjzcsmYVzlG53ZWlRybaW0MOmbpEOQtKnJDjELy60KWPbbw7
55U+SAIQaCHXRjPD.MqxTrDyC4qxRiiqMdE47XC4DRUvWgqNALSYkAZwi1Up
DMqRJGFsAmSpmFIXSd8TprlKkz9kESfWP8LbWLcTTu.0hqG4YqxV.qk9QVBo
SqxC1fqlKJaN7M.C9+kyrcc41bElebJzIM72rKNaGIU4VsK1iswVOHsNrQ1x
pGRqcVtJxPvxZqpTGJeD+ztLi2rF7mdyZ3nvSg2b.KtMghHexbJfSzULbxQy
7eMi7GnP52P+6aovJ8cH8cD8czeTK5rh8sA78mNTFNDTFoQTlWq8fGt78QHV
TEZW9p1ACqZfQsQrLTTF.cxFB40TRH9IIWHzB7H58JMmDd.Z5EfLaAAPsh.f
wh.G7cHNJosEM3CNV9MCM4o6yVUJGKEYF0GnzUAIQIUtR8gClSNpfoYgBGSU
SdMccMX6cMyIoqwVpRcTCX7wooWfTrWXUTvooWnrXxp0dQQhk6YnXq+B+f6X
e+mj+ZzMOrLHtvarpUSZvctguE70wozo7CZmmdt7UrP978bVZOpWFeZjklV2
.tkRw13Z1Vn4cKmSY+pmY7hGLxSLdg7ulwKYBJoIuDWEjjzlIZKsfx6tYPDg
zN7R6WkMA.5JODGOp6pBUhCD0mbtEqII5f3v1KW0g+MYbBtKCuCmDZPkg4ih
mLWN4xEA5mt3ICYOahmG0FrD7Y57E1+A2MJXQbKW3B0Kr.NEXAoSRUyiYL.Y
jjFkiGXDRy2AlsiXSungBLeJhrfNqOK5olODB2WYXsSFVEasQHLdki0W4X8U
NVGKQVDiXik5fOPAUUH9cuPOLUA6jblics5YFIGDMqfyCufTC72kty3d5eei
w8TeuXpN1iiKPSQnbXIXtFYo.WfchvRKBMuCxvfWy7uxvY9x4FHC9g5ifFVl
FUQd+3fZg+O.j24BpguLTo+VcXnvkqG65dtvVvkVMVEBtEXitH3tA2LeFrX+
xlpaw43MFptgNuvn5lIxThnRn0DRWJuxApzKfScuPIr.Lk8BzozKlJZzgpRf
MbJoQuDn6uW37JM5sRzfiMmVXKf2TRK70Eqv0i.jCNdjUbCFbH.PFFVJhGPA
oAZiMKvIQxmVCQPp19fvCKWwCsBeIWMzFb3cJvg4qLW8JyUuxb0qLWMpnCb8
93X5HBiSFcHBJ1SZQbVINNnIIDActz6Es1SGo9fC2pf6abAel7y7nmcj906K
s5OxzR+gR67r.VfHzX254DFjUS.AP43XipSlZbSvr3thYgFK2ObWa6j0mqXt
K+L9qZALM8KBn49Yb2puomya5s1.2Awnl44hlDGUCmqIbyvpxNgyTtgbUCtt
IrOnLm.++Ek.OOxmjt8zGevOUDlBVfKPvOAbd4G7SGDF8F+SsTTMFBTswNRP
0Mt4P4GoHnVJ3Gw0SuDBXdg3GgcbUanaI3d1KTIBIZUL9tkwAq97CowiK7eD
GHXoefCfVtVNypZdtXN65MpUQhS42F3OgzSB7eYvOYHYny7JgQwsoKxUuy7b
ufy7DJ2F6RGVbYh74681QPojm4DNOCXcghRylMPseWHi8jQ.Z1B3p7w25DgZ
nKjxUbZPnXWeCg4awTLj3tUzYvg6a6lrfSsxD08FhziuiFFilhS6vxqYRaF+
XToa9hobVidLtXK.pI03h8Ez1RWgE0INsoPkR7bjnLbnlFDy6RZMN9N5Z7OX
b+tznDxBVqa.GDhAE2PANhHDGXAmRGEOo3o2WuP1WhRBS+hw8jHZG23eTrJV
9XNWROgVlvmngfYOiTvFCwtISA6ne3AZXb5IsHzvMPW6WPflhWyKl8Y57nLb
RHNy3dbVPNV7rB2vT7u6rFl1g3gom.0.9dSi1wkxYPhwRCNVMFrwR5IawXfF
QGoQ74Rsf1uJd7OgPiAeDQ0qii1c6qJDBmLuga62pm+J+TdMdDyL7FDaDGsM
hLq2e+c9AbXz9sG+KvyCQgg0NG9lvxhf2U7FB0i0qF9M4o4exL.8qBwah5mP
f.5NlM5B.7YrP6UiJ7VnfFHEnfOSHobKoPCUKJNmsMJj60QwPyhtyW1S5Bee
wC7BypuMxdlsJXfb.BN7VBnPKIeuzO7VRkgjYmvs.fsQ.9atdUe6vyQvZOIF
lz9JnV3jdzimhA2xreqZ5Glzg1ukkJRdaczRH4fPtkVhOsGL1VBd1POkl2vJ
DbrsjoBsjkNFSHeUGSiUNgTwzaY2YbsjqpioQ2RNpzRt5nkNESoiqkrNWymp
+zko+f.X3MjJlHrzRKohIBKcrzpJXGPGVxgpXg.3niVx6bo4AcUcw9wZ0C5L
VGNsc4dXh7j82j8Mc6.jRc052hS5xCHnRV2zwzFdKANKsjJyPgZYdiJdK.0w
pP.krEnkVRIaAPczRtmti+GMEEYJ9kjvEHMGk+sw12TYJIPGq5CNa9W.NE+K
5bSgN1HdjU5c3aisuozpp5v5.3rw3APEWR7zQCYNLUHA6QGcqCwZjitkgN51
E542pPseaBc7sHDOXEE2uDGwXUEqbjfcB5vJuKbpO5kYviNzdW.I03cr6SkY
kis4EfWFNgb7clwrszJLpbI6RHnkaUoa+8a+e12xekC
-----------end_max5_patcher-----------