The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Компания System76 занялась портированием CoreBoot для платформ AMD Ryzen , opennews (??), 27-Июл-20, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


19. "Компания System76 занялась портированием CoreBoot для платфо..."  +/
Сообщение от Аноним (47), 27-Июл-20, 11:41 
> Для реализации проекта компания AMD на условиях неразглашения (NDA) передала разработчикам из System76 необходимую документацию, а также код компонентов поддержки платформы (PSP) и инициализации чипов (AGESA).

Интересно, какое возможно неразглашение в опенсорсе? Ну допустим clean room отреверсят они оригинальные прошивки из исходников и напишут свободные замены. Как только они их опубликуют, это и будет разглашение секретной информации, не? При обычном clean room реверсинге из публично доступных бинарей защита от такого в том, что разработчик никаких соглашений не подписывал.

Ответить | Правка | Наверх | Cообщить модератору

27. "Компания System76 занялась портированием CoreBoot для платфо..."  +3 +/
Сообщение от n00by (ok), 27-Июл-20, 12:37 
Например: в течении пяти лет нельзя консультировать конкурентов, запрещено публиковать выдержки из документации и референсных исходников, 2% итоговой реализации останутся закрытыми, остальное откроют.
Ответить | Правка | Наверх | Cообщить модератору

28. "Компания System76 занялась портированием CoreBoot для платфо..."  +/
Сообщение от Zenitur (ok), 27-Июл-20, 12:48 
> 2% итоговой реализации останутся закрытыми

Интересно что там?

Ответить | Правка | Наверх | Cообщить модератору

31. "Компания System76 занялась портированием CoreBoot для платфо..."  +6 +/
Сообщение от InuYasha (??), 27-Июл-20, 13:22 
Примерно:
-----BEGIN NSA PRIVATE KEY-----
...
-----END NSA PRIVATE KEY-----

ну и ещё вот это :)
backdoor.cpp
keylog.cpp
probe.cpp
syspersist.cpp
telemetry.cpp
trusted.cpp
wireless.cpp

Ответить | Правка | Наверх | Cообщить модератору

39. "Компания System76 занялась портированием CoreBoot для платфо..."  +1 +/
Сообщение от Аноним (47), 27-Июл-20, 14:29 
>PRIVATE KEY

PUBLIC же

Ответить | Правка | Наверх | Cообщить модератору

88. "Компания System76 занялась портированием CoreBoot для платфо..."  –1 +/
Сообщение от mos87 (ok), 28-Июл-20, 11:49 
тов. маёру как в школе полимилицыи сказале так и пишед

публик - это когда узкоджынсов дубинкой гонят
прайват партс - это когда в отделении на бутылочку

Ответить | Правка | Наверх | Cообщить модератору

32. "Компания System76 занялась портированием CoreBoot для платфо..."  +6 +/
Сообщение от n00by (ok), 27-Июл-20, 13:22 
1. AMD что-то лицензировала и не имеет права открывать.
2. Ответственный участок, для модификации которого требуется компетенция.
3. Ноу-хау, что бы не плодить конкурентов на халяву.
Ответить | Правка | К родителю #28 | Наверх | Cообщить модератору

29. "Компания System76 занялась портированием CoreBoot для платфо..."  +/
Сообщение от Аноним (97), 27-Июл-20, 13:11 
Вот они все говорят что они делают открытое железо, а на деле они делают закрытое железо и вводят потребителей в заблуждение.
Ответить | Правка | К родителю #27 | Наверх | Cообщить модератору

37. "Компания System76 занялась портированием CoreBoot для платфо..."  +2 +/
Сообщение от n00by (ok), 27-Июл-20, 13:58 
Про 2% написано не применительно к данному случаю, а для примера. Сам так делал из изначально совершенно закрытого проекта опенсорс -- объяснил заказчику, что с точки зрения архитектуры и т.д. будет лучше разделить проект на 2 части и бóльшую опубликовать.
Ответить | Правка | Наверх | Cообщить модератору

46. "Компания System76 занялась портированием CoreBoot для платфо..."  +1 +/
Сообщение от Ordu (ok), 27-Июл-20, 16:24 
> Интересно, какое возможно неразглашение в опенсорсе? Ну допустим clean room отреверсят они оригинальные прошивки из исходников и напишут свободные замены. Как только они их опубликуют, это и будет разглашение секретной информации, не?

Не. Сорцы без комментов -- это лучше конечно, чем бинарь, но по ним невозможно восстановить документацию на железо/API, с которыми эти сорцы работают. По этим сорцам конечно гораздо удобнее будет восстанавливать, чем по бинарям, но всё ж это не то же самое, что документация. Сорцы, во-первых, могут не использовать всех возможностей железа/API, во-вторых, когда они используют, они делают что-нибудь в стиле outb(port, value), и чё? Если ты знаешь семантику этого value, ты можешь догадаться, что происходит, если ты знаешь предназначение порта, ты можешь догадаться, что происходит. Но это всё догадки, причём неполные: а что будет, если сделать outb(port-1, value+1)?

Попробуй взять какие-нибудь сорцы, стрипнуть оттуда комменты, и разобраться, как они работают. Иногда даже с комментами непонятно, потому как (например) автор кода молча использует какой-нибудь приёмчик из алгоритма для феншуйной перестановки унитазов бродячим торговцем с Альдебарана. Ты не знаешь этого алгоритма, не понимаешь, что происходит, и для тебя выглядит магией то, что код работает. Мне случалось так целый день сидеть, разбираясь с тем, как код работает. Вот если сорцы прочитал десяток человек, и каждый добавлял или правил комменты, чтобы понятнее было бы, то после этого, сорец читать легко и прельстиво, потому как никаких специальных знаний для понимания не требуется.

Ответить | Правка | К родителю #19 | Наверх | Cообщить модератору

134. "Компания System76 занялась портированием CoreBoot для платфо..."  +/
Сообщение от Аноним (-), 29-Июл-20, 18:32 
> догадки, причём неполные: а что будет, если сделать outb(port-1, value+1)?

Скорее всего ничего хорошего - потому что там будут bit fields какие-нибудь, для начала, и попытка с ними поработать вот прямо так ... может прийти в бошку только какому-нибудь математику-теоретику, который вообще не в курсах как железки устроены :)

Да и периферия нынче в таком формате шпрехать не изволит - поскольку на асме уже не модно, железки как-то резко стали memmapped. У ip-блока есть некий регион и там живет его кучка регистров. И сорец это как правило и описывает и более менее понятно что это за фигня и как работает. Хотя конечно отдельными фичами сорец мог и не пользоваться, поэтому что делали биты с 8 до 14 в регистре по смещению device_base+0x105 может и остаться для вас загадкой, увы. Впрочем в шЫте это тоже может быть указано как reserved запросто. И несло ли оно вообще функциональную нагрузку - вопрос открытый. Может например была фича которую пытались сделать но не получилось т.к. в ее реализации вылезли фатальные глюки, например, а чип переделывать было уже впадлу.

Ответить | Правка | Наверх | Cообщить модератору

135. "Компания System76 занялась портированием CoreBoot для платфо..."  +/
Сообщение от Ordu (ok), 29-Июл-20, 23:43 
>> догадки, причём неполные: а что будет, если сделать outb(port-1, value+1)?
> Скорее всего ничего хорошего - потому что там будут bit fields какие-нибудь,
> для начала, и попытка с ними поработать вот прямо так ...
> может прийти в бошку только какому-нибудь математику-теоретику, который вообще не в
> курсах как железки устроены :)

Да какая разница, кому пришло в голову поработать так? Главное что ты посмотрев код, работающий с железкой, не узнал ничего нового: всё что можешь ответить на поставленный вопрос -- то же самое, что ты можешь ответить не глядя в код, то есть пытаться обесценить вопрос, доказывать, что вопрос не заслуживает ответа, рассказывать про математика-теоретика, который в отличие от умного тебя туп безбожно и ничего не понимает в железе. Но на вопрос-то ты не можешь ответить, а не математик, так? ;)

И да, не над оскорблять операции сложения и вычитания, мол, они только математику-теоретику в голову придти могут. Эти операции не могут придти в голову современному системному программисту, которому вдолбили в голову, что если value представляет собой битфилд, то его собирать надо при помощи побитового ИЛИ из предопределённых констант. Хрен тут был и сбоку бантик. value+1 можно использовать для того, чтобы установить младший бит, например (если он ноль конечно). Можно использовать для того, чтобы сбросить младший бит, и установить тот, что постарше. Можно инвертировать 0xff. Можно число вида 0b00...11 превратить в 0b00..010..00, и это новое число будет равно 2^n, где n -- это количество ненулевых бит в исходном числе. И всё это великолепие одной командой процессора (правда похерив флаги). Сегодня так не делают, потому что это "грязные хаки", которые выносят мозг неподготовленным, и те начинают кричать, что "код нечитабельный". В 80-е и раньше такой стиль был нормой (не везде конечно, но на PC я видел немало такого), потому как экономия одной машинной команды -- это было хорошо. Писать так было нормой, а если ты умел читать такой код и понимать, то ты был крутым специалистом.

> Да и периферия нынче в таком формате шпрехать не изволит - поскольку
> на асме уже не модно, железки как-то резко стали memmapped. У
> ip-блока есть некий регион и там живет его кучка регистров. И
> сорец это как правило и описывает и более менее понятно что
> это за фигня и как работает.

С портами, сорец скорее всего тоже давал номерам портов всякие хорошие имена, это принципиально не меняет ничего.

Ответить | Правка | Наверх | Cообщить модератору

137. "Компания System76 занялась портированием CoreBoot для платфо..."  +/
Сообщение от Аноним (-), 30-Июл-20, 08:36 
> Да какая разница, кому пришло в голову поработать так?

Ты привел это как типичный код. А я возразил что по состоянию на сейчас это нифига не типично.

Ну вот смотри, вон та мипсятина своим линухом цепляет вон тот pcie ath9k ничем не хуже чем на x86. Удачи в outb на том мипсе... у него таких понятий нет! :). А линуксные дрова вот работают. Запускают те же pci-шины, те же железки на них, тот же usb EHCI, те же железки на них, ... и тот же линух там идет на взлет. И с ARM или PPC такая же фигня.

Пойнт в том что оперировать x86-only спецификой, которая к тому же давно считается за махровое легаси эпохи ISA как примерами работы с железом - отстало лет на 20. И наверное не стоит так иллюстрировать работу с железом. Дабы какой-нибудь неокрепший ум потом не попытался сдуру сделать именно это, именно так.

> Главное что ты посмотрев код, работающий с железкой, не узнал ничего нового:
> всё что можешь ответить на поставленный вопрос -- то же самое, что ты
> можешь ответить не глядя в код,

Э нет. Если я не имею даташита и не видел сорца работающего с железкой - я о железке вообще ничего не знаю. Реверсить совсем вслепую - крайне мучительное и медленное занятие, сильный якорь в разработке. А вот сорц может дать мне знание ключевых регистров и их составных частей. Это знание может быть урезанным относительно того что есть в полном даташите, но для базового понимания железки и ее запуска худо бедно хватит. И это уже большой шаг вперед относительно копания вслепую.

Алсо, бывает инверсная проблема. Даташиты бывают написаны мутно, неточно, непонятно, а то и попросту с багами и логическими противоречиями, а то и просто quirks которые не документированы в даташыте. И получив на вход такую доку может быть не очевидно как на самом деле с железкой надо работать. Или написаный по спекам код не заработает. Или будет работать не так как задумано. Потуги писать по той доке код обречены на довольно много мучений. С другой стороны, сорец, если известно что он работает - это финальный ответ на данный вопрос, окончательная ауторити. Если вон те действия ведут к вон этому результату и это проверено кодом, который, желательно, активно гоняли - значит делать вот так и правда катит.

...но чтобы это узнать надо, очевидно, взять даташит и попытаться написать работу с какой-нибудь железкой по этим спекам. А ты это когда-нибудь вообще делал? Нет, поюзать чужие либы и дрова как черный ящик - не о том.

> то есть пытаться обесценить вопрос, доказывать, что вопрос не заслуживает
> ответа, рассказывать про математика-теоретика, который в отличие от умного тебя
> туп безбожно и ничего не понимает в железе. Но на вопрос-то ты не можешь ответить, а
> не математик, так? ;)

Я лишь усомнился что математик-теоретик сам пробовал накодить работу с железкой по спекам в своем коде. Nothing more, nothing less. А усомнился я в этом потому что мне показалось что человек не в курсе некоторых тематических "приколов" области, но лезет с умным видом рассуждать. Честность за честность? :)

> И да, не над оскорблять операции сложения и вычитания, мол, они только
> математику-теоретику в голову придти могут.

Для именно работы с железками как-то сильно актуальнее операции с битами и битовыми полями, так что опять же пример получился не от мира сего, все что он иллюстрирует - что человек не рубит как это сейчас выглядит, но рассуждает.

> Эти операции не могут придти в голову современному системному программисту,
> которому вдолбили в голову, что если value представляет собой битфилд,
> то его собирать надо при помощи побитового ИЛИ из предопределённых констант.

Если нечто выглядит как битфилд и ведет себя как битфилд, логично работать с ним как с битфилдом.

И да, попытки выпендриться на этом поприще ни к чему хорошему не ведут. Если интересно, почитай книгу Michael Barr - Embedded C coding standard (она легально есть для скачки как пдф). Там описан ряд довольно странных на вид вещей. Смысл которых - минимизировать количество багов и использовать "антибажные" техники кодинга еще на подлете. Ну, просто потому что отказы в эмбедовке, сбои в работе с железками и все такое - выглядят и ощущаются очень неприкольно.

А если выразить идеи вкратце, примерно так:

1) Код должен быть простым, понятным и без выпендрежа. Иначе проект будет проклят багами и глюками, особенно когда ты его отложишь на полочку на пару лет и забудешь свои кулхацкерские фокусы. И тем более когда его возьмет в руки кто-то кто-нибудь отличный от тебя.

2) Не следует раскладывать себе и окружающим грабли. Как минимум без острой на то необходимости. А где иначе ну вот совсем никак - надо тщательнейше документировать. Иначе однажды все сломается - и никто не будет понимать почему.

3) Чем проще код - тем он надежнее. Если ломаться нечему, то уж нечему.

> Хрен тут был и сбоку бантик. value+1 можно
> использовать для того, чтобы установить младший бит, например

Можно! Но это поганая идея. Потому что через пару лет ты и сам лоханешься в оценке чего тот код делал, а если уж в нем кто-то другой будет копаться, он и подавно не врубится.

А теперь сравни с чем-то типа REG_SET_BIT(HW_REG_ABC, FEATURE_BIT_5). Вот тут уже даже полный болван начнет догадываться what's going on. И кстати кто сказал что через пару лет занятий другими проектами ты сам не окажешься в роли того болвана, когда вспомнишь что вот такое у тебя уже было пару лет назад, так что заново кодить не надо? %)

Еще дедушка Кнут сказал же: не надо выделываться если это убивает читаемость и понимаемость кода. И он знал о чем говорит.

> конечно). Можно использовать для того, чтобы сбросить младший бит, и установить
> тот, что постарше.

Как бы это сказать? Вообще, фактический паттерн доступа к вон тому куску памяти при произвольной математике не особо то и определен. А для HW register может влиять даже просто чтение. Ну например бывает что некий статусный бит взводится, а когда прочитали, железо само сбрасывает (ну, чтобы код время не тратил). А писать 1 в этот бит вообще невалидно, например.

А ты там обычной математикой, безбашенно? Так можно получить какой-нибудь жесточайший undefined behavior. В хучшем случае - раз в год, когда твоя чудная абстрактная математика наткнулась на тот выкрутас железки, формально валидный но таким кодом решительно непредусмотренный. На самом деле если такое было - даже REG_SET_BIT той гадине придется сделать свой, особенный, учитывающий это западло. И пойнт в том чтобы оно как раз было безграбельно по отношению к той штуке. А вот абстрактная математика применительно к произвольно взятому регистру железки это мягко говоря не гарантирует.

То-есть одним нехитрым выгибоном кладем нефиговые грабли. Возможно стреляющие раз в год и потому их даже тесты не поймают вот так сразу. А оно надо? :)

> великолепие одной командой процессора (правда похерив флаги). Сегодня так не делают,
> потому что это "грязные хаки", которые выносят мозг неподготовленным, и те
> начинают кричать, что "код нечитабельный".

Более того - это ведет к багам и ломанию дров. В эмбедовке это тупо опасно для жизней людей. В работе с железками на том же PC - тоже мало кто радуется жесткому дедлоку или мощному разрушению данных сдуревшей железкой.

> В 80-е и раньше такой стиль был нормой (не везде конечно,

В 80-е видите ли...
1) Была однозадачность, а ребут вообще зачастую был штатным способом выхода из программы, особенно для non-DOS окружений.
2) Мало кто использовал компьютеры для опасных/чувствительных управляющих процессов, а шишки были еще не набиты. Ариан 5 еще не разбился, fly-by-wire еще не ушел в массы, автоматические поезда и системы управления если и были то в зачаточном состоянии.

А что там раздолбай-хаксор в своей демке/гамезе накодит - да в принципе что угодно, его да даже полный дедлок как максимум обидит десяток юзерей сфлопинетивших это.

Я не спорю что это очень клево и романтично. И все же с тех времен мы основательно обпрыгали многочисленные грабли - и потирая ушибленные лбы поняли что всему свое время и место. В том числе и хакерским трюкам :). И я имею нескромность думать что вот именно в работе с железками именно откровенный хакеризм очень уж чреват side effect-ами. Особенно если есть хоть минимальный шанс что этот код будет щупать кто-то кроме тебя. Да и ты сам через несколько лет можешь уже и не вспомнить все детали. И будет очень кстати если код простой и понятный.

> но на PC я видел немало такого), потому как экономия одной машинной команды -- это
> было хорошо.

Да, есть такое направление. И оно по своему клевое. И btw однажды я крепко хардкорил на эту тему, просто потому что мой модуль тупо не лез :D на несколько байтов в набортный SRAM :D а более крупного RAM внезапно не было - потому что тот модуль как раз остальное и подымал. Это правда был вообще совсем не х86, но идея та же самая. И все же у этого направления есть свои грабли. И довольно болезненные. Это хорошо для игрушечных применений, но если мы хотим немного большего, чтобы тысячи юзерей были счастливы, а то и вовсе доверить свои тушки нашему коду - тогда мысли о том как писать код все же немного меняются. В пользу предсказуемого, понятного и безграбельного кода.

> Писать так было нормой, а если ты умел читать такой код
> и понимать, то ты был крутым специалистом.

Это по своему хорошо и романтично, я не спорю. Я тоже делал некоторые забавные трюки. И сейчас иногда делаю. И все же имею заметить что вот именно в работе с железом это в общем случае - не есть удачная идея. Ну, потому что какой-нибудь дедлок раз в год очень обидная и очень трудноотдебаживаемая шляпа. Демку то что, 5 минут покрутил и вырубил. А если оно год непрерывно вкалывает, люди на это закладываются, и вообще... ммм...

> С портами, сорец скорее всего тоже давал номерам портов всякие хорошие имена,
> это принципиально не меняет ничего.

Это принципиально разные методы работы с железками, при том первый уже давно стал легаси, да и не работает нигде кроме x86. А вот mmaped - да на почти всех современных штуках, от cortex M0 который под микроскопом рассматривать впору до здоровенных серверно-энтерпрайзных монстров.

Ответить | Правка | Наверх | Cообщить модератору

141. "Компания System76 занялась портированием CoreBoot для платфо..."  +/
Сообщение от Ordu (ok), 30-Июл-20, 11:37 
Я вот понять не могу, зачем ты прикидываешься тупым и делаешь вид, что не понимаешь, о чём я говорю? Хочешь воспользоваться случаем, когда разговор зашёл на близкую тебе тему, и показать мне, что ты шаришь в работе с железом и опыт имеешь? Да я и так верю, я вообще доверчивый: пока человек не начинает нести совсем уж бред недостойный его притязаний на уровень знаний, я принимаю его притязания и верю ему.

Если тебе не понятно где ты прикидываешься, что не понимаешь меня, я могу тебе по пунктам расписать:

1. Я доношу мысль о том, что по сорцам сложно разобрать железо. Ты не возражаешь по сути, но рвёшься в бой доказывать что-то про частные случаи.
2. Я привожу пример, который демонстрирует в общем то, с чем ты согласен, но ты начинаешь доказывать мне, что пример неудачен. Удачность примера заключается в том, насколько хорошо он демонстрирует то, что призван демонстрировать, а не в том, насколько он реалистичен.
3. Я вспоминаю про стиль написания программ, ты начинаешь мне доказывать, что стиль плохой и рассказывать причины, почему от него отказались. Удачен/не удачен, отказались/не отказались, не отменяет того факта, что стиль существовал и, возможно, существует и сегодня. И в этом стиле value+1 может иметь смысл не только для математика-теоретика.

4. Это заслуживает отдельного внимания:

> Это принципиально разные методы работы с железками, при том первый уже давно стал легаси, да и не работает нигде кроме x86.

Что значит _принципиально_ разные? Они разные -- кто ж спорит. Но рассуждать о принципиальности этой разницы... Ты не слышал про то, как Фома Аквинский как-то спорил с Альбертом Великим о наличии принципиальных глаз у принципиального крота? Если не слышал, загугли историю и дочитай до вмешательства садовника. В инете предмет спора часто упрощают до уровня наличия глаз у крота, но это потому что 95%. Речь шла о _принципиальных_ глазах у _принципиального_ крота. Я навскидку боюсь наврать, приписывая Фоме Аквинскому не его мысли, но, допустим, смысл мог бы быть таким: крот -- это что-то типа мыши, крысы, хомячка и тп, они имеют очень много схожестей, и если мы создаём принципиальную модель реальности, то "принципиальный крот" (в смысле модель крота, часть модели реальности) может иметь глаза. Это чем-то напоминает ООП, где ты создаёшь базовый класс МелкийГрызун, и задаёшься вопросом, должен ли этот класс иметь свойство "глаза"? Если должен, то производный класс Крот тоже будет иметь глаза. И плевать на садовника, который говорит, что у крота глаз нет: чего он понимает в принципиальных глазах у принципиального крота?

"Принципиальность" чего-либо -- это философия, и простым людям она ни к чему. Прежде чем рассуждать о принципиальности чего-либо, надо понять принцип. Если мы сначала начнём рассуждать о принципиальности в частном случае, не определившись с принципом, то результатом будет то, что мы подгоним принцип под данный частный случай так, чтобы получить желаемый ответ. Если мы будем это делать в виде дискуссии, то мы придём к дедлоку: каждый из нас подгонит принцип под свою позицию, и дальнейшее движение будет невозможно, потому что спорить мы будем не о выборе принципа, а о частном случае.

Ответить | Правка | Наверх | Cообщить модератору

140. "Компания System76 занялась портированием CoreBoot для платфо..."  +/
Сообщение от Аноним (140), 30-Июл-20, 10:02 
p.s. если такие хакеризмы нравятся - погугли по нику introspec например. У этих извращенцев-спектрумофилов и рядом есть забавная тусовочка странных типов. И некоторые их вещицы несмотря на непрактичность - таки pure beauty. Ну например, они делают компактные и быстрые депакеры довольно крутых (по степени сжатия) алгоритмов, прикручивая современные наработки к винтажной штуке (в времена актуальности спекки это было бы безумно круто). Воюют за каждый байт и микросекунду.

Отдельные рожи типа https://github.com/emmanuel-marty/lzsa даже идут довольно далеко. Этот извращенец запилил алгоритм сжатия на манер LZ4, но жмет лучше, распаковывается по прежнему быстро, а поток скроен так чтобы быть удобным для 8-битной мелочи. Это изврат, но в алгоритмах есть лучшие технологии современности (nibble encoding, etc) - и это жесточайший пример как изогнуть алгоритм и структуру данных под constraints. Даже если они и странные, это выглядит круто.

Ответить | Правка | К родителю #135 | Наверх | Cообщить модератору

130. "Компания System76 занялась портированием CoreBoot для платфо..."  +/
Сообщение от Аноним (129), 29-Июл-20, 18:13 
> Интересно, какое возможно неразглашение в опенсорсе? Ну допустим clean room отреверсят
> они оригинальные прошивки из исходников и напишут свободные замены. Как только
> они их опубликуют, это и будет разглашение секретной информации, не?

Или не будет. Ну вон Radeon разреверсили. Амдшники потом вообще утащили сие в свою нору, отрефакторили, регистры переобозвали в своответствии с своими доками (которые как раз и выложили) - и стало это amdgpu в результате. А стремного проприетарного блобомонстра в той истории вообще замочили, так что сказка со счастливым концом.

Ответить | Правка | К родителю #19 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру