logical

Top Page  |  Lists  |  User Login

logical
  • Andrei Gheorghe, 38
  • Bucureşti, România
  • Work: Infineon Technologies
  • School: Fac. de Electronică şi Telecomunicaţii

 

Total Page Views

200,984

RECENT COMMENTS

November 25, 2022 - 20:20

Adi

Cine mai explică acum că dacă nu egalau ecuadorienii, "olandejii" conduceau in c...

posted on “dacă nu egalau englezii, danezii ar fi condus în continuare”


June 20, 2022 - 20:18

Cătălina

Nişte angajaţi ai Urban Serv sunt foarte mândri de ei şi în ziua de astăzi pentr...

posted on mud


May 24, 2022 - 14:33

logical

există şi nişte bonus pack-uri în joc, dacă faci nişte achievementuri primeşti u...

posted on mai rapid ca rapidu


May 24, 2022 - 14:31

logical

regula de cinci secunde a devenit mult mai periculoasă de când cu pandemia... nu...

posted on curcubeie pe asfalt


May 24, 2022 - 14:27

logical

şi ca fun fact, nici măcar nu este primul chirurg din echipa Rapidului... am avu...

posted on te apără de goluri şi cardiace


May 24, 2022 - 14:25

logical

eu merg aproape sigur pe varianta b. pentru că e destul de uşor să verifici că a...

posted on achtung: se fură motoare maro cu jojă neagră


May 23, 2022 - 21:17

Specter

Am văzut şi eu trailerul mai demult. Chiar mă întrebam dacă au plătit redevenţă ...

posted on mai rapid ca rapidu


May 23, 2022 - 21:12

Specter

Toate ca toate, dar eu fără cartofi prăjiţi nu-mi fac transplant!

posted on 1+1 gratuit: Organe


May 23, 2022 - 21:09

Specter

Eh, când cei mai tineri fani ai Rapidului se apropie de 40 de ani, or fi zis şi ...

posted on te apără de goluri şi cardiace


May 23, 2022 - 21:05

Specter

Sunt două variante aici: a. Ei nici nu s-au gândit dacă o să meargă maşina aia ...

posted on achtung: se fură motoare maro cu jojă neagră


May 23, 2022 - 20:54

Specter

Oare regula de cinci secunde se aplică şi la compresor?

posted on curcubeie pe asfalt


April 2, 2022 - 13:48

logical

pare că nu...

posted on de la student la senior staff engineer


April 1, 2022 - 10:30

Adi

La multi ani? Mai primeşti ceva anul ăsta?

posted on de la student la senior staff engineer


February 22, 2022 - 12:18

Specter

Măcar nu au fost 18...

posted on i-a luminat farul


February 10, 2022 - 11:54

Specter

Scrie chiar de două ori! Oare a uitat că a scris prima oară, sau chiar l-a mai c...

posted on certitudinea marilor împliniri

   "Burn Bucharest, Burn You Fucking Maniacs" [Lake Of Tears, 11 Martie 2006]

16 - 18 of 18  First | < Prev | Next > | Last     

Remodelatorul de Molecule - Archive for April, 2010Full Post View

şi alte logici

o zi în care lumea programează în pascal
o zi în care lumea programează în pascal

dân marele gheorghe:

Jesus atârna pe cruce, cam plictisit. Vine iepuraşul de ciocolată: “Băi pleată-n vânt, ţi se vede pe sub halat” / “Ce se vede băi dinţosule ?” / “Două ouă roşii şi-o morcoveaţă”... Vedeţi copii, de aici se trag obiceiurile de paşte: de la un halat desfăcut şi un iepuraş pervers.

Nu lăsaţi lumina în sufletul vostru. Faceţi economie, fiţi eco.

Trooper – Verset Uitat

Norii apar şi roşul curge-n ape adânci,
Se crapă munţi şi suflete sunt în pământ...
Doar durerea te poate trimite din nou,
La început, când cerul prea mult a tăcut !

Minte-mă din nou, spune-mi că exişti,
Cere-mi să îţi dau tot ce-am clădit!
Zece sunt uitate, zece-am inventat,
Peste vieţi curate umbre-am aruncat...
 
 

Dacă sunt aici numai ochii mei,
Nu vreau să ascund, focul din ei...
Singuri am trădat şi moartea lumii-n-noi.
Trei priviri ascunse, toate sunt acum... două.

 

Simte-acum şi tu, vântul ca un foc,
Şterge lacrimi vii de pe chipul mort.
Nimeni nu mai simte viaţa ca un dar,
Raiul e în lume, noi suntem în iad...

Tags: , , Sunday April 4, 2010 - 16:55pm (EEST) Permanent Link | 5 Comments
belgian melodrama
belgian melodrama

L’enfant

foarte plictisitor şi fără mare sens... şi părea interesant...

nota 7.25

Tags: Saturday April 3, 2010 - 23:59pm (EEST) Permanent Link | 5 Comments
RoadKill revives... RoadKill rules...
RoadKill revives… RoadKill rules…

aceasta este povestea ultimelor 48 de ore petrecute de echipa RoadKill (Andrei + Andrei)...

toată lumea ştie deja că duminică seara epuizaserăm toate ideile care ne veniseră în cap şi eram destul de dezamăgiţi şi fără nici o speranţă...

ultima idee încercată fusese cu senzorul de poziţie montat la roţile din faţă... care a fost un eşec total... andrei a zis că  parcă totuşi ar fi păcat să fi muncit atâtea săptămâni degeaba şi să ne dăm bătuţi... şi mi-a zis să montez înapoi senzorul la roţile din spate şi dacă eu nu mai am chef, să-i las lui maşinuţa şi mai încearcă el să tragă de parametrii pe acolo, măcar să meargă ceva... pana mea... iar m-am chinuit vreo oră să dezlipesc senzorul, să-l aliniez iar perfect cu roţile din spate, să desenez linia albă pe cauciuc... mi se luase rău de tot cheful...

nu m-a lăsat inima să-l las singur să-şi facă nervi în laborator şi am mai pierdut o seară pe acolo... maşina mergea la fel de prost... dar am început noi aşa să mai vorbim, ce am putea să-i facem ca s-o dregem... am încercat să schimbăm tipul filtrului de pe acceleraţii, să-l facem cu întârziere de grup constantă, să-i modificăm ordinul la mai mic sau la mai mare... s-a jucat andrei cu toate astea şi concluzia finală a fost că filtrul scris de el pentru etapa precedentă este as good as it gets pentru aplicaţia noastră şi nu prea avem ce să punem acolo în locul lui care să meargă mai bine... sau nu ştim noi ce filtru ar fi mai bun, că nu prea ne pricepem la teoria semnalelor, că nu e deloc pe specializarea noastră...

cât timp andrei s-a jucat cu filtrele astea eu am schimbat nişte chestii prin modul de stocare a datelor hărţii traseului, în  sensul că m-am gândit că în loc să scriem pe card cât durează fiecare curbă, ar fi mai util să scrim doar unde începe curba respectivă şi asta să facă mai uşor procesul de sincronizare între acceleraţie şi distanţă... well i did that... şi pe lângă asta, am făcut şi detecţii de cross-uri (piese în X care schimbă maşina de pe o bandă pe alta) şi am scris pe card câte  cross-uri detectează maşinuţa în turul de învăţare şi pentru fiecare poziţia respectivei piese în harta traseului...

se făcuse vreo 22:30 aşa şi am zis că ar trebui să facem aia, aia şi încă vreo nu ştiu câte aia şi sigur ar trebui să fie mai bine... well, totul suna perfect pe foaie şi ne-am propus ca în cele două zile rămase (miercuri şi joi) să scriem cât mai multe din cele la care ne gândisem marţi seara...

miercuri ne-am întâlnit pe la ora 15 într-o sală de curs goală şi am început să schiţăm pe tablă cam ce-ar trebui să facem...  un lucru foarte important era creşterea rezoluţiei de măsurare a poziţiei roţilor... noi aveam roata toată neagră (circumferinţă 66mm) şi o dungă albă trasată cu pastă corectoare de cam 4mm... în cazul ăsta eroarea de măsurare de distanţă era minimă, că citeam distanţa temporală dintre două treceri ale dungii albe prin faţa senzorului... dar problema cea mai gravă pe care o avea maşina la momentul respectiv era că nu frâna mereu la fel... de ce ? pentru că viteza roţilor se eşantiona din 66 în 66mm... deci ea frâna, verifica viteza, şi continua frânarea, iar următoarea verificare de viteză o făcea de abia după aproape 7 cm, timp în care putea frâna până la nişte viteze infim de mici, ceea ce ne termina... so, ne-am gândit să trasăm patru dungi albe pe roată... simplu nu ? în cazul ăsta ar fi trebuit ca viteza să fie verificată cam din 1.65 în 1.65cm... mult mai precis... dar care era problema pe care o introducea acest sistem cu patru dungi ? faptul că noi nu am fi putut în vecii vecilor să împărţim roata în fix 4 cadrane identice ca dimensiune şi să trasăm nişte linii albe identice... erau linii tremurate, strâmbe, una mai aproape şi una mai departe etc... care erau erorile de măsură în cazul ăsta ? păi, la o viteză de mers constantă, viteza măsurată de noi era ceva de genul: 1.4m/s, 1.7m/s, 1.2m/s, 1.5m/s, 1.4m/s, 1.7m/s şi pattern-ul de 4 se repeta... e clar de ce... şi care a fost soluţia ? măsurarea automată a distanţei dintre dungi şi calcularea unei medii pe 4 eşantioane de viteză, realizarea unui buffer de valori de compensare şi fiecare viteză citită era înmulţită cu un număr supraunitar sau subunitar, astfel încât să fie egală cu media anterior calculată... algoritmul ăsta ne-a luat cam o oră să-l scriem dar merge impecabil şi asigură o frânare foarte cursivă şi pe care poţi să te bazezi... ăsta a fost un punct important pe care ne bazam mai departe...

se trecuse deja de ora 22 când ne-am gândit că nu e bine nici cum determinăm dacă maşina mai este sau nu sincronizată pe traseu... problema cea mai mare pe care trebuia s-o rezolvăm era să decidem ce să facă maşinuţa atunci când ea pe hartă vede că trebuie să urmeze o curbă la dreapta şi accelerometrul îi dă semnal de curbă la stânga (sau invers, desigur)... e foarte greu aici... ori accelerometrul greşeşte şi îţi dă doar un spike care e eronat, ori maşina nu a căutat bine în hartă şi e pe altă poziţie decât ar trebui şi curba chiar e cum zice accelerometrul... dar cum discerni între astea două cazuri ? păi ne-am gândit să scriem o funcţie specializată de sincronizare care să ţină cont de mai multe chestii în decizie... o descriere în mare a algoritmului ar fi că funcţia se uită la tipul curbelor primite, la cele pe care ar fi trebuit să le primească, dar şi la distanţa lor de pe hartă şi distanţa parcursă până la apelare şi încearcă să ia decizia corectă comparând mai multe proprietăţi ale curbelor, în funcţie de tip, durată în timp şi lungime totală... a, şi am mai adăugat şi nişte histerezis la pragurile de intrare şi ieşire din curbe, lucru absolut evident necesar, dar care nu ne venise în cap până atunci... de fapt zisese andrei cândva să facem ceva gen 4 praguri şi nu 2, da am zis că doar asta nu ne ajută oricum... dar acum având şi funcţia de sincronizare în spate, s-au dovedit a fi foarte utile... bineînţeles, tot algoritmul ar fi mers decent dacă măsurările de distanţă ar fi fost realiable, deci fără patinaj... cred că era vreo 2 noaptea când am terminat de scris şi testat codul pentru funcţia asta şi am plecat şi noi acasă... dar destul de încântaţi... la primele teste aşa buimaci în mijlocul nopţii maşina părea să nu se mai desincronizeze aşa des... încă un punct important pe care să ne bazăm mai departe...

joi era ultima zi... ne revenise cheful, aveam spor, rescrisesem în două zile tot ce făcusem până atunci în câteva luni... nu înţeleg cum nu ne-am dat seama că tot codul nostru era mult prea simplu... ştiu că multă lume zice că simplu e mai bine, dar cel puţin atunci când ai de-a face cu fenomene necontrolabile şi nerepetitive, tebuie să prevezi toate cazurile posibile... şi nu poţi să faci asta cu un cod simplu... cel puţin noi nu am putut... şi l-am complicat :D

pe la ora 22 făcusem încă o funcţie de resincronizare, de data asta la cross-uri, ca să folosesc datele calculate de mine marţi seara... când părea că merge am încercat să o punem să accelereze din când în când... rahat... detecta cross-uri pe zonele în care accelera sau frâna, câteodată detecta două cross-uri la rând, tot felul de erori tâmpite... am încercat să o tot dregem, până la urmă am renunţat la idee pe motiv de imposibilitate de identificare a cross-urilor reale şi a celor care erau zmogot... şi decât să rişti să te sincronizezi după un spike fals, mai bine niciodată...

am mai scris noi ceva cod mărunt pe acolo, când pe la miezul nopţii se strică de tot maşina... bah n-a mai vrut să scrie pe card nici de-a dracu... noi aveam probleme cu slotul de card de înainte, că am vrut să fiu sigur că n-o să-l rupem de câte ori o să băgăm şi o să scoatem cardul din el şi am turnat nişte picături de superglue pe laturile lui, să-l lipesc bine de pcb... şi nu ştiu cum dracu s-a dus un pic de superglue sub slot şi a lipit toate mecanismele alea ale lui de ţin cardul fix înăutru şi fac eject (arculeţul)... am reuşit să bag card în el dar a trebuit să-l foţez şi s-a auzit când s-au rupt toate rahaturile alea în el... oricum, mergea şi aşa...

aparent, până joi noaptea... adică părea clar că de la slot ar fi problema... aici a urmat un moment mai nasol al nopţii, o frustare combinată cu oboseală, cu nervi şi disperare... ce dracu să mai faci când mai sunt 9 ore până la concurs, eram pe calea cea bună şi ce scrisesem cod mergea bine, şi dintr-o dată a murit maşinuţa... a fost nasol de tot... am uitat să menţionez că joi noaptea în laborator erau aproape toate echipele prezente şi era absolut full de lume (zeci de băieţi şi magda :D)... un tip de la altă echipă, cezar, zice că are el slot de card... bine, bine, dar şi ce facem cu el ? cu ce dezlipim noi slotul vechi în toiul nopţii că nu avem staţie de aer cald... şi oricum e lipit cu o tonă de superglue pe placă... am mai înjurat vreo juma de oră şi încercat să reparăm slotul vechi şi până la urmă am zis că nu mai avem ce face, asta e... ori schimbăm slotul de card, ori abandonăm concursul că maşina nu mai făcea nimic... am început să rupem în bucăţi slotul vechi, şi până la urmă am reuşit să-l scoatem de acolo fără probleme majore... nici un traseu exfoliat chiar... se pare că superglue-ul e bine să fie cât mai ieftin câteodată (50 de bani tubul)... tot cezar ne-a dat şi nişte cositor şi flux şi până la urmă am lipit şi noul slot de card pe maşinuţă... cred că se făcuse vreo 1:30 când am pus din nou maşina pe traseu... n-a mers, făcea la fel... băi dă-o în paştele mă-sii, asta ne face în ciudă... toţi ceilalţi reglau parametrii pe traseu, a noastră nici măcar nu mai pornea... am crezut apoi că-i de la senzorul de roată... poate nu mai vede dungile noastre albe... am văzut că roţile erau destul de murdare... am scos cauciucurile, le-am şters cu alcool izopropilic (tot de la cezar, desigur) şi am început să redesenăm cele 4 dungi albe pe cauciuc... le-am lăsat un pic să se usuce şi am încercat să montăm cauciucul pe jantă... rahat... s-a întins pasta aia albă peste tot şi a făcut o mizerie de ţi-era scârbă... am luat-o de la zero... iar le-am scos, iar am curăţat tot, iar am pictat 4 dungi albe... de data asta am zis să le lăsăm să se usuce bine înainte :D ale dracu dungi s-au uscat după vreo jumate de oră de suflat peste ele, fir-ar mama lor a dracu... incredibil câţi nervi puteam să am atunci... eram împinşi la limită... până la urmă am montat cauciucurile, dă-i o tură pe pistă, nimic... maşina moartă... după multe înjurături, ne-am prins că problema era dintr-o linie de cod executată aiurea... băgat într-un vector un număr pe o poziţie probabil mai mare decât spaţiul alocat pentru el sau ceva de genul, că dacă am comentat linia în care băgam date în vector a mers perfect... futui morţii ei de viaţă, am pierdut 3 ore preţioase pe nimic bah, pe nimic... doar că ne-am făcut nu ştiu câţi mii de nervi şi gânduri că până aici a fost, abandonăm...

era 3 dimineaţa... aveam nişte blocuri de cod care mergeau bine... dar n-aveam un program complet care să meargă bine pe traseu... am mai încercat noi nişte chestii, n-am făcut mare lucru până pe la 4 dimineaţa că eram super adormiţi şi nu vedeam nimic în cod... a fost o oră moartă...

pe la 4 dimineaţa am decis că trebuie să facem maşinuţa un pic mai grea... am montat în spatele ei două monezi de 50 de bani,  lipite cu duct tape (desigur, de la cezar... da, cezar venise în laborator cu vreo 6 pungi cu scule şi piese după el... băiat deştept ce pot zice)... după ce-am făcut-o mai grea, am observat că merge mai încet... i-am crescut tensiunea la motor... s-a corectat, şi ce să vezi... nu mai fugea de fund... era mult mai stabilă pe traseu şi nici măcar nu mai patina aşa de tare... super tare, uite cât contează 15 grame într-un loc bine ales pentru stabilitatea unei maşinuţe din astea...

bineînţeles, acum că era mai grea s-au dus dracu toţi parametrii reglaţi de noi până atunci, şi am mai pierdut vreo oră adaptând totul pentru noua greutate... am zis să mai încercăm o dată sincronizarea cu cross-urile, dar să le detectăm altfel... în loc să folosim scăderi ale curentului prin motor să detectăm scăderi ale tensiunii de alimentare de pe pistă... pentru asta a tebuit să facem nişte modificări la schema maşinuţei, să înlocuim nişte condensatori care erau prea mari şi nu lăsau niciodată să scadă prea mult tensiunea de alimentare la intrarea adc-ului... so, am pus unii de vreo 5 ori mai mici... nici nu mai zic de la cine i-am luat, că e clar deja... după asta părea că le detectează bine, dar tot n-a mers algoritmul pentru că tensiunea scădea şi când maşina se mai ridica de bot în sus şi se desprindea de pe şine pentru câteva milisecunde... deci iar a fost nişte muncă degeaba, că a ajuns cod comentat, ca şi tentativa precedentă...

am mai scris noi nişte chestii mărunte pe acolo şi s-a făcut ora 7... cam de aici a început nebunia... mai aveam maxim două ore şi n-aveam nimic care să meargă... ceilalţi tot testau variante finale de câteva ore şi le mergea destul de bine... am şters din cod partea de accelerări şi frânări şi am decis să o scriem din nou de la zero, cu mintea nedormită limpede şi cu foaia albă (pe o singură parte) în faţă... aici a intrat geniul nostru în acţiune şi într-o oră am scris un cod bazat numai pe chestii scrise pe foaie care pe la 8 a fost băgat în maşinuţă... şi mergea domne... nu ne vedea să credem dar mergea... am început să-l reglăm şi pe la 8 jumate aveam un cod care mergea perfect şi maşina era super rapidă pe traseu... am împins totul la limită şi am zis că aia e, ne ajunge... până am constatat că pe vreo 5 tipuri de traseu merge perfect şi pe unul o dă rău de tot în bălării... vai de capul nostru, era 8:40 şi iar eram în pom... am început să cercetăm de la ce mama dracu e, intram în criză de timp... între timp s-a făcut 8:50 şi a venit udrea să demonteze pista ca s-o mute în aulă unde se va ţine concursul... eu: nuuuuu, mai lăsaţi-o pentru un singur test... am modificat cu andrei ceva parametrii pe acolo cât am putut de repede şi am scris codul... eram singura nostră şansă... pus pe traseu şi mers un pic mai lent ca înainte dar mers frumos şi constant... aia era... ăla a rămas codul scris în maşină pentru concurs... compus în cam o oră jumate de două creiere nedormite de câteva zeci de ore şi trecute prin atâtea căcaturi în noaptea aia... cod care a fost terminat cu câteva secunde înainte să fie demontată pista de testare... that’s genius...

a urmat o oră de pauză în care am mâncat ceva pe fugă, am băut ceva pe fugă şi nu puteam să ne ştergem zâmbetul de pe buze... am scris într-o noapte (plină de incidente) un cod pe care n-am fost în stare să-l scriem în 3 luni de când lucrăm la proiect şi care părea să meargă mai bine decât a multor altora din laborator care reglau parametrii de ore în şir...

concursul a început la 10... trebuia ca maşinuţa fiecărei echipe să parcurgă 10 lapuri pe o bandă şi 10 lapuri pe cealaltă bandă şi timpul echipei era suma celor doi timpi...

pe prima bandă algoritmul nostru a mers impecabil... a accelerat exact când trebuia, exact cât trebuia şi a frânat exact când trebuia... avea o cadenţă incredibilă şi mi-a provocat o fericire de nedescris să mă uit la ea cum merge pe traseu... absolut nici o problemă timp de 10 lapuri şi am scos un timp foarte bun... algoritmul a fost reglat pentru siguranţă, dar dacă nu făceam asta puteam obţine un timp chiar şi mai bun, dar un pic riscant...

pe cealaltă bandă s-a întâmplat ceva în etapa de învăţare şi n-a vrut sub nici o formă să-l înveţe... astfel că fără o hartă scrisă pe card n-a mai accelerat şi n-a mai frânat nicăieri... cam ce-am câştigat pe prima bandă am cam pierdut pe a doua... e de cercetat ce s-a întâmplat acolo la învăţare şi de ce pe o bandă a mers şi pe o bandă nu... chestia asta trebuie corectată pentru etapa  următoare... dar chiar nu m-a supărat foarte tare, că nici măcar nu era de la algoritm, dacă îl învăţa bine sigur mergea la fel de frumos şi pe ăsta... nu-i nimic...

dar, ciudat sau nu, toate echipele au avut probleme pe banda aia şi n-au scos timpi mult mai buni decât noi...

un singur băiat a scos timp mai bun ca noi pe prima bandă, dar asta era absolut firesc, el lucrând la maşină de o grămadă de vreme şi investind o grămadă de timp şi bani (piese de schimb) în proiect... de câte ori mergeam în laborator el era acolo... noi aveam un cod scris într-o noapte :D

îmi pare rău pentru Screamer şi Magda cărora le-a sărit maşinuţa de pe traseu după 3-4 lapuri şi n-au reuşit să se califice mai departe... vezi domnule Screamer, câteodată nu ajunge ceva foarte simplu... de asemenea, îmi pare rău şi pentru ceilalţi concurenţi cu care ne-am împrietenit cât timp am stat prin laborator şi care au avut ghinion şi le-au sărit maşinuţele după câteva lap-uri... chiar a fost super fun noaptea trecută cu laboratorul plin de oameni care discutau fiecare în variabilele lor, cu mâncare pe mese, hârtii, piese, ciocane de lipit... a fost o noapte absolut genială... cu andrei care a zis pe la mijlocul nopţii: “şi noi mai avem tot doar două lucruri de făcut: s-o reparăm şi să scriem softul” :D:D:D

per total, am ieşit pe locul 5 din electronică, ultimul loc care trece în etapa următoare... dar nu locul e important, nu timpul total, nu faptul că ne-am calificat... eu sunt fericit până peste măsură că am fost în stare ca în decurs de două zile să trecem de la un moral aproape zero în care nu credeam că mai facem nimic la o ambiţie de a scrie un cod în 48 de ore care să înlocuiască tot ce aveam şi nu mergea şi cu codul ăsta de ultim moment să prezentăm publicului o maşinuţă care în cel puţin un caz, a mers perfect pe traseu şi a obţinut cu puţin sub timpul unui tip care a muncit la cod luni de zile...

domnul creţu a filmat toată cursa iar câteva videoclipuri cu momentele de magie ale maşinuţei noastre (şi ale altora) vor fi prezentate în câteva zile... merită văzute, e ceva unic...

până atunci, vă prezint maşinuţa RoadKill, traseul pe care am concurat astăzi, maşinile celorlalţi, pe domnul Screamer şi pe donşoara Magda, precum şi rezultatele finale ale etapei...

următoarea etapă, pe 9 sau pe 12 aprilie... nu avem nici o şansă contra celor de la automatică, dar sperăm să facem încă o impresie bună... până atunci trebuie să ne mai corectăm problemele de la învăţare...

sunt treaz de 40 de ore, mă duc să mă culc fericit şi împăcat... :)

Tags: , , , , Friday April 2, 2010 - 23:59pm (EEST) Permanent Link | 11 Comments
16 - 18 of 18  First | < Prev | Next > | Last     
SEARCH
ARCHIVE

Valid HTML 4.01 Transitional