DOSAR, Reportaje

Hai să ne jucăm serios!

March 8th, 2011, com 201 comentarii

Sema Parc”, zona Regie – Bucureşti. Două turnuri din sticlă şi oţel, pe numele lor „Riverview House” şi „Atrium House” contrastează puternic cu peisajul postindustrial al vechii fabrici de maşini „Semănătoarea” din dreapta râului Dâmboviţa.

Hai să ne jucăm serios!

Nu este chiar Silicon Valley, dar într-o zonă a Capitalei precum Grozăveşti, unde cel mai interesant punct atractiv e abia finalizatul pod suspendat al primarului Oprescu, cele două turnuleţe chiar par aduse dintr-un film sci-fi.

River Invest, dezvoltatorii parcului de afa­ceri Sema, au finalizat deja prima parte a proiectului imobiliar urmând ca în viitor să mai construiască în zonă patru clădiri şi spaţii rezidenţiale. Birourile turnurilor au fost deja închiriate în totalitate de firme ce activează în domenii diverse, de la asigurări şi arhitectură până la radiodifuziune şi electricitate. Dea­supra intrărilor cu uşi rulante ale modernelor structuri, prin pereţii de sticlă poţi vedea siluete umane care se mişcă printre mese, computere şi plante ornamentale exotice.

În Atrium House se află sediul studioului de jocuri pentru telefoane mobile Namco-Bandai Networks România. E vorba de o încăpere lumi­noasă imensă, cu multe rânduri de mese despărţite de câteva camere cu pereţi din sticlă. Într-un astfel de birou transparent am fost primiţi la o discuţie pe tema naturii organiza- ţionale a firmei de către Andrei Lopată, admin­istratorul companiei şi unul dintre pionierii industriei româneşti de jocuri. Ne întâmpină voios, e îmbrăcat casual, în blugi şi pulover. Nu există un cod vestimentar al muncii în industriile creative. „Nu contează cum arătăm, jocul nostru trebuie să arate bine.”

Andrei conduce Namco-Bandai România încă de când aceasta aparţinea de concernul francez Vivendi. În 2007, Vivendi a fuzionat cu o altă companie, Activision-Blizzard, unul dintre liderii pe piaţa de jocuri din lumea întreagă.

Noul management de atunci a hotărât să renunţe la divizia de telefoane mobile. Andrei explică detaliile schimbării de corporaţie: „Activision-Blizzard a luat hotărârea că mobilele nu sunt interesante şi a desfiinţat tot. Erau două studiouri în Statele Unite, unul l-au desfi­inţat, unul l-a cumpărat Electronic Arts, era un studiou în Franţa care s-a desfiinţat şi studioul din Bucureşti l-a luat Namco”.

Înainte de venirea japonezilor de la Namco, dependenţa studioului din România de decizi­ile luate de multinaţională era mult mai mare.

Ca în orice sistem corporatist, structura de vârf a firmei era localizată în cu totul altă parte a lumii, operaţiunile între companiile-surori din lumea întreagă fiind centralizate – exista un buget impus pentru realizarea jocurilor şi un plan bine definit care trebuia respectat. Schimbarea de optică a niponilor în privinţa organizării l-a surprins pe Andrei, într-o primă fază. „Aici a fost dubios la început, mă aştep­tam să fie la fel ca înainte, numai că a trebuit să schimbăm complet mentalitatea. Am ajuns să concurăm cu alte firme din afara corporaţiei pentru proiecte. Odată cu Namco, a trebuit să mărim şi eficienţa. A trebuit să obţinem acelaşi lucru într-un timp mai scurt şi să construim un set de tool-uri (unelte – n.a) prin care să urmărim traseul unei versiuni.” Practic, în anu­mite limite, studioul este lăsat acum să îşi orga­nizeze activitatea în funcţie de propriul ritm de muncă.

In industri­ile creative nu există un cod vesti­mentar foarte strict. Chiar şi ţinuta ţine de… imagi­naţie.

Un joc pentru mobil se realizează oarecum asemănător cu cele pentru console video sau computere. Un producător (game designer) vine cu un concept iniţial al jocului după care pro­dusul se dezvoltă pe etape (versiunea primă e denumită alfa, cea intermediară, în care se lucrează intens – beta şi versiunea finală – gold master), prin cooperarea unor echipe de pro­gramatori, designeri, artişti grafici şi testeri.

Ştefan este de un an şi jumătate programa­tor la Namco-Bandai, timp în care a participat la dezvoltarea a două produse. Înainte să vină aici a lucrat tot în domeniul software, pe tele­comunicaţii. Îmi spune că în general licenţele pentru jocuri vin din afară, „noi în ţară doar implementăm proiectul, creativitatea vine mai mult de la grafică”. După faza de realizare a prototipului (de aici începe, în paralel, şi testarea jocului de către departamentul Quality Assurance – control tehnic al calităţii), urmează câteva luni în care programatorii fac portarea, „pur şi simplu te asiguri că jocul merge pe toate variantele de telefoane”. Îl rog pe Ştefan să îmi recomande un programator care era în firmă şi în perioada Vivendi. După un scurt apel în rândul colegilor lui, iese la înaintare Ionuţ, „un tip mai fluent în conversaţie”, după cum îl caracterizează Ştefan. Ionuţ e de peste cinci ani în firmă şi face parte din nucleul de programatori care a fondat Vivendi. Piaţa este extrem de dinamică în domeniu, se fac multe jocuri şi ele trebuie adaptate pentru fiecare ver­siune de telefon în parte, „îţi trebuie puterea financiară să ai toate telefoanele alea, pentru că nu poţi face un produs pe care să nu-l testezi pe dispozitivul fizic”. Îmi explică atribuţiile fiecărei divizii a studioului prin raportare la vestitul joc creat de Namco prin anii ’80 – Pacman: „Programatorul se ocupă de cum se mişcă pac-manul, designerul se ocupă de realizarea labirintelor şi graficianul se ocupă de cum sunt stilizaţi pereţii”. Se inter- acţionează mult în tot procesul acesta şi, astfel, se stabilesc şi relaţii de prietenie între angajaţi. În perspectiva lui Ionuţ, aceasta este una dintre părţile frumoase ale meseriei lui. De asemenea, participarea la realizarea unui produs popular, un joc care va trece prin mii de mâini, dă şi ea satisfacţii personale.

In faza de „master”, detaliile jocului sunt secrete, ca să nu le fure concurenţa.

Pe parcursul dezvoltării unui produs soft­ware apar „bugs” („gândaci”, în engleză), în principiu erori de logică ale programatorilorcare „scriu” codul jocului. Modul de depistare a bug-urilor şi nevoia creării de versiuni pentru fiecare tip de telefon în parte reprezintă speci­ficitatea dezvoltării de jocuri pentru telefoane mobile. „De exemplu, pentru console video, fiind vorba de jocuri foarte complexe, se întocmeşte un aşa-zis test-plan: jocul se împarte pe bucăţele şi fiecare membru al echipei de testare primeşte câte un task (sarcină – n.a). Se mai schimbă între ele pentru că patru ochi găsesc mai multe greşeli. Pentru telefoane mobile, jocurile fiind mai simple, se fac check- listuri”, spune Andrei Lopată. Astfel, fiecare tester se ghidează după un şablon, o listă cu parametri pe care trebuie să îi „bifeze” atunci când descoperă un „gândac”.

O găsesc pe Monica la biroul ei din sectorul de Quality Assurance butonând la un Nokia N95 Mini, un „smart-phone” – dispozitiv cu o pu­tere de calcul mai mare decât cea a mobilelor obişnuite. Ca şi alţi colegi, are în dreapta biroului multe cutii de ceaiuri pe care şi le pregăteşte în bucătăria din mijlocul încăperii. Probabil e o nouă modă în companie.

Începe să îmi arate tot felul de metode de depistare a inadvertenţelor care apar în joc. Monica lucrează de câteva luni la Namco si e singura fată din cei aproximativ 60 de membri ai diviziei de testeri. Acum testează un joc de tip puzzle de epocă medievală, semnalează greşelile din versiunea în limba franceză. Are o cameră web cu care fotografiază erorile întâlnite si apoi le scoate în evidenţă încadrându-le cu o culoare roşie într-un program de editare foto. Pe lângă greşeli de ortografie în dialogurile dintre omuleţii virtuali, Monica îmi arată un bug pe un ecran colorat în care apar două per­sonaje în straie medievale. Un text se supra­punea peste silueta unui monstru din joc. Monica a trecut eroarea într-un formular digi­tal alături de modul în care poate fi ajustată şi posibilul rezultat al schimbării. Mi-a arătat apoi o metodă de evaluare pe care ei o numesc „interrupt”, a luat un model Samsung din maldărul cu telefoane de diverse tipuri de pe biroul ei şi a dat un apel, să vadă cum se com­portă jocul atunci când cineva sună.

Monica mă duce apoi să văd camera device- urilor unde sunt multe rafturi înţesate cu tele­foane de tot felul, în cutii transparente de plas­tic, „păzite” de trei tipi care păstrează evidenţa inventarului. Ne întoarcem la biroul ei şi pe drum îmi arată zona unde se fac exclusiv „interrupturi” de pe reţele de telefonie străină, au o antenă specială care simulează pe o rază de 2-3 metri semnalele de peste Atlantic sau din Europa. Se pot face doar teste de „inter- rupt”, nu şi de conectivitate. Astfel verifică modul în care se comportă jocurile în timpul apelului din altă reţea decât „autohtonele” Vodafone, Orange şi Cosmote. O operaţiune extrem de necesară, având în vedere faptul că SUA sunt principala piaţă de desfacere pentru subsidiara Namco din România.

Se anunţă pauza de ţigară de zece minute şi fumătorii se îndreaptă spre ieşire. Este ultima „gură de aer” înainte de mult aşteptata pauză de masă în timpul căreia testerii joacă în reţea counter-strike (joc de acţiune în care se confrun­tă două tabere – terorişti şi contraterorişti). Monica îmi spune că trebuie să îţi blochezi cal­culatorul când pleci mai mult pe undeva. E o glumă internă între angajaţi, celui care uită să-şi paroleze pc-ul i se trimit mailuri în numele său sau se postează tot felul de lucruri de pe profilul său de facebook.

Victor, colegul de pe rândul din faţa Monicăi, testează un joc pe un iphone 4. Nu poate să spună despre ce este vorba în joc deoarece produsul încă se află în faza de mas- ter şi orice idee care „răsuflă” poate fi furată de concurenţă. Victor e de aproximativ trei ani în firmă şi a prins tranziţia de la sistemul de evaluare al angajaţilor practicat de Vivendi la modelul japonezilor de la Namco: „În trei luni primeai bonus (în perioada Vivendi) dacă erai performant, se făcea şedinţă şi şefii decideau, bazându-se pe o listă, cine lua bonusul pentru perioada aceea”. Când au venit japonezii, s-a renunţat la acele evaluări şi bonificaţii se primeau în funcţie de perfor­manţa avută pe întreaga perioadă de realizare a jocului.

„E foarte tare ăsta, mi-aş fi dorit şi eu să-l testez”, îmi spune Monica despre jocul verificat de Victor. Monica se întreabă dacă a ieşit pe piaţă Puzzle Quest 2, joculeţul cu specific medieval pe care mi l-a arătat mai devreme. Un coleg îi confirmă că a ieşit şi, în glumă, îi spune că „sunt şi plângeri de la clienţi”. Pe reţeaua internă a firmei s-a răspândit un mail amuzant al unei fane de peste Ocean căreia i se oprea telefonul atunci când ajungea la nivelul 13.

Modelul de organizare corporatist este cri­ticat pentru „robotizarea” individului prin practicarea unei birocraţii ridicate, prin raţio­nalizarea fiecărei sarcini desfăşurate. Lucrurile par să stea cu totul altfel pentru industriile creative, o zonă în care imaginaţia joacă un rol important şi relaţiile între angajaţi se stabilesc la un nivel mult mai uman. La Namco-Bandai Networks România am văzut şi jumătatea plină a paharului globalizării.

text TzeLe FeLix foto Octavian Tibăr

Taguri:

Comentarii

  1. Terminati odata cu commenturile negative.

    Este o firma ca oricare alta din Romania. Nimic diferit. Hai inapoi la munca sa nu ne suparam. Pana acum faceati 2-3 taskuri in loc sa staaaati la taclale. Bagati-va mintile in cap e un job nu distractie!

    Atat!

  2. Namco Inmate says:

    @Tester si atat

    Noi ne-am suparat deja,tu banuiesc ca nu faci parte dintre testeri,deci nici nu ai cum sa intelegi cum e sa faci 2-3 taskuri.Cel mai probabil faci parte dintre lipitorile care sufera ca cineva are ceva de spus,ne e mila de tine,cry more!

    • Nu stiu ce zici tu ca ar fi greu sa freci telefonu ala ma rog 2-3 telefoane ca sa iasa 2-3 taskuri. Si-asa cum lucrati voi in QA…vai de voi. Hai ca vad ca aveti ura in voi ca sunt altii mai bine platiti. Daca nu va place valea acasa, mai are lumea nevoie si de maturatori si de zilieri pe camp.

      Maturizati-va si ganditi de doua ori inainte sa deschideti gura, ma rog pentru unii e mai bine sa n-o deschida niciodata ca tot degeaba gandesc si tot prostii spun.

      • Namco Inmate says:

        Din pacate esti un animal cu care nu imi pierd timpul sa-i dezvolt acea calitate rara care se numeste “altruism”,intradevar vai de noi aici nu te contrazic,oamenii astia pe care ii trimiti tu acasa au fost stalpul acestei firme de foarte mult timp,poate dinainte ca tu,un neanderthal tipic,sa ii treci pragul,te las sa te certi singur,nu vreau sa ma cobor la nivelul tau ca ma bati cu experienta

      • Inmate2 says:

        Nu stiu cum de ti-ai permis dar de acum incolo mai bine taci din gura…asa ca sa nu degenreze!!!

      • Alex Lungu says:

        Cica “maturizati-va”, cand tu ti-ai facut profil pe Facebook doar ca sa comentezi aici. Si ai si incurcat numele cu prenumele :)) Adevarat e ca, asa cum ziceam mai devreme, e ca la sala de jocuri pe aici, si ca varsta si ca mentalitate, dar tu esti ipocrit!

      • vasile says:

        oricum un “manage-scre-ment” care angajeaza maturatori de strada ca testeri si invers ridica semne de intrebare. oricum ceva e putred in danemarca zic eu.

      • vasile says:

        mda…acum daca tot am devenit intimi, da-mi voie sa-ti raspund cu aceeasi moneda (ca sa nu ne mai tot “coboram” si “urcam” nivelul), am vazut si la programare cativa vanzatori de pepeni reusiti. nu m-ar mira sa fii unul dintre ei. poza nu ai….

  3. Nu te-ai coborat deloc la nivelul meu ai spus toate prostiile de la un nivel superior mie, numai tu ai fi putut articula corect atatea injurii.

    Daca voi sunteti stalpii, atunci eu zic sa plecati sa intemeiati voi alta firma, ca oricum sunteti stalpi si nimic nu merge fara voi. Dar sa nu te mire daca inteligenta ta e egalata de catre stalp.

    • Tu esti obraznic rau de tot. Pe ce baza? Daca nu stii nu vorbi ca vorbesti prost rau. Texte din carti am mai fumat si noi. Legat de maturatori si alte jigniri de genu am singura intrebare: asa iti zicea si maicata cand erai de varsta unui tester? ca ai nevoie de maturatori? ce exemplu dai tu cu textele astea de vagabond.

      • Nu vorbim de vagabonzi ca te stiu din poze, stiu ce samanta esti, de aia ai plecat, ca era multa munca si nu puteai s-o mai freci aiurea si sa iei bani. Te-as intreba cum e viata de somer, da pentru somaj trebuie sa stii sa depui actele si sa completezi un formular. Bine ca ti-ai pus poza sa stim cu totii cum arati, chiar nu ma mira ca faci Hip-Hop chiar nu ma asteptam sa canti la vioara ca are mai mult de o coarda (cu care esti obijnuit)

        Pace! (Cum zici tu)

    • Bagabont nu e tot una cu vagabond. Daca esti crescut pe balcon, n`ai de unde sa stii. Samanta despre care vbesti nu poti niciodata sa stii cum este decat daca ai ocazia s`o vezi in esenta. nu conteaza ambalajul. Sincer dai dovada ca esti foarte prost si atacat. probabil din conducere sau de pe la programare. Alt pupincoorist de cea mai joasa speta! O viata plina de bagabonti iti doresc!

  4. Pup'n'Fund says:

    Baa…care postezi cu “numele” meu?

  5. Rebelii says:

    Ce caterinca e aici sa moara junior !

  6. Namco Inmate says:

    Dupa cum vezi Felix(Revista Flacara),am reusit sa suparam exact partea de lipitori de care vorbeam la inceput,oameni de nimic care in felul lor sunt tristi si demni de mila

  7. Pup'n'Fund says:

    Ba nu stiu pe cine suparati dar e unul aici care sa drept mine si asta nu-mi place. Ba Namco Inmate tu esti lipitoarea de care zici. Daca ai tupeu iesi in fata si zi ce ai de zis

  8. Dubios911 says:

    Uite ce trafic pe Flacarapunctro!!!!
    Frectie la picior de lemn ce faceti voi aici. A stiut bine ala care a scris “We build fun” pe tricouri :))

    PS: inca mai vand telefoane 😀
    http://forum.computergames.ro/44-gsm/690236-2xbb-torch-9800-2xbb-bold-9700-a/page-3.html

    Marius

  9. Pup'n'Fund says:

    1281 de afisari, n-au mai avut astia asa trafic de multa vreme :D. Plus vr-o 50 de comentarii. Keep up the good work.

  10. Rebelii says:

    Muscati mana care v-a hranit si imbracat atata timp.
    Luati-va stalpii si incepeti o alta firma in alta parte.

  11. mihai says:

    Acum pe bune lasand caterinca la o parte… Daca ai mai mult de 6 luni intr-o firma de cand nu-ti mai place sa lucrezi acolo te afli in una din 2 situatii: ori esti masochist si n-a de ce sa te plangi (pt ca evident iti place), ori slab profesional si nu-ti gasesti altceva de facut (job, hobby, afacere, etc).

  12. mihai says:

    PS: Astept valurile de ura!!! :))

  13. Slave Master says:

    Sunteti ai mei fraierilor. HA HA HA
    Treceti inapoi la munca altfel va face biciul si o marire patetica.

    Tu ala de iti place sa fii Rebel cate taskuri ai facut azi?

  14. Pup'n'Fund says:

    Impostorul care se da pupi’n’fundist ca mine este rugat sa isi gaseasca alta identitate. Mihai – mike tu esti ma?

  15. Rebelii says:

    baaa, care se da drept mine si posteaza despre stalpi ? 😐

  16. Cristian Neacsu says:

    Domnilor, inteleg multe chesti la varsta mea…dar glumele de prost gust nu sunt printre favoritele mele. Am rugamintea sa nu folositi numele meu pentru caterinci ieftine. Daca aveti probleme de identitate mergeti la un birou de evidenta a populatiei sa va emita un buletin nou.
    Sper ca am fost pe deplin inteles si multumesc.

  17. Rosu Costin zis Mikootz says:

    Nu stiu ce sa zic…..nu cred ca vi s-au promis bezele….mie cel putin mi s-a spus la angajare ca nu exista mariri salariale….sunt de cateva luni aici si am primit 2 . Ideea este urmatoarea : Este ceva ce nu ce ti s-a promis si nu ai primit ? NU! ….fiindca nu ti s-a promis nimic.

    Voi acum va bateti cu morile de vant plangandu-va de mila . Cel putin nu o faceti bine.

  18. Radu Vlad says:

    Veniti la EA baieti !!! Fructe moca, reducere la tonomate and a Stefan-free enviroment !! @-) !

  19. panarama says:

    Vreau sa spun ca Namco este o super firma iar specimenele de mai sus sunt doar invidiosi! Iar domnul Lopata este pioner al zilelor noastre. Team Leader-ul meu este un om deosebit cu multa putere de munca. Pt toti cei care nu sunt in stare sa vada ce face Namco pt ei un sincer /care!

  20. Rosu Costin zis Mikootz says:

    P.S : Are cineva bezele?

  21. Jokeeeeeero says:

    Mama, unde e butonu’ de Subscribe ?

  22. Felix Tzele says:

    Ok, revin cu un cometariu detaliat, sper sa punem astfel capat trollingului si flamingului.

    1. Sub nicio forma articolul nu a fost comandat de catre cineva de la conducerea Namco. Andrei Lopata mi-a pus la dispozitie informatii si, bineinteles, parerea lui cu privire la companie, viziunea lui. M-a lasat sa vorbesc cu oricine din firma, mi-a dat, ca sa zic asa, libertate totala in privinta continutului. Nici nu concepeam sa fac articolul intr-un alt mod.

    Tot ce am scris acolo se bazeaza pe lucrurile inregistrate pe reportofon la fata locului si pe discutii informale avute cu diversi angajati ai firmei. Asta mi-au spus cei care au vrut sa vorbeasca(am fost acolo, unii stiati ce fac, trebuia sa veniti cu nemultumirile la inaintare dar…nu s-a intamplat), asta am scris. Vad ca nemultumirile unora dintre voi au aparut sub anonimat , dupa aparitia articolului…dar astea, cred eu, tine mai mult de asteptarile fiecaruia de la locul de munca, de satisfactia persoanala. Deja e alta discutie…

    2. Obiectivitatea articolului: am incercat sa prezint mai mult lucrurile tehnice(deosebit de dificile din perspectiva unui outsider) pe care le fac acolo angajatii, de la producatori pana la testeri. Si pentru asta port un mare respect pentru voi, indiferent ca e vorba de departamentul QA, grafica, design sau orice altceva. Pana la urma articolul nu se dorea a fi special pentru angajatii firmei ci pentru un spectru mai larg de cititori… Am ales sa fac sarcastic finalul, aici a fost greseala mea, trebuia sa fiu ceva mai explicit si mai echilibrat in abordare.

    3.E doar un articol de presa, nu isi propune sa redea adevarul cu majuscula ci doar sa descrie o realitate dintr-o anumita perspectiva.

    Cu toate astea, consider ca articolul meu si comentariile voastre va descriu in perfect acord cu paradigma corporatista schitata de sociologul american C.Wright Mills, paradigma pe care am avut-o in vedere in realizarea articolului:

    “Bureaucracies have overwhelmed the individual city worker, robbing him or her of all independent thought and turning him into a sort of a robot that is oppressed but cheerful. He or she gets a salary, but becomes alienated from the world because of his or her inability to affect or change it.”

  23. Jokeeeeeero says:

    De-acord cu Lungu. Oricum, buna postare, Felix.

  24. Slave Master says:

    Ora 6 a venit sediul Namco s-a golit.
    In sfarsit e liniste si se poate lucra.

  25. panarama says:

    Eu fac overtime pt ca sunt platit bine! /care!

  26. Slave Master says:

    N-om avea noi mocheta, carioci sau fructe moca.
    Dar avem oameni care stiu sa loveasca mana care i-a hranit si care nu au altceva de facut decat sa dea cu pietre.
    E o tara libera si pot face ce vor. Daca vor mocheta si fructe moca se pot catapulta la vecinii imediat. AAA nu va vor nici vecinii… am inteles atunci nu va ramane decat sa invatati sa completati declaratia.

  27. Nimeni says:

    Salut,

    Nu stiu de ce atata trolling pe marginea acestui articol si mai ales de ce, cu atata usurinta si totala lipsa de respect, aruncati cu noroi in niste oameni care nu v-au facut nimic. Probabil o sa spuneti ca v-au facut multe rele si ca din cauza lor v-ati pierdut “tineretea” dar vreau sa va intreb un singur lucru … de ce nu va cautati de munca in alta parte sau pur si simplu plecati daca situatia este atat de nesuportabila? Sunt sigur ca se pot printa niste foi pe care sa le semnati si sa puteti sa va vedeti linistiti de treaba. De ce trebuie sa fiti rautaciosi, de ce trebuie sa fiti magari, de ce trebuie sa spuneti atat de multe lucruri urate si din punctul meu de vedere total neadevarate? De ce nu puteti sa va varsati amarul in alta parte? De ce credeti ca ceea ce se intampla nu se datoreaza in primul rand voua, neputinteti, neprofesionalismului si indolentei voastre? Nu stiu cati dintre cei care au postat aici si au folosit cuvinte grele, au lucrat si in alta parte astfel sa poata face o comparatie. Credeti voi ca in alte parti este mai bine? Eu unul nu stiu ce sa zic, probabil ca da, probabil ca nu dar fiecare isi poate incerca norocul. Asa ca, dupa cum am mai spus, v-as ruga frumos sa incetati cu acest trolling si sa incetati in a mai improsca cu noroi persoane care nu merita acest lucru iar daca sunteti nemultumiti de locul actual de munca sa va adresati managerului direct iar daca problema nu se poate rezolva sa va orientate catre o alta firma.

    Va multumesc.

    • Asta e gandire sanatoasa? De ce sa plece? De ce nu sunt dati afara daca nu sunt competenti cum cei din management se plang? Dar despre ce management vbesc eu? e o conducere similara conducerii Stelei. De ce sa nu fie ok si oamenii care “fac rau” sa faca bine celor ce le muncesc campu? E inadmisibil ce se intampla la nivel de management! Si asta o spun din proprie experienta. Am depasit 3 ani acolo. Am muncit pentru promovarea la assitant. Apoi a tunat si fulgerat “cineva de sus” care nu ma iubea si a zis: “de azi inainte esti tester” cum adica? fraier? Sa aduc aminte ca atunci eram trecuti toti cei din QA “control calitate”, in cartea de munca, fie el lead, assistant sau tester? si ca practic legal nu puteai face nimic pentru a contesta aceasta decizie puerila sau la nervi? Nu gresisem cu nimic si-n plus de asta erau multi in situatia mea. Hartuirea e la moda in Namco si asta n`o poate nega nimeni. Noapte buna!

  28. IOIO says:

    Stefan pleaca la 6

  29. Namco Inmate says:

    Omule,mana care ne-a hranit a fost chiar a noastra si chiar mai mult v-a hranit si va hraneste si pe voi nesimitilor!!!

Comenteaza

 

!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).version={})}(this,(function(exports){"use strict";function __awaiter(e,t,n,i){return new(n||(n=Promise))((function(s,a){function o(e){try{d(i.next(e))}catch(e){a(e)}}function r(e){try{d(i.throw(e))}catch(e){a(e)}}function d(e){var t;e.done?s(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(o,r)}d((i=i.apply(e,t||[])).next())}))}var Blocking;"function"==typeof SuppressedError&&SuppressedError,function(e){e.PENDING="pending",e.NONE="none",e.BLOCKED="blocked",e.ALLOWED="allowed"}(Blocking||(Blocking={}));class Adblock{constructor(e){this.state=Blocking.PENDING,this._mocked=!1,e?(this.state=e,this._mocked=!0):this.state=Blocking.ALLOWED}inject(){return __awaiter(this,void 0,void 0,(function*(){}))}get isBlocked(){return this.state===Blocking.BLOCKED}get isAllowed(){return this.state===Blocking.ALLOWED}toContext(){return{user_has_ad_blocker:null,is_ad_blocked:null}}}const OBFUSCATING_BASE_64_PREFIX="UxFdVMwNFNwN0wzODEybV",encode=e=>OBFUSCATING_BASE_64_PREFIX+btoa(unescape(encodeURIComponent(JSON.stringify(e))));function decode$1(e){return JSON.parse(decodeURIComponent(escape(atob(e.replace(OBFUSCATING_BASE_64_PREFIX,"")))))}var version="0.3.6";const APP_ENV="production",TRACKING_DOMAIN="https://click-euw1.bodis.com/",SALES_JS_URL="https://parking.bodiscdn.com/js/inquiry.js",GOOGLE_CAF_TIMEOUT_SCRIPTS="0",GOOGLE_CAF_TIMEOUT_CALLBACKS="0",GOOGLE_MV3_URL_PARAMS="abp=1&bodis=true",APP_VERSION=version,COOKIE_CONSENT_JS_URL="",isLocal=(e=!0)=>"production"!==APP_ENV;function log(...e){}const FIND_DOMAIN_URL="_fd",getFindDomain=()=>{const e=`/${FIND_DOMAIN_URL}${window.location.search}`;return fetch(e,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"}}).then((e=>e.text())).then(decode$1)};var ZeroClickReasons;!function(e){e.CAF_TIMEDOUT="caf_timedout",e.CAF_ADLOAD_FAIL_RS="caf_adloadfail_rs",e.CAF_ADLOAD_FAIL_ADS="caf_adloadfail_ads",e.DISABLED_GB="disabled_gb",e.DISABLED_AB="disabled_ab",e.DISABLED_DS="disabled_ds",e.AD_BLOCKED="ad_blocked",e.PREFERRED="preferred"}(ZeroClickReasons||(ZeroClickReasons={}));const getZeroClick=e=>__awaiter(void 0,void 0,void 0,(function*(){const t=Object.assign(Object.assign({},e),{type:"zc_fetch"});return fetch("/_zc",{method:"POST",body:JSON.stringify({signature:encode(t)}),headers:{Accept:"application/json","Content-Type":"application/json"}}).then((e=>__awaiter(void 0,void 0,void 0,(function*(){try{return decode$1(yield e.text())}catch(e){return{}}}))))})),waiter=(e,t)=>new Promise((n=>{t(e),e<=0&&n();let i=e;const s=()=>{i>0?(i-=1,t(i),setTimeout(s,1e3)):n()};s()})),decode=()=>JSON.parse(atob(window.park||""));var PAGE_STYLES='* {\n font-smoothing: antialiased;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\nhtml, body {\n width: 100%;\n margin: 0;\n}\n\nhtml {\n background-color: #2B2B2B;\n height: 100%;\n}\n\nbody {\n min-height: 90%;\n font-family: Arial, sans-serif;\n letter-spacing: 1.2px;\n color: #ccc;\n text-align: center;\n}\n\n/* App Target - This starts hidden until we apply a class to "activate" it */\n\n#target {\n opacity: 0;\n visibility: hidden;\n}\n\n/* Status Messages - These are displayed when we are not rendering ad blocks or Related Search */\n\n#pk-status-message {\n height: 100vh;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}\n\n/* Sales Box - Default State */\n\n#sales-box {\n display: block;\n width: 100%;\n padding: 3px;\n text-align: center;\n text-decoration: none;\n color: #8EABC0;\n}\n\n#sales-box a {\n display: block;\n width: 100%;\n text-decoration: inherit;\n color: #8EABC0;\n cursor: pointer;\n}\n\n/* Sales Box - Highlighted State */\n\n#sales-box.is-highlighted {\n position: relative;\n z-index: 1;\n background: #032438 linear-gradient(to top, #044368 0%, #000 100%);\n box-shadow: 0 0 15px 0 #000;\n border-bottom: 3px solid #262626;\n}\n\n#sales-box.is-highlighted a {\n line-height: 1.3;\n display: inline-block;\n font-size: 18px;\n color: #fff;\n text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.5);\n background: none;\n}\n\n/* Ellipsis Loader */\n\n.pk-loader {\n display: inline-block;\n position: relative;\n width: 80px;\n height: 80px;\n}\n\n.pk-loader div {\n position: absolute;\n top: 33px;\n width: 13px;\n height: 13px;\n border-radius: 50%;\n background: #ccc;\n animation-timing-function: cubic-bezier(0, 1, 1, 0);\n}\n\n.pk-loader div:nth-child(1) {\n left: 8px;\n animation: pk-anim-1 0.6s infinite;\n}\n\n.pk-loader div:nth-child(2) {\n left: 8px;\n animation: pk-anim-2 0.6s infinite;\n}\n\n.pk-loader div:nth-child(3) {\n left: 32px;\n animation: pk-anim-2 0.6s infinite;\n}\n\n.pk-loader div:nth-child(4) {\n left: 56px;\n animation: pk-anim-1 0.6s infinite;\n animation-direction: reverse;\n}\n\n.pk-loader-text {\n position: fixed;\n font-size: 12px;\n right: 20px;\n bottom: 20px;\n font-weight: lighter;\n}\n\n/* Utilities */\n\n.pk-message-title {\n font-size: 2em;\n font-weight: bold;\n}\n\n.pk-page-ready {\n opacity: 1 !important;\n visibility: visible !important;\n}\n\n@media only screen and (max-width: 600px) {\n .hidden-xs {\n opacity: 0;\n visibility: hidden;\n }\n}\n\n/* Animation */\n\n@keyframes pk-anim-1 {\n 0% {\n transform: scale(0);\n }\n 100% {\n transform: scale(1);\n }\n}\n\n@keyframes pk-anim-2 {\n 0% {\n transform: translate(0, 0);\n }\n 100% {\n transform: translate(24px, 0);\n }\n}\n';const APP_TARGET="#target",MESSAGE_SELECTOR="#pk-status-message",PAGE_READY_CLASS="pk-page-ready",MESSAGE_TEMPLATE='
';class Renderer{constructor(e){this._domIsReady=!1,this.revealPage=()=>{this.domNode&&this.domNode.classList.add(PAGE_READY_CLASS)},this.injectMetaDescription=e=>{if(!e||0===e.length)return;window.document.title=e;const t=document.createElement("meta");t.setAttribute("name","description"),t.setAttribute("content",`See relevant content for ${e}`),document.getElementsByTagName("head")[0].appendChild(t)},this.domNode=document.querySelector(e)}get domIsReady(){return this._domIsReady}set domIsReady(e){this._domIsReady=e,e&&this.injectStyles(PAGE_STYLES)}message(e,t=""){if(this.injectHTML(MESSAGE_TEMPLATE),this.domNode){const t=this.domNode.querySelector(MESSAGE_SELECTOR);t&&(t.innerHTML=e)}t&&this.injectMetaDescription(t)}salesBanner(e){if(!e)return;const{href:t,position:n,message:i,theme:s}=e,a=document.createElement("div"),o=n||"",r="HIGHLIGHT"===s?"is-highlighted":"";a.innerHTML=t?`\n
\n ${i}\n
\n `:`\n
\n ${i}\n
\n `,"BOTTOM"===n?(a.style.marginTop="30px",document.body.appendChild(a)):document.body.prepend(a)}loading(e){let t="a few";e>0&&(t=`${e}`),this.message(`\n
\n
\n
\n
\n
\n
\n \n `)}adBlockMessage(){this.message("\n

Ad block detected

\n Please disable your ad blocker and reload the page.\n ")}errorParkingUnavailable(){this.message("\n

An Error Occurred

\n

Parking is currently unavailable. We'll be right back.

\n ")}errorParkingServicesDisabled(){this.message("\n

An Error Occurred

\n

Services for this domain name have been disabled.

\n ")}errorParkingNoSponsors(e){this.message(`\n
\n No sponsors\n
\n \n ${window.location.hostname} currently does not have any sponsors for you.\n \n `,e)}imprint(e){if(!e)return;const t=document.querySelector("#imprint-text");t&&(t.innerHTML=e.replace(/(?:\r\n|\r|\n)/g,"
"))}injectStyles(e){if(!e)return;const t=document.createElement("style");t.innerHTML=e.toString(),document.head.appendChild(t)}injectScript(e){if(!e)return;const t=document.createElement("script");t.type="text/javascript",t.src=e,document.body.appendChild(t)}injectJS(js){js&&0!==js.length&&eval(js)}injectHTML(e){this.domNode?(e&&(this.domNode.innerHTML=e),this.domIsReady=!0):(this.domIsReady=!1,console.error("An error occurred when trying to render this page. DOM node not found."))}prerender(e){this.injectMetaDescription(e.domain),this.injectHTML(e.html)}template(e){var t;this.domIsReady||this.prerender(e),this.injectStyles(e.stylesheet),this.imprint(e.imprint),this.salesBanner(e.salesBanner),this.injectJS(e.javascript),null===(t=e.scripts)||void 0===t||t.forEach((e=>{this.injectScript(e)}))}}const Render=new Renderer(APP_TARGET);var Type;!function(e){e[e.Failed=0]="Failed",e[e.Disabled=1]="Disabled",e[e.Redirect=2]="Redirect",e[e.Parking=3]="Parking",e[e.Sales=4]="Sales"}(Type||(Type={}));let State$2=class{get trackingType(){return this._trackingType}set trackingType(e){this._trackingType=e}get track(){return!!this.trackingType}};class Disabled extends State$2{constructor(){super(...arguments),this.type=Type.Disabled}static build(e,t){let n;switch(t===Blocking.BLOCKED&&(n="adblocker"),e.cannotPark){case"disabled_mr":case"disabled_rc":n=e.cannotPark}if(n){const t=new Disabled;return t.reason=n,t.domain=e.domainName,t}}get message(){switch(this.reason){case"adblocker":return"

Ad block detected

Please disable your ad blocker and reload the page.";case"disabled_mr":return`

Invalid URL

Referral traffic for ${this.domain} does not meet requirements.`;default:return`

No sponsors

${this.domain} currently does not have any sponsors for you.`}}get trackingType(){switch(this.reason){case"adblocker":return"ad_blocked_message";case"disabled_mr":return"invalid_referral";case"disabled_rc":return"revenue_cap_reached";default:return"no_sponsors_message"}}toContext(){return{cannotPark:this.reason}}}class Failed extends State$2{constructor(){super(...arguments),this.type=Type.Failed}static cannotPark({cannotPark:e}){switch(e){case"disabled_b":case"prohibited_ua":case"disabled_fr":case"revenue_cap_reached":case"disabled_mr":case"disabled_rc":case"disabled_cp":case"invalid_domain":{const t=new Failed;return t.reason=e,t}}}static noSponsors({cannotLoadAds:e}){if(e){const e=new Failed;return e.reason="no_sponsors",e}}static fromError(e){const t=new Failed;return t.reason="js_error",t.error=e,t}get track(){return!!this.trackingType}get message(){switch(this.reason){case"disabled_fr":case"disabled_rc":case"no_sponsors":return`\n

No Sponsors

\n

${this.domain} currently does not have any sponsors for you.

`;case"disabled_mr":return`\n

Invalid URL

\n

Referral traffic for ${this.domain} does not meet requirements.

`;case"js_error":return"\n

An Error Occurred

\n

Parking is currently unavailable. We'll be right back.

\n ";default:return"\n

An Error Occurred

\n

Services for this domain name have been disabled.

\n "}}get trackingType(){switch(this.reason){case"disabled_rc":return"revenue_cap_reached";case"disabled_mr":return"invalid_referral";case"adblock":return"ad_blocked_message";case"no_sponsors":return"no_sponsors_message"}}get domain(){return window.location.hostname}toContext(){return{cannotPark:this.reason}}}function unpackPHPArrayObject(e,t){const n=e[t];if(n&&!Array.isArray(n))return n}class Parking extends State$2{constructor(){super(...arguments),this.type=Type.Parking}static build(e,t){const n=new Parking;n.domain=e.domainName,n.html=e.template,n.scripts=e.scripts||[],n.javascript=e.inlineJs,n.stylesheet=e.styles,n.imprint=e.imprintText;const i=unpackPHPArrayObject(e,"salesSettings"),s=(null==i?void 0:i.status)&&"NOT_FOR_SALE"!==(null==i?void 0:i.status);if(s){const{status:e,location:t,message:s,link:a,type:o}=i;n.salesBanner={message:s,href:a,position:t,theme:o}}return t.wantsToServeAds?n.trackingType="ctr":s&&window.location.pathname.startsWith("/listing")?n.trackingType="sales":n.trackingType="visit",n}toContext(){return{}}}class Sales extends State$2{constructor(){super(...arguments),this.type=Type.Sales}static build(e){const t=unpackPHPArrayObject(e,"salesSettings");if(!t)return;const{status:n}=t;return["NOT_FOR_SALE","EXTERNAL_MARKET","URL"].includes(n)?void 0:window.location.pathname.startsWith("/listing")?new Sales:void 0}toContext(){return{}}get trackingType(){return"sales"}init(e){window.context=e;const t=document.createElement("script");t.type="text/javascript",t.src=SALES_JS_URL,document.head.append(t)}}class Redirect extends State$2{constructor(){super(...arguments),this.type=Type.Redirect}static build(e,t,n){const i=unpackPHPArrayObject(e,"salesSettings"),{zeroClickDelay:s,skenzoRedirect:a,skenzoUrl:o,showInquiryForm:r,canZeroClick:d,cannotPark:c}=e;if(window.location.pathname.startsWith("/listing")&&["EXTERNAL_MARKET","URL"].includes(null==i?void 0:i.status)){if(null==i?void 0:i.external)return Redirect.toState(i.external,"sales");if(null==i?void 0:i.link)return Redirect.toState(i.link,"sales")}if(n.cannotLoadAds&&n.wantsToServeAds)return Redirect.toState(n.noAdsRedirectUrl,"no_ads_redirect");if(d&&(null==t?void 0:t.reason)){if(null==t?void 0:t.redirect)return Redirect.toState(t.redirect,"zc_redirect",s);if(a&&o)return Redirect.toState(o,"skenzo_redirect")}return(null==i?void 0:i.status)&&"NOT_FOR_SALE"!==(null==i?void 0:i.status)&&(n.cannotLoadAds||n.cannotLoadAds&&!d||r)?Redirect.toState(`${window.location.origin}/listing`):void 0}static toState(e,t,n=0){const i=new Redirect;return i.url=e,i.delay=n,i.trackingType=t,i}toContext(){return{}}}const browserState=()=>{var e,t,n,i,s;const{screen:{width:a,height:o},self:r,top:d,matchMedia:c,opener:l}=window,{documentElement:{clientWidth:h,clientHeight:u}}=document;let p;try{p=(new Date).getTimezoneOffset()/60*-1}catch(e){p=null}return{popup:!(!l||l===window),timezone_offset:p,user_preference:null===(e=null===Intl||void 0===Intl?void 0:Intl.DateTimeFormat())||void 0===e?void 0:e.resolvedOptions(),user_using_darkmode:Boolean(c&&c("(prefers-color-scheme: dark)").matches),user_supports_darkmode:Boolean(c),window_resolution:{width:null!=h?h:0,height:null!=u?u:0},screen_resolution:{width:null!=a?a:0,height:null!=o?o:0},frame:d===r?null:{innerWidth:null!==(t=null==r?void 0:r.innerWidth)&&void 0!==t?t:0,innerHeight:null!==(n=null==r?void 0:r.innerHeight)&&void 0!==n?n:0,outerWidth:null!==(i=null==r?void 0:r.outerWidth)&&void 0!==i?i:0,outerHeight:null!==(s=null==r?void 0:r.outerHeight)&&void 0!==s?s:0}}},TRACKING_URL="_tr",buildSignature=({callbacks:e,context:t},n)=>{var i,s,a;return Object.assign({ad_loaded_callback:null==e?void 0:e.adLoadedCallback,app_version:version,caf_client_id:null===(i=null==t?void 0:t.pageOptions)||void 0===i?void 0:i.pubId,caf_timed_out:null==e?void 0:e.cafTimedOut,caf_loaded_ms:null==e?void 0:e.cafLoadedMs,channel:null===(s=null==t?void 0:t.pageOptions)||void 0===s?void 0:s.channel,fd_server_datetime:t.fd_server_datetime,fd_server:t.fd_server,flex_rule:t.flex_rule,host:t.host,ip:t.ip,ivt:null===(a=null==t?void 0:t.pageOptions)||void 0===a?void 0:a.ivt,js_error:t.js_error,no_ads_redirect:t.noAdsRedirect,page_headers:t.page_headers,page_loaded_callback:null==e?void 0:e.pageLoadedCallback,page_method:t.page_method,page_request:t.page_request,page_time:t.page_time,page_url:t.page_url,reportable_channel:t.reportableChannel,reportable_style_id:t.reportableStyleId,template_id:t.templateId,type:n,user_has_ad_blocker:t.user_has_ad_blocker,uuid:t.uuid,zeroclick:t.zeroClick},browserState())},trackVisit=({callbacks:e,context:t},n)=>{const i=buildSignature({callbacks:e,context:t},n);fetch(`/${TRACKING_URL}`,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify({signature:encode(i)})})};var State$1;!function(){if(!window.CustomEvent){function e(e,t){t=t||{bubbles:!1,cancelable:!1,detail:void 0};const n=document.createEvent("CustomEvent");return n.initCustomEvent(e,t.bubbles,t.cancelable,t.detail),n}e.prototype=window.Event.prototype,window.CustomEvent=e}}(),function(e){e[e.Pending=0]="Pending",e[e.Loaded=1]="Loaded",e[e.Failed=2]="Failed"}(State$1||(State$1={}));class Provider{constructor(e){this.timeoutSeconds=5,this.handlePixelEvent=e=>{switch(this.state){case State$1.Failed:break;case State$1.Pending:setTimeout((()=>this.handlePixelEvent(e)),100);break;case State$1.Loaded:this.onPixelEvent(e)}},this.watch=()=>{switch(this.state){case State$1.Loaded:case State$1.Failed:break;case State$1.Pending:this.isLoaded()?this.state=State$1.Loaded:this.isTimedOut()?this.state=State$1.Failed:setTimeout(this.watch,50)}},this.config=e,this.identifier&&this.identifier.length>0?(this.state=State$1.Pending,this.timeoutAt=new Date,this.timeoutAt.setSeconds(this.timeoutAt.getSeconds()+this.timeoutAfter()),this.injectPixel()):this.state=State$1.Failed}get identifier(){var e;return null===(e=this.config)||void 0===e?void 0:e.key}get pixelEvents(){var e;return null===(e=this.config)||void 0===e?void 0:e.pixel_events}injectPixel(){this.injectedAt||(this.injectedAt=new Date,this.inject(),this.watch())}inject(){const e=document.createElement("script");e.text=this.script,document.head.appendChild(e)}isTimedOut(){return+new Date>=+this.timeoutAt}timeoutAfter(){return this.timeoutSeconds}selectPixelEvents(e){if(Array.isArray(this.pixelEvents))return this.pixelEvents.filter((t=>"term-view"===t.trigger&&"visit"===e||(!(!["term-click","ad-view"].includes(t.trigger)||"ctr"!==e)||"ad-click"===t.trigger&&"click"===e)))}}class Facebook extends Provider{get script(){return`!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window, document,'script','https://connect.facebook.net/en_US/fbevents.js');fbq('init', '${this.identifier}');`}onPixelEvent(e){this.selectPixelEvents(e).forEach((e=>{e&&(e.custom?window.fbq("trackCustom",e.event):window.fbq("track",e.event))}))}isLoaded(){return!!window.fbq}}class Outbrain extends Provider{get script(){return`!function(_window, _document) {var OB_ADV_ID = '${this.identifier}';if (_window.obApi) {var toArray = function(object) {return Object.prototype.toString.call(object) === '[object Array]' ? object : [object];};_window.obApi.marketerId = toArray(_window.obApi.marketerId).concat(toArray(OB_ADV_ID));return;}var api = _window.obApi = function() {api.dispatch ? api.dispatch.apply(api, arguments) : api.queue.push(arguments);};api.version = '1.1';api.loaded = true;api.marketerId = OB_ADV_ID;api.queue = [];var tag = _document.createElement('script');tag.async = true;tag.src = '//amplify.outbrain.com/cp/obtp.js';tag.type = 'text/javascript';var script = _document.getElementsByTagName('script')[0];script.parentNode.insertBefore(tag, script);}(window, document);`}onPixelEvent(e){this.selectPixelEvents(e).forEach((e=>{e&&window.obApi("track",e.event)}))}isLoaded(){return!!window.obApi}}class Revcontent extends Provider{get script(){return""}inject(){const e=document.createElement("script");e.src="https://assets.revcontent.com/master/rev.js",document.head.appendChild(e)}onPixelEvent(e){this.selectPixelEvents(e).forEach((e=>{e&&window.rev("event",e.event)}))}isLoaded(){return!!window.rev}}class Taboola extends Provider{get script(){return"window._tfa = window._tfa || [];!function (t, f, a, x) {if (!document.getElementById(x)) {t.async = 1;t.src = a;t.id=x;f.parentNode.insertBefore(t, f);}}(document.createElement('script'),document.getElementsByTagName('script')[0],'//cdn.taboola.com/libtrc/unip/1451879/tfa.js','tb_tfa_script');"}onPixelEvent(e){this.selectPixelEvents(e).forEach((e=>{e&&window._tfa.push({notify:"event",name:e.event,id:e.pixel_id})}))}isLoaded(){return Array.isArray(window._tfa)}}class Tiktok extends Provider{constructor(e,t){super(e),this.useAltTikTokEventsForAdsPlatformUser=t}get script(){return`!function (w, d, t) {w.TiktokAnalyticsObject=t;var ttq=w[t]=w[t]||[];ttq.methods=["page","track","identify","instances","debug","on","off","once","ready","alias","group","enableCookie","disableCookie"],ttq.setAndDefer=function(t,e){t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}};for(var i=0;i{e&&window.ttq.instance(this.identifier).track(e.event)}))}isLoaded(){return!!window.ttq}}const ADS_PARAM$1="?caf",MESSAGE_PREFIX="FSXDC,.aCS:",ALLOWED_ORIGINS=["https://www.google.com","https://www.adsensecustomsearchads.com"];class Pixels{static build(e){const t=unpackPHPArrayObject(e,"pixel_tracking_data");if(t)return t.useAltTikTokEventsForAdsPlatformUser=e.is_ads,new Pixels(t)}constructor(e){this.onPixelEvent=e=>{const{detail:{type:t}}=e;switch(t){case"visit":case"ctr":case"click":this.providers.forEach((e=>e.handlePixelEvent(t)))}},this.providers=[new Facebook(e.facebook),new Tiktok(e.tiktok,e.useAltTikTokEventsForAdsPlatformUser),new Taboola(e.taboola),new Revcontent(e.revcontent),new Outbrain(e.outbrain)]}listenForEvents(){document.addEventListener("pixel",(e=>{this.onPixelEvent(e)}));window.onmessage=e=>{const{origin:t,data:n}=e;ALLOWED_ORIGINS.includes(t)&&(null==n?void 0:n.startsWith(MESSAGE_PREFIX))&&window.location.search.startsWith(ADS_PARAM$1)&&document.dispatchEvent(new CustomEvent("pixel",{detail:{type:"click"}}))}}dispatchEvent(e){document.dispatchEvent(new CustomEvent("pixel",{detail:e}))}}var State;!function(e){e[e.Pending=0]="Pending",e[e.Loaded=1]="Loaded",e[e.Failure=2]="Failure",e[e.TimedOut=3]="TimedOut",e[e.Errored=4]="Errored"}(State||(State={}));const CAF_SCRIPT_SRC=`https://www.google.com/adsense/domains/caf.js?${GOOGLE_MV3_URL_PARAMS}`,TIMEOUT_SCRIPTS=Number(GOOGLE_CAF_TIMEOUT_SCRIPTS),TIMEOUT_CALLBACKS=Number(GOOGLE_CAF_TIMEOUT_CALLBACKS);class StateMachine{constructor(){this.state=State.Pending}transitionTo(e){this.state=e}transitionFromPendingTo(e){this.done||(this.state=e)}get loaded(){return this.state===State.Loaded}get timedOut(){return this.state===State.TimedOut}get done(){return this.state!==State.Pending}}class Ads{constructor(e,t){this.state={script:new StateMachine,blocks:new StateMachine},this.blocksLoaded=[],this.injectScriptTags=()=>__awaiter(this,void 0,void 0,(function*(){return new Promise((e=>{const t=document.createElement("script");t.type="text/javascript",t.src=CAF_SCRIPT_SRC,t.addEventListener("load",(()=>e(!0))),t.addEventListener("error",(()=>e(!1))),document.body.appendChild(t),TIMEOUT_SCRIPTS>0&&setTimeout((()=>e(!1)),TIMEOUT_SCRIPTS)}))})),this.onPageLoaded=(e,t)=>{if(this.pageLoaded={requestAccepted:e,status:t},this.state.script.done)return;const n=null==t?void 0:t.error_code;n?(this.state.script.transitionTo(State.Failure),this.failureReason=`caf_pageloaderror_${n}`):this.state.script.transitionTo(State.Loaded)},this.onBlockLoaded=(e,t,n,i)=>{this.blocksLoaded.push({containerName:e,adsLoaded:t,isExperimentVariant:n,callbackOptions:i}),this.state.blocks.done||(t?this.state.blocks.transitionTo(State.Loaded):this.blocksLoaded.length>=this.blocks.length&&(this.state.blocks.transitionTo(State.Failure),this.failureReason=`caf_adloadfail_${e}`))},this.onTimeout=()=>{this.state.script.transitionFromPendingTo(State.TimedOut),this.state.blocks.transitionFromPendingTo(State.TimedOut)},this.blocks=e,this.options=t}get loaded(){return this.state.script.loaded&&!this.blocksLoaded.map((e=>e.adsLoaded)).includes(!1)}waitForBlocks(){return __awaiter(this,void 0,void 0,(function*(){return new Promise((e=>{const t=()=>{const n=performance.now();if(this.state.blocks.done)return this.cafLoadTime=Math.round(n-this.cafStartTime),void e();const i=this.blocksLoaded.map((e=>e.adsLoaded));i.includes(!1)||i.length>=this.blocks.length?e():setTimeout(t,50)};t()}))}))}inject(){return __awaiter(this,void 0,void 0,(function*(){try{const e=yield this.injectScriptTags();return this.cafStartTime=performance.now(),e&&void 0!==window.google?(new window.google.ads.domains.Caf(Object.assign(Object.assign({},this.options),{pageLoadedCallback:this.onPageLoaded,adLoadedCallback:this.onBlockLoaded}),...this.blocks),TIMEOUT_CALLBACKS>0&&setTimeout(this.onTimeout,TIMEOUT_CALLBACKS),yield new Promise((e=>{const t=()=>{this.state.script.done?e():setTimeout(t,10)};t()}))):void this.state.script.transitionTo(State.Failure)}catch(e){return void(this.error=e.toString())}}))}toCallbacks(){return{adLoadedCallback:this.blocksLoaded.slice(-1)[0],pageLoadedCallback:this.pageLoaded,cafTimedOut:this.state.script.timedOut||this.state.blocks.timedOut,cafLoadedMs:this.cafLoadTime,googleAdsFailure:!!this.failureReason}}toContext(){const e={cafScriptWasLoaded:this.state.script.loaded,cafScriptLoadTime:this.cafLoadTime,callbacks:this.toCallbacks};return this.error&&(e.js_error={message:this.error}),this.state.script.loaded||(e.zeroclick={reason:"googleAdsFailure"}),e}mockFailedState(){this.state.blocks.transitionTo(State.Failure),this.state.script.transitionTo(State.Failure)}}class TagManager{constructor(e){this.injected=!1,this.identifier=e}inject(){if(this.injected)return;if(!this.identifier)return;if("TEST"===this.identifier)return;const e=document.createElement("script");e.setAttribute("src",`https://www.googletagmanager.com/gtag/js?id=${this.identifier}`),document.head.appendChild(e),this.track(),this.injected=!0}track(){this.push("js",new Date),this.push("config",this.identifier)}push(e,t){window.dataLayer||(window.dataLayer=[]),window.dataLayer.push(arguments)}}const ADS_PARAM="caf",ADS_TRACKING_URL="_tr",BLOCKS_TYPE="ads",BLOCKS_CONTAINER="rs",KNOWN_CAF_PARAMS=["caf","query","afdToken","pcsa","nb","nm","nx","ny","is","clkt"];class Google{static build({pageOptions:e,preferredLanguage:t,blocks:n,googleAnalytics:i},s,a,o){let r={};e&&(r=Object.assign({},e),r.hl||(r.hl=t));let d=null==e?void 0:e.resultsPageBaseUrl;d||(d=window.location.origin);return new Google(s.uuid,n,r,i,d,o)}constructor(e,t,n,i,s,a){this._blocks=t,this._pageOptions=n,this.uuid=e,this._baseURL=new URL(s),this._signature=a,this.ads=new Ads(this.blocks,this.pageOptions),this.tagManager=new TagManager(i)}injectTagManager(){this.tagManager.inject()}injectAds(){return __awaiter(this,void 0,void 0,(function*(){yield this.ads.inject()}))}waitForBlocks(){return __awaiter(this,void 0,void 0,(function*(){return this.ads.waitForBlocks()}))}get blocks(){return(this._blocks||[]).filter((e=>this.wantsToServeAds?e.type===BLOCKS_TYPE:e.container===BLOCKS_CONTAINER)).map((e=>{const t=this.baseURL;new URLSearchParams(window.location.search).forEach(((e,n)=>{t.searchParams.has(n)||t.searchParams.append(n,e)}));const n=Object.assign({},e);if(n.resultsPageBaseUrl=t.toString(),this.wantsToServeAds){const e=new URLSearchParams;e.append("click","true"),e.append("session",this.uuid);const t=Object.assign({},this._signature);delete t.ad_loaded_callback,delete t.caf_loaded_ms,delete t.caf_timed_out,delete t.flex_rule,delete t.frame,delete t.js_error,delete t.no_ads_redirect,delete t.page_headers,delete t.page_request,delete t.page_loaded_callback,delete t.popup,delete t.screen_resolution,delete t.user_has_ad_blocker,delete t.user_preference,delete t.user_supports_darkmode,delete t.user_using_darkmode,delete t.zeroclick,e.append("signature",encode(t)),n.clicktrackUrl=`${TRACKING_DOMAIN}${ADS_TRACKING_URL}?${e.toString()}`}return n}))}get baseURL(){const e=new URL(this._baseURL.origin);return e.searchParams.append(ADS_PARAM,"1"),this._baseURL.searchParams.forEach(((t,n)=>{e.searchParams.append(n,t)})),e}get pageOptions(){const e=Object.assign({},this._pageOptions);return Object.keys(this._pageOptions).forEach((t=>{t.startsWith("bodis")&&delete e[t]})),e}get cannotLoadAds(){return!this.ads.loaded}get wantsToServeAds(){return new URLSearchParams(window.location.search).has(ADS_PARAM)}get adsMode(){return this.ads.loaded&&this.wantsToServeAds}get adsReady(){return this.wantsToServeAds&&!this.cannotLoadAds}get noAdsRedirectUrl(){const e=new URLSearchParams(window.location.search);return KNOWN_CAF_PARAMS.forEach((t=>e.delete(t))),`${window.location.origin}?${e.toString()}`}get callbacks(){return this.ads.toCallbacks()}toContext(){return Object.assign({blocks:this.blocks,pageOptions:this.pageOptions},this.ads.toContext())}}class CookieConsentManager{constructor(){this.injectScriptTag=()=>__awaiter(this,void 0,void 0,(function*(){return new Promise((e=>{const t=document.createElement("script");t.setAttribute("src",COOKIE_CONSENT_JS_URL),t.addEventListener("load",(()=>this.awaitConsent(e))),t.addEventListener("error",(()=>e(!1))),document.head.appendChild(t)}))}))}inject(){return __awaiter(this,void 0,void 0,(function*(){this.injected||!COOKIE_CONSENT_JS_URL||isLocal()||(this.injected=yield this.injectScriptTag())}))}awaitConsent(e){let t=0;const n=setInterval((()=>{t+=1,20===t&&(clearInterval(n),e(!0)),void 0!==window.__tcfapi&&(window.addEventListener("ConsentActivity",(t=>{const{detail:{status:n}}=t;n&&e(!0)})),clearInterval(n))}),50)}}class App{main(){var e,t;return __awaiter(this,void 0,void 0,(function*(){if(this.parkResponse=decode(),this.findDomainResponse=yield getFindDomain(),!this.findDomainResponse)throw new Error("Domain failed to load.");this.pixels=Pixels.build(this.findDomainResponse),null===(e=this.pixels)||void 0===e||e.listenForEvents(),this.adblock=new Adblock,yield this.adblock.inject(),this.google=Google.build(this.findDomainResponse,this.parkResponse,this.adblock,buildSignature({context:this.context,callbacks:null===(t=this.google)||void 0===t?void 0:t.callbacks},"click")),this.google.injectTagManager();const n=Parking.build(this.findDomainResponse,this.google);Render.prerender(n),this.cookieConsentManager=new CookieConsentManager,yield this.cookieConsentManager.inject();let i=Failed.cannotPark(this.findDomainResponse);if(i)return void(yield this.transitionToFailed(i));yield this.google.injectAds();const s=Disabled.build(this.findDomainResponse,this.adblock.state);if(s)return void(yield this.transitionToDisabled(s));const a=Sales.build(this.findDomainResponse);if(a)return void(yield this.transitionToSales(a));this.eligibleForZeroClick&&(this.zeroClickResponse=yield getZeroClick(this.context));const o=Redirect.build(this.findDomainResponse,this.zeroClickResponse,this.google);o?yield this.transitionToRedirect(o):(i=Failed.noSponsors(this.google),i?yield this.transitionToFailed(i):yield this.transitionToParking(n))}))}transitionToParking(e){return __awaiter(this,void 0,void 0,(function*(){this.state=e,Render.template(e),Render.revealPage(),yield this.google.waitForBlocks(),yield this.track()}))}transitionToRedirect(e){return __awaiter(this,void 0,void 0,(function*(){this.state=e;const t=this.track();Render.revealPage(),yield waiter(e.delay,(e=>Render.loading(e))),yield t,window.location.href=e.url,log(`➡ Redirecting [${e.url}]`)}))}transitionToFailed(e){return __awaiter(this,void 0,void 0,(function*(){this.state=e,Render.message(e.message),Render.revealPage(),yield this.track()}))}transitionToSales(e){return __awaiter(this,void 0,void 0,(function*(){this.state=e,e.init(this.context),yield this.track()}))}transitionToDisabled(e){return __awaiter(this,void 0,void 0,(function*(){this.state=e,Render.message(e.message),Render.revealPage(),yield this.track()}))}track(){var e;return __awaiter(this,void 0,void 0,(function*(){if(!this.state.track)return Promise.resolve();try{const t=this.state.trackingType;return null===(e=this.pixels)||void 0===e||e.dispatchEvent({type:t}),trackVisit({context:this.context,callbacks:this.google.callbacks},t)}catch(e){return}}))}get eligibleForZeroClick(){const{cannotPark:e,canZeroClick:t,zeroClick:n}=this.findDomainResponse,{cannotLoadAds:i,wantsToServeAds:s}=this.google;return!!t&&(!!e||(!(!i||s)||!!(null==n?void 0:n.reason)))}get context(){var e,t,n,i;const s=this.findDomainResponse,a=this.parkResponse,o=null===(e=this.state)||void 0===e?void 0:e.toContext(),r=null===(t=this.adblock)||void 0===t?void 0:t.toContext(),d=null===(n=this.google)||void 0===n?void 0:n.toContext(),c=browserState(),l=Object.assign(Object.assign({},null===(i=this.findDomainResponse)||void 0===i?void 0:i.zeroClick),this.zeroClickResponse);return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({app_version:APP_VERSION},s),a),r),d),o),c),{zeroClick:l})}init(){return __awaiter(this,void 0,void 0,(function*(){try{window.__parkour=this,yield this.main()}catch(e){console.error("app",e);const t=Failed.fromError(e);this.state=t,Render.message(t.message),Render.revealPage()}}))}}(new App).init(),exports.App=App}));