Autorenarchiv

handyweitwurf, lunaredition

US politics in 2020: „Damn! We got the dumbest president ever! There’s this virus anywhere! California is burning! And Hollywood can’t sell shit because of all this!“
NASA: „Fuck it! Let’s throw mobiles altogether! ON OUR MOON!“
Huawei: „Hello, China here! Accidentally, we were spying on heard you! We can do it!“
NASA: „Huawei – GTFO!“
Nokia: „Hello, Finland here! Coincidentally, we were spying on China. We can do it too! And we got the legendary 3310 for you for free!
NASA: Nokia – you got the job! Do it! We give you time until 2022! Will 14 million bucks suffice?

Weird Error..!

Flattr this!
Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

this. is. sparta! oder: wider dem cpu-capping

Aus einem mir unerfindlichen Grund war ich bis heute geplagt mit AMD-CPU-Capping. Unter Vollast und/oder bei CPU-Temperaturen von 70C+ ging die Frequenz unter Linux einfach runter auf 399MHz. Und blieb dort. Bis zu einem Reboot.

Serious!?

Ja, ernsthaft. Und das Problem hat mich nun 80+ Tage beschäftigt. Oder eben zu selten gekümmert.

AMD@7nm(12nmIOD)@Zen2@Rome@EPYC_7702_ES@2S1404E2VJUG5_BB_ES___DSCx18_CCD_polysilicon@20xNIC
Oben: AMD Zen2 CPU: Epyc 7702 – 64-Kerne, 128 Threads, 200W

Stellt sich heraus, ich konnte wohl ein wichtiges Modul bzw. einen ASUS-Kernel-Patch nicht nutzen:

modprobe -v asus-nb-wmi
insmod /lib/modules/5.8.11-1-linux/kernel/drivers/input/serio/i8042.ko.xz
modprobe: ERROR: could not insert ‘asus_nb_wmi’: No such device

Bei mir gab es unter /sys/devices/platform/ einfach keinen Ordner asus-nb-wmi. Und der hätte ab Kernel 5.6.x wohl genau dort sein sollen. Da kann ich modproben, bis ich schwarz werde.

Was tun? Wir sind mit Internet nie alleine, zum Glück auch nicht mit Problemen, so fand ich die selbe Issue vom selben Hardware-Hersteller für ein anderes Modell, https://lab.retarded.farm/zappel/asus-rog-zephyrus-g14/-/issues/9. Man solle einfach i8042.nopnp als Kernelparameter dem GRUB hinzufügen und rebooten. Was ich tat.

Das erste Erfolgsgefühl hatte ich dann beim erneuten Modproben: keinerlei Fehlermeldung. Okay, sehr cool! Natürlich wollte ich danach wissen, ob der Ordner nun da ist: und auch der asus-nb-wmi war nun vorhanden (logisch, aber egal), inklusive Inhalte. Nice!

Wirklich etwas von der Kiste gefordert hatte ich da noch nicht, also wieder den BOINC-Client gestartet – meines Wissens „der ultimative Stresstest“ für jede CPU/GPU. Hier hatte ich auch immer wieder die Erfahrung gemacht, dass die CPU einknickt. Und tatsächlich: jetzt ist 18:00 und seit dem Mittag läuft meine CPU, eine AMD Ryzen 7 4800HS, unter Vollast mit erwartbarer dynamischer Frequenz und auch mit Temperaturen Ü70C (aktuell locker 90C, offiziell verträgt er wohl 105C).

W00t!

Nun, egal. Selbst Schuld, bleeding edge hardware gekauft zu haben… ¯\_(ツ)_/¯

Flattr this!
Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

(a)soziale netzwerkartefakte

Für ein Projekt musste ich mich auf Web-Bildersuche für Dateien größer als 5MB begeben. Dabei fiel mir eine uralte Share-Leiste ins Auge, wie u.a. wir Blogger sie um 2004 herum manuell noch in unsere (X)HTML-Webseiten gepflegt hatten:

(a)soziale Netzwerke, Stand 2003

Damals war nicht abzusehen, dass es mal _die_ Webseuche überhaupt werden würde. Davon abgesehen war ebenfalls unwahrscheinlich, dass diese Idee mal zu unkontrollierbaren Mega-Corporations führen würde.

Mir fiel auf, dass die Icons hier nach Popularität bzw. Nutzung geordnet sind. Das bedeutet, dass Twitter damals noch populärer als Facebook oder Reddit war. Besonders bemerkenswert fand ich digg auf Platz 4.

Was ist aus diesen ganzen Pionieren der (a)sozialen Netzwerke geworden? Ich begab mich auf Recherche…

digg.com – entgegen meinen Erwartungen existiert die Domain wie auch das Projekt noch. Geschrieben in Python, wird es im Dezember stolze 16 Jahre alt. Da man damit Webinhalte nicht nur teilen, sondern auch bewerten konnte, entstand sogar ein eigener Neologismus dafür, das sogenannte digging. Du diggst nach unten, der Link war Käse. Viele Diggs nach oben zeigten einen populären Inhalt, den du unbedingt lesen musstest. 2010 ging das Redesign in die Hose, zwei Mitgründer verließen das Projekt und 2012 wurde es filetiert, Marke, Website und Technologie wurden für nur 500.000$ verramscht. Heute ist es ein Produkt von „BuySellAds“ und der Name ist ab 2018 Programm: vom Aggregator-Pionier ist nicht viel geblieben, die Website erinnert heute eher an eine virtuelle Bildzeitung.

Google+ – brauchen wir wohl nicht viele Worte verlieren, der Sozial-Media-Konkurrent aus dem Hause des „Big G“ wurde im April 2019 für immer geschlossen. Sogar mehrere Monate früher als geplant. Obwohl es als das innovativste und mit komplexeste der sozialen Netzwerke galt, wurden offiziell Sicherheitslücken und Designfehler als Gründe angegeben. Inoffiziell konnte sich ein halbwegs intelligentes soziales Netzwerk einfach überhaupt nicht durchsetzen. Die Schließung dieses Projekts sollte man auch als Mahnung verstehen – das Web ist im Eimer. Selbst Google hatte keine Chance den Karren mehr aus dem Dreck zu ziehen.

Yahoo! Groups – wird sogar erst Ende des Jahres offiziell gekillt. Allerdings kann man keine neuen Inhalte mehr seit über einem Jahr einstellen. Pionier war man hier in der Verlagerung von elektronischen Mailinglisten ins Web. Ein großer Pluspunkt (aber auch Kritikpunkt) war das Fehlen jeglicher Moderation der Inhalte. Es hatte die Möglichkeit eines der größten Diskussionsforen im Web zu werden und zeitweise war es genau das: 2008 hatte man fast 120 Millionen User in 22 Sprachen vorzuweisen. Verizon zieht am 15. Dezember endgültig den Stecker.

del.icio.us – vielleicht eines der legendärsten „Social Networks“. Ein Hauptproblem bei der Größe des WWW ist es den Überblick zu behalten. Del.icio.us löste das clever indem es die Möglichkeit bot, Lesezeichen zu teilen. Was erstmal wenig revolutionär klingt hat in der Anwendung dazu geführt, dass es sich zum Über-WWW-Kurzzeitgedächtnis entwickelte. Besonders als Onlineautor ein legendäres Feature. Weiteres Killer-Feature: wer del.icio.us-Nutzer war, der brauchte kein Twitter. Auch zeitlich lag man beim Start 2003 fast richtig mit dem Timing zum überflüssigsten Web-Marketing-Phänomen EVER, dem „Web 2.0“. Heute ist nicht einmal mehr die Domain aktiv. Die vielen Besitzerwechsel führten zwischenzeitlich auch zu Komplettlöschungen von Links und Nutzerkonten. Selbst Yahoo! hatte 2005 keinen Bock mehr auf das Projekt. Danach war es faktisch tot, egal wer noch kam.

StumbleUpon – bedeutet übersetzt so viel wie „darüber stolpern“. Worüber Webnutzer immer stolpern, egal was sie machen, sind Links zu anderen Webseiten. StumbleUpon wollte daraus Kasse machen. Ich bin nicht sicher, ob ihnen das je gelungen ist, dennoch kam eBay 2007 und kaufte das Teil für 75 Millionen US-Dollar. StumbleUpon ist das perfekte Beispiel, warum auch die „Web 2.0“-Blase irgendwann platzen musste. Offline seit 2018, existiert eine der Grundideen heute noch als Browserplugin namens „Mix“.

Play-Icon trifft auf Kreis-Icon – auch wenn ich dieses „soziale Netzwerk“ nicht kenne möchte ich es dennoch als gutes Beispiel für die damalige Webzeit nicht unkommentiert lassen. Im Kern wussten wir bis auf wenige Ausnahmen nämlich nicht, woher plötzlich alle diese kleinen, nutzlosen Icons kamen und was der Scheiß eigentlich sollte. Wir haben, tatsächlich, einfach irgendwelche Code-Snippets in unsere Webseiten eingebaut, entgegen unserem Sicherheitsgefühl und unserer Vernunft, weil dieses „Sharing is caring“ war einfach überall. Es war beängstigend und eine eklige Zeit, mit am Ende auch ziemlich ekligen, exploitenden Produkten. Ich will hier auch nicht in die Tiefe gehen, weil zum Glück ist „Web 2.0“ lange tot. Doch es zeigt uns am Ende sehr gut, dass, selbst wenn wir gewollt hätten, niemand ein (a)soziales Netzwerkphänomen wie Facebook oder Twitter hätte verhindern können. Es war auf einmal „plötzlich da“. Wie das Internet generell.

Technorati – das letze Icon hier war wahrscheinlich das komplizierteste der (a)sozialen Netzwerke. Um das Konzept Technorati zu verstehen, brauchte man ein Handbuch. Nur leider druckt sich nicht eben jemand mal schnell ein kleines Internet aus. Es wollte unbedingt eine Suchmaschine sein, war aber keine, die diese Definition verdient hätte. Man konnte seine Website hier anmelden und verstand dann hinterher nicht, was das vielschichtige Admin-Interface einem eigentlich sagen will, geschweige warum man seine Seite hier angemeldet hatte. Natürlich versuchte man auch Displayanzeigen an die Konsumenten zu bringen. Die Komplexität und oberflächliche Sinnlosigkeit machten das Produkt allerdings sehr interessant und vielversprechend; alleine der Name war ein Kofferwort aus Technologie und Literati, was intellektuell wirken sollte und manchmal sogar funktionierte: denn selbst 2016, lange nach dem Hype um Aggregatoren, Link-Sharer und Status-Update-Fanatik-Bots (sprich „Web 2.0“) ging das Projekt für 3 Millionen an einen anderen Besitzer über. Die Domain gibt es heute noch, das Projekt (leider?) nicht mehr. Ich würde mich allerdings nicht wundern, wenn wir ein paar von den damals überfrachteten und sinnlosen Features irgendwann wiedersehen werden als eigenständiges Webprojekt, denn ganz ehrlich, hier war man vordergründig und hintergründig der Zeit voraus.

Fazit: die „Nullerjahre“ waren schwierig für das Web, für Content-KreatorInnen genauso wie für bloße KonsumentInnen. Es war rückblickend eine recht unverständliche Zeit, zu der man sich außerhalb der USA die Hintergründe irgendwie zusammenrecherchieren musste; was einfach war für Nutzer, die der englischen Sprache mächtig waren und schwierig für alle anderen. Man fragte zu wenig „wozu das alles?“ und „machte einfach mit“ (Mitläufer-Phänomen), oft waren die Code-Snippets generell verseucht und stellten große Sicherheitsrisiken dar, wenn wohl auch ungewollt und größtenteils unwissend.

Gleichzeitig war es die Zeit des ersten wirklich großen WWW-Marketing-Hypes, man stellte das „Sharen“ als das nächste „große Ding“ dar, was es ja dann auch wurde, und erfand sogar einen eigenen Begriff, um sich gegen alles Vorherige abzusetzen, „Web 2.0“. Vielleicht war es rückblickend „das erste große künstliche Ding“, den zuvor hatte man als Technikbegeisterter irgendwie das Gefühl, es würde alles einigermaßen sinnvoll aus- und zusammenwachsen hier drin. Gerade in dieser herbeigelogenen „Weiterentwicklung“ lag vielleicht aber auch das größte Problem und der größte Betrug. Beste Beispiele hier sind Technorati, del.icio.us oder Google+ – alles Web-Produkte mit großem Potenzial, jedoch unverständlich und nicht einfach genug für die Massen.

Überhaupt Massen, ein nicht zu unterschätzender Faktor: wie damals so bewegen wir uns heute auf einem völlig unbekannten Terrain, da wir mit noch keiner Technologie dermaßen viele Menschen rund um die Uhr erreichen, begleiten und leider auch manipulieren und verkaufen konnten. Die US-Wahl 2016 mag ein gutes Beispiel hier sein, was (a)soziale Netzwerke anrichten können, wenn man negative Auswirkungen hier anführen möchte, oder auch das Cybermobbing. Viele Fragen hier werden auch eventuell zu einem Generationenproblem und nicht innerhalb weniger Jahre oder nur einer Dekade gelöst werden können. In Europa hält man mit der DSGVO faktisch erst seit wenigen Jahren aktiv gegen; es könnte bereits zu spät sein.

Und hiermit endet mein historischer Ausflug, in die „Nullerjahre“ wie in die Zeit der „Social-Media-Icons“. Es ist unschön noch heute Websites zu finden, die solche Leisten anbieten. Dennoch hat mich dieses kleine, sinnlose Netzwerkartefakt zum Nachdenken wie zur Erstellung dieses Textes gebracht. Ich bin froh, dass wir diese Zeit hinter uns haben. Peinlich ist mir, ein Teil davon gewesen zu sein. Ich kann damals auch schon spät drangewesen sein, doch seitdem sehe ich eigentlich für das WWW nur noch schwarz. Ich denke nicht, dass wir diese dämlichen Erfindungen wieder wegbekommen werden. (A)soziale Netzwerke – für mich sind sie die technologische Immunschwächekrankheit, an der das Web krepiert.

Flattr this!
Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

influenca

Influenca – geh‘ mir bitte aus der Sonne, du bist ansteckend/
Wie ein Virus, den Dreck, den du verbreitest, ist das anstrengend/
Influenca – wieso werden das immer mehr behinderte Kinder/
Warum haben eure Eltern nicht verhütet, was hat ihre Aufklärung verhindert/

Rede nicht mit ihr, denn sie hat eine schreckliche Krankheit/
sie postet lieber drei Tage Kinderzimmer als einen Tag in Frankreich/
nee, die Sprache kann sie eh nicht, doch schreibt sie einen Track darüber/
der sich nicht mal reimt, wenigstens bucht sie später bei Über/
ein Track für’s Radio, eigentlich ist sie gar nicht so, genießt nur ihr Smartphone/
sie hat Fans, Millionen Follower, alle gekauft im Darkweb, doch sei’s drum/
sie kann gut, sehr gut auf Zehenspitzen gehen und auch wenn/
sie keinerlei Talente hat wollen es in sozialen Medien Millionen sehen/
ist doch fast wie Fernsehen! Sagt ihre Oma auch, sie fotografiert gerne für/
Hardcore-GILF-GIF-Videos mit Opas Feuerwehrschlauch. Er holt ihn raus/
oh nein, sie nimmt gerade auf und Papa kommt rein/
er sagt Mama hat ihn heute verlassen wegen der Tochter ihrer Dummheit/
Oma rennt, Opa pennt, Mama ist weg und Papa schreit/
es klingelt die Tür und das Telefon zur selben Zeit, weil mal wieder Polizei/
der Wachtmeister bekommt von ihr einen BJ zwischen Angel und Tür/
ihr Nick im Internet ist BJAlice02, jetzt weißt du wofür/

Influenca – geh‘ mir bitte aus der Sonne, du bist ansteckend/
Wie ein Virus, den Dreck, den du verbreitest, ist das anstrengend/
Influenca – wieso werden das immer mehr behinderte Kinder/
Warum haben eure Eltern nicht verhütet, was hat ihre Aufklärung verhindert/

Heute wurde er 17, das muss heftig gefeiert werden/
Frühstück, Mittagessen, Abendessen, Hormone, denn er will ein Mädchen werden/
seit kurzem postet er seine Fortschritte in einem Vlog/
mit glatter Haut und dicken Titten klappt es mit Followern wie/
ist auch egal. Im Texten war er nie die Leuchte, hat die Schule schon geschmissen/
Was er werden will, keine Ahnung, das fragt sein Jugendberater auch/
er gehe lieber shoppen mit Hartz IV, weil seine Mutter nicht arbeiten braucht/
er liebe immer noch Deutschland, früher mit Flagge und Glatze frisch rasiert/
heute mit blauen Kontaktlinsen und blondierten Haaren für die kastrierten Massen/
wozu sich Gedanken machen, alles läuft doch wie es soll/
er ist noch nicht sicher, ob er ihn sich abnehmen lassen soll/
denn wenn er hart wird, und er sich damit zwischen die Titten spritzt/
ist er froh, wenn er es noch schafft bevor er kommt auf Record zu klicken/
doch meist gelingt ihm das nicht, dann spritzt er sich ins Gesicht/
Gott, er liebt sein iPhone, hat ihn letztes Jahr nur die Niere gekostet/
sein Nick ist Trafica03.com, ihn hat das Internet verhorstet/

Influenca – geh‘ mir bitte aus der Sonne, du bist ansteckend/
Wie ein Virus, den Dreck, den du verbreitest, ist das anstrengend/
Influenca – wieso werden das immer mehr behinderte Kinder/
Warum haben eure Eltern nicht verhütet, was hat ihre Aufklärung verhindert/

Flattr this!
Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

die secure-boot-seuche III

2012/2013 war Secure Boot ein megaheißes Thema. So dermaßen heiß, dass ich sogar in meinem Feedreader zweistellig zählen konnte, siehe hier.

2020 ist dieses Rotzthema immer noch nicht tot.

Wie ist das möglich?

Gestern ein Update für das mitgelieferte Windows 10 auf einem Laptop gemacht, das berüchtigte Update 2004 vom Mai. Ich weiß nicht wieso, wohl aus Laune heraus oder weil ich einfach ein System wollte, wo ich nicht dauernd darauf hingewiesen werden möchte, dass es nicht 100% aktuell ist. Ich hätte es lassen sollen, denn ich verlor meinen GRUB.

Bootet anschließend Linux, bekam ich das hier heraus:

Welcome to Grub!
error: unknown filesystem.
Entering rescue mode…
grub rescue>

Jop, das war’s dann. Kein Linux will mehr booten. Und das mit ausgeschaltetem Secure Boot, ausgeschaltetem Fastboot _und_ dem manuell ausgewählten EFI-Eintrag im mitgelieferten BIOS-Interface.

Mit ls geht dann das Debugging los. Irgendwas mit (hd1,gptX) spuckt das System dann aus. Bei mir waren das 10+ Einträge. Jeden durchgehen, mit englischsprachigem Tastaturlayout, kurz vor Mitternacht, wo hängt mein verschollenes root herum?

Als es dann gefunden war, erst einmal /home gefunden, geil! Nix bootet. Glücklich war ich dann dennoch, denn irgendwie ist mein Linux ja noch da.

Da es auf einem Haussystem eigentlich nur zwei ext-Systeme geben kann wegen / und /home (oder welches Linux-Dateisystem auch immer man verwendet, z.B. reiser, etc.), hatte ich mit dem zweiten dann Glück. Mit folgenden Codezeilen brachte ich das System wieder in einen grafischen Bootzustand:

grub rescue > root=(hd1,gpt2)
grub rescue > prefix=(hd1,gpt2)/boot/grub
grub rescue > insmod normal
grub rescue > normal

Der soll dann zwar nur temporär sein, aber mir reicht das. Windows nutze ich vielleicht einmal im Schaltjahr. Dann kracht es aber richtig.

Ahhhh! Ahahahaha! Ihr Redmonder Zoophilie-Junkies mal wieder! Hatte euch schon fast komplett vergessen!

[Update I, 16.10.20]

Das mit der temporären Lösung ist einem ja irgendwann doch zu blöde, weshalb ich mir kürzlich wieder die permanente zurückerobert habe. Hier hilft es, wenn man sich zuerst mal ausgeben lässt, welche Partitionen man benutzt und wie diese heißen: lsblk -o PATH,PTTYPE,PARTTYPE,FSTYPE,PARTTYPENAME. Heutzutage wird das eher in Richtung nvmeXYZ gehen, bei älteren PCs ohne SSDs dann wahrscheinlich sda. Dann noch ein sudo update-grub, was bekannt sein sollte, sowie ein sudo grub-install /dev/sda bzw. ein sudo grub-install /dev/nvmeXYZ danach und dann „Macht’s gut, Redmond!“.

Flattr this!
Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

unser strom? ihr strom!

Jedes Gadget braucht Strom, in irgendeiner Art und Weise. Manche permanent, andere temporär. Die meisten viel bis sehr viel, zu wenige wenig. Es ist wichtiger denn je, sorgfältig auszuwählen, aus welcher Quelle dieser Strom stammt.

Stichwort Atomstrom.

Als das erste Kernkraftwerk der Welt, das Atomstrom in ein öffentliches Stromnetz eingespeist haben soll, gilt Obninsk im Jahr 1954, südwestlich von Moskau. Legen wir zugrunde, dass technisch und von Alterswegen her man um die 50 gewesen sein muss, um dieses „Kunststück“ zu realisieren, ist das die Menschen-Generation ab 1904 gewesen, heute bekannt als „Greatest Generation“.

Mir ist nicht bekannt, warum man diese Vollpfosten marketingtechnisch genau so bezeichnet, haben wir ihnen nicht nur Atomkraft zu „verdanken“, sondern auch die zweite Komplettzerstörung der gesamten Welt, sowie die Zündung der Atombombe zu Lande – Letzteres so ziemlich DAS Dümmste, das du als Lebewesen machen kannst auf einem Planeten, den du selbst bewohnst. Und ohne der Möglichkeit diesen vorher verlassen zu können.

Zeitlich nun einfach visualisiert, wie viele Generationen von diesem Atomstrom bis heute, 2020, maximal „profitieren“ konnten:

II

Und nun, wie viele Generationen dafür bezahlen dürfen:

IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII

In Worten: Zwei. Versus. Vierzigtausend.

Vierzigtausend Generationen, das sind schlappe 1.000.000 Jahre.

Och bitte, nehmen wir Rücksicht: Hauptsache Oma und Opa hatten es warm!

Flattr this!
Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

ps4-controller mit ps3

Diese Woche erst irgendwo online gelesen, dass man den PS4-Controller auch mit der PS3 verwenden kann.

Meine PS3 ist 12 Jahre alt.

Die PS-Taste funktioniert leider nicht. By design.

Hat leider deshalb etwas Fötales:

Mein PS4-Controller an meiner PS3

Konsole ein- und ausschalten ist mit dem nicht. Und auch in die PS3-Menüs kommt man nicht rein. Bummer.

Da ich das dennoch eine sehr coole Idee fand und auch ein Workaround für langwierige Retro-Gaming-Sessions, teile ich hier die Einrichtung:

1. PS3-Konsole sollte ausgeschaltet sein
2. PS4-Controller über USB-Kabel mit der Konsole verbinden
3. Konsole einschalten
4. in „Einstellungen“ wechseln, hier Menüpunkt „Zubehör“
5. „Bluetooth-Einstellungen“ öffnen
6. Scan-Vorgang starten
7. PS4-Controller vom Kabel trennen
8. PS-Taste und „Share“-Taste am PS4-Controller gleichzeitig drücken (wichtig)
9. der PS4-Controller sollte nun mehrfach hektisch blinken (wichtig)
10. erneut den PS4-Controller mit Kabel wieder anschließen (wichtig)
11. hier dann „Wireless-Controller“ auswählen (wichtig)
12. PS4-Controller vom USB-Kabel trennen und verwenden
Hinweis: Controller ist nun an der PS3 angemeldet. Wollt ihr diesen erneut an der PS4 verwenden, müsst ihr ihn neu einrichten, mit USB-Kabel

Junger Jedi, egal wie sinnlos dual oder triple use von Gadgets auch auf den ersten Blick erscheinen möge, huldige das Gadget, denn dem Gadget gehört das gesamte Universum!11

Flattr this!
Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

androiden, elfte generation

Weltweit soll es über 2,5 Milliarden (Stand Mitte 2019) Nutzer des auf Linux basierenden Android-Betriebssystems geben. Die Kontrolle über dieses Betriebssystem hat eine US-amerikanische Technologiefirma, die aktuell fast 324 Milliarden US-Dollar wert sein soll. Man sollte also meinen, die Veröffentlichung einer neuen Hauptversion dieses Betriebssystems, dem Kernstück auf Milliarden Geräten für Hosentaschen, muss ja faktisch mit großem Tamtam der Weltöffentlichkeit präsentiert werden.

Android & Androidesse

Was macht Google stattdessen?

Spielt Indie und veröffentlicht, auch noch auf der eigenen Blogger-Plattform, lediglich einen ranzigen Blogpost: https://germany.googleblog.com/2020/09/unkompliziert-ubersichtlich-und.html.

W00t!

Nee, ist geil! Ehrlich gemeint! Wie selbstbewusst! Und mutig.

In Coronazeiten solche Meldungen an die Konsumenten des Planeten zu bringen ist schwerer als früher. Selbst der Megakonzern Apple, größter Konkurrent auf Smartphone- und Tablet-Gebiet, musste sich dieses Jahr etwas einfallen lassen, verschickte mysteriösere Nachrichten als sonst, hält noch Events ab _und_ versteckt Easter Eggs in Form Augmentierter-Realität-Goodies. DAS ist genau die selbe Richtung, allerdings um 180 Grad versetzt. Der eigene Charakter bestimmt hier, zu welcher Seite man gehören mag und welche einem besser gefällt. Der Kapitalismus neoliberaler Prägung ist doch etwas Wundervolles!

Jüngst kam auch auch heraus, dass entwicklerintern die Süßigkeiten-Codenames weiterhin verwendet werden: Android 11 heißt dort Red Velvet Cake. Die offizielle Meldung geht eigentlich anders, hier werden seit Version 10 keine süßen Aliase mehr benutzt.

Doch was soll eigentlich nun genau neu sein in Version 11?

Wenn ich das wissen will, lese ich keine News oder Blogposts, ich schaue in die Versionshistorie auf Wikipedia. Dort steht, Neuerungen seien diese hier:

* Temporäre App-Berechtigungen
* Unterstützung von 5G-Mobilfunknetzen
* Chats bekommen einen eigenen Bereich im Benachrichtigungsmenü
* Bluetooth bleibt im Flugmodus aktiviert
* Native Bildschirmaufnahme
* Stummschalten von Benachrichtigungen bei Videoaufnahmen
* Benachrichtigungsverlauf
* Rückgängigmachen von kürzlich gestoppten Apps
* Aktueller Sicherheitspatch-Stand: September 2020

Wirklich viel ist es nicht und wirklich revolutionär Neues kann ich hier nicht entnehmen. Das ist seit Jahren auch nicht mehr zu erwarten in dem Bereich. Wenigstens keine Liste mit „Updates für Emojis“ (oje…).

Mein persönlicher Eindruck ist sowieso: mit jeder neuen Hauptversion macht es Google unabhängigen Entwicklern schwerer 1) eigene ROMs zu bauen und 2) eigene Geräte auf dem neuesten Stand zu halten. Auch fliegen mittlerweile alle Apps, die älter als 1 Jahr sind, automatisch aus dem hauseigenen App-Store, aktualisiert man hier nicht mindestens die Version, auf der diese lauffähig sein sollen.

Die Hochzeit der Smartphones ist vorbei. Dann halt wieder LEGO.

Flattr this!
Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

tesla-aktien kaufen jetze!

Man kann von Tesla halten was man will: US-amerikanische Marke; Verarbeitung nicht so gut wie bei deutschen oder japanischen Modellen; Akku brennt; der Gründer ist ein (Cov-)Idiot; Markennamen von einem bedeutenden europäischen Erfinder geklaut; etc. pp. You name it.

Aber eines kann man ihnen nicht vorwerfen: der Wille zur Innovation.

Bei Tesla träumt man Innovationen nicht nur oder zeichnet diese. Sie werden in Realität gesetzt. Und dabei haben sie anderen Firmen auf dem Planeten manches voraus. So z.B. ein fahrbares und nutzbares E-Automobil. Und ein zukunftsfähiges Konzept insgesamt. Ja, wahrscheinlich DAS Zukunftskonzept der Mobilität überhaupt für die nächsten Jahrhunderte. Und das „schon jetzt“.

Tesla model 3 già andata a ruba

Deshalb lohnt es sich genau jetzt in Tesla-Aktien zu investieren: durch den Split ging der Preis pro Aktie nämlich fast über Nacht von über 2.200$ runter auf aktuell 360€. Wer also ein paar Hunderter übrig hat, das sollten einige Menschen sein seit März, auch unter meinen Leserinnen und Lesern, der sollte sich (ein Depot eröffnen und) Aktien dieser Firma kaufen. Es ist sehr wahrscheinlich, dass die 1.000€ wieder schnell geknackt sein werden. Dann hätte man alleine durch eine Beteiligung fast das Dreifache wieder drin. Ende ist hier übrigens nach oben offen.

Man kann das Geld schnell mitnehmen oder halten. Ich würde halten. Einfach aus „Prinzip Zukunft“. Und es gibt da noch etwas, was ich bemerkenswert fand, die Meldung ist aber schon ein paar Monate her.

Wie wir alle wissen sind oder waren die Japaner mal das technologisch am weitesten fortgeschrittene Völkchen der Erde. So stark und so mächtig und sehr weit fortgeschritten, sie galten als „Schwan“ und flogen in Gesamtasien voraus, während andere Länder wie Südkorea, sogar Taiwan und China, hinterher wackeln mussten. Irgendwann in den 80ern war das so. Es mag sich mittlerweile gewandelt haben, ich bin auch der Meinung, insgesamt haben wir „alles schon erfunden“, also da wird kaum noch was Neues kommen für die Menschheit. Und das wechselt sich da unten nun munter ab, wer in der Parabel voraus fliegt. Ich tippe ja aktuell auf Südkorea, China braucht noch ein paar Jahre, vielleicht Jahrzehnte. Wobei man Taiwan mit dem Chipfertiger TSMC hier auch nicht vergessen darf.

Ich schweife ein bisschen ab, denn was ich eigentlich erzählen will kann man auch ohne dieses Wissen und die Vogelzug-Parabel faszinierend finden.

Die Japaner haben nämlich vor wenigen Monaten den Tesla Model 3 komplett zerlegt, die Ergebnisse wurden im Februar der Weltöffentlichkeit präsentiert. Denn was machst du als Hacker erst einmal, wenn du neue Technik verstehen willst oder schauen möchtest, ob die Technik wirklich neu ist? Na klar, du baust sie auseinander!

Das Wichtigste und das Unbekannteste, das sie fanden, waren zwei individuell designte KI-Chips, von Tesla komplett selbst entwickelt(!), mit entsprechend inhouse-entwickelter Software:

der KI-Chip und das Mainboard des Tesla Model 3
Oben: der Computer des „Model 3“ – ein KI-Chip regelt das autonome Fahren, der andere das gesamte Infotainment-System

Im Kern fanden die Japaner heraus, „ja gut, das Hardware-Ensemble ist eben dafür gut, dass dieses Auto sich selbst steuern kann und die massive Infotainment-Anlage“. Und das stimmte dann auch. Doch was noch viel bedrückender war aus der Sicht der japanischen Ingenieure:

Die Hardware, die oben zu sehen ist, ist 6 Jahre ihrer Zeit voraus!

Tesla ist damit nicht nur Konkurrenten zeitlich enteilt, Tesla ist mit dieser Hardware einer kompletten Industrie enteilt.

„But technological hurdles are not the reason for the delay, according to the Japanese engineer who said „we cannot do it.““

Einer Industrie, die in Europa alleine 3,65 Millionen Menschen beschäftigt – bei Tesla arbeiten aktuell nur 48.000 (Stand 2019)…

Das ist „Alien-Sh*t“, was wir hier sehen. Solche Technik dürfte es aktuell gar nicht geben.

2019 nicht.
Dieses Jahr nicht.
Nächstes Jahr nicht.
2022 nicht.
2023 nicht.
2024 leider auch nicht.
Maximal „irgendwann 2025“, sagen Industrie-Insider. Denn auch wenn der Bericht Ende Februar publik wurde, auseinandergenommen wurde der Tesla wohl irgendwann Ende 2019.

Ganz ehrlich: WAS haben die da gebaut!? und WIE!? Ich bin kein reiner Ingenieur, aber ein kleiner CPU-Head. Vor solch einer Leistung habe ich irre Respekt. Und leider auch Angst.

Und sehen wir es realistisch, selbst wenn sie mit Autos als Konzept komplett sich zerlegen würden, sie hätten immer noch diese Chips, also konkrete Hardware, sowie maßgeschneiderte Software dazu im Angebot. Mir würden spontan mindestens ein Dutzend Anwendungsfälle dazu einfallen, „I, Robot“ wäre Kindergeburtstag dagegen.

Flattr this!
Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

aldi-highend in 2020

Heute gesehen bei heise.de, ein „Highend-Notebook“ mit „300Hz“ vom Gemüse-Discounter unseres Vertrauens:

ALDI Highend-Laptop in 2020: 300Hz!

Ich musste heftig suchen, in welchem PC-Jahr wir hier wirklich angekommen sind.

Der Z3 von Zuse hatte 4 bis 5 Hz, irgendwann um 1941. Der ENIAC vier Jahre später, 1945, schon wuchtige 5kHz. Also irgendwo dazwischen.

Nur wurden leider keine weiteren Computer „dazwischen“ gebaut. Vielleicht fehlen hier auch Einträge in der westlichen Literatur. Die Technik war in jedem Fall noch zu neu und füllte Hallen, alleine die Z3 wog über eine Tonne.

Mit der Headline habe ich noch ein weiteres riesiges Problem neben der Unvollständigkeit (falls das überhaupt jemandem auffiel): ich gehe hier von der Taktfrequenz eines Prozessors aus und halte das für „normal“. Im Text aber geht es um das Display.

Sind Displays heute wichtiger als CPUs!? Sind CPU-Infos nicht mehr relevant für Technikmagazine?? Und: wer kauft eigentlich PCs bei ALDI!? Hakt’s?

Flattr this!
Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

achilles hat ein smartphone…

…mit Hardware von Qualcomm!

Der wichtigste Chip in einem Smartphone oder Tablet nennt sich SoC, System on (a) Chip. In der Bezeichnung steckt eigentlich bereits alles drin, was man darüber wissen muss: die CPU, Grafikeinheit, GPS, sowie allerlei Kladeradatsch, um mobile Kommunikation möglich zu machen, sowie vieles andere mehr (z.B. für Multimedia wie Filme und Musik) werden in einem einzigen Chip vereinigt. Ingenieurstechnisch ist das eine Spitzenleistung und aller Ehren wert. Sicherheitsaspekttechnisch die reinste Katastrophe.

Ein Beispiel für den schematischen Aufbau eines Snapdragon-SoC, technisch Highend und aus dem Hause Qualcomm, liefert die folgende Grafik:

Qualcomm Snapdragon: DSP-Chips und ihre Ort in einem Beispiel

Man beachte die rot markierten Elemente mit dem Zusatz DSP (Digital Signal Processor). Forscher von Check Point wollen für diese untergeordneten Chips nicht ein Sicherheitsleck, nicht zwei, sondern sage und schreibe 400 Stück entdeckt haben:

https://blog.checkpoint.com/2020/08/06/achilles-small-chip-big-peril/. via

Was Meltdown für Intel und Spectre für AMD, könnte Achilles, so haben die Forscher die Sammlung an Schwachstellen hier getauft, nun für Qualcomm werden: der absolute Supergau.

Betroffen sind die besten Geräte der namhaftesten Hersteller des Planeten: Google, Samsung, LG, Xiaomi, OnePlus – alle dabei und viele mehr. Potenziell bis zu 40% der aktuell drei Millarden Smartphonenutzer weltweit.

Achilles heel

Auch die CVEs wurden bereits in die Datenbank aufgenommen, aktuell lauten diese CVE-2020-11201, CVE-2020-11202, CVE-2020-11206, CVE-2020-11207, CVE-2020-11208 und CVE-2020-11209.

Checkpoint hat keinerlei Details zu praktischen Anwendungen veröffentlicht und auch den Hersteller Qualcomm mustergültig informiert. Reagiert dieser nicht, will man mit den Ergebnissen zu den 400 Angriffsvektoren in drei Monaten an die Öffentlichkeit gehen. Spätestens dann sollte man sich wieder ein Dumbphone als Alternative zugelegt haben, so munkelt man.

Flattr this!
Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

2020: alles wird kurzweil

Keine Panik! Sieht alles schlimmer aus, als es ist! Ende 2020 wird für uns alle doch noch alles gut!

Ray Kurzweil
Turntable-Rocker mit Grüßen aus 2006: US-Futurist Ray Kurzweil

Aus Langeweile seit Ewigkeiten mal wieder in einem meiner eigenen Ebooks geschmöckert. Dort habe ich mit Datum 23.11.06 einen interessanten Text entdeckt, betitelt sick shit II. Er dreht sich um Blicke in die Gegenwart einer noch 14 Menschenjahre entfernten Welt.

Spätestens Ende 2020 wird alles gut für die Menschen sein, aus medizinischer Sicht. Denn dann „flitzen Nanobots umher in unserer Blutbahn und werden uns gesund und jung halten“. Sind doch nur noch wenige Monate! Wird schon schiefgehen!

Natürlich gibt es die Onlinequelle dieser kurzweiligen, optimistischen Vorhersagen heute nicht mehr. Ich fand jedoch im Internet Archive noch einen Schnappschuss der Website, wo diese und mehr Prognosen online publiziert wurden. Und dann war da noch…

…“2020 werde die Lebensdauer eines Menschen wesentlich größer als heute sein“. Gut, das war jetzt nicht ganz so schwer, trifft seit 2014 allerdings auf die USA nicht mehr zu.

Oder „2020 werden wir uns komplett in virtuellen Umgebungen bewegen. Anstatt jemanden anzurufen werden wir unser Gegenüber irgendwo virtuell treffen, können virtuelle Strandspaziergänge machen und uns dort unterhalten. Meetings werden in beruhigenden Örtlichkeiten nur noch virtuell stattfinden.“ Möp! Meetings finden im Jahr 2020 wie Ende der 90er-Jahre weiterhin in ranzigen Chat-Applikationen statt und kommen öfter mal direkt aus dem Big-Brother-Ministerium Chinas. Gut, statt nur zu schreiben kann man sein Gegenüber mittlerweile auch direkt anrufen (will niemand wirklich) und man kann es auch in Echtzeit sehen, wenngleich in mieser Handykameraqualität (wenn deutsches Internet einen guten Tag hat). „Virtuelle Strandspaziergänge“ hätten uns in Lockdownzeiten sicherlich mental ein bisschen geholfen, doch in der Realität sehen wir nur wechselnde Standbilder als auswählbare Hintergründe in „Microsoft Teams“. Tja, so unterscheiden sich Begrifflichkeiten früher und heute in Bezug auf „virtuelle Welten“. Hätte man extra dazusagen müssen, klar.

„Innerhalb der nächsten zehn Jahre“, also aus Sicht des Textes um 2016 herum, „müsse sich kein Mensch mehr mit Erkältungen rumschlagen.“ Allerweltskrankheiten wie die Influenza, die aktuell weltweit Zehntausende Tote fordert pro Jahr, ließen sich durch „die Nanotechnologie komplett ausrotten“. Nanotechnologie versus COVID-19 FTW! Läuft doch!

Zu seiner Verteidigung will ich am Ende anmerken, bei manchen Prognosen aus dem Text hat man ihn auch gnadenlos geschnitten.

Augmentierte Realität durch Brillen zum Beispiel – Google Glass wurde 2014 für den Massenmarkt aus moralischen und ethischen Bedenken von Google selbst aus dem Verkehr gezogen. Oder der Verbreitung von Viren durch Terroristen – offenbar nichts im Vergleich zu Zoonosen. Anderes Zeug, Themen wie „Züchten von Organen“ und „Metamorphosen von Hautzellen“, erspare ich uns jetzt, es ist kurz vor halb Acht und draußen hat es 30+°C. Seit Freitag.

Ja. Wahrsagerei ist auch kein Zuckerschlecken mehr. 2020 – wir packen das!

Flattr this!
Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

spectre: es ist immer noch hier

Weihnachten 2017: Kernel-Entwickler arbeiten durch. Neujahr 2018 ebenso. Der Grund: eklatante Hardwarefehler in Computerprozessoren, dem Gehirn unserer PCs. Die Wissenschaftler taufen diese „Meltdown“ und „Spectre“, „Kernschmelze“ und „Schreckgespenst“.

Spectre

Sommer 2020. Inzwischen sind wir in Monat #32 nach Bekanntwerden dieser Hardwarelücken. Was der aktuelle Stand?

Folgender:

SUMMARY: CVE-2017-5753, CVE-2017-5715, CVE-2017-5754, CVE-2018-3640, CVE-2018-3639, CVE-2018-3615, CVE-2018-3620, CVE-2018-3646, CVE-2018-12126, CVE-2018-12130, CVE-2018-12127, CVE-2019-11091, CVE-2019-11135, CVE-2018-12207

Oben: Zusammenfassung aktueller CPU-Lücken des Tools spectre-meltdown-checker, Stand August 2020

Aus drei Lücken (CVE-2017-5753, CVE-2017-5715, CVE-2017-5754) wurden 14. In Worten: Vierzehn.

Selbst AMD scheint auch 2020 nicht in der Lage zu sein Prozessoren zu bauen, die alle Fehler ausschließen können.

Unterziehe ich meinen neuesten AMD-Prozessor, den 4800HS, einem Test mit dem kostenlosen OpenSource-Tool spectre-meltdown-checker, wird klar, dass besonders ein Bug hardwaretechnisch bisher unmöglich zu beseitigen scheint.

Es ist jener mit den Kennungen CVE-2017-5753 aka ‚Spectre Variant 1, bounds check bypass‘, CVE-2017-5715 aka ‚Spectre Variant 2, branch target injection‘ und CVE-2018-3639 aka ‚Variant 4, speculative store bypass‘, bekannt als „Spectre“, das „Schreckgespenst“.

Ohne die pausenlose Arbeit zum Jahreswechsel 2017/2018 der weltweiten Entwickler-Community, wären selbst AMD-CPUs des Jahres 2020 hier verwundbar. Die gelisteten drei Varianten von Spectre sind ledliglich softwareseitig gepatcht und damit seit über 2,5 Jahren auf keinem aktuelleren Stand als damals.

Mir ist das zu lange. Als Entwickler, wie als Anwender.

Von 14 Hardwarefehlern sind 11 aus der Welt und drei nach wie vor vorhanden. Willkommen in der neuen Realität der 78,57%-PC-Hardware für 100% hardverdientes Geld! Was ein Scheißdreck.

Flattr this!
Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

luckysheet

In einer digitalen Welt voll mit kostenlos erhältlichen Datenbanksystemen setzen nur noch IT-Steinzeitmenschen auf reine Tabellenkalkulationen.

Sei’s drum, denn: wer braucht heute noch ein Gehirn!? Richtig!?

Luckysheet möchte selbst kommerziellen Tabellenkalkulationsprogrammen Konkurrenz machen und man muss zugeben, zumindest geschwindigkeitstechnisch und optisch macht es absolut etwas her:

Luckysheet GitHub-Demo

Für eilige Ex-Excel-Junkies lässt sich die Demo auch gleich direkt ausprobieren: https://mengshukeji.github.io/LuckysheetDemo/.

Wer etwas mehr Zeit erübrigen kann, der braucht nur Node.js in Version 6 oder höher und kann das Programm lokal auf dem PC mit nur wenigen Zeilen installieren:

npm install
npm install gulp -g

Luckysheet wird von einer kleinen chinesischen Community entwickelt und basiert auf einer MIT-OpenSource-Lizenz. Vielleicht der einzige Wermutstropfen, doch was ist heutzutage nicht aus China? Richtig!?

Flattr this!
Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

shenzhen

Shenzhen liegt irgendwo in China/
Shenzhen hat VR, die brauchen dort kein Fielmann/
Shenzhen kennt man seit Ming-Dynastien/
Shenzhen bedeutet so viel wie „die Gräben sind tief“/
Shenzhen ist Cyberpunk-Hauptstadt/
Shenzhen steht für Neonsonnen in der Nacht/
Shenzhen ist technologisch Weltmacht/
Shenzhen hat selbst im Winter 20 Grad/
Shenzhen Shen-Chuen Shum-Chun Neunzehnelf/
Shenzhen wächst so schnell wie keine Stadt der Welt/
Shenzhen und du verstehst nur Bahnhof/
Shenzhen vertickt dir Bitcoin auf dem Pausenhof/
Shenzhen glitzert im Delta des Perlfluss/
Shenzhen rollt durch diesen Text wie Linienbus/
Shenzhen raucht keine Zigaretten/
Shenzhen dampft OLED-Devices. Auf USB. In Ketten:

Mein iStick Pico von Eleaf - Made in Shenzhen

Flattr this!
Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^