játékfejlesztés.hu
FórumGarázsprojectekCikkekSegédletekJf.hu versenyekKapcsolatokEgyebek
Legaktívabb fórumozók:
Asylum:    5484
FZoli:    4893
Kuz:    4455
gaborlabor:    4449
kicsy:    4304
TPG:    3402
monostoria:    3284
DMG:    3172
HomeGnome:    2919
Matzi:    2526

Pretender:    2498
szeki:    2440
Seeting:    2306
Geri:    2196
Orphy:    1893
Joga:    1791
Bacce:    1783
MaNiAc:    1735
ddbwo:    1654
syam:    1491
Frissebbek | Korábbi postok
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [15] > 20 < [25] [30] [35] [40] [45] [50] [55] [60] [65] [70] [75] [80] [85] [90] [95] [100] [105] [110] [115] [120] [125] [130] [135] [140] [142]
ddbwo - Tag | 1654 hsz       Online status #183350   2012.06.16 19:10 GMT+1 óra  
Én GLSL-ben vagyok beszélő viszonyban a gpu-val, ami kinézetre nagyjából c, és sikerül mindig a lehető leggyorsabbra csinálnom a kódot azon a szinten, ami pl gémekhez kell.

Meg úgy python és c++ közt se látok nagy különbséget, az ötletelési idő kb hosszabb, mint amibe leírni kerül. Ezzel is, azzal is kb 5 perc, ha a fő terv megvan.
A Half-Life 2: Deathmatch promóció megszűnt! [B¤°
Kezdetben volék az üresség. Ám akkor a Struktúrfüggöny megteremté az Urat.
DrunkenDragon* Blackwolf
   
versio - Tag | 673 hsz       Online status #183349   2012.06.16 19:08 GMT+1 óra  
sirpalee: nem ismerem a cuda-t csak olvastam rola , ilyeneket pl:

"the Cuda documentation states that the device nodes only support C code, no classes, inheritance, even no templates"

elkepzelheto hogy valtozott azota, de igazabol mindegy , halott nyelv, sem az ati sem az arm sem az intel nem tamogatja, igy igazabol vitatkozni is ertelmetlen rola
   
LugaidVandroiy - Törzstag | 504 hsz       Online status #183348   2012.06.16 18:57 GMT+1 óra  
Még Java alá is van binding könyvtár CUDA-hoz.

   
sirpalee - Tag | 1282 hsz       Online status #183347   2012.06.16 18:51 GMT+1 óra  
version, az isten szerelmére, ne beszélj faszságokat. a CUDA nem csak c-re képes, támogat elég sokmindent a CX11-es szabványból. istenem...
raytraceisten és übermedic
   
versio - Tag | 673 hsz       Online status #183346   2012.06.16 18:36 GMT+1 óra  
en azert nem szeretem a c++-t mert tulsagosan alacsony szintu, ez ma mar teljesen felesleges, inkab azon kell erolkodni hogy a gpu -t jobban kihasznalhassuk , nem azon hogy az aktualis adatnak mi a pointere, hat ki nem szarja le
   
ddbwo - Tag | 1654 hsz       Online status #183345   2012.06.16 18:14 GMT+1 óra  
Hát ezaz... De az idő, amíg leírom. xD
A Half-Life 2: Deathmatch promóció megszűnt! [B¤°
Kezdetben volék az üresség. Ám akkor a Struktúrfüggöny megteremté az Urat.
DrunkenDragon* Blackwolf
   
versio - Tag | 673 hsz       Online status #183344   2012.06.16 18:12 GMT+1 óra  
ddbwo:

ezt konnyen megoldod, az osztalyban letrehozol egy static LIST-at es a constructoran hozzadod a listaba az aktualis peldanyt
   
ddbwo - Tag | 1654 hsz       Online status #183343   2012.06.16 18:04 GMT+1 óra  
Há nem? Most nekem kell rendezgetni. De ezt leszámítva nincs is jobb a c++nál.
A Half-Life 2: Deathmatch promóció megszűnt! [B¤°
Kezdetben volék az üresség. Ám akkor a Struktúrfüggöny megteremté az Urat.
DrunkenDragon* Blackwolf
   
Joga - Törzstag | 1791 hsz       Online status #183342   2012.06.16 18:03 GMT+1 óra  
(ಠ ›ಠ) Stewie!

   
ddbwo - Tag | 1654 hsz       Online status #183341   2012.06.16 18:00 GMT+1 óra  
A c++ban nekem csak annyi hiányzik, hogy ha van pl egy roboType osztály, és már egyáltalán megalkották az oszály fogalmát, miért nincs olyan, hogy pl.:

roboType.move();

És akkor az összes ilyen osztályú cucc megcsinálná amit a függvény alapján kell.
A Half-Life 2: Deathmatch promóció megszűnt! [B¤°
Kezdetben volék az üresség. Ám akkor a Struktúrfüggöny megteremté az Urat.
DrunkenDragon* Blackwolf
   
Joga - Törzstag | 1791 hsz       Online status #183340   2012.06.16 17:55 GMT+1 óra  
Lambda azért is szebb, mert nem kell külön függvényt deklarálnod, hogy paraméterként használd, hanem ott helyben kifejtheted.( Pl rendezésnél az összehasonlító operátor )
(ಠ ›ಠ) Stewie!

   
Parallax - Tag | 606 hsz       Online status #183337   2012.06.16 17:34 GMT+1 óra  
versio: Ez már kezd PHP lenni, vicces. Akkor már inkább a C++/CX.

   
versio - Tag | 673 hsz       Online status #183336   2012.06.16 16:56 GMT+1 óra  
Pretender: hat az amp az azert jo mert a gpu-n fut a c++ kod, ilyet mas nem tud , a szaros cuda meg opencl csak elavult C-re kepes
a lambda meg azert tetszik nekem , mert a fuggveny atadashoz nem kell pointer, igy atadom a callback fuggvenyt oszt majd visszahivjak

Kód:
//CALLBACK FUNCTIONS

function<void (int,int)> PointerMovedCallback()
{
return [&](int x,int y) {

$.Position.SetX( (float) x );
$.Position.SetY( (float) y );
};
}
   
Pretender - Törzstag | 2498 hsz       Online status #183334   2012.06.16 16:36 GMT+1 óra  
És ez miért jó? Ennél még a "natív" c++ nyelv is szebb...

   
Joga - Törzstag | 1791 hsz       Online status #183333   2012.06.16 14:46 GMT+1 óra  
Hát, indentálva nem olyan randa ez
(ಠ ›ಠ) Stewie!

   
versio - Tag | 673 hsz       Online status #183332   2012.06.16 14:30 GMT+1 óra  
egy kis AMP , lambdaval , hat nem gyonyoru

Kód:
void Foreach(function<void (T)> f )
{
concurrency::array_view<int, 1> arrayView($.Size, $.Array);

concurrency::parallel_for_each(arrayView.extent , [=](index<1> idx) restrict(amp)
{
f($.Array[i]);
});
}
   
versio - Tag | 673 hsz       Online status #183331   2012.06.16 14:25 GMT+1 óra  
szerintem a c++ mar tul van bonyolitva , attol hogy minden szart beletesznek nem lesz jobb , persze jobbat en sem tudok , mas nyelvekkel meg mas problema van

viszont van par dolog ami tetszik , pl a lamda , AMP, de ovatosan kell hasznalni oket mert a kodolvasast elegge megnehezitik pl:


Kód:
Concurrency::task<Windows::Storage::StorageFile^>(m_location->GetFileAsync(filename)).then([=](Windows::Storage::StorageFile^ file)
{
return Windows::Storage::FileIO::ReadTextAsync(file);
}).then([&](Platform::String^ fileContent)
{
STRING text(fileContent);
callback(text);
});
   
zeller - Törzstag | 487 hsz       Online status #183328   2012.06.16 06:49 GMT+1 óra  
Azt kell mondjam, hogy ezeknek mar rohadtul ideje volt. De sajnos ettol meg elavult maradt a nyelv.

   
proof88 - Törzstag | 530 hsz       Online status #183319   2012.06.15 22:06 GMT+1 óra  
Kód:
cout << vec << endl;
   
Joga - Törzstag | 1791 hsz       Online status #183308   2012.06.15 20:50 GMT+1 óra  
Amúgy, valaki próbálgatta az új C++ szabványt( c++11 )?


Kód:
    std::vector<int> vec = { 10, 20, -50 };

    for( int& i:vec )
        cout << i << endl;

Mennyivel kellemesebb, mint iterátorozni.
(ಠ ›ಠ) Stewie!

   
Pretender - Törzstag | 2498 hsz       Online status #183304   2012.06.15 20:30 GMT+1 óra  
Akkor jó, csak mert gondoltam csinálok helyette egy másikat. Csak azon tűnődtem el 2 Diszkrét matek tétel között, hogy van-e jobb / gyorsabb módja. De akkor nincs.

   
zeller - Törzstag | 487 hsz       Online status #183302   2012.06.15 20:11 GMT+1 óra  
Ez egy kerdes?
Vectors are a kind of sequence container. As such, their elements are ordered following a strict linear sequence.
Vector containers are implemented as dynamic arrays.

Ez nem a szabvany szovege, mert azt most nem talaltam meg, de igazabol az std::vector akkor tomb, ha a szabvany ezt magaban foglalja. Ha a szabavany az implementaciot nem emliti, akkor az implementorra van bizva, hogy hogyan oldja meg a megkovetelt kirteriumoknak valo megfelelest. Ugyanez igaz az algoritmusokra is.

   
Joga - Törzstag | 1791 hsz       Online status #183301   2012.06.15 20:09 GMT+1 óra  
igen
(ಠ ›ಠ) Stewie!

   
Pretender - Törzstag | 2498 hsz       Online status #183300   2012.06.15 20:00 GMT+1 óra  
Hülyeség: Az std::vector tulajdonképpen csak egy tömb, aminek szükség szerint növeljük / csökkentjük a méretét? A find() pl. pedig csak egy lineáris keresés (azaz elejéről indulva nézem az elemek közötti ekvivalenciát)?

   
Parallax - Tag | 606 hsz       Online status #182948   2012.06.11 16:49 GMT+1 óra  
Mester, vége van már a komodor időszaknak. Nem optimalizál? Relatív, vesznek gyorsabb procit és mindjárt jó lesz.

   
versio - Tag | 673 hsz       Online status #182913   2012.06.11 05:50 GMT+1 óra  
hat ezt faszan feloptimizalta ez a nyomorek , ennel meg egy tizeneves is jobban programoz

$.ShipPosition.SetX(600);
000007F7EF4BC952 mov rax,qword ptr [rbx]
000007F7EF4BC955 mov rcx,qword ptr [rax+20h]
000007F7EF4BC959 mov dword ptr [rcx+4],44160000h
$.ShipPosition.SetY(700);
000007F7EF4BC960 mov rax,qword ptr [rbx]
000007F7EF4BC963 mov rcx,qword ptr [rax+20h]
000007F7EF4BC967 mov dword ptr [rcx+8],442F0000h
   
Tibsy - Tag | 307 hsz       Online status #182783   2012.06.08 20:17 GMT+1 óra  
DMG vicces én azt hitem a te tablóképed
   
DMG - Szerkesztő | 3172 hsz       Online status #182719   2012.06.07 20:13 GMT+1 óra  
Hé, én vagyok itt az ügyeletes troll szerkesztő.

-----------------------------------------
Dont Listen to the Naysayers
   
Kuz - Törzstag | 4455 hsz       Online status #182717   2012.06.07 20:06 GMT+1 óra  
Persze, hogy nem érted, hiszen te csak egy karbantartó vagy valami noname banknál.
A memóriám már nem a régi. És ráadásul még a memóriám sem a régi...
Az élet attól szép, hogy bármi megtörténhet. És attól szar, hogy meg is történik...
Ha az egyik szinkronúszó megfullad, mit csinál a többi???

   
DMG - Szerkesztő | 3172 hsz       Online status #182709   2012.06.07 17:56 GMT+1 óra  
Nem igazán értem, hogy Tibsy tablóképe hogy jön a témához.

-----------------------------------------
Dont Listen to the Naysayers
   
Parallax - Tag | 606 hsz       Online status #182707   2012.06.07 17:46 GMT+1 óra  
90 fölött vagyok, izomból. A kettő nem zárja egymást, sőt, szerintem kifejezetten jót tesz.

   
Tibsy - Tag | 307 hsz       Online status #182500   2012.06.06 01:58 GMT+1 óra  
   
Parallax - Tag | 606 hsz       Online status #182225   2012.06.03 13:14 GMT+1 óra  
Nem rossz a VS12, de a "multilanguage-support" csak ritka esetben igaz, a DX template-ek maradtak C++ osok. Még azért így is fényévekkel jobb a CX a standard-nél. Nem is a parallel, inkjább az async itt a nagy húzás, na meg az, hogy lehet kombinálni a rendert a xaml felülettel, vége a flash, meg egyéb workaround-oknak. (Fejlesztési részen nagyot léptek, kíváncsi vagyok a felhasználókra hogyan fognak hatni.)

   
versio - Tag | 673 hsz       Online status #182202   2012.06.03 04:40 GMT+1 óra  
Auto-vectorizer. One of the biggest potential performance gains is doing things in parallel instead of sequentially. Visual Studio 2012 RC provides not only parallelism on the task level, but also at the loop level, automatically. The C++ compiler automatically vectorizes loops if it can. Vectorization reorganizes a loop, for example, a summation loop, so that the CPU can execute multiple iterations at the same time. By using auto-vectorization, loops can be up to eight times faster when they are executed on CPUs that support SIMD instructions. For example, most modern processors support SSE2 instructions, which enable the compiler to instruct the processor to do math operations on four numbers at a time.

Because the compiler recognizes loops that can be vectorized when you compile your code, this occurs automatically. This differs from parallelization, which is described in the next list item.


Auto-parallelizer. Visual Studio 2012 RC improves how you can take advantage of multiprocessor and multi-core hardware. By using the auto-parallelizer, a loop is reorganized so that it can be executed on multiple threads at the same time. This means that your app can take advantage of multi-core CPUs and multiprocessors to distribute chunks of the work to all available processors. You don't have to add any code—the parallelizer automatically reorganizes loops and executes multiple tasks. You can use the #pragma parallelize directive to tell the compiler which loops to parallelize.
   
zeller - Törzstag | 487 hsz       Online status #182165   2012.06.02 16:20 GMT+1 óra  
Egy library gyujtemeny. Keress ra.
A /-es include csak annyi, hogy az include path-hez relativen, nem a root dirben keresi a file-t.

Nezd meg melyik verziora dependal a kod
Toltsd le azt a boostot es buildeld le
Allidtsd be rendesen az include es a lib patheket
Es remelhetoleg fordulni fog

A boosthoz minden leirast megtalalsz a hivatalos oldalukon.

   
Bukta - Tag | 308 hsz       Online status #182162   2012.06.02 15:12 GMT+1 óra  
Na most jön a láma kérdés... Mi az a boost? Valami dll vagy olyan mit a stdlib.h? Meg a xyz/asd.hpp formátumot se ismerem . Én valami TortoiseSVN progot raktam fel... Azt gondoltam nem lesz ez ilyen problémás . Ugylátszik meg kéne már rendesen taulnom a c++t is... majd most nyáron akkor
ArgumenException: A megadott DependencyObject nem ehhez a Freezable elemhez tartozó környezet. Paraméter neve: context
:oO Mi a???
   
zeller - Törzstag | 487 hsz       Online status #182128   2012.06.01 19:37 GMT+1 óra  
Fennvan egyaltalan a boost?

   
Bukta - Tag | 308 hsz       Online status #182127   2012.06.01 19:17 GMT+1 óra  
Szevasztok!

Hallott már valamelyikőtök a 0.A.D. stratégiai játékról? Csak mert nyílt forráskódú project és C++ & OpenGL komboval készült és 25 kiló sorból áll össze.
Egyáltalán nem vagyok hardcore c++os de letöltöttem kiváncsi vagyok rá...
csakhogy kidob egy-két errort , de mind1ik ugyanaz:
'error C1083: Cannot open include file: 'boost/version.hpp': No such file or directory D:\Games\0 A.D. alpha\binaries\data\mods\public\Új mappa\source\lib\pch\pch_boost.h 21'
ami erre a sorra vonatkozik:
#include <boost/version.hpp>
Addig ok hogy nem talál valami hpp fájlt, de én azt honnét gereblézzem elő?
Meg talán így tudom megadni neki valahogy?

Valaki ismeri egyáltalán ezt a 0ad-t?
ArgumenException: A megadott DependencyObject nem ehhez a Freezable elemhez tartozó környezet. Paraméter neve: context
:oO Mi a???
   
versio - Tag | 673 hsz       Online status #181606   2012.05.24 23:13 GMT+1 óra  
van egy erdekes problema win8 metro alatt, amikor meghivom a windows dispatchert, ami vegulis visszaadja a vezerlest a windowsnak, es amikor visszater processzormagot valt ez az allat
legalabbis ha nem bug, tehat ide oda ugral a programom a magok kozott ami totalisan abnormalis mivel a cache-t ujra kell tolteni

persze megoldom hogy ez ne igy legyen mindenkeppen csak erdekes
   
Seeting - Törzstag | 2306 hsz       Online status #180780   2012.05.14 11:23 GMT+1 óra  
#include "boost/filesystem.hpp"
   
ddbwo - Tag | 1654 hsz       Online status #180704   2012.05.12 15:40 GMT+1 óra  
Egy apró gondom mégis van ezzel, körülményes és csúnya kinyerni külön-külön a file-okat és a könyvtárakat. A file típus meghatározás meg mégcsúnyább.

Van valami egyszerűbb dolog, amivel mondjuk külön lehetne begyűjteni a könyvtárakat és külön a file-okat, esetleg még file-típust is mond?
Vagy a válogatást meg kell írni?
A Half-Life 2: Deathmatch promóció megszűnt! [B¤°
Kezdetben volék az üresség. Ám akkor a Struktúrfüggöny megteremté az Urat.
DrunkenDragon* Blackwolf
   
ddbwo - Tag | 1654 hsz       Online status #180686   2012.05.11 22:56 GMT+1 óra  
Találtam egyet...

<dirent.h>

Ez megfelelő vagy van ennél jobb is? Úgy értem hogy független?
// tök mindegy, működik azt szevasz. xd

Ezt a hozzászólást ddbwo módosította (2012.05.11 23:14 GMT+1 óra, ---)
A Half-Life 2: Deathmatch promóció megszűnt! [B¤°
Kezdetben volék az üresség. Ám akkor a Struktúrfüggöny megteremté az Urat.
DrunkenDragon* Blackwolf
   
ddbwo - Tag | 1654 hsz       Online status #180675   2012.05.11 20:21 GMT+1 óra  
Most kicsit jobban rágyúrtam az osztály kezelésre, meg nagyjából autómatikussá tettem a kódjaimat. De valami még hiányzik a teljes szabadságból:

C++ban mivel tudom megvizsgálni, hogy milyen file-ok vannak egy könyvtárban? Most elméletileg platform független minden kód, tehát valami független megoldást keresnék.
A Half-Life 2: Deathmatch promóció megszűnt! [B¤°
Kezdetben volék az üresség. Ám akkor a Struktúrfüggöny megteremté az Urat.
DrunkenDragon* Blackwolf
   
Parallax - Tag | 606 hsz       Online status #179209   2012.04.23 20:22 GMT+1 óra  
versio: Az egy dolog, hogy valami szintaktikailag egy kupleráj, de hogy ezt még fokozod is workaround-okkal csak lassítani fogja a fejlesztést még jobban. Szerintem használd úgy az adott eszközt, hogy a lehető legkevesebb megerőszakolással járjon és ne gáncsold el jobban magad, mint amennyit az eszköz gáncsol.

   
versio - Tag | 673 hsz       Online status #179029   2012.04.20 12:22 GMT+1 óra  
reptile: csak tombnel csinalom ezt a megoldast, ott altalaban folyamatos olvasas van , es nem lassitja le akkor sem ha minden adatra szukseg van mert a cache tobb streamet is kezel
ha nem tombos az adat akkor a heapbol folyamatosan foglalja a structurakat , igy egymas melle kerulnek
ez a megoldas ha nem is tokeletes minden esetre, atlagban eleg jol mukodik, termeszetesen az sosem volt feltetel hogy egy profi altal optimalizalt kod sebesseget elerjem

Ezt a hozzászólást versio módosította (2012.04.20 13:24 GMT+1 óra, ---)
   
reptile - Tag | 15 hsz       Online status #179028   2012.04.20 12:12 GMT+1 óra  
version, az se igazan jo megoldas, ha minden komponenst kulon streambe raksz. azert mondom, hogy erdemes eldonteni, mi az, ami osszetartozik, es mi az, ami nem feltetlenul. de amugy nem tudom, a pointer miert lenne "csunya" - ha ertelemesen van kezelve, meg mondjuk nem teljesen hulyek a koderek, akkor semmi gond vele

   
versio - Tag | 673 hsz       Online status #179027   2012.04.20 12:07 GMT+1 óra  
reptile: ahogy nezegettem masok kodjat nem nagyon rakjak kulon, es nem is hasznalnak pointereket sem ,mert az is csunya megoldas, es mindenkinek az a celja hogy a kodjat egy honap mulva is megertse, persze aki erti a cache mukodeset es optimalizalni kell megoldja, csak a cel az volt hogy legyen automatikus
   
reptile - Tag | 15 hsz       Online status #179025   2012.04.20 11:59 GMT+1 óra  
version, ez persze csak akkor igaz, ha neked mindig csak a flag-re van szukseged, de akkor mar erdemes inkabb azt kirakni egy kulon tombbe. (vegulis amirol itt beszelunk, az az array-of-structures vs structure-of-arrays)

erdemes merlegelni, mire is lesz szukseg az iteraciok soran, es ugy rendezni az adatot. ha peldaul jellemzo, hogy a "flag"-et gyakran hasznalod a tobbi nelkul, akkor azt kulonrakod, a tobbi meg valoszinuleg ugyis leginkabb egyutt kell.

   
versio - Tag | 673 hsz       Online status #179024   2012.04.20 11:54 GMT+1 óra  
na sikerult megcsinalni a smartpointeres alapot , nem volt egyszeru ennyi feltetelnek megfelelni , legyen ugynolyan gyors legalabb mint a c++, ne legyenek a nyelvben elavult, zavaro jelek mint pl a * vagy &, ->, minden valtozo dinamikus legyen, es ne kelljen torodni a letrejottukkel es megszunesukkel , jol olvashato legyen a kod, es ne terjen el nagyon a megszokottol, ne novelje a forditasi idot, es ne kelljen cpp filokat sem hasznalni, mukodjenek a callbackok, es orokles is megmaradjon

egy kis trukkel sikerult meg a c++ sebesseget is lenyomni , legalabbis ha atlagos kodot veszunk alapul

pl

struct Alma
{
bool flag;
Texture texture;
Object object;
Material material;
}

akkor az ebbol keszult tomb elemek lekerdezesenel a cache az egesz structot streameli , meg akkor is ha csak a flagre van csak szuksegunk , mondjuk egy for ciklusban

a profi altal irt kod igy nez ki:

struct Alma
{
bool* flag;
Texture* texture;
Object* object;
Material* material;
}

flag =new bool[arraysize];
texture =new Texture[arraysize];
object= new Object[arraysize];
material=new Material[arraysize];

ilyenkor a cache csak azokat az adatokat streameli amikre tenylegesen szuksegunk van , es tobbszorosen novekedhet a vegrehajtasi ido, viszont olvashatatlan es csunya a kod, ezt nalam a smartpointer automatikusan lerendezi , ugyhogy altalaban gyorsabb a kod mint ha c++-ban irtam volna

Ezt a hozzászólást versio módosította (2012.04.20 12:10 GMT+1 óra, ---)
   
DMG - Szerkesztő | 3172 hsz       Online status #178959   2012.04.19 14:55 GMT+1 óra  
Idézet
sirpalee :
Idézet
DMG :
De miért itt?

Komolyan lobbizni fogok a gumiszobáért.



Mert a C++ topicot olyan emberek is olvassák, akik esetleg most tanulják, vagy nem látják még át eléggé. És így belinkelni ide mindenféle macros hülyéskedést, nem a legjobb dolog.

Gumiszoba már volt, 2SD és én szövegeltünk sokáig(legalábbis így rémlik), hogy legyen, aztán meg miattunk zárták be



Viszont lehet személyeskedés és egyéb flame nélkül is vitatkozni.

Ismerem a gumiszoba történetét, ezért is mondtam hogy lobbizni fogok, valaki itt már egyszer kérte, hog ynyissuk meg újra.
-----------------------------------------
Dont Listen to the Naysayers
   
Frissebbek | Korábbi postok
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [15] > 20 < [25] [30] [35] [40] [45] [50] [55] [60] [65] [70] [75] [80] [85] [90] [95] [100] [105] [110] [115] [120] [125] [130] [135] [140] [142]