|
shedevr.org.ru Группа перевода приставочных игр "ШЕДЕВР"
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Virtual_Killer
Зарегистрирован: 25.03.2004 Сообщения: 610 Откуда: Чекагинск
|
Добавлено: Сб Окт 30, 2004 4:22 am Заголовок сообщения: Кодировка Лемпела-Зива |
|
|
Тему удалили :(
Axel писал(а): | (заодно почитай, что такое DTE...) |
Что такое DTE я прекрасно знаю.
Нужен более явный пример - будет:
Сравним двухбайтовую MTE и LZSS.
1) Двухбайтовая MTE кодировка устроена так:
В тексте чередуются символы/спецсимволы и двухбайтовые MTE коды. Этот MTE код выглядит примерно так (пример из FF3US): XXXXXXYY YYYYYYYY (количество X битов может олличаться), где X биты - означают, что это MTE код, а Y биты - кодируют слово.
2) LZSS выглядит примерно так (по книге):
В тексте чередуются символы/спецсимволы и указатели.
Причём символ и указатель различаются битом.
Например:
0XXXXXXX - символы и спецсимволы.
1XXXXXXX - начало указателя, то есть укказатель состоит из нескольких байтов (2-х в частности), например: 1XXXXXXX XXXXYYYY
Где X биты - кодируют смещение, а Y биты - длинну дублируемого текста (может включать в себя другие указатели).
Итак: и в том и в другом случае "особые" данные кодируются двумя байтами, отличие их (случаев) в том, что в 1-м случае эти пары "особых" байт кодируют - слово из словаря, а во 2-м случае - слово (любой набор символов) из самого текста.
Странно, я думал, что это и так очевидно, но пришлось вам всё разжевывать.
P.S.: Во многох hex-редакторох (например, в GoldFinger'е) есть поддержка двухбайтовой MTE кодировки. _________________ Не поймите меня правильно |
|
Вернуться к началу |
|
|
SergeyK
Зарегистрирован: 02.12.2003 Сообщения: 1278
|
Добавлено: Сб Окт 30, 2004 9:55 am Заголовок сообщения: Re: Кодировка Лемпела-Зива |
|
|
Virtual_Killer писал(а): | Странно, я думал, что это и так очевидно, но пришлось вам всё разжевывать. |
Здесь тебя никто не просил это разжевывать. Все, кому надо, и без тебя это прекрасно знают.
Не нужно пытаться казаться самым умным.
Ты напорол в той теме фигни и теперь пытаешься опять увести разговор в другое русло. |
|
Вернуться к началу |
|
|
АнС RRC2008
Зарегистрирован: 08.11.2003 Сообщения: 2818
|
Добавлено: Сб Окт 30, 2004 2:37 pm Заголовок сообщения: Re: Кодировка Лемпела-Зива |
|
|
Virtual_Killer писал(а): | Что такое DTE я прекрасно знаю.
Нужен более явный пример - будет:
Сравним двухбайтовую MTE и LZSS.
Итак: и в том и в другом случае "особые" данные кодируются двумя байтами, отличие их (случаев) в том, что в 1-м случае эти пары "особых" байт кодируют - слово из словаря, а во 2-м случае - слово (любой набор символов) из самого текста. |
Ну ты, блин, теоретик! Давай, объясню наконец, в чём твоя ошибка, и хватит тормозить, а то уже совсем лицо потерял.
Иногда, чтобы увидеть явную (для опытных людей) ошибку, нужно ПРОСТО ПОЭКСПЕРИМЕНТИРОВАТЬ.
В данном случае ошибка в неправильном определении подхода.
DTE и MTE - это оптимизация, а LZ - сжатие. Разные вещи, между прочим.
Например, когда из целой картины мы выбираем только неповторяющиеся тайлы, и пишем карту тайлов, это называется оптимизация. Мы же не говорим, что графика пожата, если картинка просто разбита на тайлы, которые упорядочены в соответствии с картой. По внешнему виду картинки, найдя нужный набор тайло, мы можем запросто определить вид карты тайлов, и изменять её, как угодно. Это просто оптимизация, а до настоящего сжатия ей далеко. И ЭТО следует относить к базовому ромхакингу.
А когда мы просто берём ВСЕ байты этой картины и сжимаем одним из алгоритмов упаковки (который, в отличие от оптимизации, годится для любых типов данных, так как он нечувствителен к особым закономерностям сжимаемого объекта, он не знает, что картинку можно было бы сжать лучше, если бы использовать конкретно под неё заточенный алгоритм, нет - он сжимает всё под одну гребёнку), то на выходе мы получаем зачастую совершенно нечитаемый массив данных. И этот массив будет примерно одинаковым как для сжатой музыки, так идля сжатого еткста, так и для графики - это уже совсем не то, что было до сжатия. Так вот, ЭТО экстремальный ромхакинг, а тема находится в базовом, поэтому я не собираюсь здесь разжёвывать суть LZ в проложении к ромхакингу.
Улавливаешь разницу между MTE и LZ? При оптимизации содержание инфы остаётся тем же, меняется только форма. При сжатии меняется содержание (если раньше это был текст, то после сжатия - непонятный набор байт). Философия рулит. ;)
В нашем случае эта разница сказывается так. При оптимизации у нас есть возможность, имея первоначальные (неоптимизированные) данные, в уме (или на бумаге) высчитать примерный вид оптимизированных данных, или даже просто поискать в РОМе эти самые данные, надеясь, что их не удалось оптимизировать и они просто скопировались.
При сжатии же мы не сможем по имеющимся данным определить вид этих же данных в сжатом виде, так как поменялось их содержаник. По внешнему виду этого сжатого массива данных ты не сможешь даже примерно определить, что это такое - текст, графика или музыка (или вообще код).
Поэтому, сколько не "декомпресссируй весь РОМ" - сжатых данных ты не отыщешь. Или будешь продолжать доказывать? :lol2:
Ну чтобы стало уже предельно понятно, поясню на твоём же примере.
Для MTE ты сможешь составить таблицу и вытащить текст из РОМа.
А какую таблицу ты будешь составлять для LZ? Заренее определить невозможно, так как в зависимости от предыдущего текста это смещение XXXXXXX будет указывать на разные слова/слоги. Кроме того, нужно точно знать начало запакованных данных, так как если начать распаковывать не с начала, то выйдет полная чушь.
И вообще, ещё раз говорю - работа с сжатыми данными - это совсем иной уровень. Если разобрался в MTE (получил основные навыки в базовом ромхакинге), это не значит, что можно на основе тех знаний строить какие-то бредовые алгоритмы работы на качественно новом уровне. Причём, даже не опробовав на деле.
Короче, чувак, больше так не тормози. (а то Джин разочаруется и выперет тебя из MarioTeam ) |
|
Вернуться к началу |
|
|
gottax
Зарегистрирован: 16.11.2003 Сообщения: 588 Откуда: Курск
|
Добавлено: Сб Окт 30, 2004 3:24 pm Заголовок сообщения: |
|
|
АнС, я с тобой согласен, но есть одно "НО"
Визуально можно определить, где в роме сжатая графика, где сжатый текст, а где сжатый звук. При этом используется метод подобия, то есть подразумевается, что ты уже видел, как выглядит подобная информация в пожатом виде и ты точно знаешь, что она являлась графикой/текстом/звуком.
При этом не так уж и важно, какой алгоритм используется - если наловчиться, ты уже будешь машинально визуально выделять нужные структуры.;)
Например, я открыл MP3-файл (т. е. я заранее знал, что в нём используется алгоритм сжатия MP3) в графическом редакторе, запомнил его структуру и особенности (всё визуально, учти). Потом открыл любую игру, в которой используется подобное сжатие и - оп-ля! - нашёл расположение сжатого звука! Тут надо уточнить, что в этом методе всегда присутствует погрешность (она зависит от размера рома), и чтобы определить точное положение массива сжатых данных, нужно открыть ром в хекс-редакторе и посмотреть на соседних адресах. И более того, действуя таким образом, я даже смог обнаружить звуковые данные в другом роме, в котором используется совершенно другой алгоритм сжатия звука!
Аналогично определяется местонахождение сжатой графики.
А вот с текстом гораздо сложнее (из-за малого размера сжатых текстовых данных) поэтому такой способ к поиску сжатого текста, увы, практически не подходит:(
Насчёт ненаходимости сжатого текста стандартными способами ты тоже не совсем прав, АнС. Например, текст, сжатый алгоримами Лемпеля-Зива ищется довольно легко (почему - понятия не имею, наверное из-за особенностей самого алгоритма). Сжатый по этому алгоритму текст, кстати, выглядит очень похожим на оптимизированный текст с помощью MTE/DTE, только вот изменить его хрен получится. |
|
Вернуться к началу |
|
|
АнС RRC2008
Зарегистрирован: 08.11.2003 Сообщения: 2818
|
Добавлено: Сб Окт 30, 2004 6:04 pm Заголовок сообщения: |
|
|
gottax писал(а): | Насчёт ненаходимости сжатого текста стандартными способами ты тоже не совсем прав, АнС. Например, текст, сжатый алгоримами Лемпеля-Зива ищется довольно легко (почему - понятия не имею, наверное из-за особенностей самого алгоритма). Сжатый по этому алгоритму текст, кстати, выглядит очень похожим на оптимизированный текст с помощью MTE/DTE, только вот изменить его хрен получится. |
ТУт дело ещё вот в чём. Если текст не удаётся сжать (ну такой он, что нет никаких закономерностей), то алгоритм LZ просто копирует его в несжатом виде, и вот как раз в таких случаях тебе повезло найти его непожатым. С графикой такое уже не выйдет. И с другими алгоритмами запаковки (а также более усложнынными разновидностями LZ, не тем, что описал Virtual_Killer) тоже такой халявы не будет (так как они даже тот текст, что не могут сжать, преобразуют в другую последовательность байт, иногда выходит даже длиннее, чем несжатый). Кстати, что-то я не помню, чтобы ты когда-либо ломал алгоритм LZ! ;)
А определить "на глаз" по мешанине байт, текст это или графика, можешь разве что только ты. Ты сначала этот свой метод визуального распознавания задокументируй, чтобы можно было понять, что ты вообще имеешь в виду. |
|
Вернуться к началу |
|
|
Virtual_Killer
Зарегистрирован: 25.03.2004 Сообщения: 610 Откуда: Чекагинск
|
Добавлено: Вс Окт 31, 2004 4:37 am Заголовок сообщения: Re: Кодировка Лемпела-Зива |
|
|
АнС писал(а): | DTE и MTE - это оптимизация, а LZ - сжатие. Разные вещи, между прочим. |
Вот тут ты не прав.
Цитирую по книге (про словарные методы):
Цитата: | Словарный кодировщик добивается сжатия заменой групп последовательных символов (фраз) индексами некоторого словаря. Словарь есть список таких фраз, которые, как ожидается, будут часто использоваться. Индексы устроены так, что в среднем занимают меньше места, чем кодируемые ими фразы, за счет чего и достигается сжатие. Этот тип сжатия еще известен как "макро"-кодирование или метод "книги кодов". |
Так что MTE - это сжатие.
Из той же книги (название раздела):
Цитата: | 3.4 Адаптированные словарное кодирование: метод Зива-Лемпела. |
То есть LZ кодировка - это тоже словарный метод сжатия.
Далее в этом разделе:
Цитата: | Раскодирование сжатого текста осуществляется напрямую - происходит простая замена указателя готовой фразой из словаря, на которую тот указывает. |
То есть мы можем просто заменять эти указатели, на слова и получить нормальный текст. :wink:
P.S.: Это книга валяется здесь:
http://www.codenet.ru/progr/packing/modeling/intro.php
Я уже давно её скачал. _________________ Не поймите меня правильно |
|
Вернуться к началу |
|
|
АнС RRC2008
Зарегистрирован: 08.11.2003 Сообщения: 2818
|
Добавлено: Вс Окт 31, 2004 4:36 pm Заголовок сообщения: |
|
|
Тааак..... я попытался объяснить товарищу, в чём его ошибка, и почему невозможно Цитата: | декомпрессировать РОМ | , а он начал искать ошибки в моих словах.
Ещё раз для диких. Словарные методы бывают радикально разные. Да, все они ориентированы на то, чтобы уменьшить размер данных. Но MTE - это совсем не то же самое, что LZ.
LZ - это сжатие в его классическом понимании, MTE - это не сжатие, а именно оптимизационный приём, который НЕ ВЕЗДЕ РАБОТАЕТ. MTE может "сжать" (а на самом деле нельзя так говорить) только текст.
И хватит уже теоретических изысканий и ссылок на разные посторонние источники. Вместо всей этой болтовни мог бы просто проверить всё на практике, как это делаем все мы. |
|
Вернуться к началу |
|
|
АнС RRC2008
Зарегистрирован: 08.11.2003 Сообщения: 2818
|
Добавлено: Вс Окт 31, 2004 8:18 pm Заголовок сообщения: Re: Кодировка Лемпела-Зива |
|
|
Хм, вообще, книга полезная. Но не для всех.
В этой статье своя терминология, слегка отличающаяся от той, что используется при ромхакинге. Там понятие оптимизация не выделяется в отдельный процесс, сжатием (а ещё и кодированием, что, по-моему, вообще не будет верным) они называют любой алгорит, уменьшающий размер исходных данных. При таком подходе и карту тайлов можно назвать сжатием. Если тебе нравится использовать чуждую терминологию - твои проблемы, но нечего навязывать её другим. Можешь сжатием называть хоть Byteswap. |
|
Вернуться к началу |
|
|
Axel Советник
Зарегистрирован: 14.11.2003 Сообщения: 680
|
Добавлено: Пн Ноя 01, 2004 9:40 am Заголовок сообщения: Re: Кодировка Лемпела-Зива |
|
|
Virtual_Killer писал(а): |
Итак: и в том и в другом случае "особые" данные кодируются двумя байтами, отличие их (случаев) в том, что в 1-м случае эти пары "особых" байт кодируют - слово из словаря, а во 2-м случае - слово (любой набор символов) из самого текста. |
...и фигли толку ?
ты с какого места весь ROM будешь разжимать ?
EDIT:
Virtual_Killer писал(а): | Так что MTE - это сжатие. |
тогда, что такое UTF-8 (или xx-JIS) разжатие ? _________________ Всех их вместе переведём! |
|
Вернуться к началу |
|
|
Amorpho[US] БесФорменный
Зарегистрирован: 16.12.2003 Сообщения: 161 Откуда: Воронеж
|
Добавлено: Вт Ноя 02, 2004 3:47 am Заголовок сообщения: |
|
|
АнС писал(а): | А определить "на глаз" по мешанине байт, текст это или графика, можешь разве что только ты. Ты сначала этот свой метод визуального распознавания задокументируй, чтобы можно было понять, что ты вообще имеешь в виду. | Я тоже такое могу. Но документировать не стану - know how. _________________ Я вернулся!!! ...ну почти. |
|
Вернуться к началу |
|
|
Virtual_Killer
Зарегистрирован: 25.03.2004 Сообщения: 610 Откуда: Чекагинск
|
Добавлено: Вт Ноя 02, 2004 4:23 am Заголовок сообщения: Re: Кодировка Лемпела-Зива |
|
|
Axel писал(а): | ты с какого места весь ROM будешь разжимать ? |
Да хоть с самого начала РОМа (хотя в LZ - начало текста ищется очень легко).
Можно и с начала текста, но так как конец текста довольно трудно найти, можно интерпретировать/декомпреснуть (кому как нравится) с запасом.
Ты влюбом слечае ты будешь заменять пары байт. И без разницы чем: словами из словаря (MTE) или словами, находащимися на определённом смещении (некоторые LZ). И в том и в дрегом случае (MTE и LZ) случае, в конечном итоге, при "замене" этой пары байт, компьютер (или консоль) будет искать точный адрес закодированного слова и его длинну.
АнС писал(а): | И хватит уже теоретических изысканий и ссылок на разные посторонние источники. Вместо всей этой болтовни мог бы просто проверить всё на практике, как это делаем все мы. |
Как говорит один лектор: "Теория без практики - слепа, практика без теории - невозможна." :wink:
Да, было бы неплохо опробовать мой метод на практике. Но я знаю только один РОМ с LZ кодировкой - Phantasy Star 4.
Там ТАК наворотили - кошмар.
Хотя... мне нужно всего лишь разобраться как устроены там указатели и почему некоторые из них (находящиеся в середине предложения) определяют текст в самом конце предложения.
Ладно, сегодня помучаю. _________________ Не поймите меня правильно |
|
Вернуться к началу |
|
|
Amorpho[US] БесФорменный
Зарегистрирован: 16.12.2003 Сообщения: 161 Откуда: Воронеж
|
Добавлено: Вт Ноя 02, 2004 5:00 am Заголовок сообщения: Re: Кодировка Лемпела-Зива |
|
|
Virtual_Killer писал(а): | Да хоть с самого начала РОМа (хотя в LZ - начало текста ищется очень легко).
Можно и с начала текста, но так как конец текста довольно трудно найти, можно интерпретировать/декомпреснуть (кому как нравится) с запасом. | Что-то здешние смайлики не выражают всей той картины эмоций, которая возникает при прочтении подобных фраз в десятый раз.
(Здесь должен быть смайлик "ОХ..ТЬ Б..Я".) _________________ Я вернулся!!! ...ну почти. |
|
Вернуться к началу |
|
|
SergeyK
Зарегистрирован: 02.12.2003 Сообщения: 1278
|
Добавлено: Вт Ноя 02, 2004 10:42 am Заголовок сообщения: Re: Кодировка Лемпела-Зива |
|
|
Virtual_Killer писал(а): | Да хоть с самого начала РОМа (хотя в LZ - начало текста ищется очень легко).
Можно и с начала текста, но так как конец текста довольно трудно найти, можно интерпретировать/декомпреснуть (кому как нравится) с запасом. |
Ты опять несешь хрень.
Тебе сказали - МТЕ - это оптимизация текста, а LZ - полноценный алгоритм компрессии.
И Аморфус прав - после того, как читаешь твои посты, в которых ты с упрямством повторяешь бредовые мысли (да еще их и развиваешь), становится смешно.
Virtual_Killer писал(а): | Да, было бы неплохо опробовать мой метод на практике. Но я знаю только один РОМ с LZ кодировкой - Phantasy Star 4.
Там ТАК наворотили - кошмар. |
Так давай, раскомпрессуй его ВЕСЬ. Ну, или, хотя бы, три четверти :)
Я тебе еще раз повторяю - разберись, чем метод компрессии отличается от метода оптимизации текста и почему нельзя декомпрессовать ВЕСЬ ром.
Еще парочка твоих подобных постов и лично я тебя буду считать упрямым %*?№*!", который не понимает очевидных вещей, не хочет в них разобраться и несет ахинею.... |
|
Вернуться к началу |
|
|
Axel Советник
Зарегистрирован: 14.11.2003 Сообщения: 680
|
Добавлено: Вт Ноя 02, 2004 12:35 pm Заголовок сообщения: Re: Кодировка Лемпела-Зива |
|
|
Virtual_Killer писал(а): | Да, было бы неплохо опробовать мой метод на практике. Но я знаю только один РОМ с LZ кодировкой - Phantasy Star 4. |
чтобы уже закрыть, эту бестолковую тему
и объяснить тебе, что такое заголовки
предлагаю тебе вот, что -
www.shedevr.org.ru/temp/axeltmp/lzss_file.bin
в этом файле сжаты (lzSS) ДВА блока текста,
я намеренно забил заголовки этих блоков нулями (00h)...
кодировка, для упрощения задачи - windows-1251.
если ты сможешь сочинить такую прогу, которая
развернет весь файл (весь ROM ), не зная,
длинну каждого блока и смещения откуда начинается
второй блок данных можешь смело поставить себе
памятник нерукотворный...
а пока не можешь, лучше в этой теме своих "мудрых"
мыслей не высказывай... _________________ Всех их вместе переведём! |
|
Вернуться к началу |
|
|
SergeyK
Зарегистрирован: 02.12.2003 Сообщения: 1278
|
Добавлено: Вт Ноя 02, 2004 12:43 pm Заголовок сообщения: |
|
|
Аксель, 5 баллов!!! |
|
Вернуться к началу |
|
|
АнС RRC2008
Зарегистрирован: 08.11.2003 Сообщения: 2818
|
Добавлено: Вт Ноя 02, 2004 2:07 pm Заголовок сообщения: Re: Кодировка Лемпела-Зива |
|
|
Virtual_Killer писал(а): | Как говорит один лектор: "Теория без практики - слепа, практика без теории - невозможна." |
Blind Killer. |
|
Вернуться к началу |
|
|
Virtual_Killer
Зарегистрирован: 25.03.2004 Сообщения: 610 Откуда: Чекагинск
|
Добавлено: Ср Ноя 03, 2004 3:59 am Заголовок сообщения: Re: Кодировка Лемпела-Зива |
|
|
Axel писал(а): | в этом файле сжаты (lzSS) ДВА блока текста,
я намеренно забил заголовки этих блоков нулями (00h)...
кодировка, для упрощения задачи - windows-1251. |
ОК, попробую. _________________ Не поймите меня правильно |
|
Вернуться к началу |
|
|
CaH4e3
Зарегистрирован: 21.01.2004 Сообщения: 195
|
Добавлено: Чт Ноя 04, 2004 3:20 pm Заголовок сообщения: |
|
|
Хыхы... Пожалуй пора приниматься за последнюю часть доки по ромхакингу, а то сжатие я оставил на потом, хотя, как погляжу. зря... ;)
Не слышал, что тут было раньше, и о чем вообще спор, но...
Киллер, ты не учел один момент: в МТЕ кодировке весь словарь известен заранее, тоесть по найденному в тексте индексу словаря можно вставить любой недостающий кусок. С LZ дело обстоит иначе, индекс ссылается на часть распакованных до сих пор данных, а в блоке запакованных данных этого куска просто нет... Ты не сможешь распаковать данные с любого места, не зная как выглядят распакованные данные до этого места, а только с самого первого байта закодированных данных, найти который - не такая тривиальная задача...
Честно говоря, до сих пор мне не попадалось чистого LZ алгоритма сжатия текста или других данных, все они были как-либо усложнены, а цена усложнения в том, что в запакованных данных нет "незапакованных данных"... Тоесть, это не чередования несжатых кусков с кодами сжатия, а набор ТОЛЬКО одних кодов сжатия, как бы они не выглядели. Исправив один лишь байт даже в тех данных, что кажутся несжатыми, мы рискуем изменить КОД для декомпрессора, тем самым изменив ход всей дальнейшей распаковки... |
|
Вернуться к началу |
|
|
CaH4e3
Зарегистрирован: 21.01.2004 Сообщения: 195
|
Добавлено: Чт Ноя 04, 2004 3:54 pm Заголовок сообщения: |
|
|
Хыхы... Аксель, жутко знакомый алгоритм ;) В HM&M для GBC используется точно такой же, с разницей в том, что в указателях на повторные данные старший и младший байты поменяны местами и увеличены на 1. :) |
|
Вернуться к началу |
|
|
Axel Советник
Зарегистрирован: 14.11.2003 Сообщения: 680
|
Добавлено: Чт Ноя 04, 2004 5:22 pm Заголовок сообщения: |
|
|
CaH4e3 писал(а): | Хыхы... Аксель, жутко знакомый алгоритм В HM&M для GBC используется точно такой же, с разницей в том, что в указателях на повторные данные старший и младший байты поменяны местами и увеличены на 1. |
я упаковывал высказывания V_Killer'а сжималкой по алгоритму
GBA LZSS, хотя не думаю, что Нинтенда меняет алгоритмы
распаковки встроенные в биос её приставок...
просто видимо сказалось, что GBA big endian а у GBC, видимо little endian архитектуры...
EDIT:
кстати, в сети можно найти .dll'ку под названием lunar (un)compress...
познавательная, однако штучка...
(правда, я не её использовал) _________________ Всех их вместе переведём! |
|
Вернуться к началу |
|
|
CaH4e3
Зарегистрирован: 21.01.2004 Сообщения: 195
|
Добавлено: Чт Ноя 04, 2004 6:35 pm Заголовок сообщения: |
|
|
Алгоритм, кстати, несколько отличается... Возможно, смещение назад от текущего байта кодируется другим количеством бит - для GBC окно адапивного алгоритма равнялось двум килобайтам, так что перекрывало всю nametable RAM... Я упаковывал те же самые тексты своим запаковщиком по GBC'шному алгоритму, они сжимаются чуть хуже ;) Даже если размер окна прежний, скорее всего он увеличен на пару байт, за счет самых ближних битов, кодировать которые не имеет смысла (расстояние до которых меньше чем три байта)... ;) |
|
Вернуться к началу |
|
|
|
|
Вы не можете начинать темы Вы можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
Powered by phpBB © 2001, 2005 phpBB Group
|