Seite 11 von 254

Re: Jammer-Thread

Verfasst: 29.08.2010, 17:02
von Krishty
Die Steuerung von Mafia II ist der letzte Dreck. Selten war etwas so schwammig, klobig, nervig … die Figur zeigt dauernd woanders hin als die Maus. Und wenn man im Zielmodus ist, ist der halbe Bildschirm von der Spielfigur verdeckt und Deckungssuche unmöglich. Wie konnte man das nur dermaßen in den Sand setzen, nachdem die Steuerung in Teil 1 so schön direkt und zugleich butterweich war?

Der nächste Punkt ist die verwaschene Grafik … ich hätte ja nie gedacht, dass ein Spiel gleichzeitig verwaschen und verpixelt aussehen kann, aber Spieleneuerscheinungen sind ja bekanntlich die Würze des Lebens. Haben die was zu verstecken, dass die über (fast) alles einen 1×1-Gauss jagen? Hätten sie die Arbeit nicht besser in eine funktionierende Anti-Aliasing-Option investieren können?
bäh2.png
Es ist eine beispielLose Frechheit, ein Spiel nur in HD spielen zu können, weil es sonst schlicht und einfach zu verwaschen wäre, um etwas zu erkennen. Und dass es dann immernoch flimmert wie nix. Sehr schade um den meisterhaften Content … der hat es einfach nicht verdient, so kopfschmerzverursachend präsentiert zu werden … auf halbe Größe skaliert sieht es nämlich einfach umwerfend aus.
halb.png

Re: Jammer-Thread

Verfasst: 29.08.2010, 18:33
von eXile
Sieht ja hart gefailt aus. Ist das etwa eine Konsolenumsetzung? (Dann würde das mit der schlechten Steuerung auch Sinn ergeben.)

Nachtrag: Apropos HD-Auflösung. Ich war hier mal im lokalen Computermarkt und habe mir die aktuellen Notebooks angeschaut. Welche alle wegen einer HD-Auflösung Bildschirme dem 16:9-Bildbreiten-/-höhenverhältnis haben. Und ich muss sagen: Ich kann auf solchen Teilen nicht arbeiten. Selbst wenn ich im Texteditor eine 8-Punkt-Schriftart einstelle, ist mir zu wenig Text vertikal dargestellt. Mit 16:10 konnte ich mich ja noch anfreunden, aber 16:9 ist zu viel.

Übrigens gab es auch mal einen Artikel, dass durch die Einführung der Full-HD-Auflösung kaum ein Hersteller nunmehr höhere Auflösungen entwickeln will. Auf einem 22-Zoll-Arbeitsbildschirm ist mir Full-HD aber bereits zu grobkörnig.

Re: Jammer-Thread

Verfasst: 29.08.2010, 18:57
von Krishty
eXile hat geschrieben:Sieht ja hart gefailt aus. Ist das etwa eine Konsolenumsetzung? (Dann würde das mit der schlechten Steuerung auch Sinn ergeben.)
Es erscheint auch für PS3 und XBox360, und das scheint tatsächlich viel zu stark abgefärbt zu haben.
eXile hat geschrieben:Selbst wenn ich im Texteditor eine 8-Punkt-Schriftart einstelle, ist mir zu wenig Text vertikal dargestellt. Mit 16:10 konnte ich mich ja noch anfreunden, aber 16:9 ist zu viel.
Andererseits bietet Breitbild auch die Möglichkeit, mehrere Dokumente nebeneinander zu platzieren. Mit einem horizontal dreifach gegliederten 16:9er (links Task-Leiste / Projektbrowser / Messenger, mittig Quelltext, rechts Debug-Output) habe ich effektiv mehr Code im Blick als bei 5:4, wo ich nur die halbe Höhe nutzen konnte weil gestapelt werden musste und für horizontale Anordnung zu wenig Breite da war …

Re: Jammer-Thread

Verfasst: 30.08.2010, 02:50
von .357er-Argument
Krishty hat geschrieben:Die Steuerung von Mafia II ist der letzte Dreck. Selten war etwas so schwammig, klobig, nervig … die Figur zeigt dauernd woanders hin als die Maus. Und wenn man im Zielmodus ist, ist der halbe Bildschirm von der Spielfigur verdeckt und Deckungssuche unmöglich. Wie konnte man das nur dermaßen in den Sand setzen, nachdem die Steuerung in Teil 1 so schön direkt und zugleich butterweich war?
Hölle, da hast Du noch kein GTAIV ohne Pad gezockt, oder? :) Kaum 25 Tasten, die man in Griff kriegen muss, nur um dann das derzeitige Gefährt im Hafenkai zu versenken, weil man aus Versehen den Radiosender gewechselt hat und das Fernlicht eingeschaltet, nachdem man den lästigen Fußgänger beim Abbiegen überfahren hat, usw... aber das Abgluckern des Autos schlägt dann wunderbar spiegelnde Wellen, die astrein von der Action-Kamera eingefangen werden, während die Spielfigur mit Nahtoderfahrung in den Wellen rumschwappt. :)

Aber in beiden Fällen (Mafia2 und GTA4) verpasst man ein großartiges Spiel, wenn man sich nicht die Mühe (sprichwörtlich) macht, sich an die Steuerung zu gewöhnen.

Re: Jammer-Thread

Verfasst: 31.08.2010, 14:19
von Krishty
.357er-Argument hat geschrieben:Hölle, da hast Du noch kein GTAIV ohne Pad gezockt, oder? :)
Allein darüber, wie viele Spiele-Blockbuster ich in den letzten Jahren verpasst habe, könnte ich einen eigenen Jammer-Thread abzweigen … aber danke der Info – wenn ich die Vollversion in die Hände kriege, werde ich sie also nicht sofort in die Ecke legen sondern brav die Steuerung lernen (oder meinen PlayStation-Controller anschließen) :)

Re: Jammer-Thread

Verfasst: 04.09.2010, 00:46
von Krishty
Ich hasse C++. Wenn C nicht schon so früh so weit verbreitet gewesen wäre, würde es heute kaum ein Schwein benutzen … nicht, dass mir die Alternativen besser gefallen würden – ihr wisst, dass ich alle anderen Sprachen noch viel mehr hasse – aber es gibt Dinge, die einfach nicht sein müssen …

Heute hatte ich einen netten Bug, wo eine unterbrochene enum-Aufzählung

Code: Alles auswählen

enum {
    a,
    b,
    c = a,
    d, // d hat denselben Wert wie b, nicht den, der ursprünglich c zugewiesen worden wäre
};
in Verbindung mit irgendwelchem Template-Quatsch (eine undefinierte Template-Funktion wird als doppelt vorhanden angesehen, wenn man sie erst aufruft und danach spezialisiert?!?) dafür gesorgt, dass ich dem Linker 50 Template-Spezialisierungen von Hand vorsortieren durfte. Als das endlich gefixt war, funkte mir noch so ein Sequence-Point-Dreck dazwischen (modify(i).foo(i); ist was anderes als auto t = modify(i); t.foo(i);) … es gibt Tage, da sollte man garnicht erst die IDE hochfahren …

Re: Jammer-Thread

Verfasst: 07.09.2010, 15:27
von Krishty
Mein Programm ist im Release-Modus nur fast halb so schnell wie im Debug-Modus (170 % Ausführungszeit) – und das mit Kompiliereinstellungen, die sich sonst eigentlich immer bewährt haben. WTF?!? Der Hass!

Re: Jammer-Thread

Verfasst: 07.09.2010, 15:53
von Schrompf
Grmpf hat geschrieben:Sending SIGBUS to "application" due to unaligned access (PC 5 PR 42c88a)
Das ganze Elend zweier Tage in einem Satz. Die Adresse kann ich ja dank MapFile zumindest noch einer Datei und Funktion zuordnen, aber keiner meiner Breakpoints vor/um diese Stelle herum zündet. Scheiß Remote Debugging.

Noch drei Wochen bis Produktionsstart.

Edit: das Grundproblem ist glaube ich die Tatsache, dass hier Code von 70 Leuten über drei Länder und vier Standorte verteilt zusammenarbeiten soll. Ich habe inzwischen eine beängstigende Sicherheit darin entwickelt, fremden Code zu debuggen.

Re: Jammer-Thread

Verfasst: 08.09.2010, 00:38
von Jonathan
Windows neu installiert und git geht nicht mehr. Zeigt keine History von meinen Repos mehr an und wenn ich irgendwas anderes machen will, krieg ich Fehlermeldungen ohne Text. Ich habs jetzt mittlerweile 3 mal neu installiert, in 2 unterschiedlichen Versionen. Mal sehen, ob das irgendwann wieder läuft, wäre schon praktisch...

Re: Jammer-Thread

Verfasst: 10.09.2010, 13:09
von Biolunar
Warum ist es denn so schwer eine vernünftige 64 Bit Version von Flash rauszubringen? Ich könnte kotzen, wenn ich unter Windows immer den 32 Bit IE starten muss um was auf youtube zu sehen... (Und: Nein, ich werde niemals auf einem 64 Bit System 32 Bit Software vorziehen.) Seit ein paar Monaten ist auch die 64 Bit Linux Version von Flash eingestellt *heul* >:-( Immerhin bekomme ich da 32 Bit Flash im 64 Bit Browser zum laufen ohne auch nur ein bisschen selbst frickeln zu müssen. Aber das kann's doch nicht sein oder? Da sieht man mal wie sch**** die proprietären Flash Versionen programmiert sind. Die freien Versionen bieten leider nicht annähernd die Performance, die teilweise nötig ist... Es ist zum Heulen.

Re: Jammer-Thread

Verfasst: 13.09.2010, 18:09
von Krishty
Ganz ganz toll:

Code: Alles auswählen

template <size_t Dimension> class CVector {
    float MyComponents[Dimension];
    …
public:
    float & operator [] (size_t const Index) {
        if(Index >= Dimension)
            throw exception("vector subscript out of range");
        return MyComponents[Index];
    }
};
…
template <size_t VectorsDimension> void Zero(CVector<VectorsDimension> & Vector) {
    for(size_t Dimension = 0; Dimension < VectorsDimension; ++Dimension)
        Vector[Dimension] = 0.0f;
};
Obwohl jeder Vektor-Zugriff geinlined wird und der Compiler die Schleife abrollt (der Index also bei jedem Aufruf eine Konstante ist) gelingt es dem Compiler nicht, zu erkennen, dass die Exception niemals geworfen werden wird. Im Klartext: Alle meine Mathe-Funktionen sind durchsiebt mit Exception-Auslösern, deren Auftreten schon zur Kompilierzeit ausgeschlossen werden könnte. Manchmal weiß ich nicht, was da passiert.

Re: Jammer-Thread

Verfasst: 13.09.2010, 18:35
von Jörg
Wechsle doch endlich mal den Compiler ;)
Der gcc vom Ubuntu 10 macht ne schön kurze Schleife draus (fuer eine Vektor-Groesse von 100), und benutzt sogar ein 4fach-SSE store zum "Einnullen". Das sollte doch reichen, um 'nen Defect-Report zu generieren bei MS.

Re: Jammer-Thread

Verfasst: 13.09.2010, 18:45
von Aramis
Langsam geht es mir auf den Keks. Nennt man das nicht eine Variante des Fahrradständerproblems oder so?

:D (Sorry, es *musste* einfach sein).

Re: Jammer-Thread

Verfasst: 13.09.2010, 18:47
von Schrompf
Und außerdem: es mag Geschmackssache sein, aber ich würde Exceptions nur werfen, wenn ich tatsächlich erwarte, dass das Programm auch ohne diese Operation sinnvoll weiterlaufen kann. Ein Array Out Of Bounds ist ein Grund, den Debugger anzuwerfen oder das Programm abzubrechen, aber weitermachen kann man da meiner Meinung nach nicht mehr. Nimm stattdessen ein Assert und das Thema Optimierungen ist für diese Ecke erledigt.

Re: Jammer-Thread

Verfasst: 13.09.2010, 18:56
von Krishty
@Jörg: Ja, das könnte dir gefallen! Aber warte mal ab, wenn VC 11 kommt und die meine ganzen Bug-Reports und Feature-Requests umgesetzt haben, wird GCC wieder mit links kassiert ;)

@Aramis: Warum mich die Farbe kümmern sollte? Weil das verdammte Ding dick und fett mit meiner und nur meiner Unterschrift bepinselt werden wird, darum! Wäre ja noch schöner, wenn ich vor einer bekackten Maschine kapitulieren würde …

@Schrompf: Nein, das geht nicht – solange man nicht für jeden einzelnen Aufruf nachweisen kann, dass der Parameter in Wertebereich liegt, ist die Prüfung absolut berechtigt und eine Assertion allein, die im Release-Modus einfach garnichts täte, könnte fatal enden. Das ist ja gerade das Problem – theoretisch ist der einzige, der wirklich befugt ist, die Exception zu entfernen, der Compiler. Der ist nur leider zu dumm. Und fortgesetzt werden kann das Programm u.U. doch noch; ich weiß ja vom Standpunkt des Vektors aus nicht, was der Code mal tun wird, der ihn benutzt.

Re: Jammer-Thread

Verfasst: 13.09.2010, 19:01
von Jörg
Ich mag diese Beispiele und auf den Keks gehen sie mir nicht im Geringsten. Zeigen sie doch schoen auf, wo Vorstellung (oder Wunschdenken?) und Wirklichkeit differieren. Gibt ja genug Leute, die predigen, man soll sich endlich auf seinen Compiler verlassen, da sind diese Schnipsel doch klasse um zu zeigen, wie verlassen man dann sein kann. Klar, es gibt fuer (fast) alles und jedes Problem einen Work-around, mit etwas 'Glueck' sogar compiler-spezifisch, aber das hilft ja nicht wirklich, wiederverwendbaren, portablen * Code zu schreiben.

* und performanten

Re: Jammer-Thread

Verfasst: 14.09.2010, 02:35
von Krishty
Jetzt habe ich den Kaffee aber sowas von auf … ich habe mich bisher bequemt, HeapReAlloc() zu benutzen … mit Alignment waren Allokation und Freigabe ja noch machbar (wenn auch erniedrigend), aber Reallokation ist schlicht nicht möglich. Selbst ich kriege die Zeiger nicht mehr ausreichend dafür vergewaltigt. Ich kann kaum in Worte fassen, wie abgrundtief ich die WinAPI dafür hasse, einen verkrüppelten Alignment-Support zur Verfügung zu stellen. Es ist ein Schlag in die Fresse jedes Programmierers, den man mit jeder VC-Revision aufs Neue überzeugen will, mehr auf Alignment zu achten …

… ich muss also tatsächlich an meinem Speichermanager weiterarbeiten … Hass

Re: Jammer-Thread

Verfasst: 15.09.2010, 00:27
von klickverbot
Ein Poster auf der Assimp-Mailingliste sinngemäß: »Ihr solltet CMake nicht benutzen, weil ich es nicht mag« – hach, wie ich Open Source liebe…

Re: Jammer-Thread

Verfasst: 15.09.2010, 05:33
von Krishty
http://de.wikipedia.org/w/index.php?tit ... 0125214715
Das hat mich beim Implementieren der Mondphasen fast in den Wahnsinn getrieben … nicht, weil ich es nicht wusste, sondern, weil es scheiße unintuitiv ist, selbst, wenn man es kennt. Wenn man nicht weiß, ob man jetzt die Transformationsmatrizen für den Einfallswinkel des Sonnenlichts richtig gesetzt hat, sogar noch mehr.

Re: Jammer-Thread

Verfasst: 19.09.2010, 15:03
von Krishty
Warum kann man das Feature-Level eigentlich erst beim Erzeugen eines D3D-Devices abfragen?! Wenn DXGI-Adapter-Objekte das in ihrer Beschreibung anböten, würde beim Feststellen des optimalen Feature-Levels auf Multi-GPU-Systemen eine Menge Arbeit gespart, aber neeeeiiiiin, so muss man wieder hacken, oder hat ein ewiges Vor und Zurück …

Re: Jammer-Thread

Verfasst: 22.09.2010, 13:34
von Krishty
Nach ein paar Tagen Abstinenz habe ich mich gestern wieder meinem Renderer gewidmet, der zu meinem Unmut die Bandbreite meiner HD5770 in Full-HD und Full-HDR mit 8×AA (eigentlich hätte das mit 4×AA meine Minimaleinstellung werden sollen) dermaßen überstrapaziert, dass ich mich in der GPU-Entwicklung gleich zehn Jahre zurückversetzt gefühlt habe (selbst Clear-Calls gehen auf die Performance).

Wie dem auch sei, eine wichtige Sache habe ich gelernt: VSync – das ich grundsätzlich nur bei Benchmarks abschalte – hat bei unerträglich niedrigen Frame-Raten zeitweise einen genauso gigantischen Einfluss wie bei astronomisch hohen, nur umgekehrt, und insbesondere dann, wenn die Render-Targets ihre Größe ändern. Genauer: Ohne VSync hatte ich nach dem Maximieren 5 fps; mit waren es dann 16. Schön, dass es immer das Offensichtliche ist.

Re: Jammer-Thread

Verfasst: 25.09.2010, 12:12
von Krishty
… und weiter mit meinem wehleidigen Monolog:

Normal: 60 fps, egal, ob im Fenster- oder Vollbildmodus
Mit YouTube offen, Fenstermodus: 49 fps, davon immer zwei normal lang dauernde und ein extrem Kurzer (ein Sechtel dauernd), was zu ekelhaft unangenehmem ruckeln führt.
Mit YouTube offen, Vollbildmodus: Genau 30 fps, jeder zweite Frame wird mit unheimlicher Präzision verschlungen.
Mit YouTube offen, Vollbildmodus, aber ohne Aero: Wie mit YouTube im Fenstermodus.

Egal, ob das Video läuft oder angehalten ist und mit welchem Browser. Rage. Ich will von FlashYouTube die 20 bis 50 % Performance zurück, bitte.

Re: Jammer-Thread

Verfasst: 25.09.2010, 14:39
von eXile
Krishty hat geschrieben:Egal, ob das Video läuft oder angehalten ist und mit welchem Browser. Rage. Ich will von FlashYouTube die 20 bis 50 % Performance zurück, bitte.
Auf meinem alten Notebook-Rechner kann ich mir übrigens deswegen keine 720p-Videos auf Youtube ruckelfrei abspielen lassen (natürlich ist das Video voll gebuffert, es geht jetzt nur um die Abspielperformance). Lade ich aber das Video runter, so kann es der VLC-Player ohne Probleme ruckelfrei abspielen, und die CPU-Auslastung schwankt so zwischen 30% und 40%. :?

Re: Jammer-Thread

Verfasst: 27.09.2010, 01:09
von Krishty

Code: Alles auswählen

call        _CIsin (0FE39Ch)
fstp        dword ptr [esp+14h]
fld         dword ptr [esp+14h]
fstp        dword ptr [esp+14h]
movss       xmm0,dword ptr [esp+14h]
Das Lustige an dem Aufruf ist, dass _CIsin den Winkel aus der FPU schmeißt, in ein SSE-Register lädt, dort das Sinus ausrechnet, es wieder auf den Stack schmeißt, in die FPU lädt, und dann zu diesem Assembler-Glanzstück zurückkehrt. Dort wird der Wert aus der FPU geschmissen, wieder geladen, nochmal rausgeschmissen und wieder in das SSE-Register geladen, in dem er ausgerechnet wurde. Achja – der Winkel lag, bevor _CIsin aufgerufen wurde, natürlich auch in xmm0.

Warum sind solche Funktionen keine Intrinsics? :(

Re: Jammer-Thread

Verfasst: 27.09.2010, 16:01
von Aramis
Ok, wir wissen jetzt alle dass MSVC hin und wieder mal unnoetige Instruktionen generiert.

Nur mal so als Ansatz: PEs sauber zu patchen sollte mit etwas Vorarbeit kein Problem darstellen, ein generisches System um den Maschinencode/Assemblercode einzulesen und dann einen Satz Korrekturalgorithmen drueber laufen zu lassen und ihn dann wieder zu assemblieren - auch machbar. Wieso investiert du deine Zeit nicht dahingehend?

MAO von Google (http://code.google.com/p/mao/) geht genau in die Richtung – afaik aber limitiert auf die Linux/Mac/GCC–Ecke.

Re: Jammer-Thread

Verfasst: 27.09.2010, 16:23
von Krishty
Süßer Fund … schade, dass es noch so in den Kinderschuhen steckt. Man könnte mit sowas auch schön für (halb-)in-Order-Architekturen wie Atom optimieren … schwarz sehe ich nur fürs Debugging, da nach dem Patch quasi alle Debug-Informationen ungültig sind, wenn man kein GCC benutzt :(

Re: Jammer-Thread

Verfasst: 29.09.2010, 16:55
von zwergmulch
So, mein erstes Gejammere: JavaScript ist irgendwie sch*****!

Ich wollte mein Projekt für die ZFX Action III mit JS und HTML5 (Canvas-API) machen und hatte später noch die
Idee, das ganze mit einer weiteren Abstraktionsschicht in Form einer DSL bzw. XML-basiert zu machen.
Grund: Nicht jeder hat einen Browser, der HTML5 unterstützt, und nicht jeder will einen solchen installieren.
So wollte ich aus dem Code in der DSL HTML5 + JS oder alternativ später Flash generieren.
In der ersten Woche nach Start fehlte mir aber irgendwie die Motivation (ich habe aber wenigstens die Idee reifen lassen),
danach hatte ich ein paar Tage aus unerfindlichen Gründen keinen Internetzugang und jetzt... ist JS doof.

Eigentlich mag ich es ja, aber:
  • Code: Alles auswählen

    var myEmptyArray1 = new Array (); // funktioniert
    var myEmptyArray2 = []; // funktioniert nicht - zumindest bei mir im Chrome undefiniert!!!
    var myArray = ["foo", "bar"]; // funktioniert aber - wtf?!?
    
  • Eigentlich mein Fehler, aber man kann nicht im <script> auf's DOM zugreifen, bei onload aber schon!
  • Höchst subjektiv: Mein schöner Code funktioniert nicht. :(

Re: Jammer-Thread

Verfasst: 01.10.2010, 08:18
von joggel
Ich hab auch was zu Jammern.
Hat aber nix mit Programmierung zu tun.

Ich kam gestern nach Hause und wollte wie gehabt eine Verbindung ins Internet aufbauen.
Beim Verbindungsaufbau kam eine Fehlermeldung "Fehler 678: Der Remotecomputer antwortet nicht [...]".
Ich war besorgt! Neustart und Treiberdeinstallierung half nix. Router reseten auch nix.
Nach Recherche im Netz aus einem Internetcafe war ich nun auch irgendwie nicht schlauer. Das Problem hat sich bei manchen von selbst erledigt, bei anderen half Karte raus, Neustart, Kiste-aus, Karte rein, fertig!
Also musste ich den Kundensupport von Alice anrufen *mist*. Das heißt, ich habe mir eine 15 € Telefonkarte gekauft, und telefonierte drauf los. Das erstemal war ich 10min in der Warteschleife (Tarif: 46 Cnt/Min, oder etwas höher !!!). Nach schildern meines Problems wurde ich wieder in die Wartschleife gesteckt.... mist nur, wenn man soviel Geld in der Warteschleife vertelefoniert hat, dass man kein Guthaben zum Weitertelofonieren mehr hat... :( .
*verdammte kostenpflichtige Hotline*
Am Abend konnte ich nochmal von einem netten Nachbar aus anrufen. Wieder dasselbe Spiel... Nach 30min Telefonat, kam raus, dass es anscheinend ein Problem mit der Leitung gäbe, und sie mich innerhalb 24 Std zurückrufen.
Naja, mal sehen!
So wie es aussieht habe ich erstmal für ne Weile kein Internet *heeuuuuull* :cry:

Re: Jammer-Thread

Verfasst: 01.10.2010, 09:09
von kimmi
Uff, das klingt ja nach noch schlimmeren Zuständen als bei der deutschen Telekom.

Gruß Kimmi

Re: Jammer-Thread

Verfasst: 07.10.2010, 14:30
von Krishty
HLSL ist echt zum kotzen. Keine Templates; okay. Aber wenn dann Array-Grenzen explizit angegeben werden müssen, nur, damit der Compiler sie ignoriert und einen fröhlich drüber hinausschreiben lässt, hört der Spaß auf. Dreckiger Bastard von Halbsprache.

Edit: Und der Hass kommt, wenn der Compiler keine großen Arrays an Funktionen übergeben kann, die kleinere erwarten.
error X3017: 'FFTWithRadix2OnTwiddledCache': cannot convert from 'float2[8]' to 'float2[2]'
Drüber hinausschreiben geht natürlich weiterhin. Sowas von Facepalm …

Edit 2: ICH FASSE ES NICHT
DIE HABEN DIESEN SCHEI? AUS VISUAL C** & ÜBERNOMMEN DASS DIE ZÄHLER EINER FOR_SCHLEIFE NACH DER SCHLEIFE NOCH GÜLTIG SIND
FFFFFFFFFFUUUUUUUUUUUUUUUU-